@sma1lboy/kobe 0.7.41 → 0.7.42
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 +211 -172
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -1,104 +1,143 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
|
-
var iL=Object.defineProperty;var lL=(f)=>f;function aL(f,J){this[f]=lL.bind(null,J)}var jf=(f,J)=>{for(var Y in J)iL(f,Y,{get:J[Y],enumerable:!0,configurable:!0,set:aL.bind(J,Y)})};var k=(f,J)=>()=>(f&&(J=f(f=0)),J);var _X=import.meta.require;import{basename as $L}from"path";function rL(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 oX(f,J){let Y;try{Y=rL(f)}catch{return!1}return Y.test(J)||Y.test($L(J))}var nQ=()=>{};var X9={};jf(X9,{prevVendorWithin:()=>dQ,nextVendorWithin:()=>qY,nextVendor:()=>pL,isBuiltinVendor:()=>H1,coerceVendorId:()=>iY,BUILTIN_VENDORS:()=>dY,ALL_VENDORS:()=>cf});function H1(f){return f==="claude"||f==="codex"||f==="copilot"}function pL(f){let J=cf.indexOf(f);return cf[(J+1)%cf.length]??cf[0]}function qY(f,J){if(f.length===0)return J;let Y=f.indexOf(J);return f[(Y+1)%f.length]??f[0]??J}function dQ(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 U1=k(()=>{dY=["claude","codex","copilot"],cf=[...dY]});var sX;var Z9=k(()=>{sX={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.41",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 q9}from"crypto";import{homedir as oL}from"os";import{join as lY}from"path";function Q9(){return process.env.KOBE_DEV==="1"}function OJ(){return process.env.KOBE_HOME_DIR??oL()}function ef(){return lY(OJ(),".kobe")}function c1(){return lY(OJ(),".config","kobe","state.json")}function sL(){return lY(ef(),"settings")}function H9(){return lY(sL(),"keybindings.yaml")}function iQ(){return lY(ef(),"issue-assets")}function tX(f,J,Y){let z=q9("sha1").update(`${J}@${f}:${Y??22}`).digest("hex").slice(0,16);return lY(ef(),"ssh",`${z}.sock`)}function B9(f){let J=q9("sha1").update(f).digest("hex").slice(0,16);return lY(ef(),"worktree-init",J)}var lf=()=>{};var W9={};jf(W9,{repoSlug:()=>aY,releasePageUrl:()=>pQ,recommendedGlobalInstallCommand:()=>$Q,isNewerSemver:()=>lQ,fetchReleaseSummaries:()=>fM,fetchReleaseNotesRange:()=>rQ,fetchReleaseNotes:()=>eL,compareSemver:()=>eX,checkLatestVersion:()=>wG,UPDATE_SCRIPT_URL:()=>fZ,UPDATE_COMMAND:()=>hJ,PACKAGE_NAME:()=>aQ,CURRENT_VERSION:()=>s0});function aY(){let f=sX.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 $Q(){return`npm install -g ${aQ}@latest`}async function tL(f){let J=new AbortController,Y=setTimeout(()=>J.abort(),JZ);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 lQ(f,J){return eX(f,J)>0}function eX(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:lQ(J,s0)};if(Q9()&&!f.force)return null;let Y=await tL(aQ);if(!Y)return null;return{current:s0,latest:Y,hasUpdate:lQ(Y,s0)}}function j9(f){if(typeof f!=="string")return null;return f.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function eL(f){let J=aY();if(!J)return null;let Y=`v${f}`,z=new AbortController,G=setTimeout(()=>z.abort(),JZ);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 rQ(f){let J=aY();if(!J)return[];let Y=f.limit??100,z=new AbortController,G=setTimeout(()=>z.abort(),JZ);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=j9(Q.tag_name);if(!H||typeof Q.html_url!=="string"||typeof Q.body!=="string")return null;if(eX(H,f.current)<=0)return null;if(eX(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 fM(f=12){let J=aY();if(!J)return[];let Y=new AbortController,z=setTimeout(()=>Y.abort(),JZ);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=j9(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 pQ(f){let J=aY();if(!J)return null;return`https://github.com/${J}/releases/tag/v${f}`}var s0,aQ,fZ="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",hJ,JZ=3000;var D1=k(()=>{Z9();lf();s0=sX.version,aQ=sX.name;hJ=`curl -fsSL ${fZ} | sh`});import{spawn as JM,spawnSync as YM}from"child_process";import{existsSync as K9}from"fs";import{mkdir as zM,readFile as GM,readdir as XM}from"fs/promises";function $Y(f){return`'${f.replace(/'/g,"'\\''")}'`}function ZM(f){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(f)?f:$Y(f)}function D9(f){return f.map($Y).join(" ")}function qM(f,J){let Y=D9(f);return J?`cd ${$Y(J)} && ${Y}`:Y}function QM(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 L9(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=JM(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 YZ{isRemote=!1;run(f,J={}){return L9(f,{cwd:J.cwd,env:J.env?{...process.env,...J.env}:process.env,signal:J.signal})}async exists(f){return K9(f)}existsSync(f){return K9(f)}async mkdirp(f){await zM(f,{recursive:!0})}async readFile(f){try{return await GM(f,"utf8")}catch{return null}}async readdir(f){try{return await XM(f)}catch{return[]}}wrapCommand(f){return f}ensureReady(){}}class uz{spec;spawn;isRemote=!0;masterUp=!1;spawnAsync;constructor(f,J=U9,Y){this.spec=f;this.spawn=J;this.spawnAsync=Y??(this.spawn===U9?HM: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=`${QM(J.env)}${D9(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}),qM(["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`${
|
|
3
|
+
var AM=Object.defineProperty;var gM=(f)=>f;function RM(f,J){this[f]=gM.bind(null,J)}var Hf=(f,J)=>{for(var Y in J)AM(f,Y,{get:J[Y],enumerable:!0,configurable:!0,set:RM.bind(J,Y)})};var N=(f,J)=>()=>(f&&(J=f(f=0)),J);var eX=import.meta.require;import{basename as CM}from"path";function NM(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 fZ(f,J){let Y;try{Y=NM(f)}catch{return!1}return Y.test(J)||Y.test(CM(J))}var _Q=()=>{};var O9={};Hf(O9,{prevVendorWithin:()=>oQ,nextVendorWithin:()=>HY,nextVendor:()=>yM,isBuiltinVendor:()=>H1,coerceVendorId:()=>iY,BUILTIN_VENDORS:()=>dY,ALL_VENDORS:()=>cf});function H1(f){return f==="claude"||f==="codex"||f==="copilot"}function yM(f){let J=cf.indexOf(f);return cf[(J+1)%cf.length]??cf[0]}function HY(f,J){if(f.length===0)return J;let Y=f.indexOf(J);return f[(Y+1)%f.length]??f[0]??J}function oQ(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 U1=N(()=>{dY=["claude","codex","copilot"],cf=[...dY]});var JZ;var A9=N(()=>{JZ={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.42",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 g9}from"crypto";import{homedir as kM}from"os";import{join as lY}from"path";function R9(){return process.env.KOBE_DEV==="1"}function gJ(){return process.env.KOBE_HOME_DIR??kM()}function J1(){return lY(gJ(),".kobe")}function c1(){return lY(gJ(),".config","kobe","state.json")}function SM(){return lY(J1(),"settings")}function C9(){return lY(SM(),"keybindings.yaml")}function sQ(){return lY(J1(),"issue-assets")}function YZ(f,J,Y){let z=g9("sha1").update(`${J}@${f}:${Y??22}`).digest("hex").slice(0,16);return lY(J1(),"ssh",`${z}.sock`)}function N9(f){let J=g9("sha1").update(f).digest("hex").slice(0,16);return lY(J1(),"worktree-init",J)}var af=()=>{};var b9={};Hf(b9,{repoSlug:()=>aY,releasePageUrl:()=>YH,recommendedGlobalInstallCommand:()=>fH,isNewerSemver:()=>tQ,fetchReleaseSummaries:()=>uM,fetchReleaseNotesRange:()=>JH,fetchReleaseNotes:()=>TM,compareSemver:()=>zZ,checkLatestVersion:()=>PG,UPDATE_SCRIPT_URL:()=>GZ,UPDATE_COMMAND:()=>PJ,PACKAGE_NAME:()=>eQ,CURRENT_VERSION:()=>t0});function aY(){let f=JZ.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 fH(){return`npm install -g ${eQ}@latest`}async function IM(f){let J=new AbortController,Y=setTimeout(()=>J.abort(),XZ);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 tQ(f,J){return zZ(f,J)>0}function zZ(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 PG(f={}){let J=process.env.KOBE_FAKE_UPDATE;if(J)return{current:t0,latest:J,hasUpdate:tQ(J,t0)};if(R9()&&!f.force)return null;let Y=await IM(eQ);if(!Y)return null;return{current:t0,latest:Y,hasUpdate:tQ(Y,t0)}}function y9(f){if(typeof f!=="string")return null;return f.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function TM(f){let J=aY();if(!J)return null;let Y=`v${f}`,z=new AbortController,G=setTimeout(()=>z.abort(),XZ);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 JH(f){let J=aY();if(!J)return[];let Y=f.limit??100,z=new AbortController,G=setTimeout(()=>z.abort(),XZ);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=y9(Q.tag_name);if(!H||typeof Q.html_url!=="string"||typeof Q.body!=="string")return null;if(zZ(H,f.current)<=0)return null;if(zZ(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 uM(f=12){let J=aY();if(!J)return[];let Y=new AbortController,z=setTimeout(()=>Y.abort(),XZ);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=y9(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 YH(f){let J=aY();if(!J)return null;return`https://github.com/${J}/releases/tag/v${f}`}var t0,eQ,GZ="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",PJ,XZ=3000;var D1=N(()=>{A9();af();t0=JZ.version,eQ=JZ.name;PJ=`curl -fsSL ${GZ} | sh`});import{spawn as EM,spawnSync as xM}from"child_process";import{existsSync as S9}from"fs";import{mkdir as wM,readFile as hM,readdir as PM}from"fs/promises";function $Y(f){return`'${f.replace(/'/g,"'\\''")}'`}function vM(f){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(f)?f:$Y(f)}function T9(f){return f.map($Y).join(" ")}function mM(f,J){let Y=T9(f);return J?`cd ${$Y(J)} && ${Y}`:Y}function cM(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 vG(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 u9(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=EM(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 ZZ{isRemote=!1;run(f,J={}){return u9(f,{cwd:J.cwd,env:J.env?{...process.env,...J.env}:process.env,signal:J.signal})}async exists(f){return S9(f)}existsSync(f){return S9(f)}async mkdirp(f){await wM(f,{recursive:!0})}async readFile(f){try{return await hM(f,"utf8")}catch{return null}}async readdir(f){try{return await PM(f)}catch{return[]}}wrapCommand(f){return f}ensureReady(){}}class uz{spec;spawn;isRemote=!0;masterUp=!1;spawnAsync;constructor(f,J=I9,Y){this.spec=f;this.spawn=J;this.spawnAsync=Y??(this.spawn===I9?nM:async(z,G)=>this.spawn(z,G))}ensureReady(){if(this.masterUp)return;if(this.spawn([...vG(this.spec,{batch:!0}),"-O","check"]).exitCode===0){this.masterUp=!0;return}let J=[...vG(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=`${cM(J.env)}${T9(f)}`,z=J.cwd?`cd ${$Y(J.cwd)} && ${Y}`:Y;return this.spawnAsync([...vG(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([...vG(this.spec,{batch:!0}),mM(["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`${vG(this.spec,{tty:J.tty}).map(vM).join(" ")} ${$Y(Y)}`}}var I9=(f,J)=>{let[Y,...z]=f,G=xM(Y??"",z,{env:J?{...process.env,...J}:process.env,encoding:"utf8",shell:!1});return{stdout:G.stdout??"",stderr:G.stderr??"",exitCode:G.status??-1}},nM=(f,J,Y)=>u9(f,{env:J?{...process.env,...J}:process.env,signal:Y?.signal});var zH=()=>{};import{spawnSync as dM}from"child_process";import{platform as iM}from"os";function E9(f,J,Y){return{service:lM,account:Y?`${J}@${f}:${Y}`:`${J}@${f}`}}function XH(f=GH){return f.platform()==="darwin"}function x9(f,J,Y=GH){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 qZ(f,J=GH){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 GH,lM="kobe-remote-ssh";var ZH=N(()=>{GH={run(f){let[J,...Y]=f,z=dM(J??"",Y,{encoding:"utf8",shell:!1});return{stdout:z.stdout??"",exitCode:z.status??-1}},platform(){return iM()}}});import{mkdirSync as aM,readFileSync as $M,renameSync as pM,writeFileSync as rM}from"fs";import{dirname as _M}from"path";function nf(){try{let f=$M(c1(),"utf8"),J=JSON.parse(f);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return{}}function w9(f){let J=c1();aM(_M(J),{recursive:!0});let Y=`${J}.tmp`;rM(Y,JSON.stringify(f,null,2),"utf8"),pM(Y,J)}function Ez(f){let J=nf();if(f(J)!==!1)w9(J);return J}function pY(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 h9(f){w9(f)}var rY=N(()=>{af()});var nJ={};Hf(nJ,{statePath:()=>tM,setRepoInitOverride:()=>eM,setPersistedString:()=>$f,resolveRepoRoot:()=>vJ,resolveMainRepoRoot:()=>sM,removeSavedRepo:()=>jH,remoteRepoKey:()=>c9,normalizeSavedRepos:()=>HH,isRemoteRepoKey:()=>Y1,isRemoteProjectsEnabled:()=>WH,isGitRepo:()=>oM,getSavedRepos:()=>O1,getRepoInitOverride:()=>BH,getRemoteRepos:()=>VH,getRemoteRepoConfig:()=>cJ,getPersistedString:()=>bf,getCustomEngineIds:()=>QH,addSavedRepo:()=>mJ,addRemoteRepo:()=>KH});import{spawnSync as qH}from"child_process";import{realpathSync as P9}from"fs";function vJ(f){if(Y1(f))return f;let J=qH("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(P9(f)===P9(Y))return f}catch{}return Y}function oM(f){if(Y1(f))return!1;let J=qH("git",["rev-parse","--is-inside-work-tree"],{cwd:f,encoding:"utf8",shell:!1});return J.status===0&&(J.stdout??"").trim()==="true"}function sM(f){if(Y1(f))return f;let J=qH("git",["worktree","list","--porcelain"],{cwd:f,encoding:"utf8",shell:!1});if(J.status!==0)return vJ(f);return(J.stdout??"").split(/\r?\n/).find((z)=>z.startsWith("worktree "))?.slice(9).trim()||vJ(f)}function tM(){return c1()}function QZ(f){let J=f.savedRepos;if(!Array.isArray(J))return[];return J.filter((Y)=>typeof Y==="string")}function O1(){return QZ(nf())}function bf(f){let J=nf()[f];return typeof J==="string"?J:void 0}function $f(f,J){pY({[f]:J})}function QH(){let f=nf().customEngineIds;if(!Array.isArray(f))return[];return f.filter((J)=>typeof J==="string"&&J.trim().length>0)}function mJ(f){let J=vJ(f),Y={added:!1,path:J,total:0};return Ez((z)=>{let G=QZ(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 HH(){let f=O1(),J=new Set,Y=[],z=!1;for(let G of f){let X=vJ(G);if(X!==G)z=!0;if(J.has(X)){z=!0;continue}J.add(X),Y.push(X)}if(!z)return;pY({savedRepos:Y})}function v9(f){let J=f.repoConfigs;if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function m9(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 BH(f){return m9(v9(nf())[vJ(f)])}function eM(f,J){let Y=vJ(f),z={};return Ez((G)=>{let X={...v9(G)},q=m9(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 jH(f){let J={removed:!1,path:f,total:0};return Ez((Y)=>{let z=QZ(Y);if(!z.includes(f))return J={removed:!1,path:f,total:z.length},!1;if(Y.savedRepos=z.filter((G)=>G!==f),Y1(f)){let G=HZ(Y);if(f in G){let X={...G};delete X[f],Y.remoteRepos=X}}J={removed:!0,path:f,total:z.length-1};return}),J}function Y1(f){return f.startsWith("ssh://")}function WH(){return nf()["experimental.remoteProjects"]===!0}function c9(f,J,Y){return Y?`ssh://${J}@${f}:${Y}`:`ssh://${J}@${f}`}function HZ(f){let J=f.remoteRepos;if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function cJ(f){return HZ(nf())[f]??null}function VH(){return HZ(nf())}function KH(f){let J=c9(f.host,f.user,f.port),Y=!1;return Ez((z)=>{let G={...HZ(z)};G[J]=f,z.remoteRepos=G;let X=QZ(z);if(Y=!X.includes(J),Y)z.savedRepos=[...X,J];return}),{key:J,added:Y}}var Af=N(()=>{af();rY()});var i9={};Hf(i9,{runAddRemote:()=>YF,parseRemoteFlags:()=>d9});import{createInterface as fF}from"readline";function d9(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)fJ(`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(n9),process.exit(0);break;default:fJ(`unknown flag "${z}"`)}}return J}function fJ(f){process.stderr.write(`kobe add --remote: ${f}
|
|
5
5
|
|
|
6
|
-
${
|
|
7
|
-
`),J.close(),X(q)})})}async function
|
|
6
|
+
${n9}`),process.exit(2)}async function JF(f){let J=fF({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 YF(f){if(!WH())fJ("remote projects are experimental and disabled \u2014 enable Settings \u2192 Dev \u2192 Experimental \u2192 Remote projects first");let J=d9(f);if(!J.host)fJ("--host is required");if(!J.user)fJ("--user is required");if(!J.path)fJ("--path (remote base path) is required");if(J.key&&J.password)fJ("choose ONE of --key or --password, not both");if(!J.key&&!J.password)fJ("an auth method is required: --key [path] or --password");let Y;if(J.password){if(!XH())fJ("--password needs the macOS keychain (unsupported on this platform)");let X=E9(J.host,J.user,J.port),q=await JF(`Password for ${J.user}@${J.host}: `);if(q.length===0)fJ("empty password");if(!x9(X,q))fJ("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}=KH({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 zF(J,Y)}async function zF(f,J){if(J.kind==="password"&&!XH())return;let Y=J.kind==="key"?{kind:"key",keyPath:J.keyPath}:{kind:"password",getPassword:()=>qZ(J.keychainRef)},z={host:f.host,user:f.user,port:f.port,auth:Y,controlPath:YZ(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 n9;var l9=N(()=>{af();zH();ZH();Af();n9=`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
|
-
`}var n1=3,
|
|
15
|
-
`}function
|
|
16
|
-
`)}catch{}}function
|
|
13
|
+
`});function BZ(f){return f.remoteVersion>=f.localMin&&f.localVersion>=f.remoteMin}function a9(f,J){if(!f)return!1;return f!==J}function XF(f){return typeof f==="string"&&GF.has(f)}function $9(f){if(!Array.isArray(f))return null;let J=new Set;for(let Y of f)if(XF(Y))J.add(Y);return J.size>0?J:null}function JJ(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 mG(f){return`${JSON.stringify(f)}
|
|
14
|
+
`}var n1=3,BY=2,UH,GF;var _Y=N(()=>{UH=["task.snapshot","issue.snapshot","active-task","update","engine-state","ui-prefs","keybindings","task.jobs","worktree.changes","session.deliver"],GF=new Set(UH)});import{createHash as ZF}from"crypto";import{homedir as jZ,tmpdir as qF}from"os";import{join as oY}from"path";function QF(f){return ZF("sha1").update(f).digest("hex").slice(0,8)}function LH(f,J,Y,z){if(Buffer.byteLength(f,"utf8")<=DH)return f;let G=QF(J),X=z===void 0?"":`-${z}`,q=oY(qF(),`kobe-${G}-${Y}${X}.sock`);if(Buffer.byteLength(q,"utf8")<=DH)return q;throw Error(`kobe socket path exceeds ${DH} bytes even after fallback: ${q}`)}function RJ(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 LH(oY(Y,".kobe","daemon.sock"),Y,"daemon");let z=process.env.XDG_RUNTIME_DIR;if(z&&z.length>0)return LH(oY(z,"kobe.sock"),z,"daemon");let G=jZ();return LH(oY(G,".kobe","daemon.sock"),G,"daemon")}function dJ(f=process.env.KOBE_HOME_DIR??jZ()){let J=process.env.KOBE_DAEMON_PID_PATH;if(J&&J.length>0)return J;return oY(f,".kobe","daemon.pid")}function WZ(f=process.env.KOBE_HOME_DIR??jZ()){return oY(f,".kobe","daemon.log")}function p9(f=process.env.KOBE_HOME_DIR??jZ()){return oY(f,".kobe","client.log")}var DH=100;var xz=()=>{};import{appendFile as r9,mkdir as HF}from"fs/promises";import{dirname as BF}from"path";function VZ(f){s9=f}function jF(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 t9(f,J,Y=new Date){return`[${Y.toISOString()}] client ${s9} [${f}] pid=${process.pid}: ${J}
|
|
15
|
+
`}function WF(){if(_9)return;_9=!0;try{process.stderr.write(`[kobe] client log write failed; continuing without it
|
|
16
|
+
`)}catch{}}function e9(f){let J=p9();o9=o9.then(async()=>{try{await r9(J,f)}catch(Y){if(Y?.code==="ENOENT")await HF(BF(J),{recursive:!0}),await r9(J,f);else throw Y}}).catch(()=>WF())}function iJ(f,J){e9(t9(f,J))}function d1(f,J){let Y=jF(J);e9(t9(f,Y.stack??Y.message))}function fW(){if(MH||FH)return;MH=(f)=>d1("crash-net",f),FH=(f)=>d1("crash-net",f),process.on("unhandledRejection",MH),process.on("uncaughtException",FH)}var s9="client",_9=!1,o9,MH,FH;var sY=N(()=>{xz();o9=Promise.resolve()});import{connect as VF}from"net";import{StringDecoder as KF}from"string_decoder";class i1{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(mG({type:"request",id:z,name:f,payload:J})),G}openSocket(){return new Promise((f,J)=>{let Y=VF(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 KF("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(`
|
|
17
17
|
`);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(`
|
|
18
|
-
`)}}onLine(f){let J;try{J=JSON.parse(f)}catch(z){
|
|
19
|
-
`).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&&
|
|
20
|
-
`).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&&
|
|
21
|
-
`).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&&
|
|
22
|
-
`)){let G=z.trim();if(!G)continue;let X;try{X=JSON.parse(G)}catch{continue}if(!
|
|
23
|
-
`);if(J?.markerPath){let X=
|
|
18
|
+
`)}}onLine(f){let J;try{J=JSON.parse(f)}catch(z){d1("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 cG=N(()=>{_Y();sY()});function KZ(f){return UF.includes(f)}function JW(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 UF;var UZ=N(()=>{UF=["session-start","turn-start","turn-complete","turn-failed","awaiting-input","session-end"]});function DF(){let f=process.env.KOBE_ENGINE_STATE_TTL_MS;if(f===void 0)return YW;let J=Number(f);return Number.isFinite(J)&&J>0?J:YW}class OH{bus;staleMs;now;activity=new Map;constructor(f,J=DF(),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=JW(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 YW=600000;var zW=N(()=>{UZ()});import{spawnSync as LF}from"child_process";import{existsSync as MF,statSync as FF}from"fs";import{homedir as OF}from"os";import nG from"path";async function GW(f=AF){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(nG.join(G,".claude","local","claude"));if(X)return X;let q=f.env("NVM_BIN");if(q){let B=Y(nG.join(q,"claude"));if(B)return B}let Q=nG.join(G,".nvm","versions","node"),H=f.readdir(Q).sort().reverse();for(let B of H){let V=Y(nG.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(nG.join(G,B));if(V)return V}throw new DZ(J)}var DZ,AF;var XW=N(()=>{DZ=class DZ 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}};AF={fileExists(f){try{return FF(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return OF()},which(f){let J=process.platform==="win32"?"where":"which",Y=LF(J,[f],{encoding:"utf8"});if(Y.status!==0)return;let z=Y.stdout.split(`
|
|
19
|
+
`).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&&MF(G)?G:void 0}return z},readdir(f){try{return eX("fs").readdirSync(f)}catch{return[]}}}});import{spawnSync as gF}from"child_process";import{existsSync as RF,statSync as CF}from"fs";import{homedir as NF}from"os";import ZW from"path";async function qW(f=yF){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(ZW.join(X,"codex"));if(q)return q}for(let q of[".local/bin/codex",".bun/bin/codex","bin/codex"]){let Q=Y(ZW.join(G,q));if(Q)return Q}throw new LZ(J)}var LZ,yF;var QW=N(()=>{LZ=class LZ 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}};yF={fileExists(f){try{return CF(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return NF()},which(f){let J=process.platform==="win32"?"where":"which",Y=gF(J,[f],{encoding:"utf8"});if(Y.status!==0)return;let z=Y.stdout.split(`
|
|
20
|
+
`).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&&RF(G)?G:void 0}return z},readdir(f){try{return eX("fs").readdirSync(f)}catch{return[]}}}});import{spawnSync as bF}from"child_process";import{existsSync as kF,statSync as SF}from"fs";import{homedir as IF}from"os";import jY from"path";async function HW(f=TF){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 K=Y(jY.join(V,j));if(K)return K}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=[jY.join(H,".npm-global/bin"),jY.join(H,".local/bin"),jY.join(H,".bun/bin"),jY.join(H,"bin")];if(f.platform()==="win32"){let V=f.env("APPDATA"),j=f.env("LOCALAPPDATA");if(B.unshift(jY.join(H,"AppData/Roaming/npm")),V)B.unshift(jY.join(V,"npm"));if(j)B.unshift(jY.join(j,"npm"))}for(let V of B){let j=X(V);if(j)return j}throw new MZ(J)}var MZ,TF;var BW=N(()=>{MZ=class MZ 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}};TF={fileExists(f){try{return SF(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return IF()},which(f){let J=process.platform==="win32"?"where":"which",Y=bF(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("copilot:")&&z.includes("aliased to")){let G=z.split("aliased to")[1]?.trim();return G&&kF(G)?G:void 0}return z},platform(){return process.platform}}});import{readFileSync as uF,statSync as EF}from"fs";import{homedir as xF}from"os";import WY from"path";function wF(f,J){let Y=f("CLAUDE_CONFIG_DIR")?.trim();if(Y)return WY.join(Y,".claude.json");return WY.join(J,".claude.json")}function hF(f,J){let z=f("CODEX_HOME")?.trim()??WY.join(J,".codex");return WY.join(z,"auth.json")}function PF(f,J){let z=f("COPILOT_HOME")?.trim()??WY.join(J,".copilot");return WY.join(z,"config.json")}function vF(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 OZ(f){try{return{found:!0,path:await f()}}catch(J){if(J instanceof DZ||J instanceof LZ||J instanceof MZ)return{found:!1,error:"not found on PATH"};return{found:!1,error:J instanceof Error?J.message:String(J)}}}async function jW(f){return(await Promise.all([["claude",()=>f.findClaudeBinary()],["codex",()=>f.findCodexBinary()],["copilot",()=>f.findCopilotBinary()]].map(async([z,G])=>(await OZ(G)).found?z:null))).filter((z)=>z!==null)}function mF(f=wz){if(f!==wz)return jW(f);if(FZ)return FZ;let J=jW(f).catch((Y)=>{throw FZ=null,Y});return FZ=J,J}async function lJ(f=wz){return[...await mF(f),...QH()]}async function AZ(f=wz){let J=await OZ(()=>f.findClaudeBinary()),Y=wF(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 gZ(f=wz){let J=await OZ(()=>f.findCodexBinary()),Y=hF(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=vF(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"],K=typeof j==="object"&&j!==null&&!Array.isArray(j)?j:void 0,L=typeof K?.chatgpt_plan_type==="string"?K.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 RZ(f=wz){let J=await OZ(()=>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=PF(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(!AH(G))return{binary:J,account:{kind:"none"}};if(WW(G,["github_token","oauth_token","access_token","token","selectedUser","currentUser","user"]))return{binary:J,account:{kind:"oauth"}};return{binary:J,account:{kind:"none"}}}function AH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function WW(f,J,Y=0){if(Y>4||!AH(f))return!1;for(let[z,G]of Object.entries(f)){if(J.includes(z)&&typeof G==="string"&&G.length>0)return!0;if(AH(G)&&WW(G,J,Y+1))return!0}return!1}var wz,FZ=null;var tY=N(()=>{Af();XW();QW();BW();wz={readFile(f){try{EF(f)}catch(J){if(J.code==="ENOENT")return null;throw J}return uF(f,"utf8")},env(f){return process.env[f]},home(){return xF()},findClaudeBinary(){return GW()},findCodexBinary(){return qW()},findCopilotBinary(){return HW()}}});function VW(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 KW(f){return f.isMeta===!0||f.isCompactSummary===!0}function UW(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 Uu,mkdir as Du,readFile as cF,readdir as gH,stat as nF,unlink as Lu,writeFile as Mu}from"fs/promises";import{homedir as DW}from"os";import CZ from"path";function iF(f){return f.replace(/[/.]/g,"-")}async function dG(f){if(!f)return[];let J=CZ.join(DW(),".claude","projects",iF(f)),Y;try{Y=await gH(J)}catch{return[]}let z=[];for(let G of Y){if(!G.endsWith(".jsonl"))continue;let X=CZ.join(J,G),q=0;try{q=(await nF(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 LW(f){return(await dG(f))[0]?.mtimeMs??0}async function MW(f,J=dF){let Y=J.projectsDir(),z=await J.readdir(Y);for(let G of z){let X=CZ.join(Y,G,`${f}.jsonl`),q;try{q=await J.readFile(X)}catch{continue}return lF(aF(q,f))}return[]}function lF(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 aF(f,J){let Y=[];for(let z of f.split(`
|
|
22
|
+
`)){let G=z.trim();if(!G)continue;let X;try{X=JSON.parse(G)}catch{continue}if(!RH(X))continue;let q=$F(X,J);if(q)Y.push(q)}return Y}function $F(f,J){if(KW(f))return null;let Y=RH(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=VW(Y.content);if(z==="user"&&UW(G))return null;let X=typeof f.timestamp==="string"?f.timestamp:new Date().toISOString(),q=typeof f.sessionId==="string"?f.sessionId:J,Q=pF(Y.usage);return Q?{role:z,blocks:G,timestamp:X,sessionId:q,usage:Q}:{role:z,blocks:G,timestamp:X,sessionId:q}}function pF(f){if(!RH(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 RH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var dF;var CH=N(()=>{dF={projectsDir(){return CZ.join(DW(),".claude","projects")},async readdir(f){try{return await gH(f)}catch{return[]}},async readFile(f){return await cF(f,"utf8")},async pathExists(f){try{return await gH(f),!0}catch{return!1}}}});import{fileURLToPath as OW}from"url";function Cf(){if(import.meta.url.endsWith(".js"))return["kobe"];let J=OW(new URL("./index.ts",import.meta.url)),Y=OW(import.meta.resolve("@opentui/solid/preload"));return[process.execPath,"--preload",Y,"--conditions=browser",J]}var aJ=()=>{};function NH(f,J={}){if(J.bareSafe&&rF.test(f))return f;return`'${f.replace(/'/g,"'\\''")}'`}function NZ(f,J={}){return f.map((Y)=>NH(Y,J)).join(" ")}var rF;var yH=N(()=>{rF=/^[A-Za-z0-9_/.:=-]+$/});function aG(f){return`kobe-hidden-${f.replace(/[^A-Za-z0-9_-]/g,"")||"session"}`}function gW(f){let J=Number.parseInt(f.replace(/^@/,""),10);return Number.isFinite(J)&&J>=0?1000+J:1000}function Jz(f){if(!Number.isFinite(f))return eY;return Math.max(_F,Math.min(oF,Math.round(f)))}function rJ(f){if(!Number.isFinite(f))return null;return Math.max(sF,Math.min(tF,Math.round(f)))}function Xf(f){return NH(f)}function g1(f){return NZ(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 bH(f){return`'${f.replace(/'/g,"'\\''")}'`}function RW(){return`clear; printf ${bH("\\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 CW(f,J){let Y=R1(f),z=J?.initScript?.trim();if(!z)return Y;let G=["{",z,"}"].join(`
|
|
23
|
+
`);if(J?.markerPath){let X=bH(J.markerPath),q=bH(eF(J.markerPath));return[`if [ ! -f ${X} ]; then`,G,`if [ $? -eq 0 ]; then mkdir -p ${q} && : > ${X}; fi`,"fi",Y].join(`
|
|
24
24
|
`)}return[G,Y].join(`
|
|
25
|
-
`)}function
|
|
26
|
-
`)}catch{}}}var
|
|
25
|
+
`)}function eF(f){let J=f.lastIndexOf("/");return J<=0?".":f.slice(0,J)}function AW(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 NW(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 yW(f){return`${g1([...f.cliInvocation,"update-page"])}`}function bW(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 KY(f,J={}){let Y=[...f,"tasks"];if(J.initialTaskId)Y.push("--initial-task-id",J.initialTaskId);return g1(Y)}function hz(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} || { ${AW(f.cwd)}; }`}return AW(f.cwd)}var eY=32,l1="tasks",fz="claude",YJ="ops",zJ="shell",iG="workspace_aux",kH=4,GJ="@kobe_hidden_shell_pane",A1="@kobe_hidden_tasks_pane",VY="@kobe_zen_panes",lG="@kobe_zen",$J="@kobe_tasks_width",_F=16,oF=120,yZ=60,$G=50,Yz="@kobe_right_width_pct",pJ="@kobe_ops_height_pct",sF=10,tF=90;var XJ=N(()=>{yH()});function a1(f){return!!f&&typeof f==="object"&&!Array.isArray(f)}function J3(f){return f.map((J)=>g1(["hook",J.verb]))}function Y3(f,J){if(!a1(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((Y)=>a1(Y)&&typeof Y.command==="string"&&J.some((z)=>Y.command.includes(z)))}function IW(f,J=Cf()){let Y={};for(let{event:z,matcher:G,verb:X}of f){let Q={hooks:[{type:"command",command:g1([...J,"hook",X])}]};if(G)Q.matcher=G;Y[z]=[Q]}return Y}function bZ(f,J,Y,z=Cf()){let G=J3(Y),{hooks:X,...q}=f,Q=a1(X)?{...X}:{},H=J?IW(Y,z):{};for(let{event:B}of Y){let j=(Array.isArray(Q[B])?Q[B]:[]).filter((K)=>!Y3(K,G));if(J&&Array.isArray(H[B]))j.push(...H[B]);if(j.length>0)Q[B]=j;else delete Q[B]}return Object.keys(Q).length>0?{...q,hooks:Q}:{...q}}function TW(f=Cf()){let J=g1([...f,"hook",SW]);return{[kW]:[{matcher:f3,hooks:[{type:"command",command:J}]}]}}function z3(f){if(!a1(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((J)=>a1(J)&&typeof J.command==="string"&&J.command.includes(SW))}function kZ(f,J,Y=Cf()){let{hooks:z,...G}=f,X=a1(z)?{...z}:{},q=kW,H=(Array.isArray(X[q])?X[q]:[]).filter((B)=>!z3(B));if(J)H.push(...TW(Y)[q]);if(H.length>0)X[q]=H;else delete X[q];return Object.keys(X).length>0?{...G,hooks:X}:{...G}}var kW="PostToolUse",f3="Bash",SW="worktree-created";var SH=N(()=>{aJ();XJ()});import{mkdir as G3,readFile as X3,writeFile as Z3}from"fs/promises";import{dirname as q3}from"path";async function Q3(f){try{let J=JSON.parse(await X3(f,"utf8"));return a1(J)?J:{}}catch{return{}}}async function Pz(f,J){try{let Y=await Q3(f),z=J(Y);if(JSON.stringify(z)===JSON.stringify(Y))return;await G3(q3(f),{recursive:!0}),await Z3(f,`${JSON.stringify(z,null,2)}
|
|
26
|
+
`)}catch{}}class pG{supportsHooks(){return!0}activityDetailFromPayload(f,J){return}supportsWorktreeSync(){return!1}async removeWorktreeSyncHook(f){}async installActivityHooks(f){await Pz(f,(J)=>bZ(J,!0,this.eventMap))}async removeActivityHooks(f){await Pz(f,(J)=>bZ(J,!1,this.eventMap))}async installWorktreeWatchHook(f){await Pz(f,(J)=>kZ(J,!0))}async removeWorktreeWatchHook(f){await Pz(f,(J)=>kZ(J,!1))}}var IH=N(()=>{SH()});import{homedir as H3}from"os";import{join as B3}from"path";function j3(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 W3(){return B3(H3(),".claude","settings.json")}function K3(f){if(!a1(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((J)=>a1(J)&&typeof J.command==="string"&&J.command.includes(V3))}function U3(f,J){let{hooks:Y,...z}=f,{WorktreeCreate:G,...X}=a1(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}}var uW,mu,V3="worktree-created",TH;var EW=N(()=>{IH();SH();uW=[{event:"SessionStart",verb:"session-start"},{event:"UserPromptSubmit",verb:"turn-start"},{event:"Stop",verb:"turn-complete"},{event:"StopFailure",verb:"turn-failed"},{event:"Notification",matcher:"permission_prompt",verb:"awaiting-input"},{event:"SessionEnd",verb:"session-end"}],mu=uW.map((f)=>f.event);TH=class TH extends pG{vendor="claude";eventMap=uW;globalSettingsPath(){return W3()}activityDetailFromPayload(f,J){if(f==="turn-failed")return{failure:j3(J.error_type)};if(f==="awaiting-input")return{waiting:"permission"};return}supportsWorktreeSync(){return!0}async removeWorktreeSyncHook(f){await Pz(f,(J)=>U3(J,null))}}});function uH(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(!D3(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 D3(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function xW(f){if(f.length===0)return!1;for(let J of f){if(J.type!=="text")return!1;let Y=(J.text??"").trim();if(!L3(Y)&&!M3(Y))return!1}return!0}function L3(f){return f.startsWith("<environment_context>")&&f.endsWith("</environment_context>")}function M3(f){return f.startsWith("# AGENTS.md instructions for ")&&f.includes(`
|
|
27
27
|
<INSTRUCTIONS>
|
|
28
|
-
`)&&f.endsWith("</INSTRUCTIONS>")}var
|
|
29
|
-
`)){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
|
|
30
|
-
`)){let G=z.trim();if(!G)continue;let X;try{X=JSON.parse(G)}catch{continue}if(!
|
|
31
|
-
`)){let G=z.trim();if(!G)continue;let X;try{X=JSON.parse(G)}catch{continue}if(!
|
|
32
|
-
`)){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
|
|
33
|
-
`)){let H=Q.trim();if(!H)continue;let B;try{B=JSON.parse(H)}catch{continue}if(!
|
|
34
|
-
`)){G++;let q=
|
|
35
|
-
`)){z++;let X=xW(G);if(!X||X.type!=="turn.completed")continue;let q=wW(X,0),Q={id:`codex:${J}:${q}:${z}`,timestampMs:q,source:"codex"};if(!Y||Q.timestampMs>=Y.timestampMs)Y=Q}return Y}function xW(f){let J=f.trim();if(!J)return null;try{let Y=JSON.parse(J);return hW(Y)?Y:null}catch{return null}}function wW(f,J){let Y=typeof f.timestamp==="string"?Date.parse(f.timestamp):Number.NaN;return Number.isFinite(Y)?Y:J}function hW(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var V3,xH,K3,wH,bZ;var hH=k(()=>{KH();bH();UY();V3={listSessionFiles:(f)=>cG(f),readFile:(f)=>uW(f,"utf8")};xH=class xH extends yZ{deps;vendor="claude";cache=new Map;constructor(f=V3){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=U3(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}};K3={findLatestRollout:(f)=>yH(f),readFile:(f)=>uW(f,"utf8")};wH=class wH extends yZ{deps;vendor="codex";cache=null;constructor(f=K3){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=D3(Y,J.path);return this.cache={path:J.path,mtimeMs:J.mtimeMs,marker:z},z}};bZ=class bZ extends yZ{vendor;constructor(f){super();this.vendor=f}supportsCompletionMarkers(){return!1}async latestCompletion(){return null}}});function g3(f){return{vendor:f,builtin:!1,displayName:f,defaultCommand:[f],history:L3,detectAccount:async()=>({binary:{found:!1,error:"custom engine: kobe has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new $G(f),createTurnDetector:()=>new bZ(f)}}function pf(f){return H1(f)?A3[f]:g3(f)}var L3,M3,F3,O3,A3;var UY=k(()=>{U1();tY();KH();KW();bH();TW();EH();hH();L3={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async latestTranscriptMtimeForWorktree(){return 0}},M3={async listSessionIdsForWorktree(f){return[...await cG(f)].sort((Y,z)=>Y.mtimeMs-z.mtimeMs).map((Y)=>Y.sessionId)},readHistory:(f)=>YW(f),latestTranscriptMtimeForWorktree:(f)=>JW(f)},F3={listSessionIdsForWorktree:(f)=>RW(f),readHistory:(f)=>kW(f),latestTranscriptMtimeForWorktree:(f)=>CW(f)},O3={listSessionIdsForWorktree:(f)=>bW(f),readHistory:(f)=>IW(f),latestTranscriptMtimeForWorktree:(f)=>SW(f)},A3={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:M3,detectAccount:(f)=>LZ(f),createHookAdapter:()=>new OH,createTurnDetector:()=>new xH},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:F3,detectAccount:(f)=>MZ(f),createHookAdapter:()=>new $G("codex"),createTurnDetector:()=>new wH},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:O3,detectAccount:(f)=>FZ(f),createHookAdapter:()=>new $G("copilot"),createTurnDetector:()=>new bZ("copilot")}}});function PW(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 SZ(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}`}function vW(f){return typeof f==="string"&&R3.includes(f)}var rG=(f)=>f,Sf="claude",R3;var I1=k(()=>{R3=["backlog","in_progress","in_review","done","canceled","error"]});function mW(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=PW(Y);return z.length>0?Buffer.from(z,"utf8").toString("utf8"):z}async function Pz(f,J=Sf){if(!f)return"";let{history:Y}=pf(J),z=await Y.listSessionIdsForWorktree(f);for(let G of z.slice(0,C3)){let X=mW(await Y.readHistory(G));if(X)return X}return""}async function cW(f,J){if(!J)return"";try{return mW(await pf(f).history.readHistory(J))}catch{return""}}var C3=8;var IZ=k(()=>{UY();I1()});function nW(f){let J=String(f),Y=J.length-1;return hf.context.id+(Y?String.fromCharCode(96+Y):"")+J}function mH(f){hf.context=f}function k3(){return{...hf.context,id:hf.getNextContextId(),count:0}}function Zz(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(()=>DY(q)));XJ.afterCreateOwner&&XJ.afterCreateOwner(q),e0=q,Kf=null;try{return C1(Q,!0)}finally{Kf=Y,e0=z}}function r(f,J){J=J?Object.assign({},EZ,J):EZ;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(oW(Y),XJ.afterCreateSignal)XJ.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 nH(Y,G)};return[sW.bind(Y),z]}function iW(f,J,Y){let z=sG(f,J,!0,T1,Y);if(mz&&j0&&j0.running)df.push(z);else qz(z)}function RJ(f,J,Y){let z=sG(f,J,!1,T1,Y);if(mz&&j0&&j0.running)df.push(z);else qz(z)}function Gf(f,J,Y){_W=P3;let z=sG(f,J,!1,T1,Y),G=_G&&u1(_G);if(G)z.suspense=G;if(!Y||!Y.render)z.user=!0;B1?B1.push(z):qz(z)}function U0(f,J,Y){Y=Y?Object.assign({},EZ,Y):EZ;let z=sG(f,J,!0,0,Y);if(z.observers=null,z.observerSlots=null,z.comparator=Y.equals||void 0,mz&&j0&&j0.running)z.tState=T1,df.push(z);else qz(z);return sW.bind(z)}function T3(f){return f&&typeof f==="object"&&"then"in f}function PZ(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=PH,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=PH,j0&&T&&B)j0.promises.delete(T),B=!1,C1(()=>{j0.running=!0,_(Q0,p)},!1);else _(Q0,p)}return Q0}function _(T,Q0){C1(()=>{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=_G&&u1(_G),Q0=O(),p=R();if(p!==void 0&&!q)throw p;if(Kf&&!Kf.user&&T)iW(()=>{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!==PH?Q:$f(()=>{try{return G(Q0,{value:O(),refetching:T})}catch(g0){p=g0}});if(p!==void 0){y(q,void 0,uZ(p),Q0);return}else if(!T3(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,uZ(D0.v),Q0);return D0}return V=!0,queueMicrotask(()=>V=!1),C1(()=>{C(j?"refreshing":"pending"),N()},!1),D0.then((g0)=>y(D0,g0,void 0,Q0),(g0)=>y(D0,void 0,uZ(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)iW(()=>(Y0=e0,t(!1)));else t(!1);return[z0,{refetch:(T)=>u3(Y0,()=>t(T)),mutate:M}]}function vZ(f){return C1(f,!1)}function $f(f){if(!vz&&Kf===null)return f();let J=Kf;Kf=null;try{if(vz)return vz.untrack(f);return f()}finally{Kf=J}}function k1(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 J1(f){Gf(()=>$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 mZ(){return Kf}function u3(f,J){let Y=e0,z=Kf;e0=f,Kf=null;try{return C1(J,!0)}catch(G){cZ(G)}finally{e0=Y,Kf=z}}function E3(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(mz||_G)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 C1(f,!1),Kf=e0=null,z?z.done:void 0})}function aW(f,J){let Y=sG(()=>$f(()=>{return Object.assign(f,{[S3]:!0}),f(J)}),void 0,!0,0);return Y.props=J,Y.observers=null,Y.observerSlots=null,Y.name=f.name,Y.component=f,qz(Y),Y.tValue!==void 0?Y.tValue:Y.value}function oW(f){if(e0){if(e0.sourceMap)e0.sourceMap.push(f);else e0.sourceMap=[f];f.graph=e0}if(XJ.afterRegisterGraph)XJ.afterRegisterGraph(f)}function CJ(f,J){let Y=Symbol("context");return{id:Y,Provider:v3(Y,J),defaultValue:f}}function u1(f){let J;return e0&&e0.context&&(J=e0.context[f.id])!==void 0?J:f.defaultValue}function x3(f){let J=U0(f),Y=U0(()=>cH(J()),void 0,{name:"children"});return Y.toArray=()=>{let z=Y();return Array.isArray(z)?z:z!=null?[z]:[]},Y}function sW(){let f=j0&&j0.running;if(this.sources&&(f?this.tState:this.state))if((f?this.tState:this.state)===T1)qz(this);else{let J=df;df=null,C1(()=>xZ(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 nH(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)C1(()=>{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 B1.push(X);if(X.observers)eW(X)}if(!q)X.state=T1;else X.tState=T1}if(df.length>1e6){if(df=[],N3)throw Error("Potential Infinite Loop Detected.");throw Error()}},!1)}return J}function qz(f){if(!f.fn)return;DY(f);let J=hZ;if($W(f,j0&&j0.running&&j0.sources.has(f)?f.tValue:f.value,J),j0&&!j0.running&&j0.sources.has(f))queueMicrotask(()=>{C1(()=>{j0&&(j0.running=!0),Kf=e0=f,$W(f,f.tValue,J),Kf=e0=null},!1)})}function $W(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(DY),f.tOwned=void 0;else f.state=T1,f.owned&&f.owned.forEach(DY),f.owned=null;return f.updatedAt=Y+1,cZ(q)}finally{Kf=X,e0=G}if(!f.updatedAt||f.updatedAt<=Y){if(f.updatedAt!=null&&"observers"in f)nH(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 sG(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!==I3)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(vz&&X.fn){let q=X.fn,[Q,H]=r(void 0,{equals:!1}),B=vz.factory(q,H);mf(()=>B.dispose());let V,j=()=>E3(H).then(()=>{if(V)V.dispose(),V=void 0});X.fn=(U)=>{if(Q(),j0&&j0.running){if(!V)V=vz.factory(q,j);return V.track(U)}return B.track(U)}}return XJ.afterCreateOwner&&XJ.afterCreateOwner(X),X}function oG(f){let J=j0&&j0.running;if((J?f.tState:f.state)===0)return;if((J?f.tState:f.state)===pG)return xZ(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<hZ)){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)qz(f);else if((J?f.tState:f.state)===pG){let G=df;df=null,C1(()=>xZ(f,Y[0]),!1),df=G}}}function C1(f,J){if(df)return f();let Y=!1;if(!J)df=[];if(B1)Y=!0;else B1=[];hZ++;try{let z=f();return w3(Y),z}catch(z){if(!Y)B1=null;df=null,cZ(z)}}function w3(f){if(df){if(mz&&j0&&j0.running)h3(df);else tW(df);df=null}if(f)return;let J;if(j0){if(!j0.promises.size&&!j0.queue.size){let{sources:z,disposed:G}=j0;B1.push.apply(B1,j0.effects),J=j0.resolve;for(let X of B1)"tState"in X&&(X.state=X.tState),delete X.tState;j0=null,C1(()=>{for(let X of G)DY(X);for(let X of z){if(X.value=X.tValue,X.owned)for(let q=0,Q=X.owned.length;q<Q;q++)DY(X.owned[q]);if(X.tOwned)X.owned=X.tOwned;delete X.tValue,delete X.tOwned,X.tState=0}lW(!1)},!1)}else if(j0.running){j0.running=!1,j0.effects.push.apply(j0.effects,B1),B1=null,lW(!0);return}}let Y=B1;if(B1=null,Y.length)C1(()=>_W(Y),!1);else XJ.afterUpdate&&XJ.afterUpdate();if(J)J()}function tW(f){for(let J=0;J<f.length;J++)oG(f[J])}function h3(f){for(let J=0;J<f.length;J++){let Y=f[J],z=j0.queue;if(!z.has(Y))z.add(Y),mz(()=>{z.delete(Y),C1(()=>{j0.running=!0,oG(Y)},!1),j0&&(j0.running=!1)})}}function P3(f){let J,Y=0;for(J=0;J<f.length;J++){let z=f[J];if(!z.user)oG(z);else f[Y++]=z}if(hf.context){if(hf.count){hf.effects||(hf.effects=[]),hf.effects.push(...f.slice(0,Y));return}mH()}if(hf.effects&&(hf.done||!hf.count))f=[...hf.effects,...f],Y+=hf.effects.length,delete hf.effects;for(J=0;J<Y;J++)oG(f[J])}function xZ(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<hZ))oG(G)}else if(X===pG)xZ(G,J)}}}function eW(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=pG;else z.state=pG;if(z.pure)df.push(z);else B1.push(z);z.observers&&eW(z)}}}function DY(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--)DY(f.tOwned[J]);delete f.tOwned}if(j0&&j0.running&&f.pure)fV(f,!0);else if(f.owned){for(J=f.owned.length-1;J>=0;J--)DY(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 fV(f,J){if(!J)f.tState=0,j0.disposed.add(f);if(f.owned)for(let Y=0;Y<f.owned.length;Y++)fV(f.owned[Y])}function uZ(f){if(f instanceof Error)return f;return Error(typeof f==="string"?f:"Unknown error",{cause:f})}function rW(f,J,Y){try{for(let z of J)z(f)}catch(z){cZ(z,Y&&Y.owner||null)}}function cZ(f,J=e0){let Y=dW&&J&&J.context&&J.context[dW],z=uZ(f);if(!Y)throw z;if(B1)B1.push({fn(){rW(z,Y,J)},state:T1});else rW(z,Y,J)}function cH(f){if(typeof f==="function"&&!f.length)return cH(f());if(Array.isArray(f)){let J=[];for(let Y=0;Y<f.length;Y++){let z=cH(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 v3(f,J){return function(z){let G;return RJ(()=>G=$f(()=>{return e0.context={...e0.context,[f]:z.value},x3(()=>z.children)}),void 0,J),G}}function pW(f){for(let J=0;J<f.length;J++)f[J]()}function c3(f,J,Y={}){let z=[],G=[],X=[],q=0,Q=J.length>1?[]:null;return mf(()=>pW(X)),()=>{let H=f()||[],B=H.length,V,j;return H[wZ],$f(()=>{let L,O,M,R,S,a,N,g,C;if(B===0){if(q!==0)pW(X),X=[],z=[],G=[],q=0,Q&&(Q=[]);if(Y.fallback)z=[m3],G[0]=Zz((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]=Zz(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]=Zz(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 JV(f,J){if(n3){if(hf.context){let Y=hf.context;mH(k3());let z=aW(f,J||{});return mH(Y),z}}return aW(f,J||{})}function TZ(){return!0}function vH(f){return!(f=typeof f==="function"?f():f)?{}:f}function i3(){for(let f=0,J=this.length;f<J;++f){let Y=this[f]();if(Y!==void 0)return Y}}function nZ(...f){let J=!1;for(let q=0;q<f.length;q++){let Q=f[q];J=J||!!Q&&GJ in Q,f[q]=typeof Q==="function"?(J=!0,U0(Q)):Q}if(b3&&J)return new Proxy({get(q){for(let Q=f.length-1;Q>=0;Q--){let H=vH(f[Q])[q];if(H!==void 0)return H}},has(q){for(let Q=f.length-1;Q>=0;Q--)if(q in vH(f[Q]))return!0;return!1},keys(){let q=[];for(let Q=0;Q<f.length;Q++)q.push(...Object.keys(vH(f[Q])));return[...new Set(q)]}},d3);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:i3.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(c3(()=>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 l3("Show");return Y()})):X}return f.fallback},void 0,{name:"value"})}var hf,N3=!0,y3=(f,J)=>f===J,GJ,b3,wZ,S3,EZ,dW=null,_W,T1=1,pG=2,I3,PH,e0=null,j0=null,mz=null,vz=null,Kf=null,df=null,B1=null,hZ=0,XJ,Uu,lW,_G,m3,n3=!1,d3,l3=(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.`,YV;var Wf=k(()=>{hf={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return nW(this.context.count)},getNextContextId(){return nW(this.context.count++)}};GJ=Symbol("solid-proxy"),b3=typeof Proxy==="function",wZ=Symbol("solid-track"),S3=Symbol("solid-dev-component"),EZ={equals:y3},_W=tW,I3={},PH={},XJ={afterUpdate:null,afterCreateOwner:null,afterCreateSignal:null,afterRegisterGraph:null};[Uu,lW]=r(!1);m3=Symbol("fallback");d3={get(f,J,Y){if(J===GJ)return Y;return f.get(J)},has(f,J){if(J===GJ)return!0;return f.has(J)},set:TZ,deleteProperty:TZ,getOwnPropertyDescriptor(f,J){return{configurable:!0,enumerable:!0,get(){return f.get(J)},set:TZ,deleteProperty:TZ}},ownKeys(f){return f.keys()}};YV={hooks:XJ,writeSignal:nH,registerGraph:oW};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 a3(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 $3(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 r3(f){if(!f||f.length===0)return"none";let J=!1,Y=!1;for(let z of f){let G=$3(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 GV(f,J){if(!f||typeof f.number!=="number")return null;return{provider:"github",lifecycle:a3(f.state,f.reviewDecision),checkState:r3(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 dZ(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 zV="number,url,title,state,baseRefName,headRefName,reviewDecision,mergeable,statusCheckRollup";var dH,iH,lH,aH="DIRTY_WORKTREE",$H,rH;var pH=k(()=>{dH=class dH 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"}};iH=class iH extends Error{constructor(f){super(`task not found: ${f}`);this.name="TaskNotFoundError"}};lH=class lH extends Error{constructor(){super("cannot delete a main task; remove the repo from saved repos instead");this.name="CannotDeleteMainTaskError"}};$H=class $H extends Error{taskId;constructor(f){super(`${aH}: task ${f} worktree has uncommitted or untracked changes`);this.taskId=f;this.name="DirtyWorktreeError"}};rH=class rH 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"}}});var XV;var ZV=k(()=>{XV=["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"]});function qV(f){let J=f.auth,Y=J.kind==="key"?{kind:"key",keyPath:J.keyPath}:{kind:"password",getPassword:()=>zZ(J.keychainRef)};return{host:f.host,user:f.user,port:f.port,auth:Y,controlPath:tX(f.host,f.user,f.port)}}function cz(f){let J=mJ(f);if(!J)return new YZ;return new uz(qV(J))}function pJ(f){for(let J of Object.values(XH()))if(f===J.basePath||f.startsWith(`${J.basePath}/`))return new uz(qV(J));return new YZ}function QV(f){return f&&f1(f)?f:void 0}function iZ(f){let J=pJ(f);return J.isRemote||J.existsSync(f)}function If(f){return pJ(f).isRemote?OJ():f}var ZJ=k(()=>{lf();Af();_Q();tQ()});import{createHash as p3}from"crypto";import BV from"fs";import E1 from"path";function jV(f){if(!E1.isAbsolute(f))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${f}`);return E1.join(ef(),_3,fO(f))}function WV(f){if(!E1.isAbsolute(f))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${f}`);return[jV(f),...t3.map((J)=>E1.join(f,J))]}function VV(f,J){if(!J||/[/\\\0]/.test(J))throw Error(`worktreePathFor: invalid slug: ${JSON.stringify(J)}`);return E1.join(jV(f),J)}async function KV(f){if(f1(f)){let Y=mJ(f)?.basePath;if(!Y)return[];return cz(f).readdir(DV(Y))}let J=new Set;for(let Y of WV(f))try{for(let z of BV.readdirSync(Y,{withFileTypes:!0}))if(z.isDirectory())J.add(z.name)}catch{}return[...J]}function _H(f,J){if(!E1.isAbsolute(f)||!E1.isAbsolute(J))return null;let Y=HV(J);for(let z of WV(f)){let G=HV(z),X=E1.relative(G,Y);if(X!==""&&!X.startsWith("..")&&!E1.isAbsolute(X))return z}return null}function UV(f,J){return _H(f,J)!==null}function DV(f){return`${e3(f)}/.kobe/worktrees`}function LV(f,J){if(!J||/[/\\\0]/.test(J))throw Error(`remoteWorktreePathFor: invalid slug: ${JSON.stringify(J)}`);return`${DV(f)}/${J}`}function e3(f){return f.length>1&&f.endsWith("/")?f.replace(/\/+$/,""):f}function HV(f){try{return BV.realpathSync(f)}catch{return E1.resolve(f)}}function fO(f){let Y=(E1.basename(f)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",z=p3("sha1").update(E1.resolve(f)).digest("hex").slice(0,12);return`${Y}-${z}`}var _3="worktrees",o3=".kobe/worktrees",s3=".claude/worktrees",t3;var oH=k(()=>{lf();ZJ();Af();t3=[o3,s3]});class sH{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??XV,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 KV(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 MV=k(()=>{ZV();oH()});var OV={};jf(OV,{PLACEHOLDER_TASK_TITLE:()=>kJ,Orchestrator:()=>lZ});import{realpathSync as JO}from"fs";import{basename as YO,resolve as zO}from"path";function FV(f){return mJ(f)?.basePath??f}class lZ{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 sH((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??kJ).trim()||kJ,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}=tG(f),z=this.store.list().find((q)=>q.kind==="main"&&tG(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:GO(J),branch:"",worktreePath:FV(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 FV(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||SZ(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!==SZ(kJ,f.id))return;let Y=SZ(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 dH(Y.status,J,Y.id);await this.store.update(Y.id,{status:J})}async setPRStatus(f,J){let Y=this.requireTask(f);if(dZ(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 lH;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 $H(Y.id)}try{await this.worktrees.remove(Y.worktreePath,{force:z})}catch(G){throw new rH(Y.id,G)}}await this.store.remove(Y.id),this.pendingBaseRefs.delete(Y.id),this.worktreeLocks.delete(Y.id)}async forgetProject(f){if(!f)throw Error("forgetProject: repo is required");let J=tG(f).key;for(let Y of O1())if(tG(Y).key===J)zH(Y);for(let Y of this.store.list()){if(Y.kind!=="main")continue;if(tG(Y.repo).key!==J)continue;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)=>nz(z.worktreePath)));return J.filter((z)=>!Y.has(nz(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=nz(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&&nz(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)=>nz(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??YO(G.path)).trim()||kJ;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 iH(String(f));return J}}function GO(f){let J=f.split(/[/\\]/).filter(Boolean);return J.length>0?J[J.length-1]??f:f}function tG(f){let J=PJ(f);return{repo:J,key:f1(J)?J:nz(J)}}function nz(f){try{return JO(f)}catch{return zO(f)}}var kJ="(new task)";var eG=k(()=>{Wf();Af();I1();pH();MV()});function dz(f,J,Y){if(!J)return f;let z=cz(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 fX="@kobe_remote";var Qz=k(()=>{ZJ();zJ()});var GX={};jf(GX,{windowIsSurface:()=>BO,windowCount:()=>qO,tmuxSessionName:()=>Lf,tmuxCommandSequence:()=>eH,tmuxAvailable:()=>NJ,tmuxArgs:()=>Hz,tagPaneRole:()=>RV,tagClaudePane:()=>HO,switchClientBeforeKill:()=>bJ,setWindowOption:()=>FY,setSessionOption:()=>LY,sessionExists:()=>Hf,sendKeys:()=>$Z,sendKeyName:()=>zX,runTmuxSequenceCapturing:()=>JX,runTmuxSequence:()=>Pf,runTmuxCapturing:()=>d0,runTmux:()=>h0,paneIdByRole:()=>JB,newWindow:()=>QJ,killSession:()=>l1,globalTasksPaneWidth:()=>aZ,getSessionOptions:()=>N1,getSessionOption:()=>Bz,getServerOptions:()=>MY,getServerOption:()=>gV,ensureFallbackSession:()=>rZ,currentSessionName:()=>y1,claudePaneIdStrict:()=>az,claudePaneId:()=>YB,capturePaneById:()=>$z,attachArgv:()=>lz,SURFACE_WINDOW_OPTION:()=>zB,PANE_ROLE_OPTION:()=>YX,KOBE_TMUX_SOCKET:()=>qJ,KOBE_HOME_SESSION:()=>CV,CLAUDE_ROLE_OPTION:()=>QO,CHAT_TAB_SESSION_ID_OPTION:()=>yJ});import{homedir as XO}from"os";function Hz(...f){return["tmux","-L",qJ,...f]}function Lf(f){return`kobe-${f.replace(/[^A-Za-z0-9_-]/g,"")}`}function lz(f){return Hz("attach-session","-t",`=${f}`)}async function tH(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:iz,stdout:"ignore",stderr:"pipe"}),[Y,z]=await Promise.all([tH(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 ZO(f){try{return await Bun.spawn(Hz(...f),{stdin:"ignore",cwd:iz,stdout:"ignore",stderr:"ignore"}).exited}catch{return 1}}function eH(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=eH(f);return J.length===0?0:h0(J)}async function d0(f){try{let J=Bun.spawn(Hz(...f),{stdin:"ignore",cwd:iz,stdout:"pipe",stderr:"pipe"}),[Y,z,G]=await Promise.all([tH(J.stdout),tH(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 JX(f){let J=eH(f);return J.length===0?{code:0,stdout:""}:d0(J)}async function NJ(){try{return await Bun.spawn(["tmux","-V"],{stdin:"ignore",cwd:iz,stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function Hf(f){return await ZO(["has-session","-t",`=${f}`])===0}async function qO(f){let{code:J,stdout:Y}=await d0(["list-windows","-t",`=${f}`,"-F","#{window_id}"]);if(J!==0)return 0;return Y.split(`
|
|
36
|
-
`).filter((z)=>z.trim().length>0).length}async function
|
|
37
|
-
`)){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
|
|
38
|
-
`)){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
|
|
39
|
-
`)){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
|
|
40
|
-
`)){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
|
|
41
|
-
`}function
|
|
42
|
-
`}function
|
|
43
|
-
`}function OY(f,J){process.stderr.write(LO(f,J))}function IV(f=(J)=>process.stderr.write(J)){if(GB||XB)return;GB=(J)=>f(bV("unhandledRejection",J)),XB=(J)=>f(bV("uncaughtException",J)),process.on("unhandledRejection",GB),process.on("uncaughtException",XB)}var GB,XB;async function MO(f,J=Pz){let Y=[];for(let z of f.listTasks()){if(z.archived||z.title!==kJ||!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!==kJ)continue;await f.setTitle(z.id,G),Y.push({id:z.id,title:G})}catch(G){uf("auto-title-poller",G)}}return Y}function TV(f,J=ZB,Y){if(J<=0)return()=>{};let z=!1,X=setInterval(()=>{if(Y&&!Y())return;if(z)return;z=!0,MO(f).then(()=>NV(f)).catch((q)=>uf("auto-title-poller",q)).finally(()=>{z=!1})},J);return X.unref?.(),()=>clearInterval(X)}var ZB=4000;var uV=k(()=>{IZ();eG();yV();I1()});class qB{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 XX=k(()=>{pY()});async function EV(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 xV=k(()=>{XX()});import{createHash as FO}from"crypto";import{homedir as OO}from"os";import gY from"path";function kO(){return gY.join(process.env.KOBE_HOME_DIR??OO(),".kobe")}function NO(f){let Y=(gY.basename(f)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",z=FO("sha1").update(gY.resolve(f)).digest("hex").slice(0,12);return`${Y}-${z}`}function yO(f){if(!gY.isAbsolute(f))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${f}`);return gY.join(kO(),AO,NO(f))}function bO(f){if(!gY.isAbsolute(f))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${f}`);return[yO(f),...CO.map((J)=>gY.join(f,J))]}function AY(f){return f.length>1&&f.endsWith("/")?f.slice(0,-1):f}function wV(f,J){return J===f||J.startsWith(`${f}/`)}function hV(f,J){let Y=AY(J),z,G=-1;for(let X of f){if(!X.worktreePath)continue;let q=AY(X.worktreePath);if(wV(q,Y)&&q.length>G)G=q.length,z=X.id}return z}function QB(f,J){let Y=AY(J),z,G=-1;for(let X of f){if(!X.repo)continue;let q=AY(X.repo);if(wV(q,Y)&&q.length>G)G=q.length,z=q}return z}function PV(f,J){let Y=AY(J),z=new Set,G=new Set;for(let X of f){if(X.repo)z.add(AY(X.repo));if(X.worktreePath)G.add(AY(X.worktreePath))}for(let X of z)for(let q of bO(X).map(AY)){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 AO="worktrees",gO=".kobe/worktrees",RO=".claude/worktrees",CO;var vV=k(()=>{CO=[gO,RO]});function jB(f){return{message:f instanceof Error?f.message:String(f),name:f instanceof Error?f.name:void 0}}async function ZX(f,J,Y,z){let G=f.get(J);if(!G)throw Error(`unknown daemon request: ${J}`);return G.handle(WB(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(!ZZ({localVersion:n1,localMin:QY,remoteVersion:z,remoteMin:G}))throw Error(`daemon is protocol v${n1} (min v${QY}); this client is v${z} (min v${G}). Upgrade your kobe.`);return{protocolVersion:n1,minProtocolVersion:QY,kobeVersion:s0,capabilities:[...qH],daemonPid:Y.daemon.pid,clientId:Y.clientId,tasks:Y.orch.listTasks().map(e1)}}},{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(e1)}}},{name:"task.get",handle(J,Y){let z=Ff(J,"taskId"),G=Y.orch.getTask(z);if(!G)throw Error(`task not found: ${z}`);return{task:e1(G)}}},{name:"task.create",async handle(J,Y){let z=Ff(J,"repo"),G=await Y.orch.createTask({repo:z,title:a1(J,"title"),branch:a1(J,"branch"),baseRef:a1(J,"baseRef"),vendor:BB(J,"vendor"),modelEffort:a1(J,"effort")});return{taskId:G.id,task:e1(G)}}},{name:"task.archive",async handle(J,Y){let z=Ff(J,"taskId");return await Y.orch.setArchived(z,HB(J,"archived")),{}}},{name:"task.rename",async handle(J,Y){let z=Ff(J,"taskId");return await Y.orch.setTitle(z,Ff(J,"title")),{}}},{name:"task.setBranch",async handle(J,Y){let z=Ff(J,"taskId");return await Y.orch.setBranch(z,Ff(J,"branch")),{}}},{name:"task.setVendor",async handle(J,Y){let z=Ff(J,"taskId"),G=BB(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=Ff(J,"taskId");return await Y.orch.deleteTask(z,{force:HB(J,"force")}),Y.activity.clearTask(z),{}}},{name:"task.pin",async handle(J,Y){let z=Ff(J,"taskId");return await Y.orch.setPinned(z,HB(J,"pinned")),{}}},{name:"task.move",async handle(J,Y){let z=Ff(J,"taskId"),G=Ff(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=Ff(J,"taskId"),G=Ff(J,"status");if(!vW(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=Ff(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=Ff(J,"repo"),G=await Y.orch.ensureMainTask(z);return{task:e1(G)}}},{name:"project.forget",async handle(J,Y){let z=Ff(J,"repo");return await Y.orch.forgetProject(z),{}}},{name:"task.ensureWorktree",async handle(J,Y){let z=Ff(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=Ff(J,"repo");return{worktrees:await Y.orch.discoverAdoptableWorktrees(z)}}},{name:"worktree.adopt",async handle(J,Y){let z=await Y.orch.adoptWorktree({repo:Ff(J,"repo"),worktreePath:Ff(J,"worktreePath"),branch:a1(J,"branch"),vendor:BB(J,"vendor"),title:a1(J,"title"),ifExists:a1(J,"ifExists")==="return"?"return":"error"});return{task:e1(z)}}},{name:"worktree.reconcile",async handle(J,Y){let z=Ff(J,"cwd"),G=Ff(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(Ff(J,"repoRoot"))}},{name:"issue.mutate",async handle(J,Y){let z=await Y.issues.mutate(Ff(J,"repoRoot"),J.op);return Y.bus.publish("issue.snapshot",z),z}},{name:"session.deliver",async handle(J,Y){let z=Ff(J,"taskId"),G=Ff(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=Ff(J,"taskId"),G=Ff(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=Ff(J,"kind");if(!BZ(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=PV(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?hV(Y.orch.listTasks(),X):void 0);if(!q)return{};let Q=SO(J);if(Y.activity.report(q,z,Q),z==="turn-start")EV(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 WB(f){if(!f||typeof f!=="object"||Array.isArray(f))return{};return f}function Ff(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 HB(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 BB(f,J){let Y=a1(f,J);return Y&&Y.trim().length>0?Y:void 0}function SO(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(()=>{jZ();xV();I1();D1();vV();_Y()});import{execFile as IO}from"child_process";import{mkdir as TO,readFile as uO,realpath as mV,rename as EO,stat as xO,writeFile as wO}from"fs/promises";import{homedir as hO}from"os";import{dirname as PO,isAbsolute as vO,join as mO,resolve as cV}from"path";import{promisify as cO}from"util";function nO(f){return(f instanceof Error?f.message:String(f)).includes("not a git repository")}function sZ(f=process.env.KOBE_HOME_DIR??hO()){return mO(f,".kobe","issues.json")}function dV(f){return typeof f==="string"&&nV.includes(f)}function dO(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:dV(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 iO(){return{version:1,repos:{}}}function lO(){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 aO(f){let{stdout:J}=await MB("git",["-C",f,"rev-parse","--git-common-dir"]),Y=J.trim();return mV(vO(Y)?Y:cV(f,Y))}async function $O(f){let{stdout:J}=await MB("git",["-C",f,"rev-parse","--show-toplevel"]);return J.trim()}async function rO(f){let{stdout:J}=await MB("git",["-C",f,"worktree","list","--porcelain"]),Y=J.split(/\r?\n/).find((z)=>z.startsWith("worktree "))?.slice(9).trim();return Y?mV(Y):$O(f)}async function VB(f){if(typeof f!=="string"||f.length===0)throw Error("repoRoot is required");let J=cV(f);if(!(await xO(J).catch(()=>null))?.isDirectory())throw Error("repoRoot does not exist");try{let[z,G]=await Promise.all([rO(J),aO(J)]);return{repoRoot:z,repoKey:G}}catch(z){if(nO(z))throw Error("repoRoot is not a git repository");throw z}}async function KB(f){try{let J=JSON.parse(await uO(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(dO).filter((q)=>q!==null):[]}}return{version:1,repos:Y}}catch(J){if(J.code==="ENOENT")return iO();throw J}}async function UB(f,J){await TO(PO(f),{recursive:!0});let Y=`${f}.tmp`;await wO(Y,`${JSON.stringify(J,null,2)}
|
|
44
|
-
`,"utf8"),await EO(Y,f)}function DB(f,J){return{repoRoot:f,exists:J!==null,nextId:J?.nextId??1,issues:J?.issues??[]}}async function LB(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 VB(f);return LB(this.path,async()=>{let z=await KB(this.path),G=z.repos[Y]??null;if(G&&G.repoRoot!==J)G.repoRoot=J,await UB(this.path,z);return DB(J,G)})}async mirrorTaskDone(f,J){let{repoRoot:Y,repoKey:z}=await VB(f);if(!J)return null;return LB(this.path,async()=>{let G=await KB(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 UB(this.path,G),DB(Y,X)})}async mutate(f,J){let{repoRoot:Y,repoKey:z}=await VB(f);if(!J||typeof J!=="object"||Array.isArray(J)||typeof J.type!=="string")throw Error("missing op");return LB(this.path,async()=>{let G=await KB(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:lO(),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(!dV(q.status))throw Error(`invalid status: must be one of ${nV.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 UB(this.path,G),DB(Y,X)})}}var MB,nV,oZ;var FB=k(()=>{MB=cO(IO),nV=["open","doing","hold","done"];oZ=new Map});import{mkdirSync as pO,watch as _O}from"fs";import{basename as oO,dirname as sO}from"path";function eZ(f){if(f.debounceMs<=0)return()=>{};let J=sO(f.filePath),Y=new Set([oO(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{pO(J,{recursive:!0}),X=_O(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 OB=()=>{};import{homedir as tO}from"os";import{basename as eO,join as fA}from"path";function gB(f=process.env.KOBE_HOME_DIR??tO()){return fA(f,".kobe","settings","keybindings.yaml")}function iV(f,J={}){let Y=J.debounceMs??AB;if(Y<=0)return()=>{};let z=J.path??gB(),G=eO(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 AB=200;var lV=k(()=>{OB()});class RB{clients;idleGraceMs;onIdleStop;schedule;log;cancelIdle=null;stopping=!1;constructor(f){this.clients=f.clients,this.idleGraceMs=f.idleGraceMs,this.onIdleStop=f.onIdleStop,this.schedule=f.schedule??JA,this.log=f.log??OY}guiCount(){let f=0;for(let J of this.clients())if(J.holdsLifetime)f++;return f}hasSubscribers(){for(let f of this.clients())if(f.subscribed)return!0;return!1}isStopping(){return this.stopping}markStopping(){this.stopping=!0,this.clearIdle()}guiAttached(){this.clearIdle()}clientDisconnected(f){if(f)this.maybeArm()}clearIdle(){if(this.cancelIdle)this.cancelIdle(),this.cancelIdle=null}maybeArm(){if(this.stopping||this.guiCount()>0)return;this.clearIdle(),this.log("idle",`last gui gone \u2014 arming ${this.idleGraceMs}ms idle-stop grace`),this.cancelIdle=this.schedule(()=>{if(this.cancelIdle=null,this.stopping||this.guiCount()>0)return;this.log("idle","grace elapsed with no gui \u2014 self-stopping"),this.onIdleStop()},this.idleGraceMs)}}var JA=(f,J)=>{let Y=setTimeout(f,J);return Y.unref?.(),()=>clearTimeout(Y)};var aV=()=>{};import{spawn as YA}from"child_process";function CB(f,J,Y,z){if(Y)return f+z.slowRetryMs;return J+Math.max(z.minIntervalMs,(J-f)*5)}function kB(f,J){return!f.inFlight&&J>=f.nextAllowedAt}function fq(f,J,Y,z){let G=Date.now();if(!kB(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=CB(G,Date.now(),B,J),f.inFlight=!1,H&&!B)z(Q)})(),!0}function HJ(f,J,Y){return new Promise((z)=>{let G="",X=!1,q=(H)=>{if(X)return;X=!0,z({status:H,stdout:G})},Q=YA(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 QX=()=>{};function qA(f){if(f.archived)return!1;if(f.kind==="main")return!1;if(!f.branch||!f.worktreePath)return!1;if(f1(f.repo)||f1(f.worktreePath))return!1;return!0}async function QA(f,J){let Y=J.tickMs??Jq,z=[];for(let G of f.listTasks()){if(!qA(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+zA);continue}let Q=GV(q.view,J.at),H=f.getTask(G.id);if(!H){J.schedule.delete(G.id);continue}if(!dZ(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?GA:Y))}catch(q){uf("pr-status-poller",q),J.schedule.set(G.id,J.now+Y)}}return z}function $V(f,J=Jq,Y,z=ZA){if(J<=0)return()=>{};let G=new Map,X=!1,Q=setInterval(()=>{if(Y&&!Y())return;if(X)return;X=!0,QA(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,zA=300000,GA=600000,XA=1e4,ZA=async(f,J)=>{let Y=new AbortController,z=setTimeout(()=>Y.abort(),XA);try{let G=await HJ("gh",["pr","view",J,"--json",zV],{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 rV=k(()=>{QX();Af()});import{readFileSync as HA}from"fs";import{homedir as BA}from"os";import{basename as jA,join as WA}from"path";function yB(f=process.env.KOBE_HOME_DIR??BA()){return WA(f,".config","kobe","state.json")}function pV(f){let J={};try{let B=JSON.parse(HA(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"&&KA.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 UA(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 _V(f,J={}){let Y=J.debounceMs??NB;if(Y<=0)return()=>{};let z=J.pollMs??VA,G=J.statePath??yB(),X=jA(G),q=pV(G);return f.publish("ui-prefs",q),eZ({filePath:G,matchBasenames:[X],debounceMs:Y,pollMs:z,onTrigger:()=>{try{let H=pV(G);if(UA(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 NB=200,VA=250,KA;var oV=k(()=>{OB();KA=["primary","success","info"]});function bB(){return nf()[Wz]===!0}var Wz="experimental.dispatcher";var Yq=k(()=>{pY()});import{randomUUID as DA}from"crypto";function BJ(f){return`engineCommand.${f}`}function jJ(f){return`engineName.${f}`}function Vz(f){return kf(jJ(f))?.trim()||SB[f]||f}function HX(f){return pf(f??"claude").defaultCommand}function LA(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 b1(f,J){let Y=f??"claude",z=kf(BJ(Y))?.trim(),G=(()=>{if(z){let X=LA(z);if(X.length>0)return X}return HX(Y)})();return MA(G,Y,J)}function MA(f,J,Y){let z=Y?.trim();if(!z)return f;let G=J??"claude";if(!pf(G).effortLevels?.includes(z))return f;if(G==="codex")return[...f,"-c",`model_reasoning_effort=${z}`];return f}function rz(f,J){if((J??"claude")!=="claude")return{argv:f,sessionId:null};if(f.some((z)=>FA.has(z)))return{argv:f,sessionId:null};let Y=DA();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 OA(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(`
|
|
45
|
-
`)}function
|
|
46
|
-
`)}function
|
|
47
|
-
|
|
48
|
-
`):null}function
|
|
49
|
-
`)}function
|
|
28
|
+
`)&&f.endsWith("</INSTRUCTIONS>")}var wW=()=>{};function hW(f,J={}){let Y=EH(f.input_tokens,0),z=EH(f.cached_input_tokens,0),G=EH(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}:{},...F3(J.contextWindowTokens)?{context_window_tokens:J.contextWindowTokens}:{}}}function EH(f,J){return typeof f==="number"&&Number.isFinite(f)?f:J}function F3(f){return typeof f==="number"&&Number.isFinite(f)&&f>0}import{readFile as O3,readdir as A3,stat as g3,unlink as $u}from"fs/promises";import{homedir as R3}from"os";import zz from"path";async function PH(f=Gz){let J=f.sessionsDir(),Y=(await f.readdir(J)).sort().reverse(),z=[];for(let G of Y){let X=zz.join(J,G),q=(await f.readdir(X)).sort().reverse();for(let Q of q){let H=zz.join(X,Q),B=(await f.readdir(H)).sort().reverse();for(let V of B){let j=zz.join(H,V),K=(await f.readdir(j)).filter((L)=>L.startsWith("rollout-")&&L.endsWith(".jsonl"));K.sort().reverse();for(let L of K)z.push(zz.join(j,L))}}}return z}async function C3(f,J=Gz){if(!f)return;let Y=f.toLowerCase(),z=await PH(J);for(let G of z)if(zz.basename(G).match(cW)?.[1]?.toLowerCase()===Y)return G;return}function N3(f){for(let J of f.split(`
|
|
29
|
+
`)){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 nW(f,J){let Y=PW.get(J);if(!Y)Y=new Map,PW.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=N3(G);if(X)Y.set(f,X);return X}async function dW(f,J=Gz){if(!f)return[];let Y=await PH(J),z=[],G=0;for(let X of Y){if(G>=y3)break;if(G++,await nW(X,J)!==f)continue;let q=zz.basename(X).match(cW)?.[1];if(q)z.push(q)}return z.reverse()}async function vH(f,J=Gz){if(!f)return null;let Y=await PH(J),z=0;for(let G of Y){if(z>=b3)break;if(z++,await nW(G,J)!==f)continue;try{return{path:G,mtimeMs:(await J.stat(G)).mtimeMs}}catch{}}return null}async function iW(f,J=Gz){return(await vH(f,J))?.mtimeMs??0}async function lW(f,J=Gz){return(await k3(f,J)).messages}async function k3(f,J=Gz){let Y=await C3(f,J);if(!Y)return{messages:[]};let z;try{z=await J.readFile(Y)}catch{return{messages:[]}}let G=S3(I3(z,f)),X=w3(z);return{messages:G,...X?{usageMetrics:X}:{}}}function S3(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 I3(f,J){let Y=[];for(let z of f.split(`
|
|
30
|
+
`)){let G=z.trim();if(!G)continue;let X;try{X=JSON.parse(G)}catch{continue}if(!rG(X))continue;if(X.type!=="response_item")continue;let q=rG(X.payload)?X.payload:void 0;if(!q)continue;let Q=typeof X.timestamp==="string"?X.timestamp:new Date().toISOString(),H=T3(q,Q,J);if(H)Y.push(H)}return Y}function T3(f,J,Y){if(f.type==="message"){let z=f.role;if(z!=="user"&&z!=="assistant"&&z!=="system")return;let G=uH(f.content);if(z==="user"&&xW(G))return;return{role:z,blocks:G,timestamp:J,sessionId:Y}}if(f.type==="reasoning")return u3(f,J,Y);if(f.type==="function_call")return xH(f,J,Y,{name:hH(f.name,"function_call"),input:wH(f.arguments)});if(f.type==="custom_tool_call")return xH(f,J,Y,{name:hH(f.name,"custom_tool_call"),input:wH(f.input)});if(f.type==="tool_search_call")return xH(f,J,Y,{name:"tool_search_call",input:SZ(f,["type","call_id","status"])});if(f.type==="function_call_output"||f.type==="custom_tool_call_output")return vW(f,J,Y,wH(f.output));if(f.type==="tool_search_output")return vW(f,J,Y,SZ(f,["type","call_id"]));if(f.type==="web_search_call"||f.type==="image_generation_call"||f.type==="local_shell_call")return E3(f,J,Y);return}function u3(f,J,Y){let z=x3(f);if(z.length===0)return;return{role:"assistant",blocks:[{type:"thinking",text:z}],timestamp:J,sessionId:Y}}function xH(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 vW(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 E3(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=hH(f.name,z),q=SZ(f,["type","call_id","status"]),Q=SZ(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 x3(f){let J=mW(f.content);if(J.length>0)return J;let Y=typeof f.text==="string"?f.text:"";if(Y.length>0)return Y;return mW(f.summary)}function mW(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(!rG(Y))continue;let z=typeof Y.text==="string"?Y.text:"";if(z.length>0)J.push(z)}return J.join("")}function SZ(f,J){let Y={};for(let[z,G]of Object.entries(f))if(!J.includes(z))Y[z]=G;return Y}function hH(f,J){return typeof f==="string"&&f.length>0?f:J}function wH(f){if(typeof f!=="string")return f;try{return JSON.parse(f)}catch{return f}}function w3(f){let J,Y=null;for(let z of f.split(`
|
|
31
|
+
`)){let G=z.trim();if(!G)continue;let X;try{X=JSON.parse(G)}catch{continue}if(!rG(X))continue;let q=typeof X.timestamp==="string"?h3(X.timestamp):null;if(X.type==="response_item")continue;if(X.type!=="turn.completed")continue;let Q=rG(X.usage)?X.usage:void 0;if(!Q)continue;let H=hW(Q);if(!H)continue;if(q!==null&&(Y===null||q>Y))Y=q,J=H;else if(Y===null)J=H}return J}function h3(f){let J=new Date(f).getTime();return Number.isFinite(J)?J:null}function rG(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var Gz,cW,PW,y3=200,b3=12;var mH=N(()=>{wW();Gz={sessionsDir(){return zz.join(R3(),".codex","sessions")},async readdir(f){try{return await A3(f)}catch{return[]}},async readFile(f){return await O3(f,"utf8")},stat:g3};cW=/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/i;PW=new WeakMap});import{homedir as P3}from"os";import{join as v3}from"path";function m3(){return v3(P3(),".codex","hooks.json")}var $W,JE,cH;var pW=N(()=>{IH();$W=[{event:"SessionStart",verb:"session-start"},{event:"UserPromptSubmit",verb:"turn-start"},{event:"Stop",verb:"turn-complete"}],JE=$W.map((f)=>f.event);cH=class cH extends pG{vendor="codex";eventMap=$W;globalSettingsPath(){return m3()}}});function rW(f){if(!IZ(f))return;let J=IZ(f.modelMetrics)?f.modelMetrics:void 0;if(!J)return;let Y=0,z=0,G=0;for(let q of Object.values(J)){if(!IZ(q)||!IZ(q.usage))continue;Y+=TZ(q.usage.inputTokens,0),z+=TZ(q.usage.outputTokens,0),G+=TZ(q.usage.cacheReadTokens,0)}let X=TZ(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 IZ(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function TZ(f,J){return typeof f==="number"&&Number.isFinite(f)?f:J}import{readFile as c3,readdir as n3,rm as d3,stat as i3}from"fs/promises";import{homedir as l3}from"os";import UY from"path";async function dH(f=Xz){let J=UY.join(f.copilotDir(),"session-state");return(await f.readdir(J)).map((z)=>UY.join(J,z))}async function _W(f,J=Xz){let Y=[];for(let z of await dH(J)){let G=await iH(z,J);if(G.cwd!==f)continue;Y.push({id:G.id??UY.basename(z),updatedAt:G.updatedAt??""})}return Y.sort((z,G)=>z.updatedAt.localeCompare(G.updatedAt)).map((z)=>z.id)}async function oW(f,J=Xz){if(!f)return 0;let Y=0;for(let z of await dH(J)){if((await iH(z,J)).cwd!==f)continue;try{let{mtimeMs:X}=await J.stat(UY.join(z,"events.jsonl"));if(X>Y)Y=X}catch{}}return Y}async function a3(f,J=Xz){let Y=await $3(f,J);if(!Y)return{messages:[]};let z=await J.readFile(UY.join(Y,"events.jsonl")).catch(()=>""),G=r3(z,f);return{messages:G.messages,...G.usageMetrics?{usageMetrics:G.usageMetrics}:{}}}async function sW(f,J=Xz){return(await a3(f,J)).messages}async function $3(f,J=Xz){for(let Y of await dH(J)){if(UY.basename(Y)===f)return Y;let z=await iH(Y,J);if(z.id===f||z.name?.toLowerCase()===f.toLowerCase())return Y}return}async function iH(f,J=Xz){let Y=await J.readFile(UY.join(f,"workspace.yaml")).catch(()=>"");return p3(Y)}function p3(f){let J={};for(let Y of f.split(`
|
|
32
|
+
`)){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 r3(f,J){let Y=[],z=new Map,G=J,X,q=null;for(let Q of f.split(`
|
|
33
|
+
`)){let H=Q.trim();if(!H)continue;let B;try{B=JSON.parse(H)}catch{continue}if(!nH(B)||typeof B.type!=="string")continue;let V=typeof B.timestamp==="string"?B.timestamp:new Date().toISOString(),j=nH(B.data)?B.data:{};if(B.type==="session.start"){let K=typeof j.sessionId==="string"?j.sessionId:void 0;if(K)G=K;continue}if(B.type==="user.message"){let K=typeof j.content==="string"?j.content:"";if(!K)continue;if(!q)q=Buffer.from(K.slice(0,_3),"utf8").toString("utf8");Y.push({role:"user",blocks:[{type:"text",text:K}],timestamp:V,sessionId:G});continue}if(B.type==="assistant.message"){let K=[],L=typeof j.content==="string"?j.content:"";if(L)K.push({type:"text",text:L});let O=Array.isArray(j.toolRequests)?j.toolRequests:[];for(let M of O){if(!nH(M))continue;let g=typeof M.id==="string"?M.id:typeof M.toolCallId==="string"?M.toolCallId:"tool",S=typeof M.name==="string"?M.name:typeof M.toolName==="string"?M.toolName:"tool";K.push({type:"tool_call",callId:g,name:S,input:M.arguments??{}})}if(K.length>0)Y.push({role:"assistant",blocks:K,timestamp:V,sessionId:G});continue}if(B.type==="tool.execution_start"){let K=typeof j.toolCallId==="string"?j.toolCallId:void 0,L=typeof j.toolName==="string"?j.toolName:"tool";if(K)z.set(K,L);continue}if(B.type==="tool.execution_complete"){let K=typeof j.toolCallId==="string"?j.toolCallId:void 0;if(!K)continue;let L=z.get(K)??(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:K,output:O,isError:j.success===!1}],timestamp:V,sessionId:G});continue}if(B.type==="session.shutdown")X=rW(j)}return{messages:Y,usageMetrics:X,firstUserMessage:q}}function nH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var Xz,_3=200;var tW=N(()=>{Xz={copilotDir(){let f=process.env.COPILOT_HOME?.trim();if(f)return f;return UY.join(l3(),".copilot")},async readdir(f){try{return await n3(f)}catch{return[]}},async readFile(f){return await c3(f,"utf8")},stat:i3,async rm(f){await d3(f,{recursive:!0,force:!0})}}});function lH(f){return rf(f).createHookAdapter()}class uZ{vendor;constructor(f){this.vendor=f}supportsHooks(){return!1}globalSettingsPath(){return""}activityDetailFromPayload(){return}async installActivityHooks(){}async removeActivityHooks(){}supportsWorktreeSync(){return!1}async removeWorktreeSyncHook(){}async installWorktreeWatchHook(){}async removeWorktreeWatchHook(){}}var aH=N(()=>{DY()});import{readFile as eW}from"fs/promises";class EZ{supportsCompletionMarkers(){return!0}}function fV(f){return rf(f).createTurnDetector()}function e3(f,J="claude",Y=0){let z=null,G=0;for(let X of f.split(`
|
|
34
|
+
`)){G++;let q=JV(X);if(!q)continue;let Q=zV(q.message)?q.message:q;if(Q.role!=="assistant")continue;if(!("content"in Q))continue;let H=YV(q,Y),B={id:`claude:${J}:${H}:${G}`,timestampMs:H,source:"claude"};if(!z||B.timestampMs>=z.timestampMs)z=B}return z}function fO(f,J="codex"){let Y=null,z=0;for(let G of f.split(`
|
|
35
|
+
`)){z++;let X=JV(G);if(!X||X.type!=="turn.completed")continue;let q=YV(X,0),Q={id:`codex:${J}:${q}:${z}`,timestampMs:q,source:"codex"};if(!Y||Q.timestampMs>=Y.timestampMs)Y=Q}return Y}function JV(f){let J=f.trim();if(!J)return null;try{let Y=JSON.parse(J);return zV(Y)?Y:null}catch{return null}}function YV(f,J){let Y=typeof f.timestamp==="string"?Date.parse(f.timestamp):Number.NaN;return Number.isFinite(Y)?Y:J}function zV(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var s3,$H,t3,pH,xZ;var rH=N(()=>{CH();mH();DY();s3={listSessionFiles:(f)=>dG(f),readFile:(f)=>eW(f,"utf8")};$H=class $H extends EZ{deps;vendor="claude";cache=new Map;constructor(f=s3){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=e3(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}};t3={findLatestRollout:(f)=>vH(f),readFile:(f)=>eW(f,"utf8")};pH=class pH extends EZ{deps;vendor="codex";cache=null;constructor(f=t3){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=fO(Y,J.path);return this.cache={path:J.path,mtimeMs:J.mtimeMs,marker:z},z}};xZ=class xZ extends EZ{vendor;constructor(f){super();this.vendor=f}supportsCompletionMarkers(){return!1}async latestCompletion(){return null}}});function ZO(f){return{vendor:f,builtin:!1,displayName:f,defaultCommand:[f],history:JO,detectAccount:async()=>({binary:{found:!1,error:"custom engine: kobe has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new uZ(f),createTurnDetector:()=>new xZ(f)}}function rf(f){return H1(f)?XO[f]:ZO(f)}var JO,YO,zO,GO,XO;var DY=N(()=>{U1();tY();CH();EW();mH();pW();tW();aH();rH();JO={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async latestTranscriptMtimeForWorktree(){return 0}},YO={async listSessionIdsForWorktree(f){return[...await dG(f)].sort((Y,z)=>Y.mtimeMs-z.mtimeMs).map((Y)=>Y.sessionId)},readHistory:(f)=>MW(f),latestTranscriptMtimeForWorktree:(f)=>LW(f)},zO={listSessionIdsForWorktree:(f)=>dW(f),readHistory:(f)=>lW(f),latestTranscriptMtimeForWorktree:(f)=>iW(f)},GO={listSessionIdsForWorktree:(f)=>_W(f),readHistory:(f)=>sW(f),latestTranscriptMtimeForWorktree:(f)=>oW(f)},XO={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:YO,detectAccount:(f)=>AZ(f),createHookAdapter:()=>new TH,createTurnDetector:()=>new $H},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:zO,detectAccount:(f)=>gZ(f),createHookAdapter:()=>new cH,createTurnDetector:()=>new pH},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:GO,detectAccount:(f)=>RZ(f),createHookAdapter:()=>new uZ("copilot"),createTurnDetector:()=>new xZ("copilot")}}});function GV(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 wZ(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}`}function XV(f){return typeof f==="string"&&qO.includes(f)}var _G=(f)=>f,Tf="claude",qO;var I1=N(()=>{qO=["backlog","in_progress","in_review","done","canceled","error"]});function ZV(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=GV(Y);return z.length>0?Buffer.from(z,"utf8").toString("utf8"):z}async function vz(f,J=Tf){if(!f)return"";let{history:Y}=rf(J),z=await Y.listSessionIdsForWorktree(f);for(let G of z.slice(0,QO)){let X=ZV(await Y.readHistory(G));if(X)return X}return""}async function qV(f,J){if(!J)return"";try{return ZV(await rf(f).history.readHistory(J))}catch{return""}}var QO=8;var hZ=N(()=>{DY();I1()});function QV(f){let J=String(f),Y=J.length-1;return Nf.context.id+(Y?String.fromCharCode(96+Y):"")+J}function sH(f){Nf.context=f}function HO(){return{...Nf.context,id:Nf.getNextContextId(),count:0}}function Zz(f,J){let Y=Kf,z=i0,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(()=>lf(()=>LY(q)));qJ.afterCreateOwner&&qJ.afterCreateOwner(q),i0=q,Kf=null;try{return C1(Q,!0)}finally{Kf=Y,i0=z}}function p(f,J){J=J?Object.assign({},cZ,J):cZ;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(DV(Y),qJ.afterCreateSignal)qJ.afterCreateSignal(Y)}let z=(G)=>{if(typeof G==="function")if(Q0&&Q0.running&&Q0.sources.has(Y))G=G(Y.tValue);else G=G(Y.value);return eH(Y,G)};return[LV.bind(Y),z]}function HV(f,J,Y){let z=nz(f,J,!0,T1,Y);if(cz&&Q0&&Q0.running)df.push(z);else qz(z)}function CJ(f,J,Y){let z=nz(f,J,!1,T1,Y);if(cz&&Q0&&Q0.running)df.push(z);else qz(z)}function Gf(f,J,Y){UV=gO;let z=nz(f,J,!1,T1,Y),G=tG&&u1(tG);if(G)z.suspense=G;if(!Y||!Y.render)z.user=!0;B1?B1.push(z):qz(z)}function K0(f,J,Y){Y=Y?Object.assign({},cZ,Y):cZ;let z=nz(f,J,!0,0,Y);if(z.observers=null,z.observerSlots=null,z.comparator=Y.equals||void 0,cz&&Q0&&Q0.running)z.tState=T1,df.push(z);else qz(z);return LV.bind(z)}function UO(f){return f&&typeof f==="object"&&"then"in f}function lZ(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=_H,H=null,B=!1,V=!1,j="initialValue"in X,K=typeof z==="function"&&K0(z),L=new Set,[O,M]=(X.storage||p)(X.initialValue),[g,S]=p(void 0),[a,y]=p(void 0,{equals:!1}),[R,C]=p(j?"ready":"unresolved");if(Nf.context){if(H=Nf.getNextContextId(),X.ssrLoadFrom==="initial")Q=X.initialValue;else if(Nf.load&&Nf.has(H))Q=Nf.load(H)}function k(T,H0,r,D0){if(q===T){if(q=null,D0!==void 0&&(j=!0),(T===Q||H0===Q)&&X.onHydrated)queueMicrotask(()=>X.onHydrated(D0,{value:H0}));if(Q=_H,Q0&&T&&B)Q0.promises.delete(T),B=!1,C1(()=>{Q0.running=!0,_(H0,r)},!1);else _(H0,r)}return H0}function _(T,H0){C1(()=>{if(H0===void 0)M(()=>T);C(H0!==void 0?"errored":j?"ready":"unresolved"),S(H0);for(let r of L.keys())r.decrement();L.clear()},!1)}function z0(){let T=tG&&u1(tG),H0=O(),r=g();if(r!==void 0&&!q)throw r;if(Kf&&!Kf.user&&T)HV(()=>{if(a(),q){if(T.resolved&&Q0&&B)Q0.promises.add(q);else if(!L.has(T))T.increment(),L.add(T)}});return H0}function t(T=!0){if(T!==!1&&V)return;V=!1;let H0=K?K():z;if(B=Q0&&Q0.running,H0==null||H0===!1){k(q,lf(O));return}if(Q0&&q)Q0.promises.delete(q);let r,D0=Q!==_H?Q:lf(()=>{try{return G(H0,{value:O(),refetching:T})}catch(g0){r=g0}});if(r!==void 0){k(q,void 0,mZ(r),H0);return}else if(!UO(D0))return k(q,D0,void 0,H0),D0;if(q=D0,"v"in D0){if(D0.s===1)k(q,D0.v,void 0,H0);else k(q,void 0,mZ(D0.v),H0);return D0}return V=!0,queueMicrotask(()=>V=!1),C1(()=>{C(j?"refreshing":"pending"),y()},!1),D0.then((g0)=>k(D0,g0,void 0,H0),(g0)=>k(D0,void 0,mZ(g0),H0))}Object.defineProperties(z0,{state:{get:()=>R()},error:{get:()=>g()},loading:{get(){let T=R();return T==="pending"||T==="refreshing"}},latest:{get(){if(!j)return z0();let T=g();if(T&&!q)throw T;return O()}}});let Y0=i0;if(K)HV(()=>(Y0=i0,t(!1)));else t(!1);return[z0,{refetch:(T)=>LO(Y0,()=>t(T)),mutate:M}]}function aZ(f){return C1(f,!1)}function lf(f){if(!mz&&Kf===null)return f();let J=Kf;Kf=null;try{if(mz)return mz.untrack(f);return f()}finally{Kf=J}}function N1(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=lf(()=>J(Q,G,q));return G=Q,H}}function _f(f){Gf(()=>lf(f))}function yf(f){if(i0===null)console.warn("cleanups created outside a `createRoot` or `render` will never be run");else if(i0.cleanups===null)i0.cleanups=[f];else i0.cleanups.push(f);return f}function DO(f,J){if(oG||(oG=Symbol("error")),i0=nz(void 0,void 0,!0),i0.context={...i0.context,[oG]:[J]},Q0&&Q0.running)Q0.sources.add(i0);try{return f()}catch(Y){fX(Y)}finally{i0=i0.owner}}function $Z(){return Kf}function LO(f,J){let Y=i0,z=Kf;i0=f,Kf=null;try{return C1(J,!0)}catch(G){fX(G)}finally{i0=Y,Kf=z}}function MO(f){if(Q0&&Q0.running)return f(),Q0.done;let J=Kf,Y=i0;return Promise.resolve().then(()=>{Kf=J,i0=Y;let z;if(cz||tG)z=Q0||(Q0={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 C1(f,!1),Kf=i0=null,z?z.done:void 0})}function jV(f,J){let Y=nz(()=>lf(()=>{return Object.assign(f,{[VO]:!0}),f(J)}),void 0,!0,0);return Y.props=J,Y.observers=null,Y.observerSlots=null,Y.name=f.name,Y.component=f,qz(Y),Y.tValue!==void 0?Y.tValue:Y.value}function DV(f){if(i0){if(i0.sourceMap)i0.sourceMap.push(f);else i0.sourceMap=[f];f.graph=i0}if(qJ.afterRegisterGraph)qJ.afterRegisterGraph(f)}function NJ(f,J){let Y=Symbol("context");return{id:Y,Provider:RO(Y,J),defaultValue:f}}function u1(f){let J;return i0&&i0.context&&(J=i0.context[f.id])!==void 0?J:f.defaultValue}function FO(f){let J=K0(f),Y=K0(()=>tH(J()),void 0,{name:"children"});return Y.toArray=()=>{let z=Y();return Array.isArray(z)?z:z!=null?[z]:[]},Y}function LV(){let f=Q0&&Q0.running;if(this.sources&&(f?this.tState:this.state))if((f?this.tState:this.state)===T1)qz(this);else{let J=df;df=null,C1(()=>nZ(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&&Q0.sources.has(this))return this.tValue;return this.value}function eH(f,J,Y){let z=Q0&&Q0.running&&Q0.sources.has(f)?f.tValue:f.value;if(!f.comparator||!f.comparator(z,J)){if(Q0){let G=Q0.running;if(G||!Y&&Q0.sources.has(f))Q0.sources.add(f),f.tValue=J;if(!G)f.value=J}else f.value=J;if(f.observers&&f.observers.length)C1(()=>{for(let G=0;G<f.observers.length;G+=1){let X=f.observers[G],q=Q0&&Q0.running;if(q&&Q0.disposed.has(X))continue;if(q?!X.tState:!X.state){if(X.pure)df.push(X);else B1.push(X);if(X.observers)FV(X)}if(!q)X.state=T1;else X.tState=T1}if(df.length>1e6){if(df=[],BO)throw Error("Potential Infinite Loop Detected.");throw Error()}},!1)}return J}function qz(f){if(!f.fn)return;LY(f);let J=iZ;if(WV(f,Q0&&Q0.running&&Q0.sources.has(f)?f.tValue:f.value,J),Q0&&!Q0.running&&Q0.sources.has(f))queueMicrotask(()=>{C1(()=>{Q0&&(Q0.running=!0),Kf=i0=f,WV(f,f.tValue,J),Kf=i0=null},!1)})}function WV(f,J,Y){let z,G=i0,X=Kf;Kf=i0=f;try{z=f.fn(J)}catch(q){if(f.pure)if(Q0&&Q0.running)f.tState=T1,f.tOwned&&f.tOwned.forEach(LY),f.tOwned=void 0;else f.state=T1,f.owned&&f.owned.forEach(LY),f.owned=null;return f.updatedAt=Y+1,fX(q)}finally{Kf=X,i0=G}if(!f.updatedAt||f.updatedAt<=Y){if(f.updatedAt!=null&&"observers"in f)eH(f,z,!0);else if(Q0&&Q0.running&&f.pure){if(!Q0.sources.has(f))f.value=z;Q0.sources.add(f),f.tValue=z}else f.value=z;f.updatedAt=Y}}function nz(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:i0,context:i0?i0.context:null,pure:Y};if(Q0&&Q0.running)X.state=0,X.tState=z;if(i0===null)console.warn("computations created outside a `createRoot` or `render` will never be disposed");else if(i0!==KO)if(Q0&&Q0.running&&i0.pure)if(!i0.tOwned)i0.tOwned=[X];else i0.tOwned.push(X);else if(!i0.owned)i0.owned=[X];else i0.owned.push(X);if(G&&G.name)X.name=G.name;if(mz&&X.fn){let q=X.fn,[Q,H]=p(void 0,{equals:!1}),B=mz.factory(q,H);yf(()=>B.dispose());let V,j=()=>MO(H).then(()=>{if(V)V.dispose(),V=void 0});X.fn=(K)=>{if(Q(),Q0&&Q0.running){if(!V)V=mz.factory(q,j);return V.track(K)}return B.track(K)}}return qJ.afterCreateOwner&&qJ.afterCreateOwner(X),X}function eG(f){let J=Q0&&Q0.running;if((J?f.tState:f.state)===0)return;if((J?f.tState:f.state)===sG)return nZ(f);if(f.suspense&&lf(f.suspense.inFallback))return f.suspense.effects.push(f);let Y=[f];while((f=f.owner)&&(!f.updatedAt||f.updatedAt<iZ)){if(J&&Q0.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(Q0.disposed.has(G))return}if((J?f.tState:f.state)===T1)qz(f);else if((J?f.tState:f.state)===sG){let G=df;df=null,C1(()=>nZ(f,Y[0]),!1),df=G}}}function C1(f,J){if(df)return f();let Y=!1;if(!J)df=[];if(B1)Y=!0;else B1=[];iZ++;try{let z=f();return OO(Y),z}catch(z){if(!Y)B1=null;df=null,fX(z)}}function OO(f){if(df){if(cz&&Q0&&Q0.running)AO(df);else MV(df);df=null}if(f)return;let J;if(Q0){if(!Q0.promises.size&&!Q0.queue.size){let{sources:z,disposed:G}=Q0;B1.push.apply(B1,Q0.effects),J=Q0.resolve;for(let X of B1)"tState"in X&&(X.state=X.tState),delete X.tState;Q0=null,C1(()=>{for(let X of G)LY(X);for(let X of z){if(X.value=X.tValue,X.owned)for(let q=0,Q=X.owned.length;q<Q;q++)LY(X.owned[q]);if(X.tOwned)X.owned=X.tOwned;delete X.tValue,delete X.tOwned,X.tState=0}BV(!1)},!1)}else if(Q0.running){Q0.running=!1,Q0.effects.push.apply(Q0.effects,B1),B1=null,BV(!0);return}}let Y=B1;if(B1=null,Y.length)C1(()=>UV(Y),!1);else qJ.afterUpdate&&qJ.afterUpdate();if(J)J()}function MV(f){for(let J=0;J<f.length;J++)eG(f[J])}function AO(f){for(let J=0;J<f.length;J++){let Y=f[J],z=Q0.queue;if(!z.has(Y))z.add(Y),cz(()=>{z.delete(Y),C1(()=>{Q0.running=!0,eG(Y)},!1),Q0&&(Q0.running=!1)})}}function gO(f){let J,Y=0;for(J=0;J<f.length;J++){let z=f[J];if(!z.user)eG(z);else f[Y++]=z}if(Nf.context){if(Nf.count){Nf.effects||(Nf.effects=[]),Nf.effects.push(...f.slice(0,Y));return}sH()}if(Nf.effects&&(Nf.done||!Nf.count))f=[...Nf.effects,...f],Y+=Nf.effects.length,delete Nf.effects;for(J=0;J<Y;J++)eG(f[J])}function nZ(f,J){let Y=Q0&&Q0.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<iZ))eG(G)}else if(X===sG)nZ(G,J)}}}function FV(f){let J=Q0&&Q0.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=sG;else z.state=sG;if(z.pure)df.push(z);else B1.push(z);z.observers&&FV(z)}}}function LY(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--)LY(f.tOwned[J]);delete f.tOwned}if(Q0&&Q0.running&&f.pure)OV(f,!0);else if(f.owned){for(J=f.owned.length-1;J>=0;J--)LY(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(Q0&&Q0.running)f.tState=0;else f.state=0;delete f.sourceMap}function OV(f,J){if(!J)f.tState=0,Q0.disposed.add(f);if(f.owned)for(let Y=0;Y<f.owned.length;Y++)OV(f.owned[Y])}function mZ(f){if(f instanceof Error)return f;return Error(typeof f==="string"?f:"Unknown error",{cause:f})}function VV(f,J,Y){try{for(let z of J)z(f)}catch(z){fX(z,Y&&Y.owner||null)}}function fX(f,J=i0){let Y=oG&&J&&J.context&&J.context[oG],z=mZ(f);if(!Y)throw z;if(B1)B1.push({fn(){VV(z,Y,J)},state:T1});else VV(z,Y,J)}function tH(f){if(typeof f==="function"&&!f.length)return tH(f());if(Array.isArray(f)){let J=[];for(let Y=0;Y<f.length;Y++){let z=tH(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 RO(f,J){return function(z){let G;return CJ(()=>G=lf(()=>{return i0.context={...i0.context,[f]:z.value},FO(()=>z.children)}),void 0,J),G}}function KV(f){for(let J=0;J<f.length;J++)f[J]()}function NO(f,J,Y={}){let z=[],G=[],X=[],q=0,Q=J.length>1?[]:null;return yf(()=>KV(X)),()=>{let H=f()||[],B=H.length,V,j;return H[dZ],lf(()=>{let L,O,M,g,S,a,y,R,C;if(B===0){if(q!==0)KV(X),X=[],z=[],G=[],q=0,Q&&(Q=[]);if(Y.fallback)z=[CO],G[0]=Zz((k)=>{return X[0]=k,Y.fallback()}),q=1}else if(q===0){G=Array(B);for(j=0;j<B;j++)z[j]=H[j],G[j]=Zz(K);q=B}else{M=Array(B),g=Array(B),Q&&(S=Array(B));for(a=0,y=Math.min(q,B);a<y&&z[a]===H[a];a++);for(y=q-1,R=B-1;y>=a&&R>=a&&z[y]===H[R];y--,R--)M[R]=G[y],g[R]=X[y],Q&&(S[R]=Q[y]);L=new Map,O=Array(R+1);for(j=R;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<=y;V++)if(C=z[V],j=L.get(C),j!==void 0&&j!==-1)M[j]=G[V],g[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]=g[j],Q)Q[j]=S[j],Q[j](j)}else G[j]=Zz(K);G=G.slice(0,q=B),z=H.slice(0)}return G});function K(L){if(X[j]=L,Q){let[O,M]=p(j,{name:"index"});return Q[j]=M,J(H[j],O)}return J(H[j])}}}function AV(f,J){if(yO){if(Nf.context){let Y=Nf.context;sH(HO());let z=jV(f,J||{});return sH(Y),z}}return jV(f,J||{})}function PZ(){return!0}function oH(f){return!(f=typeof f==="function"?f():f)?{}:f}function kO(){for(let f=0,J=this.length;f<J;++f){let Y=this[f]();if(Y!==void 0)return Y}}function pZ(...f){let J=!1;for(let q=0;q<f.length;q++){let Q=f[q];J=J||!!Q&&ZJ in Q,f[q]=typeof Q==="function"?(J=!0,K0(Q)):Q}if(WO&&J)return new Proxy({get(q){for(let Q=f.length-1;Q>=0;Q--){let H=oH(f[Q])[q];if(H!==void 0)return H}},has(q){for(let Q=f.length-1;Q>=0;Q--)if(q in oH(f[Q]))return!0;return!1},keys(){let q=[];for(let Q=0;Q<f.length;Q++)q.push(...Object.keys(oH(f[Q])));return[...new Set(q)]}},bO);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:kO.bind(Y[V]=[j.get.bind(Q)])}:j.value!==void 0?j:void 0;else{let K=Y[V];if(K){if(j.get)K.push(j.get.bind(Q));else if(j.value!==void 0)K.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 K0(NO(()=>f.each,f.children,J||void 0),void 0,{name:"value"})}function X0(f){let J=f.keyed,Y=K0(()=>f.when,void 0,{name:"condition value"}),z=J?Y:K0(Y,void 0,{equals:(G,X)=>!G===!X,name:"condition"});return K0(()=>{let G=z();if(G){let X=f.children;return typeof X==="function"&&X.length>0?lf(()=>X(J?G:()=>{if(!lf(z))throw SO("Show");return Y()})):X}return f.fallback},void 0,{name:"value"})}function gV(f){let J;if(Nf.context&&Nf.load)J=Nf.load(Nf.getContextId());let[Y,z]=p(J,{name:"errored"});return vZ||(vZ=new Set),vZ.add(z),yf(()=>vZ.delete(z)),K0(()=>{let G;if(G=Y()){let X=f.fallback;if(typeof X!=="function"||X.length==0)console.error(G);return typeof X==="function"&&X.length?lf(()=>X(G,()=>z())):X}return DO(()=>f.children,z)},void 0,{name:"value"})}var Nf,BO=!0,jO=(f,J)=>f===J,ZJ,WO,dZ,VO,cZ,oG=null,UV,T1=1,sG=2,KO,_H,i0=null,Q0=null,cz=null,mz=null,Kf=null,df=null,B1=null,iZ=0,qJ,yE,BV,tG,CO,yO=!1,bO,SO=(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.`,vZ,RV;var Bf=N(()=>{Nf={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return QV(this.context.count)},getNextContextId(){return QV(this.context.count++)}};ZJ=Symbol("solid-proxy"),WO=typeof Proxy==="function",dZ=Symbol("solid-track"),VO=Symbol("solid-dev-component"),cZ={equals:jO},UV=MV,KO={},_H={},qJ={afterUpdate:null,afterCreateOwner:null,afterCreateSignal:null,afterRegisterGraph:null};[yE,BV]=p(!1);CO=Symbol("fallback");bO={get(f,J,Y){if(J===ZJ)return Y;return f.get(J)},has(f,J){if(J===ZJ)return!0;return f.has(J)},set:PZ,deleteProperty:PZ,getOwnPropertyDescriptor(f,J){return{configurable:!0,enumerable:!0,get(){return f.get(J)},set:PZ,deleteProperty:PZ}},ownKeys(f){return f.keys()}};RV={hooks:qJ,writeSignal:eH,registerGraph:DV};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 IO(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 TO(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 uO(f){if(!f||f.length===0)return"none";let J=!1,Y=!1;for(let z of f){let G=TO(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 NV(f,J){if(!f||typeof f.number!=="number")return null;return{provider:"github",lifecycle:IO(f.state,f.reviewDecision),checkState:uO(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 rZ(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 CV="number,url,title,state,baseRefName,headRefName,reviewDecision,mergeable,statusCheckRollup";var fB,JB,YB,zB="DIRTY_WORKTREE",GB,XB;var ZB=N(()=>{fB=class fB 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"}};JB=class JB extends Error{constructor(f){super(`task not found: ${f}`);this.name="TaskNotFoundError"}};YB=class YB extends Error{constructor(){super("cannot delete a main task; remove the repo from saved repos instead");this.name="CannotDeleteMainTaskError"}};GB=class GB extends Error{taskId;constructor(f){super(`${zB}: task ${f} worktree has uncommitted or untracked changes`);this.taskId=f;this.name="DirtyWorktreeError"}};XB=class XB 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"}}});var yV;var bV=N(()=>{yV=["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"]});function kV(f){let J=f.auth,Y=J.kind==="key"?{kind:"key",keyPath:J.keyPath}:{kind:"password",getPassword:()=>qZ(J.keychainRef)};return{host:f.host,user:f.user,port:f.port,auth:Y,controlPath:YZ(f.host,f.user,f.port)}}function dz(f){let J=cJ(f);if(!J)return new ZZ;return new uz(kV(J))}function _J(f){for(let J of Object.values(VH()))if(f===J.basePath||f.startsWith(`${J.basePath}/`))return new uz(kV(J));return new ZZ}function SV(f){return f&&Y1(f)?f:void 0}function _Z(f){let J=_J(f);return J.isRemote||J.existsSync(f)}function uf(f){return _J(f).isRemote?gJ():f}var QJ=N(()=>{af();Af();zH();ZH()});import{createHash as EO}from"crypto";import TV from"fs";import E1 from"path";function uV(f){if(!E1.isAbsolute(f))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${f}`);return E1.join(J1(),xO,mO(f))}function EV(f){if(!E1.isAbsolute(f))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${f}`);return[uV(f),...PO.map((J)=>E1.join(f,J))]}function xV(f,J){if(!J||/[/\\\0]/.test(J))throw Error(`worktreePathFor: invalid slug: ${JSON.stringify(J)}`);return E1.join(uV(f),J)}async function wV(f){if(Y1(f)){let Y=cJ(f)?.basePath;if(!Y)return[];return dz(f).readdir(PV(Y))}let J=new Set;for(let Y of EV(f))try{for(let z of TV.readdirSync(Y,{withFileTypes:!0}))if(z.isDirectory())J.add(z.name)}catch{}return[...J]}function qB(f,J){if(!E1.isAbsolute(f)||!E1.isAbsolute(J))return null;let Y=IV(J);for(let z of EV(f)){let G=IV(z),X=E1.relative(G,Y);if(X!==""&&!X.startsWith("..")&&!E1.isAbsolute(X))return z}return null}function hV(f,J){return qB(f,J)!==null}function PV(f){return`${vO(f)}/.kobe/worktrees`}function vV(f,J){if(!J||/[/\\\0]/.test(J))throw Error(`remoteWorktreePathFor: invalid slug: ${JSON.stringify(J)}`);return`${PV(f)}/${J}`}function vO(f){return f.length>1&&f.endsWith("/")?f.replace(/\/+$/,""):f}function IV(f){try{return TV.realpathSync(f)}catch{return E1.resolve(f)}}function mO(f){let Y=(E1.basename(f)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",z=EO("sha1").update(E1.resolve(f)).digest("hex").slice(0,12);return`${Y}-${z}`}var xO="worktrees",wO=".kobe/worktrees",hO=".claude/worktrees",PO;var QB=N(()=>{af();QJ();Af();PO=[wO,hO]});class HB{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??yV,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 wV(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 mV=N(()=>{bV();QB()});var nV={};Hf(nV,{PLACEHOLDER_TASK_TITLE:()=>yJ,Orchestrator:()=>oZ});import{realpathSync as cO}from"fs";import{basename as nO,resolve as dO}from"path";function cV(f){return cJ(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 HB((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]=p(this.store.list());this.tasksAcc=J,this.setTasks=(X)=>Y(()=>X);let[z,G]=p(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??yJ).trim()||yJ,Y=await this.store.create({repo:f.repo,title:J,branch:f.branch??"",worktreePath:"",status:"backlog",kind:"task",vendor:f.vendor??Tf,...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}=JX(f),z=this.store.list().find((q)=>q.kind==="main"&&JX(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:iO(J),branch:"",worktreePath:cV(J),status:"backlog",kind:"main",vendor:Tf})})();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 cV(J.repo);if(J.worktreePath)return J.worktreePath;let Y=this.worktreeLocks.get(J.id);if(Y)return Y;let z=this.createWorktree(J);this.worktreeLocks.set(J.id,z);try{return await z}finally{this.worktreeLocks.delete(J.id)}}async createWorktree(f){let J=await this.slugs.allocate(f.repo),Y=f.branch||wZ(f.title,f.id),z=this.pendingBaseRefs.get(f.id),G;try{G=await this.worktrees.createForTask({repo:f.repo,slug:J,branch:Y,baseRef:z})}catch(X){throw this.slugs.cancel(f.repo,J),X}try{await this.store.update(f.id,{worktreePath:G.path,branch:Y})}catch(X){throw await this.rollbackWorktree(G.path),this.slugs.cancel(f.repo,J),X}return this.slugs.commit(f.repo,J),this.pendingBaseRefs.delete(f.id),G.path}async rollbackWorktree(f){try{await this.worktrees.remove(f,{force:!0})}catch(J){console.error(`[kobe] ensureWorktree rollback failed for ${f}:`,J)}}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!==wZ(yJ,f.id))return;let Y=wZ(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 fB(Y.status,J,Y.id);await this.store.update(Y.id,{status:J})}async setPRStatus(f,J){let Y=this.requireTask(f);if(rZ(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 YB;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 GB(Y.id)}try{await this.worktrees.remove(Y.worktreePath,{force:z})}catch(G){throw new XB(Y.id,G)}}await this.store.remove(Y.id),this.pendingBaseRefs.delete(Y.id),this.worktreeLocks.delete(Y.id)}async forgetProject(f){if(!f)throw Error("forgetProject: repo is required");let J=JX(f).key;for(let Y of O1())if(JX(Y).key===J)jH(Y);for(let Y of this.store.list()){if(Y.kind!=="main")continue;if(JX(Y.repo).key!==J)continue;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)=>iz(z.worktreePath)));return J.filter((z)=>!Y.has(iz(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=iz(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&&iz(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)=>iz(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??nO(G.path)).trim()||yJ;return this.store.create({repo:f.repo,title:q,branch:X,worktreePath:G.path,status:"backlog",kind:"task",vendor:f.vendor??Tf})}pendingBaseRefs=new Map;adoptLocks=new Map;requireTask(f){let J=this.store.get(f);if(!J)throw new JB(String(f));return J}}function iO(f){let J=f.split(/[/\\]/).filter(Boolean);return J.length>0?J[J.length-1]??f:f}function JX(f){let J=vJ(f);return{repo:J,key:Y1(J)?J:iz(J)}}function iz(f){try{return cO(f)}catch{return dO(f)}}var yJ="(new task)";var YX=N(()=>{Bf();Af();I1();ZB();mV()});function lz(f,J,Y){if(!J)return f;let z=dz(J);return z.ensureReady(),z.wrapCommand(f,{tty:!0,cwd:Y})}function of(){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 zX="@kobe_remote";var Qz=N(()=>{QJ();XJ()});var qX={};Hf(qX,{windowIsSurface:()=>_O,windowCount:()=>$O,tmuxSessionName:()=>Lf,tmuxCommandSequence:()=>jB,tmuxAvailable:()=>bJ,tmuxArgs:()=>Hz,tagPaneRole:()=>lV,tagClaudePane:()=>rO,switchClientBeforeKill:()=>SJ,setWindowOption:()=>OY,setSessionOption:()=>MY,sessionExists:()=>jf,sendKeys:()=>tZ,sendKeyName:()=>ZX,runTmuxSequenceCapturing:()=>GX,runTmuxSequence:()=>vf,runTmuxCapturing:()=>l0,runTmux:()=>h0,paneIdByRole:()=>VB,newWindow:()=>BJ,killSession:()=>$1,globalTasksPaneWidth:()=>sZ,getSessionOptions:()=>y1,getSessionOption:()=>Bz,getServerOptions:()=>FY,getServerOption:()=>iV,ensureFallbackSession:()=>eZ,currentSessionName:()=>b1,claudePaneIdStrict:()=>pz,claudePaneId:()=>KB,capturePaneById:()=>rz,attachArgv:()=>$z,SURFACE_WINDOW_OPTION:()=>UB,PANE_ROLE_OPTION:()=>XX,KOBE_TMUX_SOCKET:()=>HJ,KOBE_HOME_SESSION:()=>aV,CLAUDE_ROLE_OPTION:()=>pO,CHAT_TAB_SESSION_ID_OPTION:()=>kJ});import{homedir as lO}from"os";function Hz(...f){return["tmux","-L",HJ,...f]}function Lf(f){return`kobe-${f.replace(/[^A-Za-z0-9_-]/g,"")}`}function $z(f){return Hz("attach-session","-t",`=${f}`)}async function BB(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:az,stdout:"ignore",stderr:"pipe"}),[Y,z]=await Promise.all([BB(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:az,stdout:"ignore",stderr:"ignore"}).exited}catch{return 1}}function jB(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 vf(f){let J=jB(f);return J.length===0?0:h0(J)}async function l0(f){try{let J=Bun.spawn(Hz(...f),{stdin:"ignore",cwd:az,stdout:"pipe",stderr:"pipe"}),[Y,z,G]=await Promise.all([BB(J.stdout),BB(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 GX(f){let J=jB(f);return J.length===0?{code:0,stdout:""}:l0(J)}async function bJ(){try{return await Bun.spawn(["tmux","-V"],{stdin:"ignore",cwd:az,stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function jf(f){return await aO(["has-session","-t",`=${f}`])===0}async function $O(f){let{code:J,stdout:Y}=await l0(["list-windows","-t",`=${f}`,"-F","#{window_id}"]);if(J!==0)return 0;return Y.split(`
|
|
36
|
+
`).filter((z)=>z.trim().length>0).length}async function MY(f,J,Y){await h0(["set-option","-t",f,J,Y])}async function Bz(f,J){let{code:Y,stdout:z}=await l0(["show-options","-v","-t",f,J]);return Y===0?z.trim():""}async function y1(f,J){let Y=Object.fromEntries(J.map((X)=>[X,void 0])),{code:z,stdout:G}=await GX(J.map((X)=>["show-options","-q","-t",f,X]));if(z!==0)return Y;for(let X of G.split(`
|
|
37
|
+
`)){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 l0(["show-options","-sqv",f]);return J===0?Y.trim():""}async function FY(f){let J=Object.fromEntries(f.map((G)=>[G,void 0])),{code:Y,stdout:z}=await GX(f.map((G)=>["show-options","-sq",G]));if(Y!==0)return J;for(let G of z.split(`
|
|
38
|
+
`)){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 sZ(){let f=await iV($J),J=Number.parseInt(f,10);return Number.isFinite(J)&&J>0?Jz(J):eY}async function lV(f,J){await h0(["set-option","-p","-t",f,XX,J])}async function OY(f,J,Y){await h0(["set-window-option","-t",f,J,Y])}async function rO(f){await lV(f,WB)}async function VB(f,J,Y=!1){let{code:z,stdout:G}=await l0(["list-panes","-t",`=${f}`,"-F",`#{pane_id} #{${XX}}`]);if(z!==0)return"";let X="";for(let q of G.split(`
|
|
39
|
+
`)){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 KB(f){return VB(f,WB,!0)}async function pz(f){return VB(f,WB,!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 l0(Y);return z===0?G:""}async function tZ(f,J){await h0(["send-keys","-t",f,"-l","--",J])}async function ZX(f,J){await h0(["send-keys","-t",f,J])}async function BJ(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 l0(Y),X=G.trim();if(z===0&&X)await OY(X,UB,"1");return}Y.push(J.command),await h0(Y)}async function _O(f){let{code:J,stdout:Y}=await l0(["display-message","-t",f,"-p",`#{${UB}}`]);return J===0&&Y.trim()==="1"}async function b1(){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 l0(f),G=z.trim();return Y===0&&G.length>0?G:null}async function $1(f){if(!f.startsWith("kobe-hidden-")){let J=aG(f);if(await jf(J))await h0(["kill-session","-t",`=${J}`])}if(await jf(f))await h0(["kill-session","-t",`=${f}`])}async function eZ(){let f=aV;if(await jf(f)){if(await Bz(f,dV)==="tasks")return f;await h0(["kill-session","-t",`=${f}`])}let Y=(await l0(["new-session","-d","-s",f,"-c",az,"-x","220","-y","50","-P","-F","#{pane_id}",RW()])).stdout.trim();if(Y){let z=await sZ(),X=(await l0(["split-window","-h","-b","-t",Y,"-l",`${z}`,"-c",az,"-P","-F","#{pane_id}",R1(of()+KY(Cf()))])).stdout.trim();if(X)await vf([["set-option","-p","-t",X,XX,"tasks"],["select-pane","-t",X]])}return await MY(f,dV,"tasks"),f}async function SJ(f,J){if(await b1()!==f)return;if(J&&J!==f&&await jf(J)){await h0(["switch-client","-t",`=${J}`]);return}let z=await eZ();await h0(["switch-client","-t",`=${z}`])}var HJ,az,XX="@kobe_role",pO,WB="claude",kJ="@kobe_session_id",UB="@kobe_surface",aV="kobe-home",dV="@kobe_home";var Ef=N(()=>{aJ();Qz();XJ();HJ=process.env.KOBE_TMUX_SOCKET?.trim()||"kobe";az=lO()||"/";pO=XX});async function oO(f,J=$V){let{code:Y,stdout:z}=await J.capture(["list-windows","-t",`=${f}`,"-F",`#{window_index} #{automatic-rename} #{${kJ}}`]);if(Y!==0)return[];let G=[];for(let X of z.split(`
|
|
40
|
+
`)){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 sO(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 tO(f){let{code:J,stdout:Y}=await f.capture(["show-window-options","-g","automatic-rename"]);return J===0&&/\boff\b/.test(Y)}async function eO(f,J,Y,z){return await z.run(["rename-window","-t",`=${f}:${J}`,"--",Y])===0}async function pV(f,J=fA){let Y=0,z=null,G=async(X,q)=>{if(q.autoRename==="1")return!1;if(q.autoRename==="0"){if(z===null)z=await tO(J.runner);if(!z)return!0}return sO(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 oO(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??Tf;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 eO(q,V.index,j,J.runner))Y++}catch{}}return Y}var $V,fA;var rV=N(()=>{hZ();Ef();I1();$V={capture:l0,run:h0};fA={runner:$V,titleFromSessionId:qV,titleFromWorktree:vz}});function oV(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 _V(f,J,Y=new Date){let z=oV(J);return`[${Y.toISOString()}] daemon ${f}: ${z.stack??`${z.name}: ${z.message}`}
|
|
41
|
+
`}function JA(f,J,Y=new Date){let z=oV(J);return`[${Y.toISOString()}] daemon error [${f}]: ${z.stack??`${z.name}: ${z.message}`}
|
|
42
|
+
`}function xf(f,J){process.stderr.write(JA(f,J))}function YA(f,J,Y=new Date){return`[${Y.toISOString()}] daemon [${f}]: ${J}
|
|
43
|
+
`}function AY(f,J){process.stderr.write(YA(f,J))}function sV(f=(J)=>process.stderr.write(J)){if(DB||LB)return;DB=(J)=>f(_V("unhandledRejection",J)),LB=(J)=>f(_V("uncaughtException",J)),process.on("unhandledRejection",DB),process.on("uncaughtException",LB)}var DB,LB;async function zA(f,J=vz){let Y=[];for(let z of f.listTasks()){if(z.archived||z.title!==yJ||!z.worktreePath)continue;try{let G=await J(z.worktreePath,z.vendor??Tf);if(!G)continue;let X=f.getTask(z.id);if(!X||X.title!==yJ)continue;await f.setTitle(z.id,G),Y.push({id:z.id,title:G})}catch(G){xf("auto-title-poller",G)}}return Y}function tV(f,J=MB,Y){if(J<=0)return()=>{};let z=!1,X=setInterval(()=>{if(Y&&!Y())return;if(z)return;z=!0,zA(f).then(()=>pV(f)).catch((q)=>xf("auto-title-poller",q)).finally(()=>{z=!1})},J);return X.unref?.(),()=>clearInterval(X)}var MB=4000;var eV=N(()=>{hZ();YX();rV();I1()});class FB{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 fq(){return nf()[jz]===!0}var jz="experimental.autoStatus";var QX=N(()=>{rY()});async function f7(f,J,Y=fq){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 J7=N(()=>{QX()});import{createHash as GA}from"crypto";import{homedir as XA}from"os";import RY from"path";function BA(){return RY.join(process.env.KOBE_HOME_DIR??XA(),".kobe")}function jA(f){let Y=(RY.basename(f)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",z=GA("sha1").update(RY.resolve(f)).digest("hex").slice(0,12);return`${Y}-${z}`}function WA(f){if(!RY.isAbsolute(f))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${f}`);return RY.join(BA(),ZA,jA(f))}function VA(f){if(!RY.isAbsolute(f))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${f}`);return[WA(f),...HA.map((J)=>RY.join(f,J))]}function gY(f){return f.length>1&&f.endsWith("/")?f.slice(0,-1):f}function Y7(f,J){return J===f||J.startsWith(`${f}/`)}function z7(f,J){let Y=gY(J),z,G=-1;for(let X of f){if(!X.worktreePath)continue;let q=gY(X.worktreePath);if(Y7(q,Y)&&q.length>G)G=q.length,z=X.id}return z}function OB(f,J){let Y=gY(J),z,G=-1;for(let X of f){if(!X.repo)continue;let q=gY(X.repo);if(Y7(q,Y)&&q.length>G)G=q.length,z=q}return z}function G7(f,J){let Y=gY(J),z=new Set,G=new Set;for(let X of f){if(X.repo)z.add(gY(X.repo));if(X.worktreePath)G.add(gY(X.worktreePath))}for(let X of z)for(let q of VA(X).map(gY)){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 ZA="worktrees",qA=".kobe/worktrees",QA=".claude/worktrees",HA;var X7=N(()=>{HA=[qA,QA]});function RB(f){return{message:f instanceof Error?f.message:String(f),name:f instanceof Error?f.name:void 0}}async function HX(f,J,Y,z){let G=f.get(J);if(!G)throw Error(`unknown daemon request: ${J}`);return G.handle(CB(Y),z)}function BX(){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(!BZ({localVersion:n1,localMin:BY,remoteVersion:z,remoteMin:G}))throw Error(`daemon is protocol v${n1} (min v${BY}); this client is v${z} (min v${G}). Upgrade your kobe.`);return{protocolVersion:n1,minProtocolVersion:BY,kobeVersion:t0,capabilities:[...UH],daemonPid:Y.daemon.pid,clientId:Y.clientId,tasks:Y.orch.listTasks().map(JJ)}}},{name:"daemon.status",handle(J,Y){return{daemonPid:Y.daemon.pid,kobeVersion:t0,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(JJ)}}},{name:"task.get",handle(J,Y){let z=Ff(J,"taskId"),G=Y.orch.getTask(z);if(!G)throw Error(`task not found: ${z}`);return{task:JJ(G)}}},{name:"task.create",async handle(J,Y){let z=Ff(J,"repo"),G=await Y.orch.createTask({repo:z,title:p1(J,"title"),branch:p1(J,"branch"),baseRef:p1(J,"baseRef"),vendor:gB(J,"vendor"),modelEffort:p1(J,"effort")});return{taskId:G.id,task:JJ(G)}}},{name:"task.archive",async handle(J,Y){let z=Ff(J,"taskId");return await Y.orch.setArchived(z,AB(J,"archived")),{}}},{name:"task.rename",async handle(J,Y){let z=Ff(J,"taskId");return await Y.orch.setTitle(z,Ff(J,"title")),{}}},{name:"task.setBranch",async handle(J,Y){let z=Ff(J,"taskId");return await Y.orch.setBranch(z,Ff(J,"branch")),{}}},{name:"task.setVendor",async handle(J,Y){let z=Ff(J,"taskId"),G=gB(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=Ff(J,"taskId");return await Y.orch.deleteTask(z,{force:AB(J,"force")}),Y.activity.clearTask(z),{}}},{name:"task.pin",async handle(J,Y){let z=Ff(J,"taskId");return await Y.orch.setPinned(z,AB(J,"pinned")),{}}},{name:"task.move",async handle(J,Y){let z=Ff(J,"taskId"),G=Ff(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=Ff(J,"taskId"),G=Ff(J,"status");if(!XV(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){xf("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=Ff(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=Ff(J,"repo"),G=await Y.orch.ensureMainTask(z);return{task:JJ(G)}}},{name:"project.forget",async handle(J,Y){let z=Ff(J,"repo");return await Y.orch.forgetProject(z),{}}},{name:"task.ensureWorktree",async handle(J,Y){let z=Ff(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=Ff(J,"repo");return{worktrees:await Y.orch.discoverAdoptableWorktrees(z)}}},{name:"worktree.adopt",async handle(J,Y){let z=await Y.orch.adoptWorktree({repo:Ff(J,"repo"),worktreePath:Ff(J,"worktreePath"),branch:p1(J,"branch"),vendor:gB(J,"vendor"),title:p1(J,"title"),ifExists:p1(J,"ifExists")==="return"?"return":"error"});return{task:JJ(z)}}},{name:"worktree.reconcile",async handle(J,Y){let z=Ff(J,"cwd"),G=Ff(J,"worktreePath"),X=OB(Y.orch.listTasks(),z)??OB(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 xf("worktree-created",q),{adopted:!1}}}},{name:"task.setActive",async handle(J,Y){let z=p1(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(Ff(J,"repoRoot"))}},{name:"issue.mutate",async handle(J,Y){let z=await Y.issues.mutate(Ff(J,"repoRoot"),J.op);return Y.bus.publish("issue.snapshot",z),z}},{name:"session.deliver",async handle(J,Y){let z=Ff(J,"taskId"),G=Ff(J,"text"),X=p1(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=Ff(J,"taskId"),G=Ff(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=Ff(J,"kind");if(!KZ(z))throw Error(`unknown engine event kind: ${z}`);let G=p1(J,"taskId"),X=p1(J,"cwd");if(!G&&X&&z==="session-start"){let H=G7(Y.orch.listTasks(),X);if(H)try{await Y.orch.adoptWorktree({repo:H.repo,worktreePath:H.worktreePath,ifExists:"return"})}catch(B){xf("worktree-autosync",B)}}let q=G??(X?z7(Y.orch.listTasks(),X):void 0);if(!q)return{};let Q=KA(J);if(Y.activity.report(q,z,Q),z==="turn-start")f7(Y.orch,q).then((H)=>{if(H==="moved")console.log(`[status-rules] task ${q} auto-moved backlog \u2192 in_progress`)}).catch((H)=>xf("status-rules",H));return{}}}].map((J)=>[J.name,J]))}function CB(f){if(!f||typeof f!=="object"||Array.isArray(f))return{};return f}function Ff(f,J){let Y=f[J];if(typeof Y!=="string"||Y.length===0)throw Error(`${J} is required`);return Y}function p1(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 AB(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 gB(f,J){let Y=p1(f,J);return Y&&Y.trim().length>0?Y:void 0}function KA(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 Jq=N(()=>{UZ();J7();I1();D1();X7();_Y()});import{execFile as UA}from"child_process";import{mkdir as DA,readFile as LA,realpath as Z7,rename as MA,stat as FA,writeFile as OA}from"fs/promises";import{homedir as AA}from"os";import{dirname as gA,isAbsolute as RA,join as CA,resolve as q7}from"path";import{promisify as NA}from"util";function yA(f){return(f instanceof Error?f.message:String(f)).includes("not a git repository")}function zq(f=process.env.KOBE_HOME_DIR??AA()){return CA(f,".kobe","issues.json")}function H7(f){return typeof f==="string"&&Q7.includes(f)}function bA(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:H7(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 kA(){return{version:1,repos:{}}}function SA(){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 IA(f){let{stdout:J}=await IB("git",["-C",f,"rev-parse","--git-common-dir"]),Y=J.trim();return Z7(RA(Y)?Y:q7(f,Y))}async function TA(f){let{stdout:J}=await IB("git",["-C",f,"rev-parse","--show-toplevel"]);return J.trim()}async function uA(f){let{stdout:J}=await IB("git",["-C",f,"worktree","list","--porcelain"]),Y=J.split(/\r?\n/).find((z)=>z.startsWith("worktree "))?.slice(9).trim();return Y?Z7(Y):TA(f)}async function NB(f){if(typeof f!=="string"||f.length===0)throw Error("repoRoot is required");let J=q7(f);if(!(await FA(J).catch(()=>null))?.isDirectory())throw Error("repoRoot does not exist");try{let[z,G]=await Promise.all([uA(J),IA(J)]);return{repoRoot:z,repoKey:G}}catch(z){if(yA(z))throw Error("repoRoot is not a git repository");throw z}}async function yB(f){try{let J=JSON.parse(await LA(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(bA).filter((q)=>q!==null):[]}}return{version:1,repos:Y}}catch(J){if(J.code==="ENOENT")return kA();throw J}}async function bB(f,J){await DA(gA(f),{recursive:!0});let Y=`${f}.tmp`;await OA(Y,`${JSON.stringify(J,null,2)}
|
|
44
|
+
`,"utf8"),await MA(Y,f)}function kB(f,J){return{repoRoot:f,exists:J!==null,nextId:J?.nextId??1,issues:J?.issues??[]}}async function SB(f,J){let z=(Yq.get(f)??Promise.resolve()).then(J),G=z.then(()=>{return},()=>{return});return Yq.set(f,G),G.then(()=>{if(Yq.get(f)===G)Yq.delete(f)}),z}class Gq{path;constructor(f=zq()){this.path=f}async list(f){let{repoRoot:J,repoKey:Y}=await NB(f);return SB(this.path,async()=>{let z=await yB(this.path),G=z.repos[Y]??null;if(G&&G.repoRoot!==J)G.repoRoot=J,await bB(this.path,z);return kB(J,G)})}async mirrorTaskDone(f,J){let{repoRoot:Y,repoKey:z}=await NB(f);if(!J)return null;return SB(this.path,async()=>{let G=await yB(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 bB(this.path,G),kB(Y,X)})}async mutate(f,J){let{repoRoot:Y,repoKey:z}=await NB(f);if(!J||typeof J!=="object"||Array.isArray(J)||typeof J.type!=="string")throw Error("missing op");return SB(this.path,async()=>{let G=await yB(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:SA(),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(!H7(q.status))throw Error(`invalid status: must be one of ${Q7.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 bB(this.path,G),kB(Y,X)})}}var IB,Q7,Yq;var TB=N(()=>{IB=NA(UA),Q7=["open","doing","hold","done"];Yq=new Map});import{mkdirSync as EA,watch as xA}from"fs";import{basename as wA,dirname as hA}from"path";function Xq(f){if(f.debounceMs<=0)return()=>{};let J=hA(f.filePath),Y=new Set([wA(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{EA(J,{recursive:!0}),X=xA(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 uB=()=>{};import{homedir as PA}from"os";import{basename as vA,join as mA}from"path";function xB(f=process.env.KOBE_HOME_DIR??PA()){return mA(f,".kobe","settings","keybindings.yaml")}function B7(f,J={}){let Y=J.debounceMs??EB;if(Y<=0)return()=>{};let z=J.path??xB(),G=vA(z),X=G.replace(/\.yaml$/,".yml"),q=0;return f.publish("keybindings",{rev:q}),Xq({filePath:z,matchBasenames:[G,X],debounceMs:Y,onTrigger:()=>{try{q+=1,f.publish("keybindings",{rev:q})}catch(H){xf("keybindings-watcher",H)}},onError:(H)=>xf("keybindings-watcher",H)})}var EB=200;var j7=N(()=>{uB()});class wB{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??cA,this.log=f.log??AY}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 cA=(f,J)=>{let Y=setTimeout(f,J);return Y.unref?.(),()=>clearTimeout(Y)};var W7=()=>{};import{spawn as nA}from"child_process";function hB(f,J,Y,z){if(Y)return f+z.slowRetryMs;return J+Math.max(z.minIntervalMs,(J-f)*5)}function PB(f,J){return!f.inFlight&&J>=f.nextAllowedAt}function Zq(f,J,Y,z){let G=Date.now();if(!PB(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=hB(G,Date.now(),B,J),f.inFlight=!1,H&&!B)z(Q)})(),!0}function jJ(f,J,Y){return new Promise((z)=>{let G="",X=!1,q=(H)=>{if(X)return;X=!0,z({status:H,stdout:G})},Q=nA(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 jX=()=>{};function $A(f){if(f.archived)return!1;if(f.kind==="main")return!1;if(!f.branch||!f.worktreePath)return!1;if(Y1(f.repo)||Y1(f.worktreePath))return!1;return!0}async function pA(f,J){let Y=J.tickMs??qq,z=[];for(let G of f.listTasks()){if(!$A(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+dA);continue}let Q=NV(q.view,J.at),H=f.getTask(G.id);if(!H){J.schedule.delete(G.id);continue}if(!rZ(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?iA:Y))}catch(q){xf("pr-status-poller",q),J.schedule.set(G.id,J.now+Y)}}return z}function V7(f,J=qq,Y,z=aA){if(J<=0)return()=>{};let G=new Map,X=!1,Q=setInterval(()=>{if(Y&&!Y())return;if(X)return;X=!0,pA(f,{run:z,now:Date.now(),at:new Date().toISOString(),schedule:G,tickMs:J}).catch((H)=>xf("pr-status-poller",H)).finally(()=>{X=!1})},J);return Q.unref?.(),()=>clearInterval(Q)}var qq=30000,dA=300000,iA=600000,lA=1e4,aA=async(f,J)=>{let Y=new AbortController,z=setTimeout(()=>Y.abort(),lA);try{let G=await jJ("gh",["pr","view",J,"--json",CV],{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 K7=N(()=>{jX();Af()});import{readFileSync as rA}from"fs";import{homedir as _A}from"os";import{basename as oA,join as sA}from"path";function mB(f=process.env.KOBE_HOME_DIR??_A()){return sA(f,".config","kobe","state.json")}function U7(f){let J={};try{let B=JSON.parse(rA(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"&&eA.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 fg(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 D7(f,J={}){let Y=J.debounceMs??vB;if(Y<=0)return()=>{};let z=J.pollMs??tA,G=J.statePath??mB(),X=oA(G),q=U7(G);return f.publish("ui-prefs",q),Xq({filePath:G,matchBasenames:[X],debounceMs:Y,pollMs:z,onTrigger:()=>{try{let H=U7(G);if(fg(q,H))return;q=H,f.publish("ui-prefs",H)}catch(H){xf("ui-prefs-watcher",H)}},onError:(H)=>xf("ui-prefs-watcher",H)})}var vB=200,tA=250,eA;var L7=N(()=>{uB();eA=["primary","success","info"]});function cB(){return nf()[Wz]===!0}var Wz="experimental.dispatcher";var Qq=N(()=>{rY()});import{randomUUID as Jg}from"crypto";function WJ(f){return`engineCommand.${f}`}function VJ(f){return`engineName.${f}`}function Vz(f){return bf(VJ(f))?.trim()||nB[f]||f}function WX(f){return rf(f??"claude").defaultCommand}function Yg(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 k1(f,J){let Y=f??"claude",z=bf(WJ(Y))?.trim(),G=(()=>{if(z){let X=Yg(z);if(X.length>0)return X}return WX(Y)})();return zg(G,Y,J)}function zg(f,J,Y){let z=Y?.trim();if(!z)return f;let G=J??"claude";if(!rf(G).effortLevels?.includes(z))return f;if(G==="codex")return[...f,"-c",`model_reasoning_effort=${z}`];return f}function _z(f,J){if((J??"claude")!=="claude")return{argv:f,sessionId:null};if(f.some((z)=>Gg.has(z)))return{argv:f,sessionId:null};let Y=Jg();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 Xg(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(`
|
|
45
|
+
`)}function Zg(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(`
|
|
46
|
+
`)}function qg(f,J=Kz(),Y={}){let z=[];if((Y.status??fq)())z.push(Xg(f,J));if((Y.notes??cB)())z.push(Zg(f,J));return z.length>0?z.join(`
|
|
47
|
+
|
|
48
|
+
`):null}function Hq(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=qg(Y,Kz(),z);if(!G)return f;return[...f,"--append-system-prompt",G]}function Qg(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(`
|
|
49
|
+
`)}function Bq(f,J,Y,z=cB){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",Qg(Y)]}var nB,Gg;var x1=N(()=>{aJ();DY();QX();Qq();Af();U1();nB=Object.fromEntries(dY.map((f)=>[f,rf(f).displayName]));Gg=new Set(["--session-id","--resume","-r","--continue","-c","--from-pr"])});function oz(f){return Uz.includes(f)?f:"auto"}var Uz,M7,oJ="editor.kind",CY="editor.customCommand",jq="auto";var Wq=N(()=>{Uz=["auto","vim","nvim","nano","emacs","custom"],M7=["nvim","vim","emacs","nano"]});function Lz(f){return f==="taskpanel"?"taskpanel":"chattab"}var sJ="settings.surface",Dz="chattab";function w1(f=process.env){return{...f,...dB}}var dB;var NY=N(()=>{dB={GIT_OPTIONAL_LOCKS:"0"}});async function sz(f,J,Y={}){if(!f)return{stdout:"",stderr:"worktreePath is required",status:-1};let z=(Y.execForPath??_J)(f),G=Y.timeoutMs&&Y.timeoutMs>0?new AbortController:null,X=!1,q=G?setTimeout(()=>{X=!0,G.abort()},Y.timeoutMs):null,Q=G&&Y.signal?AbortSignal.any([G.signal,Y.signal]):G?.signal??Y.signal,H;try{H=await z.run(["git",...J],{cwd:f,env:dB,signal:Q})}catch(B){if(q)clearTimeout(q);return{stdout:"",stderr:B instanceof Error?B.message:String(B),status:-1}}if(q)clearTimeout(q);if(X&&H.exitCode===-1&&!H.stderr)return{stdout:H.stdout,stderr:`git ${J.join(" ")} timed out after ${Y.timeoutMs}ms`,status:-1};return{stdout:H.stdout,stderr:H.stderr,status:H.exitCode}}function Hg(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 F7(f,J,Y={}){let z=Hg(f,J);if(!z)return null;let G=(Y.execForPath??_J)(f);try{return await G.readFile(z)}catch{return null}}var Vq=N(()=>{QJ();NY()});import{statSync as Bg}from"fs";async function VX(f,J){let Y=await sz(f,J,{timeoutMs:jg}),z=Y.status??-1;return{ok:z===0,stdout:Y.stdout,stderr:Y.stderr,code:z}}function Vg(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 O7(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(Kg(G),z.endsWith(`
|
|
50
50
|
`)?z:`${z}
|
|
51
|
-
`)}return J}function
|
|
52
|
-
`:z==="t"?"\t":z)}async function
|
|
51
|
+
`)}return J}function Kg(f){if(!(f.startsWith('"')&&f.endsWith('"')))return f;return f.slice(1,-1).replace(/\\([\\"nt])/g,(Y,z)=>z==="n"?`
|
|
52
|
+
`:z==="t"?"\t":z)}async function Ug(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 Dg(f,J){let Y=await VX(f,["diff","--no-color","--no-index","--","/dev/null",J]);if(Y.stdout.trim())return Y.stdout.endsWith(`
|
|
53
53
|
`)?Y.stdout:`${Y.stdout}
|
|
54
|
-
`;return""}async function
|
|
55
|
-
`),M={files:U,raw:O};return Response.json(M)}var NA=15000,yA=8;var J7=k(()=>{ZJ();qq()});import{isAbsolute as uA}from"path";function z7(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9_-]+$/.test(f)}function xA(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9._-]+$/.test(f)&&!f.includes("..")}async function wA(f){let J=f.searchParams.get("worktreePath"),Y=f.searchParams.get("vendor")??"claude";if(!J||!uA(J))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!z7(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 hA(f){let J=f.searchParams.get("vendor")??"claude",Y=f.searchParams.get("sessionId");if(!z7(J))return Response.json({error:"invalid vendor"},{status:400});if(!xA(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 G7(f,J){if(J.pathname!==Y7&&J.pathname!==EA)return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return J.pathname===Y7?wA(J):hA(J)}var Y7="/api/history/sessions",EA="/api/history/messages";var X7=k(()=>{UY()});import{mkdir as PA,readFile as vA,writeFile as mA}from"fs/promises";import{join as Z7}from"path";function q7(){return Z7(ef(),"notes")}function Q7(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9_-]+$/.test(f)}function H7(f){return Z7(q7(),`${f}.md`)}async function nA(f){let J=f.searchParams.get("taskId");if(!Q7(J))return Response.json({error:"invalid taskId"},{status:400});try{let Y="";try{Y=await vA(H7(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 dA(f){let J;try{J=await f.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(!Q7(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 PA(q7(),{recursive:!0}),await mA(H7(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 B7(f,J){if(J.pathname!==cA)return null;if(f.method==="GET")return nA(J);if(f.method==="PUT")return dA(f);return Response.json({error:"method not allowed"},{status:405})}var cA="/api/notes";var j7=k(()=>{lf()});var oz;var Qq=k(()=>{oz={$schema:"https://opencode.ai/theme.json",defs:{darkBg:"#141413",darkBgRaised:"#1A1917",darkBgInset:"#2B2A27",darkBgMenu:"#33312E",darkBorderSubtle:"#2B2A27",darkBorder:"#3A3835",darkBorderActive:"#5C5853",darkText:"#EAE7DF",darkTextMuted:"#A9A39A",darkTextSubtle:"#6B665F",darkPrimary:"#CC785C",darkSecondary:"#D4967E",darkAccent:"#CC785C",darkAccentHover:"#E0AB96",darkRed:"#D47563",darkOrange:"#D97757",darkYellow:"#E8C96B",darkGreen:"#9ACA86",darkBlue:"#61AAF2",darkViolet:"#9B87F5",darkTerracotta:"#BF4D43",lightBg:"#FAF9F5",lightBgRaised:"#F0EEE6",lightBgInset:"#EAE7DF",lightBgMenu:"#E2DED4",lightBorderSubtle:"#EAE7DF",lightBorder:"#D9D5CC",lightBorderActive:"#A9A39A",lightText:"#1A1917",lightTextMuted:"#6B665F",lightTextSubtle:"#8D877D",lightPrimary:"#C96442",lightSecondary:"#B85F3D",lightAccent:"#CC785C",lightAccentHover:"#B85F3D",lightRed:"#A84B3A",lightOrange:"#C96442",lightYellow:"#8A6220",lightGreen:"#2E7C4C",lightBlue:"#207FDE",lightViolet:"#7B5BB6",lightTerracotta:"#BF4D43"},theme:{primary:{dark:"darkPrimary",light:"lightPrimary"},secondary:{dark:"darkSecondary",light:"lightSecondary"},accent:{dark:"darkAccent",light:"lightAccent"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkYellow",light:"lightYellow"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkBlue",light:"lightBlue"},text:{dark:"darkText",light:"lightText"},textMuted:{dark:"darkTextMuted",light:"lightTextMuted"},background:{dark:"darkBg",light:"lightBg"},backgroundPanel:{dark:"darkBgRaised",light:"lightBgRaised"},backgroundElement:{dark:"darkBgInset",light:"lightBgInset"},backgroundMenu:{dark:"darkBgMenu",light:"lightBgMenu"},backgroundDialog:{dark:"darkBgRaised",light:"lightBgRaised"},border:{dark:"darkBorder",light:"lightBorder"},borderActive:{dark:"darkBorderActive",light:"lightBorderActive"},borderSubtle:{dark:"darkBorderSubtle",light:"lightBorderSubtle"},diffAdded:{dark:"darkGreen",light:"lightGreen"},diffRemoved:{dark:"darkRed",light:"lightRed"},diffContext:{dark:"darkTextMuted",light:"lightTextSubtle"},diffHunkHeader:{dark:"darkTextMuted",light:"lightTextSubtle"},diffHighlightAdded:{dark:"#B5E0A0",light:"#1F6638"},diffHighlightRemoved:{dark:"#E89180",light:"#8A3A2C"},diffAddedBg:{dark:"#1F2A1F",light:"#E5EEDF"},diffRemovedBg:{dark:"#2A1F1C",light:"#F5DAD3"},diffContextBg:{dark:"darkBgRaised",light:"lightBgRaised"},diffLineNumber:{dark:"darkTextSubtle",light:"lightTextSubtle"},diffAddedLineNumberBg:{dark:"#1A2419",light:"#D5E2CC"},diffRemovedLineNumberBg:{dark:"#241915",light:"#EBC8BE"},markdownText:{dark:"darkText",light:"lightText"},markdownHeading:{dark:"darkPrimary",light:"lightPrimary"},markdownLink:{dark:"darkAccent",light:"lightAccent"},markdownLinkText:{dark:"darkBlue",light:"lightBlue"},markdownCode:{dark:"darkSecondary",light:"lightSecondary"},markdownBlockQuote:{dark:"darkTextMuted",light:"lightTextMuted"},markdownEmph:{dark:"darkYellow",light:"lightYellow"},markdownStrong:{dark:"darkPrimary",light:"lightPrimary"},markdownHorizontalRule:{dark:"darkTextMuted",light:"lightTextMuted"},markdownListItem:{dark:"darkAccent",light:"lightAccent"},markdownListEnumeration:{dark:"darkBlue",light:"lightBlue"},markdownImage:{dark:"darkAccent",light:"lightAccent"},markdownImageText:{dark:"darkBlue",light:"lightBlue"},markdownCodeBlock:{dark:"darkText",light:"lightText"},markdownQuote:{dark:"darkTextMuted",light:"lightTextMuted"},syntaxComment:{dark:"darkTextSubtle",light:"lightTextSubtle"},syntaxKeyword:{dark:"darkPrimary",light:"lightPrimary"},syntaxFunction:{dark:"darkBlue",light:"lightBlue"},syntaxVariable:{dark:"darkText",light:"lightText"},syntaxString:{dark:"darkGreen",light:"lightGreen"},syntaxNumber:{dark:"darkOrange",light:"lightOrange"},syntaxType:{dark:"darkViolet",light:"lightViolet"},syntaxOperator:{dark:"darkSecondary",light:"lightSecondary"},syntaxPunctuation:{dark:"darkText",light:"lightText"},selectedListItemText:{dark:"darkBg",light:"lightBg"}}}});var sz;var Hq=k(()=>{sz={$schema:"https://opencode.ai/theme.json",defs:{darkStep1:"#0a0a0a",darkStep2:"#111111",darkStep3:"#181818",darkStep4:"#1f1f1f",darkStep5:"#2a2a2a",darkStep6:"#363636",darkStep7:"#444444",darkStep8:"#5a5a5a",darkStep9:"#7a7a7a",darkStep10:"#9a9a9a",darkStep11:"#909090",darkStep12:"#e8e8e8",darkAccent:"#7da5c8",darkAccentBright:"#9bc3e3",darkRed:"#e06c75",darkOrange:"#d6a668",darkGreen:"#7fd88f",darkCyan:"#7da5c8",darkYellow:"#d6a668",lightStep1:"#fafafa",lightStep2:"#f3f3f3",lightStep3:"#ececec",lightStep4:"#e2e2e2",lightStep5:"#d4d4d4",lightStep6:"#bdbdbd",lightStep7:"#9c9c9c",lightStep8:"#7c7c7c",lightStep9:"#5b5b5b",lightStep10:"#404040",lightStep11:"#6c6c6c",lightStep12:"#1a1a1a",lightAccent:"#3d6f9f",lightAccentBright:"#1a4f87",lightRed:"#c9343a",lightOrange:"#a06b1a",lightGreen:"#3d9a57",lightCyan:"#3d6f9f",lightYellow:"#a06b1a"},theme:{primary:{dark:"darkStep12",light:"lightStep12"},secondary:{dark:"darkAccentBright",light:"lightAccentBright"},accent:{dark:"darkAccent",light:"lightAccent"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkOrange",light:"lightOrange"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkCyan",light:"lightCyan"},text:{dark:"darkStep12",light:"lightStep12"},textMuted:{dark:"darkStep11",light:"lightStep11"},background:{dark:"darkStep1",light:"lightStep1"},backgroundPanel:{dark:"darkStep2",light:"lightStep2"},backgroundElement:{dark:"darkStep3",light:"lightStep3"},backgroundMenu:{dark:"darkStep4",light:"lightStep4"},border:{dark:"darkStep6",light:"lightStep6"},borderActive:{dark:"darkStep8",light:"lightStep8"},borderSubtle:{dark:"darkStep4",light:"lightStep4"},diffAdded:{dark:"#7fd88f",light:"#3d9a57"},diffRemoved:{dark:"#e06c75",light:"#c9343a"},diffContext:{dark:"darkStep10",light:"lightStep10"},diffHunkHeader:{dark:"darkStep10",light:"lightStep10"},diffHighlightAdded:{dark:"#9be5ad",light:"#2d7a3f"},diffHighlightRemoved:{dark:"#f08490",light:"#a82530"},diffAddedBg:{dark:"#15241a",light:"#d8efdc"},diffRemovedBg:{dark:"#2a1518",light:"#f5dadc"},diffContextBg:{dark:"darkStep2",light:"lightStep2"},diffLineNumber:{dark:"darkStep9",light:"lightStep9"},diffAddedLineNumberBg:{dark:"#0f1c14",light:"#c5deca"},diffRemovedLineNumberBg:{dark:"#221012",light:"#e5c5c8"},markdownText:{dark:"darkStep12",light:"lightStep12"},markdownHeading:{dark:"darkStep12",light:"lightStep12"},markdownLink:{dark:"darkAccent",light:"lightAccent"},markdownCode:{dark:"darkAccentBright",light:"lightAccentBright"},markdownCodeBlock:{dark:"darkStep12",light:"lightStep12"},markdownQuote:{dark:"darkStep11",light:"lightStep11"},selectedListItemText:{dark:"darkStep1",light:"lightStep1"}}}});var tz;var Bq=k(()=>{tz={$schema:"https://opencode.ai/theme.json",defs:{background:"#282a36",currentLine:"#44475a",selection:"#44475a",foreground:"#f8f8f2",comment:"#6272a4",cyan:"#8be9fd",green:"#50fa7b",orange:"#ffb86c",pink:"#ff79c6",purple:"#bd93f9",red:"#ff5555",yellow:"#f1fa8c"},theme:{primary:{dark:"purple",light:"purple"},secondary:{dark:"pink",light:"pink"},accent:{dark:"cyan",light:"cyan"},error:{dark:"red",light:"red"},warning:{dark:"yellow",light:"yellow"},success:{dark:"green",light:"green"},info:{dark:"orange",light:"orange"},text:{dark:"foreground",light:"#282a36"},textMuted:{dark:"comment",light:"#6272a4"},background:{dark:"#282a36",light:"#f8f8f2"},backgroundPanel:{dark:"#21222c",light:"#e8e8e2"},backgroundElement:{dark:"currentLine",light:"#d8d8d2"},border:{dark:"currentLine",light:"#c8c8c2"},borderActive:{dark:"purple",light:"purple"},borderSubtle:{dark:"#191a21",light:"#e0e0e0"},diffAdded:{dark:"green",light:"green"},diffRemoved:{dark:"red",light:"red"},diffContext:{dark:"comment",light:"#6272a4"},diffHunkHeader:{dark:"comment",light:"#6272a4"},diffHighlightAdded:{dark:"green",light:"green"},diffHighlightRemoved:{dark:"red",light:"red"},diffAddedBg:{dark:"#1a3a1a",light:"#e0ffe0"},diffRemovedBg:{dark:"#3a1a1a",light:"#ffe0e0"},diffContextBg:{dark:"#21222c",light:"#e8e8e2"},diffLineNumber:{dark:"#989aa4",light:"#686865"},diffAddedLineNumberBg:{dark:"#1a3a1a",light:"#e0ffe0"},diffRemovedLineNumberBg:{dark:"#3a1a1a",light:"#ffe0e0"},markdownText:{dark:"foreground",light:"#282a36"},markdownHeading:{dark:"purple",light:"purple"},markdownLink:{dark:"cyan",light:"cyan"},markdownLinkText:{dark:"pink",light:"pink"},markdownCode:{dark:"green",light:"green"},markdownBlockQuote:{dark:"comment",light:"#6272a4"},markdownEmph:{dark:"yellow",light:"yellow"},markdownStrong:{dark:"orange",light:"orange"},markdownHorizontalRule:{dark:"comment",light:"#6272a4"},markdownListItem:{dark:"purple",light:"purple"},markdownListEnumeration:{dark:"cyan",light:"cyan"},markdownImage:{dark:"cyan",light:"cyan"},markdownImageText:{dark:"pink",light:"pink"},markdownCodeBlock:{dark:"foreground",light:"#282a36"},syntaxComment:{dark:"comment",light:"#6272a4"},syntaxKeyword:{dark:"pink",light:"pink"},syntaxFunction:{dark:"green",light:"green"},syntaxVariable:{dark:"foreground",light:"#282a36"},syntaxString:{dark:"yellow",light:"yellow"},syntaxNumber:{dark:"purple",light:"purple"},syntaxType:{dark:"cyan",light:"cyan"},syntaxOperator:{dark:"pink",light:"pink"},syntaxPunctuation:{dark:"foreground",light:"#282a36"}}}});var ez;var jq=k(()=>{ez={$schema:"https://opencode.ai/theme.json",defs:{nord0:"#2E3440",nord1:"#3B4252",nord2:"#434C5E",nord3:"#4C566A",nord4:"#D8DEE9",nord5:"#E5E9F0",nord6:"#ECEFF4",nord7:"#8FBCBB",nord8:"#88C0D0",nord9:"#81A1C1",nord10:"#5E81AC",nord11:"#BF616A",nord12:"#D08770",nord13:"#EBCB8B",nord14:"#A3BE8C",nord15:"#B48EAD"},theme:{primary:{dark:"nord8",light:"nord10"},secondary:{dark:"nord9",light:"nord9"},accent:{dark:"nord7",light:"nord7"},error:{dark:"nord11",light:"nord11"},warning:{dark:"nord12",light:"nord12"},success:{dark:"nord14",light:"nord14"},info:{dark:"nord8",light:"nord10"},text:{dark:"nord6",light:"nord0"},textMuted:{dark:"#8B95A7",light:"nord1"},background:{dark:"nord0",light:"nord6"},backgroundPanel:{dark:"nord1",light:"nord5"},backgroundElement:{dark:"nord2",light:"nord4"},border:{dark:"nord2",light:"nord3"},borderActive:{dark:"nord3",light:"nord2"},borderSubtle:{dark:"nord2",light:"nord3"},diffAdded:{dark:"nord14",light:"nord14"},diffRemoved:{dark:"nord11",light:"nord11"},diffContext:{dark:"#8B95A7",light:"nord3"},diffHunkHeader:{dark:"#8B95A7",light:"nord3"},diffHighlightAdded:{dark:"nord14",light:"nord14"},diffHighlightRemoved:{dark:"nord11",light:"nord11"},diffAddedBg:{dark:"#3B4252",light:"#E5E9F0"},diffRemovedBg:{dark:"#3B4252",light:"#E5E9F0"},diffContextBg:{dark:"nord1",light:"nord5"},diffLineNumber:{dark:"#a9aeb6",light:"textMuted"},diffAddedLineNumberBg:{dark:"#3B4252",light:"#E5E9F0"},diffRemovedLineNumberBg:{dark:"#3B4252",light:"#E5E9F0"},markdownText:{dark:"nord4",light:"nord0"},markdownHeading:{dark:"nord8",light:"nord10"},markdownLink:{dark:"nord9",light:"nord9"},markdownLinkText:{dark:"nord7",light:"nord7"},markdownCode:{dark:"nord14",light:"nord14"},markdownBlockQuote:{dark:"#8B95A7",light:"nord3"},markdownEmph:{dark:"nord12",light:"nord12"},markdownStrong:{dark:"nord13",light:"nord13"},markdownHorizontalRule:{dark:"#8B95A7",light:"nord3"},markdownListItem:{dark:"nord8",light:"nord10"},markdownListEnumeration:{dark:"nord7",light:"nord7"},markdownImage:{dark:"nord9",light:"nord9"},markdownImageText:{dark:"nord7",light:"nord7"},markdownCodeBlock:{dark:"nord4",light:"nord0"},syntaxComment:{dark:"#8B95A7",light:"nord3"},syntaxKeyword:{dark:"nord9",light:"nord9"},syntaxFunction:{dark:"nord8",light:"nord8"},syntaxVariable:{dark:"nord7",light:"nord7"},syntaxString:{dark:"nord14",light:"nord14"},syntaxNumber:{dark:"nord15",light:"nord15"},syntaxType:{dark:"nord7",light:"nord7"},syntaxOperator:{dark:"nord9",light:"nord9"},syntaxPunctuation:{dark:"nord4",light:"nord0"}}}});var fG;var Wq=k(()=>{fG={$schema:"https://opencode.ai/theme.json",defs:{darkStep1:"#161616",darkStep2:"#1f1f1f",darkStep3:"#282828",darkStep4:"#323232",darkStep5:"#3c3c3c",darkStep6:"#484848",darkStep7:"#545454",darkStep8:"#6a6a6a",darkStep9:"#fab283",darkStep10:"#ffc09f",darkStep11:"#808080",darkStep12:"#eeeeee",darkSecondary:"#5c9cf5",darkAccent:"#7da5c8",darkRed:"#e06c75",darkOrange:"#f5a742",darkGreen:"#7fd88f",darkCyan:"#56b6c2",darkYellow:"#e5c07b",lightStep1:"#ffffff",lightStep2:"#fafafa",lightStep3:"#f5f5f5",lightStep4:"#ebebeb",lightStep5:"#e1e1e1",lightStep6:"#d4d4d4",lightStep7:"#b8b8b8",lightStep8:"#a0a0a0",lightStep9:"#3b7dd8",lightStep10:"#2968c3",lightStep11:"#8a8a8a",lightStep12:"#1a1a1a",lightSecondary:"#7b5bb6",lightAccent:"#3d6f9f",lightRed:"#d1383d",lightOrange:"#d68c27",lightGreen:"#3d9a57",lightCyan:"#318795",lightYellow:"#b0851f"},theme:{primary:{dark:"darkStep9",light:"lightStep9"},secondary:{dark:"darkSecondary",light:"lightSecondary"},accent:{dark:"darkAccent",light:"lightAccent"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkOrange",light:"lightOrange"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkCyan",light:"lightCyan"},text:{dark:"darkStep12",light:"lightStep12"},textMuted:{dark:"darkStep11",light:"lightStep11"},background:{dark:"darkStep1",light:"lightStep1"},backgroundPanel:{dark:"darkStep2",light:"lightStep2"},backgroundElement:{dark:"darkStep3",light:"lightStep3"},border:{dark:"darkStep7",light:"lightStep7"},borderActive:{dark:"darkStep8",light:"lightStep8"},borderSubtle:{dark:"darkStep6",light:"lightStep6"},diffAdded:{dark:"#4fd6be",light:"#1e725c"},diffRemoved:{dark:"#c53b53",light:"#c53b53"},diffContext:{dark:"#828bb8",light:"#7086b5"},diffHunkHeader:{dark:"#828bb8",light:"#7086b5"},diffHighlightAdded:{dark:"#b8db87",light:"#4db380"},diffHighlightRemoved:{dark:"#e26a75",light:"#f52a65"},diffAddedBg:{dark:"#20303b",light:"#d5e5d5"},diffRemovedBg:{dark:"#37222c",light:"#f7d8db"},diffContextBg:{dark:"darkStep2",light:"lightStep2"},diffLineNumber:{dark:"#8f8f8f",light:"#595959"},diffAddedLineNumberBg:{dark:"#1b2b34",light:"#c5d5c5"},diffRemovedLineNumberBg:{dark:"#2d1f26",light:"#e7c8cb"},markdownText:{dark:"darkStep12",light:"lightStep12"},markdownHeading:{dark:"darkAccent",light:"lightAccent"},markdownLink:{dark:"darkStep9",light:"lightStep9"},markdownLinkText:{dark:"darkCyan",light:"lightCyan"},markdownCode:{dark:"darkGreen",light:"lightGreen"},markdownBlockQuote:{dark:"darkYellow",light:"lightYellow"},markdownEmph:{dark:"darkYellow",light:"lightYellow"},markdownStrong:{dark:"darkOrange",light:"lightOrange"},markdownHorizontalRule:{dark:"darkStep11",light:"lightStep11"},markdownListItem:{dark:"darkStep9",light:"lightStep9"},markdownListEnumeration:{dark:"darkCyan",light:"lightCyan"},markdownImage:{dark:"darkStep9",light:"lightStep9"},markdownImageText:{dark:"darkCyan",light:"lightCyan"},markdownCodeBlock:{dark:"darkStep12",light:"lightStep12"},syntaxComment:{dark:"darkStep11",light:"lightStep11"},syntaxKeyword:{dark:"darkAccent",light:"lightAccent"},syntaxFunction:{dark:"darkStep9",light:"lightStep9"},syntaxVariable:{dark:"darkRed",light:"lightRed"},syntaxString:{dark:"darkGreen",light:"lightGreen"},syntaxNumber:{dark:"darkOrange",light:"lightOrange"},syntaxType:{dark:"darkYellow",light:"lightYellow"},syntaxOperator:{dark:"darkCyan",light:"lightCyan"},syntaxPunctuation:{dark:"darkStep12",light:"lightStep12"}}}});var JG;var Vq=k(()=>{JG={$schema:"https://opencode.ai/theme.json",defs:{darkBg0:"#111c18",darkBg1:"#1a2520",darkBg2:"#23372B",darkBg3:"#3d4a44",darkFg0:"#C1C497",darkFg1:"#9aa88a",darkGray:"#53685B",darkRed:"#FF5345",darkGreen:"#549e6a",darkYellow:"#459451",darkBlue:"#509475",darkMagenta:"#D2689C",darkCyan:"#2DD5B7",darkWhite:"#F6F5DD",darkRedBright:"#db9f9c",darkGreenBright:"#63b07a",darkYellowBright:"#E5C736",darkBlueBright:"#ACD4CF",darkMagentaBright:"#75bbb3",darkCyanBright:"#8CD3CB",lightBg0:"#F6F5DD",lightBg1:"#E8E7CC",lightBg2:"#D5D4B8",lightBg3:"#A8A78C",lightFg0:"#111c18",lightFg1:"#1a2520",lightGray:"#53685B",lightRed:"#c7392d",lightGreen:"#3d7a52",lightYellow:"#b5a020",lightBlue:"#3d7560",lightMagenta:"#a8527a",lightCyan:"#1faa90"},theme:{primary:{dark:"darkCyan",light:"lightCyan"},secondary:{dark:"darkMagenta",light:"lightMagenta"},accent:{dark:"darkGreen",light:"lightGreen"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkYellowBright",light:"lightYellow"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkCyan",light:"lightCyan"},text:{dark:"darkFg0",light:"lightFg0"},textMuted:{dark:"darkGray",light:"lightGray"},background:{dark:"darkBg0",light:"lightBg0"},backgroundPanel:{dark:"darkBg1",light:"lightBg1"},backgroundElement:{dark:"darkBg2",light:"lightBg2"},border:{dark:"darkBg3",light:"lightBg3"},borderActive:{dark:"darkCyan",light:"lightCyan"},borderSubtle:{dark:"darkBg2",light:"lightBg2"},diffAdded:{dark:"darkGreen",light:"lightGreen"},diffRemoved:{dark:"darkRed",light:"lightRed"},diffContext:{dark:"darkGray",light:"lightGray"},diffHunkHeader:{dark:"darkCyan",light:"lightCyan"},diffHighlightAdded:{dark:"darkGreenBright",light:"lightGreen"},diffHighlightRemoved:{dark:"darkRedBright",light:"lightRed"},diffAddedBg:{dark:"#15241c",light:"#e0eee5"},diffRemovedBg:{dark:"#241515",light:"#eee0e0"},diffContextBg:{dark:"darkBg1",light:"lightBg1"},diffLineNumber:{dark:"#828b87",light:"#5f5e4f"},diffAddedLineNumberBg:{dark:"#121f18",light:"#d5e5da"},diffRemovedLineNumberBg:{dark:"#1f1212",light:"#e5d5d5"},markdownText:{dark:"darkFg0",light:"lightFg0"},markdownHeading:{dark:"darkCyan",light:"lightCyan"},markdownLink:{dark:"darkCyanBright",light:"lightCyan"},markdownLinkText:{dark:"darkGreen",light:"lightGreen"},markdownCode:{dark:"darkGreenBright",light:"lightGreen"},markdownBlockQuote:{dark:"darkGray",light:"lightGray"},markdownEmph:{dark:"darkMagenta",light:"lightMagenta"},markdownStrong:{dark:"darkFg0",light:"lightFg0"},markdownHorizontalRule:{dark:"darkGray",light:"lightGray"},markdownListItem:{dark:"darkCyan",light:"lightCyan"},markdownListEnumeration:{dark:"darkCyanBright",light:"lightCyan"},markdownImage:{dark:"darkCyanBright",light:"lightCyan"},markdownImageText:{dark:"darkGreen",light:"lightGreen"},markdownCodeBlock:{dark:"darkFg0",light:"lightFg0"},syntaxComment:{dark:"darkGray",light:"lightGray"},syntaxKeyword:{dark:"darkCyan",light:"lightCyan"},syntaxFunction:{dark:"darkBlue",light:"lightBlue"},syntaxVariable:{dark:"darkFg0",light:"lightFg0"},syntaxString:{dark:"darkGreenBright",light:"lightGreen"},syntaxNumber:{dark:"darkMagenta",light:"lightMagenta"},syntaxType:{dark:"darkGreen",light:"lightGreen"},syntaxOperator:{dark:"darkYellow",light:"lightYellow"},syntaxPunctuation:{dark:"darkFg0",light:"lightFg0"}}}});var YG;var Kq=k(()=>{YG={$schema:"https://opencode.ai/theme.json",defs:{darkStep1:"#1a1b26",darkStep2:"#1e2030",darkStep3:"#222436",darkStep4:"#292e42",darkStep5:"#3b4261",darkStep6:"#545c7e",darkStep7:"#737aa2",darkStep8:"#9099b2",darkStep9:"#82aaff",darkStep10:"#89b4fa",darkStep11:"#828bb8",darkStep12:"#c8d3f5",darkRed:"#ff757f",darkOrange:"#ff966c",darkYellow:"#ffc777",darkGreen:"#c3e88d",darkCyan:"#86e1fc",darkPurple:"#c099ff",lightStep1:"#e1e2e7",lightStep2:"#d5d6db",lightStep3:"#c8c9ce",lightStep4:"#b9bac1",lightStep5:"#a8aecb",lightStep6:"#9699a8",lightStep7:"#737a8c",lightStep8:"#5a607d",lightStep9:"#2e7de9",lightStep10:"#1a6ce7",lightStep11:"#8990a3",lightStep12:"#3760bf",lightRed:"#f52a65",lightOrange:"#b15c00",lightYellow:"#8c6c3e",lightGreen:"#587539",lightCyan:"#007197",lightPurple:"#9854f1"},theme:{primary:{dark:"darkStep9",light:"lightStep9"},secondary:{dark:"darkPurple",light:"lightPurple"},accent:{dark:"darkOrange",light:"lightOrange"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkOrange",light:"lightOrange"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkStep9",light:"lightStep9"},text:{dark:"darkStep12",light:"lightStep12"},textMuted:{dark:"darkStep11",light:"lightStep11"},background:{dark:"darkStep1",light:"lightStep1"},backgroundPanel:{dark:"darkStep2",light:"lightStep2"},backgroundElement:{dark:"darkStep3",light:"lightStep3"},border:{dark:"darkStep7",light:"lightStep7"},borderActive:{dark:"darkStep8",light:"lightStep8"},borderSubtle:{dark:"darkStep6",light:"lightStep6"},diffAdded:{dark:"#4fd6be",light:"#1e725c"},diffRemoved:{dark:"#c53b53",light:"#c53b53"},diffContext:{dark:"#828bb8",light:"#7086b5"},diffHunkHeader:{dark:"#828bb8",light:"#7086b5"},diffHighlightAdded:{dark:"#b8db87",light:"#4db380"},diffHighlightRemoved:{dark:"#e26a75",light:"#f52a65"},diffAddedBg:{dark:"#20303b",light:"#d5e5d5"},diffRemovedBg:{dark:"#37222c",light:"#f7d8db"},diffContextBg:{dark:"darkStep2",light:"lightStep2"},diffLineNumber:{dark:"#8f909a",light:"#59595b"},diffAddedLineNumberBg:{dark:"#1b2b34",light:"#c5d5c5"},diffRemovedLineNumberBg:{dark:"#2d1f26",light:"#e7c8cb"},markdownText:{dark:"darkStep12",light:"lightStep12"},markdownHeading:{dark:"darkPurple",light:"lightPurple"},markdownLink:{dark:"darkStep9",light:"lightStep9"},markdownLinkText:{dark:"darkCyan",light:"lightCyan"},markdownCode:{dark:"darkGreen",light:"lightGreen"},markdownBlockQuote:{dark:"darkYellow",light:"lightYellow"},markdownEmph:{dark:"darkYellow",light:"lightYellow"},markdownStrong:{dark:"darkOrange",light:"lightOrange"},markdownHorizontalRule:{dark:"darkStep11",light:"lightStep11"},markdownListItem:{dark:"darkStep9",light:"lightStep9"},markdownListEnumeration:{dark:"darkCyan",light:"lightCyan"},markdownImage:{dark:"darkStep9",light:"lightStep9"},markdownImageText:{dark:"darkCyan",light:"lightCyan"},markdownCodeBlock:{dark:"darkStep12",light:"lightStep12"},syntaxComment:{dark:"darkStep11",light:"lightStep11"},syntaxKeyword:{dark:"darkPurple",light:"lightPurple"},syntaxFunction:{dark:"darkStep9",light:"lightStep9"},syntaxVariable:{dark:"darkRed",light:"lightRed"},syntaxString:{dark:"darkGreen",light:"lightGreen"},syntaxNumber:{dark:"darkOrange",light:"lightOrange"},syntaxType:{dark:"darkYellow",light:"lightYellow"},syntaxOperator:{dark:"darkCyan",light:"lightCyan"},syntaxPunctuation:{dark:"darkStep12",light:"lightStep12"}}}});function uB(f,J,Y=[]){if(J===void 0)return null;if(typeof J!=="string")return uB(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 uB(f,z,[...Y,J])}function TB(f){return Math.max(0,Math.min(255,Math.round(f)))}function jX(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`#${(TB(X(z,16)+(X(G,16)-X(z,16))*Y)<<16|TB(X(z,8)+(X(G,8)-X(z,8))*Y)<<8|TB(X(z,0)+(X(G,0)-X(z,0))*Y)).toString(16).padStart(6,"0")}`}function sA(f){let J=(Q)=>uB(f,f.theme[Q]),Y=J("background"),z=J("text");if(!Y||!z)return null;let G=J("textMuted")??jX(z,Y,0.35),X=J("primary")??z,q=J("border")??jX(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")??jX(q,z,0.3),fg:z,muted:G,subtle:jX(G,Y,0.35),primary:X,"primary-hover":jX(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 W7(f,J){if(J.pathname!==eA)return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Response.json({themes:tA})}var oA,tA,eA="/api/themes";var V7=k(()=>{Qq();Hq();Bq();jq();Wq();Vq();Kq();oA={claude:oz,conductor:sz,dracula:tz,nord:ez,opencode:fG,"osaka-jade":JG,tokyonight:YG};tA=Object.fromEntries(Object.entries(oA).map(([f,J])=>[f,sA(J)]).filter((f)=>f[1]!==null))});import{createHash as fg,randomUUID as Jg}from"crypto";import{mkdir as Yg}from"fs/promises";import{join as EB,resolve as zg}from"path";function Zg(f){return fg("sha1").update(f).digest("hex").slice(0,16)}async function Hg(f){let J=Number.parseInt(f.headers.get("content-length")??"",10);if(Number.isFinite(J)&&J>K7)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>K7)return Response.json({error:"asset too large"},{status:413});let X=Gg[G.type];if(!X)return Response.json({error:`unsupported content-type: ${G.type||"unknown"}`},{status:415});try{let q=Zg(z),Q=EB(iQ(),q);await Yg(Q,{recursive:!0});let B=`${Jg()}.${X}`;return await Bun.write(EB(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 Bg(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(!qg.test(z)||!Qg.test(G))return Response.json({error:"invalid asset path"},{status:400});let X=iQ(),q=zg(X,z,G);if(q!==EB(X,z,G)||!q.startsWith(`${X}/`))return Response.json({error:"invalid asset path"},{status:400});let Q=G.slice(G.lastIndexOf(".")+1).toLowerCase(),H=Xg[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 U7(f,J){if(J.pathname===Uq){if(f.method==="POST")return Hg(f);return Response.json({error:"method not allowed"},{status:405})}if(J.pathname.startsWith(`${Uq}/`)){if(f.method==="GET")return Bg(J.pathname);return Response.json({error:"method not allowed"},{status:405})}return null}var Uq="/api/issue-assets",K7=10485760,Gg,Xg,qg,Qg;var D7=k(()=>{lf();Gg={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp"},Xg={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"};qg=/^[a-f0-9]{16}$/,Qg=/^[A-Za-z0-9_-]+\.[a-z0-9]+$/});function L7(f,J=500){return Response.json({error:f instanceof Error?f.message:String(f)},{status:J})}function M7(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 jg(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 L7(z,M7(z))}}async function Wg(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 L7(G,M7(G))}}async function F7(f,J,Y){if(J.pathname!=="/api/issues")return null;if(f.method==="GET")return jg(Y,J);if(f.method==="POST")return Wg(Y,f);return Response.json({error:"method not allowed"},{status:405})}function O7(f){return Vg.has(String(f??"").trim().toLowerCase())}function A7(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 Kg(f){let J=A7(f);return J!==null&&O7(J)}function g7(f,J={}){if(!f)return!0;if(Kg(f))return!0;let Y=J.allowedHost?.trim();if(!Y)return!1;let z=A7(f);return z!==null&&z===Y}function R7(f){let J=String(f??"").trim();return J&&!O7(J)?J:void 0}var Vg;var C7=k(()=>{Vg=new Set(["localhost","127.0.0.1","::1","[::1]"])});var Ug,k7;var N7=k(()=>{Ug=["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"],k7=new Set(Ug)});var xB={};jf(xB,{resolveRepoInit:()=>S7,resolveEngineLaunchInit:()=>sJ});import{existsSync as b7,readFileSync as Dg}from"fs";import{join as Dq}from"path";function Mg(f){return b7(Dq(f,y7))?`sh ${y7}`:void 0}function Fg(f){let J=Dq(f,Lg);if(!b7(J))return;try{let Y=Dg(J,"utf8");return Y.trim().length>0?Y:void 0}catch{return}}function S7(f,J){let Y=f?YH(f):{},z=Mg(J)??Y.initScript,G=Fg(J)??Y.initPrompt;return{initScript:z&&z.trim().length>0?z:void 0,initPrompt:G&&G.trim().length>0?G:void 0}}function Og(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 sJ(f,J,Y={kind:"repo-init"}){let z=S7(f,J);return{initScript:z.initScript,firstMessage:Og(Y,z)}}var y7,Lg;var zG=k(()=>{Af();y7=Dq(".kobe","init.sh"),Lg=Dq(".kobe","init-prompt.md")});import{existsSync as I7,readFileSync as Ag}from"fs";function T7(){Mz=null}function gg(){let f=H9();if(I7(f))return{canonical:f,found:f};let J=f.replace(/\.yaml$/,".yml");if(I7(J))return{canonical:f,found:J};return{canonical:f,found:null}}function Lq(){if(Mz)return Mz;let{canonical:f,found:J}=gg();if(!J)return Mz={path:f,exists:!1,doc:null,warnings:[]},Mz;let Y=[],z=null;try{let G=Ag(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 wB=k(()=>{lf()});function GG(f,J){let Y=`alternating [${f}, ${J}] pairs`;return{layout:Y,validateCount:(z)=>z>=2&&z%2===0?null:`needs ${Y} (an even number of chords \u2014 got ${z})`}}function Sg(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=kg[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=bg.filter((H)=>X.has(H)).join("+"),Q=q?`${q}+${G}`:G;if(G.length>1&&!yg.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 Ig(f){if(f==="darwin")return["darwin","macos","mac"];if(f==="win32")return["win32","windows"];return[f]}function Tg(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 Ig(J)){let Q=f[q];if(Q===void 0)continue;let H=Tg(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=Sg(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 ug(f,J){return f===J||f==="global"||J==="global"}function u7(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=hB[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=Rg[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&&Cg.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(!ug(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 hB,Rg,Cg,kg,Ng,yg,bg;var Oq=k(()=>{hB={"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)"};Rg={"sidebar.nav":GG("down","up"),"files.nav":GG("down","up"),"sidebar.search.nav":GG("down","up"),"files.hierarchy":GG("collapse","expand"),"sidebar.view":GG("previous view","next view"),"files.tab":GG("previous tab","next tab")},Cg=new Set(["global","workspace","terminal"]),kg={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"},yg=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}`)]),bg=["ctrl","cmd","alt","shift"]});function XG(f){return f in E7}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=xg[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 w7(){let f={};for(let[Y,z]of Object.entries(Oz)){let G=Az(z,{allowBare:XG(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=kY.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 PB(f){let J=w7(),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!==kY.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:XG(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 vB(f){return f.startsWith("tmux.")?{allowShiftCharacter:!0}:{}}function h7(){Fz=null}function Aq(){if(Fz)return Fz;let f=Lq();if(!f.exists||f.doc===null)return Fz=w7(),Fz;let J=Fq(f.doc,process.platform,{chordOptsFor:vB}),Y=J.warnings.filter((G)=>G.startsWith("tmux.")),z=PB(J.entries);z.warnings=[...Y,...z.warnings];for(let G of z.warnings)console.warn(`[kobe/keybindings] ${G}`);return Fz=z,Fz}var Eg,E7,x7,Oz,SJ="tmux.focus",kY,xg,Fz=null;var gq=k(()=>{wB();Oq();Eg={"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"},E7={"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"},x7=["F6","F7","F8","F9","F10","F11"],Oz={...Eg,...E7};kY=["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],xg={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 WX(f,J){let Y=null;for(let G=0;G<24;G++){let X=await az(f);if(X){if(!J)return{pane:X,ready:!0};let q=(await $z(X)).trim();if(q.length>0&&q===Y)return{pane:X,ready:!0};Y=q}await P7(250)}return{pane:await az(f)||await YB(f),ready:!1}}async function VX(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 P7(wg),await zX(f,"Enter")}async function v7(f,J){let{pane:Y}=await WX(f,!0);if(!Y)return;await VX(Y,J.text)}var P7=(f)=>new Promise((J)=>setTimeout(J,f)),wg=150;var Rq=k(()=>{Tf()});function m7(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 c7;var n7=k(()=>{Qq();Hq();Bq();jq();Wq();Vq();Kq();c7={claude:oz,conductor:sz,nord:ez,opencode:fG,dracula:tz,tokyonight:YG,"osaka-jade":JG}});function hg(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 d7(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 hg(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 mB=()=>{};import{readFileSync as Pg,readdirSync as vg}from"fs";import{join as i7}from"path";function ZG(){return i7(ef(),"themes")}function KX(){let f=ZG(),J;try{J=vg(f)}catch{return[]}let Y=[];for(let z of J){if(!z.endsWith(".json"))continue;let G=i7(f,z),X;try{let H=Pg(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();mB()});import{readFileSync as mg}from"fs";function ng(){try{let f=JSON.parse(mg(c1(),"utf8")),J=typeof f.activeTheme==="string"&&f.activeTheme?f.activeTheme:"claude",Y=typeof f.focusAccent==="string"&&cg.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 dg(f){return KX().find((Y)=>Y.name===f)?.theme??c7[f]??null}function WJ(f,...J){for(let Y of J){let z=d7(f,Y);if(z)return z}return null}function l7(f,J){let Y=WJ(f,"text"),z=WJ(f,"background"),G=WJ(f,"textMuted","text"),X=WJ(f,"backgroundPanel","background"),q=WJ(f,"backgroundElement","backgroundPanel","background"),Q=WJ(f,"backgroundMenu","backgroundElement","backgroundPanel","background"),H=WJ(f,"selectedListItemText","background"),B=WJ(f,J,"primary","borderActive","border","text");return{border:WJ(f,"border","text"),activeBorder:B,statusBg:X,statusFg:G,statusMutedFg:G,windowFg:G,currentWindowBg:q,currentWindowFg:B,activityFg:WJ(f,"info","primary","text"),bellFg:WJ(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 $7(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 ig(f){let J=new Set(f.marker.split(",").map((X)=>X.trim()).filter(Boolean)),Y=[],z=[];for(let X of $7(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",cB,G]:["set-option","-gu",cB]);return Y}async function a7(f){let{code:J,stdout:Y}=await d0(f);return J===0?Y.trim():""}async function gz(){try{let f=ng(),J=f.enabled?dg(f.themeName):null,Y=J?l7(J,f.focusAccentSlot):l7({theme:{}},f.focusAccentSlot),z=$7(Y),[G,...X]=await Promise.all([a7(["show-options","-gqv",cB]),...z.map((H)=>a7(["show-options",H.showFlag,H.option]))]),q=Object.fromEntries(z.map((H,B)=>[H.key,X[B]??""])),Q=ig({marker:G,current:q,hexes:Y});if(Q.length>0)await Pf(Q)}catch{}}var cB="@kobe_border_theme",cg;var yq=k(()=>{lf();Tf();n7();Nq();cg=["primary","success","info"]});function r7(){return nf()[bq]!==!1}var bq="zen.keepTasks";var nB=k(()=>{pY()});var Sq={};jf(Sq,{recordGen:()=>NY,isLatestGen:()=>t7,genAgeMs:()=>og,coalesceLayoutWork:()=>sg,RESIZE_GUARD_MS:()=>_g,LAYOUT_COALESCE_MS:()=>o7});import{createHash as lg,randomUUID as ag}from"crypto";import{mkdirSync as $g,readFileSync as p7,renameSync as rg,writeFileSync as pg}from"fs";import{join as _7}from"path";function s7(){return _7(ef(),"layout-coord")}function dB(f,J){let Y=lg("sha1").update(f).digest("hex").slice(0,16);return _7(s7(),`${Y}.${J}`)}function NY(f,J){let Y=ag();try{$g(s7(),{recursive:!0});let z=dB(f,J),G=`${z}.${Y}.tmp`;pg(G,`${Date.now()}
|
|
56
|
-
${Y}`),
|
|
57
|
-
`)[1]?.trim()===Y}catch{return!0}}function
|
|
58
|
-
`)[0]??"",10);return Number.isFinite(z)?Y-z:Number.POSITIVE_INFINITY}catch{return Number.POSITIVE_INFINITY}}async function
|
|
59
|
-
`)){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
|
|
60
|
-
`).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"
|
|
61
|
-
`).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
|
|
62
|
-
`)){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),
|
|
63
|
-
`)){let[G,X]=z.split("\t");if(G?.trim()==="1"&&X?.trim())return X.trim()}return""}async function
|
|
64
|
-
`).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)))}async function
|
|
65
|
-
`).some((X)=>{let q=X.trim();return q===
|
|
66
|
-
`).map((z)=>z.trim()).filter((z)=>z.length>0)}async function
|
|
67
|
-
`).filter((z)=>z.trim().length>0).length}async function
|
|
68
|
-
`).map((Q)=>Q.trim()).filter(Boolean).map((Q)=>Q.split("=",2)));if(await
|
|
69
|
-
`)){let[z,G,X,q,Q]=Y.split("\t"),H=
|
|
70
|
-
`)){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
|
|
71
|
-
`)){let[Q,H]=q.split("\t");if(Q?.trim()&&H?.trim()===J)return Q.trim()}return""}async function
|
|
72
|
-
${H}`:H,V=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:z,command:[V,"-ilc",B]}}async function
|
|
54
|
+
`;return""}async function A7(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(!_Z(z))return Response.json({error:"worktreePath does not exist"},{status:400});if(!_J(z).isRemote)try{if(!Bg(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 VX(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([VX(z,["status","--porcelain=v1","-z","--untracked-files=all"]),VX(z,["diff","--no-color"]),VX(z,["diff","--no-color","--staged"])]);if(!q.ok)return Response.json({error:`git status failed: ${q.stderr.trim()}`},{status:500});let B=O7(Q.stdout),V=O7(H.stdout),j=q.stdout.split("\x00"),K=[],L=[];for(let g=0;g<j.length;g++){let S=j[g];if(!S)continue;let a=S[0]??" ",y=S[1]??" ",R=S.slice(3);if(!R)continue;if(a==="R"||a==="C"||y==="R"||y==="C")g++;let C=a==="?"&&y==="?",k=a!==" "&&a!=="?"?a:y,_=a!==" "&&a!=="?",z0="";if(C)L.push({fileIndex:K.length,path:R});else if(z0=V.get(R)??B.get(R)??"",V.has(R)&&B.has(R))z0=`${V.get(R)}${B.get(R)}`;K.push({path:R,status:C?"untracked":Vg(k),staged:_,patch:z0})}if(L.length>0){let g=await Ug(L,Wg,(S)=>Dg(z,S.path));for(let S=0;S<L.length;S++)K[L[S].fileIndex].patch=g[S]}K.sort((g,S)=>g.path.localeCompare(S.path));let O=[H.stdout,Q.stdout].filter(Boolean).join(`
|
|
55
|
+
`),M={files:K,raw:O};return Response.json(M)}var jg=15000,Wg=8;var g7=N(()=>{QJ();Vq()});import{isAbsolute as Lg}from"path";function C7(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9_-]+$/.test(f)}function Fg(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9._-]+$/.test(f)&&!f.includes("..")}async function Og(f){let J=f.searchParams.get("worktreePath"),Y=f.searchParams.get("vendor")??"claude";if(!J||!Lg(J))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!C7(Y))return Response.json({error:"invalid vendor"},{status:400});try{let z=rf(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 Ag(f){let J=f.searchParams.get("vendor")??"claude",Y=f.searchParams.get("sessionId");if(!C7(J))return Response.json({error:"invalid vendor"},{status:400});if(!Fg(Y))return Response.json({error:"invalid sessionId"},{status:400});try{let z=await rf(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 N7(f,J){if(J.pathname!==R7&&J.pathname!==Mg)return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return J.pathname===R7?Og(J):Ag(J)}var R7="/api/history/sessions",Mg="/api/history/messages";var y7=N(()=>{DY()});import{mkdir as gg,readFile as Rg,writeFile as Cg}from"fs/promises";import{join as b7}from"path";function k7(){return b7(J1(),"notes")}function S7(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9_-]+$/.test(f)}function I7(f){return b7(k7(),`${f}.md`)}async function yg(f){let J=f.searchParams.get("taskId");if(!S7(J))return Response.json({error:"invalid taskId"},{status:400});try{let Y="";try{Y=await Rg(I7(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 bg(f){let J;try{J=await f.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(!S7(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 gg(k7(),{recursive:!0}),await Cg(I7(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 T7(f,J){if(J.pathname!==Ng)return null;if(f.method==="GET")return yg(J);if(f.method==="PUT")return bg(f);return Response.json({error:"method not allowed"},{status:405})}var Ng="/api/notes";var u7=N(()=>{af()});var tz;var Kq=N(()=>{tz={$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 ez;var Uq=N(()=>{ez={$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 fG;var Dq=N(()=>{fG={$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 JG;var Lq=N(()=>{JG={$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 YG;var Mq=N(()=>{YG={$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 zG;var Fq=N(()=>{zG={$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 GG;var Oq=N(()=>{GG={$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 lB(f,J,Y=[]){if(J===void 0)return null;if(typeof J!=="string")return lB(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 lB(f,z,[...Y,J])}function iB(f){return Math.max(0,Math.min(255,Math.round(f)))}function KX(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 hg(f){let J=(Q)=>lB(f,f.theme[Q]),Y=J("background"),z=J("text");if(!Y||!z)return null;let G=J("textMuted")??KX(z,Y,0.35),X=J("primary")??z,q=J("border")??KX(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")??KX(q,z,0.3),fg:z,muted:G,subtle:KX(G,Y,0.35),primary:X,"primary-hover":KX(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 E7(f,J){if(J.pathname!==vg)return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Response.json({themes:Pg})}var wg,Pg,vg="/api/themes";var x7=N(()=>{Kq();Uq();Dq();Lq();Mq();Fq();Oq();wg={claude:tz,conductor:ez,dracula:fG,nord:JG,opencode:YG,"osaka-jade":zG,tokyonight:GG};Pg=Object.fromEntries(Object.entries(wg).map(([f,J])=>[f,hg(J)]).filter((f)=>f[1]!==null))});import{createHash as mg,randomUUID as cg}from"crypto";import{mkdir as ng}from"fs/promises";import{join as aB,resolve as dg}from"path";function ag(f){return mg("sha1").update(f).digest("hex").slice(0,16)}async function rg(f){let J=Number.parseInt(f.headers.get("content-length")??"",10);if(Number.isFinite(J)&&J>w7)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>w7)return Response.json({error:"asset too large"},{status:413});let X=ig[G.type];if(!X)return Response.json({error:`unsupported content-type: ${G.type||"unknown"}`},{status:415});try{let q=ag(z),Q=aB(sQ(),q);await ng(Q,{recursive:!0});let B=`${cg()}.${X}`;return await Bun.write(aB(Q,B),G),Response.json({url:`${Aq}/${q}/${B}`})}catch(q){return Response.json({error:q instanceof Error?q.message:String(q)},{status:500})}}async function _g(f){let J=f.slice(Aq.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(!$g.test(z)||!pg.test(G))return Response.json({error:"invalid asset path"},{status:400});let X=sQ(),q=dg(X,z,G);if(q!==aB(X,z,G)||!q.startsWith(`${X}/`))return Response.json({error:"invalid asset path"},{status:400});let Q=G.slice(G.lastIndexOf(".")+1).toLowerCase(),H=lg[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 h7(f,J){if(J.pathname===Aq){if(f.method==="POST")return rg(f);return Response.json({error:"method not allowed"},{status:405})}if(J.pathname.startsWith(`${Aq}/`)){if(f.method==="GET")return _g(J.pathname);return Response.json({error:"method not allowed"},{status:405})}return null}var Aq="/api/issue-assets",w7=10485760,ig,lg,$g,pg;var P7=N(()=>{af();ig={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp"},lg={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"};$g=/^[a-f0-9]{16}$/,pg=/^[A-Za-z0-9_-]+\.[a-z0-9]+$/});function v7(f,J=500){return Response.json({error:f instanceof Error?f.message:String(f)},{status:J})}function m7(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 og(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 v7(z,m7(z))}}async function sg(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 v7(G,m7(G))}}async function c7(f,J,Y){if(J.pathname!=="/api/issues")return null;if(f.method==="GET")return og(Y,J);if(f.method==="POST")return sg(Y,f);return Response.json({error:"method not allowed"},{status:405})}function n7(f){return tg.has(String(f??"").trim().toLowerCase())}function d7(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 eg(f){let J=d7(f);return J!==null&&n7(J)}function i7(f,J={}){if(!f)return!0;if(eg(f))return!0;let Y=J.allowedHost?.trim();if(!Y)return!1;let z=d7(f);return z!==null&&z===Y}function l7(f){let J=String(f??"").trim();return J&&!n7(J)?J:void 0}var tg;var a7=N(()=>{tg=new Set(["localhost","127.0.0.1","::1","[::1]"])});var fR,$7;var p7=N(()=>{fR=["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"],$7=new Set(fR)});var $B={};Hf($B,{resolveRepoInit:()=>o7,resolveEngineLaunchInit:()=>tJ});import{existsSync as _7,readFileSync as JR}from"fs";import{join as gq}from"path";function zR(f){return _7(gq(f,r7))?`sh ${r7}`:void 0}function GR(f){let J=gq(f,YR);if(!_7(J))return;try{let Y=JR(J,"utf8");return Y.trim().length>0?Y:void 0}catch{return}}function o7(f,J){let Y=f?BH(f):{},z=zR(J)??Y.initScript,G=GR(J)??Y.initPrompt;return{initScript:z&&z.trim().length>0?z:void 0,initPrompt:G&&G.trim().length>0?G:void 0}}function XR(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 tJ(f,J,Y={kind:"repo-init"}){let z=o7(f,J);return{initScript:z.initScript,firstMessage:XR(Y,z)}}var r7,YR;var XG=N(()=>{Af();r7=gq(".kobe","init.sh"),YR=gq(".kobe","init-prompt.md")});import{existsSync as s7,readFileSync as ZR}from"fs";function t7(){Mz=null}function qR(){let f=C9();if(s7(f))return{canonical:f,found:f};let J=f.replace(/\.yaml$/,".yml");if(s7(J))return{canonical:f,found:J};return{canonical:f,found:null}}function Rq(){if(Mz)return Mz;let{canonical:f,found:J}=qR();if(!J)return Mz={path:f,exists:!1,doc:null,warnings:[]},Mz;let Y=[],z=null;try{let G=ZR(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 pB=N(()=>{af()});function ZG(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 KR(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=BR[H];if(!B)return{error:`"${f}": unknown modifier "${H}" (use ctrl / cmd / alt / shift)`};X.add(B)}if(G=jR[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=VR.filter((H)=>X.has(H)).join("+"),Q=q?`${q}+${G}`:G;if(G.length>1&&!WR.has(G))return{chord:Q,warning:`"${f}": unrecognized key name "${G}" \u2014 the chord may never fire`};return{chord:Q}}function Cq(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function UR(f){if(f==="darwin")return["darwin","macos","mac"];if(f==="win32")return["win32","windows"];return[f]}function DR(f){if(!Cq(f))return null;let J=f.bindings;if(Cq(J))return J;return f}function Nq(f,J,Y){let z=[];if(f===null||f===void 0)return{entries:[],warnings:z};if(!Cq(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(Cq(f.bindings))X.push(f.bindings);else z.push("`bindings:` must be a mapping of id \u2192 chord(s)");for(let q of UR(J)){let Q=f[q];if(Q===void 0)continue;let H=DR(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 K of B){if(typeof K!=="string"){z.push(`${Q}: chord entries must be strings`),j=!0;continue}let L=KR(K,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 LR(f,J){return f===J||f==="global"||J==="global"}function e7(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=rB[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=QR[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&&HR.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(!LR(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 rB,QR,HR,BR,jR,WR,VR;var yq=N(()=>{rB={"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)"};QR={"sidebar.nav":ZG("down","up"),"files.nav":ZG("down","up"),"sidebar.search.nav":ZG("down","up"),"files.hierarchy":ZG("collapse","expand"),"sidebar.view":ZG("previous view","next view"),"files.tab":ZG("previous tab","next tab")},HR=new Set(["global","workspace","terminal"]),BR={ctrl:"ctrl",control:"ctrl",ctl:"ctrl",cmd:"cmd",command:"cmd",meta:"cmd",super:"cmd",win:"cmd",alt:"alt",option:"alt",opt:"alt",shift:"shift"},jR={esc:"escape",spacebar:"space",pgup:"pageup",pgdn:"pagedown",pgdown:"pagedown"},WR=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}`)]),VR=["ctrl","cmd","alt","shift"]});function qG(f){return f in f5}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=FR[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 Y5(){let f={};for(let[Y,z]of Object.entries(Oz)){let G=Az(z,{allowBare:qG(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 _B(f){let J=Y5(),Y=new Set;for(let z of f){if(!z.id.startsWith("tmux."))continue;if(z.id===IJ){if(z.keys.length===0){J.focus=[null,null,null,null],Y.add(IJ);continue}if(z.keys.length!==yY.length){J.warnings.push(`${IJ}: 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(`${IJ}: ${V.error} \u2014 keeping the default`),H=!1;break}Q.push({chord:B,key:V.key})}if(!H)continue;J.focus=Q,Y.add(IJ);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:qG(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 oB(f){return f.startsWith("tmux.")?{allowShiftCharacter:!0}:{}}function z5(){Fz=null}function bq(){if(Fz)return Fz;let f=Rq();if(!f.exists||f.doc===null)return Fz=Y5(),Fz;let J=Nq(f.doc,process.platform,{chordOptsFor:oB}),Y=J.warnings.filter((G)=>G.startsWith("tmux.")),z=_B(J.entries);z.warnings=[...Y,...z.warnings];for(let G of z.warnings)console.warn(`[kobe/keybindings] ${G}`);return Fz=z,Fz}var MR,f5,J5,Oz,IJ="tmux.focus",yY,FR,Fz=null;var kq=N(()=>{pB();yq();MR={"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"},f5={"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"},J5=["F6","F7","F8","F9","F10","F11"],Oz={...MR,...f5};yY=["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],FR={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 UX(f,J){let Y=null;for(let G=0;G<24;G++){let X=await pz(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 G5(250)}return{pane:await pz(f)||await KB(f),ready:!1}}async function DX(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 G5(OR),await ZX(f,"Enter")}async function X5(f,J){let{pane:Y}=await UX(f,!0);if(!Y)return;await DX(Y,J.text)}var G5=(f)=>new Promise((J)=>setTimeout(J,f)),OR=150;var Sq=N(()=>{Ef()});function Z5(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 q5;var Q5=N(()=>{Kq();Uq();Dq();Lq();Mq();Fq();Oq();q5={claude:tz,conductor:ez,nord:JG,opencode:YG,dracula:fG,tokyonight:GG,"osaka-jade":zG}});function AR(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 H5(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 AR(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 Iq(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function Tq(f){if(!Iq(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(!Iq(Y))return{ok:!1,reason:"`theme` must be an object map"};if("defs"in J&&J.defs!==void 0){if(!Iq(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(!Iq(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 sB=()=>{};import{readFileSync as gR,readdirSync as RR}from"fs";import{join as B5}from"path";function QG(){return B5(J1(),"themes")}function LX(){let f=QG(),J;try{J=RR(f)}catch{return[]}let Y=[];for(let z of J){if(!z.endsWith(".json"))continue;let G=B5(f,z),X;try{let H=gR(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=Tq(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 uq=N(()=>{af();sB()});import{readFileSync as CR}from"fs";function yR(){try{let f=JSON.parse(CR(c1(),"utf8")),J=typeof f.activeTheme==="string"&&f.activeTheme?f.activeTheme:"claude",Y=typeof f.focusAccent==="string"&&NR.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 bR(f){return LX().find((Y)=>Y.name===f)?.theme??q5[f]??null}function KJ(f,...J){for(let Y of J){let z=H5(f,Y);if(z)return z}return null}function j5(f,J){let Y=KJ(f,"text"),z=KJ(f,"background"),G=KJ(f,"textMuted","text"),X=KJ(f,"backgroundPanel","background"),q=KJ(f,"backgroundElement","backgroundPanel","background"),Q=KJ(f,"backgroundMenu","backgroundElement","backgroundPanel","background"),H=KJ(f,"selectedListItemText","background"),B=KJ(f,J,"primary","borderActive","border","text");return{border:KJ(f,"border","text"),activeBorder:B,statusBg:X,statusFg:G,statusMutedFg:G,windowFg:G,currentWindowBg:q,currentWindowFg:B,activityFg:KJ(f,"info","primary","text"),bellFg:KJ(f,"warning","error","primary","text"),messageBg:Q,messageFg:Y,messageCommandFg:B,modeBg:B,modeFg:H??z}}function r1(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 V5(f){let J=r1({bg:f.statusBg,fg:f.statusFg}),Y=r1({bg:f.statusBg,fg:f.statusMutedFg}),z=r1({bg:f.statusBg,fg:f.windowFg});return[{key:"border",option:"pane-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:r1({fg:f.border})},{key:"active",option:"pane-active-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:r1({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:r1({bg:f.currentWindowBg,fg:f.currentWindowFg,attrs:["bold"]})},{key:"activity-window",option:"window-status-activity-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:r1({bg:f.statusBg,fg:f.activityFg})},{key:"bell-window",option:"window-status-bell-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:r1({bg:f.statusBg,fg:f.bellFg,attrs:["bold"]})},{key:"last-window",option:"window-status-last-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:r1({bg:f.statusBg,fg:f.statusFg})},{key:"message",option:"message-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:r1({bg:f.messageBg,fg:f.messageFg})},{key:"message-command",option:"message-command-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:r1({bg:f.messageBg,fg:f.messageCommandFg,attrs:["bold"]})},{key:"mode",option:"mode-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:r1({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 kR(f){let J=new Set(f.marker.split(",").map((X)=>X.trim()).filter(Boolean)),Y=[],z=[];for(let X of V5(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",tB,G]:["set-option","-gu",tB]);return Y}async function W5(f){let{code:J,stdout:Y}=await l0(f);return J===0?Y.trim():""}async function gz(){try{let f=yR(),J=f.enabled?bR(f.themeName):null,Y=J?j5(J,f.focusAccentSlot):j5({theme:{}},f.focusAccentSlot),z=V5(Y),[G,...X]=await Promise.all([W5(["show-options","-gqv",tB]),...z.map((H)=>W5(["show-options",H.showFlag,H.option]))]),q=Object.fromEntries(z.map((H,B)=>[H.key,X[B]??""])),Q=kR({marker:G,current:q,hexes:Y});if(Q.length>0)await vf(Q)}catch{}}var tB="@kobe_border_theme",NR;var Eq=N(()=>{af();Ef();Q5();uq();NR=["primary","success","info"]});function K5(){return nf()[xq]!==!1}var xq="zen.keepTasks";var eB=N(()=>{rY()});var wq={};Hf(wq,{recordGen:()=>bY,isLatestGen:()=>F5,genAgeMs:()=>wR,coalesceLayoutWork:()=>hR,RESIZE_GUARD_MS:()=>xR,LAYOUT_COALESCE_MS:()=>L5});import{createHash as SR,randomUUID as IR}from"crypto";import{mkdirSync as TR,readFileSync as U5,renameSync as uR,writeFileSync as ER}from"fs";import{join as D5}from"path";function M5(){return D5(J1(),"layout-coord")}function fj(f,J){let Y=SR("sha1").update(f).digest("hex").slice(0,16);return D5(M5(),`${Y}.${J}`)}function bY(f,J){let Y=IR();try{TR(M5(),{recursive:!0});let z=fj(f,J),G=`${z}.${Y}.tmp`;ER(G,`${Date.now()}
|
|
56
|
+
${Y}`),uR(G,z)}catch{}return Y}function F5(f,J,Y){try{return U5(fj(f,J),"utf8").split(`
|
|
57
|
+
`)[1]?.trim()===Y}catch{return!0}}function wR(f,J,Y=Date.now()){try{let z=Number.parseInt(U5(fj(f,J),"utf8").split(`
|
|
58
|
+
`)[0]??"",10);return Number.isFinite(z)?Y-z:Number.POSITIVE_INFINITY}catch{return Number.POSITIVE_INFINITY}}async function hR(f,J,Y,z=L5){let G=bY(f,J);if(z>0)await new Promise((X)=>setTimeout(X,z));if(!F5(f,J,G))return;await Y()}var L5=120,xR=400;var HG=N(()=>{af()});function vR(f){let J=[];for(let Y of f.split(`
|
|
59
|
+
`)){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 O5(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 Jj(f){let{code:J,stdout:Y}=await l0(["list-panes","-s","-t",`=${f}`,"-F",PR]);if(J!==0)return null;return vR(Y)}function A5(f,J){let Y=Cf(),z=of(),G=[];for(let X of f){let q=X.role==="tasks"?KY(Y,{initialTaskId:J.taskId}):hz({cwd:J.cwd,taskId:J.taskId,claudePaneId:X.claudePaneId,cliInvocation:Y,vendor:J.vendor});G.push(["respawn-pane","-k","-t",X.paneId,"-c",uf(J.cwd),R1(z+q)],["set-option","-p","-t",X.paneId,"@kobe_role",X.role],["set-option","-p","-t",X.paneId,UJ,t0])}return G}async function g5(f,J,Y,z,G){let X=await Jj(f);if(!X)return!1;let q=X.filter((B)=>B.role==="claude");if(q.length===0)return!1;let Q=uf(J),H=[];for(let B of q){let V=_z(Y,G),j=R1(lz(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,kJ,V.sessionId]:["set-window-option","-u","-t",B.paneId,kJ])}return await vf(H),!0}async function R5(){let f=await FY([$J,Yz,pJ]),J=Number.parseInt(f[$J]??"",10),Y=Number.isFinite(J)&&J>0?Jz(J):eY,z=mR({widthPct:rJ(Number.parseInt(f[Yz]??"",10)),heightPct:rJ(Number.parseInt(f[pJ]??"",10))});return{tasksWidth:Y,rcArgs:z}}function mR(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 C5(){return(await R5()).rcArgs}async function Yj(f,J={}){let{tasksWidth:Y,rcArgs:z}=await R5(),G=await Jj(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 BG(f,J){bY(f,"resize");let{rows:Y,commands:z}=await Yj(f);if(!Y)return;let G=[...z];if(J)G.push(...A5(O5(Y,{currentVersion:t0,force:!1,vendorChanged:J.vendorChanged}),J));if(G.length>0)await vf(G)}async function N5(f){if(!await jf(f))return;await BG(f)}async function MX(f){let{code:J,stdout:Y}=await l0(["list-panes","-t",`=${f}`,"-F",`#{@kobe_role} #{pane_width} #{pane_height} #{window_width} #{window_height} #{window_zoomed_flag} #{${GJ}} #{${A1}}`]);if(J!==0)return;let z=Y.split(`
|
|
60
|
+
`).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",$J,`${Jz(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,K=Number.isFinite(V)?rJ(100*V/X):null;if(j!==null)q.push(["set-option","-s",Yz,`${j}`]);if(K!==null)q.push(["set-option","-s",pJ,`${K}`])}if(q.length>0)await vf(q)}function cR(f){let J=f.split(`
|
|
61
|
+
`).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 y5(f){let{code:J,stdout:Y}=await l0(["list-panes","-t",`=${f}`,"-F",`#{@kobe_role} #{window_zoomed_flag} #{${GJ}} #{${A1}}`]);if(J!==0||!cR(Y))return;await MX(f)}async function jG(f){let J=await y1(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 Jj(f);if(!X)return;let q=A5(O5(X,{currentVersion:t0,force:!0}),{cwd:Y,taskId:z,vendor:G});if(q.length>0)await vf(q);await gz()}var UJ="@kobe_pane_version",PR;var FX=N(()=>{aJ();x1();QJ();Ef();XJ();Eq();D1();Qz();HG();PR=`#{window_id} #{pane_id} #{@kobe_role} #{${UJ}} #{pane_width}`});function dR(f){let J=[];for(let Y of f.split(`
|
|
62
|
+
`)){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),K=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(K)?K:0,windowWidth:Number.isFinite(L)?L:0,windowHeight:Number.isFinite(O)?O:0})}return J}function iR(f){let J=f.find((z)=>z.role===fz);if(!J)return{kind:"missing-engine"};let Y=f.filter((z)=>z.role===iG);if(Y.length+1>=kH)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 zj(f){return f.find((J)=>J.role===zJ)??f.find((J)=>J.role==="")}function lR(f){return 100-(rJ(f??Number.NaN)??$G)}function aR(f){let J=Number.parseInt(f??"",10);return Number.isFinite(J)&&J>0?J:void 0}async function h1(f,J){let Y=J?.trim()||`=${f}`,{code:z,stdout:G}=await l0(["list-panes","-t",Y,"-F",nR]);return z===0?dR(G):null}async function $R(f){let{code:J,stdout:Y}=await l0(["list-windows","-t",`=${f}`,"-F","#{window_active}\t#{window_id}"]);if(J!==0)return"";for(let z of Y.split(`
|
|
63
|
+
`)){let[G,X]=z.split("\t");if(G?.trim()==="1"&&X?.trim())return X.trim()}return""}async function eJ(f,J){let{code:Y,stdout:z}=await l0(["show-options","-wqv","-t",f,J]);return Y===0?z.trim():""}async function Gj(f,J,Y){await h0(["set-window-option","-t",f,J,Y])}async function kY(f,J){await h0(["set-window-option","-u","-t",f,J])}async function Xj(f){let{code:J,stdout:Y}=await l0(["display-message","-p","-t",f,"#{pane_id}"]);return J===0&&Y.trim()===f}async function kf(f,J){await h0(["display-message","-t",f,J])}async function hq(f){let J=await y1(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 pR(f){let J=Cf(),Y=of();return R1(Y+hz({cwd:f.cwd,taskId:f.taskId,claudePaneId:f.enginePaneId,cliInvocation:J,vendor:f.vendor}))}async function rR(f,J){return J?.trim()||await $R(f)}async function _R(f,J){let Y=await h1(f,J);if(!Y)return;let z=iR(Y);if(z.kind==="missing-engine"){await kf(J,"kobe: no engine pane in this window");return}if(z.kind==="maxed"){await kf(J,`kobe: workspace split limit is ${kH} panes`);return}let{cwd:G}=await hq(f),{code:X,stdout:q}=await l0(["split-window",z.direction,"-t",z.targetPane,"-l","50%","-c",uf(G),"-P","-F","#{pane_id}",R1("true")]),Q=q.trim();if(X!==0||!Q)return;await vf([["set-option","-p","-t",Q,"@kobe_role",iG],["select-pane","-t",Q]])}async function oR(f,J){let Y=await h1(f,J);if(!Y)return;let z=Y.filter((q)=>q.role===iG);if(z.length===0){await kf(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 sR(f,J){let Y=await h1(f,J);if(!Y)return;let z=Y.filter((G)=>G.role===iG);if(z.length===0){await kf(J,"kobe: no workspace splits to reset");return}await vf(z.map((G)=>["kill-pane","-t",G.paneId]))}async function b5(){let f=await FY([$J]);return Jz(aR(f[$J])??eY)}async function tR(f){let{cwd:J,taskId:Y}=await hq(f),z=Cf(),G=of();return{cwd:J,command:R1(G+KY(z,{initialTaskId:Y}))}}async function k5(f,J){let Y=await h1(f,J);if(!Y)return;let z=Y.find((M)=>M.role===YJ);if(z){await h0(["kill-pane","-t",z.paneId]);return}let G=zj(Y),X=Y.find((M)=>M.role===fz);if(!X){await kf(J,"kobe: cannot restore file pane in this layout");return}let{cwd:q,taskId:Q,vendor:H}=await hq(f),B=pR({cwd:q,taskId:Q,vendor:H,enginePaneId:X.paneId}),V=G?["split-window","-v","-b","-t",G.paneId,"-l",`${await eR()}%`,"-c",uf(q),"-P","-F","#{pane_id}",B]:["split-window","-h","-t",X.paneId,"-l",`${await Zj()}%`,"-c",uf(q),"-P","-F","#{pane_id}",B],{code:j,stdout:K}=await l0(V),L=K.trim();if(j!==0||!L)return;let O=[["set-option","-p","-t",L,"@kobe_role",YJ],["set-option","-p","-t",L,UJ,t0]];if(G?.role==="")O.push(["set-option","-p","-t",G.paneId,"@kobe_role",zJ]);await vf(O)}async function eR(){let f=await FY([pJ]);return rJ(Number.parseInt(f[pJ]??"",10))??$G}async function Zj(){let f=await FY([Yz]);return rJ(Number.parseInt(f[Yz]??"",10))??100-yZ}async function S5(){let f=await FY([pJ]);return lR(Number.parseInt(f[pJ]??"",10))}async function f2(f){let{code:J,stdout:Y}=await l0(["list-windows","-t",`=${f}`,"-F","#{window_index}"]);if(J!==0)return new Set;return new Set(Y.split(`
|
|
64
|
+
`).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)))}async function I5(f,J){let Y=await f2(f),z=gW(J);while(Y.has(z))z++;return z}async function T5(f){let J=aG(f);if(await jf(J))return J;return await h0(["new-session","-d","-s",J,"-n","hidden-panes","-c",uf(process.cwd()),"while :; do sleep 3600; done"]),J}async function qj(f){let J=aG(f);if(!await jf(J))return;let{code:Y,stdout:z}=await l0(["list-panes","-s","-t",`=${J}`,"-F","#{@kobe_role}"]);if(Y!==0)return;if(!z.split(`
|
|
65
|
+
`).some((X)=>{let q=X.trim();return q===zJ||q===l1}))await h0(["kill-session","-t",`=${J}`])}async function J2(f,J){await u5(f,J,GJ)}async function Y2(f,J){await u5(f,J,A1)}async function u5(f,J,Y){let z=await eJ(J,Y);if(!z)return;if(await Xj(z))await h0(["kill-pane","-t",z]);await kY(J,Y)}async function z2(f,J){await J2(f,J),await Y2(f,J),await qj(f)}function E5(f){return f.find((J)=>J.role===fz)??f[0]}async function Qj(f,J,Y){let z=E5(Y);if(!z)return await kf(J,"kobe: cannot restore Tasks pane in this layout"),!1;let G=await b5(),{cwd:X,command:q}=await tR(f),{code:Q,stdout:H}=await l0(["split-window","-h","-b","-t",z.paneId,"-l",`${G}`,"-c",uf(X),"-P","-F","#{pane_id}",q]),B=H.trim();if(Q!==0||!B)return!1;return await vf([["set-option","-p","-t",B,"@kobe_role",l1],["set-option","-p","-t",B,UJ,t0],["select-pane","-t",B]]),await kY(J,A1),await kf(J,"kobe: Tasks pane restored"),!0}async function x5(f,J,Y){let z=await T5(f),G=await I5(z,J),{code:X,stdout:q}=await l0(["break-pane","-d","-s",Y.paneId,"-t",`${z}:${G}`,"-P","-F","#{pane_id}"]),Q=q.trim()||Y.paneId;if(X!==0||!Q){await kf(J,"kobe: could not hide Tasks pane");return}await Gj(J,A1,Q),await kf(J,"kobe: Tasks pane hidden")}async function Hj(f,J,Y){let z=await h1(f,J);if(!z)return;if(!await Xj(Y)){await kY(J,A1);let q=z.find((Q)=>Q.role===l1);if(q){await h0(["select-pane","-t",q.paneId]);return}await Qj(f,J,z);return}let G=E5(z);if(!G){await kf(J,"kobe: cannot restore Tasks pane in this layout");return}if(await h0(["join-pane","-h","-b","-s",Y,"-t",G.paneId,"-l",`${await b5()}`])!==0){await kf(J,"kobe: could not restore Tasks pane");return}await vf([["set-option","-p","-t",Y,"@kobe_role",l1],["set-option","-p","-t",Y,UJ,t0],["select-pane","-t",Y]]),await kY(J,A1),await qj(f),await kf(J,"kobe: Tasks pane restored")}async function G2(f,J){let Y=await eJ(J,A1);if(Y){await Hj(f,J,Y);return}let z=await h1(f,J);if(!z)return;let G=z.find((X)=>X.role===l1);if(G){await x5(f,J,G);return}await Qj(f,J,z)}async function X2(f,J){let Y=await eJ(J,A1);if(Y){await Hj(f,J,Y);return}let z=await h1(f,J);if(!z)return;let G=z.find((X)=>X.role===l1);if(G){await h0(["select-pane","-t",G.paneId]);return}await Qj(f,J,z)}async function w5(f,J,Y){if(Y.role==="")await h0(["set-option","-p","-t",Y.paneId,"@kobe_role",zJ]);let z=await T5(f),G=await I5(z,J),{code:X,stdout:q}=await l0(["break-pane","-d","-s",Y.paneId,"-t",`${z}:${G}`,"-P","-F","#{pane_id}"]),Q=q.trim()||Y.paneId;if(X!==0||!Q){await kf(J,"kobe: could not hide terminal pane");return}await Gj(J,GJ,Q),await kf(J,"kobe: Terminal pane hidden")}async function h5(f,J,Y){let z=Y.find((V)=>V.role===YJ),G=Y.find((V)=>V.role===fz);if(!z&&!G)return await kf(J,"kobe: cannot restore terminal pane in this layout"),!1;let{cwd:X}=await hq(f),q=z?["split-window","-v","-t",z.paneId,"-l",`${await S5()}%`,"-c",uf(X),"-P","-F","#{pane_id}"]:["split-window","-h","-t",G?.paneId??"","-l",`${await Zj()}%`,"-c",uf(X),"-P","-F","#{pane_id}"],{code:Q,stdout:H}=await l0(q),B=H.trim();if(Q!==0||!B)return!1;return await h0(["set-option","-p","-t",B,"@kobe_role",zJ]),await kY(J,GJ),await kf(J,"kobe: Terminal pane restored"),!0}async function P5(f,J,Y){let z=await h1(f,J);if(!z)return;if(!await Xj(Y)){await kY(J,GJ),await h5(f,J,z);return}let G=z.find((B)=>B.role===YJ),X=z.find((B)=>B.role===fz);if(!G&&!X){await kf(J,"kobe: cannot restore terminal pane in this layout");return}let q=G?["join-pane","-v","-s",Y,"-t",G.paneId,"-l",`${await S5()}%`]:["join-pane","-h","-s",Y,"-t",X?.paneId??"","-l",`${await Zj()}%`];if(await h0(q)!==0){await kf(J,"kobe: could not restore terminal pane");return}await h0(["set-option","-p","-t",Y,"@kobe_role",zJ]),await kY(J,GJ),await qj(f),z=await h1(f,J);let H=z?.find((B)=>B.paneId===Y);if(H)await h0(["select-pane","-t",H.paneId]);await kf(J,"kobe: Terminal pane restored")}async function Z2(f,J){let Y=await eJ(J,GJ);if(Y){await P5(f,J,Y);return}let z=await h1(f,J);if(!z)return;let G=zj(z);if(G){await w5(f,J,G);return}await h5(f,J,z)}async function q2(f){if((await Bz(f,lG)).length>0){await H2(f);return}await Q2(f)}async function v5(f){let{code:J,stdout:Y}=await l0(["list-windows","-t",`=${f}`,"-F","#{window_id}"]);if(J!==0)return[];return Y.split(`
|
|
66
|
+
`).map((z)=>z.trim()).filter((z)=>z.length>0)}async function m5(f,J){return!!(await h1(f,J))?.some((z)=>z.role===fz)}async function Q2(f){let J=await v5(f);for(let Y of J){if(!await m5(f,Y))continue;if(await eJ(Y,VY))continue;await n5(f,Y)}await MY(f,lG,"1"),await kf(`=${f}`,"kobe: Zen mode on \u2014 all tabs")}async function H2(f){let J=await v5(f);for(let Y of J){let z=await eJ(Y,VY);if(z)await B2(f,Y,z)}await h0(["set-option","-u","-t",f,lG]),await kf(`=${f}`,"kobe: Zen mode off \u2014 all tabs")}async function c5(f,J){if((await Bz(f,lG)).length===0)return;if(await eJ(J,VY))return;if(!await m5(f,J))return;await n5(f,J)}async function n5(f,J){let Y=await h1(f,J);if(!Y)return;let z=[],G=Y.find((q)=>q.role===YJ);if(G)await h0(["kill-pane","-t",G.paneId]),z.push(YJ);let X=zj(Y);if(X)await w5(f,J,X),z.push(zJ);if(!K5()){let q=Y.find((Q)=>Q.role===l1);if(q)await x5(f,J,q),z.push(l1)}if(z.length===0){await kf(J,"kobe: already focused \u2014 nothing to hide");return}await Gj(J,VY,z.join(",")),await kf(J,"kobe: Zen mode on")}async function B2(f,J,Y){let z=new Set(Y.split(",").map((G)=>G.trim()));if(z.has(l1)){let G=await eJ(J,A1);if(G)await Hj(f,J,G)}if(z.has(YJ)){let G=await h1(f,J);if(G&&!G.some((X)=>X.role===YJ))await k5(f,J)}if(z.has(zJ)){let G=await eJ(J,GJ);if(G)await P5(f,J,G)}await kY(J,VY),await kf(J,"kobe: Zen mode off")}async function j2(f){let{code:J,stdout:Y}=await l0(["list-windows","-t",`=${f}`,"-F","#{window_id}"]);if(J!==0)return 0;return Y.split(`
|
|
67
|
+
`).filter((z)=>z.trim().length>0).length}async function W2(f,J){if(await j2(f)<=1){await kf(J,"Cannot close the only ChatTab");return}await z2(f,J),await h0(["kill-window","-t",J])}async function Pq(f,J,Y={}){if(!await jf(f))return;let z=await rR(f,Y.windowId);if(!z)return;switch(J){case"workspace-split":await _R(f,z);return;case"workspace-close":await oR(f,z);return;case"workspace-reset":await sR(f,z);return;case"tasks-toggle":await G2(f,z);return;case"tasks-restore":await X2(f,z);return;case"ops-toggle":await k5(f,z);return;case"terminal-toggle":await Z2(f,z);return;case"zen-toggle":await q2(f);return;case"chat-tab-close":await W2(f,z);return}}var nR="#{pane_id}\t#{@kobe_role}\t#{pane_active}\t#{pane_width}\t#{pane_height}\t#{window_width}\t#{window_height}";var vq=N(()=>{aJ();QJ();eB();Ef();XJ();D1();Qz();FX()});function cq(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 nq(f,J="kill-window"){return["bind-key","-n",f,"if-shell","-F","#{>:#{session_windows},1}",J,"display-message 'Cannot close the only ChatTab'"]}function dq(f){return["bind-key","-n",f,"command-prompt","-I","#{window_name}","rename-window -- '%%'"]}function iq(f){return[["bind-key","-n",f,"command-prompt","-p",mq],["bind-key","T","command-prompt","-p",mq]]}function Bj(f){return f.startsWith("C-")&&f.length===3?`^${f.slice(2)}`:f}function lq(f){return`${[f.focusLeft?`${Bj(f.focusLeft)} tasks`:null,f.detach?`${Bj(f.detach)} detach`:null,f.newTab?`${Bj(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 Wj(f,J){let Y=of(),z=await sZ(),G=R1(J.opsCommand??Y+hz({cwd:J.cwd,taskId:J.taskId,claudePaneId:f,cliInvocation:J.inv,vendor:J.vendor})),{stdout:X}=await GX([["set-option","-p","-t",f,"@kobe_role","claude"],["set-window-option","-t",f,jj,"idle"],["split-window","-h","-b","-t",f,"-l",`${z}`,"-c",uf(J.cwd),"-P","-F","tasks=#{pane_id}",R1(Y+KY(J.inv,{initialTaskId:J.taskId}))],["split-window","-h","-t",f,"-l",`${100-yZ}%`,"-c",uf(J.cwd),"-P","-F","ops=#{pane_id}",G],["split-window","-v","-l",`${100-$G}%`,"-c",uf(J.cwd),"-P","-F","shell=#{pane_id}"],["select-pane","-t",f]]),q=Object.fromEntries(X.split(`
|
|
68
|
+
`).map((Q)=>Q.trim()).filter(Boolean).map((Q)=>Q.split("=",2)));if(await vf([...q.tasks?[["set-option","-p","-t",q.tasks,"@kobe_role",l1]]:[],...q.tasks?[["set-option","-p","-t",q.tasks,UJ,t0]]:[],...q.ops?[["set-option","-p","-t",q.ops,"@kobe_role",YJ]]:[],...q.ops?[["set-option","-p","-t",q.ops,UJ,t0]]:[],...q.shell?[["set-option","-p","-t",q.shell,"@kobe_role",zJ]]:[]]),q.ops){let Q=await C5();if(Q.length>0)await h0(["resize-pane","-t",q.ops,...Q])}}async function d5(f,J){if(!await jf(f))return;let Y=await y1(f,["@kobe_worktree","@kobe_task","@kobe_vendor",zX]),z=Y["@kobe_worktree"]||process.cwd(),G=Y["@kobe_task"]||void 0,X=Y[zX]||void 0,q=J??Y["@kobe_vendor"];if(J)await V2(f,G,J);let Q=k1(q),H=_z(Q,q),B=Cf(),j=(await l0(["new-window","-t",`=${f}`,"-c",uf(z),"-P","-F","#{pane_id}",R1(lz(g1(H.argv),X,z))])).stdout.trim();if(!j)return;if(H.sessionId)await OY(j,kJ,H.sessionId);await Wj(j,{cwd:z,taskId:G,inv:B,vendor:q});let{stdout:K}=await l0(["display-message","-p","-t",j,"#{window_id}"]),L=K.trim();if(L)await c5(f,L)}async function $q(f){if(!await jf(f))return;let Y=(await y1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),X=`${of()}${z.map(Xf).join(" ")} settings`;await BJ(f,{cwd:uf(Y),command:X,name:"settings",surface:!0})}async function pq(f){if(!await jf(f))return;let Y=(await y1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),X=`${of()}${z.map(Xf).join(" ")} help-page`;await BJ(f,{cwd:uf(Y),command:X,name:"help",surface:!0})}async function rq(f,J){if(!await jf(f))return;let z=(await y1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),G=Cf(),X=of(),q=J?` --repo ${Xf(J)}`:"",Q=`${X}${G.map(Xf).join(" ")} new-task${q}`;await BJ(f,{cwd:uf(z),command:Q,name:"new task",surface:!0})}async function _q(f){if(!await jf(f))return;let Y=(await y1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),X=`${of()}${yW({cliInvocation:z})}`;await BJ(f,{cwd:uf(Y),command:X,name:"update",surface:!0})}async function i5(f){if(!await jf(f))return;let Y=(await y1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),X=`${of()}${z.map(Xf).join(" ")} quick-task --session ${Xf(f)}`;await BJ(f,{cwd:uf(Y),command:X,name:"quick task",surface:!0})}async function V2(f,J,Y){if(await MY(f,"@kobe_vendor",Y),!J)return;try{let{connectOrStartDaemon:z}=await Promise.resolve().then(() => (L1(),oq)),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 mq,jj="@kobe_tab_state",OX="#{?#{==:#{@kobe_tab_state},running},\u25CF,#{?#{==:#{@kobe_tab_state},done},\u2713,#{?#{==:#{@kobe_tab_state},error},!,#{?#{==:#{@kobe_tab_state},unknown},?,\u25CB}}}} #I:#W",aq;var Vj=N(()=>{aJ();x1();QJ();Ef();XJ();U1();D1();Qz();vq();FX();mq=`engine (${cf.join("/")}/\u2026)`;aq=OX});var _1={};Hf(_1,{tmuxWindowSizeArgsForClient:()=>Dj,tmuxSessionName:()=>Lf,tmuxInitialSizeArgs:()=>a5,tmuxInitialClientSize:()=>Uj,tmuxAvailable:()=>bJ,switchClientBeforeKill:()=>SJ,sessionExists:()=>jf,selectTasksPane:()=>A2,runLayoutAction:()=>Pq,resyncWindowToClient:()=>D2,refreshKobeWorkspacePanes:()=>jG,quickCreate:()=>i5,prepareWindowForSwitch:()=>tq,prepareWindowForAttach:()=>sq,parseTmuxClientRows:()=>$5,parseObservedSession:()=>_5,openUpdateTab:()=>_q,openSettingsTab:()=>$q,openNewTaskTab:()=>rq,openHelpTab:()=>pq,newChatTab:()=>d5,kobeStatusRight:()=>lq,killSession:()=>$1,healSessionLayout:()=>N5,focusBindCommand:()=>r5,ensureSession:()=>IY,currentSessionName:()=>b1,clientsWithConflictingSize:()=>p5,chatTabSwitchBindings:()=>cq,chatTabRenameBinding:()=>dq,chatTabCloseBinding:()=>nq,chatTabChooseEngineBindings:()=>iq,captureGlobalLayoutOnDrag:()=>y5,captureGlobalLayout:()=>MX,attachArgv:()=>$z,PANE_VERSION_OPTION:()=>UJ,CHAT_TAB_STATUS_FORMAT:()=>OX,CHAT_TAB_STATUS_CURRENT_FORMAT:()=>aq,CHAT_TAB_STATE_OPTION:()=>jj,CHAT_TAB_ENGINE_PROMPT:()=>mq});function a5(f=process.stdout,J=process.env){let Y=Uj(f,J);return Y?["-x",`${Y.columns}`,"-y",`${Y.rows}`]:[]}function Uj(f=process.stdout,J=process.env){let Y=SY(f.columns)??SY(J.COLUMNS),z=SY(f.rows)??SY(J.LINES);return Y&&z?{columns:Y,rows:z}:null}function SY(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 $5(f){let J=[];for(let Y of f.split(`
|
|
69
|
+
`)){let[z,G,X,q,Q]=Y.split("\t"),H=SY(X?.trim()),B=SY(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 p5(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 Dj(f,J){let Y=Math.max(1,f.rows-(J.status?.trim()==="on"?1:0));return["-x",`${f.columns}`,"-y",`${Y}`]}async function Lj(f,J,Y={}){if(!J)return;let{code:z,stdout:G}=await l0(["list-clients","-t",`=${f}`,"-F",K2]);if(z!==0)return;let X=p5($5(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 vf(q)}async function sq(f){bY(f,"resize");let J=Uj();await Lj(f,J);let Y=J?["-x",`${J.columns}`,"-y",`${J.rows}`]:[];if(Y.length>0)await h0(["resize-window","-t",`=${f}`,...Y]);await BG(f)}async function U2(){let{code:f,stdout:J}=await l0(["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=SY(z),Q=SY(G),H=q&&Q?{columns:q,rows:Q}:null;return{sizeArgs:H?Dj(H,{status:X}):[],clientSize:H,clientName:Y?.trim()||void 0}}async function tq(f){bY(f,"resize");let J=await U2();await Lj(f,J.clientSize,{currentClientName:J.clientName});let Y=J.sizeArgs;if(Y.length>0)await h0(["resize-window","-t",`=${f}`,...Y]);await BG(f)}async function D2(f,J){if(!J.size)return;bY(f,"resize"),await Lj(f,J.size,{currentClientName:J.clientName});let Y=Dj(J.size,{status:J.status}),{commands:z}=await Yj(f,{force:!0});await vf([["resize-window","-t",`=${f}`,...Y],...z])}function r5(f,J,Y){let z=`#{?window_zoomed_flag,1,#{?${L2[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 IY(f){let J=Kj.get(f.name);if(J)return J;let Y=O2(f);Kj.set(f.name,Y);try{return await Y}finally{Kj.delete(f.name)}}function _5(f){let J="",Y="",z=!1,G=new Set;for(let X of f.split(`
|
|
70
|
+
`)){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 F2(f){if(!await jf(f))return null;let{code:J,stdout:Y}=await l0(["list-panes","-s","-t",`=${f}`,"-F",M2]);if(J!==0)return{worktree:"",vendor:"",claudePaneAlive:!1,windowCount:0};return _5(Y)}async function O2(f){let J=f.launchInit,Y=await F2(f.name),z=Z5(Y,{cwd:f.cwd,vendor:f.vendor,hasEngineCommand:f.command.length>0}),G=SV(f.repo);if(z.kind==="reuse")return await BG(f.name,{cwd:f.cwd,taskId:f.taskId,vendor:f.vendor}),!0;if(z.kind==="respawn-engine"){if(await g5(f.name,f.cwd,f.command,G,f.vendor)){if(f.vendor)await MY(f.name,"@kobe_vendor",f.vendor);return await BG(f.name,{cwd:f.cwd,taskId:f.taskId,vendor:f.vendor,vendorChanged:!0}),!0}}if(z.kind==="rebuild"||z.kind==="respawn-engine")await $1(f.name);let X=Cf(),q=_z(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=Bq(Hq(q.argv,f.vendor,H),f.vendor,B),j=lz(g1(V),G,f.cwd),L=(await l0(["new-session","-d","-s",f.name,"-c",uf(f.cwd),...a5(),"-P","-F","#{pane_id}",CW(j,{initScript:G?void 0:J?.initScript,markerPath:!G&&J?.initScript?N9(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 OY(L,kJ,q.sessionId);await vf([...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,zX,G]]:[]]),await Wj(L,{cwd:f.cwd,taskId:f.taskId,opsCommand:f.opsCommand,inv:X,vendor:f.vendor});let O=of(),M=X.map(Xf).join(" "),g=`${O}${M} new-chattab --session '#{session_name}'`,S=`${g} --vendor '%%'`,a=`run-shell ${Xf(S)}`,y=`${O}${M} focus-tasks --session '#{session_name}' --window '#{window_id}'`,R=`run-shell ${Xf(y)}`,C=(B0)=>`${O}${M} layout --session '#{session_name}' --window '#{window_id}' --action ${B0}`,k=C("tasks-restore"),_=`run-shell ${Xf(k)}`,z0=C("chat-tab-close"),t=`run-shell ${Xf(z0)}`,Y0=`${O}${M} heal-layout --session '#{session_name}'`,T=`run-shell -b ${Xf(Y0)}`,H0=`${O}${M} resync-window --session '#{session_name}' --client '#{client_name}' --cols '#{client_width}' --rows '#{client_height}' --status '#{status}'`,r=`run-shell -b ${Xf(H0)}`,D0=`${O}${M} capture-layout --session '#{session_name}'`,g0=`run-shell -b ${Xf(D0)}`,$=bW({tmuxSocket:HJ}),x=bq(),e=J5.map((B0)=>["unbind-key","-n",B0]);if(x.overridden.has(IJ))for(let B0 of yY){let b0=Az(B0);if("key"in b0)e.push(["unbind-key","-n",b0.key])}for(let B0 of x.overridden){if(B0===IJ)continue;let b0=Oz[B0],w0=qG(B0),I0=Az(b0,{allowBare:w0});if("key"in I0)e.push(w0?["unbind-key",I0.key]:["unbind-key","-n",I0.key])}let I=["-L","-D","-U","-R"],G0=x.focus.flatMap((B0,b0)=>{let w0=I[b0],I0=w0==="-L"?_:void 0;return B0&&w0?[r5(B0.key,w0,I0)]:[]}),u=x.binds,P=(B0,b0)=>{let w0=u[B0];return w0?[["bind-key",w0.key,"run-shell",C(b0)]]:[]},Z0=(...B0)=>{let b0=B0.map((w0)=>u[w0]?.chord).filter((w0)=>!!w0);return b0.length>0?b0.join("/"):null};await vf([["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",OX],["set-option","-g","window-status-current-format",aq],["set-option","-g","status-right",lq({focusLeft:x.focus[0]?.key??null,detach:u["tmux.detach"]?.key??null,newTab:u["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",r],["set-hook","-g","window-layout-changed",g0],...e,...u["tmux.detach"]?[["bind-key","-n",u["tmux.detach"].key,"if-shell","-F",`#{?#{${A1}},1,#{==:#{@kobe_role},tasks}}`,"detach-client",R]]:[],...G0,...u["tmux.tab.new"]?[["bind-key","-n",u["tmux.tab.new"].key,"run-shell",g]]:[],...u["tmux.tab.chooseEngine"]?iq(u["tmux.tab.chooseEngine"].key).map((B0)=>[...B0,a]):[],...u["tmux.tab.prev"]&&u["tmux.tab.next"]?cq(u["tmux.tab.prev"].key,u["tmux.tab.next"].key):u["tmux.tab.prev"]?[["bind-key","-n",u["tmux.tab.prev"].key,"previous-window"]]:u["tmux.tab.next"]?[["bind-key","-n",u["tmux.tab.next"].key,"next-window"]]:[],...u["tmux.tab.close"]?[nq(u["tmux.tab.close"].key,t)]:[],...u["tmux.tab.rename"]?[dq(u["tmux.tab.rename"].key)]:[],...P("tmux.layout.workspaceSplit","workspace-split"),...P("tmux.layout.workspaceClose","workspace-close"),...P("tmux.layout.workspaceReset","workspace-reset"),...P("tmux.layout.tasksToggle","tasks-toggle"),...P("tmux.layout.opsToggle","ops-toggle"),...P("tmux.layout.terminalToggle","terminal-toggle"),...P("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)X5(f.name,V0).catch((B0)=>console.error("[kobe tmux] first message delivery failed:",B0));return!0}async function l5(f,J,Y){let z=Y?.trim()||`=${f}`,{code:G,stdout:X}=await l0(["list-panes","-t",z,"-F","#{pane_id}\t#{@kobe_role}"]);if(G!==0)return"";for(let q of X.split(`
|
|
71
|
+
`)){let[Q,H]=q.split("\t");if(Q?.trim()&&H?.trim()===J)return Q.trim()}return""}async function A2(f,J={}){if(!await jf(f))return"";let Y=await l5(f,"tasks",J.windowId);if(!Y)await Pq(f,"tasks-restore",{windowId:J.windowId}),Y=await l5(f,"tasks",J.windowId);if(!Y)return"";return await h0(["select-pane","-t",Y]),Y}var K2="#{client_name}\t#{client_session}\t#{client_width}\t#{client_height}\t#{client_flags}",L2,Kj,M2="#{window_id}\t#{window_active}\t#{@kobe_role}\t#{@kobe_worktree}\t#{@kobe_vendor}";var z1=N(()=>{aJ();x1();af();QJ();Ef();kq();Sq();XJ();Eq();Vj();Qz();vq();HG();FX();Ef();Vj();FX();vq();L2={"-L":"pane_at_left","-D":"pane_at_bottom","-U":"pane_at_top","-R":"pane_at_right"};Kj=new Map});async function g2(f,J){let{task:Y}=await f.request("task.get",{taskId:J});return Y}async function Mj(f,J){let Y=await g2(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 o5(f,J){let{task:Y,worktreePath:z}=await Mj(f,J),G=Lf(J);if(!await jf(G)){let X=tJ(Y.repo??"",z,{kind:"repo-init"});if(!await IY({name:G,cwd:z,command:k1(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 R2(f){return NZ(f,{bareSafe:!0})}async function s5(f,J){let{task:Y,worktreePath:z}=await Mj(f,J),G=Y.kind==="main"?void 0:J,X=Y.kind==="main"?J:void 0,q=[...Bq(Hq(k1(Y.vendor,Y.modelEffort),Y.vendor,G),Y.vendor,X)],Q=tJ(Y.repo??"",z,{kind:"none"}),H=R2(q),B=Q.initScript?.trim()?`${Q.initScript}
|
|
72
|
+
${H}`:H,V=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:z,command:[V,"-ilc",B]}}async function t5(f,J){let{worktreePath:Y}=await Mj(f,J),z=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:Y,command:[z,"-il"]}}async function e5(f){let J=Lf(f);await SJ(J).catch(()=>{}),await $1(J).catch(()=>{})}var fK=N(()=>{x1();yH();XG();Ef();z1()});import{existsSync as C2}from"fs";import{join as JK,normalize as GK}from"path";function N2(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}
|
|
73
73
|
data: ${JSON.stringify(H)}
|
|
74
74
|
|
|
75
75
|
`))}catch{}}),Y=setInterval(()=>{try{X.enqueue(z.encode(`: ping
|
|
76
76
|
|
|
77
|
-
`))}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
|
|
78
|
-
`).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)&&z!==process.pid)}catch{return[]}}async function
|
|
79
|
-
`)){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
|
|
80
|
-
`,"utf8");async function Y0(){if(H.isStopping())return;H.markStopping(),await J.onStop?.(),setTimeout(()=>{t.close().catch(($)=>
|
|
81
|
-
`);while(
|
|
82
|
-
`)}}return t}async function
|
|
83
|
-
`,Y=await I2(this.tmpPath,"w",420);try{await Y.writeFile(J,"utf8"),await Y.sync()}finally{await Y.close()}await u2(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:rG(QK()),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 BK(this.path)}catch(f){if(f.code!=="ENOENT")throw f}try{await BK(this.tmpPath)}catch(f){if(f.code!=="ENOENT")throw f}this.cache={version:TY,tasks:[]},this.loaded=!1}assertLoaded(){if(!this.loaded)throw Error("TaskIndexStore: call load() before any other method")}snapshot(){return{version:TY,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 w2(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:TY,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:TY,tasks:[]};let G=Array.isArray(Y.tasks)?Y.tasks:[],X=[];for(let q of G){let Q=h2(q);if(Q)X.push(Q);else console.warn(`[kobe] dropping malformed task entry from ${J}: ${JSON.stringify(q)}`)}return{version:TY,tasks:X}}function h2(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(!n2(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:rG(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:P2(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 P2(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let J=f;if(!v2(J.provider)||!m2(J.lifecycle)||!c2(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 v2(f){return f==="github"||f==="gitlab"||f==="bitbucket"||f==="unknown"}function m2(f){return f==="creating"||f==="open"||f==="ready_to_merge"||f==="merged"||f==="closed"||f==="unknown"}function c2(f){return f==="none"||f==="pending"||f==="passing"||f==="failing"||f==="unknown"}function n2(f){return f==="backlog"||f==="in_progress"||f==="in_review"||f==="done"||f==="canceled"||f==="error"}var TY=3;var OX=k(()=>{I1();U1();HK()});var eq;var WK=k(()=>{eq=class eq 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}}});var UK={};jf(UK,{GitWorktreeManager:()=>fQ});import KK from"fs";import UJ from"path";class fQ{execDeps;constructor(f=d2){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 eq(J,Y.cwd,G);return G}async create(f,J,Y,z){let G=this.ctxFor(f);if(uY("repo",G.dir),uY("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(UJ.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?LV(J,f.slug):VV(f.repo,f.slug);return this.create(f.repo,f.branch,Y,f.baseRef)}async remove(f,J){uY("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);uY("repo",J.dir);let Y=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),z=Wj(Y.stdout),G=[];for(let X of z){if(!X.path)continue;let q=J.remote?VK(J.dir,X.path):_H(f,X.path);if(!q)continue;if(!X.branch||X.detached)continue;let Q=AX(q),H=AX(X.path),B=UJ.relative(Q,H),V=UJ.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);uY("repo",J.dir);let Y=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),z=Wj(Y.stdout),G=J.remote?J.dir:AX(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:AX(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?VK(J.dir,q.path)!==null:UV(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 KK.statSync(J).mtimeMs}catch{}return 0}async isDirty(f){uY("path",f);let J=this.execDeps.execForPath(f);return(await this.runGit(J,["status","--porcelain"],{cwd:f})).stdout.length>0}async currentBranch(f){uY("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(uY("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=Wj(Y.stdout),G=(Q)=>f.remote?Q:AX(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=UJ.isAbsolute(z)?z:UJ.resolve(J,z);return UJ.basename(G)===".git"?UJ.dirname(G):G}catch(Y){if(Y instanceof eq)return null;throw Y}}}function Wj(f){let J=[],Y=null;for(let z of f.split(`
|
|
84
|
-
`)){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
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
${
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
77
|
+
`))}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(!$7.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 b2(){try{let J=(await lJ()).map((Y)=>({id:Y,label:Vz(Y),effortLevels:rf(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 k2(){return Response.json({api:Kz()})}function S2(){return Response.json({projects:O1()})}function TY(f,J=""){return typeof f==="string"?f:J}function I2(f,J){return typeof f==="boolean"?f:J}function HK(f){let J=f.customEngineIds;if(!Array.isArray(J))return[];return J.filter((Y)=>typeof Y==="string"&&QK.test(Y)&&!H1(Y))}function T2(f){return f.split(/[-_]+/).filter(Boolean).map((J)=>`${J.slice(0,1).toUpperCase()}${J.slice(1)}`).join(" ")}function u2(f,J){return TY(f[VJ(J)]).trim()||Vz(J)}function E2(f,J){return TY(f[WJ(J)]).trim()||WX(J).join(" ")}function BK(){let f=nf(),J=HK(f),Y=[...dY,...J],z=TY(f.lastSelectedVendor,"claude"),G=TY(f.focusAccent,"primary");return Response.json({activeTheme:TY(f.activeTheme,"claude"),transparentBackground:I2(f.transparentBackground,!1),focusAccent:qK.includes(G)?G:"primary",notificationsToast:f["notifications.toast.enabled"]!==!1,notificationsSound:f["notifications.sound.enabled"]!==!1,settingsSurface:Lz(f[sJ]??Dz),editorKind:oz(f[oJ]??jq),editorCustomCommand:TY(f[CY]),remoteProjects:f["experimental.remoteProjects"]===!0,autoStatus:f[jz]===!0,dispatcher:f[Wz]===!0,defaultEngine:z,engines:Y.map((X)=>({id:X,label:u2(f,X),command:E2(f,X),isBuiltin:H1(X),isCustom:!H1(X),isDefault:X===z}))})}function AX(f,J,Y){if(typeof Y==="string")f[J]=Y.trim()}function WG(f,J,Y){if(typeof Y==="boolean")f[J]=Y}async function x2(f){try{let J=await f.json(),Y={};if(AX(Y,"activeTheme",J.activeTheme),WG(Y,"transparentBackground",J.transparentBackground),qK.includes(J.focusAccent))Y.focusAccent=J.focusAccent;if(WG(Y,"notifications.toast.enabled",J.notificationsToast),WG(Y,"notifications.sound.enabled",J.notificationsSound),J.settingsSurface==="chattab"||J.settingsSurface==="taskpanel")Y[sJ]=J.settingsSurface;if(Uz.includes(J.editorKind))Y[oJ]=J.editorKind;AX(Y,CY,J.editorCustomCommand),WG(Y,"experimental.remoteProjects",J.remoteProjects),WG(Y,jz,J.autoStatus),WG(Y,Wz,J.dispatcher),AX(Y,"lastSelectedVendor",J.defaultEngine);let z=nf(),G=HK(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;AX(Y,WJ(H.id),H.command),AX(Y,VJ(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(!QK.test(H)||H1(H)||X.has(H))return Response.json({error:"invalid or duplicate engine id"},{status:400});Y.customEngineIds=[...G,H],Y[WJ(H)]=TY(Q.command).trim();let B=TY(Q.label).trim();Y[VJ(H)]=B&&B!==H?B:T2(H)}if(typeof J.removeEngine==="string"){let Q=J.removeEngine;if(!H1(Q)){if(Y.customEngineIds=G.filter((H)=>H!==Q),Y[WJ(Q)]=void 0,Y[VJ(Q)]=void 0,z.lastSelectedVendor===Q)Y.lastSelectedVendor="claude"}}if(Object.keys(Y).length>0)pY(Y);return BK()}catch(J){return Response.json({error:J instanceof Error?J.message:String(J)},{status:400})}}async function w2(f,J){try{let{taskId:Y}=await f.json();if(!Y)return Response.json({error:"missing taskId"},{status:400});return Response.json(await o5(J,Y))}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function YK(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 jK(){return Response.json({review:bf(eq.review)??null,pr:bf(eq.pr)??null})}async function h2(f){try{let J=await f.json();if(typeof J.review==="string")$f(eq.review,J.review);if(typeof J.pr==="string")$f(eq.pr,J.pr);return jK()}catch(J){return Response.json({error:J instanceof Error?J.message:String(J)},{status:400})}}async function P2(f,J){let z=GK(JK(J,f==="/"?"/index.html":f));if(!z.startsWith(J))return new Response("forbidden",{status:403});let G=Bun.file(C2(z)?z:JK(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 v2(f){let{link:J,sseSends:Y,staticDir:z}=f,G=f.tearDownSession??((X)=>void e5(X));return async function(q){let Q=new URL(q.url);if(Q.pathname===ZK)return new Response(XK);if(!i7(q.headers.get("origin"),{allowedHost:f.allowedHost}))return new Response("forbidden: cross-origin request rejected",{status:403});if(Q.pathname==="/events")return N2((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 w2(q,J);if(Q.pathname==="/api/engine-spec"&&q.method==="GET")return YK(Q,J,s5);if(Q.pathname==="/api/terminal-spec"&&q.method==="GET")return YK(Q,J,t5);if(Q.pathname==="/api/engines"&&q.method==="GET")return b2();if(Q.pathname==="/api/cli-invocation"&&q.method==="GET")return k2();if(Q.pathname==="/api/projects"&&q.method==="GET")return S2();if(Q.pathname==="/api/settings"&&q.method==="GET")return BK();if(Q.pathname==="/api/settings"&&q.method==="PATCH")return x2(q);if(Q.pathname==="/api/quick-prompts"&&q.method==="GET")return jK();if(Q.pathname==="/api/quick-prompts"&&q.method==="PUT")return h2(q);let H=await T7(q,Q);if(H)return H;let B=await A7(q,Q);if(B)return B;let V=await N7(q,Q);if(V)return V;let j=await c7(q,Q,J);if(j)return j;let K=await h7(q,Q);if(K)return K;let L=E7(q,Q);if(L)return L;if(z)return P2(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 Fj(f){return f.length>1?f.replace(/\/+$/,""):f}function m2(f,J){let Y=Fj(J),z=new Set([J]);for(let G of f){let X=Fj(G.repo),q=Fj(G.worktreePath);if(X===Y||q===Y){if(G.repo)z.add(G.repo);if(G.worktreePath)z.add(G.worktreePath)}}return[...z]}function WK(f){let J=BX();return{async request(Y,z){return await HX(J,Y,z,f.ctx(0))},snapshot(){let Y=f.orch.listTasks().map(JJ),z={},G=Rz(f.bus,"issue.snapshot");if(G)for(let Q of m2(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 zK(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(`
|
|
78
|
+
`).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)&&z!==process.pid)}catch{return[]}}async function c2(f,J=ZK){let Y;try{Y=(await(await fetch(`http://localhost:${f}${J}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(Y!==XK)throw Error(`port ${f} is in use by a non-kobe service; refusing to replace it`);let z=await zK(f);for(let X of z)try{process.kill(X,"SIGTERM")}catch{}let G=Date.now()+2000;while(Date.now()<G){if((await zK(f)).length===0)return;await new Promise((X)=>setTimeout(X,100))}}async function VK(f){if(f.takeover!==!1)await c2(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=l7(z),X=v2({link:f.link,sseSends:J,staticDir:f.staticDir?GK(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 XK="kobe-web",ZK="/__kobe_web",qK,QK,eq;var KK=N(()=>{tY();x1();DY();QX();Qq();Af();rY();Wq();U1();g7();y7();u7();x7();Jq();_Y();P7();a7();p7();fK();qK=["primary","success","info"],QK=/^[a-z][a-z0-9_-]{0,47}$/;eq={review:"boardPrompt.review",pr:"boardPrompt.pr"}});var UK={};Hf(UK,{sameWorktreeChanges:()=>TJ,readWorktreeChanges:()=>d2,pickPushedChanges:()=>JQ,parsePorcelain:()=>VG});import{spawnSync as n2}from"child_process";function TJ(f,J){return f.added===J.added&&f.deleted===J.deleted}function JQ(f,J){if(!f)return null;return f.get(J)??fQ}function d2(f){if(!f)return fQ;try{let J=n2("git",["status","--porcelain=v1"],{cwd:f,encoding:"utf8",stdio:["ignore","pipe","pipe"],env:w1()});if(J.status!==0||!J.stdout)return fQ;return VG(J.stdout)}catch{return fQ}}function VG(f){let J=0,Y=0;for(let z of f.split(`
|
|
79
|
+
`)){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 fQ;var KG=N(()=>{NY();fQ={added:0,deleted:0}});async function $2(f,J){let Y=await jJ("git",["status","--porcelain=v1"],{cwd:f,env:w1(),signal:J});if(Y.status!==0)throw Error("git status failed");return VG(Y.stdout)}function p2(f){let J=new Set;for(let Y of f){if(Y.archived)continue;if(!Y.worktreePath)continue;if(Y1(Y.repo)||Y1(Y.worktreePath))continue;J.add(Y.worktreePath)}return J}class DK{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=p2(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){xf("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:i2,slowRetryMs:l2,minIntervalMs:a2},z=this.options.run??$2;Zq(J,Y,(G)=>z(f,G),(G)=>{if(this.stopped)return;if(this.entries.get(f)!==J)return;if(J.value&&TJ(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 LK(f,J,Y=Oj,z){if(Y<=0)return()=>{};let G=new DK(f,J,{hasSubscribers:z});G.tick();let X=setInterval(()=>G.tick(),Y);return X.unref?.(),()=>{clearInterval(X),G.stop()}}var Oj=2000,i2=4000,l2=60000,a2=1500;var MK=N(()=>{NY();jX();Af();KG()});import{mkdir as FK,readFile as r2,unlink as Aj,writeFile as _2}from"fs/promises";import{createServer as o2}from"net";import{dirname as OK}from"path";import{StringDecoder as s2}from"string_decoder";function e2(){let f=process.env.KOBE_DAEMON_IDLE_GRACE_MS;if(f===void 0)return AK;let J=Number(f);return Number.isFinite(J)&&J>=0?J:AK}async function RK(f,J={}){let Y=J.socketPath??RJ(J.homeDir),z=J.pidPath??dJ(J.homeDir),G=J.startedAt??new Date,X=new Set,q=new Set,Q=1,H=new wB({clients:function*(){yield*X,yield*q},idleGraceMs:e2(),onIdleStop:()=>void Y0().catch(($)=>xf("daemon-idle-shutdown",$))}),B=new FB;B.onPublish(($)=>{gK(X,{type:"event",name:$.channel,payload:$.payload})});let V=new OH(B),j=new Gq(zq(J.homeDir));await FK(OK(Y),{recursive:!0}),await FK(OK(z),{recursive:!0}),await Aj(Y).catch(()=>{});let K=o2(($)=>{let x={id:Q++,connectedAt:new Date,socket:$,buffer:"",subscribed:!1,holdsLifetime:!1,channels:null};X.add(x);let e=new s2("utf8");$.on("data",(I)=>{x.buffer+=e.write(I),g0(x)}),$.on("error",()=>{}),$.on("close",()=>{if(X.delete(x),x.subscribed)AY("conn",`client #${x.id} (${x.holdsLifetime?"gui":"pane"}) disconnected \u2014 ${X.size} client(s), ${H.guiCount()} gui left`);H.clientDisconnected(x.holdsLifetime)})}),L=f.subscribeTasks(($)=>{B.publish("task.snapshot",{tasks:$.map(JJ)})}),O=J.checkUpdate??PG,M=J.updatePollMs??t2,g=()=>{O().then(($)=>B.publish("update",{info:$})).catch(($)=>xf("update-poller",$))},S=null;if(M>0)g(),S=setInterval(g,M),S.unref?.();let a=J.autoTitlePollMs??MB,y=tV(f,a,()=>H.hasSubscribers()),R=D7(B,{statePath:mB(J.homeDir),debounceMs:J.uiPrefsDebounceMs??vB}),C=B7(B,{path:xB(J.homeDir),debounceMs:J.keybindingsDebounceMs??EB}),k=LK(f,B,J.worktreeChangesTickMs??Oj,()=>H.hasSubscribers()),_=V7(f,J.prStatusPollMs??qq,()=>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);y(),_(),R(),C(),k(),V.close(),gK(X,{type:"event",name:"daemon.stopping",payload:{}});for(let $ of Array.from(X))$.socket.destroy();await new Promise(($)=>K.close(()=>$())),await Aj(Y).catch(()=>{}),await Aj(z).catch(()=>{})}};await new Promise(($,x)=>{let e=K;e.once("error",x),K.listen(Y,()=>{e.removeListener("error",x),$()})}),await _2(z,`${process.pid}
|
|
80
|
+
`,"utf8");async function Y0(){if(H.isStopping())return;H.markStopping(),await J.onStop?.(),setTimeout(()=>{t.close().catch(($)=>xf("daemon-shutdown",$))},0).unref()}let T=BX();function H0($){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 $=WK({orch:f,bus:B,activity:V,ctx:H0});z0=await VK({port:J.webPort,hostname:J.webHost,staticDir:J.webStaticDir,link:$,onEvent:(x)=>B.onPublish(x),onSseOpen:()=>{let x={subscribed:!0,holdsLifetime:!0};return q.add(x),H.guiAttached(),AY("conn",`web client subscribed \u2014 ${X.size+q.size} client(s), ${H.guiCount()} gui`),()=>{q.delete(x),AY("conn",`web client disconnected \u2014 ${X.size+q.size} client(s), ${H.guiCount()} gui left`),H.clientDisconnected(!0)}}}),AY("web",`daemon web transport listening on http://${z0.hostname}:${z0.port}`)}async function r($,x){if($.name==="subscribe"){let e=CB($.payload),I=x.subscribed;x.subscribed=!0;let G0=e.role==="gui"?"gui":"pane";x.holdsLifetime=G0==="gui",x.channels=$9(e.channels);let u=!I;if(x.holdsLifetime)H.guiAttached();AY("conn",`client #${x.id} subscribed as ${G0}${x.channels?` [${[...x.channels].join(",")}]`:""} \u2014 ${X.size} client(s), ${H.guiCount()} gui${u?" (collectors resume)":""}`);for(let P of B.snapshot()){if(x.channels&&!x.channels.has(P.channel))continue;gX(x,{type:"event",name:P.channel,payload:P.payload})}if(!x.channels||x.channels.has("engine-state"))for(let P of V.currentNonIdle())gX(x,{type:"event",name:"engine-state",payload:P});return{}}return HX(T,$.name,$.payload,H0(x.id))}async function D0($,x){try{let e=await r($,x);gX(x,{type:"response",id:$.id,name:$.name,payload:e})}catch(e){gX(x,{type:"response",id:$.id,name:$.name,error:RB(e)})}}function g0($){let x=$.buffer.indexOf(`
|
|
81
|
+
`);while(x!==-1){let e=$.buffer.slice(0,x);if($.buffer=$.buffer.slice(x+1),e.trim().length>0)try{let I=JSON.parse(e);if(I.type!=="request")throw Error("daemon only accepts request frames from clients");D0(I,$)}catch(I){gX($,{type:"response",id:"parse-error",error:{message:I instanceof Error?I.message:String(I)}})}x=$.buffer.indexOf(`
|
|
82
|
+
`)}}return t}async function UG(f){try{let J=await r2(f,"utf8"),Y=Number(J.trim());return Number.isFinite(Y)?Y:null}catch{return null}}function gX(f,J){f.socket.write(mG(J))}function gK(f,J){let Y=J.type==="event"&&J.name!=="daemon.stopping"?J.name:null,z=null;for(let G of f){if(!G.subscribed&&J.type==="event")continue;if(Y&&G.channels&&!G.channels.has(Y))continue;z??=mG(J),G.socket.write(z)}}var t2=21600000,AK=3000;var YQ=N(()=>{D1();zW();eV();Jq();TB();j7();W7();xz();K7();_Y();L7();KK();MK();Jq();TB()});import{unlink as CK}from"fs/promises";function fC(f){try{return process.kill(f,0),!0}catch(J){return J.code==="EPERM"}}async function DG(f,J){let Y=await UG(J),z=Y!==null&&Y!==process.pid?Y:null,G=z!==null&&fC(z),X=G?"graceful":"absent",q=new i1(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 CK(f).catch(()=>{}),await CK(J).catch(()=>{}),{pid:Y,method:X}}var zQ=N(()=>{cG();YQ()});var oq={};Hf(oq,{testDaemonResponds:()=>GQ,ensureDaemonReachable:()=>LG,connectOrStartDaemon:()=>DJ,connectIfRunning:()=>o1});import{spawn as JC}from"child_process";import{closeSync as YC,existsSync as zC,mkdirSync as GC,openSync as XC}from"fs";import{dirname as NK,resolve as gj}from"path";import{fileURLToPath as ZC}from"url";function HC(f,J,Y,z){let G="ignore",X;try{GC(NK(z),{recursive:!0}),X=XC(z,"a"),G=["ignore",X,X]}catch{G="ignore"}if(JC(f,[...J],{detached:!0,stdio:G,env:Y}).unref(),X!==void 0)try{YC(X)}catch{}}async function LG(){let f=RJ();if(await GQ(f))return f;await DG(f,dJ()).catch(()=>{});let[J,...Y]=BC(qC);HC(J,Y,process.env,WZ());let z=Date.now()+5000;while(Date.now()<z){if(await GQ(f))return f;await new Promise((G)=>setTimeout(G,100))}throw Error(`kobe: daemon did not start (or stayed wedged) at ${f}`)}async function DJ(){let f=await LG(),J=new i1(f);return await J.connect(),J}async function o1(){let f=RJ();if(!await GQ(f))return null;let J=new i1(f);return await J.connect(),J}async function GQ(f,J=QC){let Y=new i1(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 BC(f){let J=ZC(import.meta.url);if(J.startsWith("/$bunfs")||J.startsWith("B:\\~BUN"))return[process.execPath,...f];let Y=NK(J),z=[gj(Y,"../cli/index.ts"),gj(Y,"../../../kobe/src/cli/index.ts"),gj(Y,"../cli/index.js")],G=z.find((X)=>zC(X));if(G)return[process.execPath,G,...f];throw Error(`kobe: could not locate kobe entry near ${Y}; checked ${z.join(", ")}`)}var qC,QC=3000;var L1=N(()=>{zQ();xz();_Y();cG();qC=["daemon","start"]});import{mkdir as jC,readFile as yK,unlink as kK,writeFile as bK}from"fs/promises";import{dirname as WC}from"path";function VC(f){if(!Number.isInteger(f)||f<=0)return!1;try{return process.kill(f,0),!0}catch(J){if(J.code==="ESRCH")return!1;return!0}}async function Rj(f,J={}){await jC(WC(f),{recursive:!0});try{await bK(f,String(process.pid),{flag:"wx"});return}catch(G){if(G.code!=="EEXIST")throw G}let Y=-1;try{let G=(await yK(f,"utf8")).trim();if(Y=Number.parseInt(G,10),!Number.isFinite(Y))Y=-1}catch{return Rj(f,J)}let z=Y>0&&VC(Y);if(z&&!J.forceTakeover)throw new RX(`task index is locked by another kobe instance (pid ${Y})`,Y);console.warn(`[kobe] removing stale lockfile at ${f} (was held by pid ${Y}${z?", forced":", process gone"})`);try{await kK(f)}catch(G){if(G.code!=="ENOENT")throw G}try{await bK(f,String(process.pid),{flag:"wx"})}catch(G){if(G.code==="EEXIST"){let X=-1;try{X=Number.parseInt((await yK(f,"utf8")).trim(),10)}catch{X=-1}throw new RX(`task index lockfile contended during takeover (winner pid ${X})`,X)}throw G}}async function SK(f){try{await kK(f)}catch(J){if(J.code==="ENOENT")return;throw J}}var RX;var IK=N(()=>{RX=class RX extends Error{heldByPid;constructor(f,J){super(f);this.name="LockfileError",this.heldByPid=J}}});function KC(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 EK(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 UC(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 DC(f){let J="";for(let Y of f)J+="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[Y]??"0";return J}function xK(f=Date.now()){let J;if(f===TK){let Y=uK.slice();if(!UC(Y))J=EK(16);else J=Y}else J=EK(16);return TK=f,uK=J,KC(f,10)+DC(J)}var TK=-1,uK;var wK=N(()=>{uK=Array(16).fill(0)});var Cj={};Hf(Cj,{TaskIndexStore:()=>MG});import{mkdir as LC,open as MC,readFile as hK,rename as FC,unlink as PK}from"fs/promises";import{homedir as OC}from"os";import{dirname as AC,join as vK}from"path";async function NC(f){let J=Date.now()+CC;for(;;)try{await Rj(f);return}catch(Y){if(!(Y instanceof RX)||Date.now()>=J)throw Y;await gC(RC)}}class MG{homeDir;kobeDir;path;tmpPath;lockPath;cache={version:fY,tasks:[]};loaded=!1;listeners=new Set;saveChain=Promise.resolve();dirtyIds=new Set;removedIds=new Set;constructor(f={}){this.homeDir=f.homeDir??OC(),this.kobeDir=vK(this.homeDir,".kobe"),this.path=vK(this.kobeDir,"tasks.json"),this.tmpPath=`${this.path}.tmp`,this.lockPath=`${this.path}.lock`}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(){this.dirtyIds.clear(),this.removedIds.clear();let f;try{f=await hK(this.path,"utf8")}catch(Y){if(Y.code==="ENOENT")return this.cache={version:fY,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:fY,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot()}return this.cache=mK(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 LC(AC(this.path),{recursive:!0});let f=new Set(this.dirtyIds),J=new Set(this.removedIds);await NC(this.lockPath);try{let Y=await this.readDiskTasks(),z=this.mergeWithDisk(Y,f,J),X=`${JSON.stringify({version:fY,tasks:z},null,2)}
|
|
83
|
+
`,q=await MC(this.tmpPath,"w",420);try{await q.writeFile(X,"utf8"),await q.sync()}finally{await q.close()}await FC(this.tmpPath,this.path);for(let H of f)this.dirtyIds.delete(H);for(let H of J)this.removedIds.delete(H);let Q=new Set(this.cache.tasks.map((H)=>H.id));for(let H of z)if(!Q.has(H.id))this.cache.tasks.push(H)}finally{await SK(this.lockPath)}}async readDiskTasks(){let f;try{f=await hK(this.path,"utf8")}catch(Y){if(Y.code==="ENOENT")return[];throw Y}let J;try{J=JSON.parse(f)}catch{return[]}return mK(J,this.path).tasks}mergeWithDisk(f,J,Y){let z=new Map(f.map((q)=>[q.id,q])),G=[],X=new Set;for(let q of this.cache.tasks){if(J.has(q.id))G.push(q);else{let Q=z.get(q.id);if(Q===void 0)continue;G.push(Q)}X.add(q.id)}for(let q of f){if(X.has(q.id)||Y.has(q.id))continue;G.push(q),X.add(q.id)}return G}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??Tf,...f,id:_G(xK()),createdAt:J,updatedAt:J};return this.cache.tasks.push(Y),this.dirtyIds.add(Y.id),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,this.dirtyIds.add(String(f)),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,K={...B,updatedAt:new Date().toISOString()};return this.cache.tasks.splice(j,0,K),this.dirtyIds.add(String(f)),await this.save(),this.notifyListeners(),K}async reorder(f){this.assertLoaded();let J=f.map((X)=>{let q=this.cache.tasks.findIndex((H)=>H.id===X.id);if(!(q>=0?this.cache.tasks[q]:void 0))throw Error(`task not found: ${X.id}`);return{idx:q,position:X.position}}),Y=!1,z=new Map,G=[];for(let{idx:X,position:q}of J){let Q=this.cache.tasks[X];if(!Q||Q.position===q)continue;if(!z.has(X))z.set(X,Q);if(this.cache.tasks[X]={...Q,position:q},!this.dirtyIds.has(Q.id))this.dirtyIds.add(Q.id),G.push(Q.id);Y=!0}if(!Y)return;try{await this.save()}catch(X){for(let[q,Q]of z)this.cache.tasks[q]=Q;for(let q of G)this.dirtyIds.delete(q);throw X}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),this.dirtyIds.delete(String(f)),this.removedIds.add(String(f)),await this.save(),this.notifyListeners()}async _unlinkForTests(){try{await PK(this.path)}catch(f){if(f.code!=="ENOENT")throw f}try{await PK(this.tmpPath)}catch(f){if(f.code!=="ENOENT")throw f}this.cache={version:fY,tasks:[]},this.loaded=!1,this.dirtyIds.clear(),this.removedIds.clear()}assertLoaded(){if(!this.loaded)throw Error("TaskIndexStore: call load() before any other method")}snapshot(){return{version:fY,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 mK(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:fY,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:fY,tasks:[]};let G=Array.isArray(Y.tasks)?Y.tasks:[],X=[];for(let q of G){let Q=yC(q);if(Q)X.push(Q);else console.warn(`[kobe] dropping malformed task entry from ${J}: ${JSON.stringify(q)}`)}return{version:fY,tasks:X}}function yC(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(!TC(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:_G(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:bC(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 bC(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let J=f;if(!kC(J.provider)||!SC(J.lifecycle)||!IC(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 kC(f){return f==="github"||f==="gitlab"||f==="bitbucket"||f==="unknown"}function SC(f){return f==="creating"||f==="open"||f==="ready_to_merge"||f==="merged"||f==="closed"||f==="unknown"}function IC(f){return f==="none"||f==="pending"||f==="passing"||f==="failing"||f==="unknown"}function TC(f){return f==="backlog"||f==="in_progress"||f==="in_review"||f==="done"||f==="canceled"||f==="error"}var gC=(f)=>new Promise((J)=>setTimeout(J,f)),RC=25,CC=5000,fY=3;var CX=N(()=>{I1();U1();IK();wK()});var XQ;var cK=N(()=>{XQ=class XQ 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}}});var iK={};Hf(iK,{GitWorktreeManager:()=>ZQ});import dK from"fs";import LJ from"path";class ZQ{execDeps;constructor(f=uC){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 XQ(J,Y.cwd,G);return G}async create(f,J,Y,z){let G=this.ctxFor(f);if(uY("repo",G.dir),uY("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(LJ.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?vV(J,f.slug):xV(f.repo,f.slug);return this.create(f.repo,f.branch,Y,f.baseRef)}async remove(f,J){uY("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);uY("repo",J.dir);let Y=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),z=Nj(Y.stdout),G=[];for(let X of z){if(!X.path)continue;let q=J.remote?nK(J.dir,X.path):qB(f,X.path);if(!q)continue;if(!X.branch||X.detached)continue;let Q=NX(q),H=NX(X.path),B=LJ.relative(Q,H),V=LJ.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);uY("repo",J.dir);let Y=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),z=Nj(Y.stdout),G=J.remote?J.dir:NX(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:NX(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?nK(J.dir,q.path)!==null:hV(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 dK.statSync(J).mtimeMs}catch{}return 0}async isDirty(f){uY("path",f);let J=this.execDeps.execForPath(f);return(await this.runGit(J,["status","--porcelain"],{cwd:f})).stdout.length>0}async currentBranch(f){uY("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(uY("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=Nj(Y.stdout),G=(Q)=>f.remote?Q:NX(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=LJ.isAbsolute(z)?z:LJ.resolve(J,z);return LJ.basename(G)===".git"?LJ.dirname(G):G}catch(Y){if(Y instanceof XQ)return null;throw Y}}}function Nj(f){let J=[],Y=null;for(let z of f.split(`
|
|
84
|
+
`)){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 nK(f,J){let Y=`${f.replace(/\/+$/,"")}/.kobe/worktrees`;return J===Y||J.startsWith(`${Y}/`)?Y:null}function uY(f,J){if(!J||!LJ.isAbsolute(J))throw Error(`${f} must be an absolute path, got: ${JSON.stringify(J)}`)}function NX(f){try{return dK.realpathSync(f)}catch{return LJ.resolve(f)}}var uC;var yj=N(()=>{QJ();Af();cK();QB();uC={execForRepo:dz,execForPath:_J,remoteBasePath(f){return cJ(f)?.basePath??null}}});var qQ;var lK=N(()=>{qQ=["web","completions","add","remove","adopt","export","repo","api","daemon","theme","skill","feedback","update","doctor","reset","reload","kill-sessions"]});var $K={};Hf($K,{runCompletionsSubcommand:()=>hC});function EC(){return`# kobe bash completions
|
|
85
|
+
# Source: kobe completions bash
|
|
86
|
+
|
|
87
|
+
_kobe() {
|
|
88
|
+
local cur prev opts
|
|
89
|
+
COMPREPLY=()
|
|
90
|
+
cur="\${COMP_WORDS[COMP_CWORD]}"
|
|
91
|
+
prev="\${COMP_WORDS[COMP_CWORD-1]}"
|
|
92
|
+
opts="${qQ.join(" ")}"
|
|
93
|
+
|
|
94
|
+
if [[ \${cur} == * ]] ; then
|
|
95
|
+
COMPREPLY=( $(compgen -W "\${opts}" -- \${cur}) )
|
|
96
|
+
return 0
|
|
97
|
+
fi
|
|
98
|
+
}
|
|
99
|
+
complete -F _kobe kobe
|
|
100
|
+
`}function xC(){return`#compdef kobe
|
|
101
|
+
# kobe zsh completions
|
|
102
|
+
# Source: kobe completions zsh
|
|
103
|
+
|
|
104
|
+
_kobe() {
|
|
105
|
+
local -a subcommands
|
|
106
|
+
subcommands=(${qQ.map((J)=>`"${J}"`).join(" ")})
|
|
107
|
+
|
|
108
|
+
_arguments "1:subcommand:(\${subcommands})"
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
_kobe "$@"
|
|
112
|
+
`}function wC(){return`# kobe fish completions
|
|
113
|
+
# Source: kobe completions fish
|
|
114
|
+
|
|
115
|
+
${qQ.map((J)=>`complete -c kobe -f -a ${J}`).join(`
|
|
116
|
+
`)}
|
|
117
|
+
`}async function hC(f){let J=f[0];if(J==="--help"||J==="-h"||J==="help"){process.stdout.write(aK);return}if(!J||J!=="bash"&&J!=="zsh"&&J!=="fish")process.stderr.write(`kobe completions: unknown shell "${J}"
|
|
118
|
+
|
|
119
|
+
${aK}`),process.exit(2);let Y;if(J==="bash")Y=EC();else if(J==="zsh")Y=xC();else Y=wC();process.stdout.write(Y)}var aK=`Usage: kobe completions <bash|zsh|fish>
|
|
120
|
+
|
|
121
|
+
Generate a shell completion script for kobe and print it to stdout.
|
|
122
|
+
Redirect the output to the appropriate file for your shell.
|
|
123
|
+
`;var pK=N(()=>{lK()});var sK={};Hf(sK,{runExportSubcommand:()=>lC,renderExport:()=>oK,displayWidth:()=>QQ});function PC(f){return{id:f.id,title:f.title,status:f.status,archived:String(f.archived),vendor:f.vendor??Tf,branch:f.branch,repo:f.repo,worktreePath:f.worktreePath}}function bj(f){process.stderr.write(`kobe export: ${f}
|
|
124
|
+
|
|
125
|
+
${_K}
|
|
126
|
+
`),process.exit(2)}function vC(f){let J="json";for(let Y=0;Y<f.length;Y++){let z=f[Y];if(z==="--json")J="json";else if(z==="--csv")J="csv";else if(z==="--format"){let G=f[++Y];if(G===void 0)bj("--format requires a value (json, csv, or table)");J=rK(G)}else if(z.startsWith("--format="))J=rK(z.slice(9));else bj(`unexpected argument "${z}"`)}return J}function rK(f){if(f==="json"||f==="csv"||f==="table")return f;bj(`unknown format "${f}" (expected json, csv, or table)`)}function mC(f){if(/[",\r\n]/.test(f))return`"${f.replace(/"/g,'""')}"`;return f}function cC(f){let J=[yX.join(",")];for(let Y of f)J.push(yX.map((z)=>mC(Y[z])).join(","));return J.join(`
|
|
127
|
+
`)}function QQ(f){let J=0;for(let Y of f)J+=nC(Y.codePointAt(0));return J}function nC(f){if(f>=768&&f<=879||f>=6832&&f<=6911||f>=7616&&f<=7679||f>=8203&&f<=8207||f>=8234&&f<=8238||f>=8288&&f<=8292||f>=8400&&f<=8447||f>=65024&&f<=65039||f===65279)return 0;if(f>=4352&&f<=4447||f===9001||f===9002||f>=11904&&f<=12350||f>=12353&&f<=13311||f>=13312&&f<=19903||f>=19968&&f<=40959||f>=40960&&f<=42191||f>=44032&&f<=55203||f>=63744&&f<=64255||f>=65040&&f<=65049||f>=65072&&f<=65135||f>=65280&&f<=65376||f>=65504&&f<=65510||f>=127744&&f<=129791||f>=131072&&f<=262141)return 2;return 1}function dC(f,J){return f+" ".repeat(Math.max(0,J-QQ(f)))}function iC(f){let J={};for(let G of yX)J[G]=Math.max(QQ(G),...f.map((X)=>QQ(X[G])));let Y=(G)=>yX.map((X)=>dC(G[X],J[X])).join(" ").trimEnd(),z={};for(let G of yX)z[G]=G;return[Y(z),...f.map(Y)].join(`
|
|
128
|
+
`)}function oK(f,J){let Y=f.map(PC);if(J==="json")return JSON.stringify(Y,null,2);if(J==="csv")return cC(Y);return iC(Y)}async function lC(f){if(f.includes("--help")||f.includes("-h")||f.includes("help")){process.stdout.write(`${_K}
|
|
129
|
+
`);return}let J=vC(f),{TaskIndexStore:Y}=await Promise.resolve().then(() => (CX(),Cj)),z=new Y;await z.load();let G=z.list();if(G.length===0&&J==="table"){process.stdout.write(`no tasks
|
|
130
|
+
`);return}process.stdout.write(`${oK(G,J)}
|
|
131
|
+
`)}var _K,yX;var tK=N(()=>{I1();_K=["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(`
|
|
132
|
+
`),yX=["id","title","status","archived","vendor","branch","repo","worktreePath"]});var JU={};Hf(JU,{runRepoSubcommand:()=>rC});import{readFileSync as aC}from"fs";import{resolve as HQ}from"path";function EY(f){process.stderr.write(`kobe repo: ${f}
|
|
133
|
+
|
|
134
|
+
${fU}
|
|
135
|
+
`),process.exit(2)}function eK(f){try{return aC(HQ(process.cwd(),f),"utf8")}catch(J){EY(`cannot read ${f}: ${J instanceof Error?J.message:String(J)}`)}}function $C(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=eK(G());else if(z==="--init-prompt")J.initPrompt=G();else if(z==="--init-prompt-file")J.initPrompt=eK(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 pC(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 rC(f){let[J,...Y]=f;if(J===void 0||J==="--help"||J==="-h"||J==="help"){process.stdout.write(`${fU}
|
|
136
|
+
`);return}let{getRepoInitOverride:z,setRepoInitOverride:G,resolveRepoRoot:X}=await Promise.resolve().then(() => (Af(),nJ)),{existsSync:q}=await import("fs"),{join:Q}=await import("path");if(J==="show"){let[H]=Y.filter((L)=>!L.startsWith("-")),B=X(HQ(process.cwd(),H??".")),V=z(B),j=q(Q(B,".kobe","init.sh")),K=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: ${K?"present (wins)":"absent"}`),console.log(` override initScript: ${V.initScript?FG(V.initScript):"(unset)"}`),console.log(` override initPrompt: ${V.initPrompt?FG(V.initPrompt):"(unset)"}`);return}if(J==="set"){let H=$C(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(HQ(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?FG(V.initScript):"(unset)"}`),console.log(` initPrompt: ${V.initPrompt?FG(V.initPrompt):"(unset)"}`);return}if(J==="unset"){let{path:H,clearScript:B,clearPrompt:V}=pC(Y),j=X(HQ(process.cwd(),H??".")),K=G(j,{...B?{initScript:""}:{},...V?{initPrompt:""}:{}});console.log(`cleared override for ${j}`),console.log(` initScript: ${K.initScript?FG(K.initScript):"(unset)"}`),console.log(` initPrompt: ${K.initPrompt?FG(K.initPrompt):"(unset)"}`);return}EY(`unknown verb "${J}"`)}function FG(f){let J=f.replace(/\s+/g," ").trim();return J.length>60?`"${J.slice(0,57)}\u2026"`:`"${J}"`}var fU;var YU=N(()=>{fU=["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(`
|
|
137
|
+
`)});import{spawnSync as _C}from"child_process";function tC(f){let[J,Y]=f.split("/");if(!J||!Y)throw Error(`invalid GitHub repository slug: ${f}`);return{owner:J,name:Y}}function zU(f,J){let Y=f.trim();if(!Y)throw Error(`${J} is required`);return Y}function GU(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 XU(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: ${GU(q,void 0)}`)}if((G.status??0)!==0||Q.errors?.length)throw Error(GU(q,Q.errors));if(!Q.data)throw Error("GitHub CLI response did not include data");return Q.data}function eC(f){return`${f}
|
|
99
138
|
|
|
100
139
|
---
|
|
101
|
-
Submitted from kobe ${
|
|
140
|
+
Submitted from kobe ${t0}.`}function OG(f,J={}){let Y=zU(f.title,"feedback title"),z=eC(zU(f.body,"feedback body")),G=(J.repoSlug??aY)();if(!G)throw Error("package repository is not a GitHub repository");let{owner:X,name:q}=tC(G),Q=f.categorySlug?.trim()||kj,H={spawn:J.spawn??_C},V=XU(oC,{owner:X,name:q},H).repository,j=V?.id;if(!j)throw Error(`GitHub repository not found: ${G}`);let K=V.discussionCategories?.nodes?.find((M)=>M.slug===Q);if(!K)throw Error(`GitHub Discussion category not found: ${Q}`);let O=XU(sC,{repositoryId:j,categoryId:K.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 kj="feedback",oC=`
|
|
102
141
|
query($owner: String!, $name: String!) {
|
|
103
142
|
repository(owner: $owner, name: $name) {
|
|
104
143
|
id
|
|
@@ -111,7 +150,7 @@ query($owner: String!, $name: String!) {
|
|
|
111
150
|
}
|
|
112
151
|
}
|
|
113
152
|
}
|
|
114
|
-
`,
|
|
153
|
+
`,sC=`
|
|
115
154
|
mutation($repositoryId: ID!, $categoryId: ID!, $title: String!, $body: String!) {
|
|
116
155
|
createDiscussion(input: {
|
|
117
156
|
repositoryId: $repositoryId,
|
|
@@ -125,74 +164,74 @@ mutation($repositoryId: ID!, $categoryId: ID!, $title: String!, $body: String!)
|
|
|
125
164
|
}
|
|
126
165
|
}
|
|
127
166
|
}
|
|
128
|
-
`;var
|
|
129
|
-
`)}function
|
|
130
|
-
`)}function
|
|
131
|
-
`)}function
|
|
132
|
-
`),process.exit(Y)}async function
|
|
133
|
-
`);return}let z=
|
|
134
|
-
${
|
|
135
|
-
`);return}try{Mj(z,X.flags)}catch(Q){if(Q instanceof Mf)eJ(Q.message,Q.code,2);eJ(Q instanceof Error?Q.message:String(Q),"BAD_FLAG",2)}let q=null;if(!z.offline)try{q=await bK()}catch(Q){eJ(`could not reach or start the kobe daemon: ${Q instanceof Error?Q.message:String(Q)}`,"BAD_DAEMON",2)}try{let Q=await z.handler(mK(z,X.flags,q?.client??null,Aj));BC(Q,X.pretty)}catch(Q){if(Q instanceof Mf)eJ(Q.message,Q.code,1);eJ(Q instanceof Error?Q.message:String(Q),"RPC_ERROR",1)}finally{q?.close()}}var Dj=2,FG=10,TK,GC,Mf,Vf,GQ,OG,AG,ZC,xK,jC,Aj;var nK=k(()=>{x1();YQ();Tf();Rq();U1();D1();SK();TK=["backlog","in_progress","in_review","done","canceled","error"],GC=["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})},GQ={"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:XC},{name:"list",summary:"List all tasks (incl. archived). Returns { tasks }.",flags:[],handler:FC},{name:"get-task",summary:"Read one task's metadata. `.running` = its tmux session is live.",flags:[Vf.taskId()],handler:MC},{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:TK,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:KC},{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:CC},{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:UC},{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:DC},{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:LC},{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:Uj,placeholder:"SLUG",description:"Discussion category slug."}],offline:!0,handler:NC},{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:GC,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:VC},{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:kC},{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:TK,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:AC},{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:OC},{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:gC},{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:RC}],ZC=AG.map((f)=>f.name);xK=[{name:"pretty",type:"bool",description:"Pretty-print stdout JSON."},{name:"help",type:"bool",description:"Show usage for the verb and exit."}];jC={sessionExists:Hf,ensureSession:async(f)=>(await Promise.resolve().then(() => (Y1(),r1))).ensureSession(f),waitForEnginePane:WX,pasteAndSubmit:VX,resolveEngineLaunchInit:async(f,J,Y)=>(await Promise.resolve().then(() => (zG(),xB))).resolveEngineLaunchInit(f,J,Y),engineCommand:b1};Aj={isTaskRunning:(f)=>Hf(Lf(f)),deliverPrompt:(f,J,Y)=>vK(f,J,Y),resolveRepoRoot:async(f)=>(await Promise.resolve().then(() => (Af(),cJ))).resolveMainRepoRoot(f),defaultVendor:async()=>{let{getPersistedString:f}=await Promise.resolve().then(() => (Af(),cJ)),J=f("lastSelectedVendor")?.trim();return J?J:void 0},readWorktreeChanges:async(f)=>(await Promise.resolve().then(() => (WG(),p5))).readWorktreeChanges(f),tearDownSession:async(f)=>{let J=Lf(f);await bJ(J).catch(()=>{}),await l1(J).catch(()=>{})}}});var aK={};jf(aK,{updatePlan:()=>dK,runUpdateSubcommand:()=>IC,parseUpdateArgs:()=>iK});import{spawnSync as SC}from"child_process";function dK(){return{command:"sh",args:["-c",hJ],display:hJ}}function iK(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}"
|
|
136
|
-
|
|
137
|
-
`),
|
|
138
|
-
`))}async function
|
|
167
|
+
`;var BQ=N(()=>{D1()});async function ZU(f={}){let J=f.mode==="require-running"?await o1():await DJ();if(!J)return null;return{client:J,close:()=>J.close()}}var qU=N(()=>{L1()});var MU={};Hf(MU,{verbSchema:()=>Ej,verbHelp:()=>UU,validateAgainstSpec:()=>Tj,schemaIndex:()=>VU,runApiSubcommand:()=>CN,parseFlags:()=>Ij,parseAgentsSpec:()=>jU,invokeVerb:()=>RN,fullSchema:()=>KU,findVerb:()=>bX,deliverPrompt:()=>DU,defaultApiRuntime:()=>xj,apiUsage:()=>jQ,VerbArgs:()=>uj,VERB_GROUPS:()=>gG,VERBS:()=>RG,FANOUT_CAP:()=>AG,ApiError:()=>Mf,API_VERBS:()=>YN,API_SCHEMA_VERSION:()=>Sj});import{resolve as QU}from"path";function BU(f){for(let[J,Y]of Object.entries(gG))if(Y.includes(f))return J;return"other"}async function JN(f){let J=f.args.str("verb");if(J){let z=bX(J);if(!z)throw new Mf(`unknown verb: ${J}`,"BAD_VERB");return Ej(z)}let Y=f.args.str("group");if(Y)return GN(Y);if(f.args.bool("all"))return KU();return VU()}function bX(f){let J=WQ[f]??f;return RG.find((Y)=>Y.name===J)}function Ij(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 Tj(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 uj{verb;flags;constructor(f,J){this.verb=f;this.flags=J}spec(f){let J=this.verb.flags.find((Y)=>Y.name===f);if(!J)throw Error(`internal: --${f} is not declared on verb "${this.verb.name}"`);return J}str(f){this.spec(f);let J=this.flags.get(f);return J&&J.length>0?J:void 0}require(f){let J=this.str(f);if(J===void 0)throw new 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:QU(process.cwd(),J)}requirePath(f){return QU(process.cwd(),this.require(f))}}function jU(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>AG)throw new Mf(`--agents requests ${J.length+q} agents, exceeds the cap of ${AG}`,"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 zN(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 Ej(f){return{name:f.name,group:BU(f.name),summary:f.summary,offline:f.offline??!1,flags:f.flags.map(zN)}}function VU(){return{apiVersion:Sj,kobeVersion:t0,hint:"Compact index. Drill into ONE verb: `kobe api schema --verb <name>` (or `kobe api <verb> --help`). One group: `--group <g>`. Whole spec: `--all`.",groups:gG,verbs:RG.map((f)=>({name:f.name,group:BU(f.name),summary:f.summary})),globalFlags:WU,aliases:WQ}}function GN(f){let J=gG[f];if(!J)throw new Mf(`unknown group: ${f}. Groups: ${Object.keys(gG).join(", ")}`,"BAD_FLAG");return{group:f,verbs:J.map((Y)=>{let z=bX(Y);return{name:Y,summary:z?.summary??""}})}}function KU(){return{apiVersion:Sj,kobeVersion:t0,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:WU,aliases:WQ,groups:gG,verbs:RG.map(Ej)}}function XN(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 UU(f){let J=[`kobe api ${f.name} ${XN(f)}`.trimEnd(),"",f.summary,""],Y=Object.entries(WQ).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(`
|
|
168
|
+
`)}function jQ(){return["usage: kobe api <verb> [flags] [--pretty] [--help]","","Explore the full surface (names, flags, types) with: kobe api schema","","verbs:",...RG.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(`
|
|
169
|
+
`)}function ZN(f,J){let Y=J?JSON.stringify(f,null,2):JSON.stringify(f);process.stdout.write(`${Y}
|
|
170
|
+
`)}function JY(f,J,Y=1){process.stderr.write(`${JSON.stringify({error:{message:f,code:J}})}
|
|
171
|
+
`),process.exit(Y)}async function DU(f,J,Y,z=qN){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 QN(f){let J=null,Y=f.onChannel("active-task",(z)=>{J=z.taskId});try{await f.subscribe()}finally{Y()}return J}function P1(f){if(!f.client)throw new Mf("daemon required","BAD_DAEMON");return f.client}async function MJ(f,J,Y){return P1(f).request(J,Y)}async function HN(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 MJ(f,"issue.mutate",{repoRoot:f.args.requirePath("repo"),op:{type:"update",id:f.args.int("id"),title:J,body:Y}})}async function BN(f){let J=P1(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 K=Y.enumOf("status");if(K)await J.request("task.status",{taskId:j,status:K});let L=Y.bool("pin");if(L!==void 0)await J.request("task.pin",{taskId:j,pinned:L});let O=V.task;if(K||L!==void 0)O=(await J.request("task.get",{taskId:j})).task;let M=Y.str("prompt");if(!M)return{taskId:j,task:O,started:!1};let g=await f.runtime.deliverPrompt(J,{id:j,worktreePath:O.worktreePath,vendor:O.vendor,repo:O.repo},M);return O=(await J.request("task.get",{taskId:j})).task,{taskId:j,task:O,started:g.started,engineReady:g.engineReady,session:g.session}}async function jN(f){let J=P1(f),Y=f.args.require("prompt"),z=f.args.str("task-id");if(!z){let q=await QN(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 WN(f){let J=P1(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 VN(f){let J=P1(f),Y=f.args.require("task-id"),z=f.args.require("text");return await J.request("note.file",{taskId:Y,text:z})}async function KN(f){let J=P1(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 UN(f){return P1(f).request("task.list")}async function DN(f){let J=P1(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 LN(f){let J=P1(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 MN(f){let J=P1(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 FN(f){let J=P1(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 ON(f){let J=P1(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?jU(H):Array(Y.int("count")??1).fill(Y.vendor()??B??"claude");if(V.length>AG)throw new Mf(`fan-out of ${V.length} exceeds the cap of ${AG} \u2014 spawn in batches`,"BAD_FLAG");let j=[];for(let K of V){let L={repo:G,vendor:K};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:K,repo:O.task.repo},X);j.push({taskId:O.taskId,vendor:K,started:M.started,engineReady:M.engineReady,session:M.session})}return{count:j.length,tasks:j}}async function AN(f){let J=P1(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 gN(f){return{ok:!0,discussion:OG({title:f.args.require("title"),body:f.args.require("body"),categorySlug:f.args.str("category")})}}function LU(f,J,Y,z){return{args:new uj(f,J),client:Y,runtime:z}}async function RN(f,J,Y){let z=bX(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=Ij(J,G);return Tj(z,X.flags),z.handler(LU(z,X.flags,Y.client,Y.runtime??xj))}async function CN(f){let[J,...Y]=f;if(!J||J==="--help"||J==="-h"||J==="help"){if(!J)JY(jQ(),"MISSING_VERB",2);process.stdout.write(`${jQ()}
|
|
172
|
+
`);return}let z=bX(J);if(!z)JY(`unknown verb: ${J}
|
|
173
|
+
${jQ()}`,"BAD_VERB",2);let G=new Set(z.flags.filter((Q)=>Q.type==="bool").map((Q)=>Q.name)),X;try{X=Ij(Y,G)}catch(Q){if(Q instanceof Mf)JY(Q.message,Q.code,2);JY(Q instanceof Error?Q.message:String(Q),"BAD_FLAG",2)}if(X.help){process.stdout.write(`${UU(z)}
|
|
174
|
+
`);return}try{Tj(z,X.flags)}catch(Q){if(Q instanceof Mf)JY(Q.message,Q.code,2);JY(Q instanceof Error?Q.message:String(Q),"BAD_FLAG",2)}let q=null;if(!z.offline)try{q=await ZU()}catch(Q){JY(`could not reach or start the kobe daemon: ${Q instanceof Error?Q.message:String(Q)}`,"BAD_DAEMON",2)}try{let Q=await z.handler(LU(z,X.flags,q?.client??null,xj));ZN(Q,X.pretty)}catch(Q){if(Q instanceof Mf)JY(Q.message,Q.code,1);JY(Q instanceof Error?Q.message:String(Q),"RPC_ERROR",1)}finally{q?.close()}}var Sj=2,AG=10,HU,fN,Mf,Vf,WQ,gG,RG,YN,WU,qN,xj;var FU=N(()=>{x1();BQ();Ef();Sq();U1();D1();qU();HU=["backlog","in_progress","in_review","done","canceled","error"],fN=["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})},WQ={"spawn-task":"add"},gG={discover:["schema"],read:["list","get-task","collect"],create:["add","fan-out"],drive:["send","dispatch","note","set-active"],edit:["rename","set-branch","set-vendor","set-status"],issues:["issue-list","issue-create","issue-set-status","issue-update"],lifecycle:["archive","pin","delete"],worktree:["ensure-worktree","adopt","discover-adoptable"],feedback:["feedback"]};RG=[{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:JN},{name:"list",summary:"List all tasks (incl. archived). Returns { tasks }.",flags:[],handler:UN},{name:"get-task",summary:"Read one task's metadata. `.running` = its tmux session is live.",flags:[Vf.taskId()],handler:KN},{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:HU,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:BN},{name:"fan-out",summary:`Spawn N tasks of ONE prompt in a single call (parallel attempts). Capped at ${AG}.`,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:ON},{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:jN},{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:WN},{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:VN},{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:kj,placeholder:"SLUG",description:"Discussion category slug."}],offline:!0,handler:gN},{name:"issue-list",summary:"List daemon-owned issues for a repo.",flags:[Vf.repo()],handler:(f)=>MJ(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)=>MJ(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:fN,description:"New issue status."}],handler:(f)=>MJ(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:HN},{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:AN},{name:"rename",summary:"Set a task's title.",flags:[Vf.taskId(),{name:"title",type:"string",required:!0,placeholder:"T",description:"New title."}],handler:(f)=>MJ(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)=>MJ(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)=>MJ(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:HU,description:"New status."}],handler:(f)=>MJ(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:LN},{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)=>MJ(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:DN},{name:"ensure-worktree",summary:"Materialize a task's git worktree on disk now (without starting an engine). Returns { worktreePath }.",flags:[Vf.taskId()],handler:(f)=>MJ(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:MN},{name:"discover-adoptable",summary:"List existing git worktrees in a repo not yet tracked as kobe tasks. Returns { worktrees }.",flags:[Vf.repo()],handler:(f)=>MJ(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:FN}],YN=RG.map((f)=>f.name);WU=[{name:"pretty",type:"bool",description:"Pretty-print stdout JSON."},{name:"help",type:"bool",description:"Show usage for the verb and exit."}];qN={sessionExists:jf,ensureSession:async(f)=>(await Promise.resolve().then(() => (z1(),_1))).ensureSession(f),waitForEnginePane:UX,pasteAndSubmit:DX,resolveEngineLaunchInit:async(f,J,Y)=>(await Promise.resolve().then(() => (XG(),$B))).resolveEngineLaunchInit(f,J,Y),engineCommand:k1};xj={isTaskRunning:(f)=>jf(Lf(f)),deliverPrompt:(f,J,Y)=>DU(f,J,Y),resolveRepoRoot:async(f)=>(await Promise.resolve().then(() => (Af(),nJ))).resolveMainRepoRoot(f),defaultVendor:async()=>{let{getPersistedString:f}=await Promise.resolve().then(() => (Af(),nJ)),J=f("lastSelectedVendor")?.trim();return J?J:void 0},readWorktreeChanges:async(f)=>(await Promise.resolve().then(() => (KG(),UK))).readWorktreeChanges(f),tearDownSession:async(f)=>{let J=Lf(f);await SJ(J).catch(()=>{}),await $1(J).catch(()=>{})}}});var RU={};Hf(RU,{updatePlan:()=>OU,runUpdateSubcommand:()=>yN,parseUpdateArgs:()=>AU});import{spawnSync as NN}from"child_process";function OU(){return{command:"sh",args:["-c",PJ],display:PJ}}function AU(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}"
|
|
175
|
+
|
|
176
|
+
`),gU(process.stderr),process.exit(2)}return{help:!1,dryRun:J}}function gU(f){f.write(["Usage: kobe update [--dry-run]","","Runs kobe's GitHub-hosted update script.","","Default command:",` ${PJ}`,"","Script URL:",` ${GZ}`,"","Manual fallback:",` ${fH()}`,"","Examples:"," kobe update"," kobe update --dry-run",""].join(`
|
|
177
|
+
`))}async function yN(f,J){let Y={spawn:J?.spawn??NN,stdout:J?.stdout??process.stdout,stderr:J?.stderr??process.stderr,exit:J?.exit??((q)=>process.exit(q))},z=AU(f);if(z.help){gU(Y.stdout);return}let G=OU();if(Y.stdout.write(`kobe ${t0} -> latest
|
|
139
178
|
`),Y.stdout.write(`running: ${G.display}
|
|
140
179
|
`),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
|
|
180
|
+
`),Y.exit(1);Y.exit(X.status??1)}var CU=N(()=>{D1()});var kU={};Hf(kU,{runThemeSubcommand:()=>vN});import{existsSync as yU,mkdirSync as bN,readFileSync as kN,readdirSync as SN,unlinkSync as IN,writeFileSync as TN}from"fs";import{basename as NU,join as hj,resolve as uN}from"path";function YY(f){process.stderr.write(`kobe theme: ${f}
|
|
142
181
|
`),process.exit(1)}function xY(f){process.stderr.write(`kobe theme: ${f}
|
|
143
182
|
|
|
144
|
-
`),
|
|
183
|
+
`),bU(),process.exit(2)}function EN(){let f=[];f.push("bundled:");for(let z of[...wj].sort())f.push(` ${z} [built-in]`);let J=QG(),Y=[];try{Y=SN(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=hj(J,z),q=wj.includes(G)?" (overrides built-in)":"";f.push(` ${G}${q} ${X}`)}process.stdout.write(`${f.join(`
|
|
145
184
|
`)}
|
|
146
|
-
`)}async function
|
|
185
|
+
`)}async function xN(f){if(/^https?:\/\//i.test(f)){let X;try{X=await fetch(f)}catch(V){YY(`failed to fetch ${f}: ${V instanceof Error?V.message:String(V)}`)}if(!X.ok)YY(`failed to fetch ${f}: HTTP ${X.status} ${X.statusText}`);let q=await X.text(),Q=f.split(/[?#]/)[0]??f,H=NU(Q)||"theme.json",B=H.endsWith(".json")?H.slice(0,-5):H;return{text:q,defaultName:B}}let J=uN(process.cwd(),f),Y;try{Y=kN(J,"utf8")}catch(X){YY(`failed to read ${J}: ${X instanceof Error?X.message:String(X)}`)}let z=NU(J),G=z.endsWith(".json")?z.slice(0,-5):z;return{text:Y,defaultName:G}}function wN(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 hN(f){let{source:J,opts:Y}=wN(f),{text:z,defaultName:G}=await xN(J),X;try{X=JSON.parse(z)}catch(V){YY(`source is not valid JSON: ${V instanceof Error?V.message:String(V)}`)}let q=Tq(X);if(!q.ok)YY(`source is not a valid kobe theme: ${q.reason}`);let Q=Y.name??G;if(!Q||!/^[a-zA-Z0-9._-]+$/.test(Q))YY(`invalid theme name "${Q}" (use letters, digits, '.', '_', '-')`);let H=QG();bN(H,{recursive:!0});let B=hj(H,`${Q}.json`);if(yU(B)&&!Y.force)YY(`${B} already exists (pass --force to overwrite)`);TN(B,`${JSON.stringify(q.theme,null,2)}
|
|
147
186
|
`,"utf8"),process.stdout.write(`installed theme "${Q}" -> ${B}
|
|
148
|
-
`)}function
|
|
149
|
-
`)}function
|
|
150
|
-
`))}async function
|
|
187
|
+
`)}function PN(f){let J=f[0];if(!J)xY("missing <name>");if(f.length>1)xY(`unexpected extra arguments after "${J}"`);if(wj.includes(J))YY(`"${J}" is a built-in theme and cannot be removed`);let Y=hj(QG(),`${J}.json`);if(!yU(Y))YY(`no user theme named "${J}" (looked for ${Y})`);IN(Y),process.stdout.write(`removed theme "${J}" (${Y})
|
|
188
|
+
`)}function bU(){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(`
|
|
189
|
+
`))}async function vN(f){let[J,...Y]=f;if(!J||J==="--help"||J==="-h"||J==="help"){if(bU(),!J)process.exit(2);return}if(J==="list"||J==="ls"){if(Y.length>0)xY(`"${J}" takes no arguments`);EN();return}if(J==="add"){await hN(Y);return}if(J==="remove"||J==="rm"){PN(Y);return}xY(`unknown action "${J}" (try "list", "add", or "remove")`)}var wj;var SU=N(()=>{af();uq();sB();wj=["claude","conductor","dracula","nord","opencode","osaka-jade","tokyonight"]});var EU={};Hf(EU,{runFeedbackSubcommand:()=>cN,parseFeedbackArgs:()=>uU});import{readFileSync as IU}from"fs";function wY(f){process.stderr.write(`kobe feedback: ${f}
|
|
151
190
|
|
|
152
|
-
${
|
|
153
|
-
`),process.exit(2)}function
|
|
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?
|
|
155
|
-
`)});import{homedir as
|
|
156
|
-
`))}function
|
|
191
|
+
${TU}
|
|
192
|
+
`),process.exit(2)}function mN(f){if(f==="-")return IU(0,"utf8");return IU(f,"utf8")}function uU(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 cN(f){let J=uU(f);if(J.help){process.stdout.write(`${TU}
|
|
193
|
+
`);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?mN(J.bodyFile):J.body;if(!Y)wY("--body or --body-file is required");let z=OG({title:J.title,body:Y,categorySlug:J.category});console.log(`created Discussion #${z.number}: ${z.url}`)}var TU;var xU=N(()=>{BQ();TU=["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(`
|
|
194
|
+
`)});import{homedir as nN}from"os";async function wU(f={}){let J=f.homeDir??process.env.KOBE_HOME_DIR??nN(),Y=new MG({homeDir:J});await Y.load();let z=new ZQ,G=new oZ({store:Y,worktrees:z});return{homeDir:J,orchestrator:G,store:Y,worktrees:z,async close(){G.dispose()}}}var hU=N(()=>{YX();CX();yj()});var vU={};Hf(vU,{runDaemonSubcommand:()=>iN});function PU(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(`
|
|
195
|
+
`))}function dN(){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 iN(f){let[J="status"]=f,Y=RJ(),z=dJ();if(J==="--help"||J==="-h"||J==="help"){PU(process.stdout);return}if(J==="status"){let Q=new i1(Y);try{let H=await Q.request("daemon.status");console.log(JSON.stringify(H,null,2))}catch{let H=await UG(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 i1(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 DG(Y,z),(await DJ()).close(),console.log(`kobe daemon: restarted, listening on ${Y}`);return}if(J!=="start")process.stderr.write(`kobe daemon: unknown command "${J}"
|
|
157
196
|
|
|
158
|
-
`),
|
|
197
|
+
`),PU(process.stderr),process.exit(2);sV();let G=await wU(),X=await RK(G.orchestrator,{socketPath:Y,pidPath:z,homeDir:G.homeDir,webPort:dN(),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 mU=N(()=>{cG();L1();zQ();xz();YQ();hU()});import{existsSync as lN,readFileSync as aN}from"fs";import{homedir as $N}from"os";import{join as cU}from"path";function mj(f={}){return["skills","add",pN,"--skill","kobe","--agent",f.agent??VQ]}function KQ(f={}){return`npx ${mj(f).join(" ")}`}function cj(f={}){let J=f.home??$N(),Y=f.cwd??process.cwd();return[cU(J,nU),cU(Y,nU)]}function rN(f){let J=f.match(/kobe-skill-version:\s*(\d+)/);return J?Number.parseInt(J[1],10):null}function SX(f){let J=cj(f).find((G)=>lN(G));if(!J)return{installed:!1,installedVersion:null,currentVersion:Pj,stale:!1};let Y=null;try{Y=rN(aN(J,"utf8"))}catch{Y=null}let z=Y===null||Y<Pj;return{installed:!0,installedVersion:Y,currentVersion:Pj,stale:z}}function dU(){let f=SX();if(!f.installed){if(bf(vj)==="1")return;$f(vj,"1"),process.stderr.write(`
|
|
159
198
|
kobe: the kobe agent skill isn't installed \u2014 install it so your coding agent can drive kobe via \`kobe api\`:
|
|
160
|
-
${
|
|
161
|
-
(wraps \`${
|
|
199
|
+
${kX}
|
|
200
|
+
(wraps \`${KQ()}\`; check anytime with \`kobe doctor\`)
|
|
162
201
|
|
|
163
|
-
`);return}if(f.stale){let J=`${
|
|
202
|
+
`);return}if(f.stale){let J=`${vj}:v${f.currentVersion}`;if(bf(J)==="1")return;$f(J,"1");let Y=f.installedVersion===null?"an older":`v${f.installedVersion}`;process.stderr.write(`
|
|
164
203
|
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
|
-
${
|
|
204
|
+
${kX}
|
|
166
205
|
|
|
167
|
-
`)}}var
|
|
206
|
+
`)}}var Pj=2,nU=".claude/skills/kobe/SKILL.md",kX="kobe skill install",pN="Sma1lboy/kobe",VQ="claude-code",vj="skillHintSeen";var UQ=N(()=>{Af()});var DQ={};Hf(DQ,{runResetSubcommand:()=>qy,runReloadSubcommand:()=>Qy,runDoctorSubcommand:()=>Xy});import{existsSync as _N,readFileSync as aU,statSync as oN}from"fs";import{unlink as sN}from"fs/promises";import{join as $U}from"path";import{createInterface as tN}from"readline";function eN(f){try{return process.kill(f,0),!0}catch(J){return J.code==="EPERM"}}async function fy(f){let J=new i1(f);try{return await J.request("daemon.status")}catch{return null}finally{J.close()}}function Jy(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 Yy(f){if(f<1024)return`${f} B`;if(f<1048576)return`${(f/1024).toFixed(1)} KB`;return`${(f/1048576).toFixed(1)} MB`}function nj(f){try{let J=oN(f);return`present (${Yy(J.size)}, modified ${J.mtime.toISOString()})`}catch{return"absent"}}function pU(f){try{let J=JSON.parse(aU(f,"utf8"));return Array.isArray(J.tasks)?J.tasks.length:null}catch{return null}}function zy(f,J){try{return aU(f,"utf8").split(`
|
|
168
207
|
`).filter((z)=>z.trim().length>0).slice(-J).join(`
|
|
169
|
-
`)}catch{return""}}async function
|
|
170
|
-
`).filter((Y)=>Y.trim().length>0).length}async function
|
|
208
|
+
`)}catch{return""}}async function dj(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 Gy(){if(!await bJ())return 0;let{code:f,stdout:J}=await dj(["list-sessions","-F","#{session_name}"]);if(f!==0)return 0;return J.split(`
|
|
209
|
+
`).filter((Y)=>Y.trim().length>0).length}async function Xy(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
210
|
`));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=
|
|
173
|
-
`))Q.push(` \u2502 ${L}`)}}if(Q.push(""),await
|
|
174
|
-
`))}async function
|
|
175
|
-
`))}async function
|
|
211
|
+
`)),process.exit(2);let Y=RJ(),z=dJ(),G=WZ(),X=$U(J1(),"tasks.json"),q=c1(),Q=["kobe doctor",` home: ${gJ()}`,` socket: ${Y}`,""],H=await fy(Y);if(H){let j=typeof H.daemonPid==="number"?H.daemonPid:"?",K=typeof H.uptimeMs==="number"?Jy(H.uptimeMs):"?",L=typeof H.taskCount==="number"?H.taskCount:"?",O=typeof H.attachedClients==="number"?H.attachedClients:"?";Q.push(`daemon: \u2713 running (pid ${j}, up ${K}, ${L} task(s), ${O} client(s))`);let M=typeof H.kobeVersion==="string"?H.kobeVersion:void 0;if(M&&M!==t0)Q.push(` \u26A0 stale build: daemon is v${M}, you launched v${t0}`),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 UG(z);if(j&&eN(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(_N(Y))Q.push(` orphan socket file present: ${Y}`);let K=zy(G,8);if(K){Q.push(" last lines of daemon.log:");for(let L of K.split(`
|
|
212
|
+
`))Q.push(` \u2502 ${L}`)}}if(Q.push(""),await bJ())Q.push(`tmux: ${await Gy()} kobe session(s) on \`${HJ}\` socket`);else Q.push("tmux: \u2717 not found on PATH (task sessions need tmux)");Q.push("");let B=SX();if(!B.installed)Q.push("skill: \u2717 kobe agent skill not installed (optional \u2014 lets a coding agent drive `kobe api`)"),Q.push(` \u2192 ${kX}`);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 ${kX}`)}else Q.push(`skill: \u2713 kobe agent skill installed (v${B.installedVersion})`);Q.push("");let V=pU(X);Q.push(`tasks.json: ${nj(X)}${V===null?"":` \u2014 ${V} task(s)`}`),Q.push(`state.json: ${nj(q)}`),Q.push(`daemon.log: ${nj(G)}`),console.log(Q.join(`
|
|
213
|
+
`))}async function Zy(f){let J=tN({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 iU(f,J){try{await sN(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 lU(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(`
|
|
214
|
+
`))}async function qy(f){if(f.includes("--help")||f.includes("-h")||f.includes("help")){lU(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}"
|
|
176
215
|
|
|
177
|
-
`),
|
|
178
|
-
re-run with --yes to proceed (no interactive terminal for a y/N prompt)`);return}if(!await
|
|
216
|
+
`),lU(process.stderr),process.exit(2);let z=f.includes("--hard"),G=f.includes("--yes")||f.includes("-y"),X=RJ(),q=dJ(),Q=$U(J1(),"tasks.json"),H=c1();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 \`${HJ}\` socket`),z){let j=pU(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(`
|
|
217
|
+
re-run with --yes to proceed (no interactive terminal for a y/N prompt)`);return}if(!await Zy(z?`
|
|
179
218
|
Stop daemon, kill sessions AND wipe task index? [y/N] `:`
|
|
180
|
-
Stop daemon and kill kobe sessions? [y/N] `)){console.log("aborted \u2014 nothing changed");return}}console.log("");let{pid:B,method:V}=await
|
|
181
|
-
kobe: reset complete. Relaunch kobe to start fresh.`)}async function
|
|
219
|
+
Stop daemon and kill kobe sessions? [y/N] `)){console.log("aborted \u2014 nothing changed");return}}console.log("");let{pid:B,method:V}=await DG(X,q);if(console.log(V==="absent"?" daemon: was not running (cleared any stale socket/pidfile)":` daemon: stopped via ${V}${B?` (pid ${B})`:""}`),await bJ()){let{code:j}=await dj(["kill-server"]);console.log(j===0?` tmux: killed all sessions on \`${HJ}\``:` tmux: no sessions on \`${HJ}\``)}else console.log(" tmux: not installed \u2014 no sessions to kill");if(z)await iU(Q,"task index"),await iU(H,"UI state");console.log(`
|
|
220
|
+
kobe: reset complete. Relaunch kobe to start fresh.`)}async function Qy(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
221
|
`));return}let J=f.find((Q)=>Q.length>0);if(J!==void 0)process.stderr.write(`kobe reload: unexpected argument "${J}"
|
|
183
222
|
|
|
184
223
|
Usage: kobe reload (takes no options)
|
|
185
|
-
`),process.exit(2);if(!await
|
|
186
|
-
`).map((Q)=>Q.trim()).filter((Q)=>Q.length>0);if(G.length===0){console.log(`kobe reload: no kobe tmux sessions on the \`${
|
|
187
|
-
`).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)&&z!==process.pid)}catch{return[]}}async function
|
|
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:
|
|
189
|
-
`),process.stdout.write(` home: ${
|
|
190
|
-
`);else if(q=await
|
|
191
|
-
`),process.stdout.write(` home: ${
|
|
224
|
+
`),process.exit(2);if(!await bJ()){console.log("kobe reload: tmux is not installed \u2014 no panes to reload");return}let{code:Y,stdout:z}=await dj(["list-sessions","-F","#{session_name}"]);if(Y!==0){console.log(`kobe reload: no kobe tmux sessions on the \`${HJ}\` socket`);return}let G=z.split(`
|
|
225
|
+
`).map((Q)=>Q.trim()).filter((Q)=>Q.length>0);if(G.length===0){console.log(`kobe reload: no kobe tmux sessions on the \`${HJ}\` socket`);return}let{refreshKobeWorkspacePanes:X}=await Promise.resolve().then(() => (z1(),_1)),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 LQ=N(()=>{cG();zQ();xz();YQ();af();UQ();Ef();D1()});var f6={};Hf(f6,{runWebSubcommand:()=>Dy});import{existsSync as oU}from"fs";import{homedir as Hy}from"os";import{resolve as MQ}from"path";import{fileURLToPath as sU}from"url";function rU(){let f=process.env.KOBE_HOME_DIR?.trim();return f?`sandbox: ${f}`:`${Hy()}/.kobe (production)`}function jy(){let f=sU(import.meta.url),J=[MQ(f,"../../../../kobe-web/dist"),MQ(f,"../../web-ui")];for(let Y of J)if(oU(`${Y}/index.html`))return Y;return}function Wy(){let f=sU(import.meta.url),J=[MQ(f,"../../../../kobe-web/pty-server.mjs"),MQ(f,"../../web-ui/pty-server.mjs")];for(let Y of J)if(oU(Y))return Y;return}async function _U(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(`
|
|
226
|
+
`).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)&&z!==process.pid)}catch{return[]}}async function Vy(f){let J;try{J=(await(await fetch(`http://localhost:${f}${eU}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(J!==tU)throw Error(`PTY port ${f} is in use by a non-kobe service; refusing to replace it`);let Y=await _U(f);for(let G of Y)try{process.kill(G,"SIGTERM")}catch{}let z=Date.now()+2000;while(Date.now()<z){if((await _U(f)).length===0)return;await new Promise((G)=>setTimeout(G,100))}}async function Ky(f){let J=Wy();if(!J)return null;let Y=f.webPort+2;if(f.takeover)await Vy(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 Uy(f,J){if(process.env.KOBE_DAEMON_WEB_PORT=String(f),J)process.env.KOBE_DAEMON_WEB_STATIC_DIR=J;await LG();let Y;try{Y=(await(await fetch(`http://127.0.0.1:${f}${eU}`,{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!==tU)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 Dy(f){if(f.includes("--help")||f.includes("-h")){process.stdout.write(By);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
|
|
227
|
+
`),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:jy();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 Uy(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)
|
|
228
|
+
`),process.stdout.write(` home: ${rU()}
|
|
229
|
+
`);else if(q=await Ky({webPort:J,takeover:G}),process.stdout.write(`kobe web \u2192 http://localhost:${J}
|
|
230
|
+
`),process.stdout.write(` home: ${rU()}
|
|
192
231
|
`),!q)process.stderr.write(`kobe web: PTY server not found; terminal tabs will be unavailable
|
|
193
232
|
`);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
233
|
`),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
|
|
234
|
+
`),process.exit(1)}}var tU="kobe-web",eU="/__kobe_web",By=`Usage: kobe web [options]
|
|
196
235
|
|
|
197
236
|
Launch the kobe web UI through daemon web transport on http://localhost:<port>.
|
|
198
237
|
|
|
@@ -201,45 +240,45 @@ Options:
|
|
|
201
240
|
--routes-only Routes only; Vite serves the SPA separately.
|
|
202
241
|
--no-takeover Reserved for compatibility; daemon owns the web port.
|
|
203
242
|
-h, --help Show this help.
|
|
204
|
-
`;var
|
|
205
|
-
`)}function
|
|
243
|
+
`;var J6=N(()=>{L1()});var z6={};Hf(z6,{runSkillSubcommand:()=>My});function ij(){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: ${VQ}.`].join(`
|
|
244
|
+
`)}function Y6(f){let J=VQ;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
245
|
`),process.exit(2);J=G,Y++}else if(z.startsWith("--agent="))J=z.slice(8);else process.stderr.write(`kobe skill: unknown flag "${z}"
|
|
207
246
|
|
|
208
|
-
${
|
|
209
|
-
`),process.exit(2)}return J}async function
|
|
210
|
-
`),!J)process.exitCode=2;return}if(!
|
|
247
|
+
${ij()}
|
|
248
|
+
`),process.exit(2)}return J}async function My(f){let[J,...Y]=f;if(!J||J==="--help"||J==="-h"||J==="help"){if(process.stdout.write(`${ij()}
|
|
249
|
+
`),!J)process.exitCode=2;return}if(!Ly.includes(J))process.stderr.write(`kobe skill: unknown verb "${J}"
|
|
211
250
|
|
|
212
|
-
${
|
|
213
|
-
`),process.exit(2);if(J==="status"){let Q=
|
|
214
|
-
`));return}if(J==="command"){process.stdout.write(`${
|
|
215
|
-
`);return}let z=
|
|
251
|
+
${ij()}
|
|
252
|
+
`),process.exit(2);if(J==="status"){let Q=SX(),[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(`
|
|
253
|
+
`));return}if(J==="command"){process.stdout.write(`${KQ({agent:Y6(Y)})}
|
|
254
|
+
`);return}let z=Y6(Y),G=mj({agent:z});process.stdout.write(`kobe skill: running \`npx ${G.join(" ")}\`
|
|
216
255
|
`);let q=await Bun.spawn(["npx",...G],{stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited;if(q!==0)process.stderr.write(`
|
|
217
256
|
kobe skill install failed (npx exited ${q}). Is \`npx\` on PATH and are you online?
|
|
218
|
-
You can run it yourself: ${
|
|
257
|
+
You can run it yourself: ${KQ({agent:z})}
|
|
219
258
|
`),process.exit(q||1);process.stdout.write(`kobe skill: installed.
|
|
220
|
-
`)}var
|
|
221
|
-
`))}var Ck=500,Nk="worktree-created",yU="externalWorktreeSync";var Ej=k(()=>{L1();EH();jZ();Af();U1()});function hU(f){var J;if(f>=55296&&f<=57343||f>1114111)return 65533;return(J=wk.get(f))!==null&&J!==void 0?J:f}var xj,wk,wU;var PU=k(()=>{wk=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]]),wU=(xj=String.fromCodePoint)!==null&&xj!==void 0?xj:(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 vU(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 mU;var cU=k(()=>{mU=vU("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 j1;var nU=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"})(j1||(j1={}))});function wj(f){return f>=Ef.ZERO&&f<=Ef.NINE}function hk(f){return f>=Ef.UPPER_A&&f<=Ef.UPPER_F||f>=Ef.LOWER_A&&f<=Ef.LOWER_F}function Pk(f){return f>=Ef.UPPER_A&&f<=Ef.UPPER_Z||f>=Ef.LOWER_A&&f<=Ef.LOWER_Z||wj(f)}function vk(f){return f===Ef.EQUALS||Pk(f)}class hj{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=JY.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)|dU)===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(wj(Y)||hk(Y)){let z=Y<=Ef.NINE?Y-Ef.ZERO:(Y|dU)-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(wj(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===JY.Strict)return 0;if(this.emitCodePoint(hU(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&j1.VALUE_LENGTH)>>14;while(J<f.length){if(G===0&&(z&j1.FLAG13)!==0){let q=(z&j1.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let Q=z&j1.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&j1.VALUE_LENGTH)>>14}if(J>=f.length)break;let X=f.charCodeAt(J);if(X===Ef.SEMI&&G!==0&&(z&j1.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.treeIndex=ck(Y,z,this.treeIndex+Math.max(1,G),X),this.treeIndex<0)return this.result===0||this.decodeMode===JY.Attribute&&(G===0||vk(X))?0:this.emitNotTerminatedNamedEntity();if(z=Y[this.treeIndex],G=(z&j1.VALUE_LENGTH)>>14,G!==0){if(X===Ef.SEMI)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.decodeMode!==JY.Strict&&(z&j1.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]&j1.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]&~(j1.VALUE_LENGTH|j1.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!==JY.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 mk(f){let J="",Y=new hj(f,(z)=>J+=wU(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 ck(f,J,Y,z){let G=(J&j1.BRANCH_LENGTH)>>7,X=J&j1.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=JY.Legacy){return nk(f,J)}var Ef,dU=32,of,JY,nk;var iU=k(()=>{PU();cU();nU();(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"})(JY||(JY={}));nk=mk(mU)});var lU,aU;var rU=k(()=>{iU();(function(f){f[f.XML=0]="XML",f[f.HTML=1]="HTML"})(lU||(lU={}));(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"})(aU||(aU={}))});import{CliRenderer as ik,createCliRenderer as lk,engine as ak}from"@opentui/core";import{createTestRenderer as cm}from"@opentui/core/testing";import{ASCIIFontRenderable as $k,BoxRenderable as rk,CodeRenderable as pk,DiffRenderable as _k,InputRenderable as ok,LineNumberRenderable as sk,MarkdownRenderable as tk,ScrollBoxRenderable as ek,SelectRenderable as fN,TabSelectRenderable as JN,TextareaRenderable as YN,TextAttributes as Pj,TextNodeRenderable as zN,TextRenderable as GN}from"@opentui/core";import{engine as im,Timeline as lm}from"@opentui/core";import{BaseRenderable as eU,createTextAttributes as ZN,InputRenderable as vj,InputRenderableEvents as NX,isTextNodeRenderable as nj,parseColor as pU,Renderable as qN,RootTextNodeRenderable as QN,ScrollBoxRenderable as HN,SelectRenderable as _U,SelectRenderableEvents as mj,TabSelectRenderable as oU,TabSelectRenderableEvents as cj,TextNodeRenderable as BN,TextRenderable as f6}from"@opentui/core";import{BaseRenderable as FN,isTextNodeRenderable as ON,TextNodeRenderable as AN,TextRenderable as gN,Yoga as tU}from"@opentui/core";import{BoxRenderable as fc,RootRenderable as Jc}from"@opentui/core";import{TimeToFirstDrawRenderable as NN}from"@opentui/core";import{createSlotRegistry as Gc}from"@opentui/core";function WN({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);RJ((_)=>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 RJ(()=>{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 RJ(()=>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)RJ(()=>C.children=U(N,g.children,C.children));return RJ(()=>g.ref&&g.ref(N)),RJ(()=>{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 Zz((y)=>{C=y,j(g,N())}),C},insert:j,spread(N,g,C){if(typeof g==="function")RJ((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:nZ,effect:RJ,memo:jN,createComponent:JV,use(N,g,C){return $f(()=>N(g,C))}}}function VN(f){let J=WN(f);return J.mergeProps=nZ,J}function $j(f){if(!jQ.has(f))jQ.set(f,0);let J=jQ.get(f)+1;return jQ.set(f,J),`${f}-${J}`}function KN(f,J,Y){if(sf("Inserting node:",rf(J),"into parent:",rf(f),"with anchor:",rf(Y),J instanceof gG),J instanceof yX)J.parent=f,J=J.getSlotChild(f);if(Y&&Y instanceof yX)Y=Y.getSlotChild(f);if(nj(J)){if(!(f instanceof f6)&&!nj(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 eU))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=dj(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 UN(f,J){if(sf("Removing node:",rf(J),"from parent:",rf(f)),J instanceof yX)J.parent=null,J=J.getSlotChild(f);f.remove(J.id),process.nextTick(()=>{if(J instanceof eU&&!J.parent){J.destroyRecursively();return}})}function DN(f){sf("Creating text node:",f);let J=$j("text-node");if(typeof f==="number")f=f.toString();return gG.fromString(Cz(f),{id:J})}function LN(){let f=$j("slot-node");return sf("Creating slot node",f),new yX(f)}function sU(f){sf("Getting parent of node:",rf(f));let J=f.parent??void 0;if(J instanceof QN)J=J.textParent??void 0;let Y=J?.parent?.parent?.parent;if(Y instanceof HN&&Y.content===J)J=Y;return J}function CN(f){Object.assign(q6,f)}function kN(){return q6}var aj,z1=()=>{let f=u1(aj);if(!f)throw Error("No renderer found");return f},XN=(f)=>{let J=z1();J1(()=>{J.on("resize",f)}),mf(()=>{J.off("resize",f)})},TJ=()=>{let f=z1(),[J,Y]=r({width:f.width,height:f.height});return XN((G,X)=>{Y({width:G,height:X})}),J},jN=(f)=>U0(()=>f()),jQ,sf=(...f)=>{if(process.env.DEBUG)console.log("[Reconciler]",...f)},gG,rf=(f)=>{if(!f)return;return f.id},dj=(f)=>{let J;if(f instanceof f6)J=f.getTextChildren();else J=f.getChildren();return J},MN,u,I0,b,W,x0,D,K,sm,Z,J6,hY,rj,Y6,z6,yX,bX,WQ,ij,lj,G6,X6,Z6,RN,q6,yN=(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=MN(()=>b(aj.Provider,{get value(){return f},get children(){return b(J,{})}}),f.root)}finally{X=!1,f.destroy=Q}if(z)H();if(q)Q()},Q6=async(f,J={})=>{let Y=J instanceof ik?J:await lk({...J,onDestroy:()=>{J.onDestroy?.()}});ak.attach(Y),yN(Y,f)};var h=k(()=>{Wf();rU();Wf();Wf();Wf();aj=CJ();jQ=new Map;gG=class gG extends BN{static fromString(f,J={}){let Y=new gG(J);return Y.add(f),Y}};({render:MN,effect:u,memo:I0,createComponent:b,createElement:W,createTextNode:x0,insertNode:D,insert:K,spread:sm,setProp:Z,mergeProps:J6,use:hY}=VN({createElement(f){sf("Creating element:",f);let J=$j(f),Y=u1(aj);if(!Y)throw Error("No renderer found");let z=kN();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:DN,createSlotNode:LN,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(nj(f)){if(J==="href"){f.link={url:Y};return}if(J==="style"){f.attributes|=ZN(Y),f.fg=Y.fg?pU(Y.fg):f.fg,f.bg=Y.bg?pU(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 qN))return;if(Y)f.focus();else f.blur();break;case"onChange":let G=void 0;if(f instanceof _U)G=mj.SELECTION_CHANGED;else if(f instanceof oU)G=cj.SELECTION_CHANGED;else if(f instanceof vj)G=NX.CHANGE;if(!G)break;if(Y)f.on(G,Y);if(z)f.off(G,z);break;case"onInput":if(f instanceof vj){if(Y)f.on(NX.INPUT,Y);if(z)f.off(NX.INPUT,z)}break;case"onSubmit":if(f instanceof vj){if(Y)f.on(NX.ENTER,Y);if(z)f.off(NX.ENTER,z)}else f[J]=Y;break;case"onSelect":if(f instanceof _U){if(Y)f.on(mj.ITEM_SELECTED,Y);if(z)f.off(mj.ITEM_SELECTED,z)}else if(f instanceof oU){if(Y)f.on(cj.ITEM_SELECTED,Y);if(z)f.off(cj.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:KN,removeNode:UN,getParentNode:sU,getFirstChild(f){sf("Getting first child of node:",rf(f));let J=dj(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=sU(f);if(!J){sf("No parent found for node:",rf(f));return}let Y=dj(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}}));rj=class rj extends FN{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}};Y6=class Y6 extends AN{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()}};z6=class z6 extends rj{yogaNode;slotParent;destroyed=!1;constructor(f,J){super(f);this._visible=!1,this.slotParent=J,this.yogaNode=tU.default.Node.create(),this.yogaNode.setDisplay(tU.Display.None)}getLayoutNode(){return this.yogaNode}updateFromLayout(){}updateLayout(){}onRemove(){}destroy(){if(this.destroyed)return;this.destroyed=!0,super.destroy(),this.slotParent?.destroy()}};yX=class yX extends rj{layoutNode;textNode;destroyed=!1;constructor(f){super(f);this._visible=!1}getSlotChild(f){if(ON(f)||f instanceof gN){if(!this.textNode)this.textNode=new Y6(`slot-text-${this.id}`,this);return this.textNode}if(!this.layoutNode)this.layoutNode=new z6(`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()}};bX=class bX extends zN{_ctx;constructor(f,J){super(J);this._ctx=f}};WQ=class WQ extends bX{constructor(f,J){super(null,f);if(J==="b"||J==="strong")this.attributes=(this.attributes||0)|Pj.BOLD;else if(J==="i"||J==="em")this.attributes=(this.attributes||0)|Pj.ITALIC;else if(J==="u")this.attributes=(this.attributes||0)|Pj.UNDERLINE}};ij=class ij extends WQ{constructor(f){super(f,"b")}};lj=class lj extends WQ{constructor(f){super(f,"i")}};G6=class G6 extends WQ{constructor(f){super(f,"u")}};X6=class X6 extends bX{constructor(f,J){super(null,J);this.add()}add(){return super.add(`
|
|
222
|
-
`)}};Z6=class Z6 extends bX{constructor(f,J){let Y={...J,link:{url:J.href}};super(null,Y)}};RN={box:rk,text:GN,input:ok,select:fN,textarea:YN,ascii_font:$k,tab_select:JN,scrollbox:ek,code:pk,diff:_k,line_number:sk,markdown:tk,span:bX,strong:ij,b:ij,em:lj,i:lj,u:G6,br:X6,a:Z6},q6={...RN};CN({time_to_first_draw:NN})});function bN(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 SN(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 W1{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??UG,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)HY("orch-reconnect",Y);f=Math.min(f*2,3000)}}this.reconnecting=!1}async init(){let f=await this.client.request("hello",{protocolVersion:n1,minProtocolVersion:QY}),J=typeof f.protocolVersion==="number"?f.protocolVersion:n1,Y=typeof f.minProtocolVersion==="number"?f.minProtocolVersion:J;if(!ZZ({localVersion:n1,localMin:QY,remoteVersion:J,remoteMin:Y}))throw Error(`kobe daemon is protocol v${J} (min v${Y}); this client is v${n1} (min v${QY}). 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(SX));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()=>I9(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 Zz((Y)=>{return Gf(()=>{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 SX(z.task)}async ensureMainTask(f){let J=await this.client.request("task.ensureMain",{repo:f});return SX(J.task)}async ensureWorktree(f){return(await this.client.request("task.ensureWorktree",{taskId:String(f)})).worktreePath}async forgetProject(f){await this.client.request("project.forget",{repo:f})}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 SX(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(SX)),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=bN(J);if(!Y)return;let z=this.worktreeChangesAcc();if(z&&SN(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 SX(f){return{id:rG(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(()=>{sY();L1();_Y();Wf();WG();I1();D1()});function j6(f){let J=f[GJ];if(!J){if(Object.defineProperty(f,GJ,{value:J=new Proxy(f,uN)}),!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 VQ(f){let J;return f!=null&&typeof f==="object"&&(f[GJ]||!(J=Object.getPrototypeOf(f))||J===Object.prototype||Array.isArray(f))}function TX(f,J=new Set){let Y,z,G,X;if(Y=f!=null&&f[pj])return Y;if(!VQ(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=TX(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=TX(G,J))!==G)f[X]=z}}return f}function KQ(f,J){let Y=f[J];if(!Y)Object.defineProperty(f,J,{value:Y=Object.create(null)});return Y}function uX(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 IN(f,J){let Y=Reflect.getOwnPropertyDescriptor(f,J);if(!Y||Y.get||!Y.configurable||J===GJ||J===RG)return Y;return delete Y.value,delete Y.writable,Y.get=()=>f[GJ][J],Y}function W6(f){mZ()&&uX(KQ(f,RG),B6)()}function TN(f){return W6(f),Reflect.ownKeys(f)}function UQ(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(H6.onStoreNodeUpdate&&H6.onStoreNodeUpdate(f,J,Y,G),Y===void 0){if(delete f[J],f[YY]&&f[YY][J]&&G!==void 0)f[YY][J].$()}else if(f[J]=Y,f[YY]&&f[YY][J]&&G===void 0)f[YY][J].$();let q=KQ(f,RG),Q;if(Q=uX(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=uX(q,"length",X))&&Q.$(f.length)}(Q=q[B6])&&Q.$()}function V6(f,J){let Y=Object.keys(J);for(let z=0;z<Y.length;z+=1){let G=Y[z];if(K6(G))continue;UQ(f,G,J[G])}}function K6(f){return f==="__proto__"||f==="constructor"||f==="prototype"}function EN(f,J){if(typeof J==="function")J=J(f);if(J=TX(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)UQ(f,Y,G)}UQ(f,"length",z)}else V6(f,J)}function IX(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&&K6(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++)IX(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))IX(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)IX(f,[j].concat(J),Y);return}else if(J.length>1){IX(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=TX(X),z===void 0||VQ(G)&&VQ(X)&&!Array.isArray(X))V6(G,X);else UQ(f,z,X)}function uJ(...[f,J]){let Y=TX(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=j6(Y);YV.registerGraph({value:Y,name:J&&J.name});function X(...q){vZ(()=>{z&&q.length===1?EN(Y,q[0]):IX(Y,q)})}return[G,X]}var pj,RG,YY,B6,H6,uN,Uc;var CG=k(()=>{Wf();pj=Symbol("store-raw"),RG=Symbol("store-node"),YY=Symbol("store-has"),B6=Symbol("store-self"),H6={onStoreNodeUpdate:null};uN={get(f,J,Y){if(J===pj)return f;if(J===GJ)return Y;if(J===wZ)return W6(f),Y;let z=KQ(f,RG),G=z[J],X=G?G():f[J];if(J===RG||J===YY||J==="__proto__")return X;if(!G){let q=Object.getOwnPropertyDescriptor(f,J);if(mZ()&&(typeof X!=="function"||f.hasOwnProperty(J))&&!(q&&q.get))X=uX(z,J,X)()}return VQ(X)?j6(X):X},has(f,J){if(J===pj||J===GJ||J===wZ||J===RG||J===YY||J==="__proto__")return!0;return mZ()&&uX(KQ(f,YY),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:TN,getOwnPropertyDescriptor:IN};Uc=Symbol("store-root")});function DQ(f){let J=CJ();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 wN(){return Object.keys(G1.themes)}function EX(f){return Boolean(G1.themes[f])}function sj(f,J){if(!f)return!1;if(!J||typeof J!=="object"||!J.theme)return!1;return Nz("themes",{...G1.themes,[f]:J}),!0}function oj(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 xN,yz,G1,Nz,i0,U6;var xf=k(()=>{h();Wf();CG();_j();Qq();Hq();Bq();jq();Wq();Vq();Kq();xN={claude:oz,conductor:sz,nord:ez,opencode:fG,dracula:tz,tokyonight:YG,"osaka-jade":JG},yz=["primary","success","info"],[G1,Nz]=uJ({themes:{...xN},active:"claude",mode:"dark",transparentBackground:!1,focusAccent:"primary"});({use:i0,provider:U6}=DQ({name:"Theme",init:(f)=>{if(f.mode)Nz("mode",f.mode);if(f.theme&&EX(f.theme))Nz("active",f.theme);let J=z1(),Y=U0(()=>{let G=G1.themes[G1.active];if(G)return oj(G,G1.mode);let X=G1.themes.claude??G1.themes.opencode??Object.values(G1.themes)[0];if(!X)return oj({theme:{background:"#000000",text:"#ffffff"}},G1.mode);return oj(X,G1.mode)}),z=U0(()=>{let G=Y(),X=G[G1.focusAccent]??G.primary,q={...G,focusAccent:X};if(!G1.transparentBackground)return q;let Q=kz.fromInts(0,0,0,0);return{...q,background:Q,backgroundPanel:Q}});return Gf(()=>{J?.setBackgroundColor(z().background)}),{theme:new Proxy({},{get(G,X){let q=z();return q[X]??q.text}}),get selected(){return G1.active},get transparentBackground(){return G1.transparentBackground},get focusAccent(){return G1.focusAccent},mode(){return G1.mode},set(G){if(!EX(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 wN()},has(G){return EX(G)}}}}))});var D6,L6;var M6=k(()=>{D6={cancel:"Cancel",confirm:"Confirm",rename:{defaultTitle:"Rename task",defaultFieldLabel:"title",footerHint:"enter {submitLabel} \xB7 esc cancel",defaultSubmitLabel:"rename"}},L6={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 F6,O6;var A6=k(()=>{F6={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"}},O6={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 g6,R6;var C6=k(()=>{g6={title:"kobe \u2014 keybindings",esc:"esc"},R6={title:"kobe \u2014 \u5FEB\u6377\u952E",esc:"esc"}});var k6,N6;var y6=k(()=>{k6={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)"}},N6={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 b6,S6;var I6=k(()=>{b6={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"}},S6={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 T6,u6;var E6=k(()=>{T6={badge:{newActivity:"\u25CF new"},preview:{diffVsHead:"diff vs HEAD",file:"file",closeHint:"\xB7 q to close",loading:"loading\u2026"}},u6={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 x6,w6;var h6=k(()=>{x6={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"},w6={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 P6,v6;var m6=k(()=>{P6={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)"}},v6={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 c6,n6;var d6=k(()=>{c6={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}"}},n6={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 i6,l6;var a6=k(()=>{i6={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`"}},l6={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 xX(f){return typeof f==="string"&&bz.some((J)=>J.id===f)}var hN,PN,bz,kG,NG="en";var yG=k(()=>{M6();A6();C6();y6();I6();E6();h6();m6();d6();a6();hN={settings:P6,tasks:c6,files:F6,newTask:b6,ops:T6,update:i6,quickTask:x6,help:g6,common:D6,keys:k6},PN={settings:v6,tasks:n6,files:O6,newTask:S6,ops:u6,update:l6,quickTask:w6,help:R6,common:L6,keys:N6},bz=[{id:"en",label:"English"},{id:"zh",label:"\u4E2D\u6587"}],kG={en:hN,zh:PN}});function wX(f){if(kG[f])vN("lang",f)}function ej(){return tj.lang}function $6(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 mN(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=tj.lang,z=$6(kG[Y],f)??$6(kG.en,f)??f;return mN(z,J)}function f8(f,J){let Y=tj.lang,z=(G)=>{return G.keys[f]?.[J]};return z(kG[Y])??z(kG.en)??J}var tj,vN;var X1=k(()=>{CG();yG();yG();[tj,vN]=uJ({lang:NG})});function cN(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 J8(f,J){if(J.defaultPrevented)return!1;let Y=cN(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 dN(){if(Y8)return;let f=z1();if(!f)throw Error("useBindings: no renderer in scope; call inside a component rendered by @opentui/solid.");Y8=f.keyInput,r6=(J)=>{J8(LQ,J)},Y8.on("keypress",r6)}function Uf(f){dN();let J=nN++,Y={config:f,id:J};Gf(()=>{f()}),LQ.push(Y),mf(()=>{let z=LQ.findIndex((G)=>G.id===J);if(z>=0)LQ.splice(z,1)})}var nN=1,LQ,Y8=null,r6=null;var S1=k(()=>{h();Wf();LQ=[]});import{RGBA as p6}from"@opentui/core";function aN(f){let J=TJ(),Y=i0(),{theme:z}=Y,G=z1(),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?lN:iN,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 $N(){let[f,J]=uJ({stack:[],size:"medium"}),Y=z1(),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?.();vZ(()=>{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 o6(f){let J=$N();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(aN,{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 iN,lN,_6;var v1=k(()=>{h();h();h();h();h();h();h();h();Wf();CG();xf();S1();iN=p6.fromInts(0,0,0,128),lN=p6.fromInts(0,0,0,64);_6=CJ()});import{spawnSync as z8}from"child_process";import*as t6 from"fs";function s6(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 e6(f){let J=f.trim();if(!J)return"repo path is required";let Y;try{Y=t6.statSync(J)}catch{return`path does not exist: ${J}`}if(!Y.isDirectory())return`not a directory: ${J}`;try{if(z8("git",["rev-parse","--git-dir"],{cwd:J,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]}).status!==0)return s6(J)}catch{return s6(J)}return null}function hX(f){if(!f)return null;try{let J=z8("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 f4(f){if(!f)return[];try{let J=z8("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 MQ=()=>{};import*as J4 from"fs";import*as FQ from"os";function V1(f){if(f==="~")return FQ.homedir();if(f.startsWith("~/"))return FQ.homedir()+f.slice(1);return f}function G8(f){if(!f)return{base:"",filter:""};let Y=V1(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 X8(f){if(!f)return[];try{let J=J4.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 PX(f,J,Y){let z=J+Y;if(f.startsWith("~")){let G=FQ.homedir();if(z===G)return"~";if(z.startsWith(`${G}/`))return`~${z.slice(G.length)}`}return z}var OQ=()=>{};import{spawn as rN}from"child_process";import*as Sz from"fs";import*as vX from"path";function Y4(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 z4(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 G4(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=V1(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=vX.join(G,Y);if(Sz.existsSync(q))return F("newTask.error.targetExists",{path:q});return null}function X4(f,J){return vX.join(V1(f.trim()),J.trim())}function Z4(f,J){let Y=J.trim();if(!Y)return J;let z=V1(f.trim());if(!z)return J;try{if(!Sz.statSync(z).isDirectory())return J}catch{return J}if(!Sz.existsSync(vX.join(z,Y)))return Y;for(let G=2;G<1000;G++){let X=`${Y}-${G}`;if(!Sz.existsSync(vX.join(z,X)))return X}return Y}function q4(f,J,Y){return new Promise((z)=>{let G="";try{let X=rN("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 Q4=k(()=>{X1();OQ()});function AQ(f){if(f==="existing")return"clone";if(f==="clone")return"adopt";return"existing"}function H4(f){if(f==="existing")return"adopt";if(f==="clone")return"existing";return"clone"}function B4(f,J){let Y=f.trim();if(J.includes(Y))return"saved";if(Y.startsWith("~"))return"browse";if(Y.includes("/"))return"browse";return"saved"}function Z1(f){return f.replace(/[\r\n]+/g,"")}function q8(f,J="existing"){if(f==="confirm")return"tabs";if(f==="tabs")return"engine";if(f==="engine")return Q8(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 Q8(f){if(f==="clone")return"cloneUrl";if(f==="adopt")return"adoptFilter";return"repo"}function j4(f,J){let Y=J.trim();if(!Y)return f;return f.filter((z)=>oX(Y,z.path))}function W4(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 V4(f,J){let Y=J.trim().toLowerCase();if(!Y)return f;return f.filter((z)=>z.toLowerCase().includes(Y))}function K4(f,J){let Y=J.trim().toLowerCase();if(!Y)return f;return f.filter((z)=>z.toLowerCase().includes(Y))}function mX(f,J,Y=pN){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 U4(f,J,Y){let z=J[Y];if(z)return z;return f.trim()||LJ}var pN=8;var H8=k(()=>{nQ();MQ()});import{TextAttributes as _1}from"@opentui/core";function D4(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(hX(V1(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(()=>W4(f.defaultRepo,f.savedRepos)),$=U0(()=>B4(j(),g0())),E=U0(()=>G8(j())),f0=U0(()=>X8(E().base)),I=U0(()=>Z8(f0(),E().filter)),G0=U0(()=>V4(g0(),j())),x=U0(()=>$()==="browse"?I():G0()),[c,Z0]=r(0),V0=U0(()=>mX(x(),c())),[H0,y0]=r(!1),w0=U0(()=>f4(V1(j().trim()))),T0=U0(()=>K4(w0(),L())),[r0,P]=r(0),M0=U0(()=>mX(T0(),r0())),J0=U0(()=>G8(N())),F0=U0(()=>X8(J0().base)),a0=U0(()=>Z8(F0(),J0().filter)),[p0,u0]=r(0),_0=U0(()=>mX(a0(),p0())),[n,q0]=r(!1),[b0,o0]=r(""),[l0,$0]=r(0),[t0,Rf]=r(new Set),[gf]=PZ(()=>z()==="adopt"?V1(j().trim()):null,async(d)=>f.discoverAdoptable?await f.discoverAdoptable(d):[]),o=U0(()=>j4(gf()??[],b0())),e=U0(()=>mX(o().map((d)=>d.path),l0())),B0=U0(()=>{let d=e();return o().slice(d.start,d.start+d.items.length)});Gf(()=>{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)}Gf(()=>{T0(),P(0)}),Gf(()=>{let d=V1(j().trim());if(!d)return;if(M())return;let s=hX(d);if(s)O(s)}),Gf(()=>{x(),Z0(0)}),Gf(()=>{a0(),u0(0)}),Gf(()=>{let d=S(),s=N();if(_())return;let S0=Y4(d);y(Z4(s,S0))});let[P0,K0]=r(null);Gf(()=>{j(),S(),N(),C(),b0(),K0(null)});function E0(){let d=V1(j().trim());if(!d)return;let s=e6(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=z4(S());if(d){K0(d),V("cloneUrl");return}let s=G4(N(),C());if(s){K0(s),V(C().trim()?"cloneParent":"cloneFolder");return}let S0=X4(N(),C());Q0(!0),D0(F("newTask.clone.progressInto",{target:S0}));let N0=await q4(S().trim(),S0,(tf)=>{D0(tf)});if(Q0(!1),!N0.ok){K0(F("newTask.error.cloneFailed",{error:N0.error})),V("cloneUrl");return}let q1=t().trim()||LJ,K1=V1(N().trim());f.onSubmit({repo:N0.path,baseRef:q1,vendor:Q(),cloned:{parentDir:K1}}),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:V1(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(Q8(d)),K0(null)}function Yf(d){if(T())return;let s=d===1?AQ(z()):H4(z());if(s===z())return;G(s),K0(null),V("tabs")}function n0(d){H((s)=>d===1?qY(X(),s):dQ(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(PX(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(PX(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(PX(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(PX(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)=>q8(d,z()))},{key:"ctrl+]",cmd:()=>Jf(AQ(z()))},{key:"ctrl+[",cmd:()=>Jf(AQ(z()))},{key:"ctrl+e",cmd:()=>H((d)=>qY(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)=>q8(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,Of=(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"),q1=W("box"),K1=W("text"),tf=W("box"),m1=W("box"),xJ=W("text"),F1=W("box"),wJ=W("text"),XY=W("text");return D(d,s),D(d,N0),D(d,F1),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,q1),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"),ZY=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)),ZY!==O0.n&&(O0.n=Z(v0,"attributes",ZY,O0.n)),O0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),l})()},q1),D(q1,K1),D(q1,tf),Z(q1,"gap",0),K(K1,()=>F("newTask.field.engine")),D(tf,m1),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})()}}),m1),Z(m1,"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(Z1(w))}),Z(l,"onSubmit",()=>{if(!j().trim())return;yf()}),u((w)=>{var m0=Bf("repo"),v0=Of("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,ZY=m0()?_1.BOLD:void 0;return s1!==Q1.e&&(Q1.e=Z(Df,"fg",s1,Q1.e)),ZY!==Q1.t&&(Q1.t=Z(Df,"attributes",ZY,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(Z1(w))}),Z(l,"onSubmit",()=>{O(U4(L(),T0(),r0())),R(!0),E0()}),u((w)=>{var m0=Bf("baseRef"),v0=Of("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(Z1(w))),Z(l,"onSubmit",()=>{if(!S().trim())return;V("cloneParent")}),u((w)=>{var m0=Bf("cloneUrl"),v0=Of("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(Z1(w))}),Z(l,"onSubmit",()=>wf()),u((w)=>{var m0=Bf("cloneParent"),v0=Of("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(Z1(w))}),Z(l,"onSubmit",()=>V("cloneBaseRef")),u((w)=>{var m0=Bf("cloneFolder"),v0=Of("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(Z1(w))),Z(l,"onSubmit",()=>void W0()),u((w)=>{var m0=Bf("cloneBaseRef"),v0=Of("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(Z1(w))),Z(l,"onSubmit",()=>A()),u((w)=>{var m0=Bf("adoptFilter"),v0=Of("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:V1(j().trim())||F("newTask.adopt.repoNone")})),u((l)=>Z(i,"fg",Y.textMuted,l)),m})(),b(X0,{get when(){return gf.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(()=>!gf.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(()=>(gf()??[]).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(F1,wJ),D(F1,XY),Z(F1,"flexDirection","row"),Z(F1,"justifyContent","space-between"),Z(F1,"alignItems","center"),Z(F1,"paddingTop",1),Z(F1,"paddingBottom",1),K(wJ,()=>F("newTask.hint.legend")),Z(XY,"onMouseUp",()=>R0()),K(XY,(()=>{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=Of("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(K1,"fg",w,m.a)),m0!==m.o&&(m.o=Z(K1,"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(XY,"fg",c0,m.s)),qf!==m.h&&(m.h=Z(XY,"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 L4=k(()=>{h();h();h();h();h();h();h();h();X1();U1();Wf();xf();MQ();S1();OQ();v1();Q4();H8()});function _N(f,J,Y,z){return new Promise((G)=>{f.replace(()=>b(D4,{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 gQ;var bG=k(()=>{h();L4();H8();gQ={show:_N}});function M4(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 F4}from"@opentui/core";function oN(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=RQ.indexOf(z());G(RQ[(R+M+RQ.length)%RQ.length]??"prompt")}function U(M){let R=f.engines;if(R.length===0)return;if(M>0){H((a)=>qY(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:M4(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(Z1(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?F4.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(Z1(p))),Z(Y0,"onSubmit",()=>L()),D(T,Q0),Z(T,"paddingBottom",1),K(Q0,()=>F("quickTask.legend")),u((p)=>{var D0=F4.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 sN(f,J){return new Promise((Y)=>{f.replace(()=>b(oN,J6(J,{onSubmit:(z)=>Y(z),onCancel:()=>Y(void 0)})),()=>Y(void 0)),f.setSize("medium")})}var RQ,O4;var A4=k(()=>{h();h();h();h();h();h();h();Wf();U1();xf();X1();S1();v1();bG();RQ=["prompt","engine","branch"];O4={show:sN}});async function g4(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 W1(G,{...f.orchestratorOptions,channels:f.channels}),await z.init(),z}catch(G){return HY(J,G),z?.dispose(),null}}var R4=k(()=>{sY();L1();PY()});function C4(f){let[J,Y]=r(f.initial??"sidebar"),[z,G]=r(0),X=z1();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=(CQ.indexOf(J())+j+CQ.length)%CQ.length;q(CQ[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(tN.Provider,{value:V,get children(){return f.children}})}var CQ,tN;var k4=k(()=>{h();h();Wf();CQ=["sidebar","workspace","files","terminal"],tN=CJ(null)});function N4(){for(let f of vY){let J=eN.get(f.id);if(!J)continue;let Y=f;Y.keys=[...J.keys],Y.hint=J.hint?{...J.hint}:void 0}}function y4(){fy((f)=>f+1)}function j8(f){return Jy.get(f)}function Yy(f){return j8(f)?.keys??[]}function mY(f){let J=[];for(let Y in f){let z=f[Y];if(!z)continue;let G=Yy(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,eN,B8,fy,Jy;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"}}],eN=new Map(vY.map((f)=>[f.id,{keys:[...f.keys],hint:f.hint?{...f.hint}:void 0}]));[B8,fy]=r(0);Jy=new Map(vY.map((f)=>[f.id,f]))});function kQ(){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:vB});J.push(...Y.warnings);let z=Y.entries.filter((Q)=>Q.id.startsWith("tmux.")),G=Y.entries.filter((Q)=>!Q.id.startsWith("tmux.")),X=u7(vY,G);J.push(...X.warnings);let q=[...X.applied];if(z.length>0){let Q=PB(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:kY});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?`${XG(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 b4(){return cY??kQ()}function S4(){cY=null,T7(),h7(),N4();let f=kQ();return y4(),f}var cY=null;var W8=k(()=>{wB();gq();Oq();SG()});var zy=250,IG,I4;var cX=k(()=>{CG();pY();_j();({use:IG,provider:I4}=DQ({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")},zy)}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{A9({})}catch(Q){console.error("[kobe] kv clear write failed:",Q)}}};return q}}))});var NQ="../pulse-n3cq1btw.wav";var T4=()=>{};import{existsSync as Xy,mkdirSync as Zy}from"fs";import{tmpdir as qy}from"os";import{basename as Qy,isAbsolute as Hy,join as V8,resolve as By}from"path";function Wy(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 Vy(){if(yQ!==void 0)return yQ;let J=(process.env.PATH??"").split(":").filter(Boolean);return yQ=jy.find((Y)=>J.some((z)=>Xy(V8(z,Y))))??null,yQ}async function Ky(){return x4??=(async()=>{Zy(E4,{recursive:!0});let f=V8(E4,Qy(u4)),J=Bun.file(f);if(await J.exists())return f;return await Bun.write(J,Bun.file(u4)),f})(),x4}function w4(f=0.4){let J=Vy();if(!J)return;Ky().then((Y)=>{try{Bun.spawn(Wy(J,Y,f),{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).unref?.()}catch{}}).catch(()=>{return})}var u4,E4,jy,yQ,x4;var h4=k(()=>{T4();u4=Hy(NQ)?NQ:By(import.meta.dir,NQ),E4=V8(qy(),"kobe-sfx"),jy=["ffplay","mpv","mpg123","mpg321","mplayer","afplay","play","omxplayer","aplay","cmdmp3","cvlc","powershell.exe"]});function P4(f,J){return`${f}:${J}`}function m4(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=P4(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{}w4()}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),Uy)}}function H(j){z((U)=>U.filter((L)=>L.id!==j))}function B(j,U){X((L)=>{let O=P4(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(v4.Provider,{value:V,get children(){return f.children}})}function bQ(){let f=u1(v4);if(!f)throw Error("useNotifications must be used within a NotificationsProvider");return f}var Uy=4500,v4;var SQ=k(()=>{h();Wf();h4();cX();v4=CJ()});function K8(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=Ly(J.focusAccent);if(Y&&Y!==f.focusAccent())f.setFocusAccent(Y)}}function Ly(f){if(f===null)return"primary";return Dy.includes(f)?f:null}var Dy;var c4=k(()=>{Dy=["primary","success","info"]});import{readFileSync as My}from"fs";function n4(f){try{let J=JSON.parse(My(c1(),"utf8")),Y=typeof J.activeTheme==="string"&&EX(J.activeTheme)?J.activeTheme:f,z=J.transparentBackground===!0,G=typeof J.focusAccent==="string"&&yz.includes(J.focusAccent)?J.focusAccent:null,X=xX(J[IQ])?J[IQ]:NG;return{theme:Y,transparent:z,focusAccent:G,locale:X}}catch{return{theme:f,transparent:!1,focusAccent:null,locale:NG}}}var IQ="locale";var U8=k(()=>{lf();xf();yG()});function Oy(f){if(f)HZ(f);kQ();for(let{name:J,theme:Y}of KX())sj(J,Y)}function Ay(f){let J={backgroundColor:"transparent",externalOutputMode:"passthrough",exitOnCtrlC:!1,screenMode:"alternate-screen",useKittyKeyboard:{}};return f?{...J,onDestroy:f}:J}function gy(f){let J=()=>f.children,Y=()=>f.notifications?b(m4,{get children(){return J()}}):J(),z=()=>b(o6,{get children(){return Y()}}),G=()=>f.focus?b(C4,{initial:"sidebar",get children(){return z()}}):z(),X=()=>f.kv?b(I4,{get children(){return G()}}):G();return b(U6,{mode:"dark",get theme(){return f.theme},get children(){return X()}})}function Ry(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 KX())sj(Q,H)},transparentBackground:()=>J.transparentBackground,setTransparentBackground:(Q)=>J.setTransparentBackground(Q),focusAccent:()=>J.focusAccent,setFocusAccent:(Q)=>J.setFocusAccent(Q)};K8(Y,{theme:f.boot.theme,transparentBackground:f.boot.transparent,focusAccent:f.boot.focusAccent}),wX(f.boot.locale);let[z,G]=r(null),X=!1;J1(()=>{(async()=>{let Q=await g4({logTag:"ui-prefs",channels:["ui-prefs","keybindings"]});if(!Q)return;if(X){Q.dispose();return}G(Q)})()}),Gf(()=>{let Q=z()?.uiPrefsSignal()();if(!Q)return;if(K8(Y,Q),xX(Q.locale))wX(Q.locale)});let q=null;return Gf(()=>{let Q=z()?.keybindingsRevSignal()();if(Q==null)return;if(q===null||Q===q){q=Q;return}q=Q,S4()}),mf(()=>{X=!0,z()?.dispose()}),null}async function M1(f){Oy(f.logContext);let J=n4(Fy),Y=await f.setup(J),z=f.providers?.kv??!0,G=f.providers?.focus??!0,X=f.providers?.notifications??!1;await Q6(()=>b(gy,{get theme(){return J.theme},kv:z,focus:G,notifications:X,get children(){return[b(Ry,{boot:J}),I0(()=>Y.root())]}}),Ay(Y.onDestroy))}var Fy="claude";var nY=k(()=>{h();h();h();sY();Wf();R4();k4();W8();cX();SQ();xf();Nq();X1();v1();c4();U8()});async function D8(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(() => (Y1(),r1)),{resolveEngineLaunchInit:H}=await Promise.resolve().then(() => (zG(),xB)),B=H(Y,q,{kind:G.includeInitPrompt?"repo-init":"none"});if(!await Q({name:X,cwd:q,command:b1(z),taskId:J.id,vendor:z,repo:Y,launchInit:B}))throw Error(`failed to start tmux session for ${J.id}`);return!1}async function TQ(f,J,Y,z,G={}){await D8(f,J,Y,z,G),await f.setActiveTask(J.id).catch(()=>{});let{prepareWindowForSwitch:X}=await Promise.resolve().then(() => (Y1(),r1));await X(Lf(J.id)),await h0(["switch-client","-t",`=${Lf(J.id)}`])}var L8=k(()=>{x1();Tf()});var d4={};jf(d4,{startNewTaskHost:()=>Cy,NewTaskPage:()=>uQ});function uQ(f){let{theme:J}=i0(),Y=vf();J1(()=>{z()});async function z(){let G=O1(),X=f.defaultRepo||G[0]||process.cwd(),q=kf("lastSelectedVendor")??Sf,Q=await iJ(),H=f.orchestrator,B=await gQ.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 TQ(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 Cy(f){await M1({setup:async()=>{let J=null;try{let Y=await KJ(),z=new W1(Y);await z.init(),J=z}catch(Y){console.error("[kobe new-task] daemon unavailable; cannot create task:",Y)}return{root:()=>b(uQ,{get defaultRepo(){return f.defaultRepo},orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var M8=k(()=>{h();h();h();h();L1();Wf();PY();tY();Af();I1();bG();xf();nY();L8();v1()});function EQ(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 i4(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 ky(f,J){let Y=J==="archived";return f.filter((z)=>z.archived===Y)}function F8(f,J,Y,z="default",G){let X=ky(f,J),q=Y?.trim()??"",Q=G?o1(G):null,H=q?X.filter((M)=>i4(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(l4),j.sort(l4);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 l4(f,J){let Y=a4(J)-a4(f);if(Y!==0)return Y;return String(J.id).localeCompare(String(f.id))}function a4(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 Ny(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 $4(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:Ny(X.repo,G),count:X.count})).sort((X,q)=>X.label.localeCompare(q.label))}function r4(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 O8(f){return f.map((J)=>J.task.id)}function p4(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 yy(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 EQ(f,J,(Y)=>Y.task.id,(Y,z)=>Y.flatIndex===z.flatIndex&&yy(Y.task,z.task),{samePosition:!0})}var xQ=()=>{};var o4={};jf(o4,{startQuickTaskHost:()=>Ty});async function by(f,J){let Y,z;if(J){let j=await N1(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)??O1()[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=hX(V1(G))??LJ,V=q.length>0?q:[H];return{ctx:{repo:G,vendor:H,baseRef:B,engines:V},fallbackRepo:X}}async function Sy(f,J,Y,z,G){let X=await D8(f,J,Y,z),q=Lf(J.id),{pane:Q}=await WX(q,!X);if(Q)await VX(Q,G)}function Iy(f){let{theme:J}=i0(),Y=vf();J1(()=>{z()});async function z(){let G=f.ctx,X=await O4.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 Sy(q,Q,G.repo,X.vendor,X.prompt),await TQ(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 Ty(f){await M1({setup:async()=>{let J=null;try{let G=await KJ(),X=new W1(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 by(J,f.session);return{root:()=>Y?b(Iy,{ctx:Y,orchestrator:J}):b(uQ,{defaultRepo:z,orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var s4=k(()=>{h();h();h();h();L1();Wf();PY();tY();x1();Af();Tf();Rq();I1();A4();xf();MQ();nY();OQ();L8();M8();xQ();v1()});function hQ(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 wQ(f,J){if(f.includes("/"))return f.split("/").map((G)=>wQ(G,J)).join("/");let Y=f.toLowerCase();if(Y==="tab")return"tab";let z=Ey[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):wQ(Q,!0)}`}let G=Y.split("+");if(G.length===1)return wQ(G[0]??"",!1);let X=G[G.length-1]??"";return`${G.slice(0,-1).map((Q)=>uy[Q.toLowerCase().trim()]??Q).join("")} ${wQ(X,!0)}`}var uy,Ey;var A8=k(()=>{uy={ctrl:"\u2303",control:"\u2303",alt:"\u2325",opt:"\u2325",option:"\u2325",shift:"\u21E7",cmd:"\u2318",command:"\u2318",meta:"\u2318",super:"\u2318"},Ey={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 t4}from"@opentui/core";function xy(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=()=>xy(vY),G=()=>f.onClose?f.onClose():J.clear(),[X,q]=r("\u2303B");return J1(()=>{d0(["show-options","-g","prefix"]).then(({code:Q,stdout:H})=>{if(Q!==0)return;let B=hQ(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,()=>f8("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,()=>f8("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=t4.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=t4.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 g8=k(()=>{h();h();h();h();h();h();h();Wf();Tf();SG();xf();X1();A8();S1();v1();uG.show=(f)=>{f.replace(()=>b(uG,{}))}});import{TextAttributes as wy}from"@opentui/core";function e4(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(Z1(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=wy.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 fD=k(()=>{h();h();h();h();h();h();h();X1();Wf();xf();v1();bG()});function hy(f,J,Y={}){return new Promise((z)=>{f.replace(()=>b(e4,{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 zY;var R8=k(()=>{h();fD();zY={show:hy}});import{TextAttributes as Py}from"@opentui/core";function vy(f){if(!f)return f;return f.charAt(0).toUpperCase()+f.slice(1)}function GY(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,()=>vy(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=Py.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 C8=k(()=>{h();h();h();h();h();h();h();X1();Wf();CG();xf();S1();v1();GY.show=(f,J,Y,z,G,X)=>{return new Promise((q)=>{f.replace(()=>b(GY,{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 my}from"fs";import{join as cy}from"path";function JD(f){return f instanceof W1}function YD(f,J){try{f?.destroy()}catch(Y){console.error(`kobe: renderer.destroy() failed during ${J}:`,Y)}}async function k8(f,J,Y){if(await GY.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{my(cy(OJ(),".kobe","tasks.json"))}catch(G){if(G.code!=="ENOENT")console.error("kobe: failed to delete tasks.json during reset:",G)}YD(Y,"reset"),process.stderr.write(`kobe: UI state reset. Relaunch kobe to start fresh.
|
|
224
|
-
`),process.exit(0)}async function
|
|
225
|
-
`),process.exit(0)}var zD=k(()=>{PY();lf();C8()});function ny(f){return`theme:${f}`}function y8(f){return`language:${f}`}function b8(f){return`accent:${f}`}function dy(f){return`engine:${f}`}function nX(f){return`surface:${f}`}function S8(f){return[...f.themeNames.map((J)=>({id:ny(J),kind:"theme",name:J})),...bz.map((J)=>({id:y8(J.id),kind:"language",locale:J.id})),{id:"transparent",kind:"transparent"},...f.focusAccentSlots.map((J)=>({id:b8(J),kind:"focusAccent",slot:J})),{id:"toast",kind:"toast"},{id:"sound",kind:"sound"},{id:"zen-keep-tasks",kind:"zenKeepTasks"},{id:nX("chattab"),kind:"surface",surface:"chattab"},{id:nX("taskpanel"),kind:"surface",surface:"taskpanel"},{id:"editor-kind",kind:"editorKind"},{id:"editor-custom",kind:"editorCustom"}]}function iy(f){return[...f.map((J)=>({id:dy(J),kind:"engine",vendor:J})),{id:"add-engine",kind:"engineAdd"}]}function ly(){return[{id:"feedback-title",kind:"feedbackTitle"},{id:"feedback-body",kind:"feedbackBody"},{id:"feedback-send",kind:"feedbackSend"}]}function dX(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 GD(f,J){switch(f){case"general":return S8(J);case"engines":return iy(J.engineList);case"accounts":case"keys":return[];case"feedback":return ly();case"dev":return dX(J.hasDaemon)}}function iX(f,J){return f.findIndex((Y)=>Y.id===J)}function PQ(f,J){return f[J]}var Iz;var I8=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 XD(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=()=>S8({themeNames:f.themeNames(),focusAccentSlots:yz}),G=(C)=>iX(z(),C),X=()=>G("transparent"),q=()=>G("toast"),Q=()=>G("sound"),H=()=>G("zen-keep-tasks"),B=()=>G(nX("chattab")),V=()=>G(nX("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"),gf=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(y8(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(b8(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,gf),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(gf,"wrapMode","word"),K(gf,()=>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,Of=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,q1=M()?Y.primary:void 0,K1=M()?Y.selectedListItemText:f.soundEnabled()?Y.accent:Y.textMuted,tf=ff.BOLD,m1=Y.text,xJ=ff.BOLD,F1=Y.textMuted,wJ=R()?Y.primary:void 0,XY=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,ZY=Y.textMuted,f9=N()?Y.primary:void 0,J9=N()?Y.selectedListItemText:Y.accent,Y9=ff.BOLD,z9=g()?Y.primary:void 0,G9=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)),Of!==A.f&&(A.f=Z(x,"fg",Of,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)),q1!==A.A&&(A.A=Z(y0,"backgroundColor",q1,A.A)),K1!==A.O&&(A.O=Z(w0,"fg",K1,A.O)),tf!==A.I&&(A.I=Z(w0,"attributes",tf,A.I)),m1!==A.S&&(A.S=Z(P,"fg",m1,A.S)),xJ!==A.W&&(A.W=Z(P,"attributes",xJ,A.W)),F1!==A.C&&(A.C=Z(M0,"fg",F1,A.C)),wJ!==A.B&&(A.B=Z(J0,"backgroundColor",wJ,A.B)),XY!==A.v&&(A.v=Z(F0,"fg",XY,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)),ZY!==A.L&&(A.L=Z(gf,"fg",ZY,A.L)),f9!==A.N&&(A.N=Z(o,"backgroundColor",f9,A.N)),J9!==A.G&&(A.G=Z(e,"fg",J9,A.G)),Y9!==A.U&&(A.U=Z(e,"attributes",Y9,A.U)),z9!==A.K&&(A.K=Z(B0,"backgroundColor",z9,A.K)),G9!==A.V&&(A.V=Z(C0,"fg",G9,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 qD(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 QD(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 HD(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(Z1(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(Z1(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 BD(f){let{theme:J}=i0(),Y=()=>f.level()==="body"&&f.bodyRow()===0,z=()=>f.level()==="body"&&f.bodyRow()===1,G=()=>iX(dX(f.hasDaemon),"remote-projects"),X=()=>f.level()==="body"&&f.bodyRow()===G(),q=()=>iX(dX(f.hasDaemon),"auto-status"),Q=()=>f.level()==="body"&&f.bodyRow()===q(),H=()=>iX(dX(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 jD(){let{theme:f}=i0(),J=b4(),Y=Object.keys(hB).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 WD=k(()=>{h();h();h();h();h();h();h();h();Wf();W8();xf();X1();yG();Oq();bG();I8()});import{TextAttributes as ay}from"@opentui/core";function $y(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=z1(),{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=JD(f.orchestrator),[y,_]=r(null),[z0,t]=r(null),[Y0,T]=r(null),Q0=!1;Gf(()=>{if(Q()!=="accounts"||Q0)return;Q0=!0,LZ().then(_),MZ().then(t),FZ().then(T)});function p(){return GD(Q(),{themeNames:N(),focusAccentSlots:yz,engineList:u0(),hasDaemon:C})}function D0(){return p().length}function g0(){return Lz(f.kv.get(oJ,Dz))}function $(v){if(Y.selected===v)return;if(!Y.set(v))return;f.kv.set("activeTheme",v),f.onVisualPrefsChange?.()}function E(){return ej()}function f0(v){if(ej()===v)return;wX(v),f.kv.set(IQ,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(oJ,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(BJ(v),"");return typeof A0==="string"?A0.trim():""}function n(v){return _0(v)||HX(v).join(" ")}function q0(v){return H1(v)&&_0(v).length===0&&!o0(v)}function b0(v){let A0=f.kv.get(jJ(v),"");return typeof A0==="string"?A0.trim():""}function o0(v){return b0(v).length>0}function l0(v){return b0(v)||SB[v]||v}let[$0,t0]=r(kf("lastSelectedVendor")??Sf);function Rf(v){return $0()===v}function gf(v){af("lastSelectedVendor",v),f.kv.set("lastSelectedVendor",v),t0(v)}async function o(v){let A0=await zY.show(J,n(v),{dialogTitle:`${l0(v)} launch command`,fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(A0===void 0)return;f.kv.set(BJ(v),A0.trim())}async function e(v){let A0=await zY.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(jJ(v),A0.trim())}function B0(v){if(f.kv.set(BJ(v),""),f.kv.set(jJ(v),""),!H1(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 zY.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||H1(A0)||p0().includes(A0))return;let Bf=await zY.show(J,"",{dialogTitle:`Add engine \xB7 ${A0}`,fieldLabel:"command",submitLabel:"next",placeholder:"e.g. aider --model sonnet"});if(Bf===void 0)return;let Of=await zY.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(BJ(A0),Bf.trim());let Qf=Of?.trim()??"";f.kv.set(jJ(A0),Qf&&Qf!==A0?Qf:$y(A0))}function A(){if(Q()!=="engines"||X()!=="body")return null;let v=PQ(p(),j());return v?.kind==="engine"?v.vendor:null}function P0(){return pz(f.kv.get(_J,Xq))}function K0(){let v=Uz.indexOf(P0()),A0=Uz[(v+1)%Uz.length];if(A0)f.kv.set(_J,A0)}function E0(){let v=f.kv.get(RY,"");return typeof v==="string"?v:""}async function W0(){let v=await zY.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(RY,A0),A0)f.kv.set(_J,"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 Of=(B()+v+Iz.length)%Iz.length;V(Of);let Qf=Iz[Of];if(Qf)H(Qf.id),U(0);return}let A0=D0();if(A0===0)return;let Bf=(j()+v+A0)%A0;if(U(Bf),PQ(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 k8(J,f.kv,z),devRestartDaemon:()=>void N8(J,f.orchestrator,z),devRemoteProjects:()=>P(),devAutoStatus:()=>J0(),devDispatcher:()=>a0()};function wf(){let v=PQ(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)gf(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"),Of=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,Of),Z(A0,"flexDirection","row"),Z(A0,"justifyContent","space-between"),K(Bf,()=>F("settings.title")),Z(Of,"onMouseUp",()=>f.onClose()),K(Of,()=>F("settings.esc")),D(Qf,d),Z(Qf,"flexDirection","row"),Z(Qf,"gap",2),K(Qf,b(XD,{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(qD,{level:X,bodyRow:j,setLevel:q,setBodyRow:U,get vendors(){return u0()},isCustom:(N0)=>!H1(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(QD,{claudeStatus:y,codexStatus:z0,copilotStatus:Y0})}}),null),K(d,b(X0,{get when(){return Q()==="keys"},get children(){return b(jD,{})}}),null),K(d,b(X0,{get when(){return Q()==="feedback"},get children(){return b(HD,{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(BD,{level:X,bodyRow:j,setLevel:q,setBodyRow:U,hasDaemon:C,confirmReset:()=>void k8(J,f.kv,z),confirmRestartDaemon:()=>void N8(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 q1=ay.BOLD,K1=G.text,tf=G.textMuted,m1=G.textMuted;return q1!==N0.e&&(N0.e=Z(Bf,"attributes",q1,N0.e)),K1!==N0.t&&(N0.t=Z(Bf,"fg",K1,N0.t)),tf!==N0.a&&(N0.a=Z(Of,"fg",tf,N0.a)),m1!==N0.o&&(N0.o=Z(S0,"fg",m1,N0.o)),N0},{e:void 0,t:void 0,a:void 0,o:void 0}),v})()}var T8=k(()=>{h();h();h();h();h();h();h();h();Wf();tY();x1();YQ();XX();Yq();Af();nB();I1();U1();xf();X1();Zq();S1();U8();v1();R8();zD();I8();WD();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 ry}from"@opentui/core";function KD(){let{theme:f}=i0(),J=TJ(),Y=bQ(),z=()=>Y.toasts().slice(-VD),G=()=>Math.max(0,J().width-py-_y),X=()=>Math.max(0,J().height-oy-VD-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=ry.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 VD=4,py=40,_y=2,oy=2;var UD=k(()=>{h();h();h();h();h();h();h();Wf();SQ();xf()});import{TextAttributes as sy}from"@opentui/core";function ty(f,J){let Y=f?`v${f}`:F("update.skew.olderBuild");return F("update.skew.hint",{daemon:Y,clientVersion:J})}function DD(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,()=>ty(f.daemonVersion(),f.clientVersion)),u((B)=>{var{warning:V,warning:j}=J,U=sy.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 LD=k(()=>{h();h();h();h();h();h();Wf();xf();X1()});function MD(f,J){return f.find((Y)=>Y.id!==J&&!Y.archived)}async function ey(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=MD(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 fb(f){let J=MD(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 FD(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 ey({orch:f.orch,tasks:f.tasks(),taskId:J,logger:f.logger,logPrefix:f.logPrefix,updateActiveTask:f.updateActiveTask}))return;await f.reload?.()}async function OD(f,J){if(!f.orch)return;let Y=f.tasks().find((q)=>q.id===J);if(!Y)return;if(Y.kind==="main"){if(!await f.confirm({title:`Remove project "${Y.title}"?`,body:"Forgets it from the projects list. The repo, its branches, worktrees, and any tasks under it stay on disk \u2014 re-add it with `kobe add`.",cancelLabel:"cancel",confirmLabel:"remove"}))return;try{await f.orch.forgetProject(Y.repo)}catch(Q){f.logger.error(`${f.logPrefix} forget project failed:`,Q),f.notifyError?.(`Couldn't remove: ${Q instanceof Error?Q.message:String(Q)}`);return}await f.reload?.();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(aH)){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 fb({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 AD(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 gD(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 RD(f,J){let Y=f.tasks().find((X)=>X.id===J);if(!Y||!f.orch)return;let z=await iJ(),G=qY(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 CD(f){let J=O1(),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 kD=k(()=>{tY();x1();pH();Af();I1();U1();Y1()});import{spawn as Jb}from"child_process";import{existsSync as Yb}from"fs";import{basename as zb,delimiter as Gb,isAbsolute as Xb,join as Zb}from"path";function u8(f,J,Y){if(Xb(f))return Y(f);let z=J.PATH??"";for(let G of z.split(Gb)){if(!G)continue;if(Y(Zb(G,f)))return!0}return!1}function Hb(f){let J=zb(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 ND(f={}){let J=f.env??process.env,Y=f.platform??process.platform,z=f.exists??Yb,G=J.KOBE_OPEN_EDITOR?.trim();if(G)return{id:"env",label:Hb(G),command:G,args:[]};for(let X of qb)if(u8(X.command,J,z))return{id:X.id,label:X.label,command:X.command,args:[]};if(Y==="darwin"&&u8("open",J,z)){for(let X of Qb)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"&&u8("xdg-open",J,z))return{id:"xdg-open",label:"Open",command:"xdg-open",args:[]};return null}function Bb(f,J){return[J.command,[...J.args,f]]}function yD(f,J,Y={}){if(!f)return!1;let z=Y.spawn??Jb,[G,X]=Bb(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 qb,Qb;var bD=k(()=>{qb=[{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"}],Qb=[{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 vQ(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 lX=k(()=>{Wf();QX();QX()});import{stat as jb}from"fs/promises";import{join as Wb}from"path";async function Db(f){try{let J=await jb(Wb(f,".git","HEAD"));return`${J.mtimeMs}:${J.size}`}catch{return null}}async function Lb(f,J,Y=HJ){let z=await Db(f);if(z!==null){let Q=SD.get(f);if(Q&&Q.fingerprint===z)return Q.value}let G="",X=await Y("git",["symbolic-ref","--short","HEAD"],{cwd:f,env:w1(),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:w1(),signal:J})).status===0)G="(detached)";if(z!==null)SD.set(f,{fingerprint:z,value:G});return G}function TD(f){return ID.read(f)}function uD(f){ID.poll(f)}var Vb=2000,Kb=30000,Ub=1500,SD,ID;var ED=k(()=>{CY();lX();SD=new Map;ID=vQ({initial:"",timeoutMs:Vb,slowRetryMs:Kb,minIntervalMs:Ub,run:(f,J)=>Lb(f,J)})});function E8(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 xD(f){let J=E8({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 wD=k(()=>{SG();S1()});function x8(f,J){if(J<=0)return"";if(f.length<=J)return f;return`${f.slice(0,Math.max(0,J-1))}\u2026`}function w8(f,J){return` ${x8(f,Math.max(0,J))}`}function Fb(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 Ob(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 vD(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 Ab(){return F("tasks.subtitle.noTracking")}function gb(){return F("tasks.subtitle.materializing")}function Rb(f){if(f.kind==="main")return!1;return f.vendor!==void 0&&!H1(f.vendor)}function h8(f){let{task:J}=f,Y=J.kind==="main",z=Y?f.mainBranch??"":J.branch,G=Mb[J.status],X=f.activity?.state,q=X!==void 0,Q=Cb(X),H=Ob(X),B=Rb(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?Ab():Fb(J.status),M=V?f.truncateBranch(gb(),f.subtitleBudget):H?f.truncateBranch(H.text,f.subtitleBudget):z.length>0?f.truncateBranch(z,f.subtitleBudget):f.truncateBranch(O,f.subtitleBudget),R=B?hD:Q?.glyph??G.glyph,S=B?hD: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 P8(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 Cb(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 Mb,EG,PD=100,hD="\xB7";var mD=k(()=>{X1();U1();xQ();Mb={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 v8(f){return cD.read(f)}function m8(f){cD.poll(f)}var kb=4000,Nb=60000,yb=1500,bb,cD;var nD=k(()=>{CY();lX();WG();lX();bb={added:0,deleted:0},cD=vQ({initial:bb,equals:IJ,timeoutMs:kb,slowRetryMs:Nb,minIntervalMs:yb,run:async(f,J)=>{let Y=await HJ("git",["status","--porcelain=v1"],{cwd:f,env:w1(),signal:J});if(Y.status!==0)throw Error("git status failed");return jG(Y.stdout)}})});import{TextAttributes as bf}from"@opentui/core";function Sb(f){switch(f){case"active":return F("tasks.view.workspace");case"archived":return F("tasks.view.archives")}}function iD(f,J=Tb){if(f.length<=J)return f;return`${f.slice(0,Math.max(0,J-1))}\u2026`}function ub(f){let J=0;for(let Y of f)J+=(Y.codePointAt(0)??0)>=4352?2:1;return J}function Eb(f,J){if(J<=0||f.length<=J)return f;return`\u2026${f.slice(f.length-Math.max(0,J-1))}`}function lD(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)}Gf(()=>{if(!X())return;let n=z1();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),Ib);mf(()=>clearInterval(S));let[a,N]=r(0),g=setInterval(()=>N((n)=>(n+1)%EG.length),PD);mf(()=>clearInterval(g));let C=()=>f.sortMode?.()??"default",y=U0(()=>$4(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,F8(f.tasks(),z(),X()?Q():"",C(),z0())),[]),p=U0(()=>O8(Q0())),D0=U0(()=>p4(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(()=>O8(F8(f.tasks(),z(),"",C(),z0())).length),I=U0(()=>$().length>0);Gf(()=>{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():dD,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;Gf(()=>{let n=f.width?f.width():dD,q0=J0;if(!q0)return;q0.width=n,q0.flexShrink=1,q0.minHeight=0}),Gf(k1([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)})),Gf(k1(()=>[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)})),Gf(k1(z,()=>{let n=p();r0(n.length>0?0:-1)},{defer:!0})),Gf(k1(z0,(n)=>r0(r4(Q0(),n)),{defer:!0})),Gf(k1([X,Q],()=>{if(!X())return;let n=p();r0(n.length>0?0:-1)}));function a0(n){let q0=z(),b0=aX.findIndex(($0)=>$0.view===q0);if(b0<0)return;let o0=(b0+n+aX.length)%aX.length,l0=aX[o0];if(l0)G(l0.view)}xD({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,gf=bf.BOLD;return Rf!==t0.e&&(t0.e=Z($0,"fg",Rf,t0.e)),gf!==t0.t&&(t0.t=Z($0,"attributes",gf,t0.t)),t0},{e:void 0,t:void 0}),$0}}),null),u(($0)=>{var t0=J.textMuted,Rf=bf.BOLD,gf=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)),gf!==$0.a&&($0.a=Z(l0,"fg",gf,$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=_q(f.worktreeChanges?.(),q0.worktreePath);if(A)return A;if(M(),!q0.archived)m8(q0.worktreePath);return v8(q0.worktreePath)},void 0,{equals:IJ}),Rf=U0(()=>{return M(),uD(q0.repo),TD(q0.repo)}),gf=U0(()=>h8({task:q0,activity:f.engineState?.().get(q0.id),job:f.taskJobs?.().get(q0.id),live:$0(),spinnerFrame:0,subtitleBudget:Z0(),truncateBranch:iD,mainBranch:Rf()})),o=U0(()=>P8(gf(),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,()=>w8(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,Of=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)),Of!==k0.i&&(k0.i=Z(R0,"fg",Of,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"),gf=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:aX,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,()=>Sb(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,gf),hY((o)=>{M0=o},Rf),Z(Rf,"flexGrow",1),Z(Rf,"minHeight",0),Z(Rf,"stickyScroll",!1),Z(Rf,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),Z(gf,"flexShrink",0),Z(gf,"gap",0),Z(gf,"paddingRight",1),K(gf,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=_q(f.worktreeChanges?.(),e.worktreePath);if(Yf)return Yf;if(M(),!e.archived)m8(e.worktreePath);return v8(e.worktreePath)},void 0,{equals:IJ}),E0=U0(()=>h8({task:e,activity:f.engineState?.().get(e.id),job:f.taskJobs?.().get(e.id),live:P0(),spinnerFrame:0,subtitleBudget:Z0(),truncateBranch:iD,mainBranch:""})),W0=U0(()=>P8(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"),Of=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,()=>w8(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,Of),D(Bf,Qf),Z(Bf,"flexDirection","row"),Z(Bf,"gap",0),Z(Of,"wrapMode","none"),K(Of,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 vD(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(),q1=L0(),K1=bf.BOLD,tf=J.text,m1=A()||C0()?bf.BOLD:void 0,xJ=R0(),F1=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)),q1!==s.a&&(s.a=Z(v,"fg",q1,s.a)),K1!==s.o&&(s.o=Z(v,"attributes",K1,s.o)),tf!==s.i&&(s.i=Z(A0,"fg",tf,s.i)),m1!==s.n&&(s.n=Z(A0,"attributes",m1,s.n)),xJ!==s.s&&(s.s=Z(Of,"fg",xJ,s.s)),F1!==s.h&&(s.h=Z(d,"fg",F1,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(gf,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(gf,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(gf,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)=>ub(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()?Eb(L0.text,C0()):x8(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 dD=32,aX,Ib=2000,Tb=16;var aD=k(()=>{h();h();h();h();h();h();h();h();h();X1();h();Wf();xf();xf();ED();xQ();wD();mD();WG();nD();aX=[{view:"active"},{view:"archived"}]});var oD={};jf(oD,{startTasksPane:()=>vb,legendRowCap:()=>_D,legendCap:()=>pD});import{existsSync as $D}from"fs";import{stat as xb}from"fs/promises";import{TextAttributes as mQ}from"@opentui/core";function c8(f){return!!f&&iZ(f)}function rD(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 hb(f){let{theme:J}=i0(),Y=vf(),z=IG(),G=bQ(),[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,WY]).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;Gf(()=>{let P=f.orch?.activeTaskSignal()();if(!P)return;if(!y){if(P!==f.initialTaskId)return;y=!0}q(P)}),Gf(k1(()=>f.orch?.uiPrefsSignal()(),(P)=>{if(P&&P.sortMode!==$f(j))U(P.sortMode);if(P&&P.projectFilter!==$f(O))M(P.projectFilter)})),Gf(()=>{let P=f.orch?.updateSignal()();if(P)a(P)});let _={orch:f.orch,tasks:()=>f.tasks(),confirm:async(P)=>await GY.show(Y,P.title,P.body,P.cancelLabel,P.confirmLabel)===!0,promptText:(P,M0)=>zY.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)=>gQ.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(oJ,Dz))!=="chattab")return!1;let J0=await y1();if(!J0)return!1;return await dq(J0,P),!0},selectTask:(P)=>q(P),enterTask:(P)=>H0(P)};async function z0(){await CD(_)}async function t(){if(Lz(z.get(oJ,Dz))==="chattab"){let J0=await y1();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 y1();if(J0)await HG(J0)}catch(J0){console.error("[kobe tasks] failed to refresh workspace panes:",J0)}}async function Y0(){let P=await y1();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 y1();if(!M0)return;await iq(M0)}async function Q0(P){await FD(_,P)}async function p(P){await OD(_,P)}async function D0(P){await AD(_,P)}async function g0(P){await gD(_,P)}async function $(P){await RD(_,P)}async function E(P){let J0=f.tasks().find((a0)=>a0.id===P)?.worktreePath;if(!J0||!$D(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(rD(a0));return}await f.reload()}if(!J0||!$D(J0))return;let F0=ND();if(!F0){console.error("[kobe tasks] no editor/opener found; set KOBE_OPEN_EDITOR"),Q(F("tasks.toast.noEditor"));return}if(!yD(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 y1();if(!P)return;let M0=await az(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)};Gf(k1(()=>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 y1();if(F0&&F0!==M0)await UX(F0);if(await Hf(M0)){let n=await Bz(M0,"@kobe_worktree")||J0?.worktreePath||"";if(c8(n)){let q0=J0?.repo?sJ(J0.repo,n,{kind:"repo-init"}):void 0;await SY({name:M0,cwd:n,command:b1(J0?.vendor),taskId:P,vendor:J0?.vendor,repo:J0?.repo,launchInit:q0})}await $q(M0),await h0(["switch-client","-t",`=${M0}`]),f.orch?.setActiveTask(P).catch(()=>{});return}let p0=J0?.worktreePath;if(!c8(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(rD(n));return}await f.reload()}if(!c8(p0))return;let u0=J0?.repo?sJ(J0.repo,p0,{kind:"repo-init"}):void 0;if(!await SY({name:M0,cwd:p0,command:b1(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 $q(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(DD,{stale:w0,daemonVersion:T0,clientVersion:s0,width:()=>C().width}),M0),Z(M0,"flexGrow",1),Z(M0,"flexShrink",1),K(M0,b(lD,{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(Pb,{moveMode:B,selectedIsMain:r0,collapsed:G0,onToggleCollapsed:()=>c(!G0())}),null),u((J0)=>Z(P,"backgroundColor",J.background,J0)),P})()}function pD(f){let J=j8(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(pD).filter((Y)=>Y!==null);return J.length>0?J.join("/"):null}function Pb(f){let{theme:J}=i0(),[Y,z]=r("Prefix");J1(()=>{d0(["show-options","-g","prefix"]).then(({code:U,stdout:L})=>{if(U!==0)return;let O=hQ(L);if(O)z(O)})});let G=()=>{B8();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===kY[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=()=>{B8();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()?mQ.DIM:mQ.BOLD,Y0=B(),T=J.textMuted,Q0=M()?mQ.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=mQ.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 vb(f={}){await M1({logContext:"tasks",providers:{notifications:!0},setup:()=>mb(f)})}async function mb(f){let J=new DG({homeDir:OJ()});await J.load();let[Y,z]=r(J.list()),G=null;try{let B=await p1();if(B){let V=new W1(B);await V.init(),G=V}else dJ("tasks-boot","no daemon running \u2014 polling tasks.json (a gui owns daemon lifecycle)")}catch(B){HY("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 xb(J.filePath);B=`${V.mtimeMs}:${V.size}`}catch{}if(B===Q)return;Q=B,await q()})().catch(()=>{})},wb);return{root:()=>[b(hb,{tasks:X,get initialTaskId(){return f.initialTaskId},orch:G,reload:q}),b(KD,{})],onDestroy:()=>{if(H)clearInterval(H);G?.dispose()}}}var wb=1500;var sD=k(()=>{h();h();h();h();h();h();h();h();Tf();zJ();X1();h();sY();L1();Wf();PY();x1();lf();ZJ();OX();zG();Af();gq();D1();g8();bG();R8();T8();UD();LD();SG();cX();SQ();xf();A8();nY();S1();kD();bD();aD();Y1();v1();C8()});var tD={};jf(tD,{startSettingsHost:()=>nb});function cb(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 y1();if(H)await HG(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 nb(){await M1({setup:async()=>{let f=null;try{let J=await p1();if(J){let Y=new W1(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(cb,{orchestrator:f}),onDestroy:()=>{f?.dispose()}}}})}var eD=k(()=>{h();h();h();h();h();h();L1();PY();T8();cX();xf();nY();S1();Y1();v1()});var fL={};jf(fL,{startHelpHost:()=>ib});function db(){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 ib(){await M1({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(db,{})})})}var JL=k(()=>{h();h();h();h();h();g8();xf();nY();S1();v1()});var YL={};jf(YL,{startUpdateHost:()=>ob});import{spawn as lb,spawnSync as ab}from"child_process";import{TextAttributes as xG}from"@opentui/core";function $b(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 lb(Y,z,{stdio:"ignore",detached:!0}).unref(),!0}catch{return!1}}function rb(f){return f.replace(/\r\n/g,`
|
|
259
|
+
`)}var Ly;var G6=N(()=>{UQ();Ly=["install","status","command"]});var lj={};Hf(lj,{runHookSubcommand:()=>yy,readTextWithTimeout:()=>Q6,parseWorktreeAddPath:()=>B6,ensureGlobalKobeHooks:()=>Sy});import{homedir as Fy}from"os";import{join as Z6,resolve as q6}from"path";async function Q6(f,J=Oy){let Y;try{return await Promise.race([f(),new Promise((z)=>{Y=setTimeout(()=>z(""),J)})])}finally{if(Y!==void 0)clearTimeout(Y)}}async function H6(){try{let f=await Q6(()=>Bun.stdin.text());if(!f.trim())return{};let J=JSON.parse(f);return J&&typeof J==="object"&&!Array.isArray(J)?J:{}}catch{return{}}}function Ay(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 Ry(f){return!!f&&typeof f==="object"&&!Array.isArray(f)}function Cy(f){let J=[],Y=/"([^"]*)"|'([^']*)'|(\S+)/g,z;while((z=Y.exec(f))!==null)J.push(z[1]??z[2]??z[3]??"");return J}function B6(f){let J=Cy(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 Ny(){let f=await H6(),J=Ry(f.tool_input)?f.tool_input:{},Y=typeof J.command==="string"?J.command:"";if(!Y.includes("worktree"))return;let z=B6(Y);if(!z)return;let G=typeof f.cwd==="string"&&f.cwd?f.cwd:process.cwd(),X=q6(G,z),q=await o1();if(!q)return;try{await q.request("worktree.reconcile",{cwd:G,worktreePath:X})}finally{q.close()}}async function yy(f){let[J,...Y]=f;if(J==="setup"){await Iy(Y);return}if(J===gy){try{await Ny()}catch{}return}try{if(!J||!KZ(J))return;let z=await H6(),G=Ay(Y,"--task-id"),X=typeof z.cwd==="string"&&z.cwd?z.cwd:process.cwd(),q;for(let H of j6())if(q=H.activityDetailFromPayload(J,z),q)break;let Q=await o1();if(!Q)return;try{await Q.request("engine.reportEvent",{...G?{taskId:G}:{cwd:X},kind:J,...q?{detail:q}:{}})}finally{Q.close()}}catch{}}function by(){return cf.map((f)=>lH(f)).filter((f)=>f.supportsWorktreeSync())}function j6(){return cf.map((f)=>lH(f)).filter((f)=>f.supportsHooks())}function W6(){return Z6(Fy(),".claude","settings.json")}function ky(f){if(!f||f==="off")return;if(f==="global")return W6();if(f.startsWith("repo:"))return Z6(q6(f.slice(5)),".claude","settings.json");return f}async function Sy(){try{for(let f of j6()){let J=f.globalSettingsPath();if(!J)continue;await f.installActivityHooks(J),await f.installWorktreeWatchHook(J)}await V6()}catch{}}async function V6(){let f=by();if(f.length===0)return;let J=bf(X6),Y=new Set([W6()]),z=ky(J);if(z)Y.add(z);for(let G of f)for(let X of Y)await G.removeWorktreeSyncHook(X);if(J!=="off")$f(X6,"off")}async function Iy(f){await V6(),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(`
|
|
260
|
+
`))}var Oy=500,gy="worktree-created",X6="externalWorktreeSync";var aj=N(()=>{L1();aH();UZ();Af();U1()});function U6(f){var J;if(f>=55296&&f<=57343||f>1114111)return 65533;return(J=Ty.get(f))!==null&&J!==void 0?J:f}var $j,Ty,K6;var D6=N(()=>{Ty=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]]),K6=($j=String.fromCodePoint)!==null&&$j!==void 0?$j:(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 L6(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 M6;var F6=N(()=>{M6=L6("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWlsN2E6ZHIAAOA12CjdciJlZW4AOGFjAHkARWRjAHkAXGRwAGYAAOA12FzdYwByAADgNdjA3IALQUJFSGFiY2RlZmdoamxtbm9wcnN0dXYAXhxtHHEcdRx5HN8cBx0dHTwd3B3tHfEdAR4EHh0eLB5FHrwewx7hHgkfPR9LH4ABYXJ0AGQcZxxpHHIA8gBvB/IAxQLhIWlsAKAbKeEhcnIAoA4pZ6BmIgCgiyphAHIAAKBiKWMJjRwAAJAcAACVHAAAAAAAAAAAAACZHJwcAACmHKgcrRwAANIc9SF0ZTph7SJwdHl2AKC0KXIAYQDuAFoG4iFkYbtjZwAAoegnZGyhHKMcAKCRKeUAiwYAoIUqdQBvADuAqwCrQHIAgKOQIWJmaGxwc3QAuhy/HMIcxBzHHMoczhxmoOQhcwAAoB8pcwAAoB0p6wCyGnAAAKCrIWwAAKA5KWkAbQAAoHMpbAAAoKIhAKGrKmFl1hzaHGkAbAAAoBkpc6CtKgDgrSoA/oABYWJyAOUc6RztHHIAcgAAoAwpcgBrAACgcicAAWFr8Rz4HGMAAAFla/Yc9xx7YFtgAAFlc/wc/hwAoIspbAAAAWR1Ax0FHQCgjykAoI0pAAJhZXV5Dh0RHRodHB3yIW9uPmEAAWRpFR0YHWkAbAA8YewAowbiAPccO2QAAmNxcnMkHScdLB05HWEAAKA2KXUAbwDyoBwgqhEAAWR1MB00HeghYXIAoGcpcyJoYXIAAKBLKWgAAKCyIQCiZCJmZ3FzRB1FB5Qdnh10AIACYWhscnQATh1WHWUdbB2NHXIicm93AHSgkCFhAOkAzxxhI3Jwb29uAAABZHVeHWId7yF3bgCgvSFwAACgvCHlJGZ0YXJyb3dzAKDHIWkiZ2h0AIABYWhzAHUdex2DHXIicm93APOglCGdBmEAcgBwAG8AbwBuAPMAzgtxAHUAaQBnAGEAcgByAG8A9wBlGugkcmVldGltZXMAoMsi8aFkIk0HAACaHWwAYQBuAPQAXgcAon0qY2Rnc6YdqR2xHbcdYwAAoKgqbwB0AG+gfypyoIEqAKCDKmXg2iIA/nMAAKCTKoACYWRlZ3MAwB3GHcod1h3ZHXAAcAByAG8A+ACmHG8AdAAAoNYicQAAAWdxzx3SHXQA8gBGB2cAdADyAHQcdADyAFMHaQDtAGMHgAFpbHIA4h3mHeod8yFodACgfClvAG8A8gDKBgDgNdgp3UWgdiIAoJEqYQH1Hf4dcgAAAWR1YB35HWygvCEAoGopbABrAACghCVjAHkAWWQAomoiYWNodAweDx4VHhkecgDyAGsdbwByAG4AZQDyAGAW4SFyZACgaylyAGkAAKD6JQABaW8hHiQe5CFvdEBh9SFzdGGgsCPjIWhlAKCwIwACRWFlczMeNR48HkEeAKBoInAAcKCJKvIhb3gAoIkqcaCHKvGghyo0HmkAbQAAoOYiAARhYm5vcHR3elIeXB5fHoUelh6mHqsetB4AAW5yVh5ZHmcAAKDsJ3IAAKD9IXIA6wCwBmcAgAFsbXIAZh52Hnse5SFmdAABYXKIB2weaQBnAGgAdABhAHIAcgBvAPcAkwfhInBzdG8AoPwnaQBnAGgAdABhAHIAcgBvAPcAmgdwI2Fycm93AAABbHKNHpEeZQBmAPQAxhxpImdodAAAoKwhgAFhZmwAnB6fHqIecgAAoIUpAOA12F3ddQBzAACgLSppIm1lcwAAoDQqYQGvHrMecwB0AACgFyLhAIoOZaHKJbkeRhLuIWdlAKDKJWEAcgBsoCgAdAAAoJMpgAJhY2htdADMHs8e1R7bHt0ecgDyAJ0GbwByAG4AZQDyANYWYQByAGSgyyEAoG0pAKAOIHIAaQAAoL8iAANhY2hpcXTrHu8e1QfzHv0eBh/xIXVvAKA5IHIAAOA12MHcbQDloXIi+h4AAPweAKCNKgCgjyoAAWJ19xwBH28AcqAYIACgGiDyIW9rQmEAhDwAO2NkaGlscXJCBhcfxh0gHyQfKB8sHzEfAAFjaRsfHR8AoKYqcgAAoHkqcgBlAOUAkx3tIWVzAKDJIuEhcnIAoHYpdSJlc3QAAKB7KgABUGk1HzkfYQByAACglillocMlAgdfEnIAAAFkdUIfRx9zImhhcgAAoEop6CFhcgCgZikAAWVuTx9WH3IjdG5lcXEAAOBoIgD+xQBUHwAHRGFjZGVmaGlsbm9wc3VuH3Ifoh+rH68ftx+7H74f5h/uH/MfBwj/HwsgxCFvdACgOiIAAmNscHJ5H30fiR+eH3IAO4CvAK9AAAFldIEfgx8AoEImZaAgJ3MAZQAAoCAnc6CmIXQAbwCAoaYhZGx1AJQfmB+cH28AdwDuAHkDZQBmAPQA6gbwAOkO6yFlcgCgriUAAW95ph+qH+0hbWEAoCkqPGThIXNoAKAUIOElc3VyZWRhbmdsZQCgISJyAADgNdgq3W8AAKAnIYABY2RuAMQfyR/bH3IAbwA7gLUAtUBhoiMi0B8AANMf1x9zAPQAKxFpAHIAAKDwKm8AdAA7gLcAt0B1AHMA4qESIh4TAADjH3WgOCIAoCoqYwHqH+0fcAAAoNsq8gB+GnAAbAB1APMACAgAAWRw9x/7H+UhbHMAoKciZgAA4DXYXt0AAWN0AyAHIHIAAOA12MLc8CFvcwCgPiJsobwDECAVIPQiaW1hcACguCJhAPAAEyAADEdMUlZhYmNkZWZnaGlqbG1vcHJzdHV2dzwgRyBmIG0geSCqILgg2iDeIBEhFSEyIUMhTSFQIZwhnyHSIQAiIyKLIrEivyIUIwABZ3RAIEMgAODZIjgD9uBrItIgBwmAAWVsdABNIF8gYiBmAHQAAAFhclMgWCByInJvdwAAoM0h6SRnaHRhcnJvdwCgziEA4NgiOAP24Goi0iBfCekkZ2h0YXJyb3cAoM8hAAFEZHEgdSDhIXNoAKCvIuEhc2gAoK4igAJiY25wdACCIIYgiSCNIKIgbABhAACgByL1IXRlRGFnAADgICLSIACiSSJFaW9wlSCYIJwgniAA4HAqOANkAADgSyI4A3MASWFyAG8A+AAyCnUAcgBhoG4mbADzoG4mmwjzAa8gAACzIHAAO4CgAKBAbQBwAOXgTiI4AyoJgAJhZW91eQDBIMogzSDWINkg8AHGIAAAyCAAoEMqbwBuAEhh5CFpbEZhbgBnAGSgRyJvAHQAAOBtKjgDcAAAoEIqPWThIXNoAKATIACjYCJBYWRxc3jpIO0g+SD+IAIhDCFyAHIAAKDXIXIAAAFocvIg9SBrAACgJClvoJch9wAGD28AdAAA4FAiOAN1AGkA9gC7CAABZWkGIQohYQByAACgKCntAN8I6SFzdPOgBCLlCHIAAOA12CvdAAJFZXN0/wgcISshLiHxoXEiIiEAABMJ8aFxIgAJAAAnIWwAYQBuAPQAEwlpAO0AGQlyoG8iAKBvIoABQWFwADghOyE/IXIA8gBeIHIAcgAAoK4hYQByAACg8ipzogsiSiEAAAAAxwtkoPwiAKD6ImMAeQBaZIADQUVhZGVzdABcIV8hYiFmIWkhkyGWIXIA8gBXIADgZiI4A3IAcgAAoJohcgAAoCUggKFwImZxcwBwIYQhjiF0AAABYXJ1IXohcgByAG8A9wBlIWkAZwBoAHQAYQByAHIAbwD3AD4h8aFwImAhAACKIWwAYQBuAPQAZwlz4H0qOAMAoG4iaQDtAG0JcqBuImkA5aDqIkUJaQDkADoKAAFwdKMhpyFmAADgNdhf3YCBrAA7aW4AriGvIcchrEBuAIChCSJFZHYAtyG6Ib8hAOD5IjgDbwB0AADg9SI4A+EB1gjEIcYhAKD3IgCg9iJpAHagDCLhAagJzyHRIQCg/iIAoP0igAFhb3IA2CHsIfEhcgCAoSYiYXN0AOAh5SHpIWwAbABlAOwAywhsAADg/SrlIADgAiI4A2wiaW50AACgFCrjoYAi9yEAAPohdQDlAJsJY+CvKjgDZaCAIvEAkwkAAkFhaXQHIgoiFyIeInIA8gBsIHIAcgAAoZshY3cRIhQiAOAzKTgDAOCdITgDZyRodGFycm93AACgmyFyAGkA5aDrIr4JgANjaGltcHF1AC8iPCJHIpwhTSJQIloigKGBImNlcgA2Iv0JOSJ1AOUABgoA4DXYw9zvIXJ0bQKdIQAAAABEImEAcgDhAOEhbQBloEEi8aBEIiYKYQDyAMsIcwB1AAABYnBWIlgi5QDUCeUA3wmAAWJjcABgInMieCKAoYQiRWVzAGci7glqIgDgxSo4A2UAdABl4IIi0iBxAPGgiCJoImMAZaCBIvEA/gmAoYUiRWVzAH8iFgqCIgDgxio4A2UAdABl4IMi0iBxAPGgiSKAIgACZ2lscpIilCKaIpwi7AAMCWwAZABlADuA8QDxQOcAWwlpI2FuZ2xlAAABbHKkIqoi5SFmdGWg6iLxAEUJaSJnaHQAZaDrIvEAvgltoL0DAKEjAGVzuCK8InIAbwAAoBYhcAAAoAcggARESGFkZ2lscnMAziLSItYi2iLeIugi7SICIw8j4SFzaACgrSLhIXJyAKAEKXAAAOBNItIg4SFzaACgrCIAAWV04iLlIgDgZSLSIADgPgDSIG4iZmluAACg3imAAUFldADzIvci+iJyAHIAAKACKQDgZCLSIHLgPADSIGkAZQAA4LQi0iAAAUF0BiMKI3IAcgAAoAMp8iFpZQDgtSLSIGkAbQAA4Dwi0iCAAUFhbgAaIx4jKiNyAHIAAKDWIXIAAAFociMjJiNrAACgIylvoJYh9wD/DuUhYXIAoCcpUxJqFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVCMAAF4jaSN/I4IjjSOeI8AUAAAAAKYjwCMAANoj3yMAAO8jHiQvJD8kRCQAAWNzVyNsFHUAdABlADuA8wDzQAABaXlhI2cjcgBjoJoiO4D0APRAPmSAAmFiaW9zAHEjdCN3I3EBeiNzAOgAdhTsIWFjUWF2AACgOCrvIWxkAKC8KewhaWdTYQABY3KFI4kjaQByAACgvykA4DXYLN1vA5QjAAAAAJYjAACcI24A22JhAHYAZQA7gPIA8kAAoMEpAAFibaEjjAphAHIAAKC1KQACYWNpdKwjryO6I70jcgDyAFkUAAFpcrMjtiNyAACgvinvIXNzAKC7KW4A5QDZCgCgwCmAAWFlaQDFI8gjyyNjAHIATWFnAGEAyWOAAWNkbgDRI9Qj1iPyIW9uv2MAoLYpdQDzAHgBcABmAADgNdhg3YABYWVsAOQj5yPrI3IAAKC3KXIAcAAAoLkpdQDzAHwBAKMoImFkaW9zdvkj/CMPJBMkFiQbJHIA8gBeFIChXSplZm0AAyQJJAwkcgBvoDQhZgAAoDQhO4CqAKpAO4C6ALpA5yFvZgCgtiJyAACgVipsIm9wZQAAoFcqAKBbKoABY2xvACMkJSQrJPIACCRhAHMAaAA7gPgA+EBsAACgmCJpAGwBMyQ4JGQAZQA7gPUA9UBlAHMAYaCXInMAAKA2Km0AbAA7gPYA9kDiIWFyAKA9I+EKXiQAAHokAAB8JJQkAACYJKkkAAAAALUkEQsAAPAkAAAAAAQleiUAAIMlcgCAoSUiYXN0AGUkbyQBCwCBtgA7bGokayS2QGwAZQDsABgDaQJ1JAAAAAB4JG0AAKDzKgCg/Sp5AD9kcgCAAmNpbXB0AIUkiCSLJJkSjyRuAHQAJWBvAGQALmBpAGwAAKAwIOUhbmsAoDEgcgAA4DXYLd2AAWltbwCdJKAkpCR2oMYD1WNtAGEA9AD+B24AZQAAoA4m9KHAA64kAAC0JGMjaGZvcmsAAKDUItZjAAFhdbgkxCRuAAABY2u9JMIkawBooA8hAKAOIfYAaRpzAACkKwBhYmNkZW1zdNMkIRPXJNsk4STjJOck6yTjIWlyAKAjKmkAcgAAoCIqAAFvdYsW3yQAoCUqAKByKm4AO4CxALFAaQBtAACgJip3AG8AAKAnKoABaXB1APUk+iT+JO4idGludACgFSpmAADgNdhh3W4AZAA7gKMAo0CApHoiRWFjZWlub3N1ABMlFSUYJRslTCVRJVklSSV1JQCgsypwAACgtyp1AOUAPwtjoK8qgKJ6ImFjZW5zACclLSU0JTYlSSVwAHAAcgBvAPgAFyV1AHIAbAB5AGUA8QA/C/EAOAuAAWFlcwA8JUElRSXwInByb3gAoLkqcQBxAACgtSppAG0AAKDoImkA7QBEC20AZQDzoDIgIguAAUVhcwBDJVclRSXwAEAlgAFkZnAATwtfJXElgAFhbHMAZSVpJW0l7CFhcgCgLiPpIW5lAKASI/UhcmYAoBMjdKAdIu8AWQvyIWVsAKCwIgABY2l9JYElcgAA4DXYxdzIY24iY3NwAACgCCAAA2Zpb3BzdZElKxuVJZolnyWkJXIAAOA12C7dcABmAADgNdhi3XIiaW1lAACgVyBjAHIAAOA12MbcgAFhZW8AqiW6JcAldAAAAWVpryW2JXIAbgBpAG8AbgDzABkFbgB0AACgFipzAHQAZaA/APEACRj0AG0LgApBQkhhYmNkZWZoaWxtbm9wcnN0dXgA4yXyJfYl+iVpJpAmpia9JtUm5ib4JlonaCdxJ3UnnietJ7EnyCfiJ+cngAFhcnQA6SXsJe4lcgDyAJkM8gD6AuEhaWwAoBwpYQByAPIA3BVhAHIAAKBkKYADY2RlbnFydAAGJhAmEyYYJiYmKyZaJgABZXUKJg0mAOA9IjEDdABlAFVhaQDjACAN7SJwdHl2AKCzKWcAgKHpJ2RlbAAgJiImJCYAoJIpAKClKeUA9wt1AG8AO4C7ALtAcgAApZIhYWJjZmhscHN0dz0mQCZFJkcmSiZMJk4mUSZVJlgmcAAAoHUpZqDlIXMAAKAgKQCgMylzAACgHinrALka8ACVHmwAAKBFKWkAbQAAoHQpbAAAoKMhAKCdIQABYWleJmImaQBsAACgGilvAG6gNiJhAGwA8wB2C4ABYWJyAG8mciZ2JnIA8gAvEnIAawAAoHMnAAFha3omgSZjAAABZWt/JoAmfWBdYAABZXOFJocmAKCMKWwAAAFkdYwmjiYAoI4pAKCQKQACYWV1eZcmmiajJqUm8iFvbllhAAFkaZ4moSZpAGwAV2HsAA8M4gCAJkBkAAJjbHFzrSawJrUmuiZhAACgNylkImhhcgAAoGkpdQBvAPKgHSCjAWgAAKCzIYABYWNnAMMm0iaUC2wAgKEcIWlwcwDLJs4migxuAOUAoAxhAHIA9ADaC3QAAKCtJYABaWxyANsm3ybjJvMhaHQAoH0pbwBvAPIANgwA4DXYL90AAWFv6ib1JnIAAAFkde8m8SYAoMEhbKDAIQCgbCl2oMED8WOAAWducwD+Jk4nUCdoAHQAAANhaGxyc3QKJxInISc1Jz0nRydyInJvdwB0oJIhYQDpAFYmYSNycG9vbgAAAWR1GiceJ28AdwDuAPAmcAAAoMAh5SFmdAABYWgnJy0ncgByAG8AdwDzAAkMYQByAHAAbwBvAG4A8wATBGklZ2h0YXJyb3dzAACgySFxAHUAaQBnAGEAcgByAG8A9wBZJugkcmVldGltZXMAoMwiZwDaYmkAbgBnAGQAbwB0AHMAZQDxABwYgAFhaG0AYCdjJ2YncgDyAAkMYQDyABMEAKAPIG8idXN0AGGgsSPjIWhlAKCxI+0haWQAoO4qAAJhYnB0fCeGJ4knmScAAW5ygCeDJ2cAAKDtJ3IAAKD+IXIA6wAcDIABYWZsAI8nkieVJ3IAAKCGKQDgNdhj3XUAcwAAoC4qaSJtZXMAAKA1KgABYXCiJ6gncgBnoCkAdAAAoJQp7yJsaW50AKASKmEAcgDyADwnAAJhY2hxuCe8J6EMwCfxIXVvAKA6IHIAAOA12MfcAAFidYAmxCdvAPKgGSCoAYABaGlyAM4n0ifWJ3IAZQDlAE0n7SFlcwCgyiJpAIChuSVlZmwAXAxjEt4n9CFyaQCgzinsInVoYXIAoGgpAKAeIWENBSgJKA0oSyhVKIYoAACLKLAoAAAAAOMo5ygAABApJCkxKW0pcSmHKaYpAACYKgAAAACxKmMidXRlAFthcQB1AO8ABR+ApHsiRWFjZWlucHN5ABwoHignKCooLygyKEEoRihJKACgtCrwASMoAAAlKACguCpvAG4AYWF1AOUAgw1koLAqaQBsAF9hcgBjAF1hgAFFYXMAOCg6KD0oAKC2KnAAAKC6KmkAbQAAoOki7yJsaW50AKATKmkA7QCIDUFkbwB0AGKixSKRFgAAAABTKACgZiqAA0FhY21zdHgAYChkKG8ocyh1KHkogihyAHIAAKDYIXIAAAFocmkoayjrAJAab6CYIfcAzAd0ADuApwCnQGkAO2D3IWFyAKApKW0AAAFpbn4ozQBuAHUA8wDOAHQAAKA2J3IA7+A12DDdIxkAAmFjb3mRKJUonSisKHIAcAAAoG8mAAFoeZkonChjAHkASWRIZHIAdABtAqUoAAAAAKgoaQDkAFsPYQByAGEA7ABsJDuArQCtQAABZ22zKLsobQBhAAChwwNmdroouijCY4CjPCJkZWdsbnByAMgozCjPKNMo1yjaKN4obwB0AACgairxoEMiCw5FoJ4qAKCgKkWgnSoAoJ8qZQAAoEYi7CF1cwCgJCrhIXJyAKByKWEAcgDyAPwMAAJhZWl07Sj8KAEpCCkAAWxz8Sj4KGwAcwBlAHQAbQDpAH8oaABwAACgMyrwImFyc2wAoOQpAAFkbFoPBSllAACgIyNloKoqc6CsKgDgrCoA/oABZmxwABUpGCkfKfQhY3lMZGKgLwBhoMQpcgAAoD8jZgAA4DXYZN1hAAABZHIoKRcDZQBzAHWgYCZpAHQAAKBgJoABY3N1ADYpRilhKQABYXU6KUApcABzoJMiAOCTIgD+cABzoJQiAOCUIgD+dQAAAWJwSylWKQChjyJlcz4NUCllAHQAZaCPIvEAPw0AoZAiZXNIDVspZQB0AGWgkCLxAEkNAKGhJWFmZilbBHIAZQFrKVwEAKChJWEAcgDyAAMNAAJjZW10dyl7KX8pgilyAADgNdjI3HQAbQDuAM4AaQDsAAYpYQByAOYAVw0AAWFyiimOKXIA5qAGJhESAAFhbpIpoylpImdodAAAAWVwmSmgKXAAcwBpAGwAbwDuANkXaADpAKAkcwCvYIACYmNtbnAArin8KY4NJSooKgCkgiJFZGVtbnByc7wpvinCKcgpzCnUKdgp3CkAoMUqbwB0AACgvSpkoIYibwB0AACgwyr1IWx0AKDBKgABRWXQKdIpAKDLKgCgiiLsIXVzAKC/KuEhcnIAoHkpgAFlaXUA4inxKfQpdAAAoYIiZW7oKewpcQDxoIYivSllAHEA8aCKItEpbQAAoMcqAAFicPgp+ikAoNUqAKDTKmMAgKJ7ImFjZW5zAAcqDSoUKhYqRihwAHAAcgBvAPgAIyh1AHIAbAB5AGUA8QCDDfEAfA2AAWFlcwAcKiIqPShwAHAAcgBvAPgAPChxAPEAOShnAACgaiYApoMiMTIzRWRlaGxtbnBzPCo/KkIqRSpHKlIqWCpjKmcqaypzKncqO4C5ALlAO4CyALJAO4CzALNAAKDGKgABb3NLKk4qdAAAoL4qdQBiAACg2CpkoIcibwB0AACgxCpzAAABb3VdKmAqbAAAoMknYgAAoNcq4SFycgCgeyn1IWx0AKDCKgABRWVvKnEqAKDMKgCgiyLsIXVzAKDAKoABZWl1AH0qjCqPKnQAAKGDImVugyqHKnEA8aCHIkYqZQBxAPGgiyJwKm0AAKDIKgABYnCTKpUqAKDUKgCg1iqAAUFhbgCdKqEqrCpyAHIAAKDZIXIAAAFocqYqqCrrAJUab6CZIfcAxQf3IWFyAKAqKWwAaQBnADuA3wDfQOELzyrZKtwq6SrsKvEqAAD1KjQrAAAAAAAAAAAAAEwrbCsAAHErvSsAAAAAAADRK3IC1CoAAAAA2CrnIWV0AKAWI8RjcgDrAOUKgAFhZXkA4SrkKucq8iFvbmVh5CFpbGNhQmRvAPQAIg5sInJlYwAAoBUjcgAA4DXYMd0AAmVpa2/7KhIrKCsuK/IBACsAAAkrZQAAATRm6g0EK28AcgDlAOsNYQBzorgDECsAAAAAEit5AG0A0WMAAWNuFislK2sAAAFhcxsrIStwAHAAcgBvAPgAFw5pAG0AAKA8InMA8AD9DQABYXMsKyEr8AAXDnIAbgA7gP4A/kDsATgrOyswG2QA5QBnAmUAcwCAgdcAO2JkAEMrRCtJK9dAYaCgInIAAKAxKgCgMCqAAWVwcwBRK1MraSvhAAkh4qKkIlsrXysAAAAAYytvAHQAAKA2I2kAcgAAoPEqb+A12GXdcgBrAACg2irhAHgociJpbWUAAKA0IIABYWlwAHYreSu3K2QA5QC+DYADYWRlbXBzdACFK6MrmiunK6wrsCuzK24iZ2xlAACitSVkbHFykCuUK5ornCvvIXduAKC/JeUhZnRloMMl8QACBwCgXCJpImdodABloLkl8QBdDG8AdAAAoOwlaSJudXMAAKA6KuwhdXMAoDkqYgAAoM0p6SFtZQCgOyrlInppdW0AoOIjgAFjaHQAwivKK80rAAFyecYrySsA4DXYydxGZGMAeQBbZPIhb2tnYQABaW/UK9creAD0ANERaCJlYWQAAAFsct4r5ytlAGYAdABhAHIAcgBvAPcAXQbpJGdodGFycm93AKCgIQAJQUhhYmNkZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg")});var j1;var O6=N(()=>{(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"})(j1||(j1={}))});function pj(f){return f>=wf.ZERO&&f<=wf.NINE}function uy(f){return f>=wf.UPPER_A&&f<=wf.UPPER_F||f>=wf.LOWER_A&&f<=wf.LOWER_F}function Ey(f){return f>=wf.UPPER_A&&f<=wf.UPPER_Z||f>=wf.LOWER_A&&f<=wf.LOWER_Z||pj(f)}function xy(f){return f===wf.EQUALS||Ey(f)}class rj{constructor(f,J,Y){this.decodeTree=f,this.emitCodePoint=J,this.errors=Y,this.state=sf.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=zY.Strict,this.runConsumed=0}startEntity(f){this.decodeMode=f,this.state=sf.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(f,J){switch(this.state){case sf.EntityStart:{if(f.charCodeAt(J)===wf.NUM)return this.state=sf.NumericStart,this.consumed+=1,this.stateNumericStart(f,J+1);return this.state=sf.NamedEntity,this.stateNamedEntity(f,J)}case sf.NumericStart:return this.stateNumericStart(f,J);case sf.NumericDecimal:return this.stateNumericDecimal(f,J);case sf.NumericHex:return this.stateNumericHex(f,J);case sf.NamedEntity:return this.stateNamedEntity(f,J)}}stateNumericStart(f,J){if(J>=f.length)return-1;if((f.charCodeAt(J)|A6)===wf.LOWER_X)return this.state=sf.NumericHex,this.consumed+=1,this.stateNumericHex(f,J+1);return this.state=sf.NumericDecimal,this.stateNumericDecimal(f,J)}stateNumericHex(f,J){while(J<f.length){let Y=f.charCodeAt(J);if(pj(Y)||uy(Y)){let z=Y<=wf.NINE?Y-wf.ZERO:(Y|A6)-wf.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(pj(Y))this.result=this.result*10+(Y-wf.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===wf.SEMI)this.consumed+=1;else if(this.decodeMode===zY.Strict)return 0;if(this.emitCodePoint(U6(this.result),this.consumed),this.errors){if(f!==wf.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&j1.VALUE_LENGTH)>>14;while(J<f.length){if(G===0&&(z&j1.FLAG13)!==0){let q=(z&j1.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let Q=z&j1.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&j1.VALUE_LENGTH)>>14}if(J>=f.length)break;let X=f.charCodeAt(J);if(X===wf.SEMI&&G!==0&&(z&j1.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.treeIndex=hy(Y,z,this.treeIndex+Math.max(1,G),X),this.treeIndex<0)return this.result===0||this.decodeMode===zY.Attribute&&(G===0||xy(X))?0:this.emitNotTerminatedNamedEntity();if(z=Y[this.treeIndex],G=(z&j1.VALUE_LENGTH)>>14,G!==0){if(X===wf.SEMI)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.decodeMode!==zY.Strict&&(z&j1.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]&j1.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]&~(j1.VALUE_LENGTH|j1.FLAG13):z[f+1],Y),J===3)this.emitCodePoint(z[f+2],Y);return Y}end(){var f;switch(this.state){case sf.NamedEntity:return this.result!==0&&(this.decodeMode!==zY.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case sf.NumericDecimal:return this.emitNumericEntity(0,2);case sf.NumericHex:return this.emitNumericEntity(0,3);case sf.NumericStart:return(f=this.errors)===null||f===void 0||f.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case sf.EntityStart:return 0}}}function wy(f){let J="",Y=new rj(f,(z)=>J+=K6(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 hy(f,J,Y,z){let G=(J&j1.BRANCH_LENGTH)>>7,X=J&j1.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,K=f[Y+V]>>(B&1)*8&255;if(K<z)Q=B+1;else if(K>z)H=B-1;else return f[Y+q+B]}return-1}function Cz(f,J=zY.Legacy){return Py(f,J)}var wf,A6=32,sf,zY,Py;var g6=N(()=>{D6();F6();O6();(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"})(wf||(wf={}));(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"})(sf||(sf={}));(function(f){f[f.Legacy=0]="Legacy",f[f.Strict=1]="Strict",f[f.Attribute=2]="Attribute"})(zY||(zY={}));Py=wy(M6)});var R6,C6;var y6=N(()=>{g6();(function(f){f[f.XML=0]="XML",f[f.HTML=1]="HTML"})(R6||(R6={}));(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"})(C6||(C6={}))});import{CliRenderer as my,createCliRenderer as cy,engine as ny}from"@opentui/core";import{createTestRenderer as zn}from"@opentui/core/testing";import{ASCIIFontRenderable as dy,BoxRenderable as iy,CodeRenderable as ly,DiffRenderable as ay,InputRenderable as $y,LineNumberRenderable as py,MarkdownRenderable as ry,ScrollBoxRenderable as _y,SelectRenderable as oy,TabSelectRenderable as sy,TextareaRenderable as ty,TextAttributes as _j,TextNodeRenderable as ey,TextRenderable as fb}from"@opentui/core";import{engine as Zn,Timeline as qn}from"@opentui/core";import{BaseRenderable as u6,createTextAttributes as Yb,InputRenderable as oj,InputRenderableEvents as IX,isTextNodeRenderable as ej,parseColor as b6,Renderable as zb,RootTextNodeRenderable as Gb,ScrollBoxRenderable as Xb,SelectRenderable as k6,SelectRenderableEvents as sj,TabSelectRenderable as S6,TabSelectRenderableEvents as tj,TextNodeRenderable as Zb,TextRenderable as E6}from"@opentui/core";import{BaseRenderable as Ub,isTextNodeRenderable as Db,TextNodeRenderable as Lb,TextRenderable as Mb,Yoga as T6}from"@opentui/core";import{BoxRenderable as Ln,RootRenderable as Mn}from"@opentui/core";import{TimeToFirstDrawRenderable as gb}from"@opentui/core";import{createSlotRegistry as An}from"@opentui/core";function Qb({createElement:f,createTextNode:J,createSlotNode:Y,isTextNode:z,replaceText:G,insertNode:X,removeNode:q,setProperty:Q,getParentNode:H,getFirstChild:B,getNextSibling:V}){function j(y,R,C,k){if(C!==void 0&&!k)k=[];if(typeof R!=="function")return K(y,R,k,C);CJ((_)=>K(y,R(),_,C),k)}function K(y,R,C,k,_){while(typeof C==="function")C=C();if(R===C)return C;let z0=typeof R,t=k!==void 0;if(z0==="string"||z0==="number"){if(z0==="number")R=R.toString();if(t){let Y0=C[0];if(Y0&&z(Y0))G(Y0,R);else Y0=J(R);C=M(y,C,k,Y0)}else if(C!==""&&typeof C==="string")G(B(y),C=R);else M(y,C,k,J(R)),C=R}else if(R==null||z0==="boolean")C=M(y,C,k);else if(z0==="function")return CJ(()=>{let Y0=R();while(typeof Y0==="function")Y0=Y0();C=K(y,Y0,C,k)}),()=>C;else if(Array.isArray(R)){let Y0=[];if(L(Y0,R,_))return CJ(()=>C=K(y,Y0,C,k,!0)),()=>C;if(Y0.length===0){let T=M(y,C,k);if(t)return C=T}else if(Array.isArray(C))if(C.length===0)g(y,Y0,k);else O(y,C,Y0);else if(C==null||C==="")g(y,Y0);else O(y,t&&C||[B(y)],Y0);C=Y0}else{if(Array.isArray(C)){if(t)return C=M(y,C,k,R);M(y,C,null,R)}else if(C==null||C===""||!B(y))X(y,R);else S(y,R,B(y));C=R}return C}function L(y,R,C){let k=!1;for(let _=0,z0=R.length;_<z0;_++){let t=R[_],Y0;if(t==null||t===!0||t===!1);else if(Array.isArray(t))k=L(y,t)||k;else if((Y0=typeof t)==="string"||Y0==="number")y.push(J(t));else if(Y0==="function")if(C){while(typeof t==="function")t=t();k=L(y,Array.isArray(t)?t:[t])||k}else y.push(t),k=!0;else y.push(t)}return k}function O(y,R,C){let k=C.length,_=R.length,z0=k,t=0,Y0=0,T=V(R[_-1]),H0=null;while(t<_||Y0<z0){if(R[t]===C[Y0]){t++,Y0++;continue}while(R[_-1]===C[z0-1])_--,z0--;if(_===t){let r=z0<k?Y0?V(C[Y0-1]):C[z0-Y0]:T;while(Y0<z0)X(y,C[Y0++],r)}else if(z0===Y0)while(t<_){if(!H0||!H0.has(R[t]))q(y,R[t]);t++}else if(R[t]===C[z0-1]&&C[Y0]===R[_-1]){let r=V(R[--_]);X(y,C[Y0++],V(R[t++])),X(y,C[--z0],r),R[_]=C[z0]}else{if(!H0){H0=new Map;let D0=Y0;while(D0<z0)H0.set(C[D0],D0++)}let r=H0.get(R[t]);if(r!=null)if(Y0<r&&r<z0){let D0=t,g0=1,$;while(++D0<_&&D0<z0){if(($=H0.get(R[D0]))==null||$!==r+g0)break;g0++}if(g0>r-Y0){let x=R[t];while(Y0<r)X(y,C[Y0++],x)}else S(y,C[Y0++],R[t++])}else t++;else q(y,R[t++])}}}function M(y,R,C,k){if(C===void 0){let z0;while(z0=B(y))q(y,z0);return k&&X(y,k),k??""}let _=k||Y();if(R.length){let z0=!1;for(let t=R.length-1;t>=0;t--){let Y0=R[t];if(_!==Y0){let T=H(Y0)===y;if(!z0&&!t)T?S(y,_,Y0):X(y,_,C);else T&&q(y,Y0)}else z0=!0}}else X(y,_,C);return[_]}function g(y,R,C){for(let k=0,_=R.length;k<_;k++)X(y,R[k],C)}function S(y,R,C){X(y,R,C),q(y,C)}function a(y,R,C={},k){if(R||(R={}),!k)CJ(()=>C.children=K(y,R.children,C.children));return CJ(()=>R.ref&&R.ref(y)),CJ(()=>{for(let _ in R){if(_==="children"||_==="ref")continue;let z0=R[_];if(z0===C[_])continue;Q(y,_,z0,C[_]),C[_]=z0}}),C}return{render(y,R){let C;return Zz((k)=>{C=k,j(R,y())}),C},insert:j,spread(y,R,C){if(typeof R==="function")CJ((k)=>a(y,R(),k,C));else a(y,R,void 0,C)},createElement:f,createTextNode:J,insertNode:X,setProp(y,R,C,k){return Q(y,R,C,k),C},mergeProps:pZ,effect:CJ,memo:qb,createComponent:AV,use(y,R,C){return lf(()=>y(R,C))}}}function Hb(f){let J=Qb(f);return J.mergeProps=pZ,J}function G8(f){if(!FQ.has(f))FQ.set(f,0);let J=FQ.get(f)+1;return FQ.set(f,J),`${f}-${J}`}function Bb(f,J,Y){if(tf("Inserting node:",pf(J),"into parent:",pf(f),"with anchor:",pf(Y),J instanceof CG),J instanceof TX)J.parent=f,J=J.getSlotChild(f);if(Y&&Y instanceof TX)Y=Y.getSlotChild(f);if(ej(J)){if(!(f instanceof E6)&&!ej(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 u6))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=f8(f),G=z.findIndex((X)=>X.id===Y.id);if(G===-1)tf("[INSERT]","Could not find anchor",pf(f),pf(Y),"[children]",...z.map((X)=>X.id));f.add(J,G)}function jb(f,J){if(tf("Removing node:",pf(J),"from parent:",pf(f)),J instanceof TX)J.parent=null,J=J.getSlotChild(f);f.remove(J.id),process.nextTick(()=>{if(J instanceof u6&&!J.parent){J.destroyRecursively();return}})}function Wb(f){tf("Creating text node:",f);let J=G8("text-node");if(typeof f==="number")f=f.toString();return CG.fromString(Cz(f),{id:J})}function Vb(){let f=G8("slot-node");return tf("Creating slot node",f),new TX(f)}function I6(f){tf("Getting parent of node:",pf(f));let J=f.parent??void 0;if(J instanceof Gb)J=J.textParent??void 0;let Y=J?.parent?.parent?.parent;if(Y instanceof Xb&&Y.content===J)J=Y;return J}function Ob(f){Object.assign(c6,f)}function Ab(){return c6}var z8,G1=()=>{let f=u1(z8);if(!f)throw Error("No renderer found");return f},Jb=(f)=>{let J=G1();_f(()=>{J.on("resize",f)}),yf(()=>{J.off("resize",f)})},uJ=()=>{let f=G1(),[J,Y]=p({width:f.width,height:f.height});return Jb((G,X)=>{Y({width:G,height:X})}),J},qb=(f)=>K0(()=>f()),FQ,tf=(...f)=>{if(process.env.DEBUG)console.log("[Reconciler]",...f)},CG,pf=(f)=>{if(!f)return;return f.id},f8=(f)=>{let J;if(f instanceof E6)J=f.getTextChildren();else J=f.getChildren();return J},Kb,E,T0,b,W,x0,D,U,Kn,Z,x6,hY,X8,w6,h6,TX,uX,OQ,J8,Y8,P6,v6,m6,Fb,c6,Rb=(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=Kb(()=>b(z8.Provider,{get value(){return f},get children(){return b(J,{})}}),f.root)}finally{X=!1,f.destroy=Q}if(z)H();if(q)Q()},n6=async(f,J={})=>{let Y=J instanceof my?J:await cy({...J,onDestroy:()=>{J.onDestroy?.()}});ny.attach(Y),Rb(Y,f)};var h=N(()=>{Bf();y6();Bf();Bf();Bf();z8=NJ();FQ=new Map;CG=class CG extends Zb{static fromString(f,J={}){let Y=new CG(J);return Y.add(f),Y}};({render:Kb,effect:E,memo:T0,createComponent:b,createElement:W,createTextNode:x0,insertNode:D,insert:U,spread:Kn,setProp:Z,mergeProps:x6,use:hY}=Hb({createElement(f){tf("Creating element:",f);let J=G8(f),Y=u1(z8);if(!Y)throw Error("No renderer found");let z=Ab();if(!z[f])throw Error(`[Reconciler] Unknown component type: ${f}`);let G=new z[f](Y,{id:J});return tf("Element created with id:",J),G},createTextNode:Wb,createSlotNode:Vb,replaceText(f,J){if(tf("Replacing text:",J,"in node:",pf(f)),!(f instanceof CG))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(ej(f)){if(J==="href"){f.link={url:Y};return}if(J==="style"){f.attributes|=Yb(Y),f.fg=Y.fg?b6(Y.fg):f.fg,f.bg=Y.bg?b6(Y.bg):f.bg;return}return}switch(J){case"id":tf("Id mapped",f.id,"=",Y),f[J]=Y;break;case"focused":if(!(f instanceof zb))return;if(Y)f.focus();else f.blur();break;case"onChange":let G=void 0;if(f instanceof k6)G=sj.SELECTION_CHANGED;else if(f instanceof S6)G=tj.SELECTION_CHANGED;else if(f instanceof oj)G=IX.CHANGE;if(!G)break;if(Y)f.on(G,Y);if(z)f.off(G,z);break;case"onInput":if(f instanceof oj){if(Y)f.on(IX.INPUT,Y);if(z)f.off(IX.INPUT,z)}break;case"onSubmit":if(f instanceof oj){if(Y)f.on(IX.ENTER,Y);if(z)f.off(IX.ENTER,z)}else f[J]=Y;break;case"onSelect":if(f instanceof k6){if(Y)f.on(sj.ITEM_SELECTED,Y);if(z)f.off(sj.ITEM_SELECTED,z)}else if(f instanceof S6){if(Y)f.on(tj.ITEM_SELECTED,Y);if(z)f.off(tj.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 CG},insertNode:Bb,removeNode:jb,getParentNode:I6,getFirstChild(f){tf("Getting first child of node:",pf(f));let J=f8(f)[0];if(!J){tf("No first child found for node:",pf(f));return}return tf("First child found:",pf(J),"for node:",pf(f)),J},getNextSibling(f){tf("Getting next sibling of node:",pf(f));let J=I6(f);if(!J){tf("No parent found for node:",pf(f));return}let Y=f8(J),z=Y.indexOf(f);if(z===-1||z===Y.length-1){tf("No next sibling found for node:",pf(f));return}let G=Y[z+1];if(!G){tf("Next sibling is null for node:",pf(f));return}return tf("Next sibling found:",pf(G),"for node:",pf(f)),G}}));X8=class X8 extends Ub{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}};w6=class w6 extends Lb{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()}};h6=class h6 extends X8{yogaNode;slotParent;destroyed=!1;constructor(f,J){super(f);this._visible=!1,this.slotParent=J,this.yogaNode=T6.default.Node.create(),this.yogaNode.setDisplay(T6.Display.None)}getLayoutNode(){return this.yogaNode}updateFromLayout(){}updateLayout(){}onRemove(){}destroy(){if(this.destroyed)return;this.destroyed=!0,super.destroy(),this.slotParent?.destroy()}};TX=class TX extends X8{layoutNode;textNode;destroyed=!1;constructor(f){super(f);this._visible=!1}getSlotChild(f){if(Db(f)||f instanceof Mb){if(!this.textNode)this.textNode=new w6(`slot-text-${this.id}`,this);return this.textNode}if(!this.layoutNode)this.layoutNode=new h6(`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()}};uX=class uX extends ey{_ctx;constructor(f,J){super(J);this._ctx=f}};OQ=class OQ extends uX{constructor(f,J){super(null,f);if(J==="b"||J==="strong")this.attributes=(this.attributes||0)|_j.BOLD;else if(J==="i"||J==="em")this.attributes=(this.attributes||0)|_j.ITALIC;else if(J==="u")this.attributes=(this.attributes||0)|_j.UNDERLINE}};J8=class J8 extends OQ{constructor(f){super(f,"b")}};Y8=class Y8 extends OQ{constructor(f){super(f,"i")}};P6=class P6 extends OQ{constructor(f){super(f,"u")}};v6=class v6 extends uX{constructor(f,J){super(null,J);this.add()}add(){return super.add(`
|
|
261
|
+
`)}};m6=class m6 extends uX{constructor(f,J){let Y={...J,link:{url:J.href}};super(null,Y)}};Fb={box:iy,text:fb,input:$y,select:oy,textarea:ty,ascii_font:dy,tab_select:sy,scrollbox:_y,code:ly,diff:ay,line_number:py,markdown:ry,span:uX,strong:J8,b:J8,em:Y8,i:Y8,u:P6,br:v6,a:m6},c6={...Fb};Ob({time_to_first_draw:gb})});function Cb(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 Nb(f,J){if(f.size!==J.size)return!1;for(let[Y,z]of f){let G=J.get(Y);if(!G||!TJ(z,G))return!1}return!0}class W1{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]=p([]),[G,X]=p(null),[q,Q]=p(null),[H,B]=p(null),[V,j]=p(new Map),[K,L]=p(new Map),[O,M]=p(null),[g,S]=p(null),[a,y]=p(null),[R,C]=p("online");this.tasksAcc=Y,this.setTasks=(k)=>z(()=>k),this.activeTaskAcc=G,this.setActiveTaskSig=(k)=>X(()=>k),this.updateAcc=q,this.setUpdateSig=(k)=>Q(()=>k),this.daemonVersionAcc=H,this.setDaemonVersionSig=(k)=>B(()=>k),this.engineStateAcc=V,this.setEngineStateSig=(k)=>j(()=>k),this.taskJobsAcc=K,this.setTaskJobsSig=(k)=>L(()=>k),this.worktreeChangesAcc=O,this.setWorktreeChangesSig=(k)=>M(()=>k),this.uiPrefsAcc=g,this.setUiPrefsSig=(k)=>S(()=>k),this.keybindingsRevAcc=a,this.setKeybindingsRevSig=(k)=>y(()=>k),this.connectionStateAcc=R,this.setConnectionState=(k)=>C(()=>k),this.ensureReachable=J.ensureReachable??LG,this.role=J.role??"pane",this.channels=J.channels,this.subscribesTasks=!J.channels||J.channels.includes("task.snapshot"),this.client.on("*",(k)=>this.handleEvent(k.name,k.payload)),this.client.onLifecycle("close",()=>{if(this.setConnectionState("disconnected"),this.role==="pane")iJ("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(),iJ("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)d1("orch-reconnect",Y);f=Math.min(f*2,3000)}}this.reconnecting=!1}async init(){let f=await this.client.request("hello",{protocolVersion:n1,minProtocolVersion:BY}),J=typeof f.protocolVersion==="number"?f.protocolVersion:n1,Y=typeof f.minProtocolVersion==="number"?f.minProtocolVersion:J;if(!BZ({localVersion:n1,localMin:BY,remoteVersion:J,remoteMin:Y}))throw Error(`kobe daemon is protocol v${J} (min v${Y}); this client is v${n1} (min v${BY}). 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(EX));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"),iJ("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()=>a9(this.daemonVersionAcc()??void 0,t0)}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 Zz((Y)=>{return Gf(()=>{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 EX(z.task)}async ensureMainTask(f){let J=await this.client.request("task.ensureMain",{repo:f});return EX(J.task)}async ensureWorktree(f){return(await this.client.request("task.ensureWorktree",{taskId:String(f)})).worktreePath}async forgetProject(f){await this.client.request("project.forget",{repo:f})}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 EX(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(EX)),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=Cb(J);if(!Y)return;let z=this.worktreeChangesAcc();if(z&&Nb(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 EX(f){return{id:_G(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=N(()=>{sY();L1();_Y();Bf();KG();I1();D1()});function l6(f){let J=f[ZJ];if(!J){if(Object.defineProperty(f,ZJ,{value:J=new Proxy(f,kb)}),!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 AQ(f){let J;return f!=null&&typeof f==="object"&&(f[ZJ]||!(J=Object.getPrototypeOf(f))||J===Object.prototype||Array.isArray(f))}function wX(f,J=new Set){let Y,z,G,X;if(Y=f!=null&&f[Z8])return Y;if(!AQ(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=wX(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=wX(G,J))!==G)f[X]=z}}return f}function gQ(f,J){let Y=f[J];if(!Y)Object.defineProperty(f,J,{value:Y=Object.create(null)});return Y}function hX(f,J,Y){if(f[J])return f[J];let[z,G]=p(Y,{equals:!1,internal:!0});return z.$=G,f[J]=z}function yb(f,J){let Y=Reflect.getOwnPropertyDescriptor(f,J);if(!Y||Y.get||!Y.configurable||J===ZJ||J===NG)return Y;return delete Y.value,delete Y.writable,Y.get=()=>f[ZJ][J],Y}function a6(f){$Z()&&hX(gQ(f,NG),i6)()}function bb(f){return a6(f),Reflect.ownKeys(f)}function RQ(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(d6.onStoreNodeUpdate&&d6.onStoreNodeUpdate(f,J,Y,G),Y===void 0){if(delete f[J],f[GY]&&f[GY][J]&&G!==void 0)f[GY][J].$()}else if(f[J]=Y,f[GY]&&f[GY][J]&&G===void 0)f[GY][J].$();let q=gQ(f,NG),Q;if(Q=hX(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=hX(q,"length",X))&&Q.$(f.length)}(Q=q[i6])&&Q.$()}function $6(f,J){let Y=Object.keys(J);for(let z=0;z<Y.length;z+=1){let G=Y[z];if(p6(G))continue;RQ(f,G,J[G])}}function p6(f){return f==="__proto__"||f==="constructor"||f==="prototype"}function Sb(f,J){if(typeof J==="function")J=J(f);if(J=wX(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)RQ(f,Y,G)}RQ(f,"length",z)}else $6(f,J)}function xX(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&&p6(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++)xX(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))xX(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)xX(f,[j].concat(J),Y);return}else if(J.length>1){xX(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=wX(X),z===void 0||AQ(G)&&AQ(X)&&!Array.isArray(X))$6(G,X);else RQ(f,z,X)}function EJ(...[f,J]){let Y=wX(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=l6(Y);RV.registerGraph({value:Y,name:J&&J.name});function X(...q){aZ(()=>{z&&q.length===1?Sb(Y,q[0]):xX(Y,q)})}return[G,X]}var Z8,NG,GY,i6,d6,kb,un;var yG=N(()=>{Bf();Z8=Symbol("store-raw"),NG=Symbol("store-node"),GY=Symbol("store-has"),i6=Symbol("store-self"),d6={onStoreNodeUpdate:null};kb={get(f,J,Y){if(J===Z8)return f;if(J===ZJ)return Y;if(J===dZ)return a6(f),Y;let z=gQ(f,NG),G=z[J],X=G?G():f[J];if(J===NG||J===GY||J==="__proto__")return X;if(!G){let q=Object.getOwnPropertyDescriptor(f,J);if($Z()&&(typeof X!=="function"||f.hasOwnProperty(J))&&!(q&&q.get))X=hX(z,J,X)()}return AQ(X)?l6(X):X},has(f,J){if(J===Z8||J===ZJ||J===dZ||J===NG||J===GY||J==="__proto__")return!0;return $Z()&&hX(gQ(f,GY),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:bb,getOwnPropertyDescriptor:yb};un=Symbol("store-root")});function CQ(f){let J=NJ();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 q8=N(()=>{h();h();Bf()});import{RGBA as Nz}from"@opentui/core";function Tb(){return Object.keys(X1.themes)}function PX(f){return Boolean(X1.themes[f])}function H8(f,J){if(!f)return!1;if(!J||typeof J!=="object"||!J.theme)return!1;return yz("themes",{...X1.themes,[f]:J}),!0}function Q8(f,J="dark"){let Y=f.defs??{};function z(H,B=[]){if(typeof H==="string"){if(H==="transparent"||H==="none")return Nz.fromInts(0,0,0,0);if(H.startsWith("#"))return Nz.fromHex(H);if(B.includes(H))return Nz.fromInts(0,0,0);let V=Y[H]??f.theme[H];if(V===void 0)return Nz.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??Nz.fromHex("#ffffff"),q=G.background??Nz.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 Ib,bz,X1,yz,n0,r6;var hf=N(()=>{h();Bf();yG();q8();Kq();Uq();Dq();Lq();Mq();Fq();Oq();Ib={claude:tz,conductor:ez,nord:JG,opencode:YG,dracula:fG,tokyonight:GG,"osaka-jade":zG},bz=["primary","success","info"],[X1,yz]=EJ({themes:{...Ib},active:"claude",mode:"dark",transparentBackground:!1,focusAccent:"primary"});({use:n0,provider:r6}=CQ({name:"Theme",init:(f)=>{if(f.mode)yz("mode",f.mode);if(f.theme&&PX(f.theme))yz("active",f.theme);let J=G1(),Y=K0(()=>{let G=X1.themes[X1.active];if(G)return Q8(G,X1.mode);let X=X1.themes.claude??X1.themes.opencode??Object.values(X1.themes)[0];if(!X)return Q8({theme:{background:"#000000",text:"#ffffff"}},X1.mode);return Q8(X,X1.mode)}),z=K0(()=>{let G=Y(),X=G[X1.focusAccent]??G.primary,q={...G,focusAccent:X};if(!X1.transparentBackground)return q;let Q=Nz.fromInts(0,0,0,0);return{...q,background:Q,backgroundPanel:Q}});return Gf(()=>{J?.setBackgroundColor(z().background)}),{theme:new Proxy({},{get(G,X){let q=z();return q[X]??q.text}}),get selected(){return X1.active},get transparentBackground(){return X1.transparentBackground},get focusAccent(){return X1.focusAccent},mode(){return X1.mode},set(G){if(!PX(G))return!1;return yz("active",G),!0},setMode(G){yz("mode",G)},setTransparentBackground(G){yz("transparentBackground",G)},setFocusAccent(G){yz("focusAccent",G)},all(){return Tb()},has(G){return PX(G)}}}}))});var _6,o6;var s6=N(()=>{_6={cancel:"Cancel",confirm:"Confirm",paneCrash:{title:"This pane crashed",hint:"Reload it from the Tasks pane (the error was logged to client.log)."},rename:{defaultTitle:"Rename task",defaultFieldLabel:"title",footerHint:"enter {submitLabel} \xB7 esc cancel",defaultSubmitLabel:"rename"}},o6={cancel:"\u53D6\u6D88",confirm:"\u786E\u8BA4",paneCrash:{title:"\u6B64\u9762\u677F\u5DF2\u5D29\u6E83",hint:"\u8BF7\u4ECE\u4EFB\u52A1\u9762\u677F\u91CD\u65B0\u52A0\u8F7D\uFF08\u9519\u8BEF\u5DF2\u8BB0\u5F55\u5230 client.log\uFF09\u3002"},rename:{defaultTitle:"\u91CD\u547D\u540D\u4EFB\u52A1",defaultFieldLabel:"\u540D\u79F0",footerHint:"enter {submitLabel} \xB7 esc \u53D6\u6D88",defaultSubmitLabel:"\u91CD\u547D\u540D"}}});var t6,e6;var f4=N(()=>{t6={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"}},e6={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 J4,Y4;var z4=N(()=>{J4={title:"kobe \u2014 keybindings",esc:"esc"},Y4={title:"kobe \u2014 \u5FEB\u6377\u952E",esc:"esc"}});var G4,X4;var Z4=N(()=>{G4={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)"}},X4={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 q4,Q4;var H4=N(()=>{q4={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",summaryAll:"Adopted {count} worktree(s)",summaryPartial:"Adopted {done}/{total} worktrees \u2014 the rest failed (see log)",summaryNone:"Couldn't adopt any worktree: {error}"},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"}},Q4={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",summaryAll:"\u5DF2\u63A5\u7BA1 {count} \u4E2A worktree",summaryPartial:"\u5DF2\u63A5\u7BA1 {done}/{total} \u4E2A worktree \u2014 \u5176\u4F59\u5931\u8D25\uFF08\u8BE6\u89C1\u65E5\u5FD7\uFF09",summaryNone:"\u6CA1\u6709 worktree \u63A5\u7BA1\u6210\u529F\uFF1A{error}"},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 B4,j4;var W4=N(()=>{B4={badge:{newActivity:"\u25CF new"},preview:{diffVsHead:"diff vs HEAD",file:"file",closeHint:"\xB7 q to close",loading:"loading\u2026"}},j4={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 V4,K4;var U4=N(()=>{V4={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"},K4={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 D4,L4;var M4=N(()=>{D4={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)"}},L4={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 F4,O4;var A4=N(()=>{F4={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}"}},O4={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 g4,R4;var C4=N(()=>{g4={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`"}},R4={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 vX(f){return typeof f==="string"&&kz.some((J)=>J.id===f)}var ub,Eb,kz,bG,kG="en";var SG=N(()=>{s6();f4();z4();Z4();H4();W4();U4();M4();A4();C4();ub={settings:D4,tasks:F4,files:t6,newTask:q4,ops:B4,update:g4,quickTask:V4,help:J4,common:_6,keys:G4},Eb={settings:L4,tasks:O4,files:e6,newTask:Q4,ops:j4,update:R4,quickTask:K4,help:Y4,common:o6,keys:X4},kz=[{id:"en",label:"English"},{id:"zh",label:"\u4E2D\u6587"}],bG={en:ub,zh:Eb}});function mX(f){if(bG[f])xb("lang",f)}function j8(){return B8.lang}function N4(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 wb(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=B8.lang,z=N4(bG[Y],f)??N4(bG.en,f)??f;return wb(z,J)}function W8(f,J){let Y=B8.lang,z=(G)=>{return G.keys[f]?.[J]};return z(bG[Y])??z(bG.en)??J}var B8,xb;var ef=N(()=>{yG();SG();SG();[B8,xb]=EJ({lang:kG})});function hb(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 V8(f,J){if(J.defaultPrevented)return!1;let Y=hb(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 vb(){if(K8)return;let f=G1();if(!f)throw Error("useBindings: no renderer in scope; call inside a component rendered by @opentui/solid.");K8=f.keyInput,y4=(J)=>{V8(NQ,J)},K8.on("keypress",y4)}function Uf(f){vb();let J=Pb++,Y={config:f,id:J};Gf(()=>{f()}),NQ.push(Y),yf(()=>{let z=NQ.findIndex((G)=>G.id===J);if(z>=0)NQ.splice(z,1)})}var Pb=1,NQ,K8=null,y4=null;var S1=N(()=>{h();Bf();NQ=[]});function yQ(){let f=new Set;function J(z,G){let X=setTimeout(()=>{f.delete(X),z()},G);return f.add(X),X}function Y(z){if(f.delete(z))clearTimeout(z)}return yf(()=>{for(let z of f)clearTimeout(z);f.clear()}),{set:J,clear:Y}}var U8=N(()=>{Bf()});import{RGBA as b4}from"@opentui/core";function nb(f){let J=uJ(),Y=n0(),{theme:z}=Y,G=G1(),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),U(V,()=>f.children),E((j)=>{var K=J().width,L=J().height,O=Y.transparentBackground?cb:mb,M=q(),g=J().width-2,S=H(),a=z.backgroundDialog;return K!==j.e&&(j.e=Z(B,"width",K,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)),g!==j.i&&(j.i=Z(V,"maxWidth",g,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 db(){let[f,J]=EJ({stack:[],size:"medium"}),Y=G1(),z=null,G=yQ();function X(){G.set(()=>{if(!z)return;if(z.isDestroyed)return;function q(H){for(let B of H.getChildren()){if(B===z)return!0;if(q(B))return!0}return!1}let Q=Y?.root;if(!Q)return;if(!q(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)),X()}},{key:"ctrl+c",cmd:()=>{if(Y?.getSelection())Y.clearSelection();f.stack.at(-1)?.onClose?.(),J("stack",f.stack.slice(0,-1)),X()}}]})),{clear(){for(let q of f.stack)q.onClose?.();aZ(()=>{J("size","medium"),J("stack",[])}),X()},replace(q,Q){if(f.stack.length===0)z=Y?.currentFocusedRenderable??null,z?.blur();for(let H of f.stack)H.onClose?.();J("size","medium"),J("stack",[{element:q,onClose:Q}])},push(q,Q){if(f.stack.length===0)z=Y?.currentFocusedRenderable??null,z?.blur();J("stack",[...f.stack,{element:q,onClose:Q}])},pop(){if(f.stack.at(-1)?.onClose?.(),J("stack",f.stack.slice(0,-1)),f.stack.length===0)X()},get stack(){return f.stack},get size(){return f.size},setSize(q){J("size",q)}}}function S4(f){let J=db();return b(k4.Provider,{value:J,get children(){return[T0(()=>f.children),(()=>{var Y=W("box");return Z(Y,"position","absolute"),Z(Y,"zIndex",3000),U(Y,b(X0,{get when(){return J.stack.length},get children(){return b(nb,{onClose:()=>J.clear(),get size(){return J.size},get children(){return J.stack.at(-1).element()}})}})),Y})()]}})}function mf(){let f=u1(k4);if(!f)throw Error("useDialog must be used within a DialogProvider");return f}var mb,cb,k4;var v1=N(()=>{h();h();h();h();h();h();h();h();Bf();yG();hf();S1();U8();mb=b4.fromInts(0,0,0,128),cb=b4.fromInts(0,0,0,64);k4=NJ()});import{spawnSync as D8}from"child_process";import*as T4 from"fs";function I4(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 u4(f){let J=f.trim();if(!J)return"repo path is required";let Y;try{Y=T4.statSync(J)}catch{return`path does not exist: ${J}`}if(!Y.isDirectory())return`not a directory: ${J}`;try{if(D8("git",["rev-parse","--git-dir"],{cwd:J,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]}).status!==0)return I4(J)}catch{return I4(J)}return null}function cX(f){if(!f)return null;try{let J=D8("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 E4(f){if(!f)return[];try{let J=D8("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(`
|
|
262
|
+
`).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 FJ="main";var bQ=()=>{};import*as x4 from"fs";import*as kQ from"os";function V1(f){if(f==="~")return kQ.homedir();if(f.startsWith("~/"))return kQ.homedir()+f.slice(1);return f}function L8(f){if(!f)return{base:"",filter:""};let Y=V1(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 M8(f){if(!f)return[];try{let J=x4.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 F8(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 nX(f,J,Y){let z=J+Y;if(f.startsWith("~")){let G=kQ.homedir();if(z===G)return"~";if(z.startsWith(`${G}/`))return`~${z.slice(G.length)}`}return z}var SQ=()=>{};import{spawn as ib}from"child_process";import*as Sz from"fs";import*as dX from"path";function w4(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 h4(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 P4(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=V1(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=dX.join(G,Y);if(Sz.existsSync(q))return F("newTask.error.targetExists",{path:q});return null}function v4(f,J){return dX.join(V1(f.trim()),J.trim())}function m4(f,J){let Y=J.trim();if(!Y)return J;let z=V1(f.trim());if(!z)return J;try{if(!Sz.statSync(z).isDirectory())return J}catch{return J}if(!Sz.existsSync(dX.join(z,Y)))return Y;for(let G=2;G<1000;G++){let X=`${Y}-${G}`;if(!Sz.existsSync(dX.join(z,X)))return X}return Y}function c4(f,J,Y){return new Promise((z)=>{let G="";try{let X=ib("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 n4=N(()=>{ef();SQ()});function O8(f){if(f==="existing")return"clone";if(f==="clone")return"adopt";return"existing"}function A8(f){if(f==="existing")return"adopt";if(f==="clone")return"existing";return"clone"}function d4(f,J){let Y=f.trim();if(J.includes(Y))return"saved";if(Y.startsWith("~"))return"browse";if(Y.includes("/"))return"browse";return"saved"}function Z1(f){return f.replace(/[\r\n]+/g,"")}function g8(f,J="existing"){if(f==="confirm")return"tabs";if(f==="tabs")return"engine";if(f==="engine")return R8(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 R8(f){if(f==="clone")return"cloneUrl";if(f==="adopt")return"adoptFilter";return"repo"}function i4(f,J){let Y=J.trim();if(!Y)return f;return f.filter((z)=>fZ(Y,z.path))}function l4(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 a4(f,J){let Y=J.trim().toLowerCase();if(!Y)return f;return f.filter((z)=>z.toLowerCase().includes(Y))}function $4(f,J){let Y=J.trim().toLowerCase();if(!Y)return f;return f.filter((z)=>z.toLowerCase().includes(Y))}function iX(f,J,Y=lb){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 xJ(f,J){if(J<=0)return 0;return Math.max(0,Math.min(J-1,f))}function p4(f,J,Y){let z=J[Y];if(z)return z;return f.trim()||FJ}var lb=8;var C8=N(()=>{_Q();bQ()});import{TextAttributes as s1}from"@opentui/core";function r4(f){let J=mf(),{theme:Y}=n0(),[z,G]=p("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]=p(q),[B,V]=p("tabs"),[j,K]=p(f.defaultRepo),[L,O]=p(cX(V1(f.defaultRepo.trim()))??FJ),[M,g]=p(!1),[S,a]=p(""),[y,R]=p(f.defaultCloneParent?.trim()?f.defaultCloneParent:"~/"),[C,k]=p(""),[_,z0]=p(!1),[t,Y0]=p(FJ),[T,H0]=p(!1),[r,D0]=p(""),g0=K0(()=>l4(f.defaultRepo,f.savedRepos)),$=K0(()=>d4(j(),g0())),x=K0(()=>L8(j())),e=K0(()=>M8(x().base)),I=K0(()=>F8(e(),x().filter)),G0=K0(()=>a4(g0(),j())),u=K0(()=>$()==="browse"?I():G0()),[P,Z0]=p(0),V0=K0(()=>iX(u(),P())),[B0,b0]=p(!1),w0=K0(()=>E4(V1(j().trim()))),I0=K0(()=>$4(w0(),L())),[r0,v]=p(0),M0=K0(()=>iX(I0(),r0())),J0=K0(()=>L8(y())),F0=K0(()=>M8(J0().base)),$0=K0(()=>F8(F0(),J0().filter)),[_0,u0]=p(0),o0=K0(()=>iX($0(),_0())),[n,q0]=p(!1),[k0,s0]=p(""),[a0,p0]=p(0),[e0,Rf]=p(new Set),[gf]=lZ(()=>z()==="adopt"?V1(j().trim()):null,async(d)=>f.discoverAdoptable?await f.discoverAdoptable(d):[]),o=K0(()=>i4(gf()??[],k0())),f0=K0(()=>iX(o().map((d)=>d.path),a0())),j0=K0(()=>{let d=f0();return o().slice(d.start,d.start+d.items.length)});Gf(()=>{o(),p0((d)=>xJ(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()[a0()];if(d)C0(d.path)}Gf(()=>{I0(),v(0)}),Gf(()=>{let d=V1(j().trim());if(!d)return;if(M())return;let s=cX(d);if(s)O(s)}),Gf(()=>{u(),Z0(0)}),Gf(()=>{$0(),u0(0)}),Gf(()=>{let d=S(),s=y();if(_())return;let S0=w4(d);k(m4(s,S0))});let[P0,U0]=p(null);Gf(()=>{j(),S(),y(),C(),k0(),U0(null)});function E0(){let d=V1(j().trim());if(!d)return;let s=u4(d);if(s){U0(s),V("repo");return}let S0=L().trim()||FJ;f.onSubmit({repo:d,baseRef:S0,vendor:Q()}),J.clear()}async function W0(){if(T())return;let d=h4(S());if(d){U0(d),V("cloneUrl");return}let s=P4(y(),C());if(s){U0(s),V(C().trim()?"cloneParent":"cloneFolder");return}let S0=v4(y(),C());H0(!0),D0(F("newTask.clone.progressInto",{target:S0}));let y0=await c4(S().trim(),S0,(f1)=>{D0(f1)});if(H0(!1),!y0.ok){U0(F("newTask.error.cloneFailed",{error:y0.error})),V("cloneUrl");return}let q1=t().trim()||FJ,K1=V1(y().trim());f.onSubmit({repo:y0.path,baseRef:q1,vendor:Q(),cloned:{parentDir:K1}}),J.clear()}function L0(){let d=o();if(d.length===0){U0(F("newTask.error.noAdoptable"));return}let s=e0(),S0=s.size>0?d.filter((y0)=>s.has(y0.path)):d.slice(a0(),a0()+1);if(S0.length===0)return;f.onSubmit({mode:"adopt",repo:V1(j().trim()),vendor:Q(),adopt:S0.map((y0)=>({worktreePath:y0.path,branch:y0.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(R8(d)),U0(null)}function Yf(d){if(T())return;let s=d===1?O8(z()):A8(z());if(s===z())return;G(s),U0(null),V("tabs")}function d0(d){H((s)=>d===1?HY(X(),s):oQ(X(),s))}function Sf(){if(!j().trim()&&$()==="saved"){let s=u()[0];if(s){K(s),V("baseRef");return}}if($()==="browse"){let S0=I()[P()],y0=x();if(S0){K(nX(j(),y0.base,S0)),Z0(0),b0(!0),V("baseRef");return}V("baseRef");return}let d=u()[P()];if(d){K(d),V("baseRef");return}V("baseRef")}function N0(d){let S0=u()[d];if(!S0)return;if($()==="browse"){let y0=x();K(nX(j(),y0.base,S0)),Z0(d),b0(!0),V("baseRef");return}K(S0),Z0(d),V("baseRef")}function Pf(){let s=$0()[_0()],S0=J0();if(s){R(nX(y(),S0.base,s)),u0(0),q0(!0),V("cloneFolder");return}V("cloneFolder")}function m(d){let S0=$0()[d];if(!S0)return;let y0=J0();R(nX(y(),y0.base,S0)),u0(d),q0(!0),V("cloneFolder")}let A0=()=>{let d=o();if(d.length===0)return;let s=d.every((S0)=>e0().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(O8(z()))},{key:"ctrl+[",cmd:()=>Jf(A8(z()))},{key:"ctrl+e",cmd:()=>H((d)=>HY(X(),d))},{key:"up",cmd:()=>{if(T())return;if(z()==="existing"&&B()==="repo"){let d=u();if(d.length===0)return;Z0(xJ(P()-1,d.length));return}if(z()==="existing"&&B()==="baseRef"){let d=I0();if(d.length===0)return;v(xJ(r0()-1,d.length));return}if(z()==="clone"&&B()==="cloneParent"){let d=$0();if(d.length===0)return;u0(xJ(_0()-1,d.length));return}if(z()==="adopt"){let d=o();if(d.length===0)return;p0(xJ(a0()-1,d.length))}}},{key:"down",cmd:()=>{if(T())return;if(z()==="existing"&&B()==="repo"){let d=u();if(d.length===0)return;Z0(xJ(P()+1,d.length));return}if(z()==="existing"&&B()==="baseRef"){let d=I0();if(d.length===0)return;v(xJ(r0()+1,d.length));return}if(z()==="clone"&&B()==="cloneParent"){let d=$0();if(d.length===0)return;u0(xJ(_0()+1,d.length));return}if(z()==="adopt"){let d=o();if(d.length===0)return;p0(xJ(a0()+1,d.length))}}},...B()==="tabs"||B()==="engine"?[{key:"left",cmd:()=>B()==="tabs"?Yf(-1):d0(-1)},{key:"right",cmd:()=>B()==="tabs"?Yf(1):d0(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 Wf=(d)=>B()===d?Y.primary:Y.textMuted,Of=(d)=>B()===d?s1.BOLD|s1.UNDERLINE:void 0,Qf=(d,s)=>d?s?s1.BOLD|s1.UNDERLINE:s1.BOLD:void 0;return(()=>{var d=W("box"),s=W("box"),S0=W("text"),y0=W("box"),q1=W("box"),K1=W("text"),f1=W("box"),m1=W("box"),wJ=W("text"),F1=W("box"),hJ=W("text"),qY=W("text");return D(d,s),D(d,y0),D(d,F1),Z(d,"paddingLeft",2),Z(d,"paddingRight",2),Z(d,"gap",0),D(s,S0),Z(s,"flexDirection","row"),U(S0,()=>F("newTask.title")),D(y0,q1),Z(y0,"gap",1),Z(y0,"paddingTop",1),Z(y0,"paddingBottom",1),U(y0,()=>{let c=()=>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")),U(w,(()=>{var O0=T0(()=>z()==="existing");return()=>O0()?`\u25B8 ${F("newTask.tabs.existing")}`:` ${F("newTask.tabs.existing")}`})()),Z(m0,"onMouseUp",()=>Jf("clone")),U(m0,(()=>{var O0=T0(()=>z()==="clone");return()=>O0()?`\u25B8 ${F("newTask.tabs.clone")}`:` ${F("newTask.tabs.clone")}`})()),Z(v0,"onMouseUp",()=>Jf("adopt")),U(v0,(()=>{var O0=T0(()=>z()==="adopt");return()=>O0()?`\u25B8 ${F("newTask.tabs.adopt")}`:` ${F("newTask.tabs.adopt")}`})()),E((O0)=>{var c0=i(z()==="existing"),qf=Qf(z()==="existing",c()),Df=i(z()==="clone"),Q1=Qf(z()==="clone",c()),e1=i(z()==="adopt"),QY=Qf(z()==="adopt",c());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)),e1!==O0.i&&(O0.i=Z(v0,"fg",e1,O0.i)),QY!==O0.n&&(O0.n=Z(v0,"attributes",QY,O0.n)),O0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),l})()},q1),D(q1,K1),D(q1,f1),Z(q1,"gap",0),U(K1,()=>F("newTask.field.engine")),D(f1,m1),D(f1,wJ),Z(f1,"flexDirection","row"),Z(f1,"gap",2),U(f1,b(Zf,{get each(){return X()},children:(c)=>{let i=()=>Q()===c;return(()=>{var l=W("text");return Z(l,"onMouseUp",()=>H(c)),U(l,()=>i()?"\u25B8 ":" ",null),U(l,c,null),E((w)=>{var m0=i()?Y.primary:Y.textMuted,v0=i()?s1.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})()}}),m1),Z(m1,"flexGrow",1),U(wJ,()=>F("newTask.hint.engineCycle")),U(y0,b(X0,{get when(){return z()==="existing"},get children(){return[(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),Z(c,"gap",0),U(i,()=>F("newTask.field.repo")),Z(l,"onInput",(w)=>{b0(!1),K(Z1(w))}),Z(l,"onSubmit",()=>{if(!j().trim())return;Sf()}),E((w)=>{var m0=Wf("repo"),v0=Of("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}),c})(),b(X0,{get when(){return T0(()=>B()==="repo"&&u().length>0)()&&!B0()},get children(){var c=W("box");return Z(c,"gap",0),Z(c,"paddingLeft",2),U(c,b(X0,{get when(){return V0().start>0},get children(){var i=W("text");return Z(i,"wrapMode","none"),U(i,()=>F("newTask.picker.moreAbove",{count:V0().start})),E((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),U(c,b(Zf,{get each(){return V0().items},children:(i,l)=>{let w=()=>V0().start+l(),m0=()=>w()===P(),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",()=>N0(w())),U(Df,()=>m0()?"\u25B8 ":" ",null),U(Df,i,null),U(Df,c0,null),U(Df,qf,null),E((Q1)=>{var e1=m0()?Y.primary:O0()?Y.accent:Y.textMuted,QY=m0()?s1.BOLD:void 0;return e1!==Q1.e&&(Q1.e=Z(Df,"fg",e1,Q1.e)),QY!==Q1.t&&(Q1.t=Z(Df,"attributes",QY,Q1.t)),Q1},{e:void 0,t:void 0}),Df})()}}),null),U(c,b(X0,{get when(){return V0().start+V0().items.length<V0().total},get children(){var i=W("text");return Z(i,"wrapMode","none"),U(i,()=>F("newTask.picker.moreBelow",{count:V0().total-V0().start-V0().items.length})),E((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),c}}),(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),Z(c,"gap",0),U(i,()=>F("newTask.field.fromBranch")),Z(l,"placeholder",FJ),Z(l,"onInput",(w)=>{g(!0),O(Z1(w))}),Z(l,"onSubmit",()=>{O(p4(L(),I0(),r0())),g(!0),E0()}),E((w)=>{var m0=Wf("baseRef"),v0=Of("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}),c})(),b(X0,{get when(){return T0(()=>B()==="baseRef"&&I0().length===0)()&&P0()==null},get children(){var c=W("box"),i=W("text");return D(c,i),Z(c,"gap",0),Z(c,"paddingLeft",2),Z(c,"paddingBottom",1),Z(i,"wrapMode","none"),U(i,(()=>{var l=T0(()=>w0().length===0);return()=>l()?F("newTask.hint.noBranchesFound"):F("newTask.hint.noMatchBranch")})()),E((l)=>Z(i,"fg",Y.textMuted,l)),c}}),b(X0,{get when(){return T0(()=>B()==="baseRef")()&&I0().length>0},get children(){var c=W("box");return Z(c,"gap",0),Z(c,"paddingLeft",2),Z(c,"paddingBottom",1),U(c,b(X0,{get when(){return M0().start>0},get children(){var i=W("text");return Z(i,"wrapMode","none"),U(i,()=>F("newTask.picker.moreAbove",{count:M0().start})),E((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),U(c,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),g(!0),v(w()),V("confirm")}),U(O0,()=>m0()?"\u25B8 ":" ",null),U(O0,i,null),E((c0)=>{var qf=m0()?Y.primary:v0()?Y.accent:Y.textMuted,Df=m0()?s1.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),U(c,b(X0,{get when(){return M0().start+M0().items.length<M0().total},get children(){var i=W("text");return Z(i,"wrapMode","none"),U(i,()=>F("newTask.picker.moreBelow",{count:M0().total-M0().start-M0().items.length})),E((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),c}})]}}),null),U(y0,b(X0,{get when(){return z()==="clone"},get children(){return[(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),Z(c,"gap",0),U(i,()=>F("newTask.field.gitUrl")),Z(l,"placeholder","https://github.com/user/repo.git"),Z(l,"onInput",(w)=>a(Z1(w))),Z(l,"onSubmit",()=>{if(!S().trim())return;V("cloneParent")}),E((w)=>{var m0=Wf("cloneUrl"),v0=Of("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}),c})(),(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),Z(c,"gap",0),U(i,()=>F("newTask.field.parentDir")),Z(l,"placeholder","~/"),Z(l,"onInput",(w)=>{q0(!1),R(Z1(w))}),Z(l,"onSubmit",()=>Pf()),E((w)=>{var m0=Wf("cloneParent"),v0=Of("cloneParent"),O0=y(),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}),c})(),b(X0,{get when(){return B()==="cloneParent"},get children(){var c=W("box"),i=W("text");return D(c,i),Z(c,"paddingLeft",2),Z(i,"wrapMode","none"),U(i,()=>F("newTask.hint.remembered")),E((l)=>Z(i,"fg",Y.textMuted,l)),c}}),b(X0,{get when(){return T0(()=>B()==="cloneParent"&&$0().length>0)()&&!n()},get children(){var c=W("box");return Z(c,"gap",0),Z(c,"paddingLeft",2),U(c,b(X0,{get when(){return o0().start>0},get children(){var i=W("text");return Z(i,"wrapMode","none"),U(i,()=>F("newTask.picker.moreAbove",{count:o0().start})),E((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),U(c,b(Zf,{get each(){return o0().items},children:(i,l)=>{let w=()=>o0().start+l(),m0=()=>w()===_0();return(()=>{var v0=W("text"),O0=x0("/");return D(v0,O0),Z(v0,"wrapMode","none"),Z(v0,"onMouseUp",()=>m(w())),U(v0,()=>m0()?"\u25B8 ":" ",O0),U(v0,i,O0),E((c0)=>{var qf=m0()?Y.primary:Y.textMuted,Df=m0()?s1.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),U(c,b(X0,{get when(){return o0().start+o0().items.length<o0().total},get children(){var i=W("text");return Z(i,"wrapMode","none"),U(i,()=>F("newTask.picker.moreBelow",{count:o0().total-o0().start-o0().items.length})),E((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),c}}),(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),Z(c,"gap",0),U(i,()=>F("newTask.field.folderName")),Z(l,"onInput",(w)=>{z0(!0),k(Z1(w))}),Z(l,"onSubmit",()=>V("cloneBaseRef")),E((w)=>{var m0=Wf("cloneFolder"),v0=Of("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}),c})(),(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),Z(c,"gap",0),U(i,()=>F("newTask.field.baseBranch")),Z(l,"placeholder",FJ),Z(l,"onInput",(w)=>Y0(Z1(w))),Z(l,"onSubmit",()=>void W0()),E((w)=>{var m0=Wf("cloneBaseRef"),v0=Of("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}),c})(),b(X0,{get when(){return T()},get children(){var c=W("box"),i=W("text");return D(c,i),Z(c,"gap",0),Z(c,"paddingLeft",2),Z(i,"wrapMode","none"),U(i,()=>r()||F("newTask.clone.progressFallback")),E((l)=>Z(i,"fg",Y.textMuted,l)),c}})]}}),null),U(y0,b(X0,{get when(){return z()==="adopt"},get children(){return[(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),Z(c,"gap",0),U(i,()=>F("newTask.field.adoptFilter")),Z(l,"onInput",(w)=>s0(Z1(w))),Z(l,"onSubmit",()=>A()),E((w)=>{var m0=Wf("adoptFilter"),v0=Of("adoptFilter"),O0=k0(),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}),c})(),(()=>{var c=W("box"),i=W("text");return D(c,i),Z(c,"paddingLeft",2),Z(i,"wrapMode","none"),U(i,()=>F("newTask.adopt.repoLine",{path:V1(j().trim())||F("newTask.adopt.repoNone")})),E((l)=>Z(i,"fg",Y.textMuted,l)),c})(),b(X0,{get when(){return gf.loading},get children(){var c=W("box"),i=W("text");return D(c,i),Z(c,"paddingLeft",2),Z(i,"wrapMode","none"),U(i,()=>F("newTask.hint.scanningWorktrees")),E((l)=>Z(i,"fg",Y.textMuted,l)),c}}),b(X0,{get when(){return T0(()=>!gf.loading)()&&o().length===0},get children(){var c=W("box"),i=W("text");return D(c,i),Z(c,"paddingLeft",2),Z(i,"wrapMode","none"),U(i,(()=>{var l=T0(()=>(gf()??[]).length===0);return()=>l()?F("newTask.adopt.noUnlinked"):F("newTask.adopt.noMatch")})()),E((l)=>Z(i,"fg",Y.textMuted,l)),c}}),b(X0,{get when(){return o().length>0},get children(){var c=W("box"),i=W("text");return D(c,i),Z(c,"gap",0),Z(c,"paddingLeft",2),U(c,b(X0,{get when(){return f0().start>0},get children(){var l=W("text");return Z(l,"wrapMode","none"),U(l,()=>F("newTask.picker.moreAbove",{count:f0().start})),E((w)=>Z(l,"fg",Y.textMuted,w)),l}}),i),U(c,b(Zf,{get each(){return j0()},children:(l,w)=>{let m0=()=>f0().start+w(),v0=()=>m0()===a0(),O0=()=>e0().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",()=>{p0(m0()),C0(l.path)}),U(qf,()=>v0()?"\u25B8 ":" ",null),U(qf,()=>O0()?"[x] ":"[ ] ",null),U(qf,()=>l.branch,null),U(qf,(()=>{var Df=T0(()=>!!c0());return()=>Df()?` (${c0()})`:""})(),null),E((Df)=>{var Q1=v0()?Y.primary:O0()?Y.accent:Y.textMuted,e1=v0()?s1.BOLD:void 0;return Q1!==Df.e&&(Df.e=Z(qf,"fg",Q1,Df.e)),e1!==Df.t&&(Df.t=Z(qf,"attributes",e1,Df.t)),Df},{e:void 0,t:void 0}),qf})()}}),i),U(c,b(X0,{get when(){return f0().start+f0().items.length<f0().total},get children(){var l=W("text");return Z(l,"wrapMode","none"),U(l,()=>F("newTask.picker.moreBelow",{count:f0().total-f0().start-f0().items.length})),E((w)=>Z(l,"fg",Y.textMuted,w)),l}}),i),Z(i,"wrapMode","none"),U(i,(()=>{var l=T0(()=>e0().size>0);return()=>l()?F("newTask.adopt.hintSelected",{count:e0().size}):F("newTask.adopt.hintDefault")})()),E((l)=>Z(i,"fg",Y.textMuted,l)),c}})]}}),null),U(y0,b(X0,{get when(){return P0()},get children(){var c=W("text"),i=x0("\u203B ");return D(c,i),Z(c,"wrapMode","word"),U(c,P0,null),E((l)=>Z(c,"fg",Y.error,l)),c}}),null),D(F1,hJ),D(F1,qY),Z(F1,"flexDirection","row"),Z(F1,"justifyContent","space-between"),Z(F1,"alignItems","center"),Z(F1,"paddingTop",1),Z(F1,"paddingBottom",1),U(hJ,()=>F("newTask.hint.legend")),Z(qY,"onMouseUp",()=>R0()),U(qY,(()=>{var c=T0(()=>!!T());return()=>c()?F("newTask.button.cloning"):T0(()=>B()==="confirm")()?F("newTask.button.createFocused"):F("newTask.button.create")})()),E((c)=>{var i=s1.BOLD,l=Y.text,w=Wf("engine"),m0=Of("engine"),v0=Y.textMuted,O0=Y.textMuted,c0=B()==="confirm"?Y.primary:Y.text,qf=B()==="confirm"?s1.BOLD:void 0;return i!==c.e&&(c.e=Z(S0,"attributes",i,c.e)),l!==c.t&&(c.t=Z(S0,"fg",l,c.t)),w!==c.a&&(c.a=Z(K1,"fg",w,c.a)),m0!==c.o&&(c.o=Z(K1,"attributes",m0,c.o)),v0!==c.i&&(c.i=Z(wJ,"fg",v0,c.i)),O0!==c.n&&(c.n=Z(hJ,"fg",O0,c.n)),c0!==c.s&&(c.s=Z(qY,"fg",c0,c.s)),qf!==c.h&&(c.h=Z(qY,"attributes",qf,c.h)),c},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),d})()}var _4=N(()=>{h();h();h();h();h();h();h();h();ef();U1();Bf();hf();bQ();S1();SQ();v1();n4();C8()});function ab(f,J,Y,z){return new Promise((G)=>{f.replace(()=>b(r4,{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 IQ;var IG=N(()=>{h();_4();C8();IQ={show:ab}});function o4(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 s4}from"@opentui/core";function $b(f){let J=mf(),{theme:Y}=n0(),[z,G]=p("prompt"),[X,q]=p(""),[Q,H]=p(f.defaultVendor),[B,V]=p(f.defaultBaseRef);function j(M){let g=TQ.indexOf(z());G(TQ[(g+M+TQ.length)%TQ.length]??"prompt")}function K(M){let g=f.engines;if(g.length===0)return;if(M>0){H((a)=>HY(g,a));return}let S=Math.max(0,g.indexOf(Q()));H(g[(S-1+g.length)%g.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:o4(z(),{cycleField:j,stepEngine:K,commit:L})}));let O=(M)=>z()===M?Y.accent:Y.textMuted;return(()=>{var M=W("box"),g=W("box"),S=W("text"),a=W("text"),y=W("box"),R=W("text"),C=W("input"),k=W("box"),_=W("text"),z0=W("box"),t=W("text"),Y0=W("input"),T=W("box"),H0=W("text");return D(M,g),D(M,y),D(M,k),D(M,z0),D(M,T),Z(M,"paddingLeft",2),Z(M,"paddingRight",2),Z(M,"gap",1),D(g,S),D(g,a),Z(g,"flexDirection","row"),Z(g,"justifyContent","space-between"),U(S,()=>F("quickTask.title",{repoLabel:f.repoLabel})),Z(a,"onMouseUp",()=>f.onCancel()),U(a,()=>F("quickTask.esc")),D(y,R),D(y,C),Z(y,"gap",0),U(R,()=>F("quickTask.promptLabel")),Z(C,"onInput",(r)=>q(Z1(r))),Z(C,"onSubmit",()=>L()),D(k,_),Z(k,"flexDirection","row"),Z(k,"gap",2),U(_,()=>F("quickTask.engineLabel")),U(k,b(Zf,{get each(){return f.engines},children:(r)=>(()=>{var D0=W("text");return Z(D0,"onMouseUp",()=>{H(r),G("engine")}),U(D0,()=>f.engineLabel(r)),E((g0)=>{var $=Q()===r?Y.primary:Y.textMuted,x=Q()===r?s4.BOLD:void 0;return $!==g0.e&&(g0.e=Z(D0,"fg",$,g0.e)),x!==g0.t&&(g0.t=Z(D0,"attributes",x,g0.t)),g0},{e:void 0,t:void 0}),D0})()}),null),D(z0,t),D(z0,Y0),Z(z0,"gap",0),U(t,()=>F("quickTask.branchLabel")),Z(Y0,"onInput",(r)=>V(Z1(r))),Z(Y0,"onSubmit",()=>L()),D(T,H0),Z(T,"paddingBottom",1),U(H0,()=>F("quickTask.legend")),E((r)=>{var D0=s4.BOLD,g0=Y.text,$=Y.textMuted,x=O("prompt"),e=X(),I=F("quickTask.promptPlaceholder"),G0=z()==="prompt",u=O("engine"),P=O("branch"),Z0=B(),V0=f.defaultBaseRef,B0=z()==="branch",b0=Y.textMuted;return D0!==r.e&&(r.e=Z(S,"attributes",D0,r.e)),g0!==r.t&&(r.t=Z(S,"fg",g0,r.t)),$!==r.a&&(r.a=Z(a,"fg",$,r.a)),x!==r.o&&(r.o=Z(R,"fg",x,r.o)),e!==r.i&&(r.i=Z(C,"value",e,r.i)),I!==r.n&&(r.n=Z(C,"placeholder",I,r.n)),G0!==r.s&&(r.s=Z(C,"focused",G0,r.s)),u!==r.h&&(r.h=Z(_,"fg",u,r.h)),P!==r.r&&(r.r=Z(t,"fg",P,r.r)),Z0!==r.d&&(r.d=Z(Y0,"value",Z0,r.d)),V0!==r.l&&(r.l=Z(Y0,"placeholder",V0,r.l)),B0!==r.u&&(r.u=Z(Y0,"focused",B0,r.u)),b0!==r.c&&(r.c=Z(H0,"fg",b0,r.c)),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}),M})()}function pb(f,J){return new Promise((Y)=>{f.replace(()=>b($b,x6(J,{onSubmit:(z)=>Y(z),onCancel:()=>Y(void 0)})),()=>Y(void 0)),f.setSize("medium")})}var TQ,t4;var e4=N(()=>{h();h();h();h();h();h();h();Bf();U1();hf();ef();S1();v1();IG();TQ=["prompt","engine","branch"];t4={show:pb}});async function fD(f={}){let J=f.logTag??"orch-connect",Y=f.connect??o1,z=null;try{let G=await Y();if(!G)return iJ(J,"no daemon running \u2014 caller degrades"),null;return z=new W1(G,{...f.orchestratorOptions,channels:f.channels}),await z.init(),z}catch(G){return d1(J,G),z?.dispose(),null}}var JD=N(()=>{sY();L1();PY()});function YD(f){let[J,Y]=p(f.initial??"sidebar"),[z,G]=p(0),X=G1();function q(j){if(G((L)=>L+1),J()===j)return;let K=X?.currentFocusedRenderable;if(K&&!K.isDestroyed)try{K.blur()}catch{}Y(j)}function Q(j){let L=(uQ.indexOf(J())+j+uQ.length)%uQ.length;q(uQ[L])}let H=new Map;function B(j){let K=H.get(j);if(!K)K=()=>J()===j,H.set(j,K);return K}let V={focused:J,is:B,setFocused:q,cycle:Q,refocusTick:z};return b(rb.Provider,{value:V,get children(){return f.children}})}var uQ,rb;var zD=N(()=>{h();h();Bf();uQ=["sidebar","workspace","files","terminal"],rb=NJ(null)});function GD(){for(let f of vY){let J=_b.get(f.id);if(!J)continue;let Y=f;Y.keys=[...J.keys],Y.hint=J.hint?{...J.hint}:void 0}}function XD(){ob((f)=>f+1)}function y8(f){return sb.get(f)}function tb(f){return y8(f)?.keys??[]}function mY(f){let J=[];for(let Y in f){let z=f[Y];if(!z)continue;let G=tb(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,_b,N8,ob,sb;var TG=N(()=>{Bf();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"}}],_b=new Map(vY.map((f)=>[f.id,{keys:[...f.keys],hint:f.hint?{...f.hint}:void 0}]));[N8,ob]=p(0);sb=new Map(vY.map((f)=>[f.id,f]))});function EQ(){if(cY)return cY;let f=Rq();if(!f.exists)return cY={path:f.path,exists:!1,applied:[],warnings:[]},cY;let J=[...f.warnings],Y=Nq(f.doc,process.platform,{chordOptsFor:oB});J.push(...Y.warnings);let z=Y.entries.filter((Q)=>Q.id.startsWith("tmux.")),G=Y.entries.filter((Q)=>!Q.id.startsWith("tmux.")),X=e7(vY,G);J.push(...X.warnings);let q=[...X.applied];if(z.length>0){let Q=_B(z);J.push(...Q.warnings);for(let H of Q.overridden){if(H===IJ){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?`${qG(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 ZD(){return cY??EQ()}function qD(){cY=null,t7(),z5(),GD();let f=EQ();return XD(),f}var cY=null;var b8=N(()=>{pB();kq();yq();TG()});var eb=250,uG,QD;var lX=N(()=>{yG();rY();q8();({use:uG,provider:QD}=CQ({name:"KV",init:()=>{let[f,J]=EJ(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 pY(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")},eb)}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{h9({})}catch(Q){console.error("[kobe] kv clear write failed:",Q)}}};return q}}))});var xQ="../pulse-n3cq1btw.wav";var HD=()=>{};import{existsSync as Jk,mkdirSync as Yk}from"fs";import{tmpdir as zk}from"os";import{basename as Gk,isAbsolute as Xk,join as k8,resolve as Zk}from"path";function Qk(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 Hk(){if(wQ!==void 0)return wQ;let J=(process.env.PATH??"").split(":").filter(Boolean);return wQ=qk.find((Y)=>J.some((z)=>Jk(k8(z,Y))))??null,wQ}async function Bk(){return WD??=(async()=>{Yk(jD,{recursive:!0});let f=k8(jD,Gk(BD)),J=Bun.file(f);if(await J.exists())return f;return await Bun.write(J,Bun.file(BD)),f})(),WD}function VD(f=0.4){let J=Hk();if(!J)return;Bk().then((Y)=>{try{Bun.spawn(Qk(J,Y,f),{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).unref?.()}catch{}}).catch(()=>{return})}var BD,jD,qk,wQ,WD;var KD=N(()=>{HD();BD=Xk(xQ)?xQ:Zk(import.meta.dir,xQ),jD=k8(zk(),"kobe-sfx"),qk=["ffplay","mpv","mpg123","mpg321","mplayer","afplay","play","omxplayer","aplay","cmdmp3","cvlc","powershell.exe"]});function UD(f,J){return`${f}:${J}`}function LD(f){let J=uG(),[Y,z]=p([]),[G,X]=p(new Map),q=yQ(),Q=0;function H(K){if(X((L)=>{let O=new Map(L),M=UD(K.taskId,K.tabId),g=L.get(M);if(g==="needs_input"||g==="error")return L;return O.set(M,K.kind),O}),J.get("notifications.sound.enabled",!0)!==!1){try{process.stdout.write("\x07")}catch{}VD()}if(J.get("notifications.toast.enabled",!0)!==!1){let L=++Q,O={id:L,kind:K.kind,taskId:K.taskId,tabId:K.tabId,title:K.title};z((M)=>[...M,O]),q.set(()=>B(L),jk)}}function B(K){z((L)=>L.filter((O)=>O.id!==K))}function V(K,L){X((O)=>{let M=UD(K,L);if(!O.has(M))return O;let g=new Map(O);return g.delete(M),g})}let j={toasts:Y,unread:G,notify:H,dismiss:B,markRead:V};return b(DD.Provider,{value:j,get children(){return f.children}})}function hQ(){let f=u1(DD);if(!f)throw Error("useNotifications must be used within a NotificationsProvider");return f}var jk=4500,DD;var PQ=N(()=>{h();Bf();U8();KD();lX();DD=NJ()});function S8(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=Vk(J.focusAccent);if(Y&&Y!==f.focusAccent())f.setFocusAccent(Y)}}function Vk(f){if(f===null)return"primary";return Wk.includes(f)?f:null}var Wk;var MD=N(()=>{Wk=["primary","success","info"]});import{readFileSync as Kk}from"fs";function FD(f){try{let J=JSON.parse(Kk(c1(),"utf8")),Y=typeof J.activeTheme==="string"&&PX(J.activeTheme)?J.activeTheme:f,z=J.transparentBackground===!0,G=typeof J.focusAccent==="string"&&bz.includes(J.focusAccent)?J.focusAccent:null,X=vX(J[vQ])?J[vQ]:kG;return{theme:Y,transparent:z,focusAccent:G,locale:X}}catch{return{theme:f,transparent:!1,focusAccent:null,locale:kG}}}var vQ="locale";var I8=N(()=>{af();hf();SG()});function Dk(f){if(f)VZ(f);fW(),EQ();for(let{name:J,theme:Y}of LX())H8(J,Y)}function Lk(f){let J={backgroundColor:"transparent",externalOutputMode:"passthrough",exitOnCtrlC:!1,screenMode:"alternate-screen",useKittyKeyboard:{}};return f?{...J,onDestroy:f}:J}function Mk(f){let J=()=>f.children,Y=()=>f.notifications?b(LD,{get children(){return J()}}):J(),z=()=>b(S4,{get children(){return Y()}}),G=()=>f.focus?b(YD,{initial:"sidebar",get children(){return z()}}):z(),X=()=>f.kv?b(QD,{get children(){return G()}}):G();return b(r6,{mode:"dark",get theme(){return f.theme},get children(){return X()}})}function Fk(f){let{theme:J}=n0();return _f(()=>d1("pane-crash",f.error)),(()=>{var Y=W("box"),z=W("text"),G=W("text");return D(Y,z),D(Y,G),Z(Y,"flexDirection","column"),Z(Y,"flexGrow",1),Z(Y,"paddingLeft",1),Z(Y,"paddingTop",1),Z(Y,"gap",1),U(z,()=>F("common.paneCrash.title")),U(G,()=>F("common.paneCrash.hint")),E((X)=>{var{background:q,error:Q,textMuted:H}=J;return q!==X.e&&(X.e=Z(Y,"backgroundColor",q,X.e)),Q!==X.t&&(X.t=Z(z,"fg",Q,X.t)),H!==X.a&&(X.a=Z(G,"fg",H,X.a)),X},{e:void 0,t:void 0,a:void 0}),Y})()}function Ok(f){let J=n0(),Y={selectedTheme:()=>J.selected,hasTheme:(Q)=>J.has(Q),setTheme:(Q)=>J.set(Q),reloadUserThemes:()=>{for(let{name:Q,theme:H}of LX())H8(Q,H)},transparentBackground:()=>J.transparentBackground,setTransparentBackground:(Q)=>J.setTransparentBackground(Q),focusAccent:()=>J.focusAccent,setFocusAccent:(Q)=>J.setFocusAccent(Q)};S8(Y,{theme:f.boot.theme,transparentBackground:f.boot.transparent,focusAccent:f.boot.focusAccent}),mX(f.boot.locale);let[z,G]=p(null),X=!1;_f(()=>{(async()=>{let Q=await fD({logTag:"ui-prefs",channels:["ui-prefs","keybindings"]});if(!Q)return;if(X){Q.dispose();return}G(Q)})()}),Gf(()=>{let Q=z()?.uiPrefsSignal()();if(!Q)return;if(S8(Y,Q),vX(Q.locale))mX(Q.locale)});let q=null;return Gf(()=>{let Q=z()?.keybindingsRevSignal()();if(Q==null)return;if(q===null||Q===q){q=Q;return}q=Q,qD()}),yf(()=>{X=!0,z()?.dispose()}),null}async function M1(f){Dk(f.logContext);let J=FD(Uk),Y=await f.setup(J),z=f.providers?.kv??!0,G=f.providers?.focus??!0,X=f.providers?.notifications??!1;await n6(()=>b(Mk,{get theme(){return J.theme},kv:z,focus:G,notifications:X,get children(){return[b(Ok,{boot:J}),b(gV,{fallback:(q)=>b(Fk,{error:q}),get children(){return Y.root()}})]}}),Lk(Y.onDestroy))}var Uk="claude";var nY=N(()=>{h();h();h();h();h();h();h();sY();Bf();JD();zD();b8();lX();PQ();hf();uq();ef();v1();MD();I8()});async function T8(f,J,Y,z,G={}){let X=Lf(J.id);if(await jf(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(() => (z1(),_1)),{resolveEngineLaunchInit:H}=await Promise.resolve().then(() => (XG(),$B)),B=H(Y,q,{kind:G.includeInitPrompt?"repo-init":"none"});if(!await Q({name:X,cwd:q,command:k1(z),taskId:J.id,vendor:z,repo:Y,launchInit:B}))throw Error(`failed to start tmux session for ${J.id}`);return!1}async function mQ(f,J,Y,z,G={}){await T8(f,J,Y,z,G),await f.setActiveTask(J.id).catch(()=>{});let{prepareWindowForSwitch:X}=await Promise.resolve().then(() => (z1(),_1));await X(Lf(J.id)),await h0(["switch-client","-t",`=${Lf(J.id)}`])}var u8=N(()=>{x1();Ef()});var OD={};Hf(OD,{startNewTaskHost:()=>Ak,NewTaskPage:()=>cQ});function cQ(f){let{theme:J}=n0(),Y=mf();_f(()=>{z()});async function z(){let G=O1(),X=f.defaultRepo||G[0]||process.cwd(),q=bf("lastSelectedVendor")??Tf,Q=await lJ(),H=f.orchestrator,B=await IQ.show(Y,X,G,{defaultVendor:q,availableVendors:Q,discoverAdoptable:H?(j)=>H.discoverAdoptableWorktrees(j):void 0});if(!B)process.exit(0);if($f("lastSelectedVendor",B.vendor),mJ(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 mQ(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),E((X)=>Z(G,"backgroundColor",J.background,X)),G})()}async function Ak(f){await M1({setup:async()=>{let J=null;try{let Y=await DJ(),z=new W1(Y);await z.init(),J=z}catch(Y){console.error("[kobe new-task] daemon unavailable; cannot create task:",Y)}return{root:()=>b(cQ,{get defaultRepo(){return f.defaultRepo},orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var E8=N(()=>{h();h();h();h();L1();Bf();PY();tY();Af();I1();IG();hf();nY();u8();v1()});function nQ(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 AD(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 gk(f,J){let Y=J==="archived";return f.filter((z)=>z.archived===Y)}function x8(f,J,Y,z="default",G){let X=gk(f,J),q=Y?.trim()??"",Q=G?t1(G):null,H=q?X.filter((M)=>AD(q,`${M.title} ${OJ(M.repo)}`)):X,B=[],V=[],j=[],K=new Set;for(let M of H){if(M.kind==="main"){let g=t1(M.repo);if(K.has(g))continue;K.add(g),B.push(M);continue}if(Q&&t1(M.repo)!==Q)continue;if(M.pinned===!0)V.push(M);else j.push(M)}if(B.sort((M,g)=>OJ(M.repo).localeCompare(OJ(g.repo))),z==="recent")V.sort(gD),j.sort(gD);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 gD(f,J){let Y=RD(J)-RD(f);if(Y!==0)return Y;return String(J.id).localeCompare(String(f.id))}function RD(f){let J=Date.parse(f.updatedAt||f.createdAt);return Number.isFinite(J)?J:0}function OJ(f){let J=f.split("/").filter(Boolean);return J[J.length-1]??f}function t1(f){return f.trim().replace(/[\\/]+$/,"")||f}function Rk(f,J){let Y=OJ(f);if(!J.some((G)=>G!==f&&OJ(G)===Y))return Y;return f.replace(/[\\/]+$/,"").split(/[\\/]+/).slice(-2).join("/")}function CD(f,J){let Y=J==="archived",z=new Map;for(let X of f){let q=t1(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:Rk(X.repo,G),count:X.count})).sort((X,q)=>X.label.localeCompare(q.label))}function ND(f,J){if(f.length===0)return-1;if(!J)return f[0]?.flatIndex??-1;let Y=t1(J),z=f.find((X)=>X.task.kind!=="main"&&t1(X.task.repo)===Y);if(z)return z.flatIndex;return f.find((X)=>X.task.kind==="main"&&t1(X.task.repo)===Y)?.flatIndex??f[0]?.flatIndex??-1}function w8(f){return f.map((J)=>J.task.id)}function yD(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 Ck(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 bD(f,J){return nQ(f,J,(Y)=>Y.task.id,(Y,z)=>Y.flatIndex===z.flatIndex&&Ck(Y.task,z.task),{samePosition:!0})}var dQ=()=>{};var kD={};Hf(kD,{startQuickTaskHost:()=>kk});async function Nk(f,J){let Y,z;if(J){let j=await y1(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)??O1()[0],X=G??z??process.cwd();if(!G)return{ctx:null,fallbackRepo:X};let q=await lJ(),Q=bf("lastSelectedVendor")??Tf,H=q.length===0||q.includes(Q)?Q:q[0]??Q,B=cX(V1(G))??FJ,V=q.length>0?q:[H];return{ctx:{repo:G,vendor:H,baseRef:B,engines:V},fallbackRepo:X}}async function yk(f,J,Y,z,G){let X=await T8(f,J,Y,z),q=Lf(J.id),{pane:Q}=await UX(q,!X);if(Q)await DX(Q,G)}function bk(f){let{theme:J}=n0(),Y=mf();_f(()=>{z()});async function z(){let G=f.ctx,X=await t4.show(Y,{repoLabel:OJ(G.repo),engines:G.engines,defaultVendor:G.vendor,defaultBaseRef:G.baseRef,engineLabel:Vz});if(X===void 0)process.exit(0);$f("lastSelectedVendor",X.vendor),mJ(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 yk(q,Q,G.repo,X.vendor,X.prompt),await mQ(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),E((X)=>Z(G,"backgroundColor",J.background,X)),G})()}async function kk(f){await M1({setup:async()=>{let J=null;try{let G=await DJ(),X=new W1(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 Nk(J,f.session);return{root:()=>Y?b(bk,{ctx:Y,orchestrator:J}):b(cQ,{defaultRepo:z,orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var SD=N(()=>{h();h();h();h();L1();Bf();PY();tY();x1();Af();Ef();Sq();I1();e4();hf();bQ();nY();SQ();u8();E8();dQ();v1()});function lQ(f){let J=f.trim().split(/\s+/).pop()??"",Y=/^([CM])-(.+)$/.exec(J);if(!Y)return null;let z=Y[1]==="C"?"\u2303":"\u2325",G=Y[2]??"";return`${z}${G.length===1?G.toUpperCase():G}`}function iQ(f,J){if(f.includes("/"))return f.split("/").map((G)=>iQ(G,J)).join("/");let Y=f.toLowerCase();if(Y==="tab")return"tab";let z=Ik[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 EG(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("+")?EG(Q,J):iQ(Q,!0)}`}let G=Y.split("+");if(G.length===1)return iQ(G[0]??"",!1);let X=G[G.length-1]??"";return`${G.slice(0,-1).map((Q)=>Sk[Q.toLowerCase().trim()]??Q).join("")} ${iQ(X,!0)}`}var Sk,Ik;var h8=N(()=>{Sk={ctrl:"\u2303",control:"\u2303",alt:"\u2325",opt:"\u2325",option:"\u2325",shift:"\u21E7",cmd:"\u2318",command:"\u2318",meta:"\u2318",super:"\u2318"},Ik={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 ID}from"@opentui/core";function Tk(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 xG(f={}){let J=mf(),{theme:Y}=n0(),z=()=>Tk(vY),G=()=>f.onClose?f.onClose():J.clear(),[X,q]=p("\u2303B");return _f(()=>{l0(["show-options","-g","prefix"]).then(({code:Q,stdout:H})=>{if(Q!==0)return;let B=lQ(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"),K=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),U(B,()=>F("help.title")),Z(V,"onMouseUp",G),U(V,()=>F("help.esc")),D(j,K),Z(j,"flexShrink",1),Z(j,"flexGrow",1),Z(j,"stickyScroll",!1),Z(K,"paddingBottom",1),Z(K,"gap",1),Z(K,"paddingRight",1),U(K,b(Zf,{get each(){return z()},children:(L)=>(()=>{var O=W("box"),M=W("text");return D(O,M),Z(O,"gap",0),U(M,()=>W8("category",L.category)),U(O,b(Zf,{get each(){return L.rows},children:(g)=>{let S=g.hint?.keys??g.keys[0]??"\u2014",a=()=>S==="\u2014"?"\u2014":EG(S,X()),y=()=>(g.hint?g.keys:g.keys.slice(1)).map((R)=>EG(R,X()));return(()=>{var R=W("box"),C=W("box"),k=W("text"),_=W("box"),z0=W("text");return D(R,C),D(R,_),Z(R,"flexDirection","row"),Z(R,"gap",2),Z(R,"paddingLeft",1),D(C,k),Z(C,"width",14),U(k,a),D(_,z0),Z(_,"flexGrow",1),U(z0,()=>W8("desc",g.id)),U(R,(()=>{var t=T0(()=>y().length>0);return()=>t()?(()=>{var Y0=W("box"),T=W("text");return D(Y0,T),U(T,()=>`(${y().join(", ")})`),E((H0)=>Z(T,"fg",Y.textMuted,H0)),Y0})():null})(),null),E((t)=>{var{primary:Y0,text:T}=Y;return Y0!==t.e&&(t.e=Z(k,"fg",Y0,t.e)),T!==t.t&&(t.t=Z(z0,"fg",T,t.t)),t},{e:void 0,t:void 0}),R})()}}),null),E((g)=>{var S=Y.accent,a=ID.BOLD;return S!==g.e&&(g.e=Z(M,"fg",S,g.e)),a!==g.t&&(g.t=Z(M,"attributes",a,g.t)),g},{e:void 0,t:void 0}),O})()})),E((L)=>{var O=ID.BOLD,M=Y.text,g=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)),g!==L.a&&(L.a=Z(V,"fg",g,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 P8=N(()=>{h();h();h();h();h();h();h();Bf();Ef();TG();hf();ef();h8();S1();v1();xG.show=(f)=>{f.replace(()=>b(xG,{}))}});import{TextAttributes as uk}from"@opentui/core";function TD(f){let J=mf(),{theme:Y}=n0(),[z,G]=p(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"),K=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"),U(H,()=>f.dialogTitle??F("common.rename.defaultTitle")),D(B,x0("esc")),Z(B,"onMouseUp",()=>f.onCancel()),D(V,j),D(V,K),Z(V,"gap",0),U(j,()=>f.fieldLabel??F("common.rename.defaultFieldLabel")),Z(K,"focused",!0),Z(K,"onInput",(M)=>G(Z1(M))),Z(K,"onSubmit",()=>X()),D(L,O),Z(L,"paddingBottom",1),U(O,()=>F("common.rename.footerHint",{submitLabel:f.submitLabel??F("common.rename.defaultSubmitLabel")})),E((M)=>{var g=uk.BOLD,S=Y.text,a=Y.textMuted,y=Y.accent,R=z(),C=f.placeholder??f.currentTitle,k=Y.textMuted;return g!==M.e&&(M.e=Z(H,"attributes",g,M.e)),S!==M.t&&(M.t=Z(H,"fg",S,M.t)),a!==M.a&&(M.a=Z(B,"fg",a,M.a)),y!==M.o&&(M.o=Z(j,"fg",y,M.o)),R!==M.i&&(M.i=Z(K,"value",R,M.i)),C!==M.n&&(M.n=Z(K,"placeholder",C,M.n)),k!==M.s&&(M.s=Z(O,"fg",k,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 uD=N(()=>{h();h();h();h();h();h();h();ef();Bf();hf();v1();IG()});function Ek(f,J,Y={}){return new Promise((z)=>{f.replace(()=>b(TD,{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 XY;var v8=N(()=>{h();uD();XY={show:Ek}});import{TextAttributes as xk}from"@opentui/core";function wk(f){if(!f)return f;return f.charAt(0).toUpperCase()+f.slice(1)}function ZY(f){let J=mf(),{theme:Y}=n0(),[z,G]=EJ({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"),U(Q,()=>f.title),D(H,x0("esc")),Z(H,"onMouseUp",()=>J.clear()),U(B,()=>f.message),Z(V,"flexDirection","row"),Z(V,"justifyContent","flex-end"),Z(V,"paddingTop",1),U(V,b(Zf,{each:["cancel","confirm"],children:(j)=>(()=>{var K=W("box"),L=W("text");return D(K,L),Z(K,"paddingLeft",1),Z(K,"paddingRight",1),Z(K,"onMouseUp",()=>{if(j==="confirm")f.onConfirm?.();if(j==="cancel")f.onCancel?.();J.clear()}),U(L,()=>wk(j==="cancel"?f.label??F("common.cancel"):f.confirmLabel??F("common.confirm"))),E((O)=>{var M=j===z.active?Y.primary:void 0,g=j===z.active?Y.selectedListItemText:Y.textMuted;return M!==O.e&&(O.e=Z(K,"backgroundColor",M,O.e)),g!==O.t&&(O.t=Z(L,"fg",g,O.t)),O},{e:void 0,t:void 0}),K})()})),E((j)=>{var K=xk.BOLD,L=Y.text,O=Y.textMuted,M=Y.textMuted;return K!==j.e&&(j.e=Z(Q,"attributes",K,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 m8=N(()=>{h();h();h();h();h();h();h();ef();Bf();yG();hf();S1();v1();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 hk}from"fs";import{join as Pk}from"path";function ED(f){return f instanceof W1}function xD(f,J){try{f?.destroy()}catch(Y){console.error(`kobe: renderer.destroy() failed during ${J}:`,Y)}}async function c8(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{hk(Pk(gJ(),".kobe","tasks.json"))}catch(G){if(G.code!=="ENOENT")console.error("kobe: failed to delete tasks.json during reset:",G)}xD(Y,"reset"),process.stderr.write(`kobe: UI state reset. Relaunch kobe to start fresh.
|
|
263
|
+
`),process.exit(0)}async function n8(f,J,Y){if(!(J instanceof W1))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;xD(Y,"daemon restart"),process.stderr.write(`kobe: window closed. Relaunch kobe to start fresh.
|
|
264
|
+
`),process.exit(0)}var wD=N(()=>{PY();af();m8()});function vk(f){return`theme:${f}`}function d8(f){return`language:${f}`}function i8(f){return`accent:${f}`}function mk(f){return`engine:${f}`}function aX(f){return`surface:${f}`}function l8(f){return[...f.themeNames.map((J)=>({id:vk(J),kind:"theme",name:J})),...kz.map((J)=>({id:d8(J.id),kind:"language",locale:J.id})),{id:"transparent",kind:"transparent"},...f.focusAccentSlots.map((J)=>({id:i8(J),kind:"focusAccent",slot:J})),{id:"toast",kind:"toast"},{id:"sound",kind:"sound"},{id:"zen-keep-tasks",kind:"zenKeepTasks"},{id:aX("chattab"),kind:"surface",surface:"chattab"},{id:aX("taskpanel"),kind:"surface",surface:"taskpanel"},{id:"editor-kind",kind:"editorKind"},{id:"editor-custom",kind:"editorCustom"}]}function ck(f){return[...f.map((J)=>({id:mk(J),kind:"engine",vendor:J})),{id:"add-engine",kind:"engineAdd"}]}function nk(){return[{id:"feedback-title",kind:"feedbackTitle"},{id:"feedback-body",kind:"feedbackBody"},{id:"feedback-send",kind:"feedbackSend"}]}function $X(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 hD(f,J){switch(f){case"general":return l8(J);case"engines":return ck(J.engineList);case"accounts":case"keys":return[];case"feedback":return nk();case"dev":return $X(J.hasDaemon)}}function pX(f,J){return f.findIndex((Y)=>Y.id===J)}function aQ(f,J){return f[J]}var Iz;var a8=N(()=>{SG();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 PD(f){let{theme:J}=n0();return(()=>{var Y=W("box");return Z(Y,"flexDirection","column"),Z(Y,"flexShrink",0),Z(Y,"width",14),Z(Y,"gap",1),U(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"),U(H,()=>F(`settings.sections.${z.id}`)),E((B)=>{var V=q()?J.primary:void 0,j=q()?J.selectedListItemText:X()?J.accent:J.textMuted,K=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)),K!==B.a&&(B.a=Z(H,"attributes",K,B.a)),B},{e:void 0,t:void 0,a:void 0}),Q})()}})),Y})()}function vD(f){let J=n0(),{theme:Y}=J,z=()=>l8({themeNames:f.themeNames(),focusAccentSlots:bz}),G=(C)=>pX(z(),C),X=()=>G("transparent"),q=()=>G("toast"),Q=()=>G("sound"),H=()=>G("zen-keep-tasks"),B=()=>G(aX("chattab")),V=()=>G(aX("taskpanel")),j=()=>G("editor-kind"),K=()=>G("editor-custom"),L=()=>f.bodyRow()===X(),O=()=>f.bodyRow()===q(),M=()=>f.bodyRow()===Q(),g=()=>f.bodyRow()===H(),S=()=>f.bodyRow()===B(),a=()=>f.bodyRow()===V(),y=()=>f.bodyRow()===j(),R=()=>f.bodyRow()===K();return(()=>{var C=W("box"),k=W("text"),_=W("text"),z0=W("box"),t=W("box"),Y0=W("text"),T=W("text"),H0=W("box"),r=W("text"),D0=W("text"),g0=W("box"),$=W("text"),x=W("box"),e=W("text"),I=W("text"),G0=W("box"),u=W("text"),P=W("text"),Z0=W("box"),V0=W("text"),B0=x0(" "),b0=W("box"),w0=W("text"),I0=x0(" "),r0=W("box"),v=W("text"),M0=W("text"),J0=W("box"),F0=W("text"),$0=x0(" "),_0=W("box"),u0=W("text"),o0=W("text"),n=W("box"),q0=W("text"),k0=x0(" "),s0=W("box"),a0=W("text"),p0=x0(" "),e0=W("box"),Rf=W("text"),gf=W("text"),o=W("box"),f0=W("text"),j0=W("box"),C0=W("text");return D(C,k),D(C,_),D(C,z0),D(C,t),D(C,H0),D(C,x),D(C,G0),D(C,r0),D(C,_0),D(C,e0),Z(C,"flexDirection","column"),Z(C,"gap",1),U(k,()=>F("settings.general.theme")),U(_,()=>F("settings.general.themeHint")),Z(z0,"flexDirection","column"),Z(z0,"gap",0),U(z0,b(Zf,{get each(){return f.themeNames()},children:(A,P0)=>{let U0=()=>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"),U(L0,()=>E0()?"\u25CF ":" ",null),U(L0,A,null),E((R0)=>{var Jf=U0()?Y.primary:void 0,Yf=U0()?Y.selectedListItemText:E0()?Y.accent:Y.text,d0=U0()||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)),d0!==R0.a&&(R0.a=Z(L0,"attributes",d0,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),U(Y0,()=>F("settings.general.language")),Z(T,"wrapMode","word"),U(T,()=>F("settings.general.languageHint")),U(t,b(Zf,{each:kz,children:(A)=>{let P0=()=>G(d8(A.id)),U0=()=>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"),U(L0,()=>E0()?"\u25CF ":" ",null),U(L0,()=>A.label,null),E((R0)=>{var Jf=U0()?Y.primary:void 0,Yf=U0()?Y.selectedListItemText:E0()?Y.accent:Y.text,d0=U0()||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)),d0!==R0.a&&(R0.a=Z(L0,"attributes",d0,R0.a)),R0},{e:void 0,t:void 0,a:void 0}),W0})()}}),null),D(H0,r),D(H0,D0),D(H0,g0),Z(H0,"flexDirection","column"),Z(H0,"gap",0),Z(H0,"paddingTop",1),U(r,()=>F("settings.general.transparent")),Z(D0,"wrapMode","word"),U(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"),U($,(()=>{var A=T0(()=>!!J.transparentBackground);return()=>A()?F("settings.general.on"):F("settings.general.off")})()),D(x,e),D(x,I),Z(x,"flexDirection","column"),Z(x,"gap",0),Z(x,"paddingTop",1),U(e,()=>F("settings.general.focusAccent")),Z(I,"wrapMode","word"),U(I,()=>F("settings.general.focusAccentHint")),U(x,b(Zf,{each:bz,children:(A)=>{let P0=()=>G(i8(A)),U0=()=>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"),U(L0,()=>E0()?"\u25CF ":" ",null),U(L0,()=>F(`settings.general.accent${A.charAt(0).toUpperCase()}${A.slice(1)}`),null),E((R0)=>{var Jf=U0()?Y.primary:void 0,Yf=U0()?Y.selectedListItemText:E0()?Y.focusAccent:Y.text,d0=U0()||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)),d0!==R0.a&&(R0.a=Z(L0,"attributes",d0,R0.a)),R0},{e:void 0,t:void 0,a:void 0}),W0})()}}),null),D(G0,u),D(G0,P),D(G0,Z0),D(G0,b0),Z(G0,"flexDirection","column"),Z(G0,"gap",0),Z(G0,"paddingTop",1),U(u,()=>F("settings.general.notifications")),Z(P,"wrapMode","word"),U(P,()=>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,B0),Z(V0,"wrapMode","none"),U(V0,()=>f.toastEnabled()?"[x]":"[ ]",B0),U(V0,()=>F("settings.general.toast"),null),D(b0,w0),Z(b0,"flexDirection","row"),Z(b0,"gap",1),Z(b0,"paddingLeft",1),Z(b0,"paddingRight",1),Z(b0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(Q()),f.toggleSound()}),D(w0,I0),Z(w0,"wrapMode","none"),U(w0,()=>f.soundEnabled()?"[x]":"[ ]",I0),U(w0,()=>F("settings.general.sound"),null),D(r0,v),D(r0,M0),D(r0,J0),Z(r0,"flexDirection","column"),Z(r0,"gap",0),Z(r0,"paddingTop",1),U(v,()=>F("settings.general.zen")),Z(M0,"wrapMode","word"),U(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,$0),Z(F0,"wrapMode","none"),U(F0,()=>f.zenKeepsTasks()?"[x]":"[ ]",$0),U(F0,()=>F("settings.general.zenKeepTasks"),null),D(_0,u0),D(_0,o0),D(_0,n),D(_0,s0),Z(_0,"flexDirection","column"),Z(_0,"gap",0),Z(_0,"paddingTop",1),U(u0,()=>F("settings.general.surface")),Z(o0,"wrapMode","word"),U(o0,()=>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,k0),Z(q0,"wrapMode","none"),U(q0,()=>f.settingsSurface()==="chattab"?"[x]":"[ ]",k0),U(q0,()=>F("settings.general.surfaceChattab"),null),D(s0,a0),Z(s0,"flexDirection","row"),Z(s0,"gap",1),Z(s0,"paddingLeft",1),Z(s0,"paddingRight",1),Z(s0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(V()),f.selectSurface("taskpanel")}),D(a0,p0),Z(a0,"wrapMode","none"),U(a0,()=>f.settingsSurface()==="taskpanel"?"[x]":"[ ]",p0),U(a0,()=>F("settings.general.surfaceTaskpanel"),null),D(e0,Rf),D(e0,gf),D(e0,o),D(e0,j0),Z(e0,"flexDirection","column"),Z(e0,"gap",0),Z(e0,"paddingTop",1),U(Rf,()=>F("settings.general.editor")),Z(gf,"wrapMode","word"),U(gf,()=>F("settings.general.editorHint")),D(o,f0),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(f0,"wrapMode","none"),U(f0,()=>F("settings.general.editorRow",{kind:f.editorKind()})),D(j0,C0),Z(j0,"flexDirection","row"),Z(j0,"gap",1),Z(j0,"paddingLeft",1),Z(j0,"paddingRight",1),Z(j0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(K()),f.editEditorCustom()}),Z(C0,"wrapMode","none"),U(C0,()=>F("settings.general.editorCustom",{cmd:f.editorCustomCommand().trim()||F("settings.general.editorCustomUnset")})),E((A)=>{var P0=Y.text,U0=ff.BOLD,E0=Y.textMuted,W0=Y.text,L0=ff.BOLD,R0=Y.textMuted,Jf=Y.text,Yf=ff.BOLD,d0=Y.textMuted,Sf=L()?Y.primary:void 0,N0=L()?Y.selectedListItemText:J.transparentBackground?Y.accent:Y.textMuted,Pf=ff.BOLD,m=Y.text,A0=ff.BOLD,Wf=Y.textMuted,Of=Y.text,Qf=ff.BOLD,d=Y.textMuted,s=O()?Y.primary:void 0,S0=O()?Y.selectedListItemText:f.toastEnabled()?Y.accent:Y.textMuted,y0=ff.BOLD,q1=M()?Y.primary:void 0,K1=M()?Y.selectedListItemText:f.soundEnabled()?Y.accent:Y.textMuted,f1=ff.BOLD,m1=Y.text,wJ=ff.BOLD,F1=Y.textMuted,hJ=g()?Y.primary:void 0,qY=g()?Y.selectedListItemText:f.zenKeepsTasks()?Y.accent:Y.textMuted,c=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,e1=ff.BOLD,QY=Y.textMuted,U9=y()?Y.primary:void 0,D9=y()?Y.selectedListItemText:Y.accent,L9=ff.BOLD,M9=R()?Y.primary:void 0,F9=R()?Y.selectedListItemText:f.editorKind()==="custom"?Y.text:Y.textMuted;return P0!==A.e&&(A.e=Z(k,"fg",P0,A.e)),U0!==A.t&&(A.t=Z(k,"attributes",U0,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(r,"fg",Jf,A.s)),Yf!==A.h&&(A.h=Z(r,"attributes",Yf,A.h)),d0!==A.r&&(A.r=Z(D0,"fg",d0,A.r)),Sf!==A.d&&(A.d=Z(g0,"backgroundColor",Sf,A.d)),N0!==A.l&&(A.l=Z($,"fg",N0,A.l)),Pf!==A.u&&(A.u=Z($,"attributes",Pf,A.u)),m!==A.c&&(A.c=Z(e,"fg",m,A.c)),A0!==A.w&&(A.w=Z(e,"attributes",A0,A.w)),Wf!==A.m&&(A.m=Z(I,"fg",Wf,A.m)),Of!==A.f&&(A.f=Z(u,"fg",Of,A.f)),Qf!==A.y&&(A.y=Z(u,"attributes",Qf,A.y)),d!==A.g&&(A.g=Z(P,"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)),y0!==A.T&&(A.T=Z(V0,"attributes",y0,A.T)),q1!==A.A&&(A.A=Z(b0,"backgroundColor",q1,A.A)),K1!==A.O&&(A.O=Z(w0,"fg",K1,A.O)),f1!==A.I&&(A.I=Z(w0,"attributes",f1,A.I)),m1!==A.S&&(A.S=Z(v,"fg",m1,A.S)),wJ!==A.W&&(A.W=Z(v,"attributes",wJ,A.W)),F1!==A.C&&(A.C=Z(M0,"fg",F1,A.C)),hJ!==A.B&&(A.B=Z(J0,"backgroundColor",hJ,A.B)),qY!==A.v&&(A.v=Z(F0,"fg",qY,A.v)),c!==A.k&&(A.k=Z(F0,"attributes",c,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(o0,"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(s0,"backgroundColor",c0,A.F)),qf!==A.M&&(A.M=Z(a0,"fg",qf,A.M)),Df!==A.D&&(A.D=Z(a0,"attributes",Df,A.D)),Q1!==A.R&&(A.R=Z(Rf,"fg",Q1,A.R)),e1!==A.E&&(A.E=Z(Rf,"attributes",e1,A.E)),QY!==A.L&&(A.L=Z(gf,"fg",QY,A.L)),U9!==A.N&&(A.N=Z(o,"backgroundColor",U9,A.N)),D9!==A.G&&(A.G=Z(f0,"fg",D9,A.G)),L9!==A.U&&(A.U=Z(f0,"attributes",L9,A.U)),M9!==A.K&&(A.K=Z(j0,"backgroundColor",M9,A.K)),F9!==A.V&&(A.V=Z(C0,"fg",F9,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 mD(f){let{theme:J}=n0(),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),U(G,()=>F("settings.engines.title")),Z(X,"wrapMode","word"),U(X,()=>F("settings.engines.hint")),D(q,Q),Z(q,"flexDirection","column"),Z(q,"gap",0),U(q,b(Zf,{get each(){return f.vendors},children:(B,V)=>{let j=()=>f.level()==="body"&&f.bodyRow()===V();return(()=>{var K=W("box"),L=W("text"),O=W("text"),M=W("text");return D(K,L),D(K,O),D(K,M),Z(K,"flexDirection","row"),Z(K,"gap",1),Z(K,"paddingLeft",1),Z(K,"paddingRight",1),Z(K,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(V()),f.editEngine(B)}),Z(L,"wrapMode","none"),U(L,()=>f.isDefaultEngine(B)?"\u25CF":" "),Z(O,"wrapMode","none"),U(O,()=>f.displayName(B)),Z(M,"wrapMode","none"),U(M,()=>f.commandText(B),null),U(M,(()=>{var g=T0(()=>!!f.isDefault(B));return()=>g()?F("settings.engines.defaultTag"):T0(()=>!!f.isCustom(B))()?F("settings.engines.customTag"):""})(),null),E((g)=>{var S=j()?J.primary:void 0,a=j()?J.selectedListItemText:J.accent,y=ff.BOLD,R=j()?J.selectedListItemText:J.text,C=ff.BOLD,k=j()?J.selectedListItemText:f.isDefault(B)?J.textMuted:J.accent;return S!==g.e&&(g.e=Z(K,"backgroundColor",S,g.e)),a!==g.t&&(g.t=Z(L,"fg",a,g.t)),y!==g.a&&(g.a=Z(L,"attributes",y,g.a)),R!==g.o&&(g.o=Z(O,"fg",R,g.o)),C!==g.i&&(g.i=Z(O,"attributes",C,g.i)),k!==g.n&&(g.n=Z(M,"fg",k,g.n)),g},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),K})()}}),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"),U(H,()=>F("settings.engines.addEngine")),E((B)=>{var V=J.text,j=ff.BOLD,K=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)),K!==B.a&&(B.a=Z(X,"fg",K,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 cD(f){let{theme:J}=n0(),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),U(G,()=>F("settings.accounts.title")),Z(X,"wrapMode","word"),U(X,()=>F("settings.accounts.hint")),D(q,Q),Z(q,"flexDirection","column"),Z(q,"gap",0),D(Q,x0("claude-code")),U(q,b(X0,{get when(){return f.claudeStatus()===null},get children(){var K=W("text");return U(K,()=>F("settings.accounts.checking")),E((L)=>Z(K,"fg",J.textMuted,L)),K}}),null),U(q,b(X0,{get when(){return f.claudeStatus()},children:(K)=>(()=>{var L=W("box"),O=W("text");return D(L,O),Z(L,"flexDirection","column"),Z(L,"gap",0),Z(O,"wrapMode","word"),U(O,()=>Y(K())),U(L,()=>{let M=K().account;if(M.kind==="oauth"){let g=[M.organization,M.billingType].filter((S)=>!!S).join(" \xB7 ");return(()=>{var S=W("text");return Z(S,"wrapMode","word"),U(S,()=>F("settings.accounts.loggedIn",{email:M.email}),null),U(S,g?` (${g})`:"",null),E((a)=>Z(S,"fg",J.success,a)),S})()}return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.notLoggedIn")),E((S)=>Z(g,"fg",J.textMuted,S)),g})()},null),U(L,b(X0,{get when(){return K().accountError},children:(M)=>(()=>{var g=W("text");return Z(g,"wrapMode","word"),U(g,()=>`! ${M()}`),E((S)=>Z(g,"fg",J.warning,S)),g})()}),null),E((M)=>Z(O,"fg",K().binary.found?J.textMuted:J.warning,M)),L})()}),null),D(H,B),Z(H,"flexDirection","column"),Z(H,"gap",0),D(B,x0("codex")),U(H,b(X0,{get when(){return f.codexStatus()===null},get children(){var K=W("text");return U(K,()=>F("settings.accounts.checking")),E((L)=>Z(K,"fg",J.textMuted,L)),K}}),null),U(H,b(X0,{get when(){return f.codexStatus()},children:(K)=>(()=>{var L=W("box"),O=W("text");return D(L,O),Z(L,"flexDirection","column"),Z(L,"gap",0),Z(O,"wrapMode","word"),U(O,()=>Y(K())),U(L,()=>{let M=K().account;if(M.kind==="chatgpt")return(()=>{var g=W("text");return Z(g,"wrapMode","word"),U(g,()=>F("settings.accounts.chatgptLogin",{email:M.email}),null),U(g,(()=>{var S=T0(()=>!!M.plan);return()=>S()?` (${M.plan})`:""})(),null),E((S)=>Z(g,"fg",J.success,S)),g})();if(M.kind==="apikey")return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.apiKeyConfigured")),E((S)=>Z(g,"fg",J.success,S)),g})();return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.notLoggedIn")),E((S)=>Z(g,"fg",J.textMuted,S)),g})()},null),U(L,b(X0,{get when(){return K().accountError},children:(M)=>(()=>{var g=W("text");return Z(g,"wrapMode","word"),U(g,()=>`! ${M()}`),E((S)=>Z(g,"fg",J.warning,S)),g})()}),null),E((M)=>Z(O,"fg",K().binary.found?J.textMuted:J.warning,M)),L})()}),null),D(V,j),Z(V,"flexDirection","column"),Z(V,"gap",0),D(j,x0("copilot")),U(V,b(X0,{get when(){return f.copilotStatus()===null},get children(){var K=W("text");return U(K,()=>F("settings.accounts.checking")),E((L)=>Z(K,"fg",J.textMuted,L)),K}}),null),U(V,b(X0,{get when(){return f.copilotStatus()},children:(K)=>(()=>{var L=W("box"),O=W("text");return D(L,O),Z(L,"flexDirection","column"),Z(L,"gap",0),Z(O,"wrapMode","word"),U(O,()=>Y(K())),U(L,()=>{let M=K().account;if(M.kind==="token")return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.tokenConfigured",{source:M.source})),E((S)=>Z(g,"fg",J.success,S)),g})();if(M.kind==="oauth")return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.copilotDetected")),E((S)=>Z(g,"fg",J.success,S)),g})();return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.notLoggedIn")),E((S)=>Z(g,"fg",J.textMuted,S)),g})()},null),U(L,b(X0,{get when(){return K().accountError},children:(M)=>(()=>{var g=W("text");return Z(g,"wrapMode","word"),U(g,()=>`! ${M()}`),E((S)=>Z(g,"fg",J.warning,S)),g})()}),null),E((M)=>Z(O,"fg",K().binary.found?J.textMuted:J.warning,M)),L})()}),null),E((K)=>{var L=J.text,O=ff.BOLD,M=J.textMuted,g=J.text,S=ff.BOLD,a=J.text,y=ff.BOLD,R=J.text,C=ff.BOLD;return L!==K.e&&(K.e=Z(G,"fg",L,K.e)),O!==K.t&&(K.t=Z(G,"attributes",O,K.t)),M!==K.a&&(K.a=Z(X,"fg",M,K.a)),g!==K.o&&(K.o=Z(Q,"fg",g,K.o)),S!==K.i&&(K.i=Z(Q,"attributes",S,K.i)),a!==K.n&&(K.n=Z(B,"fg",a,K.n)),y!==K.s&&(K.s=Z(B,"attributes",y,K.s)),R!==K.h&&(K.h=Z(j,"fg",R,K.h)),C!==K.r&&(K.r=Z(j,"attributes",C,K.r)),K},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),z})()}function nD(f){let{theme:J}=n0(),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"),K=W("box"),L=W("text"),O=W("input"),M=W("box"),g=W("text"),S=W("input"),a=W("box"),y=W("text");return D(H,B),D(H,V),D(H,j),Z(H,"flexDirection","column"),Z(H,"gap",1),U(B,()=>F("settings.feedback.title")),Z(V,"wrapMode","word"),U(V,()=>F("settings.feedback.hint")),D(j,K),D(j,M),D(j,a),Z(j,"flexDirection","column"),Z(j,"gap",1),D(K,L),D(K,O),Z(K,"gap",0),U(L,()=>F("settings.feedback.titleLabel")),Z(O,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(0)}),Z(O,"onInput",(R)=>f.setTitle(Z1(R))),Z(O,"onSubmit",()=>f.onTitleSubmit()),D(M,g),D(M,S),Z(M,"gap",0),U(g,()=>F("settings.feedback.descriptionLabel")),Z(S,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(1)}),Z(S,"onInput",(R)=>f.setBody(Z1(R))),Z(S,"onSubmit",()=>f.onBodySubmit()),D(a,y),Z(a,"flexDirection","row"),Z(a,"paddingLeft",1),Z(a,"paddingRight",1),Z(a,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(2),f.submit()}),U(y,()=>F("settings.feedback.send")),U(H,b(X0,{get when(){return f.status()},get children(){var R=W("text");return Z(R,"wrapMode","word"),U(R,()=>f.status()),E((C)=>Z(R,"fg",f.status().startsWith("error:")?J.warning:J.success,C)),R}}),null),E((R)=>{var C=J.text,k=ff.BOLD,_=J.textMuted,z0=q(z()),t=Q(z()),Y0=f.title(),T=F("settings.feedback.titlePlaceholder"),H0=z(),r=q(G()),D0=Q(G()),g0=f.body(),$=F("settings.feedback.descriptionPlaceholder"),x=G(),e=X()?J.primary:J.backgroundElement,I=X()?J.selectedListItemText:J.accent,G0=ff.BOLD;return C!==R.e&&(R.e=Z(B,"fg",C,R.e)),k!==R.t&&(R.t=Z(B,"attributes",k,R.t)),_!==R.a&&(R.a=Z(V,"fg",_,R.a)),z0!==R.o&&(R.o=Z(L,"fg",z0,R.o)),t!==R.i&&(R.i=Z(L,"attributes",t,R.i)),Y0!==R.n&&(R.n=Z(O,"value",Y0,R.n)),T!==R.s&&(R.s=Z(O,"placeholder",T,R.s)),H0!==R.h&&(R.h=Z(O,"focused",H0,R.h)),r!==R.r&&(R.r=Z(g,"fg",r,R.r)),D0!==R.d&&(R.d=Z(g,"attributes",D0,R.d)),g0!==R.l&&(R.l=Z(S,"value",g0,R.l)),$!==R.u&&(R.u=Z(S,"placeholder",$,R.u)),x!==R.c&&(R.c=Z(S,"focused",x,R.c)),e!==R.w&&(R.w=Z(a,"backgroundColor",e,R.w)),I!==R.m&&(R.m=Z(y,"fg",I,R.m)),G0!==R.f&&(R.f=Z(y,"attributes",G0,R.f)),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,m:void 0,f:void 0}),H})()}function dD(f){let{theme:J}=n0(),Y=()=>f.level()==="body"&&f.bodyRow()===0,z=()=>f.level()==="body"&&f.bodyRow()===1,G=()=>pX($X(f.hasDaemon),"remote-projects"),X=()=>f.level()==="body"&&f.bodyRow()===G(),q=()=>pX($X(f.hasDaemon),"auto-status"),Q=()=>f.level()==="body"&&f.bodyRow()===q(),H=()=>pX($X(f.hasDaemon),"dispatcher"),B=()=>f.level()==="body"&&f.bodyRow()===H();return(()=>{var V=W("box"),j=W("text"),K=W("text"),L=W("box"),O=W("text"),M=W("text"),g=W("box"),S=W("text"),a=W("text"),y=W("box"),R=W("text"),C=W("text"),k=W("box"),_=W("text"),z0=W("text"),t=W("box"),Y0=W("text");return D(V,j),D(V,K),D(V,L),D(V,M),D(V,g),Z(V,"flexDirection","column"),Z(V,"gap",1),U(j,()=>F("settings.dev.reset")),Z(K,"wrapMode","word"),U(K,()=>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()}),U(O,()=>F("settings.dev.resetButton")),U(V,b(X0,{get when(){return f.hasDaemon},get children(){var T=W("box"),H0=W("text"),r=W("text"),D0=W("box"),g0=W("text");return D(T,H0),D(T,r),D(T,D0),Z(T,"flexDirection","column"),Z(T,"gap",0),Z(T,"paddingTop",1),U(H0,()=>F("settings.dev.restart")),Z(r,"wrapMode","word"),U(r,()=>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()}),U(g0,()=>F("settings.dev.restartButton")),E(($)=>{var x=J.text,e=ff.BOLD,I=J.textMuted,G0=z()?J.primary:J.backgroundElement,u=z()?J.selectedListItemText:J.accent,P=ff.BOLD;return x!==$.e&&($.e=Z(H0,"fg",x,$.e)),e!==$.t&&($.t=Z(H0,"attributes",e,$.t)),I!==$.a&&($.a=Z(r,"fg",I,$.a)),G0!==$.o&&($.o=Z(D0,"backgroundColor",G0,$.o)),u!==$.i&&($.i=Z(g0,"fg",u,$.i)),P!==$.n&&($.n=Z(g0,"attributes",P,$.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"),U(M,()=>F("settings.dev.doctorHint")),D(g,S),D(g,a),D(g,y),D(g,C),D(g,k),D(g,z0),D(g,t),Z(g,"flexDirection","column"),Z(g,"gap",0),Z(g,"paddingTop",1),U(S,()=>F("settings.dev.experimental")),Z(a,"wrapMode","word"),U(a,()=>F("settings.dev.remoteHint")),D(y,R),Z(y,"flexDirection","row"),Z(y,"paddingLeft",1),Z(y,"paddingRight",1),Z(y,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(G()),f.toggleRemoteProjects()}),U(R,(()=>{var T=T0(()=>!!f.remoteProjectsEnabled());return()=>T()?F("settings.dev.remoteOn"):F("settings.dev.remoteOff")})()),Z(C,"wrapMode","word"),U(C,()=>F("settings.dev.autoStatusHint")),D(k,_),Z(k,"flexDirection","row"),Z(k,"paddingLeft",1),Z(k,"paddingRight",1),Z(k,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(q()),f.toggleAutoStatus()}),U(_,(()=>{var T=T0(()=>!!f.autoStatusEnabled());return()=>T()?F("settings.dev.autoStatusOn"):F("settings.dev.autoStatusOff")})()),Z(z0,"wrapMode","word"),U(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()}),U(Y0,(()=>{var T=T0(()=>!!f.dispatcherEnabled());return()=>T()?F("settings.dev.dispatcherOn"):F("settings.dev.dispatcherOff")})()),E((T)=>{var H0=J.text,r=ff.BOLD,D0=J.textMuted,g0=Y()?J.primary:J.backgroundElement,$=Y()?J.selectedListItemText:J.warning,x=ff.BOLD,e=J.textMuted,I=J.text,G0=ff.BOLD,u=J.textMuted,P=X()?J.primary:J.backgroundElement,Z0=X()?J.selectedListItemText:J.text,V0=f.remoteProjectsEnabled()?ff.BOLD:void 0,B0=J.textMuted,b0=Q()?J.primary:J.backgroundElement,w0=Q()?J.selectedListItemText:J.text,I0=f.autoStatusEnabled()?ff.BOLD:void 0,r0=J.textMuted,v=B()?J.primary:J.backgroundElement,M0=B()?J.selectedListItemText:J.text,J0=f.dispatcherEnabled()?ff.BOLD:void 0;return H0!==T.e&&(T.e=Z(j,"fg",H0,T.e)),r!==T.t&&(T.t=Z(j,"attributes",r,T.t)),D0!==T.a&&(T.a=Z(K,"fg",D0,T.a)),g0!==T.o&&(T.o=Z(L,"backgroundColor",g0,T.o)),$!==T.i&&(T.i=Z(O,"fg",$,T.i)),x!==T.n&&(T.n=Z(O,"attributes",x,T.n)),e!==T.s&&(T.s=Z(M,"fg",e,T.s)),I!==T.h&&(T.h=Z(S,"fg",I,T.h)),G0!==T.r&&(T.r=Z(S,"attributes",G0,T.r)),u!==T.d&&(T.d=Z(a,"fg",u,T.d)),P!==T.l&&(T.l=Z(y,"backgroundColor",P,T.l)),Z0!==T.u&&(T.u=Z(R,"fg",Z0,T.u)),V0!==T.c&&(T.c=Z(R,"attributes",V0,T.c)),B0!==T.w&&(T.w=Z(C,"fg",B0,T.w)),b0!==T.m&&(T.m=Z(k,"backgroundColor",b0,T.m)),w0!==T.f&&(T.f=Z(_,"fg",w0,T.f)),I0!==T.y&&(T.y=Z(_,"attributes",I0,T.y)),r0!==T.g&&(T.g=Z(z0,"fg",r0,T.g)),v!==T.p&&(T.p=Z(t,"backgroundColor",v,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 iD(){let{theme:f}=n0(),J=ZD(),Y=Object.keys(rB).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),U(G,()=>F("settings.keybindings.title")),Z(X,"wrapMode","word"),U(X,()=>F("settings.keybindings.hint")),D(q,Q),D(q,H),Z(q,"flexDirection","column"),Z(q,"gap",0),U(Q,()=>F("settings.keybindings.configFile")),Z(H,"wrapMode","word"),U(H,()=>J.path,null),U(H,(()=>{var j=T0(()=>!!J.exists);return()=>j()?"":F("settings.keybindings.notCreated")})(),null),U(z,b(X0,{get when(){return!J.exists},get children(){var j=W("box"),K=W("text"),L=W("text"),O=W("text"),M=W("text"),g=W("text"),S=W("text"),a=W("text"),y=W("text"),R=W("text"),C=W("text");return D(j,K),D(j,L),D(j,O),D(j,M),D(j,g),D(j,S),D(j,a),D(j,y),D(j,R),D(j,C),Z(j,"flexDirection","column"),Z(j,"gap",0),U(K,()=>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(g,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(y,x0("darwin: # platform overlay (also: linux)")),D(R,x0(" bindings:")),D(C,x0(" palette.open: [cmd+p, ctrl+p]")),E((k)=>{var _=f.text,z0=ff.BOLD,t=f.textMuted,Y0=f.textMuted,T=f.textMuted,H0=f.textMuted,r=f.textMuted,D0=f.textMuted,g0=f.textMuted,$=f.textMuted,x=f.textMuted;return _!==k.e&&(k.e=Z(K,"fg",_,k.e)),z0!==k.t&&(k.t=Z(K,"attributes",z0,k.t)),t!==k.a&&(k.a=Z(L,"fg",t,k.a)),Y0!==k.o&&(k.o=Z(O,"fg",Y0,k.o)),T!==k.i&&(k.i=Z(M,"fg",T,k.i)),H0!==k.n&&(k.n=Z(g,"fg",H0,k.n)),r!==k.s&&(k.s=Z(S,"fg",r,k.s)),D0!==k.h&&(k.h=Z(a,"fg",D0,k.h)),g0!==k.r&&(k.r=Z(y,"fg",g0,k.r)),$!==k.d&&(k.d=Z(R,"fg",$,k.d)),x!==k.l&&(k.l=Z(C,"fg",x,k.l)),k},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0}),j}}),B),U(z,b(X0,{get when(){return J.exists},get children(){var j=W("box"),K=W("text");return D(j,K),Z(j,"flexDirection","column"),Z(j,"gap",0),U(K,()=>F("settings.keybindings.overridesApplied")),U(j,b(X0,{get when(){return J.applied.length===0},get children(){var L=W("text");return U(L,()=>F("settings.keybindings.none")),E((O)=>Z(L,"fg",f.textMuted,O)),L}}),null),U(j,b(Zf,{get each(){return J.applied},children:(L)=>(()=>{var O=W("text");return Z(O,"wrapMode","word"),U(O,()=>`${L.id} \u2192 ${L.keys.length>0?L.keys.join(" / "):"(unbound)"} (default: ${L.defaultKeys.join(" / ")})`),E((M)=>Z(O,"fg",f.text,M)),O})()}),null),E((L)=>{var O=f.text,M=ff.BOLD;return O!==L.e&&(L.e=Z(K,"fg",O,L.e)),M!==L.t&&(L.t=Z(K,"attributes",M,L.t)),L},{e:void 0,t:void 0}),j}}),B),U(z,b(X0,{get when(){return J.warnings.length>0},get children(){var j=W("box"),K=W("text");return D(j,K),Z(j,"flexDirection","column"),Z(j,"gap",0),U(K,()=>F("settings.keybindings.warnings")),U(j,b(Zf,{get each(){return J.warnings},children:(L)=>(()=>{var O=W("text");return Z(O,"wrapMode","word"),U(O,`! ${L}`),E((M)=>Z(O,"fg",f.warning,M)),O})()}),null),E((L)=>{var O=f.warning,M=ff.BOLD;return O!==L.e&&(L.e=Z(K,"fg",O,L.e)),M!==L.t&&(L.t=Z(K,"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"),U(V,()=>`Fixed (not rebindable): ${Y.join(", ")}.`),E((j)=>{var K=f.text,L=ff.BOLD,O=f.textMuted,M=f.text,g=ff.BOLD,S=f.textMuted,a=f.textMuted,y=f.textMuted;return K!==j.e&&(j.e=Z(G,"fg",K,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)),g!==j.i&&(j.i=Z(Q,"attributes",g,j.i)),S!==j.n&&(j.n=Z(H,"fg",S,j.n)),a!==j.s&&(j.s=Z(B,"fg",a,j.s)),y!==j.h&&(j.h=Z(V,"fg",y,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 lD=N(()=>{h();h();h();h();h();h();h();h();Bf();b8();hf();ef();SG();yq();IG();a8()});import{TextAttributes as dk}from"@opentui/core";function ik(f){return f.split(/[-_]+/).filter((J)=>J.length>0).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function Tz(f){let J=mf(),Y=n0(),z=G1(),{theme:G}=Y,[X,q]=p("sidebar"),[Q,H]=p("general"),[B,V]=p(0),[j,K]=p(0),[L,O]=p(""),[M,g]=p(""),[S,a]=p(""),y=K0(()=>Y.all().slice().sort()),[,R]=p(Math.max(0,y().findIndex((m)=>m===Y.selected))),C=ED(f.orchestrator),[k,_]=p(null),[z0,t]=p(null),[Y0,T]=p(null),H0=!1;Gf(()=>{if(Q()!=="accounts"||H0)return;H0=!0,AZ().then(_),gZ().then(t),RZ().then(T)});function r(){return hD(Q(),{themeNames:y(),focusAccentSlots:bz,engineList:u0(),hasDaemon:C})}function D0(){return r().length}function g0(){return Lz(f.kv.get(sJ,Dz))}function $(m){if(Y.selected===m)return;if(!Y.set(m))return;f.kv.set("activeTheme",m),f.onVisualPrefsChange?.()}function x(){return j8()}function e(m){if(j8()===m)return;mX(m),f.kv.set(vQ,m),f.onVisualPrefsChange?.()}function I(m){if(Y.transparentBackground===m)return;Y.setTransparentBackground(m),f.kv.set("transparentBackground",m),f.onVisualPrefsChange?.()}function G0(){I(!Y.transparentBackground)}function u(m){if(Y.focusAccent===m)return;Y.setFocusAccent(m),f.kv.set("focusAccent",m),f.onVisualPrefsChange?.()}function P(m){f.kv.set(sJ,m)}function Z0(){return f.kv.get("notifications.toast.enabled",!0)!==!1}function V0(){return f.kv.get("notifications.sound.enabled",!0)!==!1}function B0(){f.kv.set("notifications.toast.enabled",!Z0())}function b0(){f.kv.set("notifications.sound.enabled",!V0())}function w0(){return f.kv.get(xq,!0)!==!1}function I0(){f.kv.set(xq,!w0())}function r0(){return f.kv.get("experimental.remoteProjects",!1)===!0}function v(){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 $0(){f.kv.set(Wz,!F0())}function _0(){let m=f.kv.get("customEngineIds",[]);return Array.isArray(m)?m.filter((A0)=>typeof A0==="string"&&A0.trim().length>0):[]}function u0(){return[...cf,..._0()]}function o0(m){let A0=f.kv.get(WJ(m),"");return typeof A0==="string"?A0.trim():""}function n(m){return o0(m)||WX(m).join(" ")}function q0(m){return H1(m)&&o0(m).length===0&&!s0(m)}function k0(m){let A0=f.kv.get(VJ(m),"");return typeof A0==="string"?A0.trim():""}function s0(m){return k0(m).length>0}function a0(m){return k0(m)||nB[m]||m}let[p0,e0]=p(bf("lastSelectedVendor")??Tf);function Rf(m){return p0()===m}function gf(m){$f("lastSelectedVendor",m),f.kv.set("lastSelectedVendor",m),e0(m)}async function o(m){let A0=await XY.show(J,n(m),{dialogTitle:`${a0(m)} launch command`,fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(A0===void 0)return;f.kv.set(WJ(m),A0.trim())}async function f0(m){let A0=await XY.show(J,a0(m),{dialogTitle:`${a0(m)} display name (blank = default)`,fieldLabel:"name",submitLabel:"save",allowEmpty:!0});if(A0===void 0)return;f.kv.set(VJ(m),A0.trim())}function j0(m){if(f.kv.set(WJ(m),""),f.kv.set(VJ(m),""),!H1(m))f.kv.set("customEngineIds",_0().filter((A0)=>A0!==m)),K((A0)=>Math.max(0,Math.min(A0,u0().length)))}async function C0(){let m=await XY.show(J,"",{dialogTitle:"Add engine",fieldLabel:"id",submitLabel:"next",placeholder:"lowercase slug, e.g. aider"});if(m===void 0)return;let A0=m.trim().toLowerCase();if(!A0||H1(A0)||_0().includes(A0))return;let Wf=await XY.show(J,"",{dialogTitle:`Add engine \xB7 ${A0}`,fieldLabel:"command",submitLabel:"next",placeholder:"e.g. aider --model sonnet"});if(Wf===void 0)return;let Of=await XY.show(J,A0,{dialogTitle:`Add engine \xB7 ${A0}`,fieldLabel:"name",submitLabel:"add",allowEmpty:!0});if(f.kv.set("customEngineIds",[..._0(),A0]),Wf.trim())f.kv.set(WJ(A0),Wf.trim());let Qf=Of?.trim()??"";f.kv.set(VJ(A0),Qf&&Qf!==A0?Qf:ik(A0))}function A(){if(Q()!=="engines"||X()!=="body")return null;let m=aQ(r(),j());return m?.kind==="engine"?m.vendor:null}function P0(){return oz(f.kv.get(oJ,jq))}function U0(){let m=Uz.indexOf(P0()),A0=Uz[(m+1)%Uz.length];if(A0)f.kv.set(oJ,A0)}function E0(){let m=f.kv.get(CY,"");return typeof m==="string"?m:""}async function W0(){let m=await XY.show(J,E0(),{dialogTitle:"Custom editor command (use {file} for the path)",fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(m===void 0)return;let A0=m.trim();if(f.kv.set(CY,A0),A0)f.kv.set(oJ,"custom")}async function L0(){a("submitting...");try{let m=OG({title:L(),body:M()});a(`sent: ${m.url}`),O(""),g(""),K(0)}catch(m){a(`error: ${m instanceof Error?m.message:String(m)}`)}}let R0=()=>Q()==="feedback"&&X()==="body";function Jf(m){let A0=j()+m;if(A0<0||A0>2){q("sidebar");return}K(A0)}function Yf(){if(X()!=="sidebar"||D0()===0)return;if(q("body"),K(0),Q()==="general")R(0)}function d0(m){if(X()==="sidebar"){let Of=(B()+m+Iz.length)%Iz.length;V(Of);let Qf=Iz[Of];if(Qf)H(Qf.id),K(0);return}let A0=D0();if(A0===0)return;let Wf=(j()+m+A0)%A0;if(K(Wf),aQ(r(),Wf)?.kind==="theme")R(Wf)}function Sf(m){H(m),V(Iz.findIndex((A0)=>A0.id===m)),K(0),q("sidebar")}let N0={theme:(m)=>$(m.name),language:(m)=>e(m.locale),transparent:()=>G0(),focusAccent:(m)=>u(m.slot),toast:()=>B0(),sound:()=>b0(),zenKeepTasks:()=>I0(),surface:(m)=>P(m.surface),editorKind:()=>U0(),editorCustom:()=>void W0(),engine:(m)=>void o(m.vendor),engineAdd:()=>void C0(),feedbackTitle:()=>K(0),feedbackBody:()=>K(1),feedbackSend:()=>void L0(),devReset:()=>void c8(J,f.kv,z),devRestartDaemon:()=>void n8(J,f.orchestrator,z),devRemoteProjects:()=>v(),devAutoStatus:()=>J0(),devDispatcher:()=>$0()};function Pf(){let m=aQ(r(),j());if(!m)return;N0[m.kind](m)}return Uf(()=>({enabled:(!f.standalone||J.stack.length===0)&&!R0(),bindings:[{key:"down",cmd:()=>d0(1)},{key:"up",cmd:()=>d0(-1)},{key:"j",cmd:()=>d0(1)},{key:"k",cmd:()=>d0(-1)},{key:"tab",cmd:()=>d0(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}Pf()}},{key:"t",cmd:G0},{key:"r",cmd:()=>{let m=A();if(m)f0(m)}},{key:"x",cmd:()=>{let m=A();if(m)j0(m)}},{key:"d",cmd:()=>{let m=A();if(m)gf(m)}}]})),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 m=W("box"),A0=W("box"),Wf=W("text"),Of=W("text"),Qf=W("box"),d=W("box"),s=W("box"),S0=W("text");return D(m,A0),D(m,Qf),D(m,s),Z(m,"paddingLeft",2),Z(m,"paddingRight",2),Z(m,"paddingBottom",1),Z(m,"gap",1),D(A0,Wf),D(A0,Of),Z(A0,"flexDirection","row"),Z(A0,"justifyContent","space-between"),U(Wf,()=>F("settings.title")),Z(Of,"onMouseUp",()=>f.onClose()),U(Of,()=>F("settings.esc")),D(Qf,d),Z(Qf,"flexDirection","row"),Z(Qf,"gap",2),U(Qf,b(PD,{level:X,cursor:B,switchSection:Sf}),d),Z(d,"flexGrow",1),Z(d,"flexShrink",1),Z(d,"flexDirection","column"),Z(d,"gap",1),U(d,b(X0,{get when(){return Q()==="general"},get children(){return b(vD,{level:X,bodyRow:j,setLevel:q,setBodyRow:K,themeNames:y,setThemeCursor:R,selectTheme:$,currentLocale:x,selectLanguage:e,toggleTransparent:G0,selectFocusAccent:u,toastEnabled:Z0,soundEnabled:V0,toggleToast:B0,toggleSound:b0,zenKeepsTasks:w0,toggleZenKeepsTasks:I0,settingsSurface:g0,selectSurface:P,editorKind:P0,cycleEditorKind:U0,editorCustomCommand:E0,editEditorCustom:()=>void W0()})}}),null),U(d,b(X0,{get when(){return Q()==="engines"},get children(){return b(mD,{level:X,bodyRow:j,setLevel:q,setBodyRow:K,get vendors(){return u0()},isCustom:(y0)=>!H1(y0),displayName:a0,commandText:n,isDefault:q0,isDefaultEngine:Rf,editEngine:(y0)=>void o(y0),renameEngine:(y0)=>void f0(y0),resetEngine:j0,onAddEngine:()=>void C0()})}}),null),U(d,b(X0,{get when(){return Q()==="accounts"},get children(){return b(cD,{claudeStatus:k,codexStatus:z0,copilotStatus:Y0})}}),null),U(d,b(X0,{get when(){return Q()==="keys"},get children(){return b(iD,{})}}),null),U(d,b(X0,{get when(){return Q()==="feedback"},get children(){return b(nD,{level:X,bodyRow:j,setLevel:q,setBodyRow:K,title:L,setTitle:(y0)=>{O(y0),a("")},body:M,setBody:(y0)=>{g(y0),a("")},status:S,onTitleSubmit:()=>K(1),onBodySubmit:()=>void L0(),submit:()=>void L0()})}}),null),U(d,b(X0,{get when(){return Q()==="dev"},get children(){return b(dD,{level:X,bodyRow:j,setLevel:q,setBodyRow:K,hasDaemon:C,confirmReset:()=>void c8(J,f.kv,z),confirmRestartDaemon:()=>void n8(J,f.orchestrator,z),remoteProjectsEnabled:r0,toggleRemoteProjects:v,autoStatusEnabled:M0,toggleAutoStatus:J0,dispatcherEnabled:F0,toggleDispatcher:$0})}}),null),D(s,S0),Z(s,"paddingTop",0),U(S0,(()=>{var y0=T0(()=>!!R0());return()=>y0()?F("settings.nav.feedback"):F("settings.nav.default")})()),E((y0)=>{var q1=dk.BOLD,K1=G.text,f1=G.textMuted,m1=G.textMuted;return q1!==y0.e&&(y0.e=Z(Wf,"attributes",q1,y0.e)),K1!==y0.t&&(y0.t=Z(Wf,"fg",K1,y0.t)),f1!==y0.a&&(y0.a=Z(Of,"fg",f1,y0.a)),m1!==y0.o&&(y0.o=Z(S0,"fg",m1,y0.o)),y0},{e:void 0,t:void 0,a:void 0,o:void 0}),m})()}var $8=N(()=>{h();h();h();h();h();h();h();h();Bf();tY();x1();BQ();QX();Qq();Af();eB();I1();U1();hf();ef();Wq();S1();I8();v1();v8();wD();a8();lD();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 lk}from"@opentui/core";function $D(){let{theme:f}=n0(),J=uJ(),Y=hQ(),z=()=>Y.toasts().slice(-aD),G=()=>Math.max(0,J().width-ak-$k),X=()=>Math.max(0,J().height-pk-aD-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),U(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"),K=W("text"),L=W("text");return D(j,K),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(K,"wrapMode","none"),U(K,V),Z(L,"wrapMode","none"),U(L,()=>Q.title),E((O)=>{var M=H(),g=B(),S=lk.BOLD,a=B();return M!==O.e&&(O.e=Z(j,"backgroundColor",M,O.e)),g!==O.t&&(O.t=Z(K,"fg",g,O.t)),S!==O.a&&(O.a=Z(K,"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})()}})),E((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 aD=4,ak=40,$k=2,pk=2;var pD=N(()=>{h();h();h();h();h();h();h();Bf();PQ();hf()});import{TextAttributes as rk}from"@opentui/core";function _k(f,J){let Y=f?`v${f}`:F("update.skew.olderBuild");return F("update.skew.hint",{daemon:Y,clientVersion:J})}function rD(f){let{theme:J}=n0(),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"),U(G,()=>"\u2594".repeat(Y())),D(X,q),Z(X,"flexDirection","row"),Z(X,"gap",1),Z(q,"wrapMode","none"),U(q,()=>F("update.skew.title")),D(Q,H),Z(Q,"flexDirection","row"),Z(Q,"gap",1),Z(H,"wrapMode","word"),U(H,()=>_k(f.daemonVersion(),f.clientVersion)),E((B)=>{var{warning:V,warning:j}=J,K=rk.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)),K!==B.a&&(B.a=Z(q,"attributes",K,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 _D=N(()=>{h();h();h();h();h();h();Bf();hf();ef()});function oD(f,J){return f.find((Y)=>Y.id!==J&&!Y.archived)}async function ok(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=oD(f.tasks,f.taskId);if(await SJ(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 $1(z).catch((X)=>{f.logger.error(`${f.logPrefix} kill tmux session failed:`,X)}),{archived:Y,nextTask:G}}async function sk(f){let J=oD(f.tasks,f.taskId),Y=Lf(f.taskId);if(f.switchBeforeKill)await SJ(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 $1(Y).catch((z)=>{f.logger.error(`${f.logPrefix} kill tmux session failed:`,z)}),{nextTask:J}}async function sD(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 ok({orch:f.orch,tasks:f.tasks(),taskId:J,logger:f.logger,logPrefix:f.logPrefix,updateActiveTask:f.updateActiveTask}))return;await f.reload?.()}async function tD(f,J){if(!f.orch)return;let Y=f.tasks().find((q)=>q.id===J);if(!Y)return;if(Y.kind==="main"){if(!await f.confirm({title:`Remove project "${Y.title}"?`,body:"Forgets it from the projects list. The repo, its branches, worktrees, and any tasks under it stay on disk \u2014 re-add it with `kobe add`.",cancelLabel:"cancel",confirmLabel:"remove"}))return;try{await f.orch.forgetProject(Y.repo)}catch(Q){f.logger.error(`${f.logPrefix} forget project failed:`,Q),f.notifyError?.(`Couldn't remove: ${Q instanceof Error?Q.message:String(Q)}`);return}await f.reload?.();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(zB)){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 sk({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 eD(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 fL(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 JL(f,J){let Y=f.tasks().find((X)=>X.id===J);if(!Y||!f.orch)return;let z=await lJ(),G=HY(z,Y.vendor??Tf);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 YL(f){let J=O1(),Y=f.cursorRepo()??J[0]??process.cwd();if(f.openCreateSurface&&await f.openCreateSurface(Y))return;let z=f.lastVendor()??Tf,G=await lJ();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),mJ(q.repo),f.onRepoSaved?.(),!X){f.logger.error(`${f.logPrefix} no daemon; cannot create task`);return}f.notifyInfo?.("Creating task\u2026");let Q;if(q.mode==="adopt"){let H=q.adopt.length,B=0,V;for(let j of q.adopt)try{Q=(await X.adoptWorktree({repo:q.repo,worktreePath:j.worktreePath,branch:j.branch,vendor:q.vendor})).id,B++}catch(K){if(V===void 0)V=K instanceof Error?K.message:String(K);f.logger.error(`${f.logPrefix} adoptWorktree failed for ${j.worktreePath}:`,K)}if(B===0){f.notifyError?.(F("newTask.adopt.summaryNone",{error:V??""}));return}if(B<H)f.notifyInfo?.(F("newTask.adopt.summaryPartial",{done:B,total:H}));else f.notifyInfo?.(F("newTask.adopt.summaryAll",{count:B}))}else try{Q=(await X.createTask({repo:q.repo,baseRef:q.baseRef,vendor:q.vendor})).id}catch(H){f.logger.error(`${f.logPrefix} task.create 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 zL=N(()=>{tY();x1();ZB();Af();ef();I1();U1();z1()});import{spawn as tk}from"child_process";import{existsSync as ek}from"fs";import{basename as fS,delimiter as JS,isAbsolute as YS,join as zS}from"path";function p8(f,J,Y){if(YS(f))return Y(f);let z=J.PATH??"";for(let G of z.split(JS)){if(!G)continue;if(Y(zS(G,f)))return!0}return!1}function ZS(f){let J=fS(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 GL(f={}){let J=f.env??process.env,Y=f.platform??process.platform,z=f.exists??ek,G=J.KOBE_OPEN_EDITOR?.trim();if(G)return{id:"env",label:ZS(G),command:G,args:[]};for(let X of GS)if(p8(X.command,J,z))return{id:X.id,label:X.label,command:X.command,args:[]};if(Y==="darwin"&&p8("open",J,z)){for(let X of XS)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"&&p8("xdg-open",J,z))return{id:"xdg-open",label:"Open",command:"xdg-open",args:[]};return null}function qS(f,J){return[J.command,[...J.args,f]]}function XL(f,J,Y={}){if(!f)return!1;let z=Y.spawn??tk,[G,X]=qS(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 GS,XS;var ZL=N(()=>{GS=[{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"}],XS=[{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 $Q(f){let J=new Map;function Y(z){let G=J.get(z);if(!G){let[X,q]=p(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);Zq(G,f,(X)=>f.run(z,X),(X)=>G.write(X))},reset(){J.clear()}}}var rX=N(()=>{Bf();jX();jX()});import{stat as QS}from"fs/promises";import{join as HS}from"path";async function VS(f){try{let J=await QS(HS(f,".git","HEAD"));return`${J.mtimeMs}:${J.size}`}catch{return null}}async function KS(f,J,Y=jJ){let z=await VS(f);if(z!==null){let Q=qL.get(f);if(Q&&Q.fingerprint===z)return Q.value}let G="",X=await Y("git",["symbolic-ref","--short","HEAD"],{cwd:f,env:w1(),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:w1(),signal:J})).status===0)G="(detached)";if(z!==null)qL.set(f,{fingerprint:z,value:G});return G}function HL(f){return QL.read(f)}function BL(f){QL.poll(f)}var BS=2000,jS=30000,WS=1500,qL,QL;var jL=N(()=>{NY();rX();qL=new Map;QL=$Q({initial:"",timeoutMs:BS,slowRetryMs:jS,minIntervalMs:WS,run:(f,J)=>KS(f,J)})});function r8(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,K=Math.min(B.length-1,Math.max(0,j+H));f.setCursor(K)},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 WL(f){let J=r8({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 VL=N(()=>{TG();S1()});function _8(f,J){if(J<=0)return"";if(f.length<=J)return f;return`${f.slice(0,Math.max(0,J-1))}\u2026`}function o8(f,J){return` ${_8(f,Math.max(0,J))}`}function DS(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 LS(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 DL(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 MS(){return F("tasks.subtitle.noTracking")}function FS(){return F("tasks.subtitle.materializing")}function OS(f){if(f.kind==="main")return!1;return f.vendor!==void 0&&!H1(f.vendor)}function s8(f){let{task:J}=f,Y=J.kind==="main",z=Y?f.mainBranch??"":J.branch,G=US[J.status],X=f.activity?.state,q=X!==void 0,Q=AS(X),H=LS(X),B=OS(J)&&!q,V=f.job!==void 0,j=V||!B&&(X==="running"||f.live||!q&&!Y&&J.status==="in_progress"),K=wG[f.spinnerFrame]??wG[0],L=V?"primary":B?"textMuted":H?.tone??(j?"primary":Q?.tone??G.tone),O=B?MS():DS(J.status),M=V?f.truncateBranch(FS(),f.subtitleBudget):H?f.truncateBranch(H.text,f.subtitleBudget):z.length>0?f.truncateBranch(z,f.subtitleBudget):f.truncateBranch(O,f.subtitleBudget),g=B?KL:Q?.glyph??G.glyph,S=B?KL:Q?.glyph??"\u2605";return{isMain:Y,titleText:Y?OJ(J.repo):J.title,subtitleText:M,loading:j,stateGlyph:j?K:g,projectGlyph:j?K:S,tone:L}}function t8(f,J){if(!f.loading)return f;let Y=wG[J()%wG.length]??"\u280B";if(Y===f.stateGlyph&&Y===f.projectGlyph)return f;return{...f,stateGlyph:Y,projectGlyph:Y}}function AS(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 US,wG,UL=100,KL="\xB7";var LL=N(()=>{ef();U1();dQ();US={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"}};wG=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function e8(f){return ML.read(f)}function f9(f){ML.poll(f)}var gS=4000,RS=60000,CS=1500,NS,ML;var FL=N(()=>{NY();rX();KG();rX();NS={added:0,deleted:0},ML=$Q({initial:NS,equals:TJ,timeoutMs:gS,slowRetryMs:RS,minIntervalMs:CS,run:async(f,J)=>{let Y=await jJ("git",["status","--porcelain=v1"],{cwd:f,env:w1(),signal:J});if(Y.status!==0)throw Error("git status failed");return VG(Y.stdout)}})});import{TextAttributes as If}from"@opentui/core";function yS(f){switch(f){case"active":return F("tasks.view.workspace");case"archived":return F("tasks.view.archives")}}function AL(f,J=kS){if(f.length<=J)return f;return`${f.slice(0,Math.max(0,J-1))}\u2026`}function SS(f){let J=0;for(let Y of f)J+=(Y.codePointAt(0)??0)>=4352?2:1;return J}function IS(f,J){if(J<=0||f.length<=J)return f;return`\u2026${f.slice(f.length-Math.max(0,J-1))}`}function gL(f){let{theme:J}=n0(),Y=()=>f.focused?f.focused():!0,[z,G]=p("active"),[X,q]=p(!1),[Q,H]=p(""),[B,V]=p(null),j=()=>f.projectFilter?.()??B(),K=(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)}Gf(()=>{if(!X())return;let n=G1();if(!n)return;let q0=(k0)=>{if(k0.defaultPrevented)return;if(!Y())return;if(k0.ctrl||k0.meta||k0.option)return;if(k0.name==="backspace"){H((p0)=>p0.slice(0,-1));return}let s0=k0.sequence;if(!s0||s0.length!==1)return;let a0=s0.charCodeAt(0);if(a0<32||a0===127)return;H((p0)=>p0+s0)};n.keyInput.on("keypress",q0),yf(()=>n.keyInput.off("keypress",q0))});let[M,g]=p(0),S=setInterval(()=>g((n)=>n+1),bS);yf(()=>clearInterval(S));let[a,y]=p(0),R=setInterval(()=>y((n)=>(n+1)%wG.length),UL);yf(()=>clearInterval(R));let C=()=>f.sortMode?.()??"default",k=K0(()=>CD(f.tasks(),z())),_=K0(()=>{let n=j();if(!n)return null;let q0=t1(n);return k().find((k0)=>t1(k0.repo)===q0)??null}),z0=K0(()=>_()?.repo??null),t=K0(()=>_()?.label??"all"),Y0=K0(()=>{let n=_();return n?n.count:k().reduce((q0,k0)=>q0+k0.count,0)}),T=K0(()=>{let n=Y0();return`${n} ${n===1?F("tasks.project.taskSingular"):F("tasks.project.taskPlural")}`}),H0=K0((n)=>bD(n,x8(f.tasks(),z(),X()?Q():"",C(),z0())),[]),r=K0(()=>w8(H0())),D0=K0(()=>yD(H0())),g0=K0(()=>D0().projectRows),$=K0(()=>D0().taskRows),x=K0(()=>{let n=new Map;for(let q0 of H0())n.set(q0.flatIndex,q0);return n}),e=K0(()=>w8(x8(f.tasks(),z(),"",C(),z0())).length),I=K0(()=>$().length>0);Gf(()=>{let n=j(),q0=k();if(n!==null&&q0.length>0&&(q0.length<=1||_()===null))K(null)});function G0(){let n=k();if(n.length<=1){K(null);return}let q0=z0(),k0=q0?t1(q0):null,s0=k0===null?-1:n.findIndex((p0)=>t1(p0.repo)===k0),a0=n[s0+1];K(a0?.repo??null)}let u=()=>f.width?f.width():OL,P=K0(()=>Math.max(6,u()-9)),Z0=K0(()=>Math.max(6,u()-16)),V0=uJ(),B0=K0(()=>{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)}),[b0,w0]=p(null),[I0,r0]=p(-1),v,M0,J0,F0=new Map;Gf(()=>{let n=f.width?f.width():OL,q0=J0;if(!q0)return;q0.width=n,q0.flexShrink=1,q0.minHeight=0}),Gf(N1([I0,H0],([n])=>{let q0=x().get(n);if(!q0)return;let k0=q0.task.kind==="main"?v:M0;if(!k0)return;if(k0.viewport.height<=0)return;let s0=F0.get(n);if(!s0)return;k0.scrollChildIntoView(s0.id)})),Gf(N1(()=>[f.selectedId(),r()],([n,q0])=>{let k0=lf(I0);if(n===null){if(k0===-1&&q0.length>0)r0(0);else if(k0>=q0.length)r0(Math.max(0,q0.length-1));else if(q0.length===0)r0(-1);return}let s0=q0.indexOf(n);if(s0>=0){if(s0!==k0)r0(s0)}else if(q0.length===0)r0(-1);else if(k0<0||k0>=q0.length)r0(q0.length-1)})),Gf(N1(z,()=>{let n=r();r0(n.length>0?0:-1)},{defer:!0})),Gf(N1(z0,(n)=>r0(ND(H0(),n)),{defer:!0})),Gf(N1([X,Q],()=>{if(!X())return;let n=r();r0(n.length>0?0:-1)}));function $0(n){let q0=z(),k0=_X.findIndex((p0)=>p0.view===q0);if(k0<0)return;let s0=(k0+n+_X.length)%_X.length,a0=_X[s0];if(a0)G(a0.view)}WL({focused:Y,cursorIndex:I0,setCursorIndex:r0,flatTaskIds:r,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)=>$0(n),onSortModeToggle:()=>f.onSortModeToggle?.(),onProjectFilterToggle:()=>G0(),searchMode:X,onSearchEnter:()=>L(),onSearchExit:(n)=>O(n)});let _0=(n)=>(()=>{var q0=W("box"),k0=W("box"),s0=W("text"),a0=W("text");return D(q0,k0),Z(q0,"flexDirection","column"),Z(q0,"flexShrink",0),U(q0,b(X0,{get when(){return n.topPad},get children(){var p0=W("box"),e0=W("text");return D(p0,e0),Z(p0,"flexShrink",0),D(e0,x0(" ")),Z(e0,"wrapMode","none"),p0}}),k0),D(k0,s0),D(k0,a0),Z(k0,"flexDirection","row"),Z(k0,"flexShrink",0),Z(k0,"gap",1),Z(k0,"paddingLeft",1),Z(k0,"paddingRight",1),Z(s0,"wrapMode","none"),U(s0,()=>n.label),Z(a0,"wrapMode","none"),U(a0,()=>"\u2500".repeat(Math.max(2,u()-10-n.label.length-(n.suffix?.length??0)))),U(k0,b(X0,{get when(){return n.suffix},get children(){var p0=W("text");return Z(p0,"wrapMode","none"),U(p0,()=>n.suffix),E((e0)=>{var Rf=J.info,gf=If.BOLD;return Rf!==e0.e&&(e0.e=Z(p0,"fg",Rf,e0.e)),gf!==e0.t&&(e0.t=Z(p0,"attributes",gf,e0.t)),e0},{e:void 0,t:void 0}),p0}}),null),E((p0)=>{var e0=J.textMuted,Rf=If.BOLD,gf=J.border;return e0!==p0.e&&(p0.e=Z(s0,"fg",e0,p0.e)),Rf!==p0.t&&(p0.t=Z(s0,"attributes",Rf,p0.t)),gf!==p0.a&&(p0.a=Z(a0,"fg",gf,p0.a)),p0},{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}},o0=(n)=>{let q0=n.row.task,k0=n.row.flatIndex,s0=()=>k0===I0(),a0=()=>q0.id===f.selectedId(),p0=K0(()=>{let A=f.chatRunState?.();if(!A)return!1;let P0=`${q0.id}:`;for(let[U0,E0]of A)if(E0==="running"&&U0.startsWith(P0))return!0;return!1}),e0=K0(()=>{let A=JQ(f.worktreeChanges?.(),q0.worktreePath);if(A)return A;if(M(),!q0.archived)f9(q0.worktreePath);return e8(q0.worktreePath)},void 0,{equals:TJ}),Rf=K0(()=>{return M(),BL(q0.repo),HL(q0.repo)}),gf=K0(()=>s8({task:q0,activity:f.engineState?.().get(q0.id),job:f.taskJobs?.().get(q0.id),live:p0(),spinnerFrame:0,subtitleBudget:Z0(),truncateBranch:AL,mainBranch:Rf()})),o=K0(()=>t8(gf(),a)),f0=()=>!o().loading?J.primary:u0(o().tone),j0=()=>s0()?J.focusAccent:a0()?J.primary:void 0,C0=()=>s0()||a0()?"\u258C":" ";return(()=>{var A=W("box"),P0=W("box"),U0=W("box"),E0=W("text"),W0=W("box"),L0=W("text"),R0=W("text"),Jf=W("box"),Yf=W("text"),d0=W("box"),Sf=W("text");return D(A,P0),Z(A,"flexDirection","column"),Z(A,"gap",0),Z(A,"paddingBottom",0),D(P0,U0),D(P0,Jf),hY((N0)=>{F0.set(k0,N0),yf(()=>{if(F0.get(k0)===N0)F0.delete(k0)})},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",(N0)=>w0({task:q0,x:N0.x,y:N0.y})),Z(P0,"onMouseOut",()=>w0((N0)=>N0?.task.id===q0.id?null:N0)),D(U0,E0),D(U0,W0),Z(U0,"flexDirection","row"),Z(U0,"gap",0),Z(E0,"wrapMode","none"),U(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"),U(L0,()=>o().projectGlyph),Z(R0,"wrapMode","none"),Z(R0,"flexGrow",1),U(R0,()=>o8(o().titleText,P())),D(Jf,Yf),D(Jf,d0),Z(Jf,"flexDirection","row"),Z(Jf,"gap",0),Z(Yf,"wrapMode","none"),U(Yf,C0),D(d0,Sf),Z(d0,"flexDirection","row"),Z(d0,"flexGrow",1),Z(d0,"paddingLeft",2),Z(d0,"paddingRight",1),Z(d0,"gap",1),Z(Sf,"wrapMode","none"),Z(Sf,"flexGrow",1),U(Sf,()=>o().subtitleText),U(d0,b(X0,{get when(){return e0().added>0},get children(){var N0=W("text"),Pf=x0("+");return D(N0,Pf),Z(N0,"wrapMode","none"),U(N0,()=>e0().added,null),E((m)=>Z(N0,"fg",J.success,m)),N0}}),null),U(d0,b(X0,{get when(){return e0().deleted>0},get children(){var N0=W("text"),Pf=x0("\u2212");return D(N0,Pf),Z(N0,"wrapMode","none"),U(N0,()=>e0().deleted,null),E((m)=>Z(N0,"fg",J.error,m)),N0}}),null),E((N0)=>{var Pf=s0()?J.backgroundElement:void 0,m=j0(),A0=f0(),Wf=If.BOLD,Of=J.text,Qf=If.BOLD,d=j0(),s=J.textMuted,S0=If.DIM;return Pf!==N0.e&&(N0.e=Z(P0,"backgroundColor",Pf,N0.e)),m!==N0.t&&(N0.t=Z(E0,"fg",m,N0.t)),A0!==N0.a&&(N0.a=Z(L0,"fg",A0,N0.a)),Wf!==N0.o&&(N0.o=Z(L0,"attributes",Wf,N0.o)),Of!==N0.i&&(N0.i=Z(R0,"fg",Of,N0.i)),Qf!==N0.n&&(N0.n=Z(R0,"attributes",Qf,N0.n)),d!==N0.s&&(N0.s=Z(Yf,"fg",d,N0.s)),s!==N0.h&&(N0.h=Z(Sf,"fg",s,N0.h)),S0!==N0.r&&(N0.r=Z(Sf,"attributes",S0,N0.r)),N0},{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"),k0=W("box"),s0=W("text"),a0=W("box"),p0=W("box"),e0=W("text"),Rf=W("scrollbox"),gf=W("box");return D(n,q0),D(n,a0),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,k0),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(k0,s0),Z(k0,"flexDirection","row"),Z(k0,"gap",1),D(s0,x0("KOBE")),Z(s0,"wrapMode","none"),U(k0,b(X0,{get when(){return f.headerStatus?.()},children:(o)=>(()=>{var f0=W("text");return Z(f0,"wrapMode","none"),Z(f0,"onMouseUp",()=>f.onHeaderStatusClick?.()),U(f0,()=>o().label),E((j0)=>{var C0=o().emphasize?J.warning:J.textMuted,A=o().emphasize?If.BOLD:If.DIM;return C0!==j0.e&&(j0.e=Z(f0,"fg",C0,j0.e)),A!==j0.t&&(j0.t=Z(f0,"attributes",A,j0.t)),j0},{e:void 0,t:void 0}),f0})()}),null),U(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?.()),E((f0)=>{var j0=J.primary,C0=If.BOLD;return j0!==f0.e&&(f0.e=Z(o,"fg",j0,f0.e)),C0!==f0.t&&(f0.t=Z(o,"attributes",C0,f0.t)),f0},{e:void 0,t:void 0}),o}}),null),U(n,b(X0,{get when(){return X()},get children(){var o=W("box"),f0=W("text"),j0=W("text"),C0=W("text");return D(o,f0),D(o,j0),D(o,C0),Z(o,"flexDirection","row"),Z(o,"gap",0),Z(o,"paddingBottom",1),Z(o,"paddingLeft",1),D(f0,x0("/")),Z(f0,"wrapMode","none"),Z(j0,"wrapMode","none"),U(j0,Q),D(C0,x0("\u2588")),Z(C0,"wrapMode","none"),U(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"),U(A,()=>F("tasks.search.placeholder"),null),E((U0)=>Z(A,"fg",J.textMuted,U0)),A}}),null),U(o,b(X0,{get when(){return Q().length>0},get children(){var A=W("text"),P0=x0(" "),U0=x0("/");return D(A,P0),D(A,U0),Z(A,"wrapMode","none"),U(A,()=>r().length,U0),U(A,e,null),E((E0)=>Z(A,"fg",J.textMuted,E0)),A}}),null),E((A)=>{var{info:P0,text:U0,info:E0}=J,W0=If.BLINK;return P0!==A.e&&(A.e=Z(f0,"fg",P0,A.e)),U0!==A.t&&(A.t=Z(j0,"fg",U0,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}}),a0),D(a0,p0),Z(a0,"flexDirection","row"),Z(a0,"justifyContent","space-between"),Z(a0,"gap",1),Z(a0,"paddingBottom",1),Z(a0,"paddingLeft",1),Z(a0,"paddingRight",1),D(p0,e0),Z(p0,"flexDirection","row"),Z(p0,"gap",2),U(p0,b(Zf,{each:_X,children:(o)=>{let f0=()=>z()===o.view;return(()=>{var j0=W("text");return Z(j0,"wrapMode","none"),Z(j0,"onMouseUp",()=>G(o.view)),U(j0,()=>yS(o.view)),E((C0)=>{var A=f0()?J.primary:J.textMuted,P0=f0()?If.BOLD:void 0;return A!==C0.e&&(C0.e=Z(j0,"fg",A,C0.e)),P0!==C0.t&&(C0.t=Z(j0,"attributes",P0,C0.t)),C0},{e:void 0,t:void 0}),j0})()}}),e0),D(e0,x0("[/]")),Z(e0,"wrapMode","none"),U(a0,b(X0,{get when(){return f.sortMode},get children(){var o=W("text");return Z(o,"wrapMode","none"),Z(o,"onMouseUp",()=>f.onSortModeToggle?.()),U(o,()=>F("tasks.sort")),E((f0)=>{var j0=J.textMuted,C0=If.DIM;return j0!==f0.e&&(f0.e=Z(o,"fg",j0,f0.e)),C0!==f0.t&&(f0.t=Z(o,"attributes",C0,f0.t)),f0},{e:void 0,t:void 0}),o}}),null),U(n,b(X0,{get when(){return g0().length>0},get children(){var o=W("box"),f0=W("box"),j0=W("text"),C0=W("text"),A=W("scrollbox"),P0=W("box");return D(o,f0),D(o,A),Z(o,"flexDirection","column"),Z(o,"flexShrink",0),D(f0,j0),D(f0,C0),Z(f0,"flexDirection","row"),Z(f0,"flexShrink",0),Z(f0,"gap",1),Z(f0,"paddingLeft",1),Z(f0,"paddingRight",1),Z(f0,"onMouseUp",()=>G0()),Z(j0,"wrapMode","none"),U(j0,()=>F("tasks.header.projects")),U(f0,b(X0,{get when(){return k().length>1},get children(){var U0=W("text");return Z(U0,"wrapMode","none"),U(U0,t),E((E0)=>{var W0=z0()?J.primary:J.textMuted,L0=z0()?If.BOLD:void 0;return W0!==E0.e&&(E0.e=Z(U0,"fg",W0,E0.e)),L0!==E0.t&&(E0.t=Z(U0,"attributes",L0,E0.t)),E0},{e:void 0,t:void 0}),U0}}),C0),Z(C0,"wrapMode","none"),U(C0,()=>"\u2500".repeat(Math.max(2,u()-10-F("tasks.header.projects").length-(k().length>1?t().length+1:0)-(k().length>1?T().length+1:0)))),U(f0,b(X0,{get when(){return k().length>1},get children(){var U0=W("text");return Z(U0,"wrapMode","none"),U(U0,T),E((E0)=>{var W0=J.textMuted,L0=If.DIM;return W0!==E0.e&&(E0.e=Z(U0,"fg",W0,E0.e)),L0!==E0.t&&(E0.t=Z(U0,"attributes",L0,E0.t)),E0},{e:void 0,t:void 0}),U0}}),null),D(A,P0),hY((U0)=>{v=U0},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),U(P0,b(Zf,{get each(){return g0()},children:(U0)=>b(o0,{row:U0})})),E((U0)=>{var E0=J.textMuted,W0=If.BOLD,L0=J.border,R0=B0();return E0!==U0.e&&(U0.e=Z(j0,"fg",E0,U0.e)),W0!==U0.t&&(U0.t=Z(j0,"attributes",W0,U0.t)),L0!==U0.a&&(U0.a=Z(C0,"fg",L0,U0.a)),R0!==U0.o&&(U0.o=Z(A,"maxHeight",R0,U0.o)),U0},{e:void 0,t:void 0,a:void 0,o:void 0}),o}}),Rf),U(n,b(_0,{get label(){return F("tasks.header.tasks")},get suffix(){return T0(()=>C()==="default")()?void 0:C()},get topPad(){return g0().length>0}}),Rf),D(Rf,gf),hY((o)=>{M0=o},Rf),Z(Rf,"flexGrow",1),Z(Rf,"minHeight",0),Z(Rf,"stickyScroll",!1),Z(Rf,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),Z(gf,"flexShrink",0),Z(gf,"gap",0),Z(gf,"paddingRight",1),U(gf,b(Zf,{get each(){return $()},children:(o)=>{let{task:f0,flatIndex:j0}=o,C0=()=>j0===I0(),A=()=>f0.id===f.selectedId(),P0=K0(()=>{let Yf=f.chatRunState?.();if(!Yf)return!1;let d0=`${f0.id}:`;for(let[Sf,N0]of Yf)if(N0==="running"&&Sf.startsWith(d0))return!0;return!1}),U0=K0(()=>{let Yf=JQ(f.worktreeChanges?.(),f0.worktreePath);if(Yf)return Yf;if(M(),!f0.archived)f9(f0.worktreePath);return e8(f0.worktreePath)},void 0,{equals:TJ}),E0=K0(()=>s8({task:f0,activity:f.engineState?.().get(f0.id),job:f.taskJobs?.().get(f0.id),live:P0(),spinnerFrame:0,subtitleBudget:Z0(),truncateBranch:AL,mainBranch:""})),W0=K0(()=>t8(E0(),a)),L0=()=>u0(W0().tone),R0=()=>C0()?J.focusAccent:A()?J.primary:void 0,Jf=()=>C0()||A()?"\u258C":" ";return(()=>{var Yf=W("box"),d0=W("box"),Sf=W("box"),N0=W("text"),Pf=W("box"),m=W("text"),A0=W("text"),Wf=W("box"),Of=W("text"),Qf=W("box"),d=W("text");return D(Yf,d0),Z(Yf,"flexDirection","column"),Z(Yf,"gap",0),Z(Yf,"paddingBottom",1),D(d0,Sf),D(d0,Wf),hY((s)=>{F0.set(j0,s),yf(()=>{if(F0.get(j0)===s)F0.delete(j0)})},d0),Z(d0,"flexDirection","column"),Z(d0,"gap",0),Z(d0,"onMouseUp",()=>{if(f.onSelect(f0.id),f.activateOnClick)f.onActivate?.(f0.id)}),Z(d0,"onMouseOver",(s)=>w0({task:f0,x:s.x,y:s.y})),Z(d0,"onMouseOut",()=>w0((s)=>s?.task.id===f0.id?null:s)),D(Sf,N0),D(Sf,Pf),Z(Sf,"flexDirection","row"),Z(Sf,"gap",0),Z(N0,"wrapMode","none"),U(N0,Jf),D(Pf,m),D(Pf,A0),Z(Pf,"flexDirection","row"),Z(Pf,"flexGrow",1),Z(Pf,"paddingRight",1),Z(Pf,"gap",0),Z(m,"wrapMode","none"),U(m,()=>W0().stateGlyph),Z(A0,"wrapMode","none"),Z(A0,"flexGrow",1),U(A0,()=>o8(W0().titleText,P())),U(Pf,b(X0,{get when(){return T0(()=>!!f.moveMode?.())()&&C0()},get children(){var s=W("text");return Z(s,"wrapMode","none"),U(s,()=>F("tasks.moveChip")),E((S0)=>Z(s,"fg",J.warning,S0)),s}}),null),D(Wf,Of),D(Wf,Qf),Z(Wf,"flexDirection","row"),Z(Wf,"gap",0),Z(Of,"wrapMode","none"),U(Of,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),U(d,()=>W0().subtitleText),U(Qf,b(X0,{get when(){return f0.pinned===!0},get children(){var s=W("text");return D(s,x0("\u25B4")),Z(s,"wrapMode","none"),E((S0)=>Z(s,"fg",J.warning,S0)),s}}),null),U(Qf,b(X0,{get when(){return DL(f0)},children:(s)=>(()=>{var S0=W("text");return Z(S0,"wrapMode","none"),U(S0,()=>s().glyph),E((y0)=>Z(S0,"fg",u0(s().tone),y0)),S0})()}),null),U(Qf,b(X0,{get when(){return U0().added>0},get children(){var s=W("text"),S0=x0("+");return D(s,S0),Z(s,"wrapMode","none"),U(s,()=>U0().added,null),E((y0)=>Z(s,"fg",J.success,y0)),s}}),null),U(Qf,b(X0,{get when(){return U0().deleted>0},get children(){var s=W("text"),S0=x0("\u2212");return D(s,S0),Z(s,"wrapMode","none"),U(s,()=>U0().deleted,null),E((y0)=>Z(s,"fg",J.error,y0)),s}}),null),E((s)=>{var S0=C0()?J.backgroundElement:void 0,y0=R0(),q1=L0(),K1=If.BOLD,f1=J.text,m1=A()||C0()?If.BOLD:void 0,wJ=R0(),F1=J.textMuted,hJ=If.DIM;return S0!==s.e&&(s.e=Z(d0,"backgroundColor",S0,s.e)),y0!==s.t&&(s.t=Z(N0,"fg",y0,s.t)),q1!==s.a&&(s.a=Z(m,"fg",q1,s.a)),K1!==s.o&&(s.o=Z(m,"attributes",K1,s.o)),f1!==s.i&&(s.i=Z(A0,"fg",f1,s.i)),m1!==s.n&&(s.n=Z(A0,"attributes",m1,s.n)),wJ!==s.s&&(s.s=Z(Of,"fg",wJ,s.s)),F1!==s.h&&(s.h=Z(d,"fg",F1,s.h)),hJ!==s.r&&(s.r=Z(d,"attributes",hJ,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),U(gf,b(X0,{get when(){return r().length===0},get children(){var o=W("box"),f0=W("text");return D(o,f0),Z(o,"paddingTop",1),Z(o,"paddingLeft",1),U(f0,(()=>{var j0=T0(()=>!!(X()&&Q().trim().length>0));return()=>j0()?F("tasks.empty.noMatchSearch"):T0(()=>!!z0())()?T0(()=>z()==="active")()?F("tasks.empty.noActiveProject"):F("tasks.empty.noArchivedProject"):T0(()=>z()==="active")()?F("tasks.empty.noActive"):F("tasks.empty.noArchived")})()),E((j0)=>Z(f0,"fg",J.textMuted,j0)),o}}),null),U(gf,b(X0,{get when(){return T0(()=>!!(z0()&&r().length>0&&!I()))()&&!(X()&&Q().trim().length>0)},get children(){var o=W("box"),f0=W("text");return D(o,f0),Z(o,"paddingTop",1),Z(o,"paddingLeft",1),Z(f0,"wrapMode","none"),U(f0,(()=>{var j0=T0(()=>z()==="active");return()=>j0()?F("tasks.empty.noActiveProject"):F("tasks.empty.noArchivedProject")})()),E((j0)=>{var C0=J.textMuted,A=If.DIM;return C0!==j0.e&&(j0.e=Z(f0,"fg",C0,j0.e)),A!==j0.t&&(j0.t=Z(f0,"attributes",A,j0.t)),j0},{e:void 0,t:void 0}),o}}),null),U(gf,b(X0,{get when(){return T0(()=>z()==="archived")()&&r().length>0},get children(){var o=W("box"),f0=W("text");return D(o,f0),Z(o,"paddingTop",1),Z(o,"paddingLeft",1),Z(f0,"wrapMode","none"),U(f0,()=>F("tasks.archiveHint")),E((j0)=>{var C0=J.textMuted,A=If.DIM;return C0!==j0.e&&(j0.e=Z(f0,"fg",C0,j0.e)),A!==j0.t&&(j0.t=Z(f0,"attributes",A,j0.t)),j0},{e:void 0,t:void 0}),o}}),null),U(n,b(X0,{get when(){return f.zenActive?.()},get children(){var o=W("box"),f0=W("text");return D(o,f0),Z(o,"flexShrink",0),Z(o,"paddingLeft",1),Z(o,"paddingRight",1),Z(o,"paddingTop",1),D(f0,x0("\u262F ZEN")),Z(f0,"wrapMode","none"),E((j0)=>{var C0=J.accent,A=If.BOLD;return C0!==j0.e&&(j0.e=Z(f0,"fg",C0,j0.e)),A!==j0.t&&(j0.t=Z(f0,"attributes",A,j0.t)),j0},{e:void 0,t:void 0}),o}}),null),U(n,b(X0,{get when(){return b0()},children:(o)=>{let f0=K0(()=>{let W0=o().task,L0=[];if(L0.push({text:W0.kind==="main"?OJ(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}),j0=72,C0=K0(()=>Math.min(68,Math.max(...f0().map((W0)=>SS(W0.text))))),A=K0(()=>C0()+4),P0=K0(()=>f0().length+2),U0=K0(()=>Math.max(0,Math.min(o().x+2,V0().width-A()-1))),E0=K0(()=>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),U(W0,b(Zf,{get each(){return f0()},children:(L0)=>(()=>{var R0=W("text");return Z(R0,"wrapMode","none"),U(R0,(()=>{var Jf=T0(()=>!!L0.dim);return()=>Jf()?IS(L0.text,C0()):_8(L0.text,C0())})()),E((Jf)=>{var Yf=L0.dim?J.textMuted:J.text,d0=L0.bold?If.BOLD:L0.dim?If.DIM:void 0;return Yf!==Jf.e&&(Jf.e=Z(R0,"fg",Yf,Jf.e)),d0!==Jf.t&&(Jf.t=Z(R0,"attributes",d0,Jf.t)),Jf},{e:void 0,t:void 0}),R0})()})),E((L0)=>{var R0=U0(),Jf=E0(),Yf=A(),d0=J.focusAccent,Sf=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)),d0!==L0.o&&(L0.o=Z(W0,"borderColor",d0,L0.o)),Sf!==L0.i&&(L0.i=Z(W0,"backgroundColor",Sf,L0.i)),L0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),W0})()}}),null),E((o)=>{var f0=Y()?J.focusAccent:J.textMuted,j0=If.BOLD,C0=J.textMuted,A=If.DIM;return f0!==o.e&&(o.e=Z(s0,"fg",f0,o.e)),j0!==o.t&&(o.t=Z(s0,"attributes",j0,o.t)),C0!==o.a&&(o.a=Z(e0,"fg",C0,o.a)),A!==o.o&&(o.o=Z(e0,"attributes",A,o.o)),o},{e:void 0,t:void 0,a:void 0,o:void 0}),n})()}var OL=32,_X,bS=2000,kS=16;var RL=N(()=>{h();h();h();h();h();h();h();h();h();ef();h();Bf();hf();hf();jL();dQ();VL();LL();KG();FL();_X=[{view:"active"},{view:"archived"}]});var kL={};Hf(kL,{startTasksPane:()=>wS,legendRowCap:()=>bL,legendCap:()=>yL});import{existsSync as CL}from"fs";import{stat as TS}from"fs/promises";import{TextAttributes as pQ}from"@opentui/core";function J9(f){return!!f&&_Z(f)}function NL(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 ES(f){let{theme:J}=n0(),Y=mf(),z=uG(),G=hQ(),[X,q]=p(f.tasks().some((v)=>v.id===f.initialTaskId)?f.initialTaskId:f.tasks()[0]?.id??null);function Q(v){G.notify({kind:"error",taskId:X()??"",tabId:"",title:v})}function H(v){G.notify({kind:"done",taskId:X()??"",tabId:"",title:v})}let[B,V]=p(!1),[j,K]=p(z.get("activeSortMode")==="recent"?"recent":"default"),L=z.get("tasksPane.projectFilter"),[O,M]=p(typeof L==="string"&&L.length>0?L:null),g=(v)=>{M(v),z.set("tasksPane.projectFilter",v)},[S,a]=p(null),[y,R]=p(!1);{let v=process.env.TMUX_PANE;if(v){let M0=()=>{l0(["show-options","-wqv","-t",v,VY]).then(({code:F0,stdout:$0})=>{R(F0===0&&$0.trim().length>0)})};M0();let J0=setInterval(M0,1000);yf(()=>clearInterval(J0))}}let C=uJ(),k=!f.initialTaskId;Gf(()=>{let v=f.orch?.activeTaskSignal()();if(!v)return;if(!k){if(v!==f.initialTaskId)return;k=!0}q(v)}),Gf(N1(()=>f.orch?.uiPrefsSignal()(),(v)=>{if(v&&v.sortMode!==lf(j))K(v.sortMode);if(v&&v.projectFilter!==lf(O))M(v.projectFilter)})),Gf(()=>{let v=f.orch?.updateSignal()();if(v)a(v)});let _={orch:f.orch,tasks:()=>f.tasks(),confirm:async(v)=>await ZY.show(Y,v.title,v.body,v.cancelLabel,v.confirmLabel)===!0,promptText:(v,M0)=>XY.show(Y,v,M0),logger:console,logPrefix:"[kobe tasks]",notifyError:Q,notifyInfo:H,reload:()=>f.reload(),switchBeforeKill:!0,updateActiveTask:!0,onTaskDeleted:(v,M0)=>{if(X()!==v)return;let J0=f.tasks();q(M0?.id??(J0.find((F0)=>!F0.archived)??J0[0])?.id??null)},promptNewTask:(v,M0,J0)=>IQ.show(Y,v,M0,J0),cursorRepo:()=>{let v=f.tasks();return(v.find((M0)=>M0.id===X())??v[0])?.repo},lastVendor:()=>bf("lastSelectedVendor"),rememberVendor:(v)=>$f("lastSelectedVendor",v),openCreateSurface:async(v)=>{if(Lz(z.get(sJ,Dz))!=="chattab")return!1;let J0=await b1();if(!J0)return!1;return await rq(J0,v),!0},selectTask:(v)=>q(v),enterTask:(v)=>B0(v)};async function z0(){await YL(_)}async function t(){if(Lz(z.get(sJ,Dz))==="chattab"){let J0=await b1();if(J0){await $q(J0);return}}if(!(await Tz.show(Y,z,f.orch??void 0)).visualPrefsChanged)return;if(!z.flush())return;try{let J0=await b1();if(J0)await jG(J0)}catch(J0){console.error("[kobe tasks] failed to refresh workspace panes:",J0)}}async function Y0(){let v=await b1();if(v){await pq(v);return}xG.show(Y)}async function T(){if(!S()?.hasUpdate){H(F("tasks.toast.alreadyLatest",{version:t0}));return}let M0=await b1();if(!M0)return;await _q(M0)}async function H0(v){await sD(_,v)}async function r(v){await tD(_,v)}async function D0(v){await eD(_,v)}async function g0(v){await fL(_,v)}async function $(v){await JL(_,v)}async function x(v){let J0=f.tasks().find(($0)=>$0.id===v)?.worktreePath;if(!J0||!CL(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(v)}catch($0){console.error("[kobe tasks] task.ensureWorktree failed:",$0),Q(NL($0));return}await f.reload()}if(!J0||!CL(J0))return;let F0=GL();if(!F0){console.error("[kobe tasks] no editor/opener found; set KOBE_OPEN_EDITOR"),Q(F("tasks.toast.noEditor"));return}if(!XL(J0,F0))console.error(`[kobe tasks] failed to open worktree with ${F0.label}`),Q(F("tasks.toast.openWorktreeFailed",{label:F0.label}))}async function e(){if(!process.env.TMUX_PANE)return;let v=await b1();if(!v)return;let M0=await pz(v);if(!M0)return;await h0(["select-pane","-t",M0])}async function I(v,M0){let J0=f.tasks().find((F0)=>F0.id===v);if(!J0||J0.kind==="main"||!f.orch)return;try{await f.orch.moveTask(v,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(v),await f.reload()}let[G0,u]=p(z.get("tasksPane.keysCollapsed",!1)===!0),P=(v)=>{u(v),z.set("tasksPane.keysCollapsed",v)};Gf(N1(()=>f.orch?.uiPrefsSignal()(),(v)=>{if(v&&v.keysCollapsed!==lf(G0))u(v.keysCollapsed)}));let[Z0,V0]=p(!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 v=X();if(v)x(v)},"tasks.renameBranch":()=>{let v=X();if(v)g0(v)},"tasks.cycleEngine":()=>{let v=X();if(v)$(v)},"tasks.toggleKeys":()=>P(!G0()),"tasks.focusEngine":()=>void e().catch((v)=>console.error("[kobe tasks] focus engine pane failed:",v))})}));async function B0(v){let M0=Lf(v),J0=f.tasks().find((n)=>n.id===v),F0=await b1();if(F0&&F0!==M0)await MX(F0);if(await jf(M0)){let n=await Bz(M0,"@kobe_worktree")||J0?.worktreePath||"";if(J9(n)){let q0=J0?.repo?tJ(J0.repo,n,{kind:"repo-init"}):void 0;await IY({name:M0,cwd:n,command:k1(J0?.vendor),taskId:v,vendor:J0?.vendor,repo:J0?.repo,launchInit:q0})}await tq(M0),await h0(["switch-client","-t",`=${M0}`]),f.orch?.setActiveTask(v).catch(()=>{});return}let _0=J0?.worktreePath;if(!J9(_0)){if(!f.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),Q(F("tasks.toast.noDaemonOpen"));return}try{_0=await f.orch.ensureWorktree(v)}catch(n){console.error("[kobe tasks] task.ensureWorktree failed:",n),Q(NL(n));return}await f.reload()}if(!J9(_0))return;let u0=J0?.repo?tJ(J0.repo,_0,{kind:"repo-init"}):void 0;if(!await IY({name:M0,cwd:_0,command:k1(J0?.vendor),taskId:v,vendor:J0?.vendor,repo:J0?.repo,launchInit:u0})){console.error(`[kobe tasks] failed to start session ${M0}`),Q(F("tasks.toast.sessionStartFailed"));return}await tq(M0),await h0(["switch-client","-t",`=${M0}`]),f.orch?.setActiveTask(v).catch(()=>{})}let b0=K0(()=>{let v=S();if(v?.hasUpdate)return{label:`v${v.latest} \u2191`,emphasize:!0};return{label:`v${t0}`,emphasize:!1}}),w0=()=>f.orch?.daemonStaleSignal()()??!1,I0=()=>f.orch?.daemonVersionSignal()()??null,r0=K0(()=>f.tasks().find((v)=>v.id===X())?.kind==="main");return(()=>{var v=W("box"),M0=W("box");return D(v,M0),Z(v,"flexDirection","column"),Z(v,"flexGrow",1),U(v,b(rD,{stale:w0,daemonVersion:I0,clientVersion:t0,width:()=>C().width}),M0),Z(M0,"flexGrow",1),Z(M0,"flexShrink",1),U(M0,b(gL,{get tasks(){return f.tasks},selectedId:X,onSelect:q,onActivate:(J0)=>void B0(J0),activateOnClick:!0,headerStatus:b0,onHeaderStatusClick:()=>void T(),onAddTask:()=>void z0(),zenActive:y,width:()=>C().width,get engineState(){return T0(()=>!!f.orch)()?f.orch.engineStateSignal():void 0},get taskJobs(){return T0(()=>!!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 r(J0),onArchiveRequest:(J0)=>void H0(J0),onLocalMergeRequest:(J0)=>{let F0=f.tasks().find(($0)=>$0.id===J0);if(!F0||F0.kind==="main")return;q(J0),V(($0)=>!$0)},moveMode:B,onMoveRequest:(J0,F0)=>void I(J0,F0),onMoveModeExit:()=>V(!1),sortMode:j,projectFilter:O,onProjectFilterChange:g,onSortModeToggle:()=>{let J0=j()==="default"?"recent":"default";K(J0),z.set("activeSortMode",J0)},focused:()=>Y.stack.length===0,onSearchActiveChange:V0})),U(v,b(xS,{moveMode:B,selectedIsMain:r0,collapsed:G0,onToggleCollapsed:()=>P(!G0())}),null),E((J0)=>Z(v,"backgroundColor",J.background,J0)),v})()}function yL(f){let J=y8(f);if(!J)return null;let Y=J.hint?.keys??J.keys[0];return Y&&Y.length>0?Y:null}function bL(f){let J=f.map(yL).filter((Y)=>Y!==null);return J.length>0?J.join("/"):null}function xS(f){let{theme:J}=n0(),[Y,z]=p("Prefix");_f(()=>{l0(["show-options","-g","prefix"]).then(({code:K,stdout:L})=>{if(K!==0)return;let O=lQ(L);if(O)z(O)})});let G=()=>{N8();let K=bq(),L=K.binds,O=[],M=K.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 g=(S,a)=>{let y=a.map((R)=>L[R]?.chord).filter((R)=>!!R);if(y.length>0)O.push({k:`prefix ${y.join("/")}`,label:S})};if(L["tmux.detach"])O.push({k:L["tmux.detach"].chord,label:F("tasks.hints.detach")});return g(F("tasks.hints.splits"),["tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"]),g(F("tasks.hints.panes"),["tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle"]),O},X=()=>{N8();let K=[{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 K){let M=bL(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((K)=>K.label.length))),V=(K)=>K.length<=B()?K:`${K.slice(0,Math.max(0,B()-1))}\u2026`,j=()=>(f.collapsed?.()??!1)&&!(f.moveMode?.()??!1);return(()=>{var K=W("box"),L=W("text");return D(K,L),Z(K,"flexShrink",0),Z(K,"flexDirection","column"),Z(K,"paddingLeft",1),Z(K,"paddingRight",1),Z(K,"paddingTop",1),Z(K,"paddingBottom",1),Z(K,"gap",0),Z(L,"wrapMode","none"),Z(L,"onMouseUp",()=>f.onToggleCollapsed?.()),U(L,(()=>{var O=T0(()=>!!j());return()=>O()?F("tasks.hints.headerFolded"):F("tasks.hints.headerUnfolded")})()),U(K,b(X0,{get when(){return!j()},get children(){return b(Zf,{get each(){return Q()},children:(O)=>{let M=()=>O.dimWhenMain===!0&&(f.selectedIsMain?.()??!1);return(()=>{var g=W("box"),S=W("box"),a=W("text"),y=x0("["),R=x0("]"),C=W("box"),k=W("text");return D(g,S),D(g,C),Z(g,"flexDirection","row"),Z(g,"gap",1),Z(g,"justifyContent","space-between"),D(S,a),Z(S,"width",10),Z(S,"flexShrink",0),D(a,y),D(a,R),Z(a,"wrapMode","none"),U(a,()=>EG(O.k,Y()),R),D(C,k),Z(C,"flexShrink",0),Z(k,"wrapMode","none"),U(k,()=>V(O.label)),E((_)=>{var z0=M()?J.textMuted:J.accent,t=M()?pQ.DIM:pQ.BOLD,Y0=B(),T=J.textMuted,H0=M()?pQ.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(k,"fg",T,_.o)),H0!==_.i&&(_.i=Z(k,"attributes",H0,_.i)),_},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),g})()}})}}),null),E((O)=>{var M=J.textMuted,g=pQ.DIM;return M!==O.e&&(O.e=Z(L,"fg",M,O.e)),g!==O.t&&(O.t=Z(L,"attributes",g,O.t)),O},{e:void 0,t:void 0}),K})()}async function wS(f={}){await M1({logContext:"tasks",providers:{notifications:!0},setup:()=>hS(f)})}async function hS(f){let J=new MG({homeDir:gJ()});await J.load();let[Y,z]=p(J.list()),G=null;try{let B=await o1();if(B){let V=new W1(B);await V.init(),G=V}else iJ("tasks-boot","no daemon running \u2014 polling tasks.json (a gui owns daemon lifecycle)")}catch(B){d1("tasks-boot",B),iJ("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 TS(J.filePath);B=`${V.mtimeMs}:${V.size}`}catch{}if(B===Q)return;Q=B,await q()})().catch(()=>{})},uS);return{root:()=>[b(ES,{tasks:X,get initialTaskId(){return f.initialTaskId},orch:G,reload:q}),b($D,{})],onDestroy:()=>{if(H)clearInterval(H);G?.dispose()}}}var uS=1500;var SL=N(()=>{h();h();h();h();h();h();h();h();Ef();XJ();ef();h();sY();L1();Bf();PY();x1();af();QJ();CX();XG();Af();kq();D1();P8();IG();v8();$8();pD();_D();TG();lX();PQ();hf();h8();nY();S1();zL();ZL();RL();z1();v1();m8()});var IL={};Hf(IL,{startSettingsHost:()=>vS});function PS(f){let J=uG(),Y=mf(),{theme:z}=n0(),G=!1,X=!1;async function q(){if(X)return;X=!0;try{if(J.flush()&&G){let H=await b1();if(H)await jG(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"}}),U(Q,b(Tz,{kv:J,get orchestrator(){return f.orchestrator??void 0},standalone:!0,onVisualPrefsChange:()=>{G=!0},onClose:q})),E((H)=>Z(Q,"backgroundColor",z.background,H)),Q})()}async function vS(){await M1({setup:async()=>{let f=null;try{let J=await o1();if(J){let Y=new W1(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(PS,{orchestrator:f}),onDestroy:()=>{f?.dispose()}}}})}var TL=N(()=>{h();h();h();h();h();h();L1();PY();$8();lX();hf();nY();S1();z1();v1()});var uL={};Hf(uL,{startHelpHost:()=>cS});function mS(){let f=mf(),{theme:J}=n0();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),U(z,b(xG,{onClose:Y})),E((G)=>Z(z,"backgroundColor",J.background,G)),z})()}async function cS(){await M1({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(mS,{})})})}var EL=N(()=>{h();h();h();h();h();P8();hf();nY();S1();v1()});var xL={};Hf(xL,{startUpdateHost:()=>pS});import{spawn as nS,spawnSync as dS}from"child_process";import{TextAttributes as hG}from"@opentui/core";function iS(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 nS(Y,z,{stdio:"ignore",detached:!0}).unref(),!0}catch{return!1}}function lS(f){return f.replace(/\r\n/g,`
|
|
226
265
|
`).split(`
|
|
227
|
-
`).map((J)=>J.trim()).filter(Boolean)}function
|
|
228
|
-
kobe ${
|
|
229
|
-
`),process.stdout.write(`running: ${
|
|
266
|
+
`).map((J)=>J.trim()).filter(Boolean)}function aS(){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 $S(){let{theme:f}=n0(),J=G1(),[Y,z]=p(null),[G,X]=p([]),[q,Q]=p(!0),[H,B]=p("update"),[V,j]=p(null),K=K0(()=>Y()?.latest??t0),L=K0(()=>G()[0]?.url??YH(K())),O=K0(()=>[{id:"update",key:"U",label:F("update.actions.updateNow"),detail:PJ},{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")}]);_f(()=>{M()});async function M(){let y=await PG({force:!0});z(y);let R=y?.latest??t0,C=await JH({current:t0,latest:R});X(C),Q(!1)}function g(y){let R=O().map((_)=>_.id),k=(R.indexOf(H())+y+R.length)%R.length;B(R[k]??"update")}function S(y=H()){if(y==="close")process.exit(0);if(y==="release"){j(iS(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(`
|
|
267
|
+
kobe ${t0} -> latest
|
|
268
|
+
`),process.stdout.write(`running: ${PJ}
|
|
230
269
|
|
|
231
|
-
`);let
|
|
232
|
-
kobe update: failed to start updater: ${
|
|
233
|
-
`);process.stdout.write(
|
|
270
|
+
`);let y=dS("sh",["-c",PJ],{stdio:"inherit"}),R=y.status??(y.error?1:0);if(y.error)process.stderr.write(`
|
|
271
|
+
kobe update: failed to start updater: ${y.error.message}
|
|
272
|
+
`);process.stdout.write(R===0?`
|
|
234
273
|
${F("update.updateComplete")}
|
|
235
274
|
`:`
|
|
236
|
-
${F("update.updateFailed",{code:String(
|
|
237
|
-
`),process.stdout.write(F("update.pressAnyKey")),await
|
|
238
|
-
`)}function
|
|
239
|
-
`).map((
|
|
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=
|
|
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 l8=k(()=>{qq()});function a8(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=$X.indexOf(z);if(G<0)return;let X=(Y??0)%2===0?-1:1,q=$X[(G+X+$X.length)%$X.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 $X;var $8=k(()=>{SG();S1();$X=["all","changes"]});import{spawn as KL}from"child_process";import{existsSync as XS}from"fs";import{platform as ZS}from"os";function UL(f){if(!f)return;let J=ZS();if(J==="linux"){if(XS("/proc/sys/fs/binfmt_misc/WSLInterop")||process.env.WSL_DISTRO_NAME){rX("wslview",[f],()=>{let Y=KL("wslpath",["-w",f],{stdio:["ignore","pipe","ignore"]}),z="";Y.stdout?.on("data",(G)=>{z+=G.toString()}),Y.on("close",(G)=>{if(G===0)rX("explorer.exe",[z.trim()])})});return}rX("xdg-open",[f]);return}if(J==="darwin"){rX("open",[f]);return}if(J==="win32"){rX("cmd.exe",["/c","start","",f]);return}}function rX(f,J,Y){try{let z=KL(f,J,{stdio:"ignore",detached:!0});z.on("error",()=>Y?.()),z.unref()}catch{Y?.()}}var DL=()=>{};function r8(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)r8(G,J,Y+1,z)}else z.push({kind:"file",path:G.path,name:G.name,depth:Y})}function LL(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 ML(f){return f.map((J)=>({kind:"status",path:J.path,status:J.status,added:J.added,deleted:J.deleted}))}function qS(f){return`${f.kind}\x00${f.path}`}function QS(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 FL(f,J){return EQ(f,J,qS,QS)}function OL(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 AL(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 gL=()=>{};import{watch as HS}from"fs";import{TextAttributes as pX}from"@opentui/core";function BS(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 WS(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 VS(f){switch(f){case"all":return F("files.tabs.all");case"changes":return F("files.tabs.changes")}}function p8(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:OL}),[U,L]=r(null,{equals:AL}),[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 d8(f0);if(I!==a||f.worktreePath()!==f0)return;j(G0)}else if(E==="changes"){let G0=await i8(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)}}Gf(k1(f.worktreePath,async(E)=>{j(null),L(null),M(null),Q(0),S(new Set),await N(G(),E)})),Gf(k1(f.worktreePath,(E)=>{if(E==null)return;if(process.env.KOBE_FILETREE_WATCH!=="1")return;let f0=null,I=null;try{I=HS(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()})})),Gf(k1([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 jL(E)}),C=U0((E)=>{let f0=[];if(G()==="all"){let I=g();if(I!=null)r8(I,R(),0,f0)}else if(G()==="changes"){let I=U();if(I!=null)f0.push(...ML(I))}return FL(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}`;UL(x)}a8({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 Gf(k1([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("[~]")),Z(Z0,"wrapMode","none"),Z(V0,"wrapMode","none"),K(V0,()=>F("files.actions.zen")),u((H0)=>{var y0=J.accent,w0=pX.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=pX.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:jS,children:(x)=>{let c=()=>G()===x;return(()=>{var Z0=W("text");return Z(Z0,"wrapMode","none"),Z(Z0,"onMouseUp",()=>X(x)),K(Z0,()=>VS(x)),u((V0)=>{var H0=c()?J.primary:J.textMuted,y0=c()?pX.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?pX.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,()=>WS(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=pX.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=BS(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,()=>LL(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 jS;var RL=k(()=>{h();h();h();h();h();h();h();h();h();X1();h();Wf();xf();l8();$8();DL();gL();jS=["all","changes"]});var CL=k(()=>{RL();l8();$8()});import{promises as KS}from"fs";import US from"path";async function cQ(f,J){let Y=new AbortController,z=setTimeout(()=>Y.abort(),DS);try{let G=await HJ("git",J,{cwd:f,env:w1(),signal:Y.signal});if(Y.signal.aborted)return null;if(G.status!==0)return null;return G.stdout.trim()}finally{clearTimeout(z)}}async function LS(f){return await cQ(f,["rev-parse","--abbrev-ref","HEAD"])||"HEAD"}async function MS(f){let J=await cQ(f,["symbolic-ref","refs/remotes/origin/HEAD","--short"]);if(!J)return"main";return J.startsWith("origin/")?J.slice(7):J}async function FS(f){let J=await cQ(f,["rev-parse","--abbrev-ref","@{u}"]);return J!==null&&J.length>0}async function OS(f){let J=await cQ(f,["status","--porcelain"]);if(!J)return 0;return J.split(`
|
|
242
|
-
`).filter((Y)=>Y.length>0).length}async function
|
|
275
|
+
${F("update.updateFailed",{code:String(R)})}
|
|
276
|
+
`),process.stdout.write(F("update.pressAnyKey")),await aS(),process.exit(R)}return Uf(()=>({bindings:[{key:"up",cmd:()=>g(-1)},{key:"down",cmd:()=>g(1)},{key:"k",cmd:()=>g(-1)},{key:"j",cmd:()=>g(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 y=W("box"),R=W("box"),C=W("text"),k=W("text"),_=W("box"),z0=W("text"),t=W("text"),Y0=x0("v"),T=W("text"),H0=W("text"),r=x0("v"),D0=W("box"),g0=W("box"),$=W("text"),x=W("scrollbox"),e=W("box");return D(y,R),D(y,_),D(y,D0),D(y,g0),D(y,x),Z(y,"flexDirection","column"),Z(y,"flexGrow",1),Z(y,"paddingTop",1),Z(y,"paddingLeft",2),Z(y,"paddingRight",2),D(R,C),D(R,k),Z(R,"flexDirection","row"),Z(R,"justifyContent","space-between"),Z(R,"flexShrink",0),Z(C,"wrapMode","none"),U(C,()=>F("update.pageTitle")),D(k,x0("q / esc")),Z(k,"wrapMode","none"),Z(k,"onMouseUp",()=>S("close")),D(_,z0),D(_,t),D(_,T),D(_,H0),Z(_,"flexDirection","row"),Z(_,"gap",2),Z(_,"flexShrink",0),Z(_,"paddingTop",1),Z(z0,"wrapMode","none"),U(z0,()=>F("update.current")),D(t,Y0),Z(t,"wrapMode","none"),U(t,t0,null),Z(T,"wrapMode","none"),U(T,()=>F("update.latest")),D(H0,r),Z(H0,"wrapMode","none"),U(H0,K,null),Z(D0,"flexDirection","column"),Z(D0,"flexShrink",0),Z(D0,"paddingTop",1),Z(D0,"gap",0),U(D0,b(Zf,{get each(){return O()},children:(I)=>(()=>{var G0=W("box"),u=W("box"),P=W("text"),Z0=x0("["),V0=x0("]"),B0=W("box"),b0=W("text"),w0=W("text");return D(G0,u),D(G0,B0),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(u,P),Z(u,"width",4),Z(u,"flexShrink",0),D(P,Z0),D(P,V0),Z(P,"wrapMode","none"),U(P,()=>I.key,V0),D(B0,b0),Z(B0,"width",14),Z(B0,"flexShrink",0),Z(b0,"wrapMode","none"),U(b0,()=>I.label),Z(w0,"wrapMode","word"),U(w0,()=>I.detail),E((I0)=>{var r0=H()===I.id?f.primary:void 0,v=H()===I.id?f.selectedListItemText:f.accent,M0=hG.BOLD,J0=H()===I.id?f.selectedListItemText:f.text,F0=H()===I.id?f.selectedListItemText:f.textMuted;return r0!==I0.e&&(I0.e=Z(G0,"backgroundColor",r0,I0.e)),v!==I0.t&&(I0.t=Z(P,"fg",v,I0.t)),M0!==I0.a&&(I0.a=Z(P,"attributes",M0,I0.a)),J0!==I0.o&&(I0.o=Z(b0,"fg",J0,I0.o)),F0!==I0.i&&(I0.i=Z(w0,"fg",F0,I0.i)),I0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),G0})()})),U(y,b(X0,{get when(){return V()},get children(){var I=W("text");return Z(I,"wrapMode","word"),U(I,V),E((G0)=>Z(I,"fg",f.info,G0)),I}}),g0),D(g0,$),Z(g0,"flexShrink",0),Z(g0,"paddingTop",1),Z($,"wrapMode","none"),U($,()=>F("update.changesSectionHeader",{from:t0,to:K()})),D(x,e),Z(x,"flexGrow",1),Z(x,"flexShrink",1),Z(x,"stickyScroll",!1),Z(e,"flexDirection","column"),Z(e,"paddingRight",1),Z(e,"paddingBottom",1),Z(e,"gap",0),U(e,b(X0,{get when(){return q()},get children(){var I=W("text");return U(I,()=>F("update.loadingNotes")),E((G0)=>Z(I,"fg",f.textMuted,G0)),I}}),null),U(e,b(X0,{get when(){return T0(()=>!q())()&&G().length===0},get children(){var I=W("text");return Z(I,"wrapMode","word"),U(I,()=>F("update.notesUnavailable")),E((G0)=>Z(I,"fg",f.textMuted,G0)),I}}),null),U(e,b(Zf,{get each(){return G()},children:(I)=>(()=>{var G0=W("box"),u=W("text"),P=x0("v");return D(G0,u),Z(G0,"flexDirection","column"),Z(G0,"paddingBottom",1),Z(G0,"gap",0),D(u,P),Z(u,"wrapMode","none"),U(u,()=>I.version,null),U(G0,b(Zf,{get each(){return lS(I.body)},children:(Z0)=>(()=>{var V0=W("text");return Z(V0,"wrapMode","word"),U(V0,Z0),E((B0)=>Z(V0,"fg",f.textMuted,B0)),V0})()}),null),E((Z0)=>{var V0=f.text,B0=hG.BOLD;return V0!==Z0.e&&(Z0.e=Z(u,"fg",V0,Z0.e)),B0!==Z0.t&&(Z0.t=Z(u,"attributes",B0,Z0.t)),Z0},{e:void 0,t:void 0}),G0})()}),null),E((I)=>{var{background:G0,text:u}=f,P=hG.BOLD,Z0=f.textMuted,V0=f.textMuted,B0=f.text,b0=hG.BOLD,w0=f.textMuted,I0=Y()?.hasUpdate?f.warning:f.success,r0=hG.BOLD,v=f.textMuted,M0=hG.DIM,J0={trackOptions:{backgroundColor:f.background,foregroundColor:f.borderActive}};return G0!==I.e&&(I.e=Z(y,"backgroundColor",G0,I.e)),u!==I.t&&(I.t=Z(C,"fg",u,I.t)),P!==I.a&&(I.a=Z(C,"attributes",P,I.a)),Z0!==I.o&&(I.o=Z(k,"fg",Z0,I.o)),V0!==I.i&&(I.i=Z(z0,"fg",V0,I.i)),B0!==I.n&&(I.n=Z(t,"fg",B0,I.n)),b0!==I.s&&(I.s=Z(t,"attributes",b0,I.s)),w0!==I.h&&(I.h=Z(T,"fg",w0,I.h)),I0!==I.r&&(I.r=Z(H0,"fg",I0,I.r)),r0!==I.d&&(I.d=Z(H0,"attributes",r0,I.d)),v!==I.l&&(I.l=Z($,"fg",v,I.l)),M0!==I.u&&(I.u=Z($,"attributes",M0,I.u)),J0!==I.c&&(I.c=Z(x,"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}),y})()}async function pS(){await M1({setup:()=>({root:()=>b($S,{})})})}var wL=N(()=>{h();h();h();h();h();h();h();h();h();Bf();D1();hf();ef();nY();S1()});async function hL(f,J){if(!J)return 0;return rf(f).history.latestTranscriptMtimeForWorktree(J)}var PL=N(()=>{DY()});function rS(f){return f.trim().split(/\s+/)[0]??""}function mL(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=rS(X);if(!q)return null;let Q=X.includes(vL)?X.split(vL).join(G):`${X} ${G}`;return{bin:q,command:Q}}function _S(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(`
|
|
277
|
+
`)}function oS(f,J){let Y=f.endsWith("/")?f:`${f}/`;return J.startsWith(Y)?J.slice(Y.length):null}async function sS(f){let J=oz(bf(oJ)),Y=bf(CY)??"",z=(process.env.VISUAL??process.env.EDITOR??"").trim();if(J!=="auto")return mL(J,Y,f,z);if(z)return mL("custom","",f,z);let G=Xf(f);for(let X of M7)if(await cL(X))return{bin:X,command:`${X} ${G}`};return null}async function cL(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 tS(f,J){try{return await Bun.spawn(["git","diff","--quiet","HEAD","--",J],{cwd:f,stdin:"ignore",stdout:"ignore",stderr:"ignore",env:w1()}).exited===1}catch{return!1}}async function nL(f,J,Y){let z=await sS(Y);if(!z)return!1;if(!await cL(z.bin))return!1;let G=await eS(z,J,Y);return await BJ(f,{cwd:J,command:G,name:fI(Y)}),!0}async function eS(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=oS(J,Y);if(!X)return G;if(!await tS(J,X))return G;return _S(z,Y,X)}function fI(f){let J=f.slice(f.lastIndexOf("/")+1).trim();return J.length>0?J:"edit"}var vL="{file}";var dL=N(()=>{NY();Af();Wq();Ef();XJ()});async function Y9(f,J,Y){if(!J)throw Error("git(): cwd is required");let z=await sz(J,f,{signal:Y}),G=z.status??-1;if(G!==0){let X=(z.stderr??"").trim(),q=(z.stdout??"").trim();throw Error(`git ${f.join(" ")} (cwd=${J}) exited with code ${G}: ${X||q||"(no output)"}`)}return z.stdout??""}async function z9(f,J){let z=(await Y9(["ls-files","--cached","--others","--exclude-standard","--full-name"],f,J)).split(`
|
|
278
|
+
`).map((X)=>X.replace(/\r$/,"")),G=new Set;for(let X of z)if(X.length>0)G.add(X);return Array.from(G).sort()}async function G9(f,J){let Y=await Y9(["status","--porcelain","--untracked-files=all"],f,J),z=aL(Y),G=null;try{let X=await Y9(["diff","--no-color","--numstat","HEAD"],f,J);G=new Map(YI(X).map((q)=>[q.path,{added:q.added,deleted:q.deleted}]))}catch{G=new Map}return z.map((X)=>{let q=G?.get(X.path);if(q)return{...X,added:q.added,deleted:q.deleted};return X})}function JI(f){let J=f.indexOf("{");if(J>=0){let z=f.indexOf("}",J),G=f.indexOf(" => ",J);if(z>J&&G>=0&&G<z){let X=f.slice(G+4,z);return f.slice(0,J)+X+f.slice(z+1)}}let Y=f.indexOf(" => ");if(Y>=0)return f.slice(Y+4);return f}function YI(f){let J=f.split(`
|
|
279
|
+
`).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=JI(z.slice(X+1)),B=q==="-"?null:Number.parseInt(q,10),V=Q==="-"?null:Number.parseInt(Q,10);if(H.length===0)continue;Y.push({path:H,added:Number.isNaN(B)?null:B,deleted:Number.isNaN(V)?null:V})}return Y}function iL(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 lL(J),J}function lL(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)lL(J)}function aL(f){let J=f.split(`
|
|
280
|
+
`).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 X9=N(()=>{Vq()});function Z9(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=oX.indexOf(z);if(G<0)return;let X=(Y??0)%2===0?-1:1,q=oX[(G+X+oX.length)%oX.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 oX;var q9=N(()=>{TG();S1();oX=["all","changes"]});import{spawn as $L}from"child_process";import{existsSync as zI}from"fs";import{platform as GI}from"os";function pL(f){if(!f)return;let J=GI();if(J==="linux"){if(zI("/proc/sys/fs/binfmt_misc/WSLInterop")||process.env.WSL_DISTRO_NAME){sX("wslview",[f],()=>{let Y=$L("wslpath",["-w",f],{stdio:["ignore","pipe","ignore"]}),z="";Y.stdout?.on("data",(G)=>{z+=G.toString()}),Y.on("close",(G)=>{if(G===0)sX("explorer.exe",[z.trim()])})});return}sX("xdg-open",[f]);return}if(J==="darwin"){sX("open",[f]);return}if(J==="win32"){sX("cmd.exe",["/c","start","",f]);return}}function sX(f,J,Y){try{let z=$L(f,J,{stdio:"ignore",detached:!0});z.on("error",()=>Y?.()),z.unref()}catch{Y?.()}}var rL=()=>{};function Q9(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)Q9(G,J,Y+1,z)}else z.push({kind:"file",path:G.path,name:G.name,depth:Y})}function _L(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 oL(f){return f.map((J)=>({kind:"status",path:J.path,status:J.status,added:J.added,deleted:J.deleted}))}function XI(f){return`${f.kind}\x00${f.path}`}function ZI(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 sL(f,J){return nQ(f,J,XI,ZI)}function tL(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 eL(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 fM=()=>{};import{watch as qI}from"fs";import{TextAttributes as tX}from"@opentui/core";function QI(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 BI(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 jI(f){switch(f){case"all":return F("files.tabs.all");case"changes":return F("files.tabs.changes")}}function H9(f){let{theme:J}=n0(),Y=uJ(),z=()=>f.focused?f.focused():!0,[G,X]=p("all"),[q,Q]=p(0),[H,B]=p(0),[V,j]=p(null,{equals:tL}),[K,L]=p(null,{equals:eL}),[O,M]=p(null),[g,S]=p(new Set),a=0;async function y(x,e,I){let G0=++a;if(e==null){j(null),L(null),M(null);return}M(null);try{if(x==="all"){let u=await z9(e,I);if(I?.aborted||G0!==a||f.worktreePath()!==e)return;j(u)}else if(x==="changes"){let u=await G9(e,I);if(I?.aborted||G0!==a||f.worktreePath()!==e)return;L(u)}}catch(u){if(I?.aborted)return;let P=u instanceof Error?u.message:String(u);if(G0===a&&f.worktreePath()===e)M(P)}}Gf(N1(f.worktreePath,async(x)=>{j(null),L(null),M(null),Q(0),S(new Set);let e=new AbortController;yf(()=>e.abort()),await y(G(),x,e.signal)})),Gf(N1(f.worktreePath,(x)=>{if(x==null)return;if(process.env.KOBE_FILETREE_WATCH!=="1")return;let e=null,I=null;try{I=qI(x,{recursive:!0},(G0,u)=>{if(u==null)return;let P=u.toString();if(P===".git"||P.startsWith(".git/")||P.startsWith(".git\\"))return;if(P.startsWith("node_modules/")||P.startsWith("node_modules\\"))return;if(e!=null)clearTimeout(e);e=setTimeout(()=>{e=null,B((Z0)=>Z0+1)},500)}),I.on("error",()=>{})}catch{}yf(()=>{if(e!=null)clearTimeout(e);if(I!=null)I.close()})})),Gf(N1([G,H],async([x,e])=>{let I=f.worktreePath();if(I==null)return;Q(0);let G0=new AbortController;yf(()=>G0.abort());let P=H()>0;if(x==="all"){if(V()==null||P)await y("all",I,G0.signal)}else if(x==="changes"){if(K()==null||P)await y("changes",I,G0.signal)}}));let R=K0(()=>{let x=V();if(x==null)return null;return iL(x)}),C=K0((x)=>{let e=[];if(G()==="all"){let I=R();if(I!=null)Q9(I,g(),0,e)}else if(G()==="changes"){let I=K();if(I!=null)e.push(...oL(I))}return sL(x??[],e)},[]),k=K0(()=>{let x=0,e=0;for(let I of C()){if(I.kind!=="status")continue;if(I.added!=null)x=Math.max(x,String(I.added).length+1);if(I.deleted!=null)e=Math.max(e,String(I.deleted).length+1)}return{added:x,deleted:e}}),_=K0(()=>{let x=k(),e=(x.added>0?x.added+1:0)+(x.deleted>0?x.deleted+1:0);return Math.max(8,Y().width-6-e)});function z0(){let x=C();if(x.length===0)return;Q(Math.min(q()+1,x.length-1))}function t(){if(C().length===0)return;Q(Math.max(q()-1,0))}function Y0(){let x=C(),e=q(),I=x[e];if(!I)return;if(I.kind!=="dir")return;if(!I.expanded&&I.hasChildren)S((G0)=>{let u=new Set(G0);return u.add(I.path),u});else if(I.expanded){if(e+1<x.length)Q(e+1)}}function T(){if(G()!=="all")return;let x=C(),e=q(),I=x[e];if(!I)return;if(I.kind==="dir"&&I.expanded){S((u)=>{let P=new Set(u);return P.delete(I.path),P});return}if(I.kind!=="dir"&&I.kind!=="file")return;let G0=I.depth-1;if(G0<0)return;for(let u=e-1;u>=0;u--){let P=x[u];if(!P)continue;if(P.kind==="dir"&&P.depth===G0){Q(u);return}}}function H0(){let x=C(),e=q();if(e<0||e>=x.length)return;let I=x[e];if(!I)return;if(I.kind==="dir"){S((G0)=>{let u=new Set(G0);if(u.has(I.path))u.delete(I.path);else u.add(I.path);return u});return}f.onOpenFile(I.path)}function r(){let x=C(),e=q();if(e<0||e>=x.length)return;let I=x[e];if(!I||I.kind==="dir")return;f.onMention?.(I.path)}function D0(){B((x)=>x+1),f.onRefresh?.()}function g0(){let x=C(),e=q();if(e<0||e>=x.length)return;let I=x[e];if(!I||I.kind==="dir")return;let G0=f.worktreePath();if(!G0)return;let u=`${G0}/${I.path}`;pL(u)}Z9({focused:z,moveDown:z0,moveUp:t,setTab:(x)=>X(x),currentTab:G,openCurrent:H0,mentionCurrent:r,createPR:f.onCreatePR,openExternal:g0,refresh:D0,expandOrDescend:Y0,collapseOrParent:T});let $;return Gf(N1([q,C],([x,e])=>{if(!$)return;if(e.length===0)return;let I=$.scrollTop,G0=$.viewport.height;if(G0<=0)return;if(x<I)$.scrollTo({x:0,y:x});else if(x>=I+G0)$.scrollTo({x:0,y:x-G0+1})})),(()=>{var x=W("box"),e=W("box"),I=W("box"),G0=W("scrollbox");return D(x,e),D(x,G0),Z(x,"flexDirection","column"),Z(x,"flexGrow",1),Z(x,"paddingTop",1),Z(x,"paddingBottom",1),Z(x,"paddingLeft",0),Z(x,"paddingRight",0),U(x,b(X0,{get when(){return f.onZenToggle||f.onCreatePR},get children(){var u=W("box");return Z(u,"flexDirection","row"),Z(u,"justifyContent","flex-end"),Z(u,"gap",2),Z(u,"paddingBottom",1),Z(u,"flexShrink",0),U(u,b(X0,{get when(){return f.onZenToggle},get children(){var P=W("box"),Z0=W("text"),V0=W("text");return D(P,Z0),D(P,V0),Z(P,"flexDirection","row"),Z(P,"gap",1),Z(P,"onMouseUp",()=>f.onZenToggle?.()),D(Z0,x0("[~]")),Z(Z0,"wrapMode","none"),Z(V0,"wrapMode","none"),U(V0,()=>F("files.actions.zen")),E((B0)=>{var b0=J.accent,w0=tX.BOLD,I0=J.text;return b0!==B0.e&&(B0.e=Z(Z0,"fg",b0,B0.e)),w0!==B0.t&&(B0.t=Z(Z0,"attributes",w0,B0.t)),I0!==B0.a&&(B0.a=Z(V0,"fg",I0,B0.a)),B0},{e:void 0,t:void 0,a:void 0}),P}}),null),U(u,b(X0,{get when(){return f.onCreatePR},get children(){var P=W("box"),Z0=W("text"),V0=W("text");return D(P,Z0),D(P,V0),Z(P,"flexDirection","row"),Z(P,"gap",1),Z(P,"onMouseUp",()=>f.onCreatePR?.()),D(Z0,x0("[P]")),Z(Z0,"wrapMode","none"),Z(V0,"wrapMode","none"),U(V0,()=>F("files.actions.createPR")),E((B0)=>{var b0=J.accent,w0=tX.BOLD,I0=J.text;return b0!==B0.e&&(B0.e=Z(Z0,"fg",b0,B0.e)),w0!==B0.t&&(B0.t=Z(Z0,"attributes",w0,B0.t)),I0!==B0.a&&(B0.a=Z(V0,"fg",I0,B0.a)),B0},{e:void 0,t:void 0,a:void 0}),P}}),null),u}}),e),D(e,I),Z(e,"flexDirection","row"),Z(e,"justifyContent","space-between"),Z(e,"paddingBottom",0),Z(e,"flexShrink",0),Z(I,"flexDirection","row"),Z(I,"gap",2),U(I,b(Zf,{each:HI,children:(u)=>{let P=()=>G()===u;return(()=>{var Z0=W("text");return Z(Z0,"wrapMode","none"),Z(Z0,"onMouseUp",()=>X(u)),U(Z0,()=>jI(u)),E((V0)=>{var B0=P()?J.primary:J.textMuted,b0=P()?tX.BOLD:void 0;return B0!==V0.e&&(V0.e=Z(Z0,"fg",B0,V0.e)),b0!==V0.t&&(V0.t=Z(Z0,"attributes",b0,V0.t)),V0},{e:void 0,t:void 0}),Z0})()}})),U(e,b(X0,{get when(){return f.cornerBadge?.()},children:(u)=>(()=>{var P=W("text");return Z(P,"wrapMode","none"),U(P,()=>u().text),E((Z0)=>{var V0=u().active?J.accent:J.textMuted,B0=u().active?tX.BOLD:void 0;return V0!==Z0.e&&(Z0.e=Z(P,"fg",V0,Z0.e)),B0!==Z0.t&&(Z0.t=Z(P,"attributes",B0,Z0.t)),Z0},{e:void 0,t:void 0}),P})()}),null),U(x,b(X0,{get when(){return G()==="changes"},get children(){var u=W("box"),P=W("text");return D(u,P),Z(u,"flexDirection","column"),Z(u,"paddingBottom",1),Z(u,"flexShrink",0),Z(u,"gap",0),Z(P,"wrapMode","none"),U(P,()=>F("files.legend.changes")),E((Z0)=>Z(P,"fg",J.textMuted,Z0)),u}}),G0),U(x,b(X0,{get when(){return G()!=="changes"},get children(){var u=W("box");return Z(u,"flexDirection","row"),Z(u,"paddingBottom",1),Z(u,"flexShrink",0),u}}),G0),hY((u)=>{$=u},G0),Z(G0,"flexGrow",1),Z(G0,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),U(G0,b(X0,{get when(){return f.worktreePath()==null},get children(){var u=W("box"),P=W("text");return D(u,P),Z(u,"paddingTop",1),Z(u,"paddingLeft",1),U(P,()=>F("files.empty.noTask")),E((Z0)=>Z(P,"fg",J.textMuted,Z0)),u}}),null),U(G0,b(X0,{get when(){return T0(()=>f.worktreePath()!=null)()&&O()!=null},get children(){var u=W("box"),P=W("text"),Z0=W("text");return D(u,P),D(u,Z0),Z(u,"paddingTop",1),Z(u,"paddingLeft",1),Z(u,"flexDirection","column"),Z(u,"gap",0),Z(P,"wrapMode","word"),U(P,()=>BI(O()??"")),Z(Z0,"wrapMode","word"),U(Z0,()=>F("files.error.retryHint")),E((V0)=>{var{error:B0,textMuted:b0}=J;return B0!==V0.e&&(V0.e=Z(P,"fg",B0,V0.e)),b0!==V0.t&&(V0.t=Z(Z0,"fg",b0,V0.t)),V0},{e:void 0,t:void 0}),u}}),null),U(G0,b(X0,{get when(){return T0(()=>f.worktreePath()!=null&&O()==null&&C().length===0)()&&(G()==="all"&&V()!=null||G()==="changes"&&K()!=null)},get children(){var u=W("box"),P=W("text");return D(u,P),Z(u,"paddingTop",1),Z(u,"paddingLeft",1),U(P,(()=>{var Z0=T0(()=>G()==="all");return()=>Z0()?F("files.empty.noFiles"):F("files.empty.noChanges")})()),E((Z0)=>Z(P,"fg",J.textMuted,Z0)),u}}),null),U(G0,b(X0,{get when(){return T0(()=>f.worktreePath()!=null&&O()==null)()&&C().length>0},get children(){var u=W("box");return Z(u,"flexShrink",0),Z(u,"gap",0),Z(u,"paddingRight",1),U(u,b(Zf,{get each(){return C()},children:(P,Z0)=>{let V0=()=>Z0()===q(),B0=(()=>{var J0=W("text");return Z(J0,"wrapMode","none"),U(J0,()=>V0()?"\u258C":" "),E((F0)=>Z(J0,"fg",V0()?J.focusAccent:void 0,F0)),J0})(),b0=()=>V0()?J.backgroundElement:void 0;if(P.kind==="dir"){let J0=" ".repeat(P.depth),F0=P.expanded?"\u25BE":"\u25B8";return(()=>{var $0=W("box"),_0=W("box"),u0=W("text");return D($0,_0),Z($0,"flexDirection","row"),Z($0,"gap",0),Z($0,"onMouseUp",()=>{Q(Z0()),S((o0)=>{let n=new Set(o0);if(n.has(P.path))n.delete(P.path);else n.add(P.path);return n})}),U($0,B0,_0),D(_0,u0),Z(_0,"flexGrow",1),Z(_0,"paddingRight",1),Z(u0,"wrapMode","none"),U(u0,()=>`${J0}${F0} ${P.name}/`),E((o0)=>{var n=b0(),q0=J.textMuted,k0=tX.BOLD;return n!==o0.e&&(o0.e=Z($0,"backgroundColor",n,o0.e)),q0!==o0.t&&(o0.t=Z(u0,"fg",q0,o0.t)),k0!==o0.a&&(o0.a=Z(u0,"attributes",k0,o0.a)),o0},{e:void 0,t:void 0,a:void 0}),$0})()}if(P.kind==="file"){let J0=" ".repeat(P.depth);return(()=>{var F0=W("box"),$0=W("box"),_0=W("text");return D(F0,$0),Z(F0,"flexDirection","row"),Z(F0,"gap",0),Z(F0,"onMouseUp",()=>{Q(Z0()),f.onOpenFile(P.path)}),U(F0,B0,$0),D($0,_0),Z($0,"flexGrow",1),Z($0,"paddingRight",1),Z(_0,"wrapMode","none"),U(_0,()=>`${J0} ${P.name}`),E((u0)=>{var o0=b0(),n=J.text;return o0!==u0.e&&(u0.e=Z(F0,"backgroundColor",o0,u0.e)),n!==u0.t&&(u0.t=Z(_0,"fg",n,u0.t)),u0},{e:void 0,t:void 0}),F0})()}let w0=QI(P.status),I0=()=>{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=k(),v=P.added==null?" ".repeat(r0.added):`+${P.added}`.padStart(r0.added),M0=P.deleted==null?" ".repeat(r0.deleted):`-${P.deleted}`.padStart(r0.deleted);return(()=>{var J0=W("box"),F0=W("box"),$0=W("text"),_0=W("text");return D(J0,F0),Z(J0,"flexDirection","row"),Z(J0,"gap",0),Z(J0,"onMouseUp",()=>{Q(Z0()),f.onOpenFile(P.path)}),U(J0,B0,F0),D(F0,$0),D(F0,_0),Z(F0,"flexDirection","row"),Z(F0,"flexGrow",1),Z(F0,"gap",1),Z(F0,"paddingRight",1),Z($0,"wrapMode","none"),U($0,()=>P.status),Z(_0,"wrapMode","none"),Z(_0,"flexGrow",1),U(_0,()=>_L(P.path,_())),U(F0,b(X0,{get when(){return r0.added>0},get children(){var u0=W("text");return Z(u0,"wrapMode","none"),U(u0,v),E((o0)=>Z(u0,"fg",J.success,o0)),u0}}),null),U(F0,b(X0,{get when(){return r0.deleted>0},get children(){var u0=W("text");return Z(u0,"wrapMode","none"),U(u0,M0),E((o0)=>Z(u0,"fg",J.error,o0)),u0}}),null),E((u0)=>{var o0=b0(),n=I0(),q0=J.text;return o0!==u0.e&&(u0.e=Z(J0,"backgroundColor",o0,u0.e)),n!==u0.t&&(u0.t=Z($0,"fg",n,u0.t)),q0!==u0.a&&(u0.a=Z(_0,"fg",q0,u0.a)),u0},{e:void 0,t:void 0,a:void 0}),J0})()}})),u}}),null),U(x,b(X0,{get when(){return f.worktreePath()!=null},get children(){var u=W("box"),P=W("text");return D(u,P),Z(u,"flexDirection","row"),Z(u,"paddingTop",1),Z(u,"flexShrink",0),Z(P,"wrapMode","none"),U(P,()=>F("files.footer.openHint")),E((Z0)=>Z(P,"fg",J.textMuted,Z0)),u}}),null),x})()}var HI;var JM=N(()=>{h();h();h();h();h();h();h();h();h();ef();h();Bf();hf();X9();q9();rL();fM();HI=["all","changes"]});var YM=N(()=>{JM();X9();q9()});import{promises as WI}from"fs";import VI from"path";async function rQ(f,J){let Y=new AbortController,z=setTimeout(()=>Y.abort(),KI);try{let G=await jJ("git",J,{cwd:f,env:w1(),signal:Y.signal});if(Y.signal.aborted)return null;if(G.status!==0)return null;return G.stdout.trim()}finally{clearTimeout(z)}}async function UI(f){return await rQ(f,["rev-parse","--abbrev-ref","HEAD"])||"HEAD"}async function DI(f){let J=await rQ(f,["symbolic-ref","refs/remotes/origin/HEAD","--short"]);if(!J)return"main";return J.startsWith("origin/")?J.slice(7):J}async function LI(f){let J=await rQ(f,["rev-parse","--abbrev-ref","@{u}"]);return J!==null&&J.length>0}async function MI(f){let J=await rQ(f,["status","--porcelain"]);if(!J)return 0;return J.split(`
|
|
281
|
+
`).filter((Y)=>Y.length>0).length}async function FI(f){let[J,Y,z,G]=await Promise.all([UI(f),DI(f),LI(f),MI(f)]);return{branch:J,targetBranch:Y,hasUpstream:z,dirtyCount:G}}function OI(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 AI(f){return f?"The current branch tracks an upstream.":"There is no upstream branch yet."}function gI(f,J){let Y={branch:J.branch,targetBranch:J.targetBranch,dirtyCountSentence:OI(J.dirtyCount),upstreamSentence:AI(J.hasUpstream)};return f.replace(/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/g,(z,G)=>Object.hasOwn(Y,G)?Y[G]:z)}async function RI(f){let J=VI.join(f,".kobe","pr-instructions.md");try{let Y=await WI.readFile(J,"utf8");return Y.length>0?Y:zM}catch{return zM}}async function GM(f){let[J,Y]=await Promise.all([RI(f),FI(f)]);return gI(J,Y)}var KI=5000,zM=`The user likes the current state of the code.
|
|
243
282
|
|
|
244
283
|
{{dirtyCountSentence}}
|
|
245
284
|
The current branch is {{branch}}.
|
|
@@ -256,16 +295,16 @@ Follow these steps to create a PR:
|
|
|
256
295
|
- Push to origin.
|
|
257
296
|
- 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.
|
|
258
297
|
|
|
259
|
-
If any of these steps fail, ask the user for help.`;var
|
|
260
|
-
`)}var
|
|
298
|
+
If any of these steps fail, ask the user for help.`;var XM=N(()=>{NY();rX()});var B9={};Hf(B9,{startOpsPreview:()=>mI,startOpsHost:()=>EI,nextActivityPollDelay:()=>QM});import{createHash as CI}from"crypto";import{SyntaxStyle as NI}from"@opentui/core";function QM(f,J){if(J<bI)return qM;return Math.min(f*2,yI)}function TI(f){let{theme:J}=n0(),[Y,z]=p(0),[G,X]=p(0),q=!1;_f(()=>{let M=!1,g,S=qM,a=0,y=0;async function R(){try{let C=await hL(f.vendor,f.worktree);if(M)return;if(!q)q=!0,z(C),y=C;if(C>y)y=C,a=0;else a++;X(C)}catch{a++}finally{if(!M)S=QM(S,a),g=setTimeout(()=>void R(),S)}}R(),yf(()=>{if(M=!0,g)clearTimeout(g)})});let Q=()=>q&&G()>Y(),H=()=>Q()?{text:F("ops.badge.newActivity"),active:!0}:null;function B(){z(G())}_f(()=>{if(!f.targetPane)return;let M=fV(f.vendor),g=!1,S=null,a="",y=!1,R=0,C=null;async function k(Y0){if(Y0===C)return;C=Y0,await OY(f.targetPane,II,Y0)}async function _(){try{a=ZM(await rz(f.targetPane,80)),S=(await M.latestCompletion(f.worktree))?.id??null,await k(M.supportsCompletionMarkers()?"idle":"unknown")}catch{}}async function z0(){try{let Y0=ZM(await rz(f.targetPane,80));if(g)return;if(Y0!==a)a=Y0,y=!0,R=0,await k(M.supportsCompletionMarkers()?"running":"unknown");else if(y)R++;if(!M.supportsCompletionMarkers()||!y||R<SI)return;let T=await M.latestCompletion(f.worktree);if(g||!T||T.id===S)return;S=T.id,y=!1,R=0,await k("done")}catch{}}_();let t=setInterval(()=>void z0(),kI);yf(()=>{g=!0,clearInterval(t)})});function V(M){if(!f.taskId)return;BJ(Lf(f.taskId),{cwd:f.worktree,command:NW({worktree:f.worktree,relPath:M,cliInvocation:Cf()}),name:uI(M)})}function j(M){if(!f.taskId){V(M);return}let g=`${f.worktree}/${M}`;nL(Lf(f.taskId),f.worktree,g).then((S)=>{if(!S)V(M)})}function K(M){if(!f.targetPane)return;tZ(f.targetPane,`@${M} `)}async function L(){if(!f.targetPane)return;let M=await GM(f.worktree);await tZ(f.targetPane,M),await ZX(f.targetPane,"Enter")}function O(){if(!f.taskId)return;let M=Lf(f.taskId),g=Cf(),S=`${of()}${g1(g)} 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),U(M,b(H9,{worktreePath:()=>f.worktree,focused:()=>!0,onOpenFile:j,onMention:K,onCreatePR:()=>void L(),get onZenToggle(){return f.taskId?O:void 0},cornerBadge:H,onRefresh:B})),E((g)=>Z(M,"backgroundColor",J.background,g)),M})()}function uI(f){let J=f.lastIndexOf("/");return J>=0?f.slice(J+1):f}function ZM(f){return CI("sha1").update(f).digest("hex")}async function EI(f){await M1({logContext:"ops",providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(TI,f)})})}function xI(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 wI(f,J){let Y=await sz(f,["diff","HEAD","--",J]);return Y.status===0?Y.stdout:""}async function hI(f,J){return await F7(f,J)??""}function PI(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 NI.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 vI(f){let{theme:J}=n0(),Y=PI(J),z=xI(f.relPath),[G]=lZ(()=>f.relPath,async(X)=>{let q=await wI(f.worktree,X);if(q.trim().length>0)return{kind:"diff",text:q};return{kind:"code",text:await hI(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),U(Q,()=>f.relPath),U(H,(()=>{var j=T0(()=>G()?.kind==="diff");return()=>j()?F("ops.preview.diffVsHead"):F("ops.preview.file")})()),U(B,()=>F("ops.preview.closeHint")),Z(V,"flexGrow",1),U(V,b(X0,{get when(){return G()},get fallback(){return(()=>{var j=W("text");return U(j,()=>F("ops.preview.loading")),E((K)=>Z(j,"fg",J.textMuted,K)),j})()},children:(j)=>b(X0,{get when(){return j().kind==="diff"},get fallback(){return(()=>{var K=W("code");return Z(K,"filetype",z),Z(K,"syntaxStyle",Y),E((L)=>Z(K,"content",j().text,L)),K})()},get children(){var K=W("diff");return Z(K,"view","unified"),Z(K,"filetype",z),Z(K,"syntaxStyle",Y),Z(K,"showLineNumbers",!0),E((L)=>Z(K,"diff",j().text,L)),K}})})),E((j)=>{var{background:K,accent:L,textMuted:O,textMuted:M}=J;return K!==j.e&&(j.e=Z(X,"backgroundColor",K,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 mI(f){await M1({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(vI,f)})})}var qM=2500,yI=20000,bI=3,kI=1500,SI=2,II="@kobe_tab_state";var j9=N(()=>{h();h();h();h();h();h();h();aJ();rH();PL();Ef();dL();XJ();Vq();Bf();hf();ef();nY();S1();YM();Qz();XM()});var WM={};Hf(WM,{startDirectTmux:()=>nI,chooseInitialTask:()=>jM});import{resolve as HM}from"path";function jM(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 BM(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 cI(f){HH();let J=[...O1()];if(J.length===0)J=[mJ(HM(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]??HM(process.cwd())}async function nI(){if(VZ("gui"),Promise.resolve().then(() => (aj(),lj)).then((Y)=>Y.ensureGlobalKobeHooks()),!await bJ()){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 DJ(),J=new W1(f,{role:"gui"});try{process.env.KOBE_DAEMON_SOCKET_PATH=f.socketPath,await J.init();let Y=await cI(J),z=jM(J.listTasks(),{activeTaskId:J.activeTaskSignal()(),persistedTaskId:bf("lastSelectedTaskId"),cwdRepo:Y});if(!z){let V=await eZ();if(await gz(),await sq(V),await BM($z(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(()=>{}),$f("lastSelectedTaskId",z.id);let q=tJ(z.repo,G,{kind:"repo-init"});if(!await IY({name:X,cwd:G,command:k1(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 sq(X);let H=await BM($z(X));if(H===null){console.error(`kobe: failed to attach to tmux session ${X}`),process.exitCode=1;return}if(H!==0&&!await jf(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===yJ&&B.worktreePath)try{let V=await vz(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 VM=N(()=>{sY();L1();PY();x1();hZ();YX();XG();Af();Ef();Eq();z1()});var KM={};Hf(KM,{startTui:()=>dI});async function dI(){dU();let{startDirectTmux:f}=await Promise.resolve().then(() => (VM(),WM));await f()}var UM=N(()=>{UQ()});_Q();U1();import{resolve as V9}from"path";D1();function k9(){return[`kobe ${t0}`,"","Usage: kobe [command] [options]","","Run with no command to launch the TUI.","","Commands:"," web [options] Launch the browser dashboard"," completions <shell> Generate shell completion script (bash/zsh/fish)"," add [path] Save a repo path for the new-task picker"," remove [path] Forget a saved project (inverse of add; non-destructive)"," adopt [glob] Import existing git worktrees as tasks"," export [--csv|--json] Print the task list (json/csv/table; daemon-free)"," repo <verb> Per-repo init script + first prompt (show|set|unset)"," api <verb> Scriptable RPC surface for agents (see `kobe api --help`)"," daemon <verb> Manage the daemon (start|stop|status|restart)"," theme <verb> Manage user themes (list|add|remove)"," skill <verb> Install the kobe agent skill (install|status|command)"," feedback Send feedback to GitHub Discussions"," update [target] Self-update kobe"," doctor Diagnose daemon / tmux / state (read-only)"," reset [--hard] 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(`
|
|
299
|
+
`)}var DM=`Usage: kobe add [path]
|
|
261
300
|
kobe add --remote --host <host> --user <user> --path <basePath> [--port N] [--key <path> | --password]
|
|
262
301
|
|
|
263
302
|
Save a repo for the new-task picker. With --remote, register an SSH-backed
|
|
264
303
|
project whose worktrees + engine run on <host> under <basePath>.
|
|
265
|
-
`;async function
|
|
304
|
+
`;async function iI(f){let J=f[0];if(J==="--help"||J==="-h"||J==="help"){process.stdout.write(DM);return}if(J==="--remote"){let{runAddRemote:q}=await Promise.resolve().then(() => (l9(),i9));await q(f.slice(1));return}if(J?.startsWith("-"))process.stderr.write(`kobe add: unknown flag "${J}"
|
|
266
305
|
|
|
267
|
-
${
|
|
268
|
-
`),process.exit(1);let X=z(Y);if(X.added)console.log(`added ${X.path} (${X.total} saved repo${X.total===1?"":"s"} total)`);else console.log(`already saved: ${X.path}`);await
|
|
306
|
+
${DM}`),process.exit(2);let Y=V9(process.cwd(),J&&J.length>0?J:"."),{addSavedRepo:z,isGitRepo:G}=await Promise.resolve().then(() => (Af(),nJ));if(!G(Y))process.stderr.write(`kobe add: "${J&&J.length>0?J:"."}" is not a git repository (resolved to ${Y}).
|
|
307
|
+
`),process.exit(1);let X=z(Y);if(X.added)console.log(`added ${X.path} (${X.total} saved repo${X.total===1?"":"s"} total)`);else console.log(`already saved: ${X.path}`);await aI(X.path)}var LM=`Usage: kobe remove [path]
|
|
269
308
|
|
|
270
309
|
Forget a saved project (drop it from the new-task picker). Non-destructive:
|
|
271
310
|
the repo's files, worktrees, branches and tasks all stay on disk. A remote
|
|
@@ -274,19 +313,19 @@ the repo's files, worktrees, branches and tasks all stay on disk. A remote
|
|
|
274
313
|
path defaults to the current directory. Pass an exact saved entry (e.g. a
|
|
275
314
|
remote \`ssh://user@host\` key) to remove it verbatim. Run with no match to
|
|
276
315
|
print the current saved projects.
|
|
277
|
-
`;async function
|
|
316
|
+
`;async function lI(f){let J=f[0];if(J==="--help"||J==="-h"||J==="help"){process.stdout.write(LM);return}if(J?.startsWith("-"))process.stderr.write(`kobe remove: unknown flag "${J}"
|
|
278
317
|
|
|
279
|
-
${
|
|
318
|
+
${LM}`),process.exit(2);let{getSavedRepos:Y,resolveRepoRoot:z}=await Promise.resolve().then(() => (Af(),nJ)),G=Y();if(G.length===0){console.log("no saved projects to remove.");return}let X=J&&J.length>0?J:".",q=G.includes(X)?X:(()=>{let V=V9(process.cwd(),X),j=z(V);if(G.includes(j))return j;if(G.includes(V))return V;return null})();if(q===null){process.stderr.write(`kobe remove: "${X}" is not a saved project.
|
|
280
319
|
|
|
281
320
|
Saved projects:
|
|
282
321
|
`);for(let V of G)process.stderr.write(` ${V}
|
|
283
|
-
`);process.exit(1)}let{connectIfRunning:Q}=await Promise.resolve().then(() => (L1(),
|
|
284
|
-
`);function
|
|
322
|
+
`);process.exit(1)}let{connectIfRunning:Q}=await Promise.resolve().then(() => (L1(),oq)),H=await Q();try{if(H)await H.request("project.forget",{repo:q});else await(await K9()).forgetProject(q)}finally{H?.close()}let B=Y().length;console.log(`removed ${q} (${B} saved repo${B===1?"":"s"} left)`)}async function aI(f){let J=await K9(),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 FM(J,f,Y,iY(void 0))}async function K9(){let{TaskIndexStore:f}=await Promise.resolve().then(() => (CX(),Cj)),{GitWorktreeManager:J}=await Promise.resolve().then(() => (yj(),iK)),{Orchestrator:Y}=await Promise.resolve().then(() => (YX(),nV)),z=new f;return await z.load(),new Y({store:z,worktrees:new J})}async function FM(f,J,Y,z){let{connectIfRunning:G}=await Promise.resolve().then(() => (L1(),oq)),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 OM=["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(`
|
|
323
|
+
`);function W9(f){process.stderr.write(`kobe adopt: ${f}
|
|
285
324
|
|
|
286
|
-
${
|
|
287
|
-
`),process.exit(2)}async function
|
|
288
|
-
`);return}if(L==="--repo"){if(Y=f[++
|
|
325
|
+
${OM}
|
|
326
|
+
`),process.exit(2)}async function $I(f){let J,Y,z,G=!1;for(let K=0;K<f.length;K++){let L=f[K];if(L==="--help"||L==="-h"||L==="help"){process.stdout.write(`${OM}
|
|
327
|
+
`);return}if(L==="--repo"){if(Y=f[++K],Y===void 0)W9("--repo requires a value")}else if(L==="--vendor"){if(z=f[++K],z===void 0)W9("--vendor requires a value")}else if(L==="--yes"||L==="-y")G=!0;else if(L&&!L.startsWith("-")&&J===void 0)J=L;else W9(`unexpected argument "${L}"`)}let{resolveRepoRoot:X}=await Promise.resolve().then(() => (Af(),nJ)),q=X(V9(process.cwd(),Y&&Y.length>0?Y:".")),Q=iY(z),H=await K9(),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=(K)=>!J||fZ(J,K.path);console.log(`adoptable worktrees in ${q}:`);for(let K of B){let L=J?V(K)?"*":" ":"-",O=[K.dirty?"dirty":"",K.kobeManaged?"":"external"].filter(Boolean).join(",");console.log(` ${L} ${K.branch} ${K.path}${O?` (${O})`:""}`)}if(!J){console.log(`
|
|
289
328
|
pass a path glob to adopt, e.g. kobe adopt '${q}/*' --yes`);return}let j=B.filter(V);if(j.length===0){console.log(`
|
|
290
329
|
no worktrees match glob ${JSON.stringify(J)}`);return}if(!G){console.log(`
|
|
291
|
-
${j.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await
|
|
292
|
-
`)}function
|
|
330
|
+
${j.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await FM(H,q,j,Q),console.log(`done \u2014 adopted ${j.length} worktree(s)`)}function MM(f){f.write(`${k9()}
|
|
331
|
+
`)}function AJ(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 pI(){let[,,...f]=process.argv,[J,...Y]=f;if(J==="--version"||J==="-v"||J==="version"){let{CURRENT_VERSION:G}=await Promise.resolve().then(() => (D1(),b9));console.log(`kobe ${G}`);return}if(J==="--help"||J==="-h"||J==="help"){MM(process.stdout);return}if(J==="add"){await iI(Y);return}if(J==="remove"){await lI(Y);return}if(J==="completions"){let{runCompletionsSubcommand:G}=await Promise.resolve().then(() => (pK(),$K));await G(Y);return}if(J==="adopt"){await $I(Y);return}if(J==="export"){let{runExportSubcommand:G}=await Promise.resolve().then(() => (tK(),sK));await G(Y);return}if(J==="repo"){let{runRepoSubcommand:G}=await Promise.resolve().then(() => (YU(),JU));await G(Y);return}if(J==="api"){let{runApiSubcommand:G}=await Promise.resolve().then(() => (FU(),MU));await G(Y);return}if(J==="update"){let{runUpdateSubcommand:G}=await Promise.resolve().then(() => (CU(),RU));await G(Y);return}if(J==="theme"){let{runThemeSubcommand:G}=await Promise.resolve().then(() => (SU(),kU));await G(Y);return}if(J==="feedback"){let{runFeedbackSubcommand:G}=await Promise.resolve().then(() => (xU(),EU));await G(Y);return}if(J==="daemon"){let{runDaemonSubcommand:G}=await Promise.resolve().then(() => (mU(),vU));await G(Y);return}if(J==="doctor"){let{runDoctorSubcommand:G}=await Promise.resolve().then(() => (LQ(),DQ));await G(Y);return}if(J==="web"){let{runWebSubcommand:G}=await Promise.resolve().then(() => (J6(),f6));await G(Y);return}if(J==="reset"){let{runResetSubcommand:G}=await Promise.resolve().then(() => (LQ(),DQ));await G(Y);return}if(J==="reload"){let{runReloadSubcommand:G}=await Promise.resolve().then(() => (LQ(),DQ));await G(Y);return}if(J==="skill"){let{runSkillSubcommand:G}=await Promise.resolve().then(() => (G6(),z6));await G(Y);return}if(J==="hook"){let{runHookSubcommand:G}=await Promise.resolve().then(() => (aj(),lj));await G(Y);return}if(J==="new-chattab"){let G=AJ(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(() => (Ef(),qX));if(await q(X))return;let Q;if(G.vendor!==void 0){let B=G.vendor.trim(),{getCustomEngineIds:V}=await Promise.resolve().then(() => (Af(),nJ)),{isBuiltinVendor:j}=await Promise.resolve().then(() => (U1(),O9));if(!(j(B)||V().includes(B))){let O=[...cf,...V()].join(", "),M=`kobe: unknown engine '${B}' (known: ${O})`,{runTmux:g}=await Promise.resolve().then(() => (Ef(),qX));await g(["display-message","-t",X,M]),console.error(M),process.exit(2)}Q=B;let{setPersistedString:L}=await Promise.resolve().then(() => (Af(),nJ));L("lastSelectedVendor",Q)}let{newChatTab:H}=await Promise.resolve().then(() => (z1(),_1));await H(X,Q);return}if(J==="kill-sessions"){let{runTmux:G,KOBE_TMUX_SOCKET:X}=await Promise.resolve().then(() => (Ef(),qX)),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=AJ(Y).session;if(!X)console.error("kobe quick-create: --session <name> is required"),process.exit(2);let{quickCreate:q}=await Promise.resolve().then(() => (z1(),_1));await q(X);return}if(J==="focus-tasks"){let G=AJ(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(() => (Ef(),qX));if(G.windowId&&await q(G.windowId))return;let{selectTasksPane:Q}=await Promise.resolve().then(() => (z1(),_1));await Q(X,{windowId:G.windowId});return}if(J==="heal-layout"){let X=AJ(Y).session;if(!X)console.error("kobe heal-layout: --session <name> is required"),process.exit(2);let{healSessionLayout:q}=await Promise.resolve().then(() => (z1(),_1)),{coalesceLayoutWork:Q}=await Promise.resolve().then(() => (HG(),wq));await Q(X,"heal",()=>q(X));return}if(J==="resync-window"){let G=AJ(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(() => (z1(),_1)),{coalesceLayoutWork:V}=await Promise.resolve().then(() => (HG(),wq));await V(X,"resync",()=>B(X,{size:H,status:G.status,clientName:G.client}));return}if(J==="capture-layout"){let X=AJ(Y).session;if(!X)console.error("kobe capture-layout: --session <name> is required"),process.exit(2);let{captureGlobalLayoutOnDrag:q}=await Promise.resolve().then(() => (z1(),_1)),{coalesceLayoutWork:Q,genAgeMs:H,RESIZE_GUARD_MS:B}=await Promise.resolve().then(() => (HG(),wq));await Q(X,"capture",async()=>{if(H(X,"resize")<B)return;await q(X)});return}if(J==="layout"){let G=AJ(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(() => (z1(),_1));await H(X,q,{windowId:G.windowId});return}if(J==="quick-task"){let G=AJ(Y),{startQuickTaskHost:X}=await Promise.resolve().then(() => (SD(),kD));await X({session:G.session});return}if(J==="tasks"){let G=AJ(Y),{startTasksPane:X}=await Promise.resolve().then(() => (SL(),kL));await X({initialTaskId:G.initialTaskId});return}if(J==="settings"){let{startSettingsHost:G}=await Promise.resolve().then(() => (TL(),IL));await G();return}if(J==="help-page"){let{startHelpHost:G}=await Promise.resolve().then(() => (EL(),uL));await G();return}if(J==="new-task"){let G=AJ(Y),{startNewTaskHost:X}=await Promise.resolve().then(() => (E8(),OD));await X({defaultRepo:G.repo});return}if(J==="update-page"){let{startUpdateHost:G}=await Promise.resolve().then(() => (wL(),xL));await G();return}if(J==="ops"){let G=AJ(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(() => (j9(),B9));await q({worktree:G.worktree,relPath:G.preview});return}let{startOpsHost:X}=await Promise.resolve().then(() => (j9(),B9));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}'`),MM(process.stderr),process.exit(2);let{startTui:z}=await Promise.resolve().then(() => (UM(),KM));await z()}pI().catch((f)=>{console.error("kobe failed to start:",f),process.exit(1)});
|