@sma1lboy/kobe 0.7.44 → 0.7.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/cli/index.js +207 -207
  2. package/dist/web-ui/assets/{AppShell-CDaOEdi-.js → AppShell-CYm01lx0.js} +1 -1
  3. package/dist/web-ui/assets/{Board-Fbdp8XH6.js → Board-Cb_qgK8p.js} +1 -1
  4. package/dist/web-ui/assets/{BoardPeek-CGlvEzKm.js → BoardPeek-BhMuWjKj.js} +2 -2
  5. package/dist/web-ui/assets/{ChatTerminal-BVTnkMgh.js → ChatTerminal-DtqC7Mxi.js} +1 -1
  6. package/dist/web-ui/assets/{ChatTranscript-GThjCf3G.js → ChatTranscript-DdXMAQZR.js} +1 -1
  7. package/dist/web-ui/assets/{ConfirmDialog-ChauYIZh.js → ConfirmDialog-NPI1j7RW.js} +1 -1
  8. package/dist/web-ui/assets/{IssueIntakePanel-NYS_B5Ja.js → IssueIntakePanel-60iwjJTZ.js} +1 -1
  9. package/dist/web-ui/assets/{IssuePeek-CHxd9Wd2.js → IssuePeek-BbXifAKp.js} +1 -1
  10. package/dist/web-ui/assets/{IssuesPage-DWYtp4SQ.js → IssuesPage-zQbthJwx.js} +1 -1
  11. package/dist/web-ui/assets/{SettingsPage-DrXLFGQC.js → SettingsPage-BT-LGgyI.js} +1 -1
  12. package/dist/web-ui/assets/{SlideOver-Ecw6HOJj.js → SlideOver-CLaRtSQE.js} +1 -1
  13. package/dist/web-ui/assets/{ViewToggle-CugmdlMf.js → ViewToggle-Cok6O_mP.js} +1 -1
  14. package/dist/web-ui/assets/{WorkspaceTabs-BpeeMXZx.js → WorkspaceTabs-DmfAn-hk.js} +3 -3
  15. package/dist/web-ui/assets/board-BEUe7jtL.js +1 -0
  16. package/dist/web-ui/assets/index-C7JcdWbk.css +1 -0
  17. package/dist/web-ui/assets/{index-Dj1p8IG5.js → index-CZ8GNIM9.js} +3 -3
  18. package/dist/web-ui/assets/issues-DkAiF0x1.js +1 -0
  19. package/dist/web-ui/assets/{issues-B7S736HE.js → issues-Dq7AkivK.js} +1 -1
  20. package/dist/web-ui/assets/{lazy-issue-panels-BEMcULAZ.js → lazy-issue-panels-CAA0flSv.js} +3 -3
  21. package/dist/web-ui/assets/routes-DBeL-4xe.js +1 -0
  22. package/dist/web-ui/assets/{store-C4ms6xvg.js → store-BXWXnGds.js} +1 -1
  23. package/dist/web-ui/assets/{task._taskId-CFALCSAr.js → task._taskId-DBT8vG_M.js} +1 -1
  24. package/dist/web-ui/index.html +3 -3
  25. package/dist/web-ui/pty-session-lifecycle.mjs +99 -0
  26. package/package.json +1 -1
  27. package/dist/web-ui/assets/board-Brh_Zq0E.js +0 -1
  28. package/dist/web-ui/assets/index-BxOdeldP.css +0 -1
  29. package/dist/web-ui/assets/issues-DzyXWaNt.js +0 -1
  30. package/dist/web-ui/assets/routes-CaoA3-Vv.js +0 -1
package/dist/cli/index.js CHANGED
@@ -1,88 +1,88 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var rM=Object.defineProperty;var oM=(f)=>f;function sM(f,Y){this[f]=oM.bind(null,Y)}var H1=(f,Y)=>{for(var J in Y)rM(f,J,{get:Y[J],enumerable:!0,configurable:!0,set:sM.bind(Y,J)})};var N=(f,Y)=>()=>(f&&(Y=f(f=0)),Y);var QX=import.meta.require;import{basename as tM}from"path";function eM(f){let Y="";for(let J=0;J<f.length;J++){let z=f[J];if(z==="*")if(f[J+1]==="*")Y+=".*",J++;else Y+="[^/]*";else if(z==="?")Y+="[^/]";else if(z&&"\\^$.|+()[]{}".includes(z))Y+=`\\${z}`;else Y+=z}return new RegExp(`^${Y}$`)}function qX(f,Y){let J;try{J=eM(f)}catch{return!1}return J.test(Y)||J.test(tM(Y))}var XH=()=>{};var w9={};H1(w9,{resolvePersistedVendor:()=>PY,prevVendorWithin:()=>QH,nextVendorWithin:()=>WJ,nextVendor:()=>fF,isBuiltinVendor:()=>Yf,coerceVendorId:()=>pJ,BUILTIN_VENDORS:()=>$J,ALL_VENDORS:()=>m1});function Yf(f){return f==="claude"||f==="codex"||f==="copilot"}function fF(f){let Y=m1.indexOf(f);return m1[(Y+1)%m1.length]??m1[0]}function WJ(f,Y){if(f.length===0)return Y;let J=f.indexOf(Y);return f[(J+1)%f.length]??f[0]??Y}function QH(f,Y){if(f.length===0)return Y;let J=f.indexOf(Y);if(J<0)return f[f.length-1]??Y;return f[(J-1+f.length)%f.length]??Y}function pJ(f){let Y=f?.trim();return Y&&Y.length>0?Y:"claude"}function PY(f,Y=[]){let J=f?.trim();if(!J)return"claude";if(Yf(J))return J;if(Y.includes(J))return J;return"claude"}var $J,m1;var $1=N(()=>{$J=["claude","codex","copilot"],m1=[...$J]});var HX;var h9=N(()=>{HX={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.44",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","node-pty":"^1.1.0"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/kobe-daemon":"0.7.11","@tsconfig/bun":"1.0.10","@types/bun":"1.3.14","@types/node":"25.6.2",knip:"^6.14.2","kobe-web":"workspace:*",typescript:"5.8.2",vitest:"2.1.9"},trustedDependencies:[]}});import{createHash as P9}from"crypto";import{homedir as JF}from"os";import{join as _J}from"path";function v9(){return process.env.KOBE_DEV==="1"}function OY(){return process.env.KOBE_HOME_DIR??JF()}function Jf(){return _J(OY(),".kobe")}function mf(){return _J(OY(),".config","kobe","state.json")}function zF(){return _J(Jf(),"settings")}function m9(){return _J(zF(),"keybindings.yaml")}function qH(){return _J(Jf(),"issue-assets")}function BX(f,Y,J){let z=P9("sha1").update(`${Y}@${f}:${J??22}`).digest("hex").slice(0,16);return _J(Jf(),"ssh",`${z}.sock`)}function c9(f){let Y=P9("sha1").update(f).digest("hex").slice(0,16);return _J(Jf(),"worktree-init",Y)}var i1=()=>{};var d9={};H1(d9,{repoSlug:()=>rJ,releasePageUrl:()=>VH,recommendedGlobalInstallCommand:()=>jH,isNewerSemver:()=>HH,fetchReleaseSummaries:()=>XF,fetchReleaseNotesRange:()=>WH,fetchReleaseNotes:()=>GF,compareSemver:()=>jX,checkLatestVersion:()=>dZ,UPDATE_SCRIPT_URL:()=>WX,UPDATE_COMMAND:()=>vY,PACKAGE_NAME:()=>BH,CURRENT_VERSION:()=>t0});function rJ(){let f=HX.repository?.url;if(!f)return null;let Y=f.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!Y||!Y[1]||!Y[2])return null;return`${Y[1]}/${Y[2]}`}function jH(){return`npm install -g ${BH}@latest`}async function ZF(f){let Y=new AbortController,J=setTimeout(()=>Y.abort(),VX);try{let z=f.replace("/","%2F"),Z=await fetch(`https://registry.npmjs.org/${z}/latest`,{signal:Y.signal,headers:{accept:"application/json"}});if(!Z.ok)return null;let G=await Z.json();if(typeof G.version!=="string")return null;return G.version}catch{return null}finally{clearTimeout(J)}}function HH(f,Y){return jX(f,Y)>0}function jX(f,Y){let J=(G)=>G.split("-")[0]??G,z=J(f).split(".").map((G)=>Number.parseInt(G,10)),Z=J(Y).split(".").map((G)=>Number.parseInt(G,10));for(let G=0;G<3;G++){let Q=z[G]??0,q=Z[G]??0;if(Number.isNaN(Q)||Number.isNaN(q))return 0;if(Q>q)return 1;if(Q<q)return-1}return 0}async function dZ(f={}){let Y=process.env.KOBE_FAKE_UPDATE;if(Y)return{current:t0,latest:Y,hasUpdate:HH(Y,t0)};if(v9()&&!f.force)return null;let J=await ZF(BH);if(!J)return null;return{current:t0,latest:J,hasUpdate:HH(J,t0)}}function n9(f){if(typeof f!=="string")return null;return f.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function GF(f){let Y=rJ();if(!Y)return null;let J=`v${f}`,z=new AbortController,Z=setTimeout(()=>z.abort(),VX);try{let G=await fetch(`https://api.github.com/repos/${Y}/releases/tags/${J}`,{signal:z.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!G.ok)return null;let Q=await G.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(Z)}}async function WH(f){let Y=rJ();if(!Y)return[];let J=f.limit??100,z=new AbortController,Z=setTimeout(()=>z.abort(),VX);try{let G=await fetch(`https://api.github.com/repos/${Y}/releases?per_page=${J}`,{signal:z.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!G.ok)return[];let Q=await G.json();if(!Array.isArray(Q))return[];return Q.map((q)=>{let H=n9(q.tag_name);if(!H||typeof q.html_url!=="string"||typeof q.body!=="string")return null;if(jX(H,f.current)<=0)return null;if(jX(H,f.latest)>0)return null;return{version:H,url:q.html_url,body:q.body}}).filter((q)=>q!==null)}catch{return[]}finally{clearTimeout(Z)}}async function XF(f=12){let Y=rJ();if(!Y)return[];let J=new AbortController,z=setTimeout(()=>J.abort(),VX);try{let Z=await fetch(`https://api.github.com/repos/${Y}/releases?per_page=${f}`,{signal:J.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!Z.ok)return[];let G=await Z.json();if(!Array.isArray(G))return[];return G.map((Q)=>{let q=n9(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 VH(f){let Y=rJ();if(!Y)return null;return`https://github.com/${Y}/releases/tag/v${f}`}var t0,BH,WX="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",vY,VX=3000;var Df=N(()=>{h9();i1();t0=HX.version,BH=HX.name;vY=`curl -fsSL ${WX} | sh`});import{spawn as QF,spawnSync as qF}from"child_process";import{existsSync as l9}from"fs";import{mkdir as HF,readFile as BF,readdir as jF}from"fs/promises";function oJ(f){return`'${f.replace(/'/g,"'\\''")}'`}function WF(f){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(f)?f:oJ(f)}function $9(f){return f.map(oJ).join(" ")}function VF(f,Y){let J=$9(f);return Y?`cd ${oJ(Y)} && ${J}`:J}function KF(f){if(!f)return"";let Y=Object.entries(f).filter(([J])=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(J));if(Y.length===0)return"";return`${Y.map(([J,z])=>`${J}=${oJ(z)}`).join(" ")} `}function iZ(f,Y={}){let J=["ssh"];if(Y.tty)J.push("-tt");if(Y.batch)J.push("-o","BatchMode=yes");if(J.push("-o","ControlMaster=auto","-o",`ControlPath=${f.controlPath}`,"-o","ControlPersist=300"),J.push("-o","StrictHostKeyChecking=accept-new"),f.port)J.push("-p",String(f.port));if(f.auth.kind==="key"&&f.auth.keyPath)J.push("-i",f.auth.keyPath);return J.push(`${f.user}@${f.host}`),J}function p9(f,Y={}){return new Promise((J)=>{let[z,...Z]=f,G="",Q="",q=!1,H=(V)=>{if(q)return;q=!0,J({stdout:G,stderr:Q,exitCode:V})},B;try{B=QF(z??"",Z,{cwd:Y.cwd,env:Y.env,shell:!1,signal:Y.signal})}catch{H(-1);return}B.stdout?.setEncoding("utf8"),B.stdout?.on("data",(V)=>{G+=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 KX{isRemote=!1;run(f,Y={}){return p9(f,{cwd:Y.cwd,env:Y.env?{...process.env,...Y.env}:process.env,signal:Y.signal})}async exists(f){return l9(f)}existsSync(f){return l9(f)}async mkdirp(f){await HF(f,{recursive:!0})}async readFile(f){try{return await BF(f,"utf8")}catch{return null}}async readdir(f){try{return await jF(f)}catch{return[]}}wrapCommand(f){return f}ensureReady(){}}class Pz{spec;spawn;isRemote=!0;masterUp=!1;spawnAsync;constructor(f,Y=a9,J){this.spec=f;this.spawn=Y;this.spawnAsync=J??(this.spawn===a9?UF:async(z,Z)=>this.spawn(z,Z))}ensureReady(){if(this.masterUp)return;if(this.spawn([...iZ(this.spec,{batch:!0}),"-O","check"]).exitCode===0){this.masterUp=!0;return}let Y=[...iZ(this.spec,{batch:this.spec.auth.kind!=="password"}),"-fN"];if(this.spec.auth.kind==="password"){let J=this.spec.auth.getPassword();if(J!=null){this.spawn(["sshpass","-e",...Y],{SSHPASS:J}),this.masterUp=!0;return}}this.spawn(Y),this.masterUp=!0}async run(f,Y={}){this.ensureReady();let J=`${KF(Y.env)}${$9(f)}`,z=Y.cwd?`cd ${oJ(Y.cwd)} && ${J}`:J;return this.spawnAsync([...iZ(this.spec,{batch:!0}),z],void 0,{signal:Y.signal})}async exists(f){return(await this.run(["test","-e",f])).exitCode===0}existsSync(f){return this.ensureReady(),this.spawn([...iZ(this.spec,{batch:!0}),VF(["test","-e",f])]).exitCode===0}async mkdirp(f){await this.run(["mkdir","-p",f])}async readFile(f){let Y=await this.run(["cat",f]);return Y.exitCode===0?Y.stdout:null}async readdir(f){let Y=await this.run(["ls","-1A",f]);if(Y.exitCode!==0)return[];return Y.stdout.split(`
4
- `).filter((J)=>J.length>0)}wrapCommand(f,Y={}){let J=Y.cwd?`cd ${oJ(Y.cwd)} && ${f}`:f;return`${iZ(this.spec,{tty:Y.tty}).map(WF).join(" ")} ${oJ(J)}`}}var a9=(f,Y)=>{let[J,...z]=f,Z=qF(J??"",z,{env:Y?{...process.env,...Y}:process.env,encoding:"utf8",shell:!1});return{stdout:Z.stdout??"",stderr:Z.stderr??"",exitCode:Z.status??-1}},UF=(f,Y,J)=>p9(f,{env:Y?{...process.env,...Y}:process.env,signal:J?.signal});var KH=()=>{};import{spawnSync as DF}from"child_process";import{platform as LF}from"os";function _9(f,Y,J){return{service:MF,account:J?`${Y}@${f}:${J}`:`${Y}@${f}`}}function DH(f=UH){return f.platform()==="darwin"}function r9(f,Y,J=UH){if(J.platform()!=="darwin")return!1;let{exitCode:z}=J.run(["security","add-generic-password","-U","-s",f.service,"-a",f.account,"-w",Y]);return z===0}function UX(f,Y=UH){if(Y.platform()!=="darwin")return null;let{stdout:J,exitCode:z}=Y.run(["security","find-generic-password","-s",f.service,"-a",f.account,"-w"]);if(z!==0)return null;return J.replace(/\n$/,"")}var UH,MF="kobe-remote-ssh";var LH=N(()=>{UH={run(f){let[Y,...J]=f,z=DF(Y??"",J,{encoding:"utf8",shell:!1});return{stdout:z.stdout??"",exitCode:z.status??-1}},platform(){return LF()}}});import{mkdirSync as FF,readFileSync as OF,renameSync as AF,writeFileSync as RF}from"fs";import{dirname as gF}from"path";function c1(){try{let f=OF(mf(),"utf8"),Y=JSON.parse(f);if(Y&&typeof Y==="object"&&!Array.isArray(Y))return Y}catch{}return{}}function o9(f){let Y=mf();FF(gF(Y),{recursive:!0});let J=`${Y}.tmp`;RF(J,JSON.stringify(f,null,2),"utf8"),AF(J,Y)}function vz(f){let Y=c1();if(f(Y)!==!1)o9(Y);return Y}function sJ(f){return vz((Y)=>{for(let[J,z]of Object.entries(f))if(z===void 0)delete Y[J];else Y[J]=z;return})}function s9(f){o9(f)}var tJ=N(()=>{i1()});var iY={};H1(iY,{statePath:()=>bF,setRepoInitOverride:()=>kF,setPersistedString:()=>l1,resolveRepoRoot:()=>mY,resolveMainRepoRoot:()=>NF,removeSavedRepo:()=>AH,remoteRepoKey:()=>YW,normalizeSavedRepos:()=>FH,isRemoteRepoKey:()=>zf,isRemoteProjectsEnabled:()=>RH,isGitRepo:()=>CF,getSavedRepos:()=>Of,getRepoInitOverride:()=>OH,getRemoteRepos:()=>gH,getRemoteRepoConfig:()=>dY,getPersistedString:()=>k1,getCustomEngineIds:()=>cY,addSavedRepo:()=>nY,addRemoteRepo:()=>CH});import{spawnSync as MH}from"child_process";import{realpathSync as t9}from"fs";function mY(f){if(zf(f))return f;let Y=MH("git",["rev-parse","--show-toplevel"],{cwd:f,encoding:"utf8",shell:!1});if(Y.status!==0)return f;let J=(Y.stdout??"").trim();if(!J)return f;try{if(t9(f)===t9(J))return f}catch{}return J}function CF(f){if(zf(f))return!1;let Y=MH("git",["rev-parse","--is-inside-work-tree"],{cwd:f,encoding:"utf8",shell:!1});return Y.status===0&&(Y.stdout??"").trim()==="true"}function NF(f){if(zf(f))return f;let Y=MH("git",["worktree","list","--porcelain"],{cwd:f,encoding:"utf8",shell:!1});if(Y.status!==0)return mY(f);return(Y.stdout??"").split(/\r?\n/).find((z)=>z.startsWith("worktree "))?.slice(9).trim()||mY(f)}function bF(){return mf()}function DX(f){let Y=f.savedRepos;if(!Array.isArray(Y))return[];return Y.filter((J)=>typeof J==="string")}function Of(){return DX(c1())}function k1(f){let Y=c1()[f];return typeof Y==="string"?Y:void 0}function l1(f,Y){sJ({[f]:Y})}function cY(){let f=c1().customEngineIds;if(!Array.isArray(f))return[];return f.filter((Y)=>typeof Y==="string"&&Y.trim().length>0)}function nY(f){let Y=mY(f),J={added:!1,path:Y,total:0};return vz((z)=>{let Z=DX(z);if(Z.includes(Y))return J={added:!1,path:Y,total:Z.length},!1;z.savedRepos=[...Z,Y],J={added:!0,path:Y,total:Z.length+1};return}),J}function FH(){let f=Of(),Y=new Set,J=[],z=!1;for(let Z of f){let G=mY(Z);if(G!==Z)z=!0;if(Y.has(G)){z=!0;continue}Y.add(G),J.push(G)}if(!z)return;sJ({savedRepos:J})}function e9(f){let Y=f.repoConfigs;if(!Y||typeof Y!=="object"||Array.isArray(Y))return{};return Y}function fW(f){if(!f||typeof f!=="object")return{};let Y=f;return{initScript:typeof Y.initScript==="string"&&Y.initScript.length>0?Y.initScript:void 0,initPrompt:typeof Y.initPrompt==="string"&&Y.initPrompt.length>0?Y.initPrompt:void 0}}function OH(f){return fW(e9(c1())[mY(f)])}function kF(f,Y){let J=mY(f),z={};return vz((Z)=>{let G={...e9(Z)},Q=fW(G[J]),q=Y.initScript===void 0?Q.initScript:Y.initScript||void 0,H=Y.initPrompt===void 0?Q.initPrompt:Y.initPrompt||void 0;if(z={...q?{initScript:q}:{},...H?{initPrompt:H}:{}},!z.initScript&&!z.initPrompt){let{[J]:B,...V}=G;Z.repoConfigs=V}else G[J]=z,Z.repoConfigs=G;return}),z}function AH(f){let Y={removed:!1,path:f,total:0};return vz((J)=>{let z=DX(J);if(!z.includes(f))return Y={removed:!1,path:f,total:z.length},!1;if(J.savedRepos=z.filter((Z)=>Z!==f),zf(f)){let Z=LX(J);if(f in Z){let G={...Z};delete G[f],J.remoteRepos=G}}Y={removed:!0,path:f,total:z.length-1};return}),Y}function zf(f){return f.startsWith("ssh://")}function RH(){return c1()["experimental.remoteProjects"]===!0}function YW(f,Y,J){return J?`ssh://${Y}@${f}:${J}`:`ssh://${Y}@${f}`}function LX(f){let Y=f.remoteRepos;if(!Y||typeof Y!=="object"||Array.isArray(Y))return{};return Y}function dY(f){return LX(c1())[f]??null}function gH(){return LX(c1())}function CH(f){let Y=YW(f.host,f.user,f.port),J=!1;return vz((z)=>{let Z={...LX(z)};Z[Y]=f,z.remoteRepos=Z;let G=DX(z);if(J=!G.includes(Y),J)z.savedRepos=[...G,Y];return}),{key:Y,added:J}}var A1=N(()=>{i1();tJ()});var ZW={};H1(ZW,{runAddRemote:()=>IF,parseRemoteFlags:()=>zW});import{createInterface as yF}from"readline";function zW(f){let Y={};for(let J=0;J<f.length;J++){let z=f[J];switch(z){case"--host":Y.host=f[++J];break;case"--user":Y.user=f[++J];break;case"--path":Y.path=f[++J];break;case"--port":{let Z=Number(f[++J]);if(!Number.isInteger(Z)||Z<=0)ef(`invalid --port "${f[J]}"`);Y.port=Z;break}case"--key":{let Z=f[J+1];if(Z&&!Z.startsWith("-"))Y.key={present:!0,path:Z},J++;else Y.key={present:!0};break}case"--password":Y.password=!0;break;case"--help":case"-h":process.stdout.write(JW),process.exit(0);break;default:ef(`unknown flag "${z}"`)}}return Y}function ef(f){process.stderr.write(`kobe add --remote: ${f}
3
+ var zF=Object.defineProperty;var YF=(J)=>J;function ZF(J,z){this[J]=YF.bind(null,z)}var B1=(J,z)=>{for(var Y in z)zF(J,Y,{get:z[Y],enumerable:!0,configurable:!0,set:ZF.bind(z,Y)})};var N=(J,z)=>()=>(J&&(z=J(J=0)),z);var FQ=import.meta.require;import{basename as GF}from"path";function XF(J){let z="";for(let Y=0;Y<J.length;Y++){let Z=J[Y];if(Z==="*")if(J[Y+1]==="*")z+=".*",Y++;else z+="[^/]*";else if(Z==="?")z+="[^/]";else if(Z&&"\\^$.|+()[]{}".includes(Z))z+=`\\${Z}`;else z+=Z}return new RegExp(`^${z}$`)}function OQ(J,z){let Y;try{Y=XF(J)}catch{return!1}return Y.test(z)||Y.test(GF(z))}var SH=()=>{};var VW={};B1(VW,{resolvePersistedVendor:()=>dz,prevVendorWithin:()=>IH,nextVendorWithin:()=>LY,nextVendor:()=>QF,isBuiltinVendor:()=>QJ,coerceVendorId:()=>sY,BUILTIN_VENDORS:()=>oY,ALL_VENDORS:()=>i1});function QJ(J){return J==="claude"||J==="codex"||J==="copilot"}function QF(J){let z=i1.indexOf(J);return i1[(z+1)%i1.length]??i1[0]}function LY(J,z){if(J.length===0)return z;let Y=J.indexOf(z);return J[(Y+1)%J.length]??J[0]??z}function IH(J,z){if(J.length===0)return z;let Y=J.indexOf(z);if(Y<0)return J[J.length-1]??z;return J[(Y-1+J.length)%J.length]??z}function sY(J){let z=J?.trim();return z&&z.length>0?z:"claude"}function dz(J,z=[]){let Y=J?.trim();if(!Y)return"claude";if(QJ(Y))return Y;if(z.includes(Y))return Y;return"claude"}var oY,i1;var t1=N(()=>{oY=["claude","codex","copilot"],i1=[...oY]});var AQ;var KW=N(()=>{AQ={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.45",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","node-pty":"^1.1.0"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/kobe-daemon":"0.7.11","@tsconfig/bun":"1.0.10","@types/bun":"1.3.14","@types/node":"25.6.2",knip:"^6.14.2","kobe-web":"workspace:*",typescript:"5.8.2",vitest:"2.1.9"},trustedDependencies:[]}});import{createHash as UW}from"crypto";import{homedir as fF}from"os";import{join as tY}from"path";function DW(){return process.env.KOBE_DEV==="1"}function Nz(){return process.env.KOBE_HOME_DIR??fF()}function qJ(){return tY(Nz(),".kobe")}function iJ(){return tY(Nz(),".config","kobe","state.json")}function HF(){return tY(qJ(),"settings")}function LW(){return tY(HF(),"keybindings.yaml")}function yH(){return tY(qJ(),"issue-assets")}function RQ(J,z,Y){let Z=UW("sha1").update(`${z}@${J}:${Y??22}`).digest("hex").slice(0,16);return tY(qJ(),"ssh",`${Z}.sock`)}function MW(J){let z=UW("sha1").update(J).digest("hex").slice(0,16);return tY(qJ(),"worktree-init",z)}var p1=()=>{};var OW={};B1(OW,{repoSlug:()=>eY,releasePageUrl:()=>wH,recommendedGlobalInstallCommand:()=>xH,isNewerSemver:()=>TH,fetchReleaseSummaries:()=>WF,fetchReleaseNotesRange:()=>EH,fetchReleaseNotes:()=>jF,compareSemver:()=>gQ,checkLatestVersion:()=>sG,UPDATE_SCRIPT_URL:()=>CQ,UPDATE_COMMAND:()=>nz,PACKAGE_NAME:()=>uH,CURRENT_VERSION:()=>t0});function eY(){let J=AQ.repository?.url;if(!J)return null;let z=J.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!z||!z[1]||!z[2])return null;return`${z[1]}/${z[2]}`}function xH(){return`npm install -g ${uH}@latest`}async function BF(J){let z=new AbortController,Y=setTimeout(()=>z.abort(),NQ);try{let Z=J.replace("/","%2F"),G=await fetch(`https://registry.npmjs.org/${Z}/latest`,{signal:z.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 TH(J,z){return gQ(J,z)>0}function gQ(J,z){let Y=(X)=>X.split("-")[0]??X,Z=Y(J).split(".").map((X)=>Number.parseInt(X,10)),G=Y(z).split(".").map((X)=>Number.parseInt(X,10));for(let X=0;X<3;X++){let Q=Z[X]??0,f=G[X]??0;if(Number.isNaN(Q)||Number.isNaN(f))return 0;if(Q>f)return 1;if(Q<f)return-1}return 0}async function sG(J={}){let z=process.env.KOBE_FAKE_UPDATE;if(z)return{current:t0,latest:z,hasUpdate:TH(z,t0)};if(DW()&&!J.force)return null;let Y=await BF(uH);if(!Y)return null;return{current:t0,latest:Y,hasUpdate:TH(Y,t0)}}function FW(J){if(typeof J!=="string")return null;return J.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function jF(J){let z=eY();if(!z)return null;let Y=`v${J}`,Z=new AbortController,G=setTimeout(()=>Z.abort(),NQ);try{let X=await fetch(`https://api.github.com/repos/${z}/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:J}}catch{return null}finally{clearTimeout(G)}}async function EH(J){let z=eY();if(!z)return[];let Y=J.limit??100,Z=new AbortController,G=setTimeout(()=>Z.abort(),NQ);try{let X=await fetch(`https://api.github.com/repos/${z}/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((f)=>{let H=FW(f.tag_name);if(!H||typeof f.html_url!=="string"||typeof f.body!=="string")return null;if(gQ(H,J.current)<=0)return null;if(gQ(H,J.latest)>0)return null;return{version:H,url:f.html_url,body:f.body}}).filter((f)=>f!==null)}catch{return[]}finally{clearTimeout(G)}}async function WF(J=12){let z=eY();if(!z)return[];let Y=new AbortController,Z=setTimeout(()=>Y.abort(),NQ);try{let G=await fetch(`https://api.github.com/repos/${z}/releases?per_page=${J}`,{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 f=FW(Q.tag_name);if(!f||typeof Q.html_url!=="string")return null;return{version:f,url:Q.html_url}}).filter((Q)=>Q!==null)}catch{return[]}finally{clearTimeout(Z)}}function wH(J){let z=eY();if(!z)return null;return`https://github.com/${z}/releases/tag/v${J}`}var t0,uH,CQ="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",nz,NQ=3000;var FJ=N(()=>{KW();p1();t0=AQ.version,uH=AQ.name;nz=`curl -fsSL ${CQ} | sh`});import{spawn as VF,spawnSync as KF}from"child_process";import{existsSync as RW}from"fs";import{mkdir as UF,readFile as DF,readdir as LF}from"fs/promises";function JZ(J){return`'${J.replace(/'/g,"'\\''")}'`}function MF(J){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(J)?J:JZ(J)}function CW(J){return J.map(JZ).join(" ")}function FF(J,z){let Y=CW(J);return z?`cd ${JZ(z)} && ${Y}`:Y}function OF(J){if(!J)return"";let z=Object.entries(J).filter(([Y])=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(Y));if(z.length===0)return"";return`${z.map(([Y,Z])=>`${Y}=${JZ(Z)}`).join(" ")} `}function tG(J,z={}){let Y=["ssh"];if(z.tty)Y.push("-tt");if(z.batch)Y.push("-o","BatchMode=yes");if(Y.push("-o","ControlMaster=auto","-o",`ControlPath=${J.controlPath}`,"-o","ControlPersist=300"),Y.push("-o","StrictHostKeyChecking=accept-new"),J.port)Y.push("-p",String(J.port));if(J.auth.kind==="key"&&J.auth.keyPath)Y.push("-i",J.auth.keyPath);return Y.push(`${J.user}@${J.host}`),Y}function NW(J,z={}){return new Promise((Y)=>{let[Z,...G]=J,X="",Q="",f=!1,H=(V)=>{if(f)return;f=!0,Y({stdout:X,stderr:Q,exitCode:V})},B;try{B=VF(Z??"",G,{cwd:z.cwd,env:z.env,shell:!1,signal:z.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 kQ{isRemote=!1;run(J,z={}){return NW(J,{cwd:z.cwd,env:z.env?{...process.env,...z.env}:process.env,signal:z.signal})}async exists(J){return RW(J)}existsSync(J){return RW(J)}async mkdirp(J){await UF(J,{recursive:!0})}async readFile(J){try{return await DF(J,"utf8")}catch{return null}}async readdir(J){try{return await LF(J)}catch{return[]}}wrapCommand(J){return J}ensureReady(){}}class nZ{spec;spawn;isRemote=!0;masterUp=!1;spawnAsync;constructor(J,z=gW,Y){this.spec=J;this.spawn=z;this.spawnAsync=Y??(this.spawn===gW?AF:async(Z,G)=>this.spawn(Z,G))}ensureReady(){if(this.masterUp)return;if(this.spawn([...tG(this.spec,{batch:!0}),"-O","check"]).exitCode===0){this.masterUp=!0;return}let z=[...tG(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",...z],{SSHPASS:Y}),this.masterUp=!0;return}}this.spawn(z),this.masterUp=!0}async run(J,z={}){this.ensureReady();let Y=`${OF(z.env)}${CW(J)}`,Z=z.cwd?`cd ${JZ(z.cwd)} && ${Y}`:Y;return this.spawnAsync([...tG(this.spec,{batch:!0}),Z],void 0,{signal:z.signal})}async exists(J){return(await this.run(["test","-e",J])).exitCode===0}existsSync(J){return this.ensureReady(),this.spawn([...tG(this.spec,{batch:!0}),FF(["test","-e",J])]).exitCode===0}async mkdirp(J){await this.run(["mkdir","-p",J])}async readFile(J){let z=await this.run(["cat",J]);return z.exitCode===0?z.stdout:null}async readdir(J){let z=await this.run(["ls","-1A",J]);if(z.exitCode!==0)return[];return z.stdout.split(`
4
+ `).filter((Y)=>Y.length>0)}wrapCommand(J,z={}){let Y=z.cwd?`cd ${JZ(z.cwd)} && ${J}`:J;return`${tG(this.spec,{tty:z.tty}).map(MF).join(" ")} ${JZ(Y)}`}}var gW=(J,z)=>{let[Y,...Z]=J,G=KF(Y??"",Z,{env:z?{...process.env,...z}:process.env,encoding:"utf8",shell:!1});return{stdout:G.stdout??"",stderr:G.stderr??"",exitCode:G.status??-1}},AF=(J,z,Y)=>NW(J,{env:z?{...process.env,...z}:process.env,signal:Y?.signal});var PH=()=>{};import{spawnSync as RF}from"child_process";import{platform as gF}from"os";function kW(J,z,Y){return{service:CF,account:Y?`${z}@${J}:${Y}`:`${z}@${J}`}}function vH(J=hH){return J.platform()==="darwin"}function bW(J,z,Y=hH){if(Y.platform()!=="darwin")return!1;let{exitCode:Z}=Y.run(["security","add-generic-password","-U","-s",J.service,"-a",J.account,"-w",z]);return Z===0}function bQ(J,z=hH){if(z.platform()!=="darwin")return null;let{stdout:Y,exitCode:Z}=z.run(["security","find-generic-password","-s",J.service,"-a",J.account,"-w"]);if(Z!==0)return null;return Y.replace(/\n$/,"")}var hH,CF="kobe-remote-ssh";var mH=N(()=>{hH={run(J){let[z,...Y]=J,Z=RF(z??"",Y,{encoding:"utf8",shell:!1});return{stdout:Z.stdout??"",exitCode:Z.status??-1}},platform(){return gF()}}});import{mkdirSync as NF,readFileSync as kF,renameSync as bF,writeFileSync as SF}from"fs";import{dirname as IF}from"path";function l1(){try{let J=kF(iJ(),"utf8"),z=JSON.parse(J);if(z&&typeof z==="object"&&!Array.isArray(z))return z}catch{}return{}}function SW(J){let z=iJ();NF(IF(z),{recursive:!0});let Y=`${z}.tmp`;SF(Y,JSON.stringify(J,null,2),"utf8"),bF(Y,z)}function iZ(J){let z=l1();if(J(z)!==!1)SW(z);return z}function zZ(J){return iZ((z)=>{for(let[Y,Z]of Object.entries(J))if(Z===void 0)delete z[Y];else z[Y]=Z;return})}function IW(J){SW(J)}var YZ=N(()=>{p1()});var _z={};B1(_z,{statePath:()=>uF,setRepoInitOverride:()=>xF,setPersistedString:()=>r1,resolveRepoRoot:()=>iz,resolveMainRepoRoot:()=>TF,removeSavedRepo:()=>iH,remoteRepoKey:()=>xW,normalizeSavedRepos:()=>dH,isRemoteRepoKey:()=>$1,isRemoteProjectsEnabled:()=>lH,isGitRepo:()=>yF,getSavedRepos:()=>gJ,getRepoInitOverride:()=>nH,getRemoteRepos:()=>$H,getRemoteRepoConfig:()=>az,getPersistedString:()=>S1,getCustomEngineIds:()=>lz,addSavedRepo:()=>$z,addRemoteRepo:()=>aH});import{spawnSync as cH}from"child_process";import{realpathSync as yW}from"fs";function iz(J){if($1(J))return J;let z=cH("git",["rev-parse","--show-toplevel"],{cwd:J,encoding:"utf8",shell:!1});if(z.status!==0)return J;let Y=(z.stdout??"").trim();if(!Y)return J;try{if(yW(J)===yW(Y))return J}catch{}return Y}function yF(J){if($1(J))return!1;let z=cH("git",["rev-parse","--is-inside-work-tree"],{cwd:J,encoding:"utf8",shell:!1});return z.status===0&&(z.stdout??"").trim()==="true"}function TF(J){if($1(J))return J;let z=cH("git",["worktree","list","--porcelain"],{cwd:J,encoding:"utf8",shell:!1});if(z.status!==0)return iz(J);return(z.stdout??"").split(/\r?\n/).find((Z)=>Z.startsWith("worktree "))?.slice(9).trim()||iz(J)}function uF(){return iJ()}function SQ(J){let z=J.savedRepos;if(!Array.isArray(z))return[];return z.filter((Y)=>typeof Y==="string")}function gJ(){return SQ(l1())}function S1(J){let z=l1()[J];return typeof z==="string"?z:void 0}function r1(J,z){zZ({[J]:z})}function lz(){let J=l1().customEngineIds;if(!Array.isArray(J))return[];return J.filter((z)=>typeof z==="string"&&z.trim().length>0)}function $z(J){let z=iz(J),Y={added:!1,path:z,total:0};return iZ((Z)=>{let G=SQ(Z);if(G.includes(z))return Y={added:!1,path:z,total:G.length},!1;Z.savedRepos=[...G,z],Y={added:!0,path:z,total:G.length+1};return}),Y}function dH(){let J=gJ(),z=new Set,Y=[],Z=!1;for(let G of J){let X=iz(G);if(X!==G)Z=!0;if(z.has(X)){Z=!0;continue}z.add(X),Y.push(X)}if(!Z)return;zZ({savedRepos:Y})}function TW(J){let z=J.repoConfigs;if(!z||typeof z!=="object"||Array.isArray(z))return{};return z}function uW(J){if(!J||typeof J!=="object")return{};let z=J;return{initScript:typeof z.initScript==="string"&&z.initScript.length>0?z.initScript:void 0,initPrompt:typeof z.initPrompt==="string"&&z.initPrompt.length>0?z.initPrompt:void 0}}function nH(J){return uW(TW(l1())[iz(J)])}function xF(J,z){let Y=iz(J),Z={};return iZ((G)=>{let X={...TW(G)},Q=uW(X[Y]),f=z.initScript===void 0?Q.initScript:z.initScript||void 0,H=z.initPrompt===void 0?Q.initPrompt:z.initPrompt||void 0;if(Z={...f?{initScript:f}:{},...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 iH(J){let z={removed:!1,path:J,total:0};return iZ((Y)=>{let Z=SQ(Y);if(!Z.includes(J))return z={removed:!1,path:J,total:Z.length},!1;if(Y.savedRepos=Z.filter((G)=>G!==J),$1(J)){let G=IQ(Y);if(J in G){let X={...G};delete X[J],Y.remoteRepos=X}}z={removed:!0,path:J,total:Z.length-1};return}),z}function $1(J){return J.startsWith("ssh://")}function lH(){return l1()["experimental.remoteProjects"]===!0}function xW(J,z,Y){return Y?`ssh://${z}@${J}:${Y}`:`ssh://${z}@${J}`}function IQ(J){let z=J.remoteRepos;if(!z||typeof z!=="object"||Array.isArray(z))return{};return z}function az(J){return IQ(l1())[J]??null}function $H(){return IQ(l1())}function aH(J){let z=xW(J.host,J.user,J.port),Y=!1;return iZ((Z)=>{let G={...IQ(Z)};G[z]=J,Z.remoteRepos=G;let X=SQ(Z);if(Y=!X.includes(z),Y)Z.savedRepos=[...X,z];return}),{key:z,added:Y}}var O1=N(()=>{p1();YZ()});var PW={};B1(PW,{runAddRemote:()=>PF,parseRemoteFlags:()=>wW});import{createInterface as EF}from"readline";function wW(J){let z={};for(let Y=0;Y<J.length;Y++){let Z=J[Y];switch(Z){case"--host":z.host=J[++Y];break;case"--user":z.user=J[++Y];break;case"--path":z.path=J[++Y];break;case"--port":{let G=Number(J[++Y]);if(!Number.isInteger(G)||G<=0)Zz(`invalid --port "${J[Y]}"`);z.port=G;break}case"--key":{let G=J[Y+1];if(G&&!G.startsWith("-"))z.key={present:!0,path:G},Y++;else z.key={present:!0};break}case"--password":z.password=!0;break;case"--help":case"-h":process.stdout.write(EW),process.exit(0);break;default:Zz(`unknown flag "${Z}"`)}}return z}function Zz(J){process.stderr.write(`kobe add --remote: ${J}
5
5
 
6
- ${JW}`),process.exit(2)}async function SF(f){let Y=yF({input:process.stdin,output:process.stdout,terminal:!0}),J=process.stdout,z=!1,Z=J._writeToOutput?.bind(J);return J._writeToOutput=(G)=>{if(!z||!Z)process.stdout.write(G)},process.stdout.write(f),z=!0,new Promise((G)=>{Y.question("",(Q)=>{if(z=!1,Z)J._writeToOutput=Z;process.stdout.write(`
7
- `),Y.close(),G(Q)})})}async function IF(f){if(!RH())ef("remote projects are experimental and disabled \u2014 enable Settings \u2192 Dev \u2192 Experimental \u2192 Remote projects first");let Y=zW(f);if(!Y.host)ef("--host is required");if(!Y.user)ef("--user is required");if(!Y.path)ef("--path (remote base path) is required");if(Y.key&&Y.password)ef("choose ONE of --key or --password, not both");if(!Y.key&&!Y.password)ef("an auth method is required: --key [path] or --password");let J;if(Y.password){if(!DH())ef("--password needs the macOS keychain (unsupported on this platform)");let G=_9(Y.host,Y.user,Y.port),Q=await SF(`Password for ${Y.user}@${Y.host}: `);if(Q.length===0)ef("empty password");if(!r9(G,Q))ef("failed to store the password in the keychain");J={kind:"password",keychainRef:G}}else J={kind:"key",keyPath:Y.key?.path};let{key:z,added:Z}=CH({host:Y.host,user:Y.user,port:Y.port,basePath:Y.path,auth:J});console.log(Z?`added remote project ${z} (base ${Y.path})`:`updated remote project ${z} (base ${Y.path})`),await TF(Y,J)}async function TF(f,Y){if(Y.kind==="password"&&!DH())return;let J=Y.kind==="key"?{kind:"key",keyPath:Y.keyPath}:{kind:"password",getPassword:()=>UX(Y.keychainRef)},z={host:f.host,user:f.user,port:f.port,auth:J,controlPath:BX(f.host,f.user,f.port)};process.stdout.write("checking connection\u2026 ");try{if((await new Pz(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(Z){console.log(`could not connect (${Z instanceof Error?Z.message:String(Z)})`),console.log("the project is saved; fix the host/credentials and it will connect on first use.")}}var JW;var GW=N(()=>{i1();KH();LH();A1();JW=`Usage: kobe add --remote --host <host> --user <user> --path <basePath>
6
+ ${EW}`),process.exit(2)}async function wF(J){let z=EF({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(J),Z=!0,new Promise((X)=>{z.question("",(Q)=>{if(Z=!1,G)Y._writeToOutput=G;process.stdout.write(`
7
+ `),z.close(),X(Q)})})}async function PF(J){if(!lH())Zz("remote projects are experimental and disabled \u2014 enable Settings \u2192 Dev \u2192 Experimental \u2192 Remote projects first");let z=wW(J);if(!z.host)Zz("--host is required");if(!z.user)Zz("--user is required");if(!z.path)Zz("--path (remote base path) is required");if(z.key&&z.password)Zz("choose ONE of --key or --password, not both");if(!z.key&&!z.password)Zz("an auth method is required: --key [path] or --password");let Y;if(z.password){if(!vH())Zz("--password needs the macOS keychain (unsupported on this platform)");let X=kW(z.host,z.user,z.port),Q=await wF(`Password for ${z.user}@${z.host}: `);if(Q.length===0)Zz("empty password");if(!bW(X,Q))Zz("failed to store the password in the keychain");Y={kind:"password",keychainRef:X}}else Y={kind:"key",keyPath:z.key?.path};let{key:Z,added:G}=aH({host:z.host,user:z.user,port:z.port,basePath:z.path,auth:Y});console.log(G?`added remote project ${Z} (base ${z.path})`:`updated remote project ${Z} (base ${z.path})`),await hF(z,Y)}async function hF(J,z){if(z.kind==="password"&&!vH())return;let Y=z.kind==="key"?{kind:"key",keyPath:z.keyPath}:{kind:"password",getPassword:()=>bQ(z.keychainRef)},Z={host:J.host,user:J.user,port:J.port,auth:Y,controlPath:RQ(J.host,J.user,J.port)};process.stdout.write("checking connection\u2026 ");try{if((await new nZ(Z).run(["test","-d",J.path])).exitCode===0)console.log("ok");else console.log(`reachable, but base path "${J.path}" is not a directory (you can create it later)`)}catch(G){console.log(`could not connect (${G instanceof Error?G.message:String(G)})`),console.log("the project is saved; fix the host/credentials and it will connect on first use.")}}var EW;var hW=N(()=>{p1();PH();mH();O1();EW=`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 MX(f){return f.remoteVersion>=f.localMin&&f.localVersion>=f.remoteMin}function XW(f,Y){if(!f)return!1;return f!==Y}function EF(f){return typeof f==="string"&&uF.has(f)}function QW(f){if(!Array.isArray(f))return null;let Y=new Set;for(let J of f)if(EF(J))Y.add(J);return Y.size>0?Y:null}function fY(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 lZ(f){return`${JSON.stringify(f)}
14
- `}var cf=3,VJ=2,NH,uF;var eJ=N(()=>{NH=["task.snapshot","issue.snapshot","active-task","update","engine-state","ui-prefs","keybindings","task.jobs","worktree.changes","session.deliver"],uF=new Set(NH)});import{createHash as xF}from"crypto";import{homedir as FX,tmpdir as wF}from"os";import{join as fz}from"path";function hF(f){return xF("sha1").update(f).digest("hex").slice(0,8)}function kH(f,Y,J,z){if(Buffer.byteLength(f,"utf8")<=bH)return f;let Z=hF(Y),G=z===void 0?"":`-${z}`,Q=fz(wF(),`kobe-${Z}-${J}${G}.sock`);if(Buffer.byteLength(Q,"utf8")<=bH)return Q;throw Error(`kobe socket path exceeds ${bH} bytes even after fallback: ${Q}`)}function AY(f){let Y=process.env.KOBE_DAEMON_SOCKET_PATH;if(Y&&Y.length>0)return Y;let J=f??process.env.KOBE_HOME_DIR;if(J&&J.length>0)return kH(fz(J,".kobe","daemon.sock"),J,"daemon");let z=process.env.XDG_RUNTIME_DIR;if(z&&z.length>0)return kH(fz(z,"kobe.sock"),z,"daemon");let Z=FX();return kH(fz(Z,".kobe","daemon.sock"),Z,"daemon")}function lY(f=process.env.KOBE_HOME_DIR??FX()){let Y=process.env.KOBE_DAEMON_PID_PATH;if(Y&&Y.length>0)return Y;return fz(f,".kobe","daemon.pid")}function OX(f=process.env.KOBE_HOME_DIR??FX()){return fz(f,".kobe","daemon.log")}function qW(f=process.env.KOBE_HOME_DIR??FX()){return fz(f,".kobe","client.log")}var bH=100;var mz=()=>{};import{appendFile as HW,mkdir as PF}from"fs/promises";import{dirname as vF}from"path";function AX(f){WW=f}function mF(f){if(f instanceof Error)return{message:f.message,stack:f.stack};let Y;try{Y=typeof f==="string"?f:JSON.stringify(f)}catch{Y=String(f)}return{message:Y}}function VW(f,Y,J=new Date){return`[${J.toISOString()}] client ${WW} [${f}] pid=${process.pid}: ${Y}
15
- `}function cF(){if(BW)return;BW=!0;try{process.stderr.write(`[kobe] client log write failed; continuing without it
16
- `)}catch{}}function KW(f){let Y=qW();jW=jW.then(async()=>{try{await HW(Y,f)}catch(J){if(J?.code==="ENOENT")await PF(vF(Y),{recursive:!0}),await HW(Y,f);else throw J}}).catch(()=>cF())}function aY(f,Y){KW(VW(f,Y))}function p1(f,Y){let J=mF(Y);KW(VW(f,J.stack??J.message))}function UW(){if(yH||SH)return;yH=(f)=>p1("crash-net",f),SH=(f)=>p1("crash-net",f),process.on("unhandledRejection",yH),process.on("uncaughtException",SH)}var WW="client",BW=!1,jW,yH,SH;var Yz=N(()=>{mz();jW=Promise.resolve()});import{connect as nF}from"net";import{StringDecoder as dF}from"string_decoder";class nf{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 Y=()=>{if(this.connecting===f)this.connecting=null};return f.then(Y,Y),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 Y of this.pending.values())Y.reject(f);this.pending.clear()}on(f,Y){let J=this.handlers.get(f);if(!J)J=new Set,this.handlers.set(f,J);return J.add(Y),()=>{if(J?.delete(Y),J?.size===0)this.handlers.delete(f)}}onChannel(f,Y){return this.on(f,(J)=>Y(J.payload))}subscribe(f={}){let Y={};if(f.channels)Y.channels=f.channels;if(f.role)Y.role=f.role;return this.request("subscribe",Y)}onLifecycle(f,Y){let J=this.lifecycleHandlers.get(f);if(!J)J=new Set,this.lifecycleHandlers.set(f,J);return J.add(Y),()=>{if(J?.delete(Y),J?.size===0)this.lifecycleHandlers.delete(f)}}async request(f,Y){await this.connect();let J=this.socket;if(!J)throw Error("daemon connection is not open");let z=String(this.nextId++),Z=new Promise((G,Q)=>{this.pending.set(z,{resolve:(q)=>G(q),reject:Q})});return J.write(lZ({type:"request",id:z,name:f,payload:Y})),Z}openSocket(){return new Promise((f,Y)=>{let J=nF(this.socketPath);this.socket=J;let z=()=>{J.off("error",Z),f()},Z=(Q)=>{if(J.off("connect",z),this.socket===J)this.socket=null;Y(Q)};J.once("connect",z),J.once("error",Z);let G=new dF("utf8");this.buffer="",J.on("data",(Q)=>this.onData(G.write(Q))),J.on("close",()=>this.onSocketClose(J))})}onSocketClose(f){if(this.socket!==f)return;this.socket=null,this.failPending(),this.emitLifecycle("close")}emitLifecycle(f){for(let Y of this.lifecycleHandlers.get(f)??[])try{Y()}catch(J){console.error(`[kobe] lifecycle handler for "${f}" threw:`,J)}}onData(f){this.buffer+=f;let Y=this.buffer.indexOf(`
17
- `);while(Y!==-1){let J=this.buffer.slice(0,Y);if(this.buffer=this.buffer.slice(Y+1),J.trim().length>0)this.onLine(J);Y=this.buffer.indexOf(`
18
- `)}}onLine(f){let Y;try{Y=JSON.parse(f)}catch(z){p1("client-frame",z);return}if(Y.type==="event"){this.emit(Y);return}if(Y.type!=="response")return;let J=this.pending.get(Y.id);if(!J)return;if(this.pending.delete(Y.id),Y.error){let z=Error(Y.error.message);if(Y.error.name)z.name=Y.error.name;J.reject(z)}else J.resolve(Y.payload)}emit(f){for(let Y of this.handlers.get(f.name)??[])Y(f);for(let Y of this.handlers.get("*")??[])Y(f)}}var aZ=N(()=>{eJ();Yz()});function RX(f){return iF.includes(f)}function DW(f,Y,J){switch(Y){case"session-start":case"session-end":return"idle";case"turn-start":return"running";case"turn-complete":return"turn_complete";case"turn-failed":return J?.failure==="rate_limit"||J?.failure==="billing"?"rate_limited":"error";case"awaiting-input":return J?.waiting==="permission"?"permission_needed":"running"}}var iF;var gX=N(()=>{iF=["session-start","turn-start","turn-complete","turn-failed","awaiting-input","session-end"]});function lF(){let f=process.env.KOBE_ENGINE_STATE_TTL_MS;if(f===void 0)return LW;let Y=Number(f);return Number.isFinite(Y)&&Y>0?Y:LW}class IH{bus;staleMs;now;activity=new Map;constructor(f,Y=lF(),J=()=>Date.now()){this.bus=f;this.staleMs=Y;this.now=J}report(f,Y,J){let z=this.activity.get(f);if(z?.lapse)clearTimeout(z.lapse);let Z=DW(z?.state,Y,J),G=this.now(),Q={state:Z,detail:J,at:G};if(Z!=="idle"&&Z!=="turn_complete")Q.lapse=setTimeout(()=>{let q=this.activity.get(f);if(q&&q.at===G)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 Y=this.activity.get(f);if(Y?.lapse)clearTimeout(Y.lapse);if(this.activity.delete(f),Y)this.bus.publish("engine-state",{taskId:f,state:"idle",at:this.now()})}snapshotByTask(){let f={};for(let[Y,J]of this.activity)f[Y]=this.payload(Y,J);return f}currentNonIdle(){let f=[];for(let[Y,J]of this.activity)if(J.state!=="idle")f.push(this.payload(Y,J));return f}close(){for(let f of this.activity.values())if(f.lapse)clearTimeout(f.lapse);this.activity.clear()}publishIdle(f){let Y={state:"idle",at:this.now()};this.activity.set(f,Y),this.bus.publish("engine-state",this.payload(f,Y))}payload(f,Y){return{taskId:f,state:Y.state,...Y.detail?{detail:Y.detail}:{},at:Y.at}}}var LW=600000;var MW=N(()=>{gX()});import{spawnSync as aF}from"child_process";import{existsSync as $F,statSync as pF}from"fs";import{homedir as _F}from"os";import $Z from"path";async function FW(f=rF){let Y=[],J=(B)=>{if(!B)return;return Y.push(B),f.fileExists(B)?B:void 0},z=f.which("claude");if(z){if(Y.push(`which:${z}`),f.fileExists(z))return z}let Z=f.home(),G=J($Z.join(Z,".claude","local","claude"));if(G)return G;let Q=f.env("NVM_BIN");if(Q){let B=J($Z.join(Q,"claude"));if(B)return B}let q=$Z.join(Z,".nvm","versions","node"),H=f.readdir(q).sort().reverse();for(let B of H){let V=J($Z.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=J(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=J($Z.join(Z,B));if(V)return V}throw new CX(Y)}var CX,rF;var OW=N(()=>{CX=class CX 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}};rF={fileExists(f){try{return pF(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return _F()},which(f){let Y=process.platform==="win32"?"where":"which",J=aF(Y,[f],{encoding:"utf8"});if(J.status!==0)return;let z=J.stdout.split(`
19
- `).map((Z)=>Z.trim()).filter(Boolean)[0];if(!z)return;if(z.startsWith("claude:")&&z.includes("aliased to")){let Z=z.split("aliased to")[1]?.trim();return Z&&$F(Z)?Z:void 0}return z},readdir(f){try{return QX("fs").readdirSync(f)}catch{return[]}}}});import{spawnSync as oF}from"child_process";import{existsSync as sF,statSync as tF}from"fs";import{homedir as eF}from"os";import AW from"path";async function RW(f=f3){let Y=[],J=(Q)=>{if(!Q)return;return Y.push(Q),f.fileExists(Q)?Q:void 0},z=f.which("codex");if(z){if(Y.push(`which:${z}`),f.fileExists(z))return z}let Z=f.home();for(let Q of["/opt/homebrew/bin/codex","/usr/local/bin/codex","/usr/bin/codex","/bin/codex"]){let q=J(Q);if(q)return q}let G=f.env("NVM_BIN");if(G){let Q=J(AW.join(G,"codex"));if(Q)return Q}for(let Q of[".local/bin/codex",".bun/bin/codex","bin/codex"]){let q=J(AW.join(Z,Q));if(q)return q}throw new NX(Y)}var NX,f3;var gW=N(()=>{NX=class NX extends Error{checkedPaths;constructor(f){super(`Codex CLI binary not found. Checked: ${f.join(", ")}. Ensure 'codex' is on PATH (e.g. \`brew install codex\` or the official installer).`);this.name="CodexBinaryNotFoundError",this.checkedPaths=f}};f3={fileExists(f){try{return tF(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return eF()},which(f){let Y=process.platform==="win32"?"where":"which",J=oF(Y,[f],{encoding:"utf8"});if(J.status!==0)return;let z=J.stdout.split(`
20
- `).map((Z)=>Z.trim()).filter(Boolean)[0];if(!z)return;if(z.startsWith("codex:")&&z.includes("aliased to")){let Z=z.split("aliased to")[1]?.trim();return Z&&sF(Z)?Z:void 0}return z},readdir(f){try{return QX("fs").readdirSync(f)}catch{return[]}}}});import{spawnSync as Y3}from"child_process";import{existsSync as J3,statSync as z3}from"fs";import{homedir as Z3}from"os";import KJ from"path";async function CW(f=G3){let Y=[],J=(V)=>{if(!V)return;return Y.push(V),f.fileExists(V)?V:void 0},z=f.which("copilot");if(z){if(Y.push(`which:${z}`),f.fileExists(z))return z}let Z=f.platform()==="win32"?["copilot.exe","copilot.cmd","copilot"]:["copilot"],G=(V)=>{if(!V)return;for(let j of Z){let K=J(KJ.join(V,j));if(K)return K}return};for(let V of["/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin"]){let j=G(V);if(j)return j}let Q=f.env("NVM_BIN"),q=G(Q);if(q)return q;let H=f.home(),B=[KJ.join(H,".npm-global/bin"),KJ.join(H,".local/bin"),KJ.join(H,".bun/bin"),KJ.join(H,"bin")];if(f.platform()==="win32"){let V=f.env("APPDATA"),j=f.env("LOCALAPPDATA");if(B.unshift(KJ.join(H,"AppData/Roaming/npm")),V)B.unshift(KJ.join(V,"npm"));if(j)B.unshift(KJ.join(j,"npm"))}for(let V of B){let j=G(V);if(j)return j}throw new bX(Y)}var bX,G3;var NW=N(()=>{bX=class bX 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}};G3={fileExists(f){try{return z3(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return Z3()},which(f){let Y=process.platform==="win32"?"where":"which",J=Y3(Y,[f],{encoding:"utf8"});if(J.status!==0)return;let z=J.stdout.split(`
21
- `).map((Z)=>Z.trim()).filter(Boolean)[0];if(!z)return;if(z.startsWith("copilot:")&&z.includes("aliased to")){let Z=z.split("aliased to")[1]?.trim();return Z&&J3(Z)?Z:void 0}return z},platform(){return process.platform}}});import{readFileSync as X3,statSync as Q3}from"fs";import{readFile as q3,stat as H3}from"fs/promises";async function cz(f,Y=bW){let{size:J}=await H3(f);if(J>Y)return"";return q3(f,"utf8")}function kW(f,Y=bW){let J;try{J=Q3(f)}catch(z){if(z.code==="ENOENT")return null;throw z}if(J.size>Y)return null;return X3(f,"utf8")}function UJ(f,Y=B3){return f.length<=Y}var bW=104857600,B3=8388608;var pZ=()=>{};import{homedir as j3}from"os";import DJ from"path";function W3(f,Y){let J=f("CLAUDE_CONFIG_DIR")?.trim();if(J)return DJ.join(J,".claude.json");return DJ.join(Y,".claude.json")}function V3(f,Y){let z=f("CODEX_HOME")?.trim()??DJ.join(Y,".codex");return DJ.join(z,"auth.json")}function K3(f,Y){let z=f("COPILOT_HOME")?.trim()??DJ.join(Y,".copilot");return DJ.join(z,"config.json")}function U3(f){let Y=f.split(".");if(Y.length!==3)return null;let J=Y[1];if(!J)return null;let z=J.replace(/-/g,"+").replace(/_/g,"/"),Z=z+"=".repeat((4-z.length%4)%4);try{let G=Buffer.from(Z,"base64").toString("utf8"),Q=JSON.parse(G);return typeof Q==="object"&&Q!==null?Q:null}catch{return null}}async function yX(f){try{return{found:!0,path:await f()}}catch(Y){if(Y instanceof CX||Y instanceof NX||Y instanceof bX)return{found:!1,error:"not found on PATH"};return{found:!1,error:Y instanceof Error?Y.message:String(Y)}}}async function yW(f){return(await Promise.all([["claude",()=>f.findClaudeBinary()],["codex",()=>f.findCodexBinary()],["copilot",()=>f.findCopilotBinary()]].map(async([z,Z])=>(await yX(Z)).found?z:null))).filter((z)=>z!==null)}function D3(f=nz){if(f!==nz)return yW(f);if(kX)return kX;let Y=yW(f).catch((J)=>{throw kX=null,J});return kX=Y,Y}async function $Y(f=nz){return[...await D3(f),...cY()]}async function SX(f=nz){let Y=await yX(()=>f.findClaudeBinary()),J=W3(f.env,f.home()),z;try{z=f.readFile(J)}catch(H){return{binary:Y,account:{kind:"none"},accountError:`read ${J}: ${H instanceof Error?H.message:String(H)}`}}if(z===null)return{binary:Y,account:{kind:"none"}};let Z;try{Z=JSON.parse(z)}catch(H){return{binary:Y,account:{kind:"none"},accountError:`parse ${J}: ${H instanceof Error?H.message:String(H)}`}}let G=Z?.oauthAccount;if(!G||typeof G!=="object")return{binary:Y,account:{kind:"none"}};let Q=G,q=typeof Q.emailAddress==="string"?Q.emailAddress:void 0;if(!q)return{binary:Y,account:{kind:"none"}};return{binary:Y,account:{kind:"oauth",email:q,organization:typeof Q.organizationName==="string"?Q.organizationName:void 0,displayName:typeof Q.displayName==="string"?Q.displayName:void 0,billingType:typeof Q.billingType==="string"?Q.billingType:void 0}}}async function IX(f=nz){let Y=await yX(()=>f.findCodexBinary()),J=V3(f.env,f.home()),z;try{z=f.readFile(J)}catch(B){return{binary:Y,account:{kind:"none"},accountError:`read ${J}: ${B instanceof Error?B.message:String(B)}`}}if(z===null)return{binary:Y,account:{kind:"none"}};let Z;try{Z=JSON.parse(z)}catch(B){return{binary:Y,account:{kind:"none"},accountError:`parse ${J}: ${B instanceof Error?B.message:String(B)}`}}let G=Z??{},Q=G.tokens,q=typeof Q?.id_token==="string"?Q.id_token:void 0;if(q){let B=U3(q);if(!B)return{binary:Y,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:Y,account:{kind:"chatgpt",email:V,plan:L}};return{binary:Y,account:{kind:"none"},accountError:"codex id_token: no email claim"}}let H=G.OPENAI_API_KEY;if(typeof H==="string"&&H.length>0)return{binary:Y,account:{kind:"apikey"}};return{binary:Y,account:{kind:"none"}}}async function TX(f=nz){let Y=await yX(()=>f.findCopilotBinary());for(let G of["COPILOT_GITHUB_TOKEN","GH_TOKEN","GITHUB_TOKEN"])if(f.env(G)?.trim())return{binary:Y,account:{kind:"token",source:G}};let J=K3(f.env,f.home()),z;try{z=f.readFile(J)}catch(G){return{binary:Y,account:{kind:"none"},accountError:`read ${J}: ${G instanceof Error?G.message:String(G)}`}}if(z===null)return{binary:Y,account:{kind:"none"}};let Z;try{Z=JSON.parse(z)}catch(G){return{binary:Y,account:{kind:"none"},accountError:`parse ${J}: ${G instanceof Error?G.message:String(G)}`}}if(!TH(Z))return{binary:Y,account:{kind:"none"}};if(SW(Z,["github_token","oauth_token","access_token","token","selectedUser","currentUser","user"]))return{binary:Y,account:{kind:"oauth"}};return{binary:Y,account:{kind:"none"}}}function TH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function SW(f,Y,J=0){if(J>4||!TH(f))return!1;for(let[z,Z]of Object.entries(f)){if(Y.includes(z)&&typeof Z==="string"&&Z.length>0)return!0;if(TH(Z)&&SW(Z,Y,J+1))return!0}return!1}var nz,kX=null;var Jz=N(()=>{A1();OW();gW();NW();pZ();nz={readFile(f){return kW(f)},env(f){return process.env[f]},home(){return j3()},findClaudeBinary(){return FW()},findCodexBinary(){return RW()},findCopilotBinary(){return CW()}}});function IW(f){if(typeof f==="string")return f.length>0?[{type:"text",text:f}]:[];if(!Array.isArray(f))return[];let Y=[];for(let J of f){if(typeof J==="string"){if(J.length>0)Y.push({type:"text",text:J});continue}if(!J||typeof J!=="object")continue;let z=J;if(z.type==="text"&&typeof z.text==="string"){Y.push({type:"text",text:z.text});continue}if(z.type==="tool_use"){Y.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"){Y.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")Y.push({type:"thinking",text:z.thinking})}return Y}function TW(f){return f.isMeta===!0||f.isCompactSummary===!0}function uW(f){if(f.length===0)return!1;for(let Y of f){if(Y.type!=="text")return!1;let J=Y.text.trim();if(!J.startsWith("<command-name>")&&!J.startsWith("<command-message>")&&!J.startsWith("<local-command"))return!1}return!0}import{appendFile as qE,mkdir as HE,readdir as uH,stat as L3,unlink as BE,writeFile as jE}from"fs/promises";import{homedir as EW}from"os";import uX from"path";function F3(f){return f.replace(/[/.]/g,"-")}async function _Z(f){if(!f)return[];let Y=uX.join(EW(),".claude","projects",F3(f)),J;try{J=await uH(Y)}catch{return[]}let z=[];for(let Z of J){if(!Z.endsWith(".jsonl"))continue;let G=uX.join(Y,Z),Q=0;try{Q=(await L3(G)).mtimeMs}catch{}z.push({sessionId:Z.slice(0,-6),path:G,mtimeMs:Q})}return z.sort((Z,G)=>G.mtimeMs-Z.mtimeMs),z}async function xW(f){return(await _Z(f))[0]?.mtimeMs??0}async function wW(f,Y=M3){let J=Y.projectsDir(),z=await Y.readdir(J);for(let Z of z){let G=uX.join(J,Z,`${f}.jsonl`),Q;try{Q=await Y.readFile(G)}catch{continue}return O3(A3(Q,f))}return[]}function O3(f){return f.map((Y,J)=>({msg:Y,idx:J})).sort((Y,J)=>{if(Y.msg.timestamp<J.msg.timestamp)return-1;if(Y.msg.timestamp>J.msg.timestamp)return 1;return Y.idx-J.idx}).map((Y)=>Y.msg)}function A3(f,Y){let J=[];for(let z of f.split(`
22
- `)){let Z=z.trim();if(!Z)continue;if(!UJ(Z))continue;let G;try{G=JSON.parse(Z)}catch{continue}if(!EH(G))continue;let Q=R3(G,Y);if(Q)J.push(Q)}return J}function R3(f,Y){if(TW(f))return null;let J=EH(f.message)?f.message:f,z=J.role;if(z!=="user"&&z!=="assistant"&&z!=="system")return null;if(!("content"in J))return null;let Z=IW(J.content);if(z==="user"&&uW(Z))return null;let G=typeof f.timestamp==="string"?f.timestamp:new Date().toISOString(),Q=typeof f.sessionId==="string"?f.sessionId:Y,q=g3(J.usage);return q?{role:z,blocks:Z,timestamp:G,sessionId:Q,usage:q}:{role:z,blocks:Z,timestamp:G,sessionId:Q}}function g3(f){if(!EH(f))return;let Y=typeof f.input_tokens==="number"?f.input_tokens:void 0,J=typeof f.output_tokens==="number"?f.output_tokens:void 0;if(Y===void 0||J===void 0)return;let z=typeof f.cache_read_input_tokens==="number"?f.cache_read_input_tokens:void 0,Z=typeof f.cache_creation_input_tokens==="number"?f.cache_creation_input_tokens:void 0;return{input_tokens:Y,output_tokens:J,...z!==void 0?{cache_read_input_tokens:z}:{},...Z!==void 0?{cache_creation_input_tokens:Z}:{}}}function EH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var M3;var xH=N(()=>{pZ();M3={projectsDir(){return uX.join(EW(),".claude","projects")},async readdir(f){try{return await uH(f)}catch{return[]}},async readFile(f){return await cz(f)},async pathExists(f){try{return await uH(f),!0}catch{return!1}}}});import{fileURLToPath as PW}from"url";function C1(){if(import.meta.url.endsWith(".js"))return["kobe"];let Y=PW(new URL("./index.ts",import.meta.url)),J=PW(import.meta.resolve("@opentui/solid/preload"));return[process.execPath,"--preload",J,"--conditions=browser",Y]}var pY=()=>{};function wH(f,Y={}){if(Y.bareSafe&&C3.test(f))return f;return`'${f.replace(/'/g,"'\\''")}'`}function EX(f,Y={}){return f.map((J)=>wH(J,Y)).join(" ")}var C3;var hH=N(()=>{C3=/^[A-Za-z0-9_/.:=-]+$/});function sZ(f){return`kobe-hidden-${f.replace(/[^A-Za-z0-9_-]/g,"")||"session"}`}function mW(f){let Y=Number.parseInt(f.replace(/^@/,""),10);return Number.isFinite(Y)&&Y>=0?1000+Y:1000}function Gz(f){if(!Number.isFinite(f))return zz;return Math.max(N3,Math.min(b3,Math.round(f)))}function oY(f){if(!Number.isFinite(f))return null;return Math.max(k3,Math.min(y3,Math.round(f)))}function G1(f){return wH(f)}function Rf(f){return EX(f)}function gf(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 PH(f){return`'${f.replace(/'/g,"'\\''")}'`}function cW(){return`clear; printf ${PH("\\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 mH(f){let Y=typeof f==="number"?f:f==null?Number.NaN:Number.parseInt(f,10);if(!Number.isFinite(Y))return S3;return Math.max(I3,Math.min(T3,Math.round(Y)))}function u3(f,Y){let J=String(Y),z="\\n \u26A0 Repo init (.kobe/init.sh) timed out after %ss and was killed; continuing to the engine.\\n\\n",Z="\\n \u26A0 Repo init (.kobe/init.sh) failed (code %s); continuing to the engine.\\n\\n";return['__kobe_init_env="${TMPDIR:-/tmp}/kobe-init-env.$$"','__kobe_init_to="${TMPDIR:-/tmp}/kobe-init-timeout.$$"','rm -f "$__kobe_init_env" "$__kobe_init_to" 2>/dev/null',"(",f,"__kobe_init_ec=$?",'export -p > "$__kobe_init_env" 2>/dev/null',"exit $__kobe_init_ec",") </dev/null &","__kobe_init_pid=$!",`( sleep ${J}; : > "$__kobe_init_to"; kill -TERM "$__kobe_init_pid" 2>/dev/null; sleep 2; kill -KILL "$__kobe_init_pid" 2>/dev/null ) &`,"__kobe_init_wd=$!",'wait "$__kobe_init_pid" 2>/dev/null; __kobe_init_rc=$?','kill "$__kobe_init_wd" 2>/dev/null; wait "$__kobe_init_wd" 2>/dev/null',`if [ -f "$__kobe_init_to" ]; then __kobe_init_rc=124; printf '${"\\n \u26A0 Repo init (.kobe/init.sh) timed out after %ss and was killed; continuing to the engine.\\n\\n"}' '${J}';`,'elif [ "$__kobe_init_rc" -eq 0 ]; then [ -f "$__kobe_init_env" ] && . "$__kobe_init_env" 2>/dev/null;',`else printf '${"\\n \u26A0 Repo init (.kobe/init.sh) failed (code %s); continuing to the engine.\\n\\n"}' "$__kobe_init_rc"; fi`,'rm -f "$__kobe_init_env" "$__kobe_init_to" 2>/dev/null'].join(`
23
- `)}function nW(f,Y){let J=gf(f),z=Y?.initScript?.trim();if(!z)return J;let Z=mH(Y?.timeoutSeconds),G=u3(z,Z);if(Y?.markerPath){let Q=PH(Y.markerPath),q=PH(E3(Y.markerPath));return[`if [ ! -f ${Q} ]; then`,G,`if [ "$__kobe_init_rc" -eq 0 ]; then mkdir -p ${q} && : > ${Q}; fi`,"fi",J].join(`
24
- `)}return[G,J].join(`
25
- `)}function E3(f){let Y=f.lastIndexOf("/");return Y<=0?".":f.slice(0,Y)}function vW(f){return`cd ${G1(f)} && while :; do clear; printf "\\033[1m# %s\\033[0m\\n\\n" ${G1(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 dW(f){let Y=G1(f.worktree),J=G1(f.relPath),z=f.cliInvocation.map(G1).join(" "),Z=`cd ${Y} && if ! git diff --quiet HEAD -- ${J} 2>/dev/null; then git diff HEAD -- ${J} | { delta --paging=always 2>/dev/null || less -R; }; else bat --style=plain --paging=always ${J} 2>/dev/null || \${PAGER:-less} ${J} 2>/dev/null || cat ${J}; fi`;return`${z} ops --worktree ${Y} --preview ${J} || { ${Z}; }`}function iW(f){return`${Rf([...f.cliInvocation,"update-page"])}`}function lW(f){let Y=f.opener??"open";return[`tmux -L ${G1(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{} ${Y} {}`].join(" | ")}function MJ(f,Y={}){let J=[...f,"tasks"];if(Y.initialTaskId)J.push("--initial-task-id",Y.initialTaskId);return Rf(J)}function dz(f){if(f.taskId&&f.claudePaneId){let Y=f.cliInvocation.map(G1).join(" "),J=f.vendor?` --vendor ${G1(f.vendor)}`:"";return`KOBE_FILETREE_WATCH=1 ${Y} ops --task-id ${G1(f.taskId)} --worktree ${G1(f.cwd)} --target-pane ${G1(f.claudePaneId)}${J} || { ${vW(f.cwd)}; }`}return vW(f.cwd)}var zz=32,df="tasks",Zz="claude",YY="ops",JY="shell",rZ="workspace_aux",vH=4,zY="@kobe_hidden_shell_pane",Af="@kobe_hidden_tasks_pane",LJ="@kobe_zen_panes",oZ="@kobe_zen",_Y="@kobe_tasks_width",N3=16,b3=120,xX=60,tZ=50,Xz="@kobe_right_width_pct",rY="@kobe_ops_height_pct",k3=10,y3=90,S3=120,I3=5,T3=3600;var ZY=N(()=>{hH()});function lf(f){return!!f&&typeof f==="object"&&!Array.isArray(f)}function w3(f){return f.map((Y)=>Rf(["hook",Y.verb]))}function h3(f,Y){if(!lf(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((J)=>lf(J)&&typeof J.command==="string"&&Y.some((z)=>J.command.includes(z)))}function pW(f,Y=C1()){let J={};for(let{event:z,matcher:Z,verb:G}of f){let q={hooks:[{type:"command",command:Rf([...Y,"hook",G])}]};if(Z)q.matcher=Z;J[z]=[q]}return J}function wX(f,Y,J,z=C1()){let Z=w3(J),{hooks:G,...Q}=f,q=lf(G)?{...G}:{},H=Y?pW(J,z):{};for(let{event:B}of J){let j=(Array.isArray(q[B])?q[B]:[]).filter((K)=>!h3(K,Z));if(Y&&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 _W(f=C1()){let Y=Rf([...f,"hook",$W]);return{[aW]:[{matcher:x3,hooks:[{type:"command",command:Y}]}]}}function P3(f){if(!lf(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((Y)=>lf(Y)&&typeof Y.command==="string"&&Y.command.includes($W))}function hX(f,Y,J=C1()){let{hooks:z,...Z}=f,G=lf(z)?{...z}:{},Q=aW,H=(Array.isArray(G[Q])?G[Q]:[]).filter((B)=>!P3(B));if(Y)H.push(..._W(J)[Q]);if(H.length>0)G[Q]=H;else delete G[Q];return Object.keys(G).length>0?{...Z,hooks:G}:{...Z}}var aW="PostToolUse",x3="Bash",$W="worktree-created";var cH=N(()=>{pY();ZY()});import{mkdir as v3,readFile as m3,writeFile as c3}from"fs/promises";import{dirname as n3}from"path";async function d3(f){try{let Y=JSON.parse(await m3(f,"utf8"));return lf(Y)?Y:{}}catch{return{}}}async function iz(f,Y){try{let J=await d3(f),z=Y(J);if(JSON.stringify(z)===JSON.stringify(J))return;await v3(n3(f),{recursive:!0}),await c3(f,`${JSON.stringify(z,null,2)}
26
- `)}catch{}}class eZ{supportsHooks(){return!0}activityDetailFromPayload(f,Y){return}supportsWorktreeSync(){return!1}async removeWorktreeSyncHook(f){}async installActivityHooks(f){await iz(f,(Y)=>wX(Y,!0,this.eventMap))}async removeActivityHooks(f){await iz(f,(Y)=>wX(Y,!1,this.eventMap))}async installWorktreeWatchHook(f){await iz(f,(Y)=>hX(Y,!0))}async removeWorktreeWatchHook(f){await iz(f,(Y)=>hX(Y,!1))}}var nH=N(()=>{cH()});import{homedir as i3}from"os";import{join as l3}from"path";function a3(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 $3(){return l3(i3(),".claude","settings.json")}function _3(f){if(!lf(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((Y)=>lf(Y)&&typeof Y.command==="string"&&Y.command.includes(p3))}function r3(f,Y){let{hooks:J,...z}=f,{WorktreeCreate:Z,...G}=lf(J)?J:{},q=(Array.isArray(Z)?Z:[]).filter((B)=>!_3(B));if(Y!==null)q.push({hooks:[{type:"command",command:Y}]});let H={...G};if(q.length>0)H.WorktreeCreate=q;return Object.keys(H).length>0?{...z,hooks:H}:{...z}}var rW,EE,p3="worktree-created",dH;var oW=N(()=>{nH();cH();rW=[{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"}],EE=rW.map((f)=>f.event);dH=class dH extends eZ{vendor="claude";eventMap=rW;globalSettingsPath(){return $3()}activityDetailFromPayload(f,Y){if(f==="turn-failed")return{failure:a3(Y.error_type)};if(f==="awaiting-input")return{waiting:"permission"};return}supportsWorktreeSync(){return!0}async removeWorktreeSyncHook(f){await iz(f,(Y)=>r3(Y,null))}}});function iH(f){if(typeof f==="string")return f.length>0?[{type:"text",text:f}]:[];if(!Array.isArray(f))return[];let Y=[];for(let J of f){if(typeof J==="string"){if(J.length>0)Y.push({type:"text",text:J});continue}if(!o3(J))continue;let z=typeof J.type==="string"?J.type:void 0;if(z==="input_text"||z==="output_text"){let Z=typeof J.text==="string"?J.text:"";if(Z.length>0)Y.push({type:"text",text:Z});continue}if(z)Y.push({type:"text",text:`[codex: ${z}]`})}return Y}function o3(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function sW(f){if(f.length===0)return!1;for(let Y of f){if(Y.type!=="text")return!1;let J=(Y.text??"").trim();if(!s3(J)&&!t3(J))return!1}return!0}function s3(f){return f.startsWith("<environment_context>")&&f.endsWith("</environment_context>")}function t3(f){return f.startsWith("# AGENTS.md instructions for ")&&f.includes(`
13
+ `});function yQ(J){return J.remoteVersion>=J.localMin&&J.localVersion>=J.remoteMin}function vW(J,z){if(!J)return!1;return J!==z}function mF(J){return typeof J==="string"&&vF.has(J)}function mW(J){if(!Array.isArray(J))return null;let z=new Set;for(let Y of J)if(mF(Y))z.add(Y);return z.size>0?z:null}function Gz(J){return{id:J.id,title:J.title,repo:J.repo,branch:J.branch,worktreePath:J.worktreePath,kind:J.kind??"task",status:J.status,archived:J.archived,pinned:J.pinned??!1,vendor:J.vendor,prStatus:J.prStatus,position:J.position,modelEffort:J.modelEffort,createdAt:J.createdAt,updatedAt:J.updatedAt}}function eG(J){return`${JSON.stringify(J)}
14
+ `}var lJ=3,MY=2,_H,vF;var ZZ=N(()=>{_H=["task.snapshot","issue.snapshot","active-task","update","engine-state","ui-prefs","keybindings","task.jobs","worktree.changes","transcript.activity","session.deliver"],vF=new Set(_H)});import{createHash as cF}from"crypto";import{homedir as TQ,tmpdir as dF}from"os";import{join as GZ}from"path";function nF(J){return cF("sha1").update(J).digest("hex").slice(0,8)}function rH(J,z,Y,Z){if(Buffer.byteLength(J,"utf8")<=pH)return J;let G=nF(z),X=Z===void 0?"":`-${Z}`,Q=GZ(dF(),`kobe-${G}-${Y}${X}.sock`);if(Buffer.byteLength(Q,"utf8")<=pH)return Q;throw Error(`kobe socket path exceeds ${pH} bytes even after fallback: ${Q}`)}function kz(J){let z=process.env.KOBE_DAEMON_SOCKET_PATH;if(z&&z.length>0)return z;let Y=J??process.env.KOBE_HOME_DIR;if(Y&&Y.length>0)return rH(GZ(Y,".kobe","daemon.sock"),Y,"daemon");let Z=process.env.XDG_RUNTIME_DIR;if(Z&&Z.length>0)return rH(GZ(Z,"kobe.sock"),Z,"daemon");let G=TQ();return rH(GZ(G,".kobe","daemon.sock"),G,"daemon")}function pz(J=process.env.KOBE_HOME_DIR??TQ()){let z=process.env.KOBE_DAEMON_PID_PATH;if(z&&z.length>0)return z;return GZ(J,".kobe","daemon.pid")}function uQ(J=process.env.KOBE_HOME_DIR??TQ()){return GZ(J,".kobe","daemon.log")}function cW(J=process.env.KOBE_HOME_DIR??TQ()){return GZ(J,".kobe","client.log")}var pH=100;var lZ=()=>{};import{appendFile as dW,mkdir as iF}from"fs/promises";import{dirname as lF}from"path";function xQ(J){lW=J}function $F(J){if(J instanceof Error)return{message:J.message,stack:J.stack};let z;try{z=typeof J==="string"?J:JSON.stringify(J)}catch{z=String(J)}return{message:z}}function $W(J,z,Y=new Date){return`[${Y.toISOString()}] client ${lW} [${J}] pid=${process.pid}: ${z}
15
+ `}function aF(){if(nW)return;nW=!0;try{process.stderr.write(`[kobe] client log write failed; continuing without it
16
+ `)}catch{}}function aW(J){let z=cW();iW=iW.then(async()=>{try{await dW(z,J)}catch(Y){if(Y?.code==="ENOENT")await iF(lF(z),{recursive:!0}),await dW(z,J);else throw Y}}).catch(()=>aF())}function rz(J,z){aW($W(J,z))}function o1(J,z){let Y=$F(z);aW($W(J,Y.stack??Y.message))}function _W(){if(oH||sH)return;oH=(J)=>o1("crash-net",J),sH=(J)=>o1("crash-net",J),process.on("unhandledRejection",oH),process.on("uncaughtException",sH)}var lW="client",nW=!1,iW,oH,sH;var XZ=N(()=>{lZ();iW=Promise.resolve()});import{connect as _F}from"net";import{StringDecoder as pF}from"string_decoder";class $J{socketPath;socket=null;buffer="";nextId=1;pending=new Map;handlers=new Map;lifecycleHandlers=new Map;connecting=null;disposed=!1;constructor(J){this.socketPath=J}connect(){if(this.socket)return Promise.resolve();if(this.disposed)return Promise.reject(Error("daemon client disposed"));if(this.connecting)return this.connecting;let J=this.openSocket();this.connecting=J;let z=()=>{if(this.connecting===J)this.connecting=null};return J.then(z,z),J}get isDisposed(){return this.disposed}close(){this.disposed=!0,this.socket?.end(),this.socket=null,this.failPending()}forceDisconnect(){let J=this.socket;if(!J)return;this.socket=null,J.destroy(),this.failPending()}failPending(){if(this.pending.size===0)return;let J=Error("daemon connection closed");for(let z of this.pending.values())z.reject(J);this.pending.clear()}on(J,z){let Y=this.handlers.get(J);if(!Y)Y=new Set,this.handlers.set(J,Y);return Y.add(z),()=>{if(Y?.delete(z),Y?.size===0)this.handlers.delete(J)}}onChannel(J,z){return this.on(J,(Y)=>z(Y.payload))}subscribe(J={}){let z={};if(J.channels)z.channels=J.channels;if(J.role)z.role=J.role;return this.request("subscribe",z)}onLifecycle(J,z){let Y=this.lifecycleHandlers.get(J);if(!Y)Y=new Set,this.lifecycleHandlers.set(J,Y);return Y.add(z),()=>{if(Y?.delete(z),Y?.size===0)this.lifecycleHandlers.delete(J)}}async request(J,z){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:(f)=>X(f),reject:Q})});return Y.write(eG({type:"request",id:Z,name:J,payload:z})),G}openSocket(){return new Promise((J,z)=>{let Y=_F(this.socketPath);this.socket=Y;let Z=()=>{Y.off("error",G),J()},G=(Q)=>{if(Y.off("connect",Z),this.socket===Y)this.socket=null;z(Q)};Y.once("connect",Z),Y.once("error",G);let X=new pF("utf8");this.buffer="",Y.on("data",(Q)=>this.onData(X.write(Q))),Y.on("close",()=>this.onSocketClose(Y))})}onSocketClose(J){if(this.socket!==J)return;this.socket=null,this.failPending(),this.emitLifecycle("close")}emitLifecycle(J){for(let z of this.lifecycleHandlers.get(J)??[])try{z()}catch(Y){console.error(`[kobe] lifecycle handler for "${J}" threw:`,Y)}}onData(J){this.buffer+=J;let z=this.buffer.indexOf(`
17
+ `);while(z!==-1){let Y=this.buffer.slice(0,z);if(this.buffer=this.buffer.slice(z+1),Y.trim().length>0)this.onLine(Y);z=this.buffer.indexOf(`
18
+ `)}}onLine(J){let z;try{z=JSON.parse(J)}catch(Z){o1("client-frame",Z);return}if(z.type==="event"){this.emit(z);return}if(z.type!=="response")return;let Y=this.pending.get(z.id);if(!Y)return;if(this.pending.delete(z.id),z.error){let Z=Error(z.error.message);if(z.error.name)Z.name=z.error.name;Y.reject(Z)}else Y.resolve(z.payload)}emit(J){for(let z of this.handlers.get(J.name)??[])z(J);for(let z of this.handlers.get("*")??[])z(J)}}var JX=N(()=>{ZZ();XZ()});import{spawnSync as rF}from"child_process";import{existsSync as oF,statSync as sF}from"fs";import{homedir as tF}from"os";import zX from"path";async function pW(J=eF){let z=[],Y=(B)=>{if(!B)return;return z.push(B),J.fileExists(B)?B:void 0},Z=J.which("claude");if(Z){if(z.push(`which:${Z}`),J.fileExists(Z))return Z}let G=J.home(),X=Y(zX.join(G,".claude","local","claude"));if(X)return X;let Q=J.env("NVM_BIN");if(Q){let B=Y(zX.join(Q,"claude"));if(B)return B}let f=zX.join(G,".nvm","versions","node"),H=J.readdir(f).sort().reverse();for(let B of H){let V=Y(zX.join(f,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(zX.join(G,B));if(V)return V}throw new EQ(z)}var EQ,eF;var rW=N(()=>{EQ=class EQ extends Error{checkedPaths;constructor(J){super(`Claude Code binary not found. Checked: ${J.join(", ")}. Ensure 'claude' is on PATH, or install at ~/.claude/local/claude.`);this.name="ClaudeBinaryNotFoundError",this.checkedPaths=J}};eF={fileExists(J){try{return sF(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return tF()},which(J){let z=process.platform==="win32"?"where":"which",Y=rF(z,[J],{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&&oF(G)?G:void 0}return Z},readdir(J){try{return FQ("fs").readdirSync(J)}catch{return[]}}}});import{spawnSync as JO}from"child_process";import{existsSync as zO,statSync as YO}from"fs";import{homedir as ZO}from"os";import oW from"path";async function sW(J=GO){let z=[],Y=(Q)=>{if(!Q)return;return z.push(Q),J.fileExists(Q)?Q:void 0},Z=J.which("codex");if(Z){if(z.push(`which:${Z}`),J.fileExists(Z))return Z}let G=J.home();for(let Q of["/opt/homebrew/bin/codex","/usr/local/bin/codex","/usr/bin/codex","/bin/codex"]){let f=Y(Q);if(f)return f}let X=J.env("NVM_BIN");if(X){let Q=Y(oW.join(X,"codex"));if(Q)return Q}for(let Q of[".local/bin/codex",".bun/bin/codex","bin/codex"]){let f=Y(oW.join(G,Q));if(f)return f}throw new wQ(z)}var wQ,GO;var tW=N(()=>{wQ=class wQ extends Error{checkedPaths;constructor(J){super(`Codex CLI binary not found. Checked: ${J.join(", ")}. Ensure 'codex' is on PATH (e.g. \`brew install codex\` or the official installer).`);this.name="CodexBinaryNotFoundError",this.checkedPaths=J}};GO={fileExists(J){try{return YO(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return ZO()},which(J){let z=process.platform==="win32"?"where":"which",Y=JO(z,[J],{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&&zO(G)?G:void 0}return Z},readdir(J){try{return FQ("fs").readdirSync(J)}catch{return[]}}}});import{spawnSync as XO}from"child_process";import{existsSync as QO,statSync as qO}from"fs";import{homedir as fO}from"os";import FY from"path";async function eW(J=HO){let z=[],Y=(V)=>{if(!V)return;return z.push(V),J.fileExists(V)?V:void 0},Z=J.which("copilot");if(Z){if(z.push(`which:${Z}`),J.fileExists(Z))return Z}let G=J.platform()==="win32"?["copilot.exe","copilot.cmd","copilot"]:["copilot"],X=(V)=>{if(!V)return;for(let j of G){let K=Y(FY.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=J.env("NVM_BIN"),f=X(Q);if(f)return f;let H=J.home(),B=[FY.join(H,".npm-global/bin"),FY.join(H,".local/bin"),FY.join(H,".bun/bin"),FY.join(H,"bin")];if(J.platform()==="win32"){let V=J.env("APPDATA"),j=J.env("LOCALAPPDATA");if(B.unshift(FY.join(H,"AppData/Roaming/npm")),V)B.unshift(FY.join(V,"npm"));if(j)B.unshift(FY.join(j,"npm"))}for(let V of B){let j=X(V);if(j)return j}throw new PQ(z)}var PQ,HO;var J7=N(()=>{PQ=class PQ extends Error{checkedPaths;constructor(J){super(`GitHub Copilot CLI binary not found. Checked: ${J.join(", ")}. Ensure 'copilot' is on PATH (for example \`npm install -g @github/copilot\` or \`brew install copilot-cli\`).`);this.name="CopilotBinaryNotFoundError",this.checkedPaths=J}};HO={fileExists(J){try{return qO(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return fO()},which(J){let z=process.platform==="win32"?"where":"which",Y=XO(z,[J],{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&&QO(G)?G:void 0}return Z},platform(){return process.platform}}});import{readFileSync as BO,statSync as jO}from"fs";import{readFile as WO,stat as VO}from"fs/promises";async function $Z(J,z=z7){let{size:Y}=await VO(J);if(Y>z)return"";return WO(J,"utf8")}function Y7(J,z=z7){let Y;try{Y=jO(J)}catch(Z){if(Z.code==="ENOENT")return null;throw Z}if(Y.size>z)return null;return BO(J,"utf8")}function OY(J,z=KO){return J.length<=z}var z7=104857600,KO=8388608;var YX=()=>{};import{homedir as UO}from"os";import AY from"path";function DO(J,z){let Y=J("CLAUDE_CONFIG_DIR")?.trim();if(Y)return AY.join(Y,".claude.json");return AY.join(z,".claude.json")}function LO(J,z){let Z=J("CODEX_HOME")?.trim()??AY.join(z,".codex");return AY.join(Z,"auth.json")}function MO(J,z){let Z=J("COPILOT_HOME")?.trim()??AY.join(z,".copilot");return AY.join(Z,"config.json")}function FO(J){let z=J.split(".");if(z.length!==3)return null;let Y=z[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 vQ(J){try{return{found:!0,path:await J()}}catch(z){if(z instanceof EQ||z instanceof wQ||z instanceof PQ)return{found:!1,error:"not found on PATH"};return{found:!1,error:z instanceof Error?z.message:String(z)}}}async function Z7(J){return(await Promise.all([["claude",()=>J.findClaudeBinary()],["codex",()=>J.findCodexBinary()],["copilot",()=>J.findCopilotBinary()]].map(async([Z,G])=>(await vQ(G)).found?Z:null))).filter((Z)=>Z!==null)}function OO(J=aZ){if(J!==aZ)return Z7(J);if(hQ)return hQ;let z=Z7(J).catch((Y)=>{throw hQ=null,Y});return hQ=z,z}async function oz(J=aZ){return[...await OO(J),...lz()]}async function mQ(J=aZ){let z=await vQ(()=>J.findClaudeBinary()),Y=DO(J.env,J.home()),Z;try{Z=J.readFile(Y)}catch(H){return{binary:z,account:{kind:"none"},accountError:`read ${Y}: ${H instanceof Error?H.message:String(H)}`}}if(Z===null)return{binary:z,account:{kind:"none"}};let G;try{G=JSON.parse(Z)}catch(H){return{binary:z,account:{kind:"none"},accountError:`parse ${Y}: ${H instanceof Error?H.message:String(H)}`}}let X=G?.oauthAccount;if(!X||typeof X!=="object")return{binary:z,account:{kind:"none"}};let Q=X,f=typeof Q.emailAddress==="string"?Q.emailAddress:void 0;if(!f)return{binary:z,account:{kind:"none"}};return{binary:z,account:{kind:"oauth",email:f,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 cQ(J=aZ){let z=await vQ(()=>J.findCodexBinary()),Y=LO(J.env,J.home()),Z;try{Z=J.readFile(Y)}catch(B){return{binary:z,account:{kind:"none"},accountError:`read ${Y}: ${B instanceof Error?B.message:String(B)}`}}if(Z===null)return{binary:z,account:{kind:"none"}};let G;try{G=JSON.parse(Z)}catch(B){return{binary:z,account:{kind:"none"},accountError:`parse ${Y}: ${B instanceof Error?B.message:String(B)}`}}let X=G??{},Q=X.tokens,f=typeof Q?.id_token==="string"?Q.id_token:void 0;if(f){let B=FO(f);if(!B)return{binary:z,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:z,account:{kind:"chatgpt",email:V,plan:L}};return{binary:z,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:z,account:{kind:"apikey"}};return{binary:z,account:{kind:"none"}}}async function dQ(J=aZ){let z=await vQ(()=>J.findCopilotBinary());for(let X of["COPILOT_GITHUB_TOKEN","GH_TOKEN","GITHUB_TOKEN"])if(J.env(X)?.trim())return{binary:z,account:{kind:"token",source:X}};let Y=MO(J.env,J.home()),Z;try{Z=J.readFile(Y)}catch(X){return{binary:z,account:{kind:"none"},accountError:`read ${Y}: ${X instanceof Error?X.message:String(X)}`}}if(Z===null)return{binary:z,account:{kind:"none"}};let G;try{G=JSON.parse(Z)}catch(X){return{binary:z,account:{kind:"none"},accountError:`parse ${Y}: ${X instanceof Error?X.message:String(X)}`}}if(!tH(G))return{binary:z,account:{kind:"none"}};if(G7(G,["github_token","oauth_token","access_token","token","selectedUser","currentUser","user"]))return{binary:z,account:{kind:"oauth"}};return{binary:z,account:{kind:"none"}}}function tH(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function G7(J,z,Y=0){if(Y>4||!tH(J))return!1;for(let[Z,G]of Object.entries(J)){if(z.includes(Z)&&typeof G==="string"&&G.length>0)return!0;if(tH(G)&&G7(G,z,Y+1))return!0}return!1}var aZ,hQ=null;var QZ=N(()=>{O1();rW();tW();J7();YX();aZ={readFile(J){return Y7(J)},env(J){return process.env[J]},home(){return UO()},findClaudeBinary(){return pW()},findCodexBinary(){return sW()},findCopilotBinary(){return eW()}}});function X7(J){if(typeof J==="string")return J.length>0?[{type:"text",text:J}]:[];if(!Array.isArray(J))return[];let z=[];for(let Y of J){if(typeof Y==="string"){if(Y.length>0)z.push({type:"text",text:Y});continue}if(!Y||typeof Y!=="object")continue;let Z=Y;if(Z.type==="text"&&typeof Z.text==="string"){z.push({type:"text",text:Z.text});continue}if(Z.type==="tool_use"){z.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"){z.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")z.push({type:"thinking",text:Z.thinking})}return z}function Q7(J){return J.isMeta===!0||J.isCompactSummary===!0}function q7(J){if(J.length===0)return!1;for(let z of J){if(z.type!=="text")return!1;let Y=z.text.trim();if(!Y.startsWith("<command-name>")&&!Y.startsWith("<command-message>")&&!Y.startsWith("<local-command"))return!1}return!0}import{appendFile as Bw,mkdir as jw,readdir as eH,stat as AO,unlink as Ww}from"fs/promises";import{homedir as f7}from"os";import nQ from"path";function gO(J){return J.replace(/[/.]/g,"-")}async function ZX(J){if(!J)return[];let z=nQ.join(f7(),".claude","projects",gO(J)),Y;try{Y=await eH(z)}catch{return[]}let Z=[];for(let G of Y){if(!G.endsWith(".jsonl"))continue;let X=nQ.join(z,G),Q=0;try{Q=(await AO(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 H7(J){return(await ZX(J))[0]?.mtimeMs??0}async function B7(J,z=RO){let Y=z.projectsDir(),Z=await z.readdir(Y);for(let G of Z){let X=nQ.join(Y,G,`${J}.jsonl`),Q;try{Q=await z.readFile(X)}catch{continue}return CO(NO(Q,J))}return[]}function CO(J){return J.map((z,Y)=>({msg:z,idx:Y})).sort((z,Y)=>{if(z.msg.timestamp<Y.msg.timestamp)return-1;if(z.msg.timestamp>Y.msg.timestamp)return 1;return z.idx-Y.idx}).map((z)=>z.msg)}function NO(J,z){let Y=[];for(let Z of J.split(`
22
+ `)){let G=Z.trim();if(!G)continue;if(!OY(G))continue;let X;try{X=JSON.parse(G)}catch{continue}if(!JB(X))continue;let Q=kO(X,z);if(Q)Y.push(Q)}return Y}function kO(J,z){if(Q7(J))return null;let Y=JB(J.message)?J.message:J,Z=Y.role;if(Z!=="user"&&Z!=="assistant"&&Z!=="system")return null;if(!("content"in Y))return null;let G=X7(Y.content);if(Z==="user"&&q7(G))return null;let X=typeof J.timestamp==="string"?J.timestamp:new Date().toISOString(),Q=typeof J.sessionId==="string"?J.sessionId:z,f=bO(Y.usage);return f?{role:Z,blocks:G,timestamp:X,sessionId:Q,usage:f}:{role:Z,blocks:G,timestamp:X,sessionId:Q}}function bO(J){if(!JB(J))return;let z=typeof J.input_tokens==="number"?J.input_tokens:void 0,Y=typeof J.output_tokens==="number"?J.output_tokens:void 0;if(z===void 0||Y===void 0)return;let Z=typeof J.cache_read_input_tokens==="number"?J.cache_read_input_tokens:void 0,G=typeof J.cache_creation_input_tokens==="number"?J.cache_creation_input_tokens:void 0;return{input_tokens:z,output_tokens:Y,...Z!==void 0?{cache_read_input_tokens:Z}:{},...G!==void 0?{cache_creation_input_tokens:G}:{}}}function JB(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var RO;var zB=N(()=>{YX();RO={projectsDir(){return nQ.join(f7(),".claude","projects")},async readdir(J){try{return await eH(J)}catch{return[]}},async readFile(J){return await $Z(J)},async pathExists(J){try{return await eH(J),!0}catch{return!1}}}});import{fileURLToPath as W7}from"url";function k1(){if(import.meta.url.endsWith(".js"))return["kobe"];let z=W7(new URL("./index.ts",import.meta.url)),Y=W7(import.meta.resolve("@opentui/solid/preload"));return[process.execPath,"--preload",Y,"--conditions=browser",z]}var sz=()=>{};function YB(J,z={}){if(z.bareSafe&&SO.test(J))return J;return`'${J.replace(/'/g,"'\\''")}'`}function iQ(J,z={}){return J.map((Y)=>YB(Y,z)).join(" ")}var SO;var ZB=N(()=>{SO=/^[A-Za-z0-9_/.:=-]+$/});function QX(J){return`kobe-hidden-${J.replace(/[^A-Za-z0-9_-]/g,"")||"session"}`}function K7(J){let z=Number.parseInt(J.replace(/^@/,""),10);return Number.isFinite(z)&&z>=0?1000+z:1000}function HZ(J){if(!Number.isFinite(J))return qZ;return Math.max(IO,Math.min(yO,Math.round(J)))}function JY(J){if(!Number.isFinite(J))return null;return Math.max(TO,Math.min(uO,Math.round(J)))}function X1(J){return YB(J)}function NJ(J){return iQ(J)}function kJ(J){return`${J}; __rc=$?; [ "$__rc" -ne 0 ] && printf '${"\\n \u26A0 Engine exited (code %s). Check Settings \u2192 Engines, fix the launch command, then press R to relaunch.\\n\\n"}' "$__rc"; exec "\${SHELL:-/bin/sh}"`}function GB(J){return`'${J.replace(/'/g,"'\\''")}'`}function U7(){return`clear; printf ${GB("\\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 QB(J){let z=typeof J==="number"?J:J==null?Number.NaN:Number.parseInt(J,10);if(!Number.isFinite(z))return xO;return Math.max(EO,Math.min(wO,Math.round(z)))}function PO(J,z){let Y=String(z),Z="\\n \u26A0 Repo init (.kobe/init.sh) timed out after %ss and was killed; continuing to the engine.\\n\\n",G="\\n \u26A0 Repo init (.kobe/init.sh) failed (code %s); continuing to the engine.\\n\\n";return['__kobe_init_env="${TMPDIR:-/tmp}/kobe-init-env.$$"','__kobe_init_to="${TMPDIR:-/tmp}/kobe-init-timeout.$$"','rm -f "$__kobe_init_env" "$__kobe_init_to" 2>/dev/null',"(",J,"__kobe_init_ec=$?",'export -p > "$__kobe_init_env" 2>/dev/null',"exit $__kobe_init_ec",") </dev/null &","__kobe_init_pid=$!",`( sleep ${Y}; : > "$__kobe_init_to"; kill -TERM "$__kobe_init_pid" 2>/dev/null; sleep 2; kill -KILL "$__kobe_init_pid" 2>/dev/null ) &`,"__kobe_init_wd=$!",'wait "$__kobe_init_pid" 2>/dev/null; __kobe_init_rc=$?','kill "$__kobe_init_wd" 2>/dev/null; wait "$__kobe_init_wd" 2>/dev/null',`if [ -f "$__kobe_init_to" ]; then __kobe_init_rc=124; printf '${"\\n \u26A0 Repo init (.kobe/init.sh) timed out after %ss and was killed; continuing to the engine.\\n\\n"}' '${Y}';`,'elif [ "$__kobe_init_rc" -eq 0 ]; then [ -f "$__kobe_init_env" ] && . "$__kobe_init_env" 2>/dev/null;',`else printf '${"\\n \u26A0 Repo init (.kobe/init.sh) failed (code %s); continuing to the engine.\\n\\n"}' "$__kobe_init_rc"; fi`,'rm -f "$__kobe_init_env" "$__kobe_init_to" 2>/dev/null'].join(`
23
+ `)}function D7(J,z){let Y=kJ(J),Z=z?.initScript?.trim();if(!Z)return Y;let G=QB(z?.timeoutSeconds),X=PO(Z,G);if(z?.markerPath){let Q=GB(z.markerPath),f=GB(hO(z.markerPath));return[`if [ ! -f ${Q} ]; then`,X,`if [ "$__kobe_init_rc" -eq 0 ]; then mkdir -p ${f} && : > ${Q}; fi`,"fi",Y].join(`
24
+ `)}return[X,Y].join(`
25
+ `)}function hO(J){let z=J.lastIndexOf("/");return z<=0?".":J.slice(0,z)}function V7(J){return`cd ${X1(J)} && while :; do clear; printf "\\033[1m# %s\\033[0m\\n\\n" ${X1(J)}; git status --short --branch 2>/dev/null | sed 's/^/ /' || true; printf "\\n"; if command -v lsd >/dev/null 2>&1; then lsd --tree --git -I node_modules -I .git --depth 2 .; elif command -v eza >/dev/null 2>&1; then eza --tree --git -L 2 -I 'node_modules|.git' .; elif command -v tree >/dev/null 2>&1; then tree -L 2 -I 'node_modules|.git'; else ls -la; fi; sleep 2; done`}function L7(J){let z=X1(J.worktree),Y=X1(J.relPath),Z=J.cliInvocation.map(X1).join(" "),G=`cd ${z} && 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 ${z} --preview ${Y} || { ${G}; }`}function M7(J){return`${NJ([...J.cliInvocation,"update-page"])}`}function F7(J){let z=J.opener??"open";return[`tmux -L ${X1(J.tmuxSocket)} capture-pane -Jp -t '#{pane_id}' -S -500`,`grep -oiE 'https?://[^ "'\\''()<>]+'`,"awk '!seen[$0]++'","{ command -v fzf >/dev/null && fzf --reverse || tail -1; }",`xargs -I{} ${z} {}`].join(" | ")}function gY(J,z={}){let Y=[...J,"tasks"];if(z.initialTaskId)Y.push("--initial-task-id",z.initialTaskId);return NJ(Y)}function _Z(J){if(J.taskId&&J.claudePaneId){let z=J.cliInvocation.map(X1).join(" "),Y=J.vendor?` --vendor ${X1(J.vendor)}`:"";return`KOBE_FILETREE_WATCH=1 ${z} ops --task-id ${X1(J.taskId)} --worktree ${X1(J.cwd)} --target-pane ${X1(J.claudePaneId)}${Y} || { ${V7(J.cwd)}; }`}return V7(J.cwd)}var qZ=32,aJ="tasks",fZ="claude",Xz="ops",Qz="shell",GX="workspace_aux",XB=4,qz="@kobe_hidden_shell_pane",CJ="@kobe_hidden_tasks_pane",RY="@kobe_zen_panes",XX="@kobe_zen",tz="@kobe_tasks_width",IO=16,yO=120,lQ=60,qX=50,BZ="@kobe_right_width_pct",ez="@kobe_ops_height_pct",TO=10,uO=90,xO=120,EO=5,wO=3600;var fz=N(()=>{ZB()});function _J(J){return!!J&&typeof J==="object"&&!Array.isArray(J)}function mO(J){return J.map((z)=>NJ(["hook",z.verb]))}function cO(J,z){if(!_J(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((Y)=>_J(Y)&&typeof Y.command==="string"&&z.some((Z)=>Y.command.includes(Z)))}function R7(J,z=k1()){let Y={};for(let{event:Z,matcher:G,verb:X}of J){let f={hooks:[{type:"command",command:NJ([...z,"hook",X])}]};if(G)f.matcher=G;Y[Z]=[f]}return Y}function $Q(J,z,Y,Z=k1()){let G=mO(Y),{hooks:X,...Q}=J,f=_J(X)?{...X}:{},H=z?R7(Y,Z):{};for(let{event:B}of Y){let j=(Array.isArray(f[B])?f[B]:[]).filter((K)=>!cO(K,G));if(z&&Array.isArray(H[B]))j.push(...H[B]);if(j.length>0)f[B]=j;else delete f[B]}return Object.keys(f).length>0?{...Q,hooks:f}:{...Q}}function g7(J=k1()){let z=NJ([...J,"hook",A7]);return{[O7]:[{matcher:vO,hooks:[{type:"command",command:z}]}]}}function dO(J){if(!_J(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((z)=>_J(z)&&typeof z.command==="string"&&z.command.includes(A7))}function aQ(J,z,Y=k1()){let{hooks:Z,...G}=J,X=_J(Z)?{...Z}:{},Q=O7,H=(Array.isArray(X[Q])?X[Q]:[]).filter((B)=>!dO(B));if(z)H.push(...g7(Y)[Q]);if(H.length>0)X[Q]=H;else delete X[Q];return Object.keys(X).length>0?{...G,hooks:X}:{...G}}var O7="PostToolUse",vO="Bash",A7="worktree-created";var qB=N(()=>{sz();fz()});import{mkdir as nO,readFile as iO,writeFile as lO}from"fs/promises";import{dirname as $O}from"path";async function aO(J){try{let z=JSON.parse(await iO(J,"utf8"));return _J(z)?z:{}}catch{return{}}}async function pZ(J,z){try{let Y=await aO(J),Z=z(Y);if(JSON.stringify(Z)===JSON.stringify(Y))return;await nO($O(J),{recursive:!0}),await lO(J,`${JSON.stringify(Z,null,2)}
26
+ `)}catch{}}class fX{supportsHooks(){return!0}activityDetailFromPayload(J,z){return}supportsWorktreeSync(){return!1}async removeWorktreeSyncHook(J){}async installActivityHooks(J){await pZ(J,(z)=>$Q(z,!0,this.eventMap))}async removeActivityHooks(J){await pZ(J,(z)=>$Q(z,!1,this.eventMap))}async installWorktreeWatchHook(J){await pZ(J,(z)=>aQ(z,!0))}async removeWorktreeWatchHook(J){await pZ(J,(z)=>aQ(z,!1))}}var fB=N(()=>{qB()});import{homedir as _O}from"os";import{join as pO}from"path";function rO(J){if(typeof J!=="string")return"other";if(J==="rate_limit"||J==="overloaded")return"rate_limit";if(J==="billing_error")return"billing";return"other"}function oO(){return pO(_O(),".claude","settings.json")}function tO(J){if(!_J(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((z)=>_J(z)&&typeof z.command==="string"&&z.command.includes(sO))}function eO(J,z){let{hooks:Y,...Z}=J,{WorktreeCreate:G,...X}=_J(Y)?Y:{},f=(Array.isArray(G)?G:[]).filter((B)=>!tO(B));if(z!==null)f.push({hooks:[{type:"command",command:z}]});let H={...X};if(f.length>0)H.WorktreeCreate=f;return Object.keys(H).length>0?{...Z,hooks:H}:{...Z}}var C7,Ew,sO="worktree-created",HB;var N7=N(()=>{fB();qB();C7=[{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"}],Ew=C7.map((J)=>J.event);HB=class HB extends fX{vendor="claude";eventMap=C7;globalSettingsPath(){return oO()}activityDetailFromPayload(J,z){if(J==="turn-failed")return{failure:rO(z.error_type)};if(J==="awaiting-input")return{waiting:"permission"};return}supportsWorktreeSync(){return!0}async removeWorktreeSyncHook(J){await pZ(J,(z)=>eO(z,null))}}});function BB(J){if(typeof J==="string")return J.length>0?[{type:"text",text:J}]:[];if(!Array.isArray(J))return[];let z=[];for(let Y of J){if(typeof Y==="string"){if(Y.length>0)z.push({type:"text",text:Y});continue}if(!J2(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)z.push({type:"text",text:G});continue}if(Z)z.push({type:"text",text:`[codex: ${Z}]`})}return z}function J2(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function k7(J){if(J.length===0)return!1;for(let z of J){if(z.type!=="text")return!1;let Y=(z.text??"").trim();if(!z2(Y)&&!Y2(Y))return!1}return!0}function z2(J){return J.startsWith("<environment_context>")&&J.endsWith("</environment_context>")}function Y2(J){return J.startsWith("# AGENTS.md instructions for ")&&J.includes(`
27
27
  <INSTRUCTIONS>
28
- `)&&f.endsWith("</INSTRUCTIONS>")}var tW=()=>{};function eW(f,Y={}){let J=lH(f.input_tokens,0),z=lH(f.cached_input_tokens,0),Z=lH(f.output_tokens,0),G=Math.max(0,J-z);if(J<=0&&Z<=0&&z<=0)return;return{input_tokens:G,output_tokens:Z,...z>0?{cache_read_input_tokens:z}:{},...e3(Y.contextWindowTokens)?{context_window_tokens:Y.contextWindowTokens}:{}}}function lH(f,Y){return typeof f==="number"&&Number.isFinite(f)?f:Y}function e3(f){return typeof f==="number"&&Number.isFinite(f)&&f>0}import{readdir as fO,stat as YO,unlink as cE}from"fs/promises";import{homedir as JO}from"os";import Qz from"path";async function _H(f=qz){let Y=f.sessionsDir(),J=(await f.readdir(Y)).sort().reverse(),z=[];for(let Z of J){let G=Qz.join(Y,Z),Q=(await f.readdir(G)).sort().reverse();for(let q of Q){let H=Qz.join(G,q),B=(await f.readdir(H)).sort().reverse();for(let V of B){let j=Qz.join(H,V),K=(await f.readdir(j)).filter((L)=>L.startsWith("rollout-")&&L.endsWith(".jsonl"));K.sort().reverse();for(let L of K)if(z.push(Qz.join(j,L)),z.length>=fV){if(!YV)YV=!0,console.warn(`[codex history] rollout scan truncated at ${fV} files; older sessions may be omitted`);return z}}}}return z}async function zO(f,Y=qz){if(!f)return;let J=f.toLowerCase(),z=await _H(Y);for(let Z of z)if(Qz.basename(Z).match(GV)?.[1]?.toLowerCase()===J)return Z;return}function ZO(f){for(let Y of f.split(`
29
- `)){let J=Y.trim();if(!J)continue;if(!UJ(J))return"";try{let z=JSON.parse(J);if(z.type==="session_meta")return z.payload?.cwd??""}catch{}return""}return""}async function XV(f,Y){let J=JV.get(Y);if(!J)J=new Map,JV.set(Y,J);let z=J.get(f);if(z!==void 0)return z;let Z;try{Z=await Y.readFile(f)}catch{return null}let G=ZO(Z);if(G)J.set(f,G);return G}async function QV(f,Y=qz){if(!f)return[];let J=await _H(Y),z=[],Z=0;for(let G of J){if(Z>=GO)break;if(Z++,await XV(G,Y)!==f)continue;let Q=Qz.basename(G).match(GV)?.[1];if(Q)z.push(Q)}return z.reverse()}async function rH(f,Y=qz){if(!f)return null;let J=await _H(Y),z=0;for(let Z of J){if(z>=XO)break;if(z++,await XV(Z,Y)!==f)continue;try{return{path:Z,mtimeMs:(await Y.stat(Z)).mtimeMs}}catch{}}return null}async function qV(f,Y=qz){return(await rH(f,Y))?.mtimeMs??0}async function HV(f,Y=qz){return(await QO(f,Y)).messages}async function QO(f,Y=qz){let J=await zO(f,Y);if(!J)return{messages:[]};let z;try{z=await Y.readFile(J)}catch{return{messages:[]}}let Z=qO(HO(z,f)),G=KO(z);return{messages:Z,...G?{usageMetrics:G}:{}}}function qO(f){return f.map((Y,J)=>({msg:Y,idx:J})).sort((Y,J)=>{if(Y.msg.timestamp<J.msg.timestamp)return-1;if(Y.msg.timestamp>J.msg.timestamp)return 1;return Y.idx-J.idx}).map((Y)=>Y.msg)}function HO(f,Y){let J=[];for(let z of f.split(`
30
- `)){let Z=z.trim();if(!Z)continue;if(!UJ(Z))continue;let G;try{G=JSON.parse(Z)}catch{continue}if(!fG(G))continue;if(G.type!=="response_item")continue;let Q=fG(G.payload)?G.payload:void 0;if(!Q)continue;let q=typeof G.timestamp==="string"?G.timestamp:new Date().toISOString(),H=BO(Q,q,Y);if(H)J.push(H)}return J}function BO(f,Y,J){if(f.type==="message"){let z=f.role;if(z!=="user"&&z!=="assistant"&&z!=="system")return;let Z=iH(f.content);if(z==="user"&&sW(Z))return;return{role:z,blocks:Z,timestamp:Y,sessionId:J}}if(f.type==="reasoning")return jO(f,Y,J);if(f.type==="function_call")return aH(f,Y,J,{name:pH(f.name,"function_call"),input:$H(f.arguments)});if(f.type==="custom_tool_call")return aH(f,Y,J,{name:pH(f.name,"custom_tool_call"),input:$H(f.input)});if(f.type==="tool_search_call")return aH(f,Y,J,{name:"tool_search_call",input:PX(f,["type","call_id","status"])});if(f.type==="function_call_output"||f.type==="custom_tool_call_output")return zV(f,Y,J,$H(f.output));if(f.type==="tool_search_output")return zV(f,Y,J,PX(f,["type","call_id"]));if(f.type==="web_search_call"||f.type==="image_generation_call"||f.type==="local_shell_call")return WO(f,Y,J);return}function jO(f,Y,J){let z=VO(f);if(z.length===0)return;return{role:"assistant",blocks:[{type:"thinking",text:z}],timestamp:Y,sessionId:J}}function aH(f,Y,J,z){let Z=typeof f.call_id==="string"?f.call_id:void 0;if(!Z)return;return{role:"assistant",blocks:[{type:"tool_call",callId:Z,name:z.name,input:z.input}],timestamp:Y,sessionId:J}}function zV(f,Y,J,z){let Z=typeof f.call_id==="string"?f.call_id:void 0;if(!Z)return;return{role:"user",blocks:[{type:"tool_result",callId:Z,output:z,isError:!1}],timestamp:Y,sessionId:J}}function WO(f,Y,J){let z=typeof f.type==="string"?f.type:"tool",Z=typeof f.call_id==="string"&&f.call_id.length>0?f.call_id:`${z}:${Y}`,G=pH(f.name,z),Q=PX(f,["type","call_id","status"]),q=PX(f,["type","call_id"]);return{role:"assistant",timestamp:Y,sessionId:J,blocks:[{type:"tool_call",callId:Z,name:G,input:Q},{type:"tool_result",callId:Z,output:q,isError:!1}]}}function VO(f){let Y=ZV(f.content);if(Y.length>0)return Y;let J=typeof f.text==="string"?f.text:"";if(J.length>0)return J;return ZV(f.summary)}function ZV(f){if(typeof f==="string")return f;if(!Array.isArray(f))return"";let Y=[];for(let J of f){if(typeof J==="string"){Y.push(J);continue}if(!fG(J))continue;let z=typeof J.text==="string"?J.text:"";if(z.length>0)Y.push(z)}return Y.join("")}function PX(f,Y){let J={};for(let[z,Z]of Object.entries(f))if(!Y.includes(z))J[z]=Z;return J}function pH(f,Y){return typeof f==="string"&&f.length>0?f:Y}function $H(f){if(typeof f!=="string")return f;try{return JSON.parse(f)}catch{return f}}function KO(f){let Y,J=null;for(let z of f.split(`
31
- `)){let Z=z.trim();if(!Z)continue;if(!UJ(Z))continue;let G;try{G=JSON.parse(Z)}catch{continue}if(!fG(G))continue;let Q=typeof G.timestamp==="string"?UO(G.timestamp):null;if(G.type==="response_item")continue;if(G.type!=="turn.completed")continue;let q=fG(G.usage)?G.usage:void 0;if(!q)continue;let H=eW(q);if(!H)continue;if(Q!==null&&(J===null||Q>J))J=Q,Y=H;else if(J===null)Y=H}return Y}function UO(f){let Y=new Date(f).getTime();return Number.isFinite(Y)?Y:null}function fG(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var qz,fV=5000,YV=!1,GV,JV,GO=200,XO=12;var oH=N(()=>{pZ();tW();qz={sessionsDir(){return Qz.join(JO(),".codex","sessions")},async readdir(f){try{return await fO(f)}catch{return[]}},async readFile(f){return await cz(f)},stat:YO};GV=/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/i;JV=new WeakMap});import{homedir as DO}from"os";import{join as LO}from"path";function MO(){return LO(DO(),".codex","hooks.json")}var jV,oE,sH;var WV=N(()=>{nH();jV=[{event:"SessionStart",verb:"session-start"},{event:"UserPromptSubmit",verb:"turn-start"},{event:"Stop",verb:"turn-complete"}],oE=jV.map((f)=>f.event);sH=class sH extends eZ{vendor="codex";eventMap=jV;globalSettingsPath(){return MO()}}});function VV(f){if(!vX(f))return;let Y=vX(f.modelMetrics)?f.modelMetrics:void 0;if(!Y)return;let J=0,z=0,Z=0;for(let Q of Object.values(Y)){if(!vX(Q)||!vX(Q.usage))continue;J+=mX(Q.usage.inputTokens,0),z+=mX(Q.usage.outputTokens,0),Z+=mX(Q.usage.cacheReadTokens,0)}let G=mX(f.currentTokens,0);if(J===0&&z===0&&Z===0&&G===0)return;return{input_tokens:J,output_tokens:z,...Z>0?{cache_read_input_tokens:Z}:{},...G>0?{context_tokens:G}:{}}}function vX(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function mX(f,Y){return typeof f==="number"&&Number.isFinite(f)?f:Y}import{readdir as FO,rm as OO,stat as AO}from"fs/promises";import{homedir as RO}from"os";import FJ from"path";async function eH(f=Hz){let Y=FJ.join(f.copilotDir(),"session-state");return(await f.readdir(Y)).map((z)=>FJ.join(Y,z))}async function KV(f,Y=Hz){let J=[];for(let z of await eH(Y)){let Z=await fB(z,Y);if(Z.cwd!==f)continue;J.push({id:Z.id??FJ.basename(z),updatedAt:Z.updatedAt??""})}return J.sort((z,Z)=>z.updatedAt.localeCompare(Z.updatedAt)).map((z)=>z.id)}async function UV(f,Y=Hz){if(!f)return 0;let J=0;for(let z of await eH(Y)){if((await fB(z,Y)).cwd!==f)continue;try{let{mtimeMs:G}=await Y.stat(FJ.join(z,"events.jsonl"));if(G>J)J=G}catch{}}return J}async function gO(f,Y=Hz){let J=await CO(f,Y);if(!J)return{messages:[]};let z=await Y.readFile(FJ.join(J,"events.jsonl")).catch(()=>""),Z=bO(z,f);return{messages:Z.messages,...Z.usageMetrics?{usageMetrics:Z.usageMetrics}:{}}}async function DV(f,Y=Hz){return(await gO(f,Y)).messages}async function CO(f,Y=Hz){for(let J of await eH(Y)){if(FJ.basename(J)===f)return J;let z=await fB(J,Y);if(z.id===f||z.name?.toLowerCase()===f.toLowerCase())return J}return}async function fB(f,Y=Hz){let J=await Y.readFile(FJ.join(f,"workspace.yaml")).catch(()=>"");return NO(J)}function NO(f){let Y={};for(let J of f.split(`
32
- `)){let z=J.match(/^([A-Za-z_]+):\s*(.*)$/);if(!z)continue;let Z=z[1],G=z[2]??"";if(G.startsWith('"')&&G.endsWith('"'))G=G.slice(1,-1).replace(/\\"/g,'"');Y[Z]=G}return{id:Y.id,cwd:Y.cwd,name:Y.name,updatedAt:Y.updated_at,createdAt:Y.created_at}}function bO(f,Y){let J=[],z=new Map,Z=Y,G,Q=null;for(let q of f.split(`
33
- `)){let H=q.trim();if(!H)continue;if(!UJ(H))continue;let B;try{B=JSON.parse(H)}catch{continue}if(!tH(B)||typeof B.type!=="string")continue;let V=typeof B.timestamp==="string"?B.timestamp:new Date().toISOString(),j=tH(B.data)?B.data:{};if(B.type==="session.start"){let K=typeof j.sessionId==="string"?j.sessionId:void 0;if(K)Z=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,kO),"utf8").toString("utf8");J.push({role:"user",blocks:[{type:"text",text:K}],timestamp:V,sessionId:Z});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(!tH(M))continue;let R=typeof M.id==="string"?M.id:typeof M.toolCallId==="string"?M.toolCallId:"tool",S=typeof M.name==="string"?M.name:typeof M.toolName==="string"?M.toolName:"tool";K.push({type:"tool_call",callId:R,name:S,input:M.arguments??{}})}if(K.length>0)J.push({role:"assistant",blocks:K,timestamp:V,sessionId:Z});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);J.push({role:"assistant",blocks:[{type:"tool_result",callId:K,output:O,isError:j.success===!1}],timestamp:V,sessionId:Z});continue}if(B.type==="session.shutdown")G=VV(j)}return{messages:J,usageMetrics:G,firstUserMessage:Q}}function tH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var Hz,kO=200;var LV=N(()=>{pZ();Hz={copilotDir(){let f=process.env.COPILOT_HOME?.trim();if(f)return f;return FJ.join(RO(),".copilot")},async readdir(f){try{return await FO(f)}catch{return[]}},async readFile(f){return await cz(f)},stat:AO,async rm(f){await OO(f,{recursive:!0,force:!0})}}});function YB(f){return _1(f).createHookAdapter()}class cX{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 JB=N(()=>{OJ()});import{readFile as MV}from"fs/promises";class nX{supportsCompletionMarkers(){return!0}}function FV(f){return _1(f).createTurnDetector()}function TO(f,Y="claude",J=0){let z=null,Z=0;for(let G of f.split(`
34
- `)){Z++;let Q=OV(G);if(!Q)continue;let q=RV(Q.message)?Q.message:Q;if(q.role!=="assistant")continue;if(!("content"in q))continue;let H=AV(Q,J),B={id:`claude:${Y}:${H}:${Z}`,timestampMs:H,source:"claude"};if(!z||B.timestampMs>=z.timestampMs)z=B}return z}function uO(f,Y="codex"){let J=null,z=0;for(let Z of f.split(`
35
- `)){z++;let G=OV(Z);if(!G||G.type!=="turn.completed")continue;let Q=AV(G,0),q={id:`codex:${Y}:${Q}:${z}`,timestampMs:Q,source:"codex"};if(!J||q.timestampMs>=J.timestampMs)J=q}return J}function OV(f){let Y=f.trim();if(!Y)return null;try{let J=JSON.parse(Y);return RV(J)?J:null}catch{return null}}function AV(f,Y){let J=typeof f.timestamp==="string"?Date.parse(f.timestamp):Number.NaN;return Number.isFinite(J)?J:Y}function RV(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var SO,zB,IO,ZB,dX;var GB=N(()=>{xH();oH();OJ();SO={listSessionFiles:(f)=>_Z(f),readFile:(f)=>MV(f,"utf8")};zB=class zB extends nX{deps;vendor="claude";cache=new Map;constructor(f=SO){super();this.deps=f}async latestCompletion(f){let Y=await this.deps.listSessionFiles(f),J=null,z=new Map;for(let Z of Y.slice(0,4)){let G=this.cache.get(Z.path),Q;if(G&&Z.mtimeMs>0&&G.mtimeMs===Z.mtimeMs)Q=G.marker;else{let q=await this.deps.readFile(Z.path).catch(()=>"");Q=TO(q,Z.path,Z.mtimeMs)}if(z.set(Z.path,{mtimeMs:Z.mtimeMs,marker:Q}),Q&&(!J||Q.timestampMs>J.timestampMs))J=Q}return this.cache=z,J}};IO={findLatestRollout:(f)=>rH(f),readFile:(f)=>MV(f,"utf8")};ZB=class ZB extends nX{deps;vendor="codex";cache=null;constructor(f=IO){super();this.deps=f}async latestCompletion(f){if(!f)return null;let Y=await this.deps.findLatestRollout(f);if(!Y)return null;if(this.cache&&this.cache.path===Y.path&&Y.mtimeMs>0&&this.cache.mtimeMs===Y.mtimeMs)return this.cache.marker;let J=await this.deps.readFile(Y.path).catch(()=>"");if(!J)return null;let z=uO(J,Y.path);return this.cache={path:Y.path,mtimeMs:Y.mtimeMs,marker:z},z}};dX=class dX extends nX{vendor;constructor(f){super();this.vendor=f}supportsCompletionMarkers(){return!1}async latestCompletion(){return null}}});function vO(f){return{vendor:f,builtin:!1,displayName:f,defaultCommand:[f],history:EO,detectAccount:async()=>({binary:{found:!1,error:"custom engine: kobe has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new cX(f),createTurnDetector:()=>new dX(f)}}function _1(f){return Yf(f)?PO[f]:vO(f)}var EO,xO,wO,hO,PO;var OJ=N(()=>{$1();Jz();xH();oW();oH();WV();LV();JB();GB();EO={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async latestTranscriptMtimeForWorktree(){return 0}},xO={async listSessionIdsForWorktree(f){return[...await _Z(f)].sort((J,z)=>J.mtimeMs-z.mtimeMs).map((J)=>J.sessionId)},readHistory:(f)=>wW(f),latestTranscriptMtimeForWorktree:(f)=>xW(f)},wO={listSessionIdsForWorktree:(f)=>QV(f),readHistory:(f)=>HV(f),latestTranscriptMtimeForWorktree:(f)=>qV(f)},hO={listSessionIdsForWorktree:(f)=>KV(f),readHistory:(f)=>DV(f),latestTranscriptMtimeForWorktree:(f)=>UV(f)},PO={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:xO,detectAccount:(f)=>SX(f),createHookAdapter:()=>new dH,createTurnDetector:()=>new zB},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:wO,detectAccount:(f)=>IX(f),createHookAdapter:()=>new sH,createTurnDetector:()=>new ZB},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:hO,detectAccount:(f)=>TX(f),createHookAdapter:()=>new cX("copilot"),createTurnDetector:()=>new dX("copilot")}}});function gV(f){if(typeof f!=="string")return"";let Y=f.replace(/\s+/g," ").trim();if(Y.length===0)return"";let J=[...Y];if(J.length<=40)return Y;return`${J.slice(0,40).join("")}\u2026`}function iX(f,Y){let J=f.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,32),z=Y.slice(-6).toLowerCase();return`kobe/${J||"task"}-${z}`}function CV(f){return typeof f==="string"&&mO.includes(f)}var YG=(f)=>f,Zf="claude",mO;var RY=N(()=>{mO=["backlog","in_progress","in_review","done","canceled","error"]});function NV(f){let Y=f.find((Z)=>Z.role==="user");if(!Y)return"";let J=Y.blocks.filter((Z)=>Z.type==="text").map((Z)=>Z.text).join(" "),z=gV(J);return z.length>0?Buffer.from(z,"utf8").toString("utf8"):z}async function lz(f,Y=Zf){if(!f)return"";let{history:J}=_1(Y),z=await J.listSessionIdsForWorktree(f);for(let Z of z.slice(0,cO)){let G=NV(await J.readHistory(Z));if(G)return G}return""}async function bV(f,Y){if(!Y)return"";try{return NV(await _1(f).history.readHistory(Y))}catch{return""}}var cO=8;var lX=N(()=>{OJ();RY()});function kV(f){let Y=String(f),J=Y.length-1;return N1.context.id+(J?String.fromCharCode(96+J):"")+Y}function qB(f){N1.context=f}function nO(){return{...N1.context,id:N1.getNextContextId(),count:0}}function Bz(f,Y){let J=K1,z=i0,Z=f.length===0,G=Y===void 0?z:Y,Q=Z?{owned:null,cleanups:null,context:null,owner:null}:{owned:null,cleanups:null,context:G?G.context:null,owner:G},q=Z?()=>f(()=>{throw Error("Dispose method must be an explicit argument to createRoot function")}):()=>f(()=>d1(()=>AJ(Q)));XY.afterCreateOwner&&XY.afterCreateOwner(Q),i0=Q,K1=null;try{return Cf(q,!0)}finally{K1=J,i0=z}}function p(f,Y){Y=Y?Object.assign({},_X,Y):_X;let J={value:f,observers:null,observerSlots:null,comparator:Y.equals||void 0};{if(Y.name)J.name=Y.name;if(Y.internal)J.internal=!0;else if(wV(J),XY.afterCreateSignal)XY.afterCreateSignal(J)}let z=(Z)=>{if(typeof Z==="function")if(H0&&H0.running&&H0.sources.has(J))Z=Z(J.tValue);else Z=Z(J.value);return BB(J,Z)};return[hV.bind(J),z]}function yV(f,Y,J){let z=pz(f,Y,!0,If,J);if($z&&H0&&H0.running)n1.push(z);else jz(z)}function gY(f,Y,J){let z=pz(f,Y,!1,If,J);if($z&&H0&&H0.running)n1.push(z);else jz(z)}function Z1(f,Y,J){xV=fA;let z=pz(f,Y,!1,If,J),Z=ZG&&Tf(ZG);if(Z)z.suspense=Z;if(!J||!J.render)z.user=!0;jf?jf.push(z):jz(z)}function K0(f,Y,J){J=J?Object.assign({},_X,J):_X;let z=pz(f,Y,!0,0,J);if(z.observers=null,z.observerSlots=null,z.comparator=J.equals||void 0,$z&&H0&&H0.running)z.tState=If,n1.push(z);else jz(z);return hV.bind(z)}function pO(f){return f&&typeof f==="object"&&"then"in f}function tX(f,Y,J){let z,Z,G;if(typeof Y==="function")z=f,Z=Y,G=J||{};else z=!0,Z=f,G=Y||{};let Q=null,q=XB,H=null,B=!1,V=!1,j="initialValue"in G,K=typeof z==="function"&&K0(z),L=new Set,[O,M]=(G.storage||p)(G.initialValue),[R,S]=p(void 0),[a,b]=p(void 0,{equals:!1}),[g,C]=p(j?"ready":"unresolved");if(N1.context){if(H=N1.getNextContextId(),G.ssrLoadFrom==="initial")q=G.initialValue;else if(N1.load&&N1.has(H))q=N1.load(H)}function y(T,B0,_,D0){if(Q===T){if(Q=null,D0!==void 0&&(j=!0),(T===q||B0===q)&&G.onHydrated)queueMicrotask(()=>G.onHydrated(D0,{value:B0}));if(q=XB,H0&&T&&B)H0.promises.delete(T),B=!1,Cf(()=>{H0.running=!0,r(B0,_)},!1);else r(B0,_)}return B0}function r(T,B0){Cf(()=>{if(B0===void 0)M(()=>T);C(B0!==void 0?"errored":j?"ready":"unresolved"),S(B0);for(let _ of L.keys())_.decrement();L.clear()},!1)}function z0(){let T=ZG&&Tf(ZG),B0=O(),_=R();if(_!==void 0&&!Q)throw _;if(K1&&!K1.user&&T)yV(()=>{if(a(),Q){if(T.resolved&&H0&&B)H0.promises.add(Q);else if(!L.has(T))T.increment(),L.add(T)}});return B0}function t(T=!0){if(T!==!1&&V)return;V=!1;let B0=K?K():z;if(B=H0&&H0.running,B0==null||B0===!1){y(Q,d1(O));return}if(H0&&Q)H0.promises.delete(Q);let _,D0=q!==XB?q:d1(()=>{try{return Z(B0,{value:O(),refetching:T})}catch(R0){_=R0}});if(_!==void 0){y(Q,void 0,pX(_),B0);return}else if(!pO(D0))return y(Q,D0,void 0,B0),D0;if(Q=D0,"v"in D0){if(D0.s===1)y(Q,D0.v,void 0,B0);else y(Q,void 0,pX(D0.v),B0);return D0}return V=!0,queueMicrotask(()=>V=!1),Cf(()=>{C(j?"refreshing":"pending"),b()},!1),D0.then((R0)=>y(D0,R0,void 0,B0),(R0)=>y(D0,void 0,pX(R0),B0))}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 J0=i0;if(K)yV(()=>(J0=i0,t(!1)));else t(!1);return[z0,{refetch:(T)=>rO(J0,()=>t(T)),mutate:M}]}function eX(f){return Cf(f,!1)}function d1(f){if(!az&&K1===null)return f();let Y=K1;K1=null;try{if(az)return az.untrack(f);return f()}finally{K1=Y}}function Nf(f,Y,J){let z=Array.isArray(f),Z,G=J&&J.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(G)return G=!1,Q;let H=d1(()=>Y(q,Z,Q));return Z=q,H}}function r1(f){Z1(()=>d1(f))}function b1(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 _O(f,Y){if(JG||(JG=Symbol("error")),i0=pz(void 0,void 0,!0),i0.context={...i0.context,[JG]:[Y]},H0&&H0.running)H0.sources.add(i0);try{return f()}catch(J){XG(J)}finally{i0=i0.owner}}function fQ(){return K1}function rO(f,Y){let J=i0,z=K1;i0=f,K1=null;try{return Cf(Y,!0)}catch(Z){XG(Z)}finally{i0=J,K1=z}}function oO(f){if(H0&&H0.running)return f(),H0.done;let Y=K1,J=i0;return Promise.resolve().then(()=>{K1=Y,i0=J;let z;if($z||ZG)z=H0||(H0={sources:new Set,effects:[],promises:new Set,disposed:new Set,queue:new Set,running:!0}),z.done||(z.done=new Promise((Z)=>z.resolve=Z)),z.running=!0;return Cf(f,!1),K1=i0=null,z?z.done:void 0})}function IV(f,Y){let J=pz(()=>d1(()=>{return Object.assign(f,{[aO]:!0}),f(Y)}),void 0,!0,0);return J.props=Y,J.observers=null,J.observerSlots=null,J.name=f.name,J.component=f,jz(J),J.tValue!==void 0?J.tValue:J.value}function wV(f){if(i0){if(i0.sourceMap)i0.sourceMap.push(f);else i0.sourceMap=[f];f.graph=i0}if(XY.afterRegisterGraph)XY.afterRegisterGraph(f)}function CY(f,Y){let J=Symbol("context");return{id:J,Provider:YA(J,Y),defaultValue:f}}function Tf(f){let Y;return i0&&i0.context&&(Y=i0.context[f.id])!==void 0?Y:f.defaultValue}function sO(f){let Y=K0(f),J=K0(()=>HB(Y()),void 0,{name:"children"});return J.toArray=()=>{let z=J();return Array.isArray(z)?z:z!=null?[z]:[]},J}function hV(){let f=H0&&H0.running;if(this.sources&&(f?this.tState:this.state))if((f?this.tState:this.state)===If)jz(this);else{let Y=n1;n1=null,Cf(()=>rX(this),!1),n1=Y}if(K1){let Y=this.observers;if(!Y||Y[Y.length-1]!==K1){let J=Y?Y.length:0;if(!K1.sources)K1.sources=[this],K1.sourceSlots=[J];else K1.sources.push(this),K1.sourceSlots.push(J);if(!Y)this.observers=[K1],this.observerSlots=[K1.sources.length-1];else Y.push(K1),this.observerSlots.push(K1.sources.length-1)}}if(f&&H0.sources.has(this))return this.tValue;return this.value}function BB(f,Y,J){let z=H0&&H0.running&&H0.sources.has(f)?f.tValue:f.value;if(!f.comparator||!f.comparator(z,Y)){if(H0){let Z=H0.running;if(Z||!J&&H0.sources.has(f))H0.sources.add(f),f.tValue=Y;if(!Z)f.value=Y}else f.value=Y;if(f.observers&&f.observers.length)Cf(()=>{for(let Z=0;Z<f.observers.length;Z+=1){let G=f.observers[Z],Q=H0&&H0.running;if(Q&&H0.disposed.has(G))continue;if(Q?!G.tState:!G.state){if(G.pure)n1.push(G);else jf.push(G);if(G.observers)vV(G)}if(!Q)G.state=If;else G.tState=If}if(n1.length>1e6){if(n1=[],dO)throw Error("Potential Infinite Loop Detected.");throw Error()}},!1)}return Y}function jz(f){if(!f.fn)return;AJ(f);let Y=sX;if(TV(f,H0&&H0.running&&H0.sources.has(f)?f.tValue:f.value,Y),H0&&!H0.running&&H0.sources.has(f))queueMicrotask(()=>{Cf(()=>{H0&&(H0.running=!0),K1=i0=f,TV(f,f.tValue,Y),K1=i0=null},!1)})}function TV(f,Y,J){let z,Z=i0,G=K1;K1=i0=f;try{z=f.fn(Y)}catch(Q){if(f.pure)if(H0&&H0.running)f.tState=If,f.tOwned&&f.tOwned.forEach(AJ),f.tOwned=void 0;else f.state=If,f.owned&&f.owned.forEach(AJ),f.owned=null;return f.updatedAt=J+1,XG(Q)}finally{K1=G,i0=Z}if(!f.updatedAt||f.updatedAt<=J){if(f.updatedAt!=null&&"observers"in f)BB(f,z,!0);else if(H0&&H0.running&&f.pure){if(!H0.sources.has(f))f.value=z;H0.sources.add(f),f.tValue=z}else f.value=z;f.updatedAt=J}}function pz(f,Y,J,z=If,Z){let G={fn:f,state:z,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:Y,owner:i0,context:i0?i0.context:null,pure:J};if(H0&&H0.running)G.state=0,G.tState=z;if(i0===null)console.warn("computations created outside a `createRoot` or `render` will never be disposed");else if(i0!==$O)if(H0&&H0.running&&i0.pure)if(!i0.tOwned)i0.tOwned=[G];else i0.tOwned.push(G);else if(!i0.owned)i0.owned=[G];else i0.owned.push(G);if(Z&&Z.name)G.name=Z.name;if(az&&G.fn){let Q=G.fn,[q,H]=p(void 0,{equals:!1}),B=az.factory(Q,H);b1(()=>B.dispose());let V,j=()=>oO(H).then(()=>{if(V)V.dispose(),V=void 0});G.fn=(K)=>{if(q(),H0&&H0.running){if(!V)V=az.factory(Q,j);return V.track(K)}return B.track(K)}}return XY.afterCreateOwner&&XY.afterCreateOwner(G),G}function GG(f){let Y=H0&&H0.running;if((Y?f.tState:f.state)===0)return;if((Y?f.tState:f.state)===zG)return rX(f);if(f.suspense&&d1(f.suspense.inFallback))return f.suspense.effects.push(f);let J=[f];while((f=f.owner)&&(!f.updatedAt||f.updatedAt<sX)){if(Y&&H0.disposed.has(f))return;if(Y?f.tState:f.state)J.push(f)}for(let z=J.length-1;z>=0;z--){if(f=J[z],Y){let Z=f,G=J[z+1];while((Z=Z.owner)&&Z!==G)if(H0.disposed.has(Z))return}if((Y?f.tState:f.state)===If)jz(f);else if((Y?f.tState:f.state)===zG){let Z=n1;n1=null,Cf(()=>rX(f,J[0]),!1),n1=Z}}}function Cf(f,Y){if(n1)return f();let J=!1;if(!Y)n1=[];if(jf)J=!0;else jf=[];sX++;try{let z=f();return tO(J),z}catch(z){if(!J)jf=null;n1=null,XG(z)}}function tO(f){if(n1){if($z&&H0&&H0.running)eO(n1);else PV(n1);n1=null}if(f)return;let Y;if(H0){if(!H0.promises.size&&!H0.queue.size){let{sources:z,disposed:Z}=H0;jf.push.apply(jf,H0.effects),Y=H0.resolve;for(let G of jf)"tState"in G&&(G.state=G.tState),delete G.tState;H0=null,Cf(()=>{for(let G of Z)AJ(G);for(let G of z){if(G.value=G.tValue,G.owned)for(let Q=0,q=G.owned.length;Q<q;Q++)AJ(G.owned[Q]);if(G.tOwned)G.owned=G.tOwned;delete G.tValue,delete G.tOwned,G.tState=0}SV(!1)},!1)}else if(H0.running){H0.running=!1,H0.effects.push.apply(H0.effects,jf),jf=null,SV(!0);return}}let J=jf;if(jf=null,J.length)Cf(()=>xV(J),!1);else XY.afterUpdate&&XY.afterUpdate();if(Y)Y()}function PV(f){for(let Y=0;Y<f.length;Y++)GG(f[Y])}function eO(f){for(let Y=0;Y<f.length;Y++){let J=f[Y],z=H0.queue;if(!z.has(J))z.add(J),$z(()=>{z.delete(J),Cf(()=>{H0.running=!0,GG(J)},!1),H0&&(H0.running=!1)})}}function fA(f){let Y,J=0;for(Y=0;Y<f.length;Y++){let z=f[Y];if(!z.user)GG(z);else f[J++]=z}if(N1.context){if(N1.count){N1.effects||(N1.effects=[]),N1.effects.push(...f.slice(0,J));return}qB()}if(N1.effects&&(N1.done||!N1.count))f=[...N1.effects,...f],J+=N1.effects.length,delete N1.effects;for(Y=0;Y<J;Y++)GG(f[Y])}function rX(f,Y){let J=H0&&H0.running;if(J)f.tState=0;else f.state=0;for(let z=0;z<f.sources.length;z+=1){let Z=f.sources[z];if(Z.sources){let G=J?Z.tState:Z.state;if(G===If){if(Z!==Y&&(!Z.updatedAt||Z.updatedAt<sX))GG(Z)}else if(G===zG)rX(Z,Y)}}}function vV(f){let Y=H0&&H0.running;for(let J=0;J<f.observers.length;J+=1){let z=f.observers[J];if(Y?!z.tState:!z.state){if(Y)z.tState=zG;else z.state=zG;if(z.pure)n1.push(z);else jf.push(z);z.observers&&vV(z)}}}function AJ(f){let Y;if(f.sources)while(f.sources.length){let J=f.sources.pop(),z=f.sourceSlots.pop(),Z=J.observers;if(Z&&Z.length){let G=Z.pop(),Q=J.observerSlots.pop();if(z<Z.length)G.sourceSlots[Q]=z,Z[z]=G,J.observerSlots[z]=Q}}if(f.tOwned){for(Y=f.tOwned.length-1;Y>=0;Y--)AJ(f.tOwned[Y]);delete f.tOwned}if(H0&&H0.running&&f.pure)mV(f,!0);else if(f.owned){for(Y=f.owned.length-1;Y>=0;Y--)AJ(f.owned[Y]);f.owned=null}if(f.cleanups){for(Y=f.cleanups.length-1;Y>=0;Y--)f.cleanups[Y]();f.cleanups=null}if(H0&&H0.running)f.tState=0;else f.state=0;delete f.sourceMap}function mV(f,Y){if(!Y)f.tState=0,H0.disposed.add(f);if(f.owned)for(let J=0;J<f.owned.length;J++)mV(f.owned[J])}function pX(f){if(f instanceof Error)return f;return Error(typeof f==="string"?f:"Unknown error",{cause:f})}function uV(f,Y,J){try{for(let z of Y)z(f)}catch(z){XG(z,J&&J.owner||null)}}function XG(f,Y=i0){let J=JG&&Y&&Y.context&&Y.context[JG],z=pX(f);if(!J)throw z;if(jf)jf.push({fn(){uV(z,J,Y)},state:If});else uV(z,J,Y)}function HB(f){if(typeof f==="function"&&!f.length)return HB(f());if(Array.isArray(f)){let Y=[];for(let J=0;J<f.length;J++){let z=HB(f[J]);if(Array.isArray(z))if(z.length<32768)Y.push.apply(Y,z);else for(let Z=0;Z<z.length;Z++)Y.push(z[Z]);else Y.push(z)}return Y}return f}function YA(f,Y){return function(z){let Z;return gY(()=>Z=d1(()=>{return i0.context={...i0.context,[f]:z.value},sO(()=>z.children)}),void 0,Y),Z}}function EV(f){for(let Y=0;Y<f.length;Y++)f[Y]()}function zA(f,Y,J={}){let z=[],Z=[],G=[],Q=0,q=Y.length>1?[]:null;return b1(()=>EV(G)),()=>{let H=f()||[],B=H.length,V,j;return H[oX],d1(()=>{let L,O,M,R,S,a,b,g,C;if(B===0){if(Q!==0)EV(G),G=[],z=[],Z=[],Q=0,q&&(q=[]);if(J.fallback)z=[JA],Z[0]=Bz((y)=>{return G[0]=y,J.fallback()}),Q=1}else if(Q===0){Z=Array(B);for(j=0;j<B;j++)z[j]=H[j],Z[j]=Bz(K);Q=B}else{M=Array(B),R=Array(B),q&&(S=Array(B));for(a=0,b=Math.min(Q,B);a<b&&z[a]===H[a];a++);for(b=Q-1,g=B-1;b>=a&&g>=a&&z[b]===H[g];b--,g--)M[g]=Z[b],R[g]=G[b],q&&(S[g]=q[b]);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<=b;V++)if(C=z[V],j=L.get(C),j!==void 0&&j!==-1)M[j]=Z[V],R[j]=G[V],q&&(S[j]=q[V]),j=O[j],L.set(C,j);else G[V]();for(j=a;j<B;j++)if(j in M){if(Z[j]=M[j],G[j]=R[j],q)q[j]=S[j],q[j](j)}else Z[j]=Bz(K);Z=Z.slice(0,Q=B),z=H.slice(0)}return Z});function K(L){if(G[j]=L,q){let[O,M]=p(j,{name:"index"});return q[j]=M,Y(H[j],O)}return Y(H[j])}}}function cV(f,Y){if(ZA){if(N1.context){let J=N1.context;qB(nO());let z=IV(f,Y||{});return qB(J),z}}return IV(f,Y||{})}function aX(){return!0}function QB(f){return!(f=typeof f==="function"?f():f)?{}:f}function XA(){for(let f=0,Y=this.length;f<Y;++f){let J=this[f]();if(J!==void 0)return J}}function YQ(...f){let Y=!1;for(let Q=0;Q<f.length;Q++){let q=f[Q];Y=Y||!!q&&GY in q,f[Q]=typeof q==="function"?(Y=!0,K0(q)):q}if(lO&&Y)return new Proxy({get(Q){for(let q=f.length-1;q>=0;q--){let H=QB(f[q])[Q];if(H!==void 0)return H}},has(Q){for(let q=f.length-1;q>=0;q--)if(Q in QB(f[q]))return!0;return!1},keys(){let Q=[];for(let q=0;q<f.length;q++)Q.push(...Object.keys(QB(f[q])));return[...new Set(Q)]}},GA);let J={},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:XA.bind(J[V]=[j.get.bind(q)])}:j.value!==void 0?j:void 0;else{let K=J[V];if(K){if(j.get)K.push(j.get.bind(q));else if(j.value!==void 0)K.push(()=>j.value)}}}}let Z={},G=Object.keys(z);for(let Q=G.length-1;Q>=0;Q--){let q=G[Q],H=z[q];if(H&&H.get)Object.defineProperty(Z,q,H);else Z[q]=H?H.value:void 0}return Z}function X1(f){let Y="fallback"in f&&{fallback:()=>f.fallback};return K0(zA(()=>f.each,f.children,Y||void 0),void 0,{name:"value"})}function G0(f){let Y=f.keyed,J=K0(()=>f.when,void 0,{name:"condition value"}),z=Y?J:K0(J,void 0,{equals:(Z,G)=>!Z===!G,name:"condition"});return K0(()=>{let Z=z();if(Z){let G=f.children;return typeof G==="function"&&G.length>0?d1(()=>G(Y?Z:()=>{if(!d1(z))throw QA("Show");return J()})):G}return f.fallback},void 0,{name:"value"})}function nV(f){let Y;if(N1.context&&N1.load)Y=N1.load(N1.getContextId());let[J,z]=p(Y,{name:"errored"});return $X||($X=new Set),$X.add(z),b1(()=>$X.delete(z)),K0(()=>{let Z;if(Z=J()){let G=f.fallback;if(typeof G!=="function"||G.length==0)console.error(Z);return typeof G==="function"&&G.length?d1(()=>G(Z,()=>z())):G}return _O(()=>f.children,z)},void 0,{name:"value"})}var N1,dO=!0,iO=(f,Y)=>f===Y,GY,lO,oX,aO,_X,JG=null,xV,If=1,zG=2,$O,XB,i0=null,H0=null,$z=null,az=null,K1=null,n1=null,jf=null,sX=0,XY,Rx,SV,ZG,JA,ZA=!1,GA,QA=(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.`,$X,dV;var B1=N(()=>{N1={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return kV(this.context.count)},getNextContextId(){return kV(this.context.count++)}};GY=Symbol("solid-proxy"),lO=typeof Proxy==="function",oX=Symbol("solid-track"),aO=Symbol("solid-dev-component"),_X={equals:iO},xV=PV,$O={},XB={},XY={afterUpdate:null,afterCreateOwner:null,afterCreateSignal:null,afterRegisterGraph:null};[Rx,SV]=p(!1);JA=Symbol("fallback");GA={get(f,Y,J){if(Y===GY)return J;return f.get(Y)},has(f,Y){if(Y===GY)return!0;return f.has(Y)},set:aX,deleteProperty:aX,getOwnPropertyDescriptor(f,Y){return{configurable:!0,enumerable:!0,get(){return f.get(Y)},set:aX,deleteProperty:aX}},ownKeys(f){return f.keys()}};dV={hooks:XY,writeSignal:BB,registerGraph:wV};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.")});import{spawn as qA}from"child_process";function jB(f,Y,J,z){if(J)return f+z.slowRetryMs;return Y+Math.max(z.minIntervalMs,(Y-f)*5)}function WB(f,Y){return!f.inFlight&&Y>=f.nextAllowedAt}function iV(f,Y,J=Math.random){let z=Math.max(0,Math.min(1,Y)),Z=(J()*2-1)*f*z;return Math.max(0,f+Z)}function lV(f,Y,J){if(Y<=0)return Math.min(f,J);return Math.min(f*2**Y,J)}function JQ(f,Y,J,z){let Z=Date.now();if(!WB(f,Z))return!1;f.inFlight=!0;let G=new AbortController,Q=setTimeout(()=>G.abort(),Y.timeoutMs);return(async()=>{let q,H=!1;try{q=await J(G.signal),H=!0}catch{}clearTimeout(Q);let B=G.signal.aborted;if(f.nextAllowedAt=jB(Z,Date.now(),B,Y),f.inFlight=!1,H&&!B)z(q)})(),!0}function sY(f,Y,J){return new Promise((z)=>{let Z="",G=!1,Q=(H)=>{if(G)return;G=!0,z({status:H,stdout:Z})},q=qA(f,Y.slice(),{cwd:J.cwd,stdio:["ignore","pipe","ignore"],env:J.env,signal:J.signal,killSignal:"SIGKILL"});q.stdout?.on("data",(H)=>{Z+=String(H)}),q.on("error",()=>Q(null)),q.on("close",(H)=>Q(H))})}var QG=()=>{};function HA(f,Y){switch((f??"").toUpperCase()){case"MERGED":return"merged";case"CLOSED":return"closed";case"OPEN":return(Y??"").toUpperCase()==="APPROVED"?"ready_to_merge":"open";default:return"unknown"}}function BA(f){let Y=(f.status??"").toUpperCase(),J=(f.conclusion??"").toUpperCase(),z=(f.state??"").toUpperCase();if(Y&&Y!=="COMPLETED")return"pending";if(J){if(J==="SUCCESS"||J==="NEUTRAL"||J==="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 jA(f){if(!f||f.length===0)return"none";let Y=!1,J=!1;for(let z of f){let Z=BA(z);if(Z==="failing")return"failing";if(Z==="pending")Y=!0;else if(Z==="passing")J=!0}if(Y)return"pending";if(J)return"passing";return"unknown"}function $V(f,Y){if(!f||typeof f.number!=="number")return null;return{provider:"github",lifecycle:HA(f.state,f.reviewDecision),checkState:jA(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:Y}}function ZQ(f,Y){if(f===Y)return!0;if(!f||!Y)return!1;return f.provider===Y.provider&&f.lifecycle===Y.lifecycle&&f.checkState===Y.checkState&&f.number===Y.number&&f.url===Y.url&&f.title===Y.title&&f.baseRef===Y.baseRef&&f.headRef===Y.headRef&&f.reviewDecision===Y.reviewDecision&&f.mergeable===Y.mergeable}function zQ(f,Y){return Y.some((J)=>f.includes(J))}function VB(f){if(f.parseError)return{kind:"error",error:"parse"};if(f.timedOut)return{kind:"error",error:"timeout"};if(f.spawnError)return{kind:"error",error:"missing-binary"};let Y=(f.stderr??"").toLowerCase();if(zQ(Y,UA))return{kind:"empty"};if(zQ(Y,WA))return{kind:"error",error:"no-remote"};if(zQ(Y,VA))return{kind:"error",error:"auth"};if(zQ(Y,KA))return{kind:"error",error:"network"};return{kind:"empty"}}function qG(f,Y,J,z,Z=Math.random){let G=(q)=>J+iV(q,z.jitterRatio,Z);if(f.kind==="pr")return{nextAllowedAt:G(f.settled?z.settledMs:z.tickMs),failures:0};if(f.kind==="empty")return{nextAllowedAt:G(z.noPrMs),failures:0};if(f.error==="no-remote")return{nextAllowedAt:G(z.noRemoteMs),failures:0};let Q=Y+1;return{nextAllowedAt:G(lV(z.failureBaseMs,Q-1,z.failureCapMs)),failures:Q}}var aV="number,url,title,state,baseRefName,headRefName,reviewDecision,mergeable,statusCheckRollup",WA,VA,KA,UA;var KB=N(()=>{QG();WA=["none of the git remotes","no git remote","to use github cli in a github repository","not a github repository"],VA=["gh auth login","authentication required","not logged in","http 401","bad credentials","requires authentication"],KA=["could not resolve host","no such host","dial tcp","connection refused","connection reset","network is unreachable","i/o timeout","timeout","tls handshake","http 5","rate limit","try again"],UA=["no pull requests found","no open pull requests","no pull request found"]});var UB,DB,LB,MB="DIRTY_WORKTREE",FB,OB;var AB=N(()=>{UB=class UB extends Error{from;to;taskId;constructor(f,Y,J){super(`illegal transition for task ${J}: ${f} -> ${Y}`);this.from=f;this.to=Y;this.taskId=J;this.name="IllegalTransitionError"}};DB=class DB extends Error{constructor(f){super(`task not found: ${f}`);this.name="TaskNotFoundError"}};LB=class LB extends Error{constructor(){super("cannot delete a main task; remove the repo from saved repos instead");this.name="CannotDeleteMainTaskError"}};FB=class FB extends Error{taskId;constructor(f){super(`${MB}: task ${f} worktree has uncommitted or untracked changes`);this.taskId=f;this.name="DirtyWorktreeError"}};OB=class OB extends Error{taskId;cause;constructor(f,Y){super(`failed to remove worktree for task ${f}: ${Y instanceof Error?Y.message:String(Y)}`);this.taskId=f;this.cause=Y;this.name="WorktreeRemoveFailedError"}}});var pV;var _V=N(()=>{pV=["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 rV(f){let Y=f.auth,J=Y.kind==="key"?{kind:"key",keyPath:Y.keyPath}:{kind:"password",getPassword:()=>UX(Y.keychainRef)};return{host:f.host,user:f.user,port:f.port,auth:J,controlPath:BX(f.host,f.user,f.port)}}function _z(f){let Y=dY(f);if(!Y)return new KX;return new Pz(rV(Y))}function tY(f){for(let Y of Object.values(gH()))if(f===Y.basePath||f.startsWith(`${Y.basePath}/`))return new Pz(rV(Y));return new KX}function oV(f){return f&&zf(f)?f:void 0}function GQ(f){let Y=tY(f);return Y.isRemote||Y.existsSync(f)}function T1(f){return tY(f).isRemote?OY():f}var QY=N(()=>{i1();A1();KH();LH()});import{createHash as DA}from"crypto";import tV from"fs";import uf from"path";function eV(f){if(!uf.isAbsolute(f))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${f}`);return uf.join(Jf(),LA,RA(f))}function f7(f){if(!uf.isAbsolute(f))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${f}`);return[eV(f),...OA.map((Y)=>uf.join(f,Y))]}function Y7(f,Y){if(!Y||/[/\\\0]/.test(Y))throw Error(`worktreePathFor: invalid slug: ${JSON.stringify(Y)}`);return uf.join(eV(f),Y)}async function J7(f){if(zf(f)){let J=dY(f)?.basePath;if(!J)return[];return _z(f).readdir(Z7(J))}let Y=new Set;for(let J of f7(f))try{for(let z of tV.readdirSync(J,{withFileTypes:!0}))if(z.isDirectory())Y.add(z.name)}catch{}return[...Y]}function RB(f,Y){if(!uf.isAbsolute(f)||!uf.isAbsolute(Y))return null;let J=sV(Y);for(let z of f7(f)){let Z=sV(z),G=uf.relative(Z,J);if(G!==""&&!G.startsWith("..")&&!uf.isAbsolute(G))return z}return null}function z7(f,Y){return RB(f,Y)!==null}function Z7(f){return`${AA(f)}/.kobe/worktrees`}function G7(f,Y){if(!Y||/[/\\\0]/.test(Y))throw Error(`remoteWorktreePathFor: invalid slug: ${JSON.stringify(Y)}`);return`${Z7(f)}/${Y}`}function AA(f){return f.length>1&&f.endsWith("/")?f.replace(/\/+$/,""):f}function sV(f){try{return tV.realpathSync(f)}catch{return uf.resolve(f)}}function RA(f){let J=(uf.basename(f)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",z=DA("sha1").update(uf.resolve(f)).digest("hex").slice(0,12);return`${J}-${z}`}var LA="worktrees",MA=".kobe/worktrees",FA=".claude/worktrees",OA;var gB=N(()=>{i1();QY();A1();OA=[MA,FA]});class CB{activeSlugs;random;pool;pendingByRepo=new Map;chain=Promise.resolve();constructor(f,Y={}){this.activeSlugs=f;if(this.random=Y.random??Math.random,this.pool=Y.pool??pV,this.pool.length===0)throw Error("SlugAllocator: animal pool cannot be empty")}async allocate(f){let Y=this.chain,J;this.chain=new Promise((z)=>{J=z}),await Y;try{return await this.pickLocked(f)}finally{J()}}commit(f,Y){this.deletePending(f,Y)}cancel(f,Y){this.deletePending(f,Y)}async pickLocked(f){let Y=await this.occupiedSlugs(f),J=this.pool.filter((Z)=>!Y.has(Z));if(J.length>0){let Z=J[Math.floor(this.random()*J.length)];return this.addPending(f,Z),Z}let z=this.pool[Math.floor(this.random()*this.pool.length)];for(let Z=2;;Z++){let G=`${z}-v${Z}`;if(!Y.has(G))return this.addPending(f,G),G}}async occupiedSlugs(f){let Y=new Set(this.pendingByRepo.get(f)??[]);for(let J of this.activeSlugs(f))if(J)Y.add(J);for(let J of await J7(f))Y.add(J);return Y}addPending(f,Y){let J=this.pendingByRepo.get(f);if(!J)J=new Set,this.pendingByRepo.set(f,J);J.add(Y)}deletePending(f,Y){let J=this.pendingByRepo.get(f);if(!J)return;if(J.delete(Y),J.size===0)this.pendingByRepo.delete(f)}}var X7=N(()=>{_V();gB()});var q7={};H1(q7,{PLACEHOLDER_TASK_TITLE:()=>NY,Orchestrator:()=>XQ});import{realpathSync as gA}from"fs";import{basename as CA,resolve as NA}from"path";function Q7(f){return dY(f)?.basePath??f}class XQ{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 CB((G)=>this.store.list().filter((Q)=>Q.repo===G&&Q.kind!=="main").map((Q)=>{return Q.worktreePath.match(/([^/\\]+)[/\\]*$/)?.[1]??""}).filter((Q)=>Q.length>0));let[Y,J]=p(this.store.list());this.tasksAcc=Y,this.setTasks=(G)=>J(()=>G);let[z,Z]=p(null);this.activeTaskAcc=z,this.setActiveTaskSig=(G)=>Z(()=>G),this.unsubscribeStore=this.store.subscribe((G)=>{this.setTasks(G.slice())})}async init(){}activeTaskSignal(){return this.activeTaskAcc}async setActiveTask(f){let Y=f===null?null:String(f);if(this.setActiveTaskSig(Y),Y&&this.store.get(Y))await this.store.update(Y,{})}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 Y=(f.title??NY).trim()||NY,J=await this.store.create({repo:f.repo,title:Y,branch:f.branch??"",worktreePath:"",status:"backlog",kind:"task",vendor:f.vendor??Zf,...f.modelEffort?{modelEffort:f.modelEffort}:{}});if(f.baseRef)this.pendingBaseRefs.set(J.id,f.baseRef);return J}async ensureMainTask(f){let{repo:Y,key:J}=HG(f),z=this.store.list().find((Q)=>Q.kind==="main"&&HG(Q.repo).key===J);if(z)return z;let Z=this.mainTaskLocks.get(J);if(Z)return Z;let G=(async()=>{return await this.store.create({repo:Y,title:bA(Y),branch:"",worktreePath:Q7(Y),status:"backlog",kind:"main",vendor:Zf})})();this.mainTaskLocks.set(J,G);try{return await G}finally{this.mainTaskLocks.delete(J)}}async ensureWorktree(f){let Y=this.requireTask(f);if(Y.kind==="main")return Q7(Y.repo);if(Y.worktreePath)return Y.worktreePath;let J=this.worktreeLocks.get(Y.id);if(J)return J;let z=this.createWorktree(Y);this.worktreeLocks.set(Y.id,z);try{return await z}finally{this.worktreeLocks.delete(Y.id)}}async createWorktree(f){let Y=await this.slugs.allocate(f.repo),J=f.branch||iX(f.title,f.id),z=this.pendingBaseRefs.get(f.id),Z;try{Z=await this.worktrees.createForTask({repo:f.repo,slug:Y,branch:J,baseRef:z})}catch(G){throw this.slugs.cancel(f.repo,Y),G}try{await this.store.update(f.id,{worktreePath:Z.path,branch:J})}catch(G){throw await this.rollbackWorktree(Z.path),this.slugs.cancel(f.repo,Y),G}return this.slugs.commit(f.repo,Y),this.pendingBaseRefs.delete(f.id),Z.path}async rollbackWorktree(f){try{await this.worktrees.remove(f,{force:!0})}catch(Y){console.error(`[kobe] ensureWorktree rollback failed for ${f}:`,Y)}}async setTitle(f,Y){let J=Y.trim();if(!J)throw Error("setTitle: title is required (empty or whitespace-only rejected)");let z=this.requireTask(f);if(z.title===J)return;await this.store.update(z.id,{title:J}),await this.followBranchToTitle(z,J)}async followBranchToTitle(f,Y){if(f.kind==="main"||!f.worktreePath)return;if(f.branch!==iX(NY,f.id))return;let J=iX(Y,f.id);if(J===f.branch)return;try{await this.setBranch(f.id,J)}catch(z){console.error(`[kobe] follow-branch-to-title failed for ${f.id}:`,z)}}async setBranch(f,Y){let J=Y.trim();if(!J)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===J)return;if(z.worktreePath)await this.worktrees.renameBranch(z.worktreePath,z.branch,J);await this.store.update(z.id,{branch:J})}async setVendor(f,Y){let J=this.requireTask(f);if(J.vendor===Y)return;await this.store.update(J.id,{vendor:Y})}async setPinned(f,Y){let J=this.requireTask(f);if(J.kind==="main")return;let z=Y??!J.pinned;if((J.pinned??!1)===z)return;await this.store.update(J.id,{pinned:z})}async moveTask(f,Y){let J=this.requireTask(f);if(J.kind==="main")return;let z=this.store.list().filter((Z)=>(Z.kind??"task")!=="main"&&Z.archived===J.archived&&(Z.pinned??!1)===(J.pinned??!1)).map((Z)=>String(Z.id));await this.store.move(J.id,Y,z)}async setArchived(f,Y){let J=this.requireTask(f);if(J.kind==="main")return;let z=Y??!J.archived;if(J.archived===z)return;await this.store.update(J.id,{archived:z})}async reorderTasks(f){if(f.length===0)return;for(let Y of f){if(this.requireTask(Y.taskId).kind==="main")throw Error(`cannot reorder a main task: ${Y.taskId}`);if(!Number.isFinite(Y.position))throw Error(`position must be a finite number: ${Y.taskId}`)}await this.store.reorder(f.map((Y)=>({id:Y.taskId,position:Y.position})))}async setStatus(f,Y){let J=this.requireTask(f);if(J.status===Y)return;if(J.status==="done"&&Y==="error"||J.status==="error"&&Y==="done")throw new UB(J.status,Y,J.id);await this.store.update(J.id,{status:Y})}async setPRStatus(f,Y){let J=this.requireTask(f);if(ZQ(J.prStatus,Y??void 0))return;await this.store.update(J.id,{prStatus:Y??void 0})}async deleteTask(f,Y){let J=this.store.get(f);if(!J)return;if(J.kind==="main")throw new LB;let z=Y?.force===!0;if(J.worktreePath){if(!z){let Z=!1;try{Z=await this.worktrees.isDirty(J.worktreePath)}catch{}if(Z)throw new FB(J.id)}try{await this.worktrees.remove(J.worktreePath,{force:z})}catch(Z){throw new OB(J.id,Z)}}await this.store.remove(J.id),this.pendingBaseRefs.delete(J.id),this.worktreeLocks.delete(J.id)}async forgetProject(f){if(!f)throw Error("forgetProject: repo is required");let Y=HG(f).key;for(let J of Of())if(HG(J).key===Y)AH(J);for(let J of this.store.list()){if(J.kind!=="main")continue;if(HG(J.repo).key!==Y)continue;await this.store.remove(J.id),this.pendingBaseRefs.delete(J.id),this.worktreeLocks.delete(J.id)}}async discoverAdoptableWorktrees(f){if(!f)throw Error("discoverAdoptableWorktrees: repo is required");let Y=await this.worktrees.listAll(f),J=new Set(this.store.list().filter((z)=>z.worktreePath).map((z)=>rz(z.worktreePath)));return Y.filter((z)=>!J.has(rz(z.path)))}async adoptWorktree(f){if(!f.repo)throw Error("adoptWorktree: repo is required");if(!f.worktreePath)throw Error("adoptWorktree: worktreePath is required");let Y=rz(f.worktreePath),J=this.adoptLocks.get(Y);if(J)return J;let z=this.adoptWorktreeLocked(f,Y);this.adoptLocks.set(Y,z);try{return await z}finally{this.adoptLocks.delete(Y)}}async adoptWorktreeLocked(f,Y){let J=this.store.list().find((q)=>q.worktreePath&&rz(q.worktreePath)===Y);if(J){if(f.ifExists==="return")return J;throw Error(`adoptWorktree: ${f.worktreePath} is already adopted as a task`)}let Z=(await this.worktrees.listAll(f.repo)).find((q)=>rz(q.path)===Y);if(!Z)throw Error(`adoptWorktree: ${f.worktreePath} is not an adoptable git worktree of ${f.repo} (unknown, detached, or the main checkout)`);let G=f.branch?.trim()||Z.branch,Q=(f.title??CA(Z.path)).trim()||NY;return this.store.create({repo:f.repo,title:Q,branch:G,worktreePath:Z.path,status:"backlog",kind:"task",vendor:f.vendor??Zf})}pendingBaseRefs=new Map;adoptLocks=new Map;requireTask(f){let Y=this.store.get(f);if(!Y)throw new DB(String(f));return Y}}function bA(f){let Y=f.split(/[/\\]/).filter(Boolean);return Y.length>0?Y[Y.length-1]??f:f}function HG(f){let Y=mY(f);return{repo:Y,key:zf(Y)?Y:rz(Y)}}function rz(f){try{return gA(f)}catch{return NA(f)}}var NY="(new task)";var BG=N(()=>{B1();KB();A1();RY();AB();X7()});function oz(f,Y,J){if(!Y)return f;let z=_z(Y);return z.ensureReady(),z.wrapCommand(f,{tty:!0,cwd:J})}function o1(){let f=[];for(let Y of["KOBE_HOME_DIR","KOBE_DAEMON_SOCKET_PATH","KOBE_TMUX_SOCKET"]){let J=process.env[Y];if(J&&J.length>0)f.push(`${Y}=${G1(J)}`)}return f.length>0?`${f.join(" ")} `:""}var jG="@kobe_remote";var Wz=N(()=>{QY();ZY()});var UG={};H1(UG,{windowIsSurface:()=>uA,windowCount:()=>SA,tmuxSessionName:()=>L1,tmuxCommandSequence:()=>bB,tmuxAvailable:()=>bY,tmuxArgs:()=>Vz,tagPaneRole:()=>j7,tagClaudePane:()=>TA,switchClientBeforeKill:()=>yY,setWindowOption:()=>CJ,setSessionOption:()=>RJ,sessionExists:()=>j1,sendKeys:()=>qQ,sendKeyName:()=>KG,runTmuxSequenceCapturing:()=>WG,runTmuxSequence:()=>P1,runTmuxCapturing:()=>l0,runTmux:()=>h0,paneIdByRole:()=>yB,newWindow:()=>HY,killSession:()=>af,globalTasksPaneWidth:()=>QQ,getSessionOptions:()=>bf,getSessionOption:()=>Kz,getServerOptions:()=>gJ,getServerOption:()=>B7,ensureFallbackSession:()=>HQ,currentSessionName:()=>kf,claudePaneIdStrict:()=>ez,claudePaneId:()=>SB,capturePaneById:()=>fZ,attachArgv:()=>tz,SURFACE_WINDOW_OPTION:()=>IB,PANE_ROLE_OPTION:()=>VG,KOBE_TMUX_SOCKET:()=>qY,KOBE_HOME_SESSION:()=>W7,CLAUDE_ROLE_OPTION:()=>IA,CHAT_TAB_SESSION_ID_OPTION:()=>kY});import{homedir as kA}from"os";function Vz(...f){return["tmux","-L",qY,...f]}function L1(f){return`kobe-${f.replace(/[^A-Za-z0-9_-]/g,"")}`}function tz(f){return Vz("attach-session","-t",`=${f}`)}async function NB(f){if(!f)return"";try{return await new Response(f).text()}catch{return""}}async function h0(f){try{let Y=Bun.spawn(Vz(...f),{stdin:"ignore",cwd:sz,stdout:"ignore",stderr:"pipe"}),[J,z]=await Promise.all([NB(Y.stderr),Y.exited]);if(z!==0&&J.trim().length>0)console.error(`[kobe tmux] ${f.join(" ")} (${z}): ${J.trim()}`);return z}catch{return 1}}async function yA(f){try{return await Bun.spawn(Vz(...f),{stdin:"ignore",cwd:sz,stdout:"ignore",stderr:"ignore"}).exited}catch{return 1}}function bB(f){let Y=[];for(let J of f){if(J.length===0)continue;if(Y.length>0)Y.push(";");Y.push(...J)}return Y}async function P1(f){let Y=bB(f);return Y.length===0?0:h0(Y)}async function l0(f){try{let Y=Bun.spawn(Vz(...f),{stdin:"ignore",cwd:sz,stdout:"pipe",stderr:"pipe"}),[J,z,Z]=await Promise.all([NB(Y.stdout),NB(Y.stderr),Y.exited]);if(Z!==0&&z.trim().length>0)console.error(`[kobe tmux] ${f.join(" ")} (${Z}): ${z.trim()}`);return{code:Z,stdout:J}}catch{return{code:1,stdout:""}}}async function WG(f){let Y=bB(f);return Y.length===0?{code:0,stdout:""}:l0(Y)}async function bY(){try{return await Bun.spawn(["tmux","-V"],{stdin:"ignore",cwd:sz,stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function j1(f){return await yA(["has-session","-t",`=${f}`])===0}async function SA(f){let{code:Y,stdout:J}=await l0(["list-windows","-t",`=${f}`,"-F","#{window_id}"]);if(Y!==0)return 0;return J.split(`
36
- `).filter((z)=>z.trim().length>0).length}async function RJ(f,Y,J){await h0(["set-option","-t",f,Y,J])}async function Kz(f,Y){let{code:J,stdout:z}=await l0(["show-options","-v","-t",f,Y]);return J===0?z.trim():""}async function bf(f,Y){let J=Object.fromEntries(Y.map((G)=>[G,void 0])),{code:z,stdout:Z}=await WG(Y.map((G)=>["show-options","-q","-t",f,G]));if(z!==0)return J;for(let G of Z.split(`
37
- `)){let Q=G.indexOf(" ");if(Q<=0)continue;let q=G.slice(0,Q);if(q in J)J[q]=G.slice(Q+1).trim()}return J}async function B7(f){let{code:Y,stdout:J}=await l0(["show-options","-sqv",f]);return Y===0?J.trim():""}async function gJ(f){let Y=Object.fromEntries(f.map((Z)=>[Z,void 0])),{code:J,stdout:z}=await WG(f.map((Z)=>["show-options","-sq",Z]));if(J!==0)return Y;for(let Z of z.split(`
38
- `)){let G=Z.indexOf(" ");if(G<=0)continue;let Q=Z.slice(0,G);if(Q in Y)Y[Q]=Z.slice(G+1).trim()}return Y}async function QQ(){let f=await B7(_Y),Y=Number.parseInt(f,10);return Number.isFinite(Y)&&Y>0?Gz(Y):zz}async function j7(f,Y){await h0(["set-option","-p","-t",f,VG,Y])}async function CJ(f,Y,J){await h0(["set-window-option","-t",f,Y,J])}async function TA(f){await j7(f,kB)}async function yB(f,Y,J=!1){let{code:z,stdout:Z}=await l0(["list-panes","-t",`=${f}`,"-F",`#{pane_id} #{${VG}}`]);if(z!==0)return"";let G="";for(let Q of Z.split(`
39
- `)){let[q,H]=Q.split("\t");if(!q)continue;if(!G)G=q.trim();if(H?.trim()===Y)return q.trim()}return J?G:""}async function SB(f){return yB(f,kB,!0)}async function ez(f){return yB(f,kB,!1)}async function fZ(f,Y){if(!f)return"";let J=["capture-pane","-t",f,"-p"];if(typeof Y==="number"&&Y>0)J.push("-S",String(-Y));let{code:z,stdout:Z}=await l0(J);return z===0?Z:""}async function qQ(f,Y){await h0(["send-keys","-t",f,"-l","--",Y])}async function KG(f,Y){await h0(["send-keys","-t",f,Y])}async function HY(f,Y){let J=["new-window","-t",`=${f}`,"-c",Y.cwd];if(Y.name)J.push("-n",Y.name);if(Y.surface){J.push("-P","-F","#{window_id}"),J.push(Y.command);let{code:z,stdout:Z}=await l0(J),G=Z.trim();if(z===0&&G)await CJ(G,IB,"1");return}J.push(Y.command),await h0(J)}async function uA(f){let{code:Y,stdout:J}=await l0(["display-message","-t",f,"-p",`#{${IB}}`]);return Y===0&&J.trim()==="1"}async function kf(){let f=["display-message","-p"],Y=process.env.TMUX_PANE;if(Y&&Y.length>0)f.push("-t",Y);f.push("#{session_name}");let{code:J,stdout:z}=await l0(f),Z=z.trim();return J===0&&Z.length>0?Z:null}async function af(f){if(!f.startsWith("kobe-hidden-")){let Y=sZ(f);if(await j1(Y))await h0(["kill-session","-t",`=${Y}`])}if(await j1(f))await h0(["kill-session","-t",`=${f}`])}async function HQ(){let f=W7;if(await j1(f)){if(await Kz(f,H7)==="tasks")return f;await h0(["kill-session","-t",`=${f}`])}let J=(await l0(["new-session","-d","-s",f,"-c",sz,"-x","220","-y","50","-P","-F","#{pane_id}",cW()])).stdout.trim();if(J){let z=await QQ(),G=(await l0(["split-window","-h","-b","-t",J,"-l",`${z}`,"-c",sz,"-P","-F","#{pane_id}",gf(o1()+MJ(C1()))])).stdout.trim();if(G)await P1([["set-option","-p","-t",G,VG,"tasks"],["select-pane","-t",G]])}return await RJ(f,H7,"tasks"),f}async function yY(f,Y){if(await kf()!==f)return;if(Y&&Y!==f&&await j1(Y)){await h0(["switch-client","-t",`=${Y}`]);return}let z=await HQ();await h0(["switch-client","-t",`=${z}`])}var qY,sz,VG="@kobe_role",IA,kB="claude",kY="@kobe_session_id",IB="@kobe_surface",W7="kobe-home",H7="@kobe_home";var u1=N(()=>{pY();Wz();ZY();qY=process.env.KOBE_TMUX_SOCKET?.trim()||"kobe";sz=kA()||"/";IA=VG});async function EA(f,Y=V7){let{code:J,stdout:z}=await Y.capture(["list-windows","-t",`=${f}`,"-F",`#{window_index} #{automatic-rename} #{${kY}}`]);if(J!==0)return[];let Z=[];for(let G of z.split(`
40
- `)){let[Q,q,H]=G.split("\t"),B=Number.parseInt((Q??"").trim(),10);if(!Number.isInteger(B))continue;Z.push({index:B,sessionId:H?.trim()??"",autoRename:q?.trim()??""})}return Z}async function xA(f,Y,J){let{code:z,stdout:Z}=await J.capture(["show-window-options","-t",`=${f}:${Y}`,"automatic-rename"]);return z===0&&/\boff\b/.test(Z)}async function wA(f){let{code:Y,stdout:J}=await f.capture(["show-window-options","-g","automatic-rename"]);return Y===0&&/\boff\b/.test(J)}async function hA(f,Y,J,z){return await z.run(["rename-window","-t",`=${f}:${Y}`,"--",J])===0}async function K7(f,Y=PA){let J=0,z=null,Z=async(G,Q)=>{if(Q.autoRename==="1")return!1;if(Q.autoRename==="0"){if(z===null)z=await wA(Y.runner);if(!z)return!0}return xA(G,Q.index,Y.runner)};for(let G of f.listTasks()){if(G.archived||G.kind==="main"||!G.worktreePath)continue;let Q=L1(G.id),q=await EA(Q,Y.runner);if(q.length===0)continue;let H=q.reduce((V,j)=>Math.min(V,j.index),Number.POSITIVE_INFINITY),B=G.vendor??Zf;for(let V of q)try{if(await Z(Q,V))continue;let j=V.sessionId?await Y.titleFromSessionId(B,V.sessionId):V.index===H?await Y.titleFromWorktree(G.worktreePath,B):"";if(j&&await hA(Q,V.index,j,Y.runner))J++}catch{}}return J}var V7,PA;var U7=N(()=>{lX();u1();RY();V7={capture:l0,run:h0};PA={runner:V7,titleFromSessionId:bV,titleFromWorktree:lz}});function L7(f){if(f instanceof Error)return f;let Y;try{Y=typeof f==="string"?f:JSON.stringify(f)}catch{Y=String(f)}return Error(Y)}function D7(f,Y,J=new Date){let z=L7(Y);return`[${J.toISOString()}] daemon ${f}: ${z.stack??`${z.name}: ${z.message}`}
41
- `}function vA(f,Y,J=new Date){let z=L7(Y);return`[${J.toISOString()}] daemon error [${f}]: ${z.stack??`${z.name}: ${z.message}`}
42
- `}function E1(f,Y){process.stderr.write(vA(f,Y))}function mA(f,Y,J=new Date){return`[${J.toISOString()}] daemon [${f}]: ${Y}
43
- `}function SY(f,Y){process.stderr.write(mA(f,Y))}function M7(f=(Y)=>process.stderr.write(Y)){if(TB||uB)return;TB=(Y)=>f(D7("unhandledRejection",Y)),uB=(Y)=>f(D7("uncaughtException",Y)),process.on("unhandledRejection",TB),process.on("uncaughtException",uB)}var TB,uB;async function cA(f,Y=lz){let J=[];for(let z of f.listTasks()){if(z.archived||z.title!==NY||!z.worktreePath)continue;try{let Z=await Y(z.worktreePath,z.vendor??Zf);if(!Z)continue;let G=f.getTask(z.id);if(!G||G.title!==NY)continue;await f.setTitle(z.id,Z),J.push({id:z.id,title:Z})}catch(Z){E1("auto-title-poller",Z)}}return J}function F7(f,Y=EB,J){if(Y<=0)return()=>{};let z=!1,G=setInterval(()=>{if(J&&!J())return;if(z)return;z=!0,cA(f).then(()=>K7(f)).catch((Q)=>E1("auto-title-poller",Q)).finally(()=>{z=!1})},Y);return G.unref?.(),()=>clearInterval(G)}var EB=4000;var O7=N(()=>{lX();BG();U7();RY()});class xB{socket;highWaterMark;queue=[];queuedBytes=0;paused=!1;draining=!1;droppedFrames=0;constructor(f,Y={}){this.socket=f,this.highWaterMark=Y.highWaterMark??8388608}get isPaused(){return this.paused}get pendingBytes(){return this.queuedBytes}get pendingCount(){return this.queue.length}get dropped(){return this.droppedFrames}write(f,Y){if(!this.paused){if(this.safeWrite(f))return;this.pause();return}this.enqueue({line:f,bytes:Buffer.byteLength(f),critical:Y})}enqueue(f){if(this.queue.push(f),this.queuedBytes+=f.bytes,this.queuedBytes<=this.highWaterMark)return;let Y=[];for(let J of this.queue){if(this.queuedBytes>this.highWaterMark&&!J.critical){this.queuedBytes-=J.bytes,this.droppedFrames++;continue}Y.push(J)}this.queue=Y}pause(){if(this.draining)return;this.paused=!0,this.draining=!0,this.socket.once("drain",()=>{this.draining=!1,this.paused=!1,this.flush()})}flush(){while(this.queue.length>0){let f=this.queue[0],Y=this.safeWrite(f.line);if(this.queue.shift(),this.queuedBytes-=f.bytes,!Y){this.pause();return}}}safeWrite(f){try{return this.socket.write(f)}catch{return!0}}}class wB{last=new Map;sinks=new Set;publish(f,Y){this.last.set(f,Y);let J={channel:f,payload:Y};for(let z of this.sinks)z(J)}snapshot(){return[...this.last].map(([f,Y])=>({channel:f,payload:Y}))}onPublish(f){return this.sinks.add(f),()=>{this.sinks.delete(f)}}}function BQ(){return c1()[Uz]===!0}var Uz="experimental.autoStatus";var DG=N(()=>{tJ()});async function A7(f,Y,J=BQ){if(!J())return"skipped";let z=f.getTask(Y);if(!z)return"skipped";if((z.kind??"task")==="main"||z.archived)return"skipped";if(z.status!=="backlog")return"skipped";return await f.setStatus(Y,"in_progress"),"moved"}var R7=N(()=>{DG()});import{createHash as nA}from"crypto";import{homedir as dA}from"os";import bJ from"path";function pA(){return bJ.join(process.env.KOBE_HOME_DIR??dA(),".kobe")}function _A(f){let J=(bJ.basename(f)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",z=nA("sha1").update(bJ.resolve(f)).digest("hex").slice(0,12);return`${J}-${z}`}function rA(f){if(!bJ.isAbsolute(f))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${f}`);return bJ.join(pA(),iA,_A(f))}function oA(f){if(!bJ.isAbsolute(f))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${f}`);return[rA(f),...$A.map((Y)=>bJ.join(f,Y))]}function NJ(f){return f.length>1&&f.endsWith("/")?f.slice(0,-1):f}function g7(f,Y){return Y===f||Y.startsWith(`${f}/`)}function C7(f,Y){let J=NJ(Y),z,Z=-1;for(let G of f){if(!G.worktreePath)continue;let Q=NJ(G.worktreePath);if(g7(Q,J)&&Q.length>Z)Z=Q.length,z=G.id}return z}function hB(f,Y){let J=NJ(Y),z,Z=-1;for(let G of f){if(!G.repo)continue;let Q=NJ(G.repo);if(g7(Q,J)&&Q.length>Z)Z=Q.length,z=Q}return z}function N7(f,Y){let J=NJ(Y),z=new Set,Z=new Set;for(let G of f){if(G.repo)z.add(NJ(G.repo));if(G.worktreePath)Z.add(NJ(G.worktreePath))}for(let G of z)for(let Q of oA(G).map(NJ)){let q=`${Q}/`;if(!J.startsWith(q))continue;let B=J.slice(q.length).split("/")[0];if(!B)continue;let V=`${q}${B}`;if(Z.has(V))return;return{repo:G,worktreePath:V}}return}var iA="worktrees",lA=".kobe/worktrees",aA=".claude/worktrees",$A;var b7=N(()=>{$A=[lA,aA]});function mB(f){return{message:f instanceof Error?f.message:String(f),name:f instanceof Error?f.name:void 0}}async function LG(f,Y,J,z){let Z=f.get(Y);if(!Z)throw Error(`unknown daemon request: ${Y}`);return Z.handle(cB(J),z)}function MG(){return new Map([{name:"hello",handle(Y,J){let z=typeof Y.protocolVersion==="number"?Y.protocolVersion:cf,Z=typeof Y.minProtocolVersion==="number"?Y.minProtocolVersion:z;if(!MX({localVersion:cf,localMin:VJ,remoteVersion:z,remoteMin:Z}))throw Error(`daemon is protocol v${cf} (min v${VJ}); this client is v${z} (min v${Z}). Upgrade your kobe.`);return{protocolVersion:cf,minProtocolVersion:VJ,kobeVersion:t0,capabilities:[...NH],daemonPid:J.daemon.pid,clientId:J.clientId,tasks:J.orch.listTasks().map(fY)}}},{name:"daemon.status",handle(Y,J){return{daemonPid:J.daemon.pid,kobeVersion:t0,uptimeMs:Date.now()-J.daemon.startedAt.getTime(),startedAt:J.daemon.startedAt.toISOString(),attachedClients:J.daemon.guiCount(),taskCount:J.orch.listTasks().length,socketPath:J.daemon.socketPath,webPort:J.daemon.webPort??null}}},{name:"daemon.stop",async handle(Y,J){return await J.daemon.stopSoon(),{}}},{name:"task.list",handle(Y,J){return{tasks:J.orch.listTasks().map(fY)}}},{name:"task.get",handle(Y,J){let z=F1(Y,"taskId"),Z=J.orch.getTask(z);if(!Z)throw Error(`task not found: ${z}`);return{task:fY(Z)}}},{name:"task.create",async handle(Y,J){let z=F1(Y,"repo"),Z=await J.orch.createTask({repo:z,title:$f(Y,"title"),branch:$f(Y,"branch"),baseRef:$f(Y,"baseRef"),vendor:vB(Y,"vendor"),modelEffort:$f(Y,"effort")});return{taskId:Z.id,task:fY(Z)}}},{name:"task.archive",async handle(Y,J){let z=F1(Y,"taskId");return await J.orch.setArchived(z,PB(Y,"archived")),{}}},{name:"task.rename",async handle(Y,J){let z=F1(Y,"taskId");return await J.orch.setTitle(z,F1(Y,"title")),{}}},{name:"task.setBranch",async handle(Y,J){let z=F1(Y,"taskId");return await J.orch.setBranch(z,F1(Y,"branch")),{}}},{name:"task.setVendor",async handle(Y,J){let z=F1(Y,"taskId"),Z=vB(Y,"vendor");if(!Z)throw Error("task.setVendor: vendor is required");return await J.orch.setVendor(z,Z),{}}},{name:"task.delete",async handle(Y,J){let z=F1(Y,"taskId");return await J.orch.deleteTask(z,{force:PB(Y,"force")}),J.activity.clearTask(z),{}}},{name:"task.pin",async handle(Y,J){let z=F1(Y,"taskId");return await J.orch.setPinned(z,PB(Y,"pinned")),{}}},{name:"task.move",async handle(Y,J){let z=F1(Y,"taskId"),Z=F1(Y,"direction");if(Z!=="up"&&Z!=="down")throw Error("direction must be up or down");return await J.orch.moveTask(z,Z==="up"?-1:1),{}}},{name:"task.status",async handle(Y,J){let z=F1(Y,"taskId"),Z=F1(Y,"status");if(!CV(Z))throw Error("status must be a TaskStatus");let G=Z==="done"?J.orch.getTask(z):void 0,Q=G?.status;if(await J.orch.setStatus(z,Z),Z==="done"&&Q!=="done"&&G)try{let q=await J.issues.mirrorTaskDone(G.repo,z);if(q)J.bus.publish("issue.snapshot",q)}catch(q){E1("issue-done-mirror",q)}return{}}},{name:"task.reorder",async handle(Y,J){let z=Y.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 Z=z.map((G)=>{if(typeof G!=="object"||G===null)throw Error("each move needs taskId and position");let Q=G,q=F1(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 J.orch.reorderTasks(Z),{}}},{name:"task.ensureMain",async handle(Y,J){let z=F1(Y,"repo"),Z=await J.orch.ensureMainTask(z);return{task:fY(Z)}}},{name:"project.forget",async handle(Y,J){let z=F1(Y,"repo");return await J.orch.forgetProject(z),{}}},{name:"task.ensureWorktree",async handle(Y,J){let z=F1(Y,"taskId");J.bus.publish("task.jobs",{taskId:z,kind:"ensureWorktree",phase:"running"});try{let Z=await J.orch.ensureWorktree(z);return J.bus.publish("task.jobs",{taskId:z,kind:"ensureWorktree",phase:"done"}),{worktreePath:Z}}catch(Z){throw J.bus.publish("task.jobs",{taskId:z,kind:"ensureWorktree",phase:"error",error:Z instanceof Error?Z.message:String(Z)}),Z}}},{name:"worktree.discoverAdoptable",async handle(Y,J){let z=F1(Y,"repo");return{worktrees:await J.orch.discoverAdoptableWorktrees(z)}}},{name:"worktree.adopt",async handle(Y,J){let z=await J.orch.adoptWorktree({repo:F1(Y,"repo"),worktreePath:F1(Y,"worktreePath"),branch:$f(Y,"branch"),vendor:vB(Y,"vendor"),title:$f(Y,"title"),ifExists:$f(Y,"ifExists")==="return"?"return":"error"});return{task:fY(z)}}},{name:"worktree.reconcile",async handle(Y,J){let z=F1(Y,"cwd"),Z=F1(Y,"worktreePath"),G=hB(J.orch.listTasks(),z)??hB(J.orch.listTasks(),Z);if(!G)return{adopted:!1};try{return{adopted:!0,taskId:(await J.orch.adoptWorktree({repo:G,worktreePath:Z,ifExists:"return"})).id}}catch(Q){return E1("worktree-created",Q),{adopted:!1}}}},{name:"task.setActive",async handle(Y,J){let z=$f(Y,"taskId")??null;return await J.orch.setActiveTask(z),J.bus.publish("active-task",{taskId:z}),{}}},{name:"issue.list",async handle(Y,J){return J.issues.list(F1(Y,"repoRoot"))}},{name:"issue.mutate",async handle(Y,J){let z=await J.issues.mutate(F1(Y,"repoRoot"),Y.op);return J.bus.publish("issue.snapshot",z),z}},{name:"session.deliver",async handle(Y,J){let z=F1(Y,"taskId"),Z=F1(Y,"text"),G=$f(Y,"source");if(G!==void 0&&G!=="note"&&G!=="dispatcher")throw Error('source must be "note" or "dispatcher"');if(!J.orch.getTask(z))throw Error(`task not found: ${z}`);return J.bus.publish("session.deliver",{taskId:z,text:Z,at:Date.now(),source:G??"dispatcher"}),{ok:!0}}},{name:"note.file",async handle(Y,J){let z=F1(Y,"taskId"),Z=F1(Y,"text"),G=J.orch.getTask(z);if(!G)throw Error(`task not found: ${z}`);let Q=J.orch.listTasks().find((H)=>(H.kind??"task")==="main"&&H.repo===G.repo&&!H.archived);if(!Q||Q.id===G.id)return{ok:!0,routed:!1};let q=G.title||G.branch||z;return J.bus.publish("session.deliver",{taskId:Q.id,text:`[KOBE FIELD NOTE] from "${q}" (task ${z}): ${Z}`,at:Date.now(),source:"note"}),{ok:!0,routed:!0}}},{name:"engine.reportEvent",async handle(Y,J){let z=F1(Y,"kind");if(!RX(z))throw Error(`unknown engine event kind: ${z}`);let Z=$f(Y,"taskId"),G=$f(Y,"cwd");if(!Z&&G&&z==="session-start"){let H=N7(J.orch.listTasks(),G);if(H)try{await J.orch.adoptWorktree({repo:H.repo,worktreePath:H.worktreePath,ifExists:"return"})}catch(B){E1("worktree-autosync",B)}}let Q=Z??(G?C7(J.orch.listTasks(),G):void 0);if(!Q)return{};let q=sA(Y);if(J.activity.report(Q,z,q),z==="turn-start")A7(J.orch,Q).then((H)=>{if(H==="moved")console.log(`[status-rules] task ${Q} auto-moved backlog \u2192 in_progress`)}).catch((H)=>E1("status-rules",H));return{}}}].map((Y)=>[Y.name,Y]))}function cB(f){if(!f||typeof f!=="object"||Array.isArray(f))return{};return f}function F1(f,Y){let J=f[Y];if(typeof J!=="string"||J.length===0)throw Error(`${Y} is required`);return J}function $f(f,Y){let J=f[Y];if(J===void 0||J===null||J==="")return;if(typeof J!=="string")throw Error(`${Y} must be a string`);return J}function PB(f,Y){let J=f[Y];if(J===void 0||J===null)return;if(typeof J!=="boolean")throw Error(`${Y} must be a boolean`);return J}function vB(f,Y){let J=$f(f,Y);return J&&J.trim().length>0?J:void 0}function sA(f){let Y=f.detail;if(!Y||typeof Y!=="object"||Array.isArray(Y))return;let J=Y,z={};if(J.failure==="rate_limit"||J.failure==="billing"||J.failure==="other")z.failure=J.failure;if(J.waiting==="permission"||J.waiting==="input")z.waiting=J.waiting;if(typeof J.note==="string")z.note=J.note;return Object.keys(z).length>0?z:void 0}var jQ=N(()=>{gX();R7();RY();Df();b7();eJ()});import{execFile as tA}from"child_process";import{mkdir as eA,readFile as f2,realpath as k7,rename as Y2,stat as J2,writeFile as z2}from"fs/promises";import{homedir as Z2}from"os";import{dirname as G2,isAbsolute as X2,join as Q2,resolve as y7}from"path";import{promisify as q2}from"util";function H2(f){return(f instanceof Error?f.message:String(f)).includes("not a git repository")}function VQ(f=process.env.KOBE_HOME_DIR??Z2()){return Q2(f,".kobe","issues.json")}function I7(f){return typeof f==="string"&&S7.includes(f)}function B2(f){if(f===null||typeof f!=="object"||Array.isArray(f))return null;let Y=f;if(typeof Y.id!=="number")return null;return{id:Y.id,title:typeof Y.title==="string"?Y.title:"(untitled)",status:I7(Y.status)?Y.status:"open",created:typeof Y.created==="string"?Y.created:"",body:typeof Y.body==="string"?Y.body:"",taskId:typeof Y.taskId==="string"?Y.taskId:void 0}}function j2(){return{version:1,repos:{}}}function W2(){let f=new Date,Y=String(f.getMonth()+1).padStart(2,"0"),J=String(f.getDate()).padStart(2,"0");return`${f.getFullYear()}-${Y}-${J}`}async function V2(f){let{stdout:Y}=await $B("git",["-C",f,"rev-parse","--git-common-dir"]),J=Y.trim();return k7(X2(J)?J:y7(f,J))}async function K2(f){let{stdout:Y}=await $B("git",["-C",f,"rev-parse","--show-toplevel"]);return Y.trim()}async function U2(f){let{stdout:Y}=await $B("git",["-C",f,"worktree","list","--porcelain"]),J=Y.split(/\r?\n/).find((z)=>z.startsWith("worktree "))?.slice(9).trim();return J?k7(J):K2(f)}async function nB(f){if(typeof f!=="string"||f.length===0)throw Error("repoRoot is required");let Y=y7(f);if(!(await J2(Y).catch(()=>null))?.isDirectory())throw Error("repoRoot does not exist");try{let[z,Z]=await Promise.all([U2(Y),V2(Y)]);return{repoRoot:z,repoKey:Z}}catch(z){if(H2(z))throw Error("repoRoot is not a git repository");throw z}}async function dB(f){try{let Y=JSON.parse(await f2(f,"utf8")),J={};if(Y.repos&&typeof Y.repos==="object")for(let[z,Z]of Object.entries(Y.repos)){if(!Z||typeof Z!=="object")continue;let G=Z;J[z]={repoRoot:typeof G.repoRoot==="string"?G.repoRoot:"",nextId:typeof G.nextId==="number"?G.nextId:1,issues:Array.isArray(G.issues)?G.issues.map(B2).filter((Q)=>Q!==null):[]}}return{version:1,repos:J}}catch(Y){if(Y.code==="ENOENT")return j2();throw Y}}async function iB(f,Y){await eA(G2(f),{recursive:!0});let J=`${f}.tmp`;await z2(J,`${JSON.stringify(Y,null,2)}
44
- `,"utf8"),await Y2(J,f)}function lB(f,Y){return{repoRoot:f,exists:Y!==null,nextId:Y?.nextId??1,issues:Y?.issues??[]}}async function aB(f,Y){let z=(WQ.get(f)??Promise.resolve()).then(Y),Z=z.then(()=>{return},()=>{return});return WQ.set(f,Z),Z.then(()=>{if(WQ.get(f)===Z)WQ.delete(f)}),z}class KQ{path;constructor(f=VQ()){this.path=f}async list(f){let{repoRoot:Y,repoKey:J}=await nB(f);return aB(this.path,async()=>{let z=await dB(this.path),Z=z.repos[J]??null;if(Z&&Z.repoRoot!==Y)Z.repoRoot=Y,await iB(this.path,z);return lB(Y,Z)})}async mirrorTaskDone(f,Y){let{repoRoot:J,repoKey:z}=await nB(f);if(!Y)return null;return aB(this.path,async()=>{let Z=await dB(this.path),G=Z.repos[z];if(!G)return null;let Q=G.issues.find((q)=>q.taskId===Y);if(!Q||Q.status==="done")return null;return Q.status="done",G.repoRoot=J,await iB(this.path,Z),lB(J,G)})}async mutate(f,Y){let{repoRoot:J,repoKey:z}=await nB(f);if(!Y||typeof Y!=="object"||Array.isArray(Y)||typeof Y.type!=="string")throw Error("missing op");return aB(this.path,async()=>{let Z=await dB(this.path),G=Z.repos[z];if(!G)G={repoRoot:J,nextId:1,issues:[]},Z.repos[z]=G;G.repoRoot=J;let Q=Y;if(Q.type==="create"){if(typeof Q.title!=="string"||Q.title.trim().length===0)throw Error("create requires a non-empty title");if(Q.body!==void 0&&typeof Q.body!=="string")throw Error("body must be a string");G.issues=[{id:G.nextId,title:Q.title,status:"open",created:W2(),body:typeof Q.body==="string"?Q.body:""},...G.issues],G.nextId+=1}else if(Q.type==="setStatus"){if(typeof Q.id!=="number")throw Error("setStatus requires a numeric id");if(!I7(Q.status))throw Error(`invalid status: must be one of ${S7.join(", ")}`);let q=G.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=G.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=G.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=G.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=G.issues.filter((H)=>H.id!==Q.id);if(q.length===G.issues.length)throw Error(`no issue #${Q.id}`);G.issues=q}else throw Error(`unknown op type: ${Q.type}`);return await iB(this.path,Z),lB(J,G)})}}var $B,S7,WQ;var pB=N(()=>{$B=q2(tA),S7=["open","doing","hold","done"];WQ=new Map});import{mkdirSync as D2,watch as L2}from"fs";import{basename as M2,dirname as F2}from"path";function UQ(f){if(f.debounceMs<=0)return()=>{};let Y=F2(f.filePath),J=new Set([M2(f.filePath),...f.matchBasenames??[]]),z=null,Z=null,G=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{D2(Y,{recursive:!0}),G=L2(Y,(H,B)=>{let V=B===null?null:String(B);if(V!==null&&!J.has(V))return;q()}),G.on("error",f.onError)}catch(H){f.onError(H)}if(f.pollMs&&f.pollMs>0)Z=setInterval(Q,f.pollMs),Z.unref?.();return()=>{if(z)clearTimeout(z),z=null;if(Z)clearInterval(Z),Z=null;G?.close(),G=null}}var _B=()=>{};import{homedir as O2}from"os";import{basename as A2,join as R2}from"path";function oB(f=process.env.KOBE_HOME_DIR??O2()){return R2(f,".kobe","settings","keybindings.yaml")}function T7(f,Y={}){let J=Y.debounceMs??rB;if(J<=0)return()=>{};let z=Y.path??oB(),Z=A2(z),G=Z.replace(/\.yaml$/,".yml"),Q=0;return f.publish("keybindings",{rev:Q}),UQ({filePath:z,matchBasenames:[Z,G],debounceMs:J,onTrigger:()=>{try{Q+=1,f.publish("keybindings",{rev:Q})}catch(H){E1("keybindings-watcher",H)}},onError:(H)=>E1("keybindings-watcher",H)})}var rB=200;var u7=N(()=>{_B()});class sB{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??g2,this.log=f.log??SY}guiCount(){let f=0;for(let Y of this.clients())if(Y.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 g2=(f,Y)=>{let J=setTimeout(f,Y);return J.unref?.(),()=>clearTimeout(J)};var E7=()=>{};import{spawn as C2}from"child_process";function u2(f,Y,J){return new Promise((z)=>{let Z="",G="",Q=!1,q=(B,V)=>{if(Q)return;Q=!0,z({status:B,stdout:Z,stderr:G,spawnError:V})},H=C2("gh",f.slice(),{cwd:Y,stdio:["ignore","pipe","pipe"],signal:J,killSignal:"SIGKILL"});H.stdout?.on("data",(B)=>{Z+=String(B)}),H.stderr?.on("data",(B)=>{G+=String(B)}),H.on("error",()=>q(null,!J.aborted)),H.on("close",(B)=>q(B,!1))})}function x2(f){if(f.archived)return!1;if(f.kind==="main")return!1;if(!f.branch||!f.worktreePath)return!1;if(zf(f.repo)||zf(f.worktreePath))return!1;return!0}async function w2(f,Y){let J=Y.tickMs??FG,z=Y.rand,Z={tickMs:J,settledMs:b2,noPrMs:N2,noRemoteMs:S2,failureBaseMs:k2,failureCapMs:y2,jitterRatio:I2},G=[];for(let Q of f.listTasks()){if(!x2(Q)){Y.schedule.delete(Q.id);continue}let q=Y.schedule.get(Q.id);if(q&&Y.now<q.nextAllowedAt)continue;let H=q?.failures??0;try{let B=await Y.run(Q.worktreePath,Q.branch);if(B.kind==="error"){SY("pr-status-poller",`gh pr view failed (${B.error}) for task ${Q.id} [${Q.branch}] \u2014 keeping last PR status, backing off`),Y.schedule.set(Q.id,qG({kind:"error",error:B.error},H,Y.now,Z,z));continue}if(B.kind==="empty"){Y.schedule.set(Q.id,qG({kind:"empty"},H,Y.now,Z,z));continue}let V=$V(B.view,Y.at),j=f.getTask(Q.id);if(!j){Y.schedule.delete(Q.id);continue}if(!ZQ(j.prStatus,V??void 0))await f.setPRStatus(Q.id,V),G.push(Q.id);let K=V?.lifecycle==="merged"||V?.lifecycle==="closed";Y.schedule.set(Q.id,qG({kind:"pr",settled:K},H,Y.now,Z,z))}catch(B){E1("pr-status-poller",B),Y.schedule.set(Q.id,qG({kind:"error",error:"network"},H,Y.now,Z,z))}}return G}function x7(f,Y=FG,J,z=E2){if(Y<=0)return()=>{};let Z=new Map,G=!1,q=setInterval(()=>{if(J&&!J())return;if(G)return;G=!0,w2(f,{run:z,now:Date.now(),at:new Date().toISOString(),schedule:Z,tickMs:Y}).catch((H)=>E1("pr-status-poller",H)).finally(()=>{G=!1})},Y);return q.unref?.(),()=>clearInterval(q)}var FG=30000,N2=300000,b2=600000,k2,y2=900000,S2=1800000,I2=0.2,T2=1e4,E2=async(f,Y)=>{let J=new AbortController,z=!1,Z=setTimeout(()=>{z=!0,J.abort()},T2);try{let G=await u2(["pr","view",Y,"--json",aV],f,J.signal);if(G.status===0&&!z)try{let Q=JSON.parse(G.stdout);return typeof Q.number==="number"?{kind:"pr",view:Q}:{kind:"empty"}}catch{return VB({parseError:!0})}return VB({spawnError:G.spawnError,timedOut:z,exitCode:G.status,stderr:G.stderr})}finally{clearTimeout(Z)}};var w7=N(()=>{KB();A1();k2=FG});import{readFileSync as h2}from"fs";import{homedir as P2}from"os";import{basename as v2,join as m2}from"path";function eB(f=process.env.KOBE_HOME_DIR??P2()){return m2(f,".config","kobe","state.json")}function h7(f){let Y={};try{let B=JSON.parse(h2(f,"utf8"));if(B&&typeof B==="object"&&!Array.isArray(B))Y=B}catch{}let J=typeof Y.activeTheme==="string"&&Y.activeTheme.length>0?Y.activeTheme:"claude",z=Y.transparentBackground===!0,Z=typeof Y.focusAccent==="string"&&n2.includes(Y.focusAccent)?Y.focusAccent:null,G=Y.activeSortMode==="recent"?"recent":"default",Q=Y["tasksPane.keysCollapsed"]===!0,q=typeof Y["tasksPane.projectFilter"]==="string"&&Y["tasksPane.projectFilter"].length>0?Y["tasksPane.projectFilter"]:null,H=typeof Y.locale==="string"&&Y.locale.length>0?Y.locale:"en";return{theme:J,transparentBackground:z,focusAccent:Z,locale:H,sortMode:G,keysCollapsed:Q,projectFilter:q}}function d2(f,Y){return f.theme===Y.theme&&f.transparentBackground===Y.transparentBackground&&f.focusAccent===Y.focusAccent&&f.locale===Y.locale&&f.sortMode===Y.sortMode&&f.keysCollapsed===Y.keysCollapsed&&f.projectFilter===Y.projectFilter}function P7(f,Y={}){let J=Y.debounceMs??tB;if(J<=0)return()=>{};let z=Y.pollMs??c2,Z=Y.statePath??eB(),G=v2(Z),Q=h7(Z);return f.publish("ui-prefs",Q),UQ({filePath:Z,matchBasenames:[G],debounceMs:J,pollMs:z,onTrigger:()=>{try{let H=h7(Z);if(d2(Q,H))return;Q=H,f.publish("ui-prefs",H)}catch(H){E1("ui-prefs-watcher",H)}},onError:(H)=>E1("ui-prefs-watcher",H)})}var tB=200,c2=250,n2;var v7=N(()=>{_B();n2=["primary","success","info"]});function f8(){return c1()[Dz]===!0}var Dz="experimental.dispatcher";var DQ=N(()=>{tJ()});import{randomUUID as i2}from"crypto";function BY(f){return`engineCommand.${f}`}function jY(f){return`engineName.${f}`}function Lz(f){return k1(jY(f))?.trim()||Y8[f]||f}function OG(f){return _1(f??"claude").defaultCommand}function l2(f){let Y=[],J=/"([^"]*)"|'([^']*)'|(\S+)/g;for(let z=J.exec(f);z!==null;z=J.exec(f))Y.push(z[1]??z[2]??z[3]??"");return Y}function yf(f,Y){let J=f??"claude",z=k1(BY(J))?.trim(),Z=(()=>{if(z){let G=l2(z);if(G.length>0)return G}return OG(J)})();return a2(Z,J,Y)}function a2(f,Y,J){let z=J?.trim();if(!z)return f;let Z=Y??"claude";if(!_1(Z).effortLevels?.includes(z))return f;if(Z==="codex")return[...f,"-c",`model_reasoning_effort=${z}`];return f}function YZ(f,Y){if((Y??"claude")!=="claude")return{argv:f,sessionId:null};if(f.some((z)=>$2.has(z)))return{argv:f,sessionId:null};let J=i2();return{argv:[...f,"--session-id",J],sessionId:J}}function Mz(){let f=(Y)=>/^[A-Za-z0-9_/.:=-]+$/.test(Y)?Y:`'${Y.replace(/'/g,"'\\''")}'`;try{return[...C1(),"api"].map(f).join(" ")}catch{return"kobe api"}}function p2(f,Y=Mz()){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:",` ${Y} 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 _2(f,Y=Mz()){return["kobe shares hard-won discoveries between its parallel sessions as one-line field notes.","When you RESOLVE a non-obvious, repo-level gotcha (a build flag, a flaky test, an environment quirk, an API trap), file it:",` ${Y} note --task-id ${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 r2(f,Y=Mz(),J={}){let z=[];if((J.status??BQ)())z.push(p2(f,Y));if((J.notes??f8)())z.push(_2(f,Y));return z.length>0?z.join(`
47
-
48
- `):null}function LQ(f,Y,J,z={}){if(!J)return f;if((Y??"claude")!=="claude")return f;if(f.includes("--append-system-prompt")||f.includes("--append-system-prompt-file"))return f;let Z=r2(J,Mz(),z);if(!Z)return f;return[...f,"--append-system-prompt",Z]}function o2(f,Y=Mz()){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: \`${Y} collect --repo .\` (status, running, change counts per task), or \`--task-ids id1,id2\` for specific tasks.`,` - Relay a note to a task that would benefit: \`${Y} dispatch --task-id <id> --prompt "[dispatcher] FYI from <author task>: <note verbatim>"\`.`," - Relay to the in-flight tasks whose work plausibly touches the same area \u2014 and to nobody else. If no task benefits, do nothing."," - Never relay a note back to its author, never relay the same note to the same task twice, and keep relays verbatim with provenance \u2014 no summarizing, no embellishment.","Use ONLY the dispatch verb to message sessions \u2014 the `send` verb pastes via tmux and would spawn a DUPLICATE engine for web-hosted sessions. If dispatch fails, report the error in your own session and stop; do not fall back.","Take no action on merge conflicts between tasks \u2014 the board's conflict radar is display-only by design, and resolution timing belongs to the humans and the tasks themselves.","Never run git commands inside other tasks' worktrees."].join(`
49
- `)}function MQ(f,Y,J,z=f8){if(!J||!z())return f;if((Y??"claude")!=="claude")return f;if(f.includes("--append-system-prompt")||f.includes("--append-system-prompt-file"))return f;return[...f,"--append-system-prompt",o2(J)]}var Y8,$2;var Ef=N(()=>{pY();OJ();DG();DQ();A1();$1();Y8=Object.fromEntries($J.map((f)=>[f,_1(f).displayName]));$2=new Set(["--session-id","--resume","-r","--continue","-c","--from-pr"])});function JZ(f){return Fz.includes(f)?f:"auto"}var Fz,m7,eY="editor.kind",kJ="editor.customCommand",FQ="auto";var OQ=N(()=>{Fz=["auto","vim","nvim","nano","emacs","custom"],m7=["nvim","vim","emacs","nano"]});function Az(f){return f==="taskpanel"?"taskpanel":"chattab"}var fJ="settings.surface",Oz="chattab";function xf(f=process.env){return{...f,...J8}}var J8;var yJ=N(()=>{J8={GIT_OPTIONAL_LOCKS:"0"}});async function zZ(f,Y,J={}){if(!f)return{stdout:"",stderr:"worktreePath is required",status:-1};let z=(J.execForPath??tY)(f),Z=J.timeoutMs&&J.timeoutMs>0?new AbortController:null,G=!1,Q=Z?setTimeout(()=>{G=!0,Z.abort()},J.timeoutMs):null,q=Z&&J.signal?AbortSignal.any([Z.signal,J.signal]):Z?.signal??J.signal,H;try{H=await z.run(["git",...Y],{cwd:f,env:J8,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(G&&H.exitCode===-1&&!H.stderr)return{stdout:H.stdout,stderr:`git ${Y.join(" ")} timed out after ${J.timeoutMs}ms`,status:-1};return{stdout:H.stdout,stderr:H.stderr,status:H.exitCode}}function s2(f,Y){if(!f||!Y||Y.startsWith("/"))return null;let J=Y.split("/");if(J.some((z)=>z===".."))return null;return`${f.replace(/\/+$/,"")}/${J.filter(Boolean).join("/")}`}async function c7(f,Y,J={}){let z=s2(f,Y);if(!z)return null;let Z=(J.execForPath??tY)(f);try{return await Z.readFile(z)}catch{return null}}var AQ=N(()=>{QY();yJ()});import{statSync as t2}from"fs";async function AG(f,Y){let J=await zZ(f,Y,{timeoutMs:e2}),z=J.status??-1;return{ok:z===0,stdout:J.stdout,stderr:J.stderr,code:z}}function YR(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 n7(f){let Y=new Map;if(!f)return Y;let J=f.split(/(?=^diff --git )/m);for(let z of J){if(!z.startsWith("diff --git"))continue;let Z=null,G=z.match(/^\+\+\+ b\/(.*)$/m);if(G&&G[1]!=="/dev/null")Z=G[1];else{let Q=z.match(/^diff --git a\/.* b\/(.*)$/m);if(Q)Z=Q[1]}if(!Z)continue;Y.set(JR(Z),z.endsWith(`
50
- `)?z:`${z}
51
- `)}return Y}function JR(f){if(!(f.startsWith('"')&&f.endsWith('"')))return f;return f.slice(1,-1).replace(/\\([\\"nt])/g,(J,z)=>z==="n"?`
52
- `:z==="t"?"\t":z)}async function zR(f,Y,J){let z=Array(f.length),Z=Math.max(1,Math.min(Y,f.length)),G=0;async function Q(){while(G<f.length){let q=G++;z[q]=await J(f[q],q)}}return await Promise.all(Array.from({length:Z},()=>Q())),z}async function ZR(f,Y){let J=await AG(f,["diff","--no-color","--no-index","--","/dev/null",Y]);if(J.stdout.trim())return J.stdout.endsWith(`
53
- `)?J.stdout:`${J.stdout}
54
- `;return""}async function d7(f,Y){if(Y.pathname!=="/api/diff")return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});let J=Y.searchParams.get("worktreePath");if(!J)return Response.json({error:"missing worktreePath"},{status:400});let z;try{z=decodeURIComponent(J)}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(!GQ(z))return Response.json({error:"worktreePath does not exist"},{status:400});if(!tY(z).isRemote)try{if(!t2(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 G=await AG(z,["rev-parse","--is-inside-work-tree"]);if(!G.ok||G.stdout.trim()!=="true")return Response.json({error:`not a git work tree: ${G.stderr.trim()||z}`},{status:500});let[Q,q,H]=await Promise.all([AG(z,["status","--porcelain=v1","-z","--untracked-files=all"]),AG(z,["diff","--no-color"]),AG(z,["diff","--no-color","--staged"])]);if(!Q.ok)return Response.json({error:`git status failed: ${Q.stderr.trim()}`},{status:500});let B=n7(q.stdout),V=n7(H.stdout),j=Q.stdout.split("\x00"),K=[],L=[];for(let R=0;R<j.length;R++){let S=j[R];if(!S)continue;let a=S[0]??" ",b=S[1]??" ",g=S.slice(3);if(!g)continue;if(a==="R"||a==="C"||b==="R"||b==="C")R++;let C=a==="?"&&b==="?",y=a!==" "&&a!=="?"?a:b,r=a!==" "&&a!=="?",z0="";if(C)L.push({fileIndex:K.length,path:g});else if(z0=V.get(g)??B.get(g)??"",V.has(g)&&B.has(g))z0=`${V.get(g)}${B.get(g)}`;K.push({path:g,status:C?"untracked":YR(y),staged:r,patch:z0})}if(L.length>0){let R=await zR(L,fR,(S)=>ZR(z,S.path));for(let S=0;S<L.length;S++)K[L[S].fileIndex].patch=R[S]}K.sort((R,S)=>R.path.localeCompare(S.path));let O=[H.stdout,q.stdout].filter(Boolean).join(`
55
- `),M={files:K,raw:O};return Response.json(M)}var e2=15000,fR=8;var i7=N(()=>{QY();AQ()});import{isAbsolute as GR}from"path";function a7(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9_-]+$/.test(f)}function QR(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9._-]+$/.test(f)&&!f.includes("..")}async function qR(f){let Y=f.searchParams.get("worktreePath"),J=f.searchParams.get("vendor")??"claude";if(!Y||!GR(Y))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!a7(J))return Response.json({error:"invalid vendor"},{status:400});try{let z=_1(J).history,[Z,G]=await Promise.all([z.listSessionIdsForWorktree(Y),z.latestTranscriptMtimeForWorktree(Y)]);return Response.json({sessions:Z,latestMtime:G})}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:500})}}async function HR(f){let Y=f.searchParams.get("vendor")??"claude",J=f.searchParams.get("sessionId");if(!a7(Y))return Response.json({error:"invalid vendor"},{status:400});if(!QR(J))return Response.json({error:"invalid sessionId"},{status:400});try{let z=await _1(Y).history.readHistory(J);return Response.json({messages:z})}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:500})}}async function $7(f,Y){if(Y.pathname!==l7&&Y.pathname!==XR)return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Y.pathname===l7?qR(Y):HR(Y)}var l7="/api/history/sessions",XR="/api/history/messages";var p7=N(()=>{OJ()});import{mkdir as BR,readFile as jR,writeFile as WR}from"fs/promises";import{join as _7}from"path";function r7(){return _7(Jf(),"notes")}function o7(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9_-]+$/.test(f)}function s7(f){return _7(r7(),`${f}.md`)}async function KR(f){let Y=f.searchParams.get("taskId");if(!o7(Y))return Response.json({error:"invalid taskId"},{status:400});try{let J="";try{J=await jR(s7(Y),"utf8")}catch(z){if(z.code!=="ENOENT")throw z}return Response.json({markdown:J})}catch(J){return Response.json({error:J instanceof Error?J.message:String(J)},{status:500})}}async function UR(f){let Y;try{Y=await f.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(!o7(Y.taskId))return Response.json({error:"invalid taskId"},{status:400});if(typeof Y.markdown!=="string")return Response.json({error:"markdown must be a string"},{status:400});try{return await BR(r7(),{recursive:!0}),await WR(s7(Y.taskId),Y.markdown,"utf8"),Response.json({ok:!0})}catch(J){return Response.json({error:J instanceof Error?J.message:String(J)},{status:500})}}async function t7(f,Y){if(Y.pathname!==VR)return null;if(f.method==="GET")return KR(Y);if(f.method==="PUT")return UR(f);return Response.json({error:"method not allowed"},{status:405})}var VR="/api/notes";var e7=N(()=>{i1()});var ZZ;var RQ=N(()=>{ZZ={$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 GZ;var gQ=N(()=>{GZ={$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 XZ;var CQ=N(()=>{XZ={$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 QZ;var NQ=N(()=>{QZ={$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 qZ;var bQ=N(()=>{qZ={$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 HZ;var kQ=N(()=>{HZ={$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 BZ;var yQ=N(()=>{BZ={$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 Z8(f,Y,J=[]){if(Y===void 0)return null;if(typeof Y!=="string")return Z8(f,Y.dark,J);if(Y==="transparent"||Y==="none")return null;if(Y.startsWith("#"))return Y;if(J.includes(Y))return null;let z=f.defs?.[Y]??f.theme[Y];return Z8(f,z,[...J,Y])}function z8(f){return Math.max(0,Math.min(255,Math.round(f)))}function RG(f,Y,J){let z=Number.parseInt(f.slice(1),16),Z=Number.parseInt(Y.slice(1),16),G=(q,H)=>q>>H&255;return`#${(z8(G(z,16)+(G(Z,16)-G(z,16))*J)<<16|z8(G(z,8)+(G(Z,8)-G(z,8))*J)<<8|z8(G(z,0)+(G(Z,0)-G(z,0))*J)).toString(16).padStart(6,"0")}`}function CR(f){let Y=(q)=>Z8(f,f.theme[q]),J=Y("background"),z=Y("text");if(!J||!z)return null;let Z=Y("textMuted")??RG(z,J,0.35),G=Y("primary")??z,Q=Y("border")??RG(z,J,0.8);return{bg:J,surface:Y("backgroundPanel")??J,inset:Y("backgroundElement")??J,menu:Y("backgroundMenu")??Y("backgroundElement")??J,line:Q,"line-subtle":Y("borderSubtle")??Q,"line-active":Y("borderActive")??RG(Q,z,0.3),fg:z,muted:Z,subtle:RG(Z,J,0.35),primary:G,"primary-hover":RG(G,z,0.35),"kobe-orange":G,"kobe-green":Y("success")??z,"kobe-blue":Y("info")??z,"kobe-red":Y("error")??z,"kobe-yellow":Y("warning")??z,"kobe-violet":Y("secondary")??G}}function f5(f,Y){if(Y.pathname!==bR)return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Response.json({themes:NR})}var gR,NR,bR="/api/themes";var Y5=N(()=>{RQ();gQ();CQ();NQ();bQ();kQ();yQ();gR={claude:ZZ,conductor:GZ,dracula:XZ,nord:QZ,opencode:qZ,"osaka-jade":HZ,tokyonight:BZ};NR=Object.fromEntries(Object.entries(gR).map(([f,Y])=>[f,CR(Y)]).filter((f)=>f[1]!==null))});import{createHash as kR,randomUUID as yR}from"crypto";import{mkdir as SR}from"fs/promises";import{join as G8,resolve as IR}from"path";function ER(f){return kR("sha1").update(f).digest("hex").slice(0,16)}async function hR(f){let Y=Number.parseInt(f.headers.get("content-length")??"",10);if(Number.isFinite(Y)&&Y>J5)return Response.json({error:"asset too large"},{status:413});let J;try{J=await f.formData()}catch{return Response.json({error:"invalid form data"},{status:400})}let z=J.get("repoRoot");if(typeof z!=="string"||z.length===0)return Response.json({error:"missing repoRoot"},{status:400});let Z=J.get("file");if(!(Z instanceof File))return Response.json({error:"file must be a File"},{status:400});if(Z.size>J5)return Response.json({error:"asset too large"},{status:413});let G=TR[Z.type];if(!G)return Response.json({error:`unsupported content-type: ${Z.type||"unknown"}`},{status:415});try{let Q=ER(z),q=G8(qH(),Q);await SR(q,{recursive:!0});let B=`${yR()}.${G}`;return await Bun.write(G8(q,B),Z),Response.json({url:`${SQ}/${Q}/${B}`})}catch(Q){return Response.json({error:Q instanceof Error?Q.message:String(Q)},{status:500})}}async function PR(f){let Y=f.slice(SQ.length+1),J=Y.indexOf("/");if(J<0)return Response.json({error:"not found"},{status:404});let z=Y.slice(0,J),Z=Y.slice(J+1);if(!xR.test(z)||!wR.test(Z))return Response.json({error:"invalid asset path"},{status:400});let G=qH(),Q=IR(G,z,Z);if(Q!==G8(G,z,Z)||!Q.startsWith(`${G}/`))return Response.json({error:"invalid asset path"},{status:400});let q=Z.slice(Z.lastIndexOf(".")+1).toLowerCase(),H=uR[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 z5(f,Y){if(Y.pathname===SQ){if(f.method==="POST")return hR(f);return Response.json({error:"method not allowed"},{status:405})}if(Y.pathname.startsWith(`${SQ}/`)){if(f.method==="GET")return PR(Y.pathname);return Response.json({error:"method not allowed"},{status:405})}return null}var SQ="/api/issue-assets",J5=10485760,TR,uR,xR,wR;var Z5=N(()=>{i1();TR={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp"},uR={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"};xR=/^[a-f0-9]{16}$/,wR=/^[A-Za-z0-9_-]+\.[a-z0-9]+$/});function G5(f,Y=500){return Response.json({error:f instanceof Error?f.message:String(f)},{status:Y})}function X5(f){let Y=f instanceof Error?f.message:String(f);if(/^no issue #\d+$/.test(Y))return 404;if(Y==="repoRoot is required"||Y==="repoRoot does not exist"||Y==="repoRoot is not a git repository"||Y==="missing op"||Y==="create requires a non-empty title"||Y==="body must be a string"||Y==="setStatus requires a numeric id"||Y.startsWith("invalid status:")||Y==="update requires a numeric id"||Y==="title must be a non-empty string"||Y==="link requires a numeric id"||Y==="link requires a non-empty taskId"||Y==="unlink requires a numeric id"||Y==="delete requires a numeric id"||Y.startsWith("unknown op type:"))return 400;return 500}async function vR(f,Y){let J=Y.searchParams.get("repoRoot");if(!J)return Response.json({error:"missing repoRoot"},{status:400});try{return Response.json(await f.request("issue.list",{repoRoot:J}))}catch(z){return G5(z,X5(z))}}async function mR(f,Y){let J;try{J=await Y.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(J===null||typeof J!=="object"||Array.isArray(J))return Response.json({error:"body must be a JSON object"},{status:400});let z=J;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(Z){return G5(Z,X5(Z))}}async function Q5(f,Y,J){if(Y.pathname!=="/api/issues")return null;if(f.method==="GET")return vR(J,Y);if(f.method==="POST")return mR(J,f);return Response.json({error:"method not allowed"},{status:405})}function q5(f){return cR.has(String(f??"").trim().toLowerCase())}function H5(f){try{if(!f)return null;let Y=new URL(f);if(Y.protocol!=="http:"&&Y.protocol!=="https:")return null;return Y.hostname}catch{return null}}function nR(f){let Y=H5(f);return Y!==null&&q5(Y)}function B5(f,Y={}){if(!f)return!0;if(nR(f))return!0;let J=Y.allowedHost?.trim();if(!J)return!1;let z=H5(f);return z!==null&&z===J}function j5(f){let Y=String(f??"").trim();return Y&&!q5(Y)?Y:void 0}var cR;var W5=N(()=>{cR=new Set(["localhost","127.0.0.1","::1","[::1]"])});var dR,V5;var K5=N(()=>{dR=["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"],V5=new Set(dR)});var X8={};H1(X8,{resolveRepoInit:()=>L5,resolveEngineLaunchInit:()=>YJ});import{existsSync as D5,readFileSync as iR}from"fs";import{join as IQ}from"path";function aR(f){return D5(IQ(f,U5))?`sh ${U5}`:void 0}function $R(f){let Y=IQ(f,lR);if(!D5(Y))return;try{let J=iR(Y,"utf8");return J.trim().length>0?J:void 0}catch{return}}function L5(f,Y){let J=f?OH(f):{},z=aR(Y)??J.initScript,Z=$R(Y)??J.initPrompt;return{initScript:z&&z.trim().length>0?z:void 0,initPrompt:Z&&Z.trim().length>0?Z:void 0}}function pR(f,Y){if(f.kind==="none")return;if(f.kind==="explicit")return{source:"explicit",text:f.prompt};let J=Y.initPrompt?.trim();return J?{source:"repo-init",text:J}:void 0}function YJ(f,Y,J={kind:"repo-init"}){let z=L5(f,Y);return{initScript:z.initScript,firstMessage:pR(J,z)}}var U5,lR;var jZ=N(()=>{A1();U5=IQ(".kobe","init.sh"),lR=IQ(".kobe","init-prompt.md")});import{existsSync as M5,readFileSync as _R}from"fs";function F5(){Rz=null}function rR(){let f=m9();if(M5(f))return{canonical:f,found:f};let Y=f.replace(/\.yaml$/,".yml");if(M5(Y))return{canonical:f,found:Y};return{canonical:f,found:null}}function TQ(){if(Rz)return Rz;let{canonical:f,found:Y}=rR();if(!Y)return Rz={path:f,exists:!1,doc:null,warnings:[]},Rz;let J=[],z=null;try{let Z=_R(Y,"utf8");z=Bun.YAML.parse(Z)}catch(Z){let G=Z instanceof Error?Z.message:String(Z);J.push(`could not read/parse ${Y}: ${G}`)}return Rz={path:f,exists:!0,doc:z,warnings:J},Rz}var Rz=null;var Q8=N(()=>{i1()});function WZ(f,Y){let J=`alternating [${f}, ${Y}] pairs`;return{layout:J,validateCount:(z)=>z>=2&&z%2===0?null:`needs ${J} (an even number of chords \u2014 got ${z})`}}function Jg(f,Y){let J=f.trim().toLowerCase();if(!J)return{error:"empty chord"};let z=J.split("+"),Z=z.pop()??"";if(Z===""&&z.length>0){if(Z="+",z[z.length-1]==="")z.pop()}if(!Z)return{error:`"${f}": no key after the modifiers`};let G=new Set;for(let H of z){let B=tR[H];if(!B)return{error:`"${f}": unknown modifier "${H}" (use ctrl / cmd / alt / shift)`};G.add(B)}if(Z=eR[Z]??Z,G.has("shift")&&Z.length===1&&!Y?.allowShiftCharacter)return{error:`"${f}": shift+<character> can never match \u2014 terminals deliver shift+letter as a plain character, not a modifier event`};let Q=Yg.filter((H)=>G.has(H)).join("+"),q=Q?`${Q}+${Z}`:Z;if(Z.length>1&&!fg.has(Z))return{chord:q,warning:`"${f}": unrecognized key name "${Z}" \u2014 the chord may never fire`};return{chord:q}}function uQ(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function zg(f){if(f==="darwin")return["darwin","macos","mac"];if(f==="win32")return["win32","windows"];return[f]}function Zg(f){if(!uQ(f))return null;let Y=f.bindings;if(uQ(Y))return Y;return f}function EQ(f,Y,J){let z=[];if(f===null||f===void 0)return{entries:[],warnings:z};if(!uQ(f))return{entries:[],warnings:["config root must be a YAML mapping (e.g. a top-level `bindings:` key)"]};let Z=new Map,G=[];if(f.bindings!==void 0)if(uQ(f.bindings))G.push(f.bindings);else z.push("`bindings:` must be a mapping of id \u2192 chord(s)");for(let Q of zg(Y)){let q=f[Q];if(q===void 0)continue;let H=Zg(q);if(H)G.push(H);else z.push(`\`${Q}:\` must be a mapping (or contain a \`bindings:\` mapping)`)}for(let Q of G)for(let[q,H]of Object.entries(Q)){if(H===null||H===!1||Array.isArray(H)&&H.length===0){Z.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=Jg(K,J?.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}Z.set(q,V)}return{entries:Array.from(Z,([Q,q])=>({id:Q,keys:q})),warnings:z}}function Gg(f,Y){return f===Y||f==="global"||Y==="global"}function O5(f,Y){let J=[],z=[];for(let Z of Y){let G=f.find((j)=>j.id===Z.id);if(!G){J.push(`${Z.id}: unknown binding id (press F1 in kobe for the full list)`);continue}let Q=q8[Z.id];if(Q){J.push(`${Z.id}: not customizable \u2014 ${Q}`);continue}if(G.keys.length===0){J.push(`${Z.id}: not customizable \u2014 the key is handled outside the keymap (doc-only row)`);continue}let q=oR[Z.id];if(q&&Z.keys.length>0){let j=q.validateCount(Z.keys.length);if(j){J.push(`${Z.id}: ${j} \u2014 keeping the default`);continue}}let H=Z.keys.filter((j)=>{if(j.length===1&&sR.has(G.scope))return J.push(`${Z.id}: "${j}" dropped \u2014 a bare character on a ${G.scope}-scope binding would steal typed input (add a modifier)`),!1;return!0});if(H.length===0&&Z.keys.length>0){J.push(`${Z.id}: no chords survived validation \u2014 keeping the default`);continue}if(q&&H.length!==Z.keys.length){J.push(`${Z.id}: a dropped chord would shift the slot layout (${q.layout}) \u2014 keeping the default`);continue}let B=G.keys,V=G;if(V.keys=H,G.hint)if(H.length===0)V.hint=void 0;else G.hint.keys=H.join("/");z.push({id:Z.id,keys:H,defaultKeys:B})}for(let Z of z)for(let G of Z.keys){let Q=f.find((q)=>q.id===Z.id);if(!Q)continue;for(let q of f){if(q.id===Z.id)continue;if(!q.keys.includes(G))continue;if(!Gg(Q.scope,q.scope))continue;J.push(`${Z.id}: "${G}" also fires ${q.id} (${q.scope} scope) \u2014 last registration wins; consider a different chord`)}}return{applied:z,warnings:J}}var q8,oR,sR,tR,eR,fg,Yg;var xQ=N(()=>{q8={"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)"};oR={"sidebar.nav":WZ("down","up"),"files.nav":WZ("down","up"),"sidebar.search.nav":WZ("down","up"),"files.hierarchy":WZ("collapse","expand"),"sidebar.view":WZ("previous view","next view"),"files.tab":WZ("previous tab","next tab")},sR=new Set(["global","workspace","terminal"]),tR={ctrl:"ctrl",control:"ctrl",ctl:"ctrl",cmd:"cmd",command:"cmd",meta:"cmd",super:"cmd",win:"cmd",alt:"alt",option:"alt",opt:"alt",shift:"shift"},eR={esc:"escape",spacebar:"space",pgup:"pageup",pgdn:"pagedown",pgdown:"pagedown"},fg=new Set(["up","down","left","right","pageup","pagedown","home","end","insert","delete","backspace","tab","space","escape","enter","return",...Array.from({length:12},(f,Y)=>`f${Y+1}`)]),Yg=["ctrl","cmd","alt","shift"]});function VZ(f){return f in A5}function Nz(f,Y){let J=f.split("+"),z=J.pop()??"";if(z===""&&J.length>0){if(z="+",J[J.length-1]==="")J.pop()}let Z=new Set(J);if(Z.has("cmd"))return{error:`"${f}": the Command key never reaches tmux \u2014 use ctrl/alt/shift`};let G;if(z.length===1)G=Z.has("shift")?z.toUpperCase():z;else{let H=Qg[z];if(!H)return{error:`"${f}": tmux can't bind the key "${z}"`};G=H}let Q=/^f\d+$/.test(z);if(Z.size===0&&!Q&&!Y?.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(Z.has("ctrl"))q+="C-";if(Z.has("alt"))q+="M-";if(Z.has("shift"))q+="S-";return{key:q+G}}function g5(){let f={};for(let[J,z]of Object.entries(Cz)){let Z=Nz(z,{allowBare:VZ(J)});if("error"in Z)throw Error(`default tmux chord for ${J} failed to translate: ${Z.error}`);f[J]={chord:z,key:Z.key}}let Y=SJ.map((J)=>{let z=Nz(J);if("error"in z)throw Error(`default tmux focus chord ${J} failed to translate`);return{chord:J,key:z.key}});return{binds:f,focus:Y,overridden:new Set,warnings:[]}}function H8(f){let Y=g5(),J=new Set;for(let z of f){if(!z.id.startsWith("tmux."))continue;if(z.id===IY){if(z.keys.length===0){Y.focus=[null,null,null,null],J.add(IY);continue}if(z.keys.length!==SJ.length){Y.warnings.push(`${IY}: 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=Nz(B);if("error"in V){Y.warnings.push(`${IY}: ${V.error} \u2014 keeping the default`),H=!1;break}q.push({chord:B,key:V.key})}if(!H)continue;Y.focus=q,J.add(IY);continue}if(!(z.id in Cz)){Y.warnings.push(`${z.id}: unknown tmux binding id`);continue}let Z=z.id;if(z.keys.length===0){Y.binds[Z]=null,J.add(Z);continue}if(z.keys.length>1)Y.warnings.push(`${Z}: tmux bindings take ONE chord \u2014 using "${z.keys[0]}", ignoring the rest`);let G=z.keys[0],Q=Nz(G,{allowBare:VZ(Z)});if("error"in Q){Y.warnings.push(`${Z}: ${Q.error} \u2014 keeping the default`);continue}if(G!==Cz[Z])J.add(Z);Y.binds[Z]={chord:G,key:Q.key}}return Y.overridden=J,Y}function B8(f){return f.startsWith("tmux.")?{allowShiftCharacter:!0}:{}}function C5(){gz=null}function wQ(){if(gz)return gz;let f=TQ();if(!f.exists||f.doc===null)return gz=g5(),gz;let Y=EQ(f.doc,process.platform,{chordOptsFor:B8}),J=Y.warnings.filter((Z)=>Z.startsWith("tmux.")),z=H8(Y.entries);z.warnings=[...J,...z.warnings];for(let Z of z.warnings)console.warn(`[kobe/keybindings] ${Z}`);return gz=z,gz}var Xg,A5,R5,Cz,IY="tmux.focus",SJ,Qg,gz=null;var hQ=N(()=>{Q8();xQ();Xg={"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"},A5={"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"},R5=["F6","F7","F8","F9","F10","F11"],Cz={...Xg,...A5};SJ=["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],Qg={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,Y)=>[`f${Y+1}`,`F${Y+1}`]))}});async function gG(f,Y){let J=null;for(let Z=0;Z<24;Z++){let G=await ez(f);if(G){if(!Y)return{pane:G,ready:!0};let Q=(await fZ(G)).trim();if(Q.length>0&&Q===J)return{pane:G,ready:!0};J=Q}await N5(250)}return{pane:await ez(f)||await SB(f),ready:!1}}async function CG(f,Y){let J=`kobe-api-${f.replace(/[^A-Za-z0-9]/g,"")}`;await h0(["set-buffer","-b",J,"--",Y]),await h0(["paste-buffer","-p","-d","-b",J,"-t",f]),await N5(qg),await KG(f,"Enter")}async function b5(f,Y){let{pane:J}=await gG(f,!0);if(!J)return;await CG(J,Y.text)}var N5=(f)=>new Promise((Y)=>setTimeout(Y,f)),qg=150;var PQ=N(()=>{u1()});function k5(f,Y){if(f===null)return{kind:"create",reason:"no session with this name \u2014 build fresh"};let J=f.worktree===Y.cwd,z=!Y.vendor||f.vendor===Y.vendor;if(f.claudePaneAlive&&J&&z)return{kind:"reuse",reason:"healthy: engine pane alive, worktree + vendor match"};if(J&&!z&&Y.hasEngineCommand)return{kind:"respawn-engine",reason:`vendor drift: session tagged ${f.vendor===""?"<untagged>":`"${f.vendor}"`}, task wants "${Y.vendor}" \u2014 relaunch engine pane in place (KOB-232)`};if(J&&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(!J)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 "${Y.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 y5;var S5=N(()=>{RQ();gQ();CQ();NQ();bQ();kQ();yQ();y5={claude:ZZ,conductor:GZ,nord:QZ,opencode:qZ,dracula:XZ,tokyonight:BZ,"osaka-jade":HZ}});function Hg(f){let Y=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.exec(f);if(!Y)return null;let J=Y[1];if(J.length===3){let[z,Z,G]=J;return`#${z}${z}${Z}${Z}${G}${G}`.toLowerCase()}return`#${J.slice(0,6)}`.toLowerCase()}function I5(f,Y,J="dark"){let z=f.defs??{};function Z(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 Z(B,[...q,Q])}if(!Q||typeof Q!=="object")return null;let H=Q[J];return typeof H==="string"?Z(H,q):null}let G=f.theme[Y];if(G===void 0)return null;return Z(G,[Y])}function vQ(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function mQ(f){if(!vQ(f))return{ok:!1,reason:"theme must be a JSON object at the top level"};let Y=f;if(!("theme"in Y))return{ok:!1,reason:"missing required key `theme`"};let J=Y.theme;if(!vQ(J))return{ok:!1,reason:"`theme` must be an object map"};if("defs"in Y&&Y.defs!==void 0){if(!vQ(Y.defs))return{ok:!1,reason:"`defs` must be an object map"};for(let[z,Z]of Object.entries(Y.defs))if(typeof Z!=="string")return{ok:!1,reason:`defs.${z} must be a string (hex like "#abc" or a ref name)`}}for(let[z,Z]of Object.entries(J)){if(typeof Z==="string")continue;if(!vQ(Z))return{ok:!1,reason:`theme.${z} must be a string or a { dark, light } object (got ${Z===null?"null":Array.isArray(Z)?"array":typeof Z})`};let G=Z;if(typeof G.dark!=="string")return{ok:!1,reason:`theme.${z}.dark must be a string`};if(typeof G.light!=="string")return{ok:!1,reason:`theme.${z}.light must be a string`}}if("$schema"in Y&&Y.$schema!==void 0&&typeof Y.$schema!=="string")return{ok:!1,reason:"`$schema` must be a string when present"};return{ok:!0,theme:Y}}var j8=()=>{};import{readFileSync as Bg,readdirSync as jg}from"fs";import{join as T5}from"path";function KZ(){return T5(Jf(),"themes")}function NG(){let f=KZ(),Y;try{Y=jg(f)}catch{return[]}let J=[];for(let z of Y){if(!z.endsWith(".json"))continue;let Z=T5(f,z),G;try{let H=Bg(Z,"utf8");G=JSON.parse(H)}catch(H){let B=H instanceof Error?H.message:String(H);console.warn(`[kobe] skipping user theme ${Z}: invalid JSON \u2014 ${B}`);continue}let Q=mQ(G);if(!Q.ok){console.warn(`[kobe] skipping user theme ${Z}: ${Q.reason}`);continue}let q=z.slice(0,-5);J.push({name:q,theme:Q.theme})}return J}var cQ=N(()=>{i1();j8()});import{readFileSync as Wg}from"fs";function Kg(){try{let f=JSON.parse(Wg(mf(),"utf8")),Y=typeof f.activeTheme==="string"&&f.activeTheme?f.activeTheme:"claude",J=typeof f.focusAccent==="string"&&Vg.includes(f.focusAccent)?f.focusAccent:"primary";return{themeName:Y,focusAccentSlot:J,enabled:f.tmuxChromeTheme!=="off"&&f.tmuxBorderTheme!=="off"}}catch{return{themeName:"claude",focusAccentSlot:"primary",enabled:!0}}}function Ug(f){return NG().find((J)=>J.name===f)?.theme??y5[f]??null}function WY(f,...Y){for(let J of Y){let z=I5(f,J);if(z)return z}return null}function u5(f,Y){let J=WY(f,"text"),z=WY(f,"background"),Z=WY(f,"textMuted","text"),G=WY(f,"backgroundPanel","background"),Q=WY(f,"backgroundElement","backgroundPanel","background"),q=WY(f,"backgroundMenu","backgroundElement","backgroundPanel","background"),H=WY(f,"selectedListItemText","background"),B=WY(f,Y,"primary","borderActive","border","text");return{border:WY(f,"border","text"),activeBorder:B,statusBg:G,statusFg:Z,statusMutedFg:Z,windowFg:Z,currentWindowBg:Q,currentWindowFg:B,activityFg:WY(f,"info","primary","text"),bellFg:WY(f,"warning","error","primary","text"),messageBg:q,messageFg:J,messageCommandFg:B,modeBg:B,modeFg:H??z}}function pf(f){let Y=[];if(f.bg)Y.push(`bg=${f.bg}`);if(f.fg)Y.push(`fg=${f.fg}`);if(Y.length===0)return null;if(f.attrs)Y.push(...f.attrs);return Y.join(",")}function x5(f){let Y=pf({bg:f.statusBg,fg:f.statusFg}),J=pf({bg:f.statusBg,fg:f.statusMutedFg}),z=pf({bg:f.statusBg,fg:f.windowFg});return[{key:"border",option:"pane-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:pf({fg:f.border})},{key:"active",option:"pane-active-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:pf({fg:f.activeBorder})},{key:"status",option:"status-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:Y},{key:"status-left",option:"status-left-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:J},{key:"status-right",option:"status-right-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:J},{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:pf({bg:f.currentWindowBg,fg:f.currentWindowFg,attrs:["bold"]})},{key:"activity-window",option:"window-status-activity-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:pf({bg:f.statusBg,fg:f.activityFg})},{key:"bell-window",option:"window-status-bell-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:pf({bg:f.statusBg,fg:f.bellFg,attrs:["bold"]})},{key:"last-window",option:"window-status-last-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:pf({bg:f.statusBg,fg:f.statusFg})},{key:"message",option:"message-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:pf({bg:f.messageBg,fg:f.messageFg})},{key:"message-command",option:"message-command-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:pf({bg:f.messageBg,fg:f.messageCommandFg,attrs:["bold"]})},{key:"mode",option:"mode-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:pf({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 Dg(f){let Y=new Set(f.marker.split(",").map((G)=>G.trim()).filter(Boolean)),J=[],z=[];for(let G of x5(f.hexes))if(G.value){if((f.current[G.key]??"")!==G.value)J.push(["set-option",G.setFlag,G.option,G.value]);z.push(G.key)}else if(Y.has(G.key))J.push(["set-option",G.unsetFlag,G.option]);let Z=z.join(",");if(Z!==f.marker)J.push(Z?["set-option","-g",W8,Z]:["set-option","-gu",W8]);return J}async function E5(f){let{code:Y,stdout:J}=await l0(f);return Y===0?J.trim():""}async function bz(){try{let f=Kg(),Y=f.enabled?Ug(f.themeName):null,J=Y?u5(Y,f.focusAccentSlot):u5({theme:{}},f.focusAccentSlot),z=x5(J),[Z,...G]=await Promise.all([E5(["show-options","-gqv",W8]),...z.map((H)=>E5(["show-options",H.showFlag,H.option]))]),Q=Object.fromEntries(z.map((H,B)=>[H.key,G[B]??""])),q=Dg({marker:Z,current:Q,hexes:J});if(q.length>0)await P1(q)}catch{}}var W8="@kobe_border_theme",Vg;var nQ=N(()=>{i1();u1();S5();cQ();Vg=["primary","success","info"]});function w5(){return c1()[dQ]!==!1}var dQ="zen.keepTasks";var V8=N(()=>{tJ()});var iQ={};H1(iQ,{recordGen:()=>IJ,isLatestGen:()=>c5,genAgeMs:()=>gg,coalesceLayoutWork:()=>Cg,RESIZE_GUARD_MS:()=>Rg,LAYOUT_COALESCE_MS:()=>v5});import{createHash as Lg,randomUUID as Mg}from"crypto";import{mkdirSync as Fg,readFileSync as h5,renameSync as Og,writeFileSync as Ag}from"fs";import{join as P5}from"path";function m5(){return P5(Jf(),"layout-coord")}function K8(f,Y){let J=Lg("sha1").update(f).digest("hex").slice(0,16);return P5(m5(),`${J}.${Y}`)}function IJ(f,Y){let J=Mg();try{Fg(m5(),{recursive:!0});let z=K8(f,Y),Z=`${z}.${J}.tmp`;Ag(Z,`${Date.now()}
56
- ${J}`),Og(Z,z)}catch{}return J}function c5(f,Y,J){try{return h5(K8(f,Y),"utf8").split(`
57
- `)[1]?.trim()===J}catch{return!0}}function gg(f,Y,J=Date.now()){try{let z=Number.parseInt(h5(K8(f,Y),"utf8").split(`
58
- `)[0]??"",10);return Number.isFinite(z)?J-z:Number.POSITIVE_INFINITY}catch{return Number.POSITIVE_INFINITY}}async function Cg(f,Y,J,z=v5){let Z=IJ(f,Y);if(z>0)await new Promise((G)=>setTimeout(G,z));if(!c5(f,Y,Z))return;await J()}var v5=120,Rg=400;var UZ=N(()=>{i1()});function bg(f){let Y=[];for(let J of f.split(`
59
- `)){let z=J.trim();if(!z)continue;let[Z,G,Q,q,H]=z.split("\t");if(!Z||!G||!Q)continue;let B=Number.parseInt(H?.trim()??"",10);Y.push({windowId:Z.trim(),paneId:G.trim(),role:Q.trim(),version:q?.trim()??"",...Number.isFinite(B)?{paneWidth:B}:{}})}return Y}function n5(f,Y){let J=new Map;for(let Z of f){let G=J.get(Z.windowId)??[];G.push(Z),J.set(Z.windowId,G)}let z=[];for(let Z of J.values()){let G=Z.find((B)=>B.role==="claude")?.paneId,Q=Z.find((B)=>B.role==="tasks"),q=Z.find((B)=>B.role==="ops");if(Q&&(Y.force||Q.version!==Y.currentVersion))z.push({role:"tasks",paneId:Q.paneId});let H=Y.force?!0:G&&(Y.vendorChanged||q?.version!==Y.currentVersion);if(q&&H)z.push({role:"ops",paneId:q.paneId,claudePaneId:G??null})}return z}async function U8(f){let{code:Y,stdout:J}=await l0(["list-panes","-s","-t",`=${f}`,"-F",Ng]);if(Y!==0)return null;return bg(J)}function d5(f,Y){let J=C1(),z=o1(),Z=[];for(let G of f){let Q=G.role==="tasks"?MJ(J,{initialTaskId:Y.taskId}):dz({cwd:Y.cwd,taskId:Y.taskId,claudePaneId:G.claudePaneId,cliInvocation:J,vendor:Y.vendor});Z.push(["respawn-pane","-k","-t",G.paneId,"-c",T1(Y.cwd),gf(z+Q)],["set-option","-p","-t",G.paneId,"@kobe_role",G.role],["set-option","-p","-t",G.paneId,VY,t0])}return Z}function kg(f,Y){if(f===0)return"no-engine-pane";return Y===0?"switched":"respawn-failed"}async function i5(f,Y,J,z,Z){let G=await U8(f);if(!G)return"no-engine-pane";let Q=G.filter((V)=>V.role==="claude");if(Q.length===0)return"no-engine-pane";let q=T1(Y),H=[];for(let V of Q){let j=YZ(J,Z),K=gf(oz(Rf(j.argv),z,Y));H.push(["respawn-pane","-k","-c",q,"-t",V.paneId,K]),H.push(j.sessionId?["set-window-option","-t",V.paneId,kY,j.sessionId]:["set-window-option","-u","-t",V.paneId,kY])}let B=await P1(H);return kg(Q.length,B)}async function l5(){let f=await gJ([_Y,Xz,rY]),Y=Number.parseInt(f[_Y]??"",10),J=Number.isFinite(Y)&&Y>0?Gz(Y):zz,z=yg({widthPct:oY(Number.parseInt(f[Xz]??"",10)),heightPct:oY(Number.parseInt(f[rY]??"",10))});return{tasksWidth:J,rcArgs:z}}function yg(f){let Y=[];if(f.widthPct!==null)Y.push("-x",`${f.widthPct}%`);if(f.heightPct!==null)Y.push("-y",`${f.heightPct}%`);return Y}async function a5(){return(await l5()).rcArgs}async function D8(f,Y={}){let{tasksWidth:J,rcArgs:z}=await l5(),Z=await U8(f);if(!Z)return{rows:null,commands:[]};let G=[];for(let Q of Z)if(Q.role==="tasks"&&(Y.force||Q.paneWidth!==J))G.push(["resize-pane","-t",Q.paneId,"-x",`${J}`]);if(z.length>0){for(let Q of Z)if(Q.role==="ops")G.push(["resize-pane","-t",Q.paneId,...z])}return{rows:Z,commands:G}}async function kz(f,Y){IJ(f,"resize");let{rows:J,commands:z}=await D8(f);if(!J)return;let Z=[...z];if(Y)Z.push(...d5(n5(J,{currentVersion:t0,force:!1,vendorChanged:Y.vendorChanged}),Y));if(Z.length>0)await P1(Z)}async function $5(f){if(!await j1(f))return;await kz(f)}async function bG(f){let{code:Y,stdout:J}=await l0(["list-panes","-t",`=${f}`,"-F",`#{@kobe_role} #{pane_width} #{pane_height} #{window_width} #{window_height} #{window_zoomed_flag} #{${zY}} #{${Af}}`]);if(Y!==0)return;let z=J.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 Z=Number.parseInt(z[0][3]?.trim()??"",10),G=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",_Y,`${Gz(B)}`])}let H=z.find(([B])=>B?.trim()==="ops");if(H&&Number.isFinite(Z)&&Z>0&&Number.isFinite(G)&&G>0){let B=Number.parseInt(H[1]?.trim()??"",10),V=Number.parseInt(H[2]?.trim()??"",10),j=Number.isFinite(B)?oY(100*B/Z):null,K=Number.isFinite(V)?oY(100*V/G):null;if(j!==null)Q.push(["set-option","-s",Xz,`${j}`]);if(K!==null)Q.push(["set-option","-s",rY,`${K}`])}if(Q.length>0)await P1(Q)}function Sg(f){let Y=f.split(`
61
- `).map((z)=>z.split("\t")).filter((z)=>(z[0]?.trim()??"")!=="");if(Y.length===0)return!1;if(Y.some((z)=>z[1]?.trim()==="1"))return!1;if(Y.some((z)=>(z[2]?.trim()??"")!==""))return!1;if(Y.some((z)=>(z[3]?.trim()??"")!==""))return!1;let J=new Set(Y.map((z)=>z[0]?.trim()));return J.has("tasks")&&J.has("ops")}async function p5(f){let{code:Y,stdout:J}=await l0(["list-panes","-t",`=${f}`,"-F",`#{@kobe_role} #{window_zoomed_flag} #{${zY}} #{${Af}}`]);if(Y!==0||!Sg(J))return;await bG(f)}async function DZ(f){let Y=await bf(f,["@kobe_worktree","@kobe_task","@kobe_vendor"]),J=Y["@kobe_worktree"]||process.cwd(),z=Y["@kobe_task"]||void 0,Z=Y["@kobe_vendor"]||void 0,G=await U8(f);if(!G)return;let Q=d5(n5(G,{currentVersion:t0,force:!0}),{cwd:J,taskId:z,vendor:Z});if(Q.length>0)await P1(Q);await bz()}var VY="@kobe_pane_version",Ng;var kG=N(()=>{pY();Ef();QY();u1();ZY();nQ();Df();Wz();UZ();Ng=`#{window_id} #{pane_id} #{@kobe_role} #{${VY}} #{pane_width}`});function Tg(f){let Y=[];for(let J of f.split(`
62
- `)){let z=J.trim();if(!z)continue;let[Z,G,Q,q,H,B,V]=z.split("\t");if(!Z)continue;let j=Number.parseInt(q??"",10),K=Number.parseInt(H??"",10),L=Number.parseInt(B??"",10),O=Number.parseInt(V??"",10);Y.push({paneId:Z.trim(),role:G?.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 Y}function ug(f){let Y=f.find((z)=>z.role===Zz);if(!Y)return{kind:"missing-engine"};let J=f.filter((z)=>z.role===rZ);if(J.length+1>=vH)return{kind:"maxed"};if(J.length===0)return{kind:"split",targetPane:Y.paneId,direction:"-h"};if(J.length===1)return{kind:"split",targetPane:J[0]?.paneId??Y.paneId,direction:"-v"};return{kind:"split",targetPane:Y.paneId,direction:"-v"}}function L8(f){return f.find((Y)=>Y.role===JY)??f.find((Y)=>Y.role==="")}function Eg(f){return 100-(oY(f??Number.NaN)??tZ)}function xg(f){let Y=Number.parseInt(f??"",10);return Number.isFinite(Y)&&Y>0?Y:void 0}async function wf(f,Y){let J=Y?.trim()||`=${f}`,{code:z,stdout:Z}=await l0(["list-panes","-t",J,"-F",Ig]);return z===0?Tg(Z):null}async function wg(f){let{code:Y,stdout:J}=await l0(["list-windows","-t",`=${f}`,"-F","#{window_active}\t#{window_id}"]);if(Y!==0)return"";for(let z of J.split(`
63
- `)){let[Z,G]=z.split("\t");if(Z?.trim()==="1"&&G?.trim())return G.trim()}return""}async function JJ(f,Y){let{code:J,stdout:z}=await l0(["show-options","-wqv","-t",f,Y]);return J===0?z.trim():""}async function M8(f,Y,J){await h0(["set-window-option","-t",f,Y,J])}async function TJ(f,Y){await h0(["set-window-option","-u","-t",f,Y])}async function F8(f){let{code:Y,stdout:J}=await l0(["display-message","-p","-t",f,"#{pane_id}"]);return Y===0&&J.trim()===f}async function y1(f,Y){await h0(["display-message","-t",f,Y])}async function lQ(f){let Y=await bf(f,["@kobe_worktree","@kobe_task","@kobe_vendor"]);return{cwd:Y["@kobe_worktree"]||process.cwd(),taskId:Y["@kobe_task"]||void 0,vendor:Y["@kobe_vendor"]||void 0}}function hg(f){let Y=C1(),J=o1();return gf(J+dz({cwd:f.cwd,taskId:f.taskId,claudePaneId:f.enginePaneId,cliInvocation:Y,vendor:f.vendor}))}async function Pg(f,Y){return Y?.trim()||await wg(f)}async function vg(f,Y){let J=await wf(f,Y);if(!J)return;let z=ug(J);if(z.kind==="missing-engine"){await y1(Y,"kobe: no engine pane in this window");return}if(z.kind==="maxed"){await y1(Y,`kobe: workspace split limit is ${vH} panes`);return}let{cwd:Z}=await lQ(f),{code:G,stdout:Q}=await l0(["split-window",z.direction,"-t",z.targetPane,"-l","50%","-c",T1(Z),"-P","-F","#{pane_id}",gf("true")]),q=Q.trim();if(G!==0||!q)return;await P1([["set-option","-p","-t",q,"@kobe_role",rZ],["select-pane","-t",q]])}async function mg(f,Y){let J=await wf(f,Y);if(!J)return;let z=J.filter((Q)=>Q.role===rZ);if(z.length===0){await y1(Y,"kobe: no workspace split to close");return}let G=z.find((Q)=>Q.active)??z[z.length-1];if(!G)return;await h0(["kill-pane","-t",G.paneId])}async function cg(f,Y){let J=await wf(f,Y);if(!J)return;let z=J.filter((Z)=>Z.role===rZ);if(z.length===0){await y1(Y,"kobe: no workspace splits to reset");return}await P1(z.map((Z)=>["kill-pane","-t",Z.paneId]))}async function _5(){let f=await gJ([_Y]);return Gz(xg(f[_Y])??zz)}async function ng(f){let{cwd:Y,taskId:J}=await lQ(f),z=C1(),Z=o1();return{cwd:Y,command:gf(Z+MJ(z,{initialTaskId:J}))}}async function r5(f,Y){let J=await wf(f,Y);if(!J)return;let z=J.find((M)=>M.role===YY);if(z){await h0(["kill-pane","-t",z.paneId]);return}let Z=L8(J),G=J.find((M)=>M.role===Zz);if(!G){await y1(Y,"kobe: cannot restore file pane in this layout");return}let{cwd:Q,taskId:q,vendor:H}=await lQ(f),B=hg({cwd:Q,taskId:q,vendor:H,enginePaneId:G.paneId}),V=Z?["split-window","-v","-b","-t",Z.paneId,"-l",`${await dg()}%`,"-c",T1(Q),"-P","-F","#{pane_id}",B]:["split-window","-h","-t",G.paneId,"-l",`${await O8()}%`,"-c",T1(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",YY],["set-option","-p","-t",L,VY,t0]];if(Z?.role==="")O.push(["set-option","-p","-t",Z.paneId,"@kobe_role",JY]);await P1(O)}async function dg(){let f=await gJ([rY]);return oY(Number.parseInt(f[rY]??"",10))??tZ}async function O8(){let f=await gJ([Xz]);return oY(Number.parseInt(f[Xz]??"",10))??100-xX}async function o5(){let f=await gJ([rY]);return Eg(Number.parseInt(f[rY]??"",10))}async function ig(f){let{code:Y,stdout:J}=await l0(["list-windows","-t",`=${f}`,"-F","#{window_index}"]);if(Y!==0)return new Set;return new Set(J.split(`
64
- `).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)))}async function s5(f,Y){let J=await ig(f),z=mW(Y);while(J.has(z))z++;return z}async function t5(f){let Y=sZ(f);if(await j1(Y))return Y;return await h0(["new-session","-d","-s",Y,"-n","hidden-panes","-c",T1(process.cwd()),"while :; do sleep 3600; done"]),Y}async function A8(f){let Y=sZ(f);if(!await j1(Y))return;let{code:J,stdout:z}=await l0(["list-panes","-s","-t",`=${Y}`,"-F","#{@kobe_role}"]);if(J!==0)return;if(!z.split(`
65
- `).some((G)=>{let Q=G.trim();return Q===JY||Q===df}))await h0(["kill-session","-t",`=${Y}`])}async function lg(f,Y){await e5(f,Y,zY)}async function ag(f,Y){await e5(f,Y,Af)}async function e5(f,Y,J){let z=await JJ(Y,J);if(!z)return;if(await F8(z))await h0(["kill-pane","-t",z]);await TJ(Y,J)}async function $g(f,Y){await lg(f,Y),await ag(f,Y),await A8(f)}function fK(f){return f.find((Y)=>Y.role===Zz)??f[0]}async function R8(f,Y,J){let z=fK(J);if(!z)return await y1(Y,"kobe: cannot restore Tasks pane in this layout"),!1;let Z=await _5(),{cwd:G,command:Q}=await ng(f),{code:q,stdout:H}=await l0(["split-window","-h","-b","-t",z.paneId,"-l",`${Z}`,"-c",T1(G),"-P","-F","#{pane_id}",Q]),B=H.trim();if(q!==0||!B)return!1;return await P1([["set-option","-p","-t",B,"@kobe_role",df],["set-option","-p","-t",B,VY,t0],["select-pane","-t",B]]),await TJ(Y,Af),await y1(Y,"kobe: Tasks pane restored"),!0}async function YK(f,Y,J){let z=await t5(f),Z=await s5(z,Y),{code:G,stdout:Q}=await l0(["break-pane","-d","-s",J.paneId,"-t",`${z}:${Z}`,"-P","-F","#{pane_id}"]),q=Q.trim()||J.paneId;if(G!==0||!q){await y1(Y,"kobe: could not hide Tasks pane");return}await M8(Y,Af,q),await y1(Y,"kobe: Tasks pane hidden")}async function g8(f,Y,J){let z=await wf(f,Y);if(!z)return;if(!await F8(J)){await TJ(Y,Af);let Q=z.find((q)=>q.role===df);if(Q){await h0(["select-pane","-t",Q.paneId]);return}await R8(f,Y,z);return}let Z=fK(z);if(!Z){await y1(Y,"kobe: cannot restore Tasks pane in this layout");return}if(await h0(["join-pane","-h","-b","-s",J,"-t",Z.paneId,"-l",`${await _5()}`])!==0){await y1(Y,"kobe: could not restore Tasks pane");return}await P1([["set-option","-p","-t",J,"@kobe_role",df],["set-option","-p","-t",J,VY,t0],["select-pane","-t",J]]),await TJ(Y,Af),await A8(f),await y1(Y,"kobe: Tasks pane restored")}async function pg(f,Y){let J=await JJ(Y,Af);if(J){await g8(f,Y,J);return}let z=await wf(f,Y);if(!z)return;let Z=z.find((G)=>G.role===df);if(Z){await YK(f,Y,Z);return}await R8(f,Y,z)}async function _g(f,Y){let J=await JJ(Y,Af);if(J){await g8(f,Y,J);return}let z=await wf(f,Y);if(!z)return;let Z=z.find((G)=>G.role===df);if(Z){await h0(["select-pane","-t",Z.paneId]);return}await R8(f,Y,z)}async function JK(f,Y,J){if(J.role==="")await h0(["set-option","-p","-t",J.paneId,"@kobe_role",JY]);let z=await t5(f),Z=await s5(z,Y),{code:G,stdout:Q}=await l0(["break-pane","-d","-s",J.paneId,"-t",`${z}:${Z}`,"-P","-F","#{pane_id}"]),q=Q.trim()||J.paneId;if(G!==0||!q){await y1(Y,"kobe: could not hide terminal pane");return}await M8(Y,zY,q),await y1(Y,"kobe: Terminal pane hidden")}async function zK(f,Y,J){let z=J.find((V)=>V.role===YY),Z=J.find((V)=>V.role===Zz);if(!z&&!Z)return await y1(Y,"kobe: cannot restore terminal pane in this layout"),!1;let{cwd:G}=await lQ(f),Q=z?["split-window","-v","-t",z.paneId,"-l",`${await o5()}%`,"-c",T1(G),"-P","-F","#{pane_id}"]:["split-window","-h","-t",Z?.paneId??"","-l",`${await O8()}%`,"-c",T1(G),"-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",JY]),await TJ(Y,zY),await y1(Y,"kobe: Terminal pane restored"),!0}async function ZK(f,Y,J){let z=await wf(f,Y);if(!z)return;if(!await F8(J)){await TJ(Y,zY),await zK(f,Y,z);return}let Z=z.find((B)=>B.role===YY),G=z.find((B)=>B.role===Zz);if(!Z&&!G){await y1(Y,"kobe: cannot restore terminal pane in this layout");return}let Q=Z?["join-pane","-v","-s",J,"-t",Z.paneId,"-l",`${await o5()}%`]:["join-pane","-h","-s",J,"-t",G?.paneId??"","-l",`${await O8()}%`];if(await h0(Q)!==0){await y1(Y,"kobe: could not restore terminal pane");return}await h0(["set-option","-p","-t",J,"@kobe_role",JY]),await TJ(Y,zY),await A8(f),z=await wf(f,Y);let H=z?.find((B)=>B.paneId===J);if(H)await h0(["select-pane","-t",H.paneId]);await y1(Y,"kobe: Terminal pane restored")}async function rg(f,Y){let J=await JJ(Y,zY);if(J){await ZK(f,Y,J);return}let z=await wf(f,Y);if(!z)return;let Z=L8(z);if(Z){await JK(f,Y,Z);return}await zK(f,Y,z)}async function og(f){if((await Kz(f,oZ)).length>0){await tg(f);return}await sg(f)}async function GK(f){let{code:Y,stdout:J}=await l0(["list-windows","-t",`=${f}`,"-F","#{window_id}"]);if(Y!==0)return[];return J.split(`
66
- `).map((z)=>z.trim()).filter((z)=>z.length>0)}async function XK(f,Y){return!!(await wf(f,Y))?.some((z)=>z.role===Zz)}async function sg(f){let Y=await GK(f);for(let J of Y){if(!await XK(f,J))continue;if(await JJ(J,LJ))continue;await qK(f,J)}await RJ(f,oZ,"1"),await y1(`=${f}`,"kobe: Zen mode on \u2014 all tabs")}async function tg(f){let Y=await GK(f);for(let J of Y){let z=await JJ(J,LJ);if(z)await eg(f,J,z)}await h0(["set-option","-u","-t",f,oZ]),await y1(`=${f}`,"kobe: Zen mode off \u2014 all tabs")}async function QK(f,Y){if((await Kz(f,oZ)).length===0)return;if(await JJ(Y,LJ))return;if(!await XK(f,Y))return;await qK(f,Y)}async function qK(f,Y){let J=await wf(f,Y);if(!J)return;let z=[],Z=J.find((Q)=>Q.role===YY);if(Z)await h0(["kill-pane","-t",Z.paneId]),z.push(YY);let G=L8(J);if(G)await JK(f,Y,G),z.push(JY);if(!w5()){let Q=J.find((q)=>q.role===df);if(Q)await YK(f,Y,Q),z.push(df)}if(z.length===0){await y1(Y,"kobe: already focused \u2014 nothing to hide");return}await M8(Y,LJ,z.join(",")),await y1(Y,"kobe: Zen mode on")}async function eg(f,Y,J){let z=new Set(J.split(",").map((Z)=>Z.trim()));if(z.has(df)){let Z=await JJ(Y,Af);if(Z)await g8(f,Y,Z)}if(z.has(YY)){let Z=await wf(f,Y);if(Z&&!Z.some((G)=>G.role===YY))await r5(f,Y)}if(z.has(JY)){let Z=await JJ(Y,zY);if(Z)await ZK(f,Y,Z)}await TJ(Y,LJ),await y1(Y,"kobe: Zen mode off")}async function fC(f){let{code:Y,stdout:J}=await l0(["list-windows","-t",`=${f}`,"-F","#{window_id}"]);if(Y!==0)return 0;return J.split(`
67
- `).filter((z)=>z.trim().length>0).length}async function YC(f,Y){if(await fC(f)<=1){await y1(Y,"Cannot close the only ChatTab");return}await $g(f,Y),await h0(["kill-window","-t",Y])}async function aQ(f,Y,J={}){if(!await j1(f))return;let z=await Pg(f,J.windowId);if(!z)return;switch(Y){case"workspace-split":await vg(f,z);return;case"workspace-close":await mg(f,z);return;case"workspace-reset":await cg(f,z);return;case"tasks-toggle":await pg(f,z);return;case"tasks-restore":await _g(f,z);return;case"ops-toggle":await r5(f,z);return;case"terminal-toggle":await rg(f,z);return;case"zen-toggle":await og(f);return;case"chat-tab-close":await YC(f,z);return}}var Ig="#{pane_id}\t#{@kobe_role}\t#{pane_active}\t#{pane_width}\t#{pane_height}\t#{window_width}\t#{window_height}";var $Q=N(()=>{pY();QY();V8();u1();ZY();Df();Wz();kG()});function _Q(f,Y){return[["bind-key","-n",f,"if-shell","-F","#{?#{@kobe_surface},0,1}","previous-window"],["bind-key","-n",Y,"if-shell","-F","#{?#{@kobe_surface},0,1}","next-window"]]}function rQ(f,Y="kill-window"){return["bind-key","-n",f,"if-shell","-F","#{>:#{session_windows},1}",Y,"display-message 'Cannot close the only ChatTab'"]}function oQ(f){return["bind-key","-n",f,"command-prompt","-I","#{window_name}","rename-window -- '%%'"]}function sQ(f){return[["bind-key","-n",f,"command-prompt","-p",pQ],["bind-key","T","command-prompt","-p",pQ]]}function C8(f){return f.startsWith("C-")&&f.length===3?`^${f.slice(2)}`:f}function tQ(f){return`${[f.focusLeft?`${C8(f.focusLeft)} tasks`:null,f.detach?`${C8(f.detach)} detach`:null,f.newTab?`${C8(f.newTab)} tab`:null,f.layoutSplits?`prefix ${f.layoutSplits} splits`:null,f.layoutPanes?`prefix ${f.layoutPanes} panes`:null].filter((J)=>J!==null).join(" ")} `}async function b8(f,Y){let J=o1(),z=await QQ(),Z=gf(Y.opsCommand??J+dz({cwd:Y.cwd,taskId:Y.taskId,claudePaneId:f,cliInvocation:Y.inv,vendor:Y.vendor})),{stdout:G}=await WG([["set-option","-p","-t",f,"@kobe_role","claude"],["set-window-option","-t",f,N8,"idle"],["split-window","-h","-b","-t",f,"-l",`${z}`,"-c",T1(Y.cwd),"-P","-F","tasks=#{pane_id}",gf(J+MJ(Y.inv,{initialTaskId:Y.taskId}))],["split-window","-h","-t",f,"-l",`${100-xX}%`,"-c",T1(Y.cwd),"-P","-F","ops=#{pane_id}",Z],["split-window","-v","-l",`${100-tZ}%`,"-c",T1(Y.cwd),"-P","-F","shell=#{pane_id}"],["select-pane","-t",f]]),Q=Object.fromEntries(G.split(`
68
- `).map((q)=>q.trim()).filter(Boolean).map((q)=>q.split("=",2)));if(await P1([...Q.tasks?[["set-option","-p","-t",Q.tasks,"@kobe_role",df]]:[],...Q.tasks?[["set-option","-p","-t",Q.tasks,VY,t0]]:[],...Q.ops?[["set-option","-p","-t",Q.ops,"@kobe_role",YY]]:[],...Q.ops?[["set-option","-p","-t",Q.ops,VY,t0]]:[],...Q.shell?[["set-option","-p","-t",Q.shell,"@kobe_role",JY]]:[]]),Q.ops){let q=await a5();if(q.length>0)await h0(["resize-pane","-t",Q.ops,...q])}}async function HK(f,Y){if(!await j1(f))return;let J=await bf(f,["@kobe_worktree","@kobe_task","@kobe_vendor",jG]),z=J["@kobe_worktree"]||process.cwd(),Z=J["@kobe_task"]||void 0,G=J[jG]||void 0,Q=Y??J["@kobe_vendor"];if(Y)await JC(f,Z,Y);let q=yf(Q),H=YZ(q,Q),B=C1(),j=(await l0(["new-window","-t",`=${f}`,"-c",T1(z),"-P","-F","#{pane_id}",gf(oz(Rf(H.argv),G,z))])).stdout.trim();if(!j)return;if(H.sessionId)await CJ(j,kY,H.sessionId);await b8(j,{cwd:z,taskId:Z,inv:B,vendor:Q});let{stdout:K}=await l0(["display-message","-p","-t",j,"#{window_id}"]),L=K.trim();if(L)await QK(f,L)}async function fq(f){if(!await j1(f))return;let J=(await bf(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=C1(),G=`${o1()}${z.map(G1).join(" ")} settings`;await HY(f,{cwd:T1(J),command:G,name:"settings",surface:!0})}async function Yq(f){if(!await j1(f))return;let J=(await bf(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=C1(),G=`${o1()}${z.map(G1).join(" ")} help-page`;await HY(f,{cwd:T1(J),command:G,name:"help",surface:!0})}async function Jq(f,Y){if(!await j1(f))return;let z=(await bf(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),Z=C1(),G=o1(),Q=Y?` --repo ${G1(Y)}`:"",q=`${G}${Z.map(G1).join(" ")} new-task${Q}`;await HY(f,{cwd:T1(z),command:q,name:"new task",surface:!0})}async function zq(f){if(!await j1(f))return;let J=(await bf(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=C1(),G=`${o1()}${iW({cliInvocation:z})}`;await HY(f,{cwd:T1(J),command:G,name:"update",surface:!0})}async function BK(f){if(!await j1(f))return;let J=(await bf(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=C1(),G=`${o1()}${z.map(G1).join(" ")} quick-task --session ${G1(f)}`;await HY(f,{cwd:T1(J),command:G,name:"quick task",surface:!0})}async function JC(f,Y,J){if(await RJ(f,"@kobe_vendor",J),!Y)return;try{let{connectOrStartDaemon:z}=await Promise.resolve().then(() => (Lf(),Zq)),Z=await z();try{await Z.request("task.setVendor",{taskId:Y,vendor:J})}finally{Z.close()}}catch(z){console.error("[kobe tmux] failed to persist selected engine vendor:",z)}}var pQ,N8="@kobe_tab_state",yG="#{?#{==:#{@kobe_tab_state},running},\u25CF,#{?#{==:#{@kobe_tab_state},done},\u2713,#{?#{==:#{@kobe_tab_state},error},!,#{?#{==:#{@kobe_tab_state},unknown},?,\u25CB}}}} #I:#W",eQ;var k8=N(()=>{pY();Ef();QY();u1();ZY();$1();Df();Wz();$Q();kG();pQ=`engine (${m1.join("/")}/\u2026)`;eQ=yG});var _f={};H1(_f,{tmuxWindowSizeArgsForClient:()=>I8,tmuxSessionName:()=>L1,tmuxInitialSizeArgs:()=>WK,tmuxInitialClientSize:()=>S8,tmuxAvailable:()=>bY,switchClientBeforeKill:()=>yY,sessionExists:()=>j1,selectTasksPane:()=>BC,runLayoutAction:()=>aQ,resyncWindowToClient:()=>GC,refreshKobeWorkspacePanes:()=>DZ,quickCreate:()=>BK,prepareWindowForSwitch:()=>Xq,prepareWindowForAttach:()=>Gq,parseTmuxClientRows:()=>VK,parseObservedSession:()=>DK,openUpdateTab:()=>zq,openSettingsTab:()=>fq,openNewTaskTab:()=>Jq,openHelpTab:()=>Yq,newChatTab:()=>HK,kobeStatusRight:()=>tQ,killSession:()=>af,healSessionLayout:()=>$5,focusBindCommand:()=>UK,ensureSession:()=>EJ,currentSessionName:()=>kf,clientsWithConflictingSize:()=>KK,chatTabSwitchBindings:()=>_Q,chatTabRenameBinding:()=>oQ,chatTabCloseBinding:()=>rQ,chatTabChooseEngineBindings:()=>sQ,captureGlobalLayoutOnDrag:()=>p5,captureGlobalLayout:()=>bG,attachArgv:()=>tz,PANE_VERSION_OPTION:()=>VY,CHAT_TAB_STATUS_FORMAT:()=>yG,CHAT_TAB_STATUS_CURRENT_FORMAT:()=>eQ,CHAT_TAB_STATE_OPTION:()=>N8,CHAT_TAB_ENGINE_PROMPT:()=>pQ});function WK(f=process.stdout,Y=process.env){let J=S8(f,Y);return J?["-x",`${J.columns}`,"-y",`${J.rows}`]:[]}function S8(f=process.stdout,Y=process.env){let J=uJ(f.columns)??uJ(Y.COLUMNS),z=uJ(f.rows)??uJ(Y.LINES);return J&&z?{columns:J,rows:z}:null}function uJ(f){let Y=typeof f==="number"?f:typeof f==="string"?Number.parseInt(f,10):Number.NaN;return Number.isInteger(Y)&&Y>0?Y:void 0}function VK(f){let Y=[];for(let J of f.split(`
69
- `)){let[z,Z,G,Q,q]=J.split("\t"),H=uJ(G?.trim()),B=uJ(Q?.trim());if(!z?.trim()||!Z?.trim()||!H||!B)continue;Y.push({name:z.trim(),session:Z.trim(),width:H,height:B,flags:q?.trim()??""})}return Y}function KK(f,Y,J,z={}){return f.filter((Z)=>Z.session===Y).filter((Z)=>Z.name!==z.currentClientName).filter((Z)=>Z.width!==J.columns||Z.height!==J.rows).map((Z)=>Z.name)}function I8(f,Y){let J=Math.max(1,f.rows-(Y.status?.trim()==="on"?1:0));return["-x",`${f.columns}`,"-y",`${J}`]}async function T8(f,Y,J={}){if(!Y)return;let{code:z,stdout:Z}=await l0(["list-clients","-t",`=${f}`,"-F",zC]);if(z!==0)return;let G=KK(VK(Z),f,Y,J),Q=[];if(J.currentClientName)Q.push(["refresh-client","-f","!ignore-size","-t",J.currentClientName]);for(let q of G)Q.push(["refresh-client","-f","ignore-size","-t",q]);if(Q.length>0)await P1(Q)}async function Gq(f){IJ(f,"resize");let Y=S8();await T8(f,Y);let J=Y?["-x",`${Y.columns}`,"-y",`${Y.rows}`]:[];if(J.length>0)await h0(["resize-window","-t",`=${f}`,...J]);await kz(f)}async function ZC(){let{code:f,stdout:Y}=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[J,z,Z,G]=Y.trim().split("\t"),Q=uJ(z),q=uJ(Z),H=Q&&q?{columns:Q,rows:q}:null;return{sizeArgs:H?I8(H,{status:G}):[],clientSize:H,clientName:J?.trim()||void 0}}async function Xq(f){IJ(f,"resize");let Y=await ZC();await T8(f,Y.clientSize,{currentClientName:Y.clientName});let J=Y.sizeArgs;if(J.length>0)await h0(["resize-window","-t",`=${f}`,...J]);await kz(f)}async function GC(f,Y){if(!Y.size)return;IJ(f,"resize"),await T8(f,Y.size,{currentClientName:Y.clientName});let J=I8(Y.size,{status:Y.status}),{commands:z}=await D8(f,{force:!0});await P1([["resize-window","-t",`=${f}`,...J],...z])}function UK(f,Y,J){let z=`#{?window_zoomed_flag,1,#{?${XC[Y]},,1}}`;if(J)return["bind-key","-n",f,"if-shell","-F",z,`select-pane ${Y}`,J];return["bind-key","-n",f,"if-shell","-F",z,`select-pane ${Y}`]}async function EJ(f){let Y=y8.get(f.name);if(Y)return Y;let J=HC(f);y8.set(f.name,J);try{return await J}finally{y8.delete(f.name)}}function DK(f){let Y="",J="",z=!1,Z=new Set;for(let G of f.split(`
70
- `)){let[Q,q,H,B,V]=G.split("\t");if(!Q?.trim())continue;if(Z.add(Q.trim()),!Y&&B?.trim())Y=B.trim();if(!J&&V?.trim())J=V.trim();if(q?.trim()==="1"&&H?.trim()==="claude")z=!0}return{worktree:Y,vendor:J,claudePaneAlive:z,windowCount:Z.size}}async function qC(f){if(!await j1(f))return null;let{code:Y,stdout:J}=await l0(["list-panes","-s","-t",`=${f}`,"-F",QC]);if(Y!==0)return{worktree:"",vendor:"",claudePaneAlive:!1,windowCount:0};return DK(J)}async function HC(f){let Y=f.launchInit,J=await qC(f.name),z=k5(J,{cwd:f.cwd,vendor:f.vendor,hasEngineCommand:f.command.length>0}),Z=oV(f.repo);if(z.kind==="reuse")return await kz(f.name,{cwd:f.cwd,taskId:f.taskId,vendor:f.vendor}),!0;if(z.kind==="respawn-engine"){let q0=await i5(f.name,f.cwd,f.command,Z,f.vendor);if(q0==="switched"){if(f.vendor)await RJ(f.name,"@kobe_vendor",f.vendor);return await kz(f.name,{cwd:f.cwd,taskId:f.taskId,vendor:f.vendor,vendorChanged:!0}),!0}if(q0==="respawn-failed")return await kz(f.name,{cwd:f.cwd,taskId:f.taskId,vendor:f.vendor}),!0}if(z.kind==="rebuild"||z.kind==="respawn-engine")await af(f.name);let G=C1(),Q=YZ(f.command,f.vendor),q=f.repo!==void 0&&f.cwd===f.repo,H=q||Z?void 0:f.taskId,B=q&&!Z?f.taskId:void 0,V=MQ(LQ(Q.argv,f.vendor,H),f.vendor,B),j=oz(Rf(V),Z,f.cwd),L=(await l0(["new-session","-d","-s",f.name,"-c",T1(f.cwd),...WK(),"-P","-F","#{pane_id}",nW(j,{initScript:Z?void 0:Y?.initScript,markerPath:!Z&&Y?.initScript?c9(f.cwd):void 0,timeoutSeconds:mH(process.env.KOBE_REPO_INIT_TIMEOUT_SECONDS)})])).stdout.trim();if(!L)return console.error("[kobe tmux] new-session returned no pane id; session creation failed"),!1;if(Q.sessionId)await CJ(L,kY,Q.sessionId);await P1([...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]]:[],...Z?[["set-option","-t",f.name,jG,Z]]:[]]),await b8(L,{cwd:f.cwd,taskId:f.taskId,opsCommand:f.opsCommand,inv:G,vendor:f.vendor});let O=o1(),M=G.map(G1).join(" "),R=`${O}${M} new-chattab --session '#{session_name}'`,S=`${R} --vendor '%%'`,a=`run-shell ${G1(S)}`,b=`${O}${M} focus-tasks --session '#{session_name}' --window '#{window_id}'`,g=`run-shell ${G1(b)}`,C=(q0)=>`${O}${M} layout --session '#{session_name}' --window '#{window_id}' --action ${q0}`,y=C("tasks-restore"),r=`run-shell ${G1(y)}`,z0=C("chat-tab-close"),t=`run-shell ${G1(z0)}`,J0=`${O}${M} heal-layout --session '#{session_name}'`,T=`run-shell -b ${G1(J0)}`,B0=`${O}${M} resync-window --session '#{session_name}' --client '#{client_name}' --cols '#{client_width}' --rows '#{client_height}' --status '#{status}'`,_=`run-shell -b ${G1(B0)}`,D0=`${O}${M} capture-layout --session '#{session_name}'`,R0=`run-shell -b ${G1(D0)}`,$=lW({tmuxSocket:qY}),x=wQ(),e=R5.map((q0)=>["unbind-key","-n",q0]);if(x.overridden.has(IY))for(let q0 of SJ){let k0=Nz(q0);if("key"in k0)e.push(["unbind-key","-n",k0.key])}for(let q0 of x.overridden){if(q0===IY)continue;let k0=Cz[q0],w0=VZ(q0),I0=Nz(k0,{allowBare:w0});if("key"in I0)e.push(w0?["unbind-key",I0.key]:["unbind-key","-n",I0.key])}let I=["-L","-D","-U","-R"],Z0=x.focus.flatMap((q0,k0)=>{let w0=I[k0],I0=w0==="-L"?r:void 0;return q0&&w0?[UK(q0.key,w0,I0)]:[]}),u=x.binds,P=(q0,k0)=>{let w0=u[q0];return w0?[["bind-key",w0.key,"run-shell",C(k0)]]:[]},X0=(...q0)=>{let k0=q0.map((w0)=>u[w0]?.chord).filter((w0)=>!!w0);return k0.length>0?k0.join("/"):null};await P1([["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",yG],["set-option","-g","window-status-current-format",eQ],["set-option","-g","status-right",tQ({focusLeft:x.focus[0]?.key??null,detach:u["tmux.detach"]?.key??null,newTab:u["tmux.tab.new"]?.key??null,layoutSplits:X0("tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"),layoutPanes:X0("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",_],["set-hook","-g","window-layout-changed",R0],...e,...u["tmux.detach"]?[["bind-key","-n",u["tmux.detach"].key,"if-shell","-F",`#{?#{${Af}},1,#{==:#{@kobe_role},tasks}}`,"detach-client",g]]:[],...Z0,...u["tmux.tab.new"]?[["bind-key","-n",u["tmux.tab.new"].key,"run-shell",R]]:[],...u["tmux.tab.chooseEngine"]?sQ(u["tmux.tab.chooseEngine"].key).map((q0)=>[...q0,a]):[],...u["tmux.tab.prev"]&&u["tmux.tab.next"]?_Q(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"]?[rQ(u["tmux.tab.close"].key,t)]:[],...u["tmux.tab.rename"]?[oQ(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 bz(),await h0(["select-pane","-t",L]);let V0=Y?.firstMessage;if(V0)b5(f.name,V0).catch((q0)=>console.error("[kobe tmux] first message delivery failed:",q0));return!0}async function jK(f,Y,J){let z=J?.trim()||`=${f}`,{code:Z,stdout:G}=await l0(["list-panes","-t",z,"-F","#{pane_id}\t#{@kobe_role}"]);if(Z!==0)return"";for(let Q of G.split(`
71
- `)){let[q,H]=Q.split("\t");if(q?.trim()&&H?.trim()===Y)return q.trim()}return""}async function BC(f,Y={}){if(!await j1(f))return"";let J=await jK(f,"tasks",Y.windowId);if(!J)await aQ(f,"tasks-restore",{windowId:Y.windowId}),J=await jK(f,"tasks",Y.windowId);if(!J)return"";return await h0(["select-pane","-t",J]),J}var zC="#{client_name}\t#{client_session}\t#{client_width}\t#{client_height}\t#{client_flags}",XC,y8,QC="#{window_id}\t#{window_active}\t#{@kobe_role}\t#{@kobe_worktree}\t#{@kobe_vendor}";var Gf=N(()=>{pY();Ef();i1();QY();u1();hQ();PQ();ZY();nQ();k8();Wz();$Q();UZ();kG();u1();k8();kG();$Q();XC={"-L":"pane_at_left","-D":"pane_at_bottom","-U":"pane_at_top","-R":"pane_at_right"};y8=new Map});async function jC(f,Y){let{task:J}=await f.request("task.get",{taskId:Y});return J}async function u8(f,Y){let J=await jC(f,Y);if(J.worktreePath)return{task:J,worktreePath:J.worktreePath};let{worktreePath:z}=await f.request("task.ensureWorktree",{taskId:Y});if(!z)throw Error(`task ${Y} has no worktree`);return{task:J,worktreePath:z}}async function LK(f,Y){let{task:J,worktreePath:z}=await u8(f,Y),Z=L1(Y);if(!await j1(Z)){let G=YJ(J.repo??"",z,{kind:"repo-init"});if(!await EJ({name:Z,cwd:z,command:yf(J.vendor,J.modelEffort),taskId:Y,vendor:J.vendor,launchInit:G}))throw Error(`failed to start tmux session for ${Y}`)}return{session:Z,worktreePath:z}}function WC(f){return EX(f,{bareSafe:!0})}async function MK(f,Y){let{task:J,worktreePath:z}=await u8(f,Y),Z=J.kind==="main"?void 0:Y,G=J.kind==="main"?Y:void 0,Q=[...MQ(LQ(yf(J.vendor,J.modelEffort),J.vendor,Z),J.vendor,G)],q=YJ(J.repo??"",z,{kind:"none"}),H=WC(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 FK(f,Y){let{worktreePath:J}=await u8(f,Y),z=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:J,command:[z,"-il"]}}async function OK(f){let Y=L1(f);await yY(Y).catch(()=>{}),await af(Y).catch(()=>{})}var AK=N(()=>{Ef();hH();jZ();u1();Gf()});import{existsSync as VC}from"fs";import{join as RK,normalize as NK}from"path";function KC(f){let Y=null,J=null,z=new TextEncoder,Z=new ReadableStream({start(G){Y=f((q,H)=>{try{G.enqueue(z.encode(`event: ${q}
28
+ `)&&J.endsWith("</INSTRUCTIONS>")}var b7=()=>{};function S7(J,z={}){let Y=jB(J.input_tokens,0),Z=jB(J.cached_input_tokens,0),G=jB(J.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}:{},...Z2(z.contextWindowTokens)?{context_window_tokens:z.contextWindowTokens}:{}}}function jB(J,z){return typeof J==="number"&&Number.isFinite(J)?J:z}function Z2(J){return typeof J==="number"&&Number.isFinite(J)&&J>0}import{readdir as G2,stat as X2,unlink as dw}from"fs/promises";import{homedir as Q2}from"os";import jZ from"path";async function UB(J=WZ){let z=J.sessionsDir(),Y=(await J.readdir(z)).sort().reverse(),Z=[];for(let G of Y){let X=jZ.join(z,G),Q=(await J.readdir(X)).sort().reverse();for(let f of Q){let H=jZ.join(X,f),B=(await J.readdir(H)).sort().reverse();for(let V of B){let j=jZ.join(H,V),K=(await J.readdir(j)).filter((L)=>L.startsWith("rollout-")&&L.endsWith(".jsonl"));K.sort().reverse();for(let L of K)if(Z.push(jZ.join(j,L)),Z.length>=I7){if(!y7)y7=!0,console.warn(`[codex history] rollout scan truncated at ${I7} files; older sessions may be omitted`);return Z}}}}return Z}async function q2(J,z=WZ){if(!J)return;let Y=J.toLowerCase(),Z=await UB(z);for(let G of Z)if(jZ.basename(G).match(E7)?.[1]?.toLowerCase()===Y)return G;return}function f2(J){for(let z of J.split(`
29
+ `)){let Y=z.trim();if(!Y)continue;if(!OY(Y))return"";try{let Z=JSON.parse(Y);if(Z.type==="session_meta")return Z.payload?.cwd??""}catch{}return""}return""}async function w7(J,z){let Y=T7.get(z);if(!Y)Y=new Map,T7.set(z,Y);let Z=Y.get(J);if(Z!==void 0)return Z;let G;try{G=await z.readFile(J)}catch{return null}let X=f2(G);if(X)Y.set(J,X);return X}async function P7(J,z=WZ){if(!J)return[];let Y=await UB(z),Z=[],G=0;for(let X of Y){if(G>=H2)break;if(G++,await w7(X,z)!==J)continue;let Q=jZ.basename(X).match(E7)?.[1];if(Q)Z.push(Q)}return Z.reverse()}async function DB(J,z=WZ){if(!J)return null;let Y=await UB(z),Z=0;for(let G of Y){if(Z>=B2)break;if(Z++,await w7(G,z)!==J)continue;try{return{path:G,mtimeMs:(await z.stat(G)).mtimeMs}}catch{}}return null}async function h7(J,z=WZ){return(await DB(J,z))?.mtimeMs??0}async function v7(J,z=WZ){return(await j2(J,z)).messages}async function j2(J,z=WZ){let Y=await q2(J,z);if(!Y)return{messages:[]};let Z;try{Z=await z.readFile(Y)}catch{return{messages:[]}}let G=W2(V2(Z,J)),X=M2(Z);return{messages:G,...X?{usageMetrics:X}:{}}}function W2(J){return J.map((z,Y)=>({msg:z,idx:Y})).sort((z,Y)=>{if(z.msg.timestamp<Y.msg.timestamp)return-1;if(z.msg.timestamp>Y.msg.timestamp)return 1;return z.idx-Y.idx}).map((z)=>z.msg)}function V2(J,z){let Y=[];for(let Z of J.split(`
30
+ `)){let G=Z.trim();if(!G)continue;if(!OY(G))continue;let X;try{X=JSON.parse(G)}catch{continue}if(!HX(X))continue;if(X.type!=="response_item")continue;let Q=HX(X.payload)?X.payload:void 0;if(!Q)continue;let f=typeof X.timestamp==="string"?X.timestamp:new Date().toISOString(),H=K2(Q,f,z);if(H)Y.push(H)}return Y}function K2(J,z,Y){if(J.type==="message"){let Z=J.role;if(Z!=="user"&&Z!=="assistant"&&Z!=="system")return;let G=BB(J.content);if(Z==="user"&&k7(G))return;return{role:Z,blocks:G,timestamp:z,sessionId:Y}}if(J.type==="reasoning")return U2(J,z,Y);if(J.type==="function_call")return WB(J,z,Y,{name:KB(J.name,"function_call"),input:VB(J.arguments)});if(J.type==="custom_tool_call")return WB(J,z,Y,{name:KB(J.name,"custom_tool_call"),input:VB(J.input)});if(J.type==="tool_search_call")return WB(J,z,Y,{name:"tool_search_call",input:_Q(J,["type","call_id","status"])});if(J.type==="function_call_output"||J.type==="custom_tool_call_output")return u7(J,z,Y,VB(J.output));if(J.type==="tool_search_output")return u7(J,z,Y,_Q(J,["type","call_id"]));if(J.type==="web_search_call"||J.type==="image_generation_call"||J.type==="local_shell_call")return D2(J,z,Y);return}function U2(J,z,Y){let Z=L2(J);if(Z.length===0)return;return{role:"assistant",blocks:[{type:"thinking",text:Z}],timestamp:z,sessionId:Y}}function WB(J,z,Y,Z){let G=typeof J.call_id==="string"?J.call_id:void 0;if(!G)return;return{role:"assistant",blocks:[{type:"tool_call",callId:G,name:Z.name,input:Z.input}],timestamp:z,sessionId:Y}}function u7(J,z,Y,Z){let G=typeof J.call_id==="string"?J.call_id:void 0;if(!G)return;return{role:"user",blocks:[{type:"tool_result",callId:G,output:Z,isError:!1}],timestamp:z,sessionId:Y}}function D2(J,z,Y){let Z=typeof J.type==="string"?J.type:"tool",G=typeof J.call_id==="string"&&J.call_id.length>0?J.call_id:`${Z}:${z}`,X=KB(J.name,Z),Q=_Q(J,["type","call_id","status"]),f=_Q(J,["type","call_id"]);return{role:"assistant",timestamp:z,sessionId:Y,blocks:[{type:"tool_call",callId:G,name:X,input:Q},{type:"tool_result",callId:G,output:f,isError:!1}]}}function L2(J){let z=x7(J.content);if(z.length>0)return z;let Y=typeof J.text==="string"?J.text:"";if(Y.length>0)return Y;return x7(J.summary)}function x7(J){if(typeof J==="string")return J;if(!Array.isArray(J))return"";let z=[];for(let Y of J){if(typeof Y==="string"){z.push(Y);continue}if(!HX(Y))continue;let Z=typeof Y.text==="string"?Y.text:"";if(Z.length>0)z.push(Z)}return z.join("")}function _Q(J,z){let Y={};for(let[Z,G]of Object.entries(J))if(!z.includes(Z))Y[Z]=G;return Y}function KB(J,z){return typeof J==="string"&&J.length>0?J:z}function VB(J){if(typeof J!=="string")return J;try{return JSON.parse(J)}catch{return J}}function M2(J){let z,Y=null;for(let Z of J.split(`
31
+ `)){let G=Z.trim();if(!G)continue;if(!OY(G))continue;let X;try{X=JSON.parse(G)}catch{continue}if(!HX(X))continue;let Q=typeof X.timestamp==="string"?F2(X.timestamp):null;if(X.type==="response_item")continue;if(X.type!=="turn.completed")continue;let f=HX(X.usage)?X.usage:void 0;if(!f)continue;let H=S7(f);if(!H)continue;if(Q!==null&&(Y===null||Q>Y))Y=Q,z=H;else if(Y===null)z=H}return z}function F2(J){let z=new Date(J).getTime();return Number.isFinite(z)?z:null}function HX(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var WZ,I7=5000,y7=!1,E7,T7,H2=200,B2=12;var LB=N(()=>{YX();b7();WZ={sessionsDir(){return jZ.join(Q2(),".codex","sessions")},async readdir(J){try{return await G2(J)}catch{return[]}},async readFile(J){return await $Z(J)},stat:X2};E7=/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/i;T7=new WeakMap});import{homedir as O2}from"os";import{join as A2}from"path";function R2(){return A2(O2(),".codex","hooks.json")}var c7,sw,MB;var d7=N(()=>{fB();c7=[{event:"SessionStart",verb:"session-start"},{event:"UserPromptSubmit",verb:"turn-start"},{event:"Stop",verb:"turn-complete"}],sw=c7.map((J)=>J.event);MB=class MB extends fX{vendor="codex";eventMap=c7;globalSettingsPath(){return R2()}}});function n7(J){if(!pQ(J))return;let z=pQ(J.modelMetrics)?J.modelMetrics:void 0;if(!z)return;let Y=0,Z=0,G=0;for(let Q of Object.values(z)){if(!pQ(Q)||!pQ(Q.usage))continue;Y+=rQ(Q.usage.inputTokens,0),Z+=rQ(Q.usage.outputTokens,0),G+=rQ(Q.usage.cacheReadTokens,0)}let X=rQ(J.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 pQ(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function rQ(J,z){return typeof J==="number"&&Number.isFinite(J)?J:z}import{readdir as g2,rm as C2,stat as N2}from"fs/promises";import{homedir as k2}from"os";import CY from"path";async function OB(J=VZ){let z=CY.join(J.copilotDir(),"session-state");return(await J.readdir(z)).map((Z)=>CY.join(z,Z))}async function i7(J,z=VZ){let Y=[];for(let Z of await OB(z)){let G=await AB(Z,z);if(G.cwd!==J)continue;Y.push({id:G.id??CY.basename(Z),updatedAt:G.updatedAt??""})}return Y.sort((Z,G)=>Z.updatedAt.localeCompare(G.updatedAt)).map((Z)=>Z.id)}async function l7(J,z=VZ){if(!J)return 0;let Y=0;for(let Z of await OB(z)){if((await AB(Z,z)).cwd!==J)continue;try{let{mtimeMs:X}=await z.stat(CY.join(Z,"events.jsonl"));if(X>Y)Y=X}catch{}}return Y}async function b2(J,z=VZ){let Y=await S2(J,z);if(!Y)return{messages:[]};let Z=await z.readFile(CY.join(Y,"events.jsonl")).catch(()=>""),G=y2(Z,J);return{messages:G.messages,...G.usageMetrics?{usageMetrics:G.usageMetrics}:{}}}async function $7(J,z=VZ){return(await b2(J,z)).messages}async function S2(J,z=VZ){for(let Y of await OB(z)){if(CY.basename(Y)===J)return Y;let Z=await AB(Y,z);if(Z.id===J||Z.name?.toLowerCase()===J.toLowerCase())return Y}return}async function AB(J,z=VZ){let Y=await z.readFile(CY.join(J,"workspace.yaml")).catch(()=>"");return I2(Y)}function I2(J){let z={};for(let Y of J.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,'"');z[G]=X}return{id:z.id,cwd:z.cwd,name:z.name,updatedAt:z.updated_at,createdAt:z.created_at}}function y2(J,z){let Y=[],Z=new Map,G=z,X,Q=null;for(let f of J.split(`
33
+ `)){let H=f.trim();if(!H)continue;if(!OY(H))continue;let B;try{B=JSON.parse(H)}catch{continue}if(!FB(B)||typeof B.type!=="string")continue;let V=typeof B.timestamp==="string"?B.timestamp:new Date().toISOString(),j=FB(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,T2),"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 A=Array.isArray(j.toolRequests)?j.toolRequests:[];for(let F of A){if(!FB(F))continue;let g=typeof F.id==="string"?F.id:typeof F.toolCallId==="string"?F.toolCallId:"tool",u=typeof F.name==="string"?F.name:typeof F.toolName==="string"?F.toolName:"tool";K.push({type:"tool_call",callId:g,name:u,input:F.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"),A=j.result??(j.success===!1?{success:!1}:void 0);Y.push({role:"assistant",blocks:[{type:"tool_result",callId:K,output:A,isError:j.success===!1}],timestamp:V,sessionId:G});continue}if(B.type==="session.shutdown")X=n7(j)}return{messages:Y,usageMetrics:X,firstUserMessage:Q}}function FB(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var VZ,T2=200;var a7=N(()=>{YX();VZ={copilotDir(){let J=process.env.COPILOT_HOME?.trim();if(J)return J;return CY.join(k2(),".copilot")},async readdir(J){try{return await g2(J)}catch{return[]}},async readFile(J){return await $Z(J)},stat:N2,async rm(J){await C2(J,{recursive:!0,force:!0})}}});function RB(J){return e1(J).createHookAdapter()}class oQ{vendor;constructor(J){this.vendor=J}supportsHooks(){return!1}globalSettingsPath(){return""}activityDetailFromPayload(){return}async installActivityHooks(){}async removeActivityHooks(){}supportsWorktreeSync(){return!1}async removeWorktreeSyncHook(){}async installWorktreeWatchHook(){}async removeWorktreeWatchHook(){}}var gB=N(()=>{NY()});import{readFile as _7}from"fs/promises";class sQ{supportsCompletionMarkers(){return!0}}function BX(J){return e1(J).createTurnDetector()}function w2(J,z="claude",Y=0){let Z=null,G=0;for(let X of J.split(`
34
+ `)){G++;let Q=p7(X);if(!Q)continue;let f=o7(Q.message)?Q.message:Q;if(f.role!=="assistant")continue;if(!("content"in f))continue;let H=r7(Q,Y),B={id:`claude:${z}:${H}:${G}`,timestampMs:H,source:"claude"};if(!Z||B.timestampMs>=Z.timestampMs)Z=B}return Z}function P2(J,z="codex"){let Y=null,Z=0;for(let G of J.split(`
35
+ `)){Z++;let X=p7(G);if(!X||X.type!=="turn.completed")continue;let Q=r7(X,0),f={id:`codex:${z}:${Q}:${Z}`,timestampMs:Q,source:"codex"};if(!Y||f.timestampMs>=Y.timestampMs)Y=f}return Y}function p7(J){let z=J.trim();if(!z)return null;try{let Y=JSON.parse(z);return o7(Y)?Y:null}catch{return null}}function r7(J,z){let Y=typeof J.timestamp==="string"?Date.parse(J.timestamp):Number.NaN;return Number.isFinite(Y)?Y:z}function o7(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var x2,CB,E2,NB,tQ;var eQ=N(()=>{zB();LB();NY();x2={listSessionFiles:(J)=>ZX(J),readFile:(J)=>_7(J,"utf8")};CB=class CB extends sQ{deps;vendor="claude";cache=new Map;constructor(J=x2){super();this.deps=J}async latestCompletion(J){let z=await this.deps.listSessionFiles(J),Y=null,Z=new Map;for(let G of z.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 f=await this.deps.readFile(G.path).catch(()=>"");Q=w2(f,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}};E2={findLatestRollout:(J)=>DB(J),readFile:(J)=>_7(J,"utf8")};NB=class NB extends sQ{deps;vendor="codex";cache=null;constructor(J=E2){super();this.deps=J}async latestCompletion(J){if(!J)return null;let z=await this.deps.findLatestRollout(J);if(!z)return null;if(this.cache&&this.cache.path===z.path&&z.mtimeMs>0&&this.cache.mtimeMs===z.mtimeMs)return this.cache.marker;let Y=await this.deps.readFile(z.path).catch(()=>"");if(!Y)return null;let Z=P2(Y,z.path);return this.cache={path:z.path,mtimeMs:z.mtimeMs,marker:Z},Z}};tQ=class tQ extends sQ{vendor;constructor(J){super();this.vendor=J}supportsCompletionMarkers(){return!1}async latestCompletion(){return null}}});function n2(J){return{vendor:J,builtin:!1,displayName:J,defaultCommand:[J],history:h2,detectAccount:async()=>({binary:{found:!1,error:"custom engine: kobe has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new oQ(J),createTurnDetector:()=>new tQ(J)}}function e1(J){return QJ(J)?d2[J]:n2(J)}var h2,v2,m2,c2,d2;var NY=N(()=>{t1();QZ();zB();N7();LB();d7();a7();gB();eQ();h2={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async latestTranscriptMtimeForWorktree(){return 0}},v2={async listSessionIdsForWorktree(J){return[...await ZX(J)].sort((Y,Z)=>Y.mtimeMs-Z.mtimeMs).map((Y)=>Y.sessionId)},readHistory:(J)=>B7(J),latestTranscriptMtimeForWorktree:(J)=>H7(J)},m2={listSessionIdsForWorktree:(J)=>P7(J),readHistory:(J)=>v7(J),latestTranscriptMtimeForWorktree:(J)=>h7(J)},c2={listSessionIdsForWorktree:(J)=>i7(J),readHistory:(J)=>$7(J),latestTranscriptMtimeForWorktree:(J)=>l7(J)},d2={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:v2,detectAccount:(J)=>mQ(J),createHookAdapter:()=>new HB,createTurnDetector:()=>new CB},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:m2,detectAccount:(J)=>cQ(J),createHookAdapter:()=>new MB,createTurnDetector:()=>new NB},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:c2,detectAccount:(J)=>dQ(J),createHookAdapter:()=>new oQ("copilot"),createTurnDetector:()=>new tQ("copilot")}}});async function rZ(J,z){if(!z)return 0;return e1(J).history.latestTranscriptMtimeForWorktree(z)}var Jq=N(()=>{NY()});function s7(J){return typeof J==="string"&&i2.includes(J)}var jX=(J)=>J,d1="claude",i2;var pJ=N(()=>{i2=["backlog","in_progress","in_review","done","canceled","error"]});function zq(J){return l2.includes(J)}function t7(J,z,Y){switch(z){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 l2;var Yq=N(()=>{l2=["session-start","turn-start","turn-complete","turn-failed","awaiting-input","session-end"]});function $2(){let J=process.env.KOBE_ENGINE_STATE_TTL_MS;if(J===void 0)return e7;let z=Number(J);return Number.isFinite(z)&&z>0?z:e7}class kB{bus;staleMs;now;livenessAt;activity=new Map;constructor(J,z=$2(),Y=()=>Date.now(),Z=()=>Promise.resolve(void 0)){this.bus=J;this.staleMs=z;this.now=Y;this.livenessAt=Z}report(J,z,Y){let Z=this.activity.get(J);if(Z?.lapse)clearTimeout(Z.lapse);let G=t7(Z?.state,z,Y),X=this.now(),Q={state:G,detail:Y,at:X};if(G!=="idle"&&G!=="turn_complete")Q.lapse=this.armLapse(J,X);this.activity.set(J,Q),this.bus.publish("engine-state",this.payload(J,Q))}armLapse(J,z){let Y=setTimeout(()=>{this.handleLapse(J,z)},this.staleMs);return Y.unref?.(),Y}async handleLapse(J,z){let Y=this.activity.get(J);if(!Y||Y.at!==z)return;let Z;try{Z=await this.livenessAt(J)}catch{Z=void 0}let G=this.activity.get(J);if(!G||G.at!==z)return;if(Z!==void 0&&Z>this.now()-this.staleMs){G.lapse=this.armLapse(J,z);return}this.publishIdle(J)}clearTask(J){let z=this.activity.get(J);if(z?.lapse)clearTimeout(z.lapse);if(this.activity.delete(J),z)this.bus.publish("engine-state",{taskId:J,state:"idle",at:this.now()})}snapshotByTask(){let J={};for(let[z,Y]of this.activity)J[z]=this.payload(z,Y);return J}currentNonIdle(){let J=[];for(let[z,Y]of this.activity)if(Y.state!=="idle")J.push(this.payload(z,Y));return J}close(){for(let J of this.activity.values())if(J.lapse)clearTimeout(J.lapse);this.activity.clear()}publishIdle(J){let z={state:"idle",at:this.now()};this.activity.set(J,z),this.bus.publish("engine-state",this.payload(J,z))}payload(J,z){return{taskId:J,state:z.state,...z.detail?{detail:z.detail}:{},at:z.at}}}var e7=600000;var JV=N(()=>{Yq()});function zV(J){if(typeof J!=="string")return"";let z=J.replace(/\s+/g," ").trim();if(z.length===0)return"";let Y=[...z];if(Y.length<=40)return z;return`${Y.slice(0,40).join("")}\u2026`}function Zq(J,z){let Y=J.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,32),Z=z.slice(-6).toLowerCase();return`kobe/${Y||"task"}-${Z}`}function YV(J){let z=J.find((G)=>G.role==="user");if(!z)return"";let Y=z.blocks.filter((G)=>G.type==="text").map((G)=>G.text).join(" "),Z=zV(Y);return Z.length>0?Buffer.from(Z,"utf8").toString("utf8"):Z}async function oZ(J,z=d1){if(!J)return"";let{history:Y}=e1(z),Z=await Y.listSessionIdsForWorktree(J);for(let G of Z.slice(0,a2)){let X=YV(await Y.readHistory(G));if(X)return X}return""}async function ZV(J,z){if(!z)return"";try{return YV(await e1(J).history.readHistory(z))}catch{return""}}var a2=8;var Gq=N(()=>{NY();pJ()});function GV(J){let z=String(J),Y=z.length-1;return b1.context.id+(Y?String.fromCharCode(96+Y):"")+z}function IB(J){b1.context=J}function _2(){return{...b1.context,id:b1.getNextContextId(),count:0}}function KZ(J,z){let Y=U1,Z=i0,G=J.length===0,X=z===void 0?Z:z,Q=G?{owned:null,cleanups:null,context:null,owner:null}:{owned:null,cleanups:null,context:X?X.context:null,owner:X},f=G?()=>J(()=>{throw Error("Dispose method must be an explicit argument to createRoot function")}):()=>J(()=>_1(()=>kY(Q)));Bz.afterCreateOwner&&Bz.afterCreateOwner(Q),i0=Q,U1=null;try{return bJ(f,!0)}finally{U1=Y,i0=Z}}function p(J,z){z=z?Object.assign({},fq,z):fq;let Y={value:J,observers:null,observerSlots:null,comparator:z.equals||void 0};{if(z.name)Y.name=z.name;if(z.internal)Y.internal=!0;else if(WV(Y),Bz.afterCreateSignal)Bz.afterCreateSignal(Y)}let Z=(G)=>{if(typeof G==="function")if(B0&&B0.running&&B0.sources.has(Y))G=G(Y.tValue);else G=G(Y.value);return TB(Y,G)};return[VV.bind(Y),Z]}function XV(J,z,Y){let Z=eZ(J,z,!0,xJ,Y);if(tZ&&B0&&B0.running)a1.push(Z);else UZ(Z)}function bz(J,z,Y){let Z=eZ(J,z,!1,xJ,Y);if(tZ&&B0&&B0.running)a1.push(Z);else UZ(Z)}function Y1(J,z,Y){jV=QA;let Z=eZ(J,z,!1,xJ,Y),G=KX&&EJ(KX);if(G)Z.suspense=G;if(!Y||!Y.render)Z.user=!0;KJ?KJ.push(Z):UZ(Z)}function U0(J,z,Y){Y=Y?Object.assign({},fq,Y):fq;let Z=eZ(J,z,!0,0,Y);if(Z.observers=null,Z.observerSlots=null,Z.comparator=Y.equals||void 0,tZ&&B0&&B0.running)Z.tState=xJ,a1.push(Z);else UZ(Z);return VV.bind(Z)}function e2(J){return J&&typeof J==="object"&&"then"in J}function Wq(J,z,Y){let Z,G,X;if(typeof z==="function")Z=J,G=z,X=Y||{};else Z=!0,G=J,X=z||{};let Q=null,f=bB,H=null,B=!1,V=!1,j="initialValue"in X,K=typeof Z==="function"&&U0(Z),L=new Set,[A,F]=(X.storage||p)(X.initialValue),[g,u]=p(void 0),[s,S]=p(void 0,{equals:!1}),[O,C]=p(j?"ready":"unresolved");if(b1.context){if(H=b1.getNextContextId(),X.ssrLoadFrom==="initial")f=X.initialValue;else if(b1.load&&b1.has(H))f=b1.load(H)}function y(T,Q0,r,W0){if(Q===T){if(Q=null,W0!==void 0&&(j=!0),(T===f||Q0===f)&&X.onHydrated)queueMicrotask(()=>X.onHydrated(W0,{value:Q0}));if(f=bB,B0&&T&&B)B0.promises.delete(T),B=!1,bJ(()=>{B0.running=!0,a(Q0,r)},!1);else a(Q0,r)}return Q0}function a(T,Q0){bJ(()=>{if(Q0===void 0)F(()=>T);C(Q0!==void 0?"errored":j?"ready":"unresolved"),u(Q0);for(let r of L.keys())r.decrement();L.clear()},!1)}function l(){let T=KX&&EJ(KX),Q0=A(),r=g();if(r!==void 0&&!Q)throw r;if(U1&&!U1.user&&T)XV(()=>{if(s(),Q){if(T.resolved&&B0&&B)B0.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=K?K():Z;if(B=B0&&B0.running,Q0==null||Q0===!1){y(Q,_1(A));return}if(B0&&Q)B0.promises.delete(Q);let r,W0=f!==bB?f:_1(()=>{try{return G(Q0,{value:A(),refetching:T})}catch(O0){r=O0}});if(r!==void 0){y(Q,void 0,qq(r),Q0);return}else if(!e2(W0))return y(Q,W0,void 0,Q0),W0;if(Q=W0,"v"in W0){if(W0.s===1)y(Q,W0.v,void 0,Q0);else y(Q,void 0,qq(W0.v),Q0);return W0}return V=!0,queueMicrotask(()=>V=!1),bJ(()=>{C(j?"refreshing":"pending"),S()},!1),W0.then((O0)=>y(W0,O0,void 0,Q0),(O0)=>y(W0,void 0,qq(O0),Q0))}Object.defineProperties(l,{state:{get:()=>O()},error:{get:()=>g()},loading:{get(){let T=O();return T==="pending"||T==="refreshing"}},latest:{get(){if(!j)return l();let T=g();if(T&&!Q)throw T;return A()}}});let J0=i0;if(K)XV(()=>(J0=i0,t(!1)));else t(!1);return[l,{refetch:(T)=>zA(J0,()=>t(T)),mutate:F}]}function Vq(J){return bJ(J,!1)}function _1(J){if(!sZ&&U1===null)return J();let z=U1;U1=null;try{if(sZ)return sZ.untrack(J);return J()}finally{U1=z}}function SJ(J,z,Y){let Z=Array.isArray(J),G,X=Y&&Y.defer;return(Q)=>{let f;if(Z){f=Array(J.length);for(let B=0;B<J.length;B++)f[B]=J[B]()}else f=J();if(X)return X=!1,Q;let H=_1(()=>z(f,G,Q));return G=f,H}}function JJ(J){Y1(()=>_1(J))}function N1(J){if(i0===null)console.warn("cleanups created outside a `createRoot` or `render` will never be run");else if(i0.cleanups===null)i0.cleanups=[J];else i0.cleanups.push(J);return J}function JA(J,z){if(WX||(WX=Symbol("error")),i0=eZ(void 0,void 0,!0),i0.context={...i0.context,[WX]:[z]},B0&&B0.running)B0.sources.add(i0);try{return J()}catch(Y){DX(Y)}finally{i0=i0.owner}}function Kq(){return U1}function zA(J,z){let Y=i0,Z=U1;i0=J,U1=null;try{return bJ(z,!0)}catch(G){DX(G)}finally{i0=Y,U1=Z}}function YA(J){if(B0&&B0.running)return J(),B0.done;let z=U1,Y=i0;return Promise.resolve().then(()=>{U1=z,i0=Y;let Z;if(tZ||KX)Z=B0||(B0={sources:new Set,effects:[],promises:new Set,disposed:new Set,queue:new Set,running:!0}),Z.done||(Z.done=new Promise((G)=>Z.resolve=G)),Z.running=!0;return bJ(J,!1),U1=i0=null,Z?Z.done:void 0})}function qV(J,z){let Y=eZ(()=>_1(()=>{return Object.assign(J,{[s2]:!0}),J(z)}),void 0,!0,0);return Y.props=z,Y.observers=null,Y.observerSlots=null,Y.name=J.name,Y.component=J,UZ(Y),Y.tValue!==void 0?Y.tValue:Y.value}function WV(J){if(i0){if(i0.sourceMap)i0.sourceMap.push(J);else i0.sourceMap=[J];J.graph=i0}if(Bz.afterRegisterGraph)Bz.afterRegisterGraph(J)}function Sz(J,z){let Y=Symbol("context");return{id:Y,Provider:qA(Y,z),defaultValue:J}}function EJ(J){let z;return i0&&i0.context&&(z=i0.context[J.id])!==void 0?z:J.defaultValue}function ZA(J){let z=U0(J),Y=U0(()=>yB(z()),void 0,{name:"children"});return Y.toArray=()=>{let Z=Y();return Array.isArray(Z)?Z:Z!=null?[Z]:[]},Y}function VV(){let J=B0&&B0.running;if(this.sources&&(J?this.tState:this.state))if((J?this.tState:this.state)===xJ)UZ(this);else{let z=a1;a1=null,bJ(()=>Hq(this),!1),a1=z}if(U1){let z=this.observers;if(!z||z[z.length-1]!==U1){let Y=z?z.length:0;if(!U1.sources)U1.sources=[this],U1.sourceSlots=[Y];else U1.sources.push(this),U1.sourceSlots.push(Y);if(!z)this.observers=[U1],this.observerSlots=[U1.sources.length-1];else z.push(U1),this.observerSlots.push(U1.sources.length-1)}}if(J&&B0.sources.has(this))return this.tValue;return this.value}function TB(J,z,Y){let Z=B0&&B0.running&&B0.sources.has(J)?J.tValue:J.value;if(!J.comparator||!J.comparator(Z,z)){if(B0){let G=B0.running;if(G||!Y&&B0.sources.has(J))B0.sources.add(J),J.tValue=z;if(!G)J.value=z}else J.value=z;if(J.observers&&J.observers.length)bJ(()=>{for(let G=0;G<J.observers.length;G+=1){let X=J.observers[G],Q=B0&&B0.running;if(Q&&B0.disposed.has(X))continue;if(Q?!X.tState:!X.state){if(X.pure)a1.push(X);else KJ.push(X);if(X.observers)UV(X)}if(!Q)X.state=xJ;else X.tState=xJ}if(a1.length>1e6){if(a1=[],p2)throw Error("Potential Infinite Loop Detected.");throw Error()}},!1)}return z}function UZ(J){if(!J.fn)return;kY(J);let z=jq;if(fV(J,B0&&B0.running&&B0.sources.has(J)?J.tValue:J.value,z),B0&&!B0.running&&B0.sources.has(J))queueMicrotask(()=>{bJ(()=>{B0&&(B0.running=!0),U1=i0=J,fV(J,J.tValue,z),U1=i0=null},!1)})}function fV(J,z,Y){let Z,G=i0,X=U1;U1=i0=J;try{Z=J.fn(z)}catch(Q){if(J.pure)if(B0&&B0.running)J.tState=xJ,J.tOwned&&J.tOwned.forEach(kY),J.tOwned=void 0;else J.state=xJ,J.owned&&J.owned.forEach(kY),J.owned=null;return J.updatedAt=Y+1,DX(Q)}finally{U1=X,i0=G}if(!J.updatedAt||J.updatedAt<=Y){if(J.updatedAt!=null&&"observers"in J)TB(J,Z,!0);else if(B0&&B0.running&&J.pure){if(!B0.sources.has(J))J.value=Z;B0.sources.add(J),J.tValue=Z}else J.value=Z;J.updatedAt=Y}}function eZ(J,z,Y,Z=xJ,G){let X={fn:J,state:Z,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:z,owner:i0,context:i0?i0.context:null,pure:Y};if(B0&&B0.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!==t2)if(B0&&B0.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(sZ&&X.fn){let Q=X.fn,[f,H]=p(void 0,{equals:!1}),B=sZ.factory(Q,H);N1(()=>B.dispose());let V,j=()=>YA(H).then(()=>{if(V)V.dispose(),V=void 0});X.fn=(K)=>{if(f(),B0&&B0.running){if(!V)V=sZ.factory(Q,j);return V.track(K)}return B.track(K)}}return Bz.afterCreateOwner&&Bz.afterCreateOwner(X),X}function UX(J){let z=B0&&B0.running;if((z?J.tState:J.state)===0)return;if((z?J.tState:J.state)===VX)return Hq(J);if(J.suspense&&_1(J.suspense.inFallback))return J.suspense.effects.push(J);let Y=[J];while((J=J.owner)&&(!J.updatedAt||J.updatedAt<jq)){if(z&&B0.disposed.has(J))return;if(z?J.tState:J.state)Y.push(J)}for(let Z=Y.length-1;Z>=0;Z--){if(J=Y[Z],z){let G=J,X=Y[Z+1];while((G=G.owner)&&G!==X)if(B0.disposed.has(G))return}if((z?J.tState:J.state)===xJ)UZ(J);else if((z?J.tState:J.state)===VX){let G=a1;a1=null,bJ(()=>Hq(J,Y[0]),!1),a1=G}}}function bJ(J,z){if(a1)return J();let Y=!1;if(!z)a1=[];if(KJ)Y=!0;else KJ=[];jq++;try{let Z=J();return GA(Y),Z}catch(Z){if(!Y)KJ=null;a1=null,DX(Z)}}function GA(J){if(a1){if(tZ&&B0&&B0.running)XA(a1);else KV(a1);a1=null}if(J)return;let z;if(B0){if(!B0.promises.size&&!B0.queue.size){let{sources:Z,disposed:G}=B0;KJ.push.apply(KJ,B0.effects),z=B0.resolve;for(let X of KJ)"tState"in X&&(X.state=X.tState),delete X.tState;B0=null,bJ(()=>{for(let X of G)kY(X);for(let X of Z){if(X.value=X.tValue,X.owned)for(let Q=0,f=X.owned.length;Q<f;Q++)kY(X.owned[Q]);if(X.tOwned)X.owned=X.tOwned;delete X.tValue,delete X.tOwned,X.tState=0}QV(!1)},!1)}else if(B0.running){B0.running=!1,B0.effects.push.apply(B0.effects,KJ),KJ=null,QV(!0);return}}let Y=KJ;if(KJ=null,Y.length)bJ(()=>jV(Y),!1);else Bz.afterUpdate&&Bz.afterUpdate();if(z)z()}function KV(J){for(let z=0;z<J.length;z++)UX(J[z])}function XA(J){for(let z=0;z<J.length;z++){let Y=J[z],Z=B0.queue;if(!Z.has(Y))Z.add(Y),tZ(()=>{Z.delete(Y),bJ(()=>{B0.running=!0,UX(Y)},!1),B0&&(B0.running=!1)})}}function QA(J){let z,Y=0;for(z=0;z<J.length;z++){let Z=J[z];if(!Z.user)UX(Z);else J[Y++]=Z}if(b1.context){if(b1.count){b1.effects||(b1.effects=[]),b1.effects.push(...J.slice(0,Y));return}IB()}if(b1.effects&&(b1.done||!b1.count))J=[...b1.effects,...J],Y+=b1.effects.length,delete b1.effects;for(z=0;z<Y;z++)UX(J[z])}function Hq(J,z){let Y=B0&&B0.running;if(Y)J.tState=0;else J.state=0;for(let Z=0;Z<J.sources.length;Z+=1){let G=J.sources[Z];if(G.sources){let X=Y?G.tState:G.state;if(X===xJ){if(G!==z&&(!G.updatedAt||G.updatedAt<jq))UX(G)}else if(X===VX)Hq(G,z)}}}function UV(J){let z=B0&&B0.running;for(let Y=0;Y<J.observers.length;Y+=1){let Z=J.observers[Y];if(z?!Z.tState:!Z.state){if(z)Z.tState=VX;else Z.state=VX;if(Z.pure)a1.push(Z);else KJ.push(Z);Z.observers&&UV(Z)}}}function kY(J){let z;if(J.sources)while(J.sources.length){let Y=J.sources.pop(),Z=J.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(J.tOwned){for(z=J.tOwned.length-1;z>=0;z--)kY(J.tOwned[z]);delete J.tOwned}if(B0&&B0.running&&J.pure)DV(J,!0);else if(J.owned){for(z=J.owned.length-1;z>=0;z--)kY(J.owned[z]);J.owned=null}if(J.cleanups){for(z=J.cleanups.length-1;z>=0;z--)J.cleanups[z]();J.cleanups=null}if(B0&&B0.running)J.tState=0;else J.state=0;delete J.sourceMap}function DV(J,z){if(!z)J.tState=0,B0.disposed.add(J);if(J.owned)for(let Y=0;Y<J.owned.length;Y++)DV(J.owned[Y])}function qq(J){if(J instanceof Error)return J;return Error(typeof J==="string"?J:"Unknown error",{cause:J})}function HV(J,z,Y){try{for(let Z of z)Z(J)}catch(Z){DX(Z,Y&&Y.owner||null)}}function DX(J,z=i0){let Y=WX&&z&&z.context&&z.context[WX],Z=qq(J);if(!Y)throw Z;if(KJ)KJ.push({fn(){HV(Z,Y,z)},state:xJ});else HV(Z,Y,z)}function yB(J){if(typeof J==="function"&&!J.length)return yB(J());if(Array.isArray(J)){let z=[];for(let Y=0;Y<J.length;Y++){let Z=yB(J[Y]);if(Array.isArray(Z))if(Z.length<32768)z.push.apply(z,Z);else for(let G=0;G<Z.length;G++)z.push(Z[G]);else z.push(Z)}return z}return J}function qA(J,z){return function(Z){let G;return bz(()=>G=_1(()=>{return i0.context={...i0.context,[J]:Z.value},ZA(()=>Z.children)}),void 0,z),G}}function BV(J){for(let z=0;z<J.length;z++)J[z]()}function HA(J,z,Y={}){let Z=[],G=[],X=[],Q=0,f=z.length>1?[]:null;return N1(()=>BV(X)),()=>{let H=J()||[],B=H.length,V,j;return H[Bq],_1(()=>{let L,A,F,g,u,s,S,O,C;if(B===0){if(Q!==0)BV(X),X=[],Z=[],G=[],Q=0,f&&(f=[]);if(Y.fallback)Z=[fA],G[0]=KZ((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]=KZ(K);Q=B}else{F=Array(B),g=Array(B),f&&(u=Array(B));for(s=0,S=Math.min(Q,B);s<S&&Z[s]===H[s];s++);for(S=Q-1,O=B-1;S>=s&&O>=s&&Z[S]===H[O];S--,O--)F[O]=G[S],g[O]=X[S],f&&(u[O]=f[S]);L=new Map,A=Array(O+1);for(j=O;j>=s;j--)C=H[j],V=L.get(C),A[j]=V===void 0?-1:V,L.set(C,j);for(V=s;V<=S;V++)if(C=Z[V],j=L.get(C),j!==void 0&&j!==-1)F[j]=G[V],g[j]=X[V],f&&(u[j]=f[V]),j=A[j],L.set(C,j);else X[V]();for(j=s;j<B;j++)if(j in F){if(G[j]=F[j],X[j]=g[j],f)f[j]=u[j],f[j](j)}else G[j]=KZ(K);G=G.slice(0,Q=B),Z=H.slice(0)}return G});function K(L){if(X[j]=L,f){let[A,F]=p(j,{name:"index"});return f[j]=F,z(H[j],A)}return z(H[j])}}}function LV(J,z){if(BA){if(b1.context){let Y=b1.context;IB(_2());let Z=qV(J,z||{});return IB(Y),Z}}return qV(J,z||{})}function Xq(){return!0}function SB(J){return!(J=typeof J==="function"?J():J)?{}:J}function WA(){for(let J=0,z=this.length;J<z;++J){let Y=this[J]();if(Y!==void 0)return Y}}function Uq(...J){let z=!1;for(let Q=0;Q<J.length;Q++){let f=J[Q];z=z||!!f&&Hz in f,J[Q]=typeof f==="function"?(z=!0,U0(f)):f}if(o2&&z)return new Proxy({get(Q){for(let f=J.length-1;f>=0;f--){let H=SB(J[f])[Q];if(H!==void 0)return H}},has(Q){for(let f=J.length-1;f>=0;f--)if(Q in SB(J[f]))return!0;return!1},keys(){let Q=[];for(let f=0;f<J.length;f++)Q.push(...Object.keys(SB(J[f])));return[...new Set(Q)]}},jA);let Y={},Z=Object.create(null);for(let Q=J.length-1;Q>=0;Q--){let f=J[Q];if(!f)continue;let H=Object.getOwnPropertyNames(f);for(let B=H.length-1;B>=0;B--){let V=H[B];if(V==="__proto__"||V==="constructor")continue;let j=Object.getOwnPropertyDescriptor(f,V);if(!Z[V])Z[V]=j.get?{enumerable:!0,configurable:!0,get:WA.bind(Y[V]=[j.get.bind(f)])}:j.value!==void 0?j:void 0;else{let K=Y[V];if(K){if(j.get)K.push(j.get.bind(f));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 f=X[Q],H=Z[f];if(H&&H.get)Object.defineProperty(G,f,H);else G[f]=H?H.value:void 0}return G}function Q1(J){let z="fallback"in J&&{fallback:()=>J.fallback};return U0(HA(()=>J.each,J.children,z||void 0),void 0,{name:"value"})}function X0(J){let z=J.keyed,Y=U0(()=>J.when,void 0,{name:"condition value"}),Z=z?Y:U0(Y,void 0,{equals:(G,X)=>!G===!X,name:"condition"});return U0(()=>{let G=Z();if(G){let X=J.children;return typeof X==="function"&&X.length>0?_1(()=>X(z?G:()=>{if(!_1(Z))throw VA("Show");return Y()})):X}return J.fallback},void 0,{name:"value"})}function MV(J){let z;if(b1.context&&b1.load)z=b1.load(b1.getContextId());let[Y,Z]=p(z,{name:"errored"});return Qq||(Qq=new Set),Qq.add(Z),N1(()=>Qq.delete(Z)),U0(()=>{let G;if(G=Y()){let X=J.fallback;if(typeof X!=="function"||X.length==0)console.error(G);return typeof X==="function"&&X.length?_1(()=>X(G,()=>Z())):X}return JA(()=>J.children,Z)},void 0,{name:"value"})}var b1,p2=!0,r2=(J,z)=>J===z,Hz,o2,Bq,s2,fq,WX=null,jV,xJ=1,VX=2,t2,bB,i0=null,B0=null,tZ=null,sZ=null,U1=null,a1=null,KJ=null,jq=0,Bz,SP,QV,KX,fA,BA=!1,jA,VA=(J)=>`Attempting to access a stale value from <${J}> that could possibly be undefined. This may occur because you are reading the accessor returned from the component at a time where it has already been unmounted. We recommend cleaning up any stale timers or async, or reading from the initial condition.`,Qq,FV;var j1=N(()=>{b1={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return GV(this.context.count)},getNextContextId(){return GV(this.context.count++)}};Hz=Symbol("solid-proxy"),o2=typeof Proxy==="function",Bq=Symbol("solid-track"),s2=Symbol("solid-dev-component"),fq={equals:r2},jV=KV,t2={},bB={},Bz={afterUpdate:null,afterCreateOwner:null,afterCreateSignal:null,afterRegisterGraph:null};[SP,QV]=p(!1);fA=Symbol("fallback");jA={get(J,z,Y){if(z===Hz)return Y;return J.get(z)},has(J,z){if(z===Hz)return!0;return J.has(z)},set:Xq,deleteProperty:Xq,getOwnPropertyDescriptor(J,z){return{configurable:!0,enumerable:!0,get(){return J.get(z)},set:Xq,deleteProperty:Xq}},ownKeys(J){return J.keys()}};FV={hooks:Bz,writeSignal:TB,registerGraph:WV};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.")});import{spawn as KA}from"child_process";function uB(J,z,Y,Z){if(Y)return J+Z.slowRetryMs;return z+Math.max(Z.minIntervalMs,(z-J)*5)}function xB(J,z){return!J.inFlight&&z>=J.nextAllowedAt}function OV(J,z,Y=Math.random){let Z=Math.max(0,Math.min(1,z)),G=(Y()*2-1)*J*Z;return Math.max(0,J+G)}function AV(J,z,Y){if(z<=0)return Math.min(J,Y);return Math.min(J*2**z,Y)}function JG(J,z,Y,Z){let G=Date.now();if(!xB(J,G))return!1;J.inFlight=!0;let X=new AbortController,Q=setTimeout(()=>X.abort(),z.timeoutMs);return(async()=>{let f,H=!1;try{f=await Y(X.signal),H=!0}catch{}clearTimeout(Q);let B=X.signal.aborted;if(J.nextAllowedAt=uB(G,Date.now(),B,z),J.inFlight=!1,H&&!B)Z(f)})(),!0}function zY(J,z,Y){return new Promise((Z)=>{let G="",X=!1,Q=(H)=>{if(X)return;X=!0,Z({status:H,stdout:G})},f=KA(J,z.slice(),{cwd:Y.cwd,stdio:["ignore","pipe","ignore"],env:Y.env,signal:Y.signal,killSignal:"SIGKILL"});f.stdout?.on("data",(H)=>{G+=String(H)}),f.on("error",()=>Q(null)),f.on("close",(H)=>Q(H))})}var zG=()=>{};function UA(J,z){switch((J??"").toUpperCase()){case"MERGED":return"merged";case"CLOSED":return"closed";case"OPEN":return(z??"").toUpperCase()==="APPROVED"?"ready_to_merge":"open";default:return"unknown"}}function DA(J){let z=(J.status??"").toUpperCase(),Y=(J.conclusion??"").toUpperCase(),Z=(J.state??"").toUpperCase();if(z&&z!=="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 LA(J){if(!J||J.length===0)return"none";let z=!1,Y=!1;for(let Z of J){let G=DA(Z);if(G==="failing")return"failing";if(G==="pending")z=!0;else if(G==="passing")Y=!0}if(z)return"pending";if(Y)return"passing";return"unknown"}function gV(J,z){if(!J||typeof J.number!=="number")return null;return{provider:"github",lifecycle:UA(J.state,J.reviewDecision),checkState:LA(J.statusCheckRollup),number:J.number,url:J.url,title:J.title,baseRef:J.baseRefName,headRef:J.headRefName,reviewDecision:J.reviewDecision||void 0,mergeable:J.mergeable||void 0,lastCheckedAt:z}}function Lq(J,z){if(J===z)return!0;if(!J||!z)return!1;return J.provider===z.provider&&J.lifecycle===z.lifecycle&&J.checkState===z.checkState&&J.number===z.number&&J.url===z.url&&J.title===z.title&&J.baseRef===z.baseRef&&J.headRef===z.headRef&&J.reviewDecision===z.reviewDecision&&J.mergeable===z.mergeable}function Dq(J,z){return z.some((Y)=>J.includes(Y))}function EB(J){if(J.parseError)return{kind:"error",error:"parse"};if(J.timedOut)return{kind:"error",error:"timeout"};if(J.spawnError)return{kind:"error",error:"missing-binary"};let z=(J.stderr??"").toLowerCase();if(Dq(z,AA))return{kind:"empty"};if(Dq(z,MA))return{kind:"error",error:"no-remote"};if(Dq(z,FA))return{kind:"error",error:"auth"};if(Dq(z,OA))return{kind:"error",error:"network"};return{kind:"empty"}}function LX(J,z,Y,Z,G=Math.random){let X=(f)=>Y+OV(f,Z.jitterRatio,G);if(J.kind==="pr")return{nextAllowedAt:X(J.settled?Z.settledMs:Z.tickMs),failures:0};if(J.kind==="empty")return{nextAllowedAt:X(Z.noPrMs),failures:0};if(J.error==="no-remote")return{nextAllowedAt:X(Z.noRemoteMs),failures:0};let Q=z+1;return{nextAllowedAt:X(AV(Z.failureBaseMs,Q-1,Z.failureCapMs)),failures:Q}}var RV="number,url,title,state,baseRefName,headRefName,reviewDecision,mergeable,statusCheckRollup",MA,FA,OA,AA;var wB=N(()=>{zG();MA=["none of the git remotes","no git remote","to use github cli in a github repository","not a github repository"],FA=["gh auth login","authentication required","not logged in","http 401","bad credentials","requires authentication"],OA=["could not resolve host","no such host","dial tcp","connection refused","connection reset","network is unreachable","i/o timeout","timeout","tls handshake","http 5","rate limit","try again"],AA=["no pull requests found","no open pull requests","no pull request found"]});var PB,hB,vB,mB="DIRTY_WORKTREE",cB,dB;var nB=N(()=>{PB=class PB extends Error{from;to;taskId;constructor(J,z,Y){super(`illegal transition for task ${Y}: ${J} -> ${z}`);this.from=J;this.to=z;this.taskId=Y;this.name="IllegalTransitionError"}};hB=class hB extends Error{constructor(J){super(`task not found: ${J}`);this.name="TaskNotFoundError"}};vB=class vB extends Error{constructor(){super("cannot delete a main task; remove the repo from saved repos instead");this.name="CannotDeleteMainTaskError"}};cB=class cB extends Error{taskId;constructor(J){super(`${mB}: task ${J} worktree has uncommitted or untracked changes`);this.taskId=J;this.name="DirtyWorktreeError"}};dB=class dB extends Error{taskId;cause;constructor(J,z){super(`failed to remove worktree for task ${J}: ${z instanceof Error?z.message:String(z)}`);this.taskId=J;this.cause=z;this.name="WorktreeRemoveFailedError"}}});var CV;var NV=N(()=>{CV=["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(J){let z=J.auth,Y=z.kind==="key"?{kind:"key",keyPath:z.keyPath}:{kind:"password",getPassword:()=>bQ(z.keychainRef)};return{host:J.host,user:J.user,port:J.port,auth:Y,controlPath:RQ(J.host,J.user,J.port)}}function YG(J){let z=az(J);if(!z)return new kQ;return new nZ(kV(z))}function YY(J){for(let z of Object.values($H()))if(J===z.basePath||J.startsWith(`${z.basePath}/`))return new nZ(kV(z));return new kQ}function bV(J){return J&&$1(J)?J:void 0}function Mq(J){let z=YY(J);return z.isRemote||z.existsSync(J)}function w1(J){return YY(J).isRemote?Nz():J}var jz=N(()=>{p1();O1();PH();mH()});import{createHash as RA}from"crypto";import IV from"fs";import wJ from"path";function yV(J){if(!wJ.isAbsolute(J))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${J}`);return wJ.join(qJ(),gA,SA(J))}function TV(J){if(!wJ.isAbsolute(J))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${J}`);return[yV(J),...kA.map((z)=>wJ.join(J,z))]}function uV(J,z){if(!z||/[/\\\0]/.test(z))throw Error(`worktreePathFor: invalid slug: ${JSON.stringify(z)}`);return wJ.join(yV(J),z)}async function xV(J){if($1(J)){let Y=az(J)?.basePath;if(!Y)return[];return YG(J).readdir(wV(Y))}let z=new Set;for(let Y of TV(J))try{for(let Z of IV.readdirSync(Y,{withFileTypes:!0}))if(Z.isDirectory())z.add(Z.name)}catch{}return[...z]}function iB(J,z){if(!wJ.isAbsolute(J)||!wJ.isAbsolute(z))return null;let Y=SV(z);for(let Z of TV(J)){let G=SV(Z),X=wJ.relative(G,Y);if(X!==""&&!X.startsWith("..")&&!wJ.isAbsolute(X))return Z}return null}function EV(J,z){return iB(J,z)!==null}function wV(J){return`${bA(J)}/.kobe/worktrees`}function PV(J,z){if(!z||/[/\\\0]/.test(z))throw Error(`remoteWorktreePathFor: invalid slug: ${JSON.stringify(z)}`);return`${wV(J)}/${z}`}function bA(J){return J.length>1&&J.endsWith("/")?J.replace(/\/+$/,""):J}function SV(J){try{return IV.realpathSync(J)}catch{return wJ.resolve(J)}}function SA(J){let Y=(wJ.basename(J)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",Z=RA("sha1").update(wJ.resolve(J)).digest("hex").slice(0,12);return`${Y}-${Z}`}var gA="worktrees",CA=".kobe/worktrees",NA=".claude/worktrees",kA;var lB=N(()=>{p1();jz();O1();kA=[CA,NA]});class $B{activeSlugs;random;pool;pendingByRepo=new Map;chain=Promise.resolve();constructor(J,z={}){this.activeSlugs=J;if(this.random=z.random??Math.random,this.pool=z.pool??CV,this.pool.length===0)throw Error("SlugAllocator: animal pool cannot be empty")}async allocate(J){let z=this.chain,Y;this.chain=new Promise((Z)=>{Y=Z}),await z;try{return await this.pickLocked(J)}finally{Y()}}commit(J,z){this.deletePending(J,z)}cancel(J,z){this.deletePending(J,z)}async pickLocked(J){let z=await this.occupiedSlugs(J),Y=this.pool.filter((G)=>!z.has(G));if(Y.length>0){let G=Y[Math.floor(this.random()*Y.length)];return this.addPending(J,G),G}let Z=this.pool[Math.floor(this.random()*this.pool.length)];for(let G=2;;G++){let X=`${Z}-v${G}`;if(!z.has(X))return this.addPending(J,X),X}}async occupiedSlugs(J){let z=new Set(this.pendingByRepo.get(J)??[]);for(let Y of this.activeSlugs(J))if(Y)z.add(Y);for(let Y of await xV(J))z.add(Y);return z}addPending(J,z){let Y=this.pendingByRepo.get(J);if(!Y)Y=new Set,this.pendingByRepo.set(J,Y);Y.add(z)}deletePending(J,z){let Y=this.pendingByRepo.get(J);if(!Y)return;if(Y.delete(z),Y.size===0)this.pendingByRepo.delete(J)}}var hV=N(()=>{NV();lB()});var mV={};B1(mV,{PLACEHOLDER_TASK_TITLE:()=>Iz,Orchestrator:()=>Fq});import{realpathSync as IA}from"fs";import{basename as yA,resolve as TA}from"path";function vV(J){return az(J)?.basePath??J}class Fq{store;worktrees;slugs;tasksAcc;setTasks;activeTaskAcc;setActiveTaskSig;unsubscribeStore;worktreeLocks=new Map;mainTaskLocks=new Map;constructor(J){this.store=J.store,this.worktrees=J.worktrees,this.slugs=new $B((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[z,Y]=p(this.store.list());this.tasksAcc=z,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(J){let z=J===null?null:String(J);if(this.setActiveTaskSig(z),z&&this.store.get(z))await this.store.update(z,{})}tasksSignal(){return this.tasksAcc}subscribeTasks(J){return this.store.subscribe(J)}dispose(){this.unsubscribeStore()}listTasks(){return this.store.list()}getTask(J){return this.store.get(J)}async createTask(J){if(!J.repo)throw Error("createTask: repo is required");let z=(J.title??Iz).trim()||Iz,Y=await this.store.create({repo:J.repo,title:z,branch:J.branch??"",worktreePath:"",status:"backlog",kind:"task",vendor:J.vendor??d1,...J.modelEffort?{modelEffort:J.modelEffort}:{}});if(J.baseRef)this.pendingBaseRefs.set(Y.id,J.baseRef);return Y}async ensureMainTask(J){let{repo:z,key:Y}=MX(J),Z=this.store.list().find((Q)=>Q.kind==="main"&&MX(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:z,title:uA(z),branch:"",worktreePath:vV(z),status:"backlog",kind:"main",vendor:d1})})();this.mainTaskLocks.set(Y,X);try{return await X}finally{this.mainTaskLocks.delete(Y)}}async ensureWorktree(J){let z=this.requireTask(J);if(z.kind==="main")return vV(z.repo);if(z.worktreePath)return z.worktreePath;let Y=this.worktreeLocks.get(z.id);if(Y)return Y;let Z=this.createWorktree(z);this.worktreeLocks.set(z.id,Z);try{return await Z}finally{this.worktreeLocks.delete(z.id)}}async createWorktree(J){let z=await this.slugs.allocate(J.repo),Y=J.branch||Zq(J.title,J.id),Z=this.pendingBaseRefs.get(J.id),G;try{G=await this.worktrees.createForTask({repo:J.repo,slug:z,branch:Y,baseRef:Z})}catch(X){throw this.slugs.cancel(J.repo,z),X}try{await this.store.update(J.id,{worktreePath:G.path,branch:Y})}catch(X){throw await this.rollbackWorktree(G.path),this.slugs.cancel(J.repo,z),X}return this.slugs.commit(J.repo,z),this.pendingBaseRefs.delete(J.id),G.path}async rollbackWorktree(J){try{await this.worktrees.remove(J,{force:!0})}catch(z){console.error(`[kobe] ensureWorktree rollback failed for ${J}:`,z)}}async setTitle(J,z){let Y=z.trim();if(!Y)throw Error("setTitle: title is required (empty or whitespace-only rejected)");let Z=this.requireTask(J);if(Z.title===Y)return;await this.store.update(Z.id,{title:Y}),await this.followBranchToTitle(Z,Y)}async followBranchToTitle(J,z){if(J.kind==="main"||!J.worktreePath)return;if(J.branch!==Zq(Iz,J.id))return;let Y=Zq(z,J.id);if(Y===J.branch)return;try{await this.setBranch(J.id,Y)}catch(Z){console.error(`[kobe] follow-branch-to-title failed for ${J.id}:`,Z)}}async setBranch(J,z){let Y=z.trim();if(!Y)throw Error("setBranch: branch is required (empty or whitespace-only rejected)");let Z=this.requireTask(J);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(J,z){let Y=this.requireTask(J);if(Y.vendor===z)return;await this.store.update(Y.id,{vendor:z})}async setPinned(J,z){let Y=this.requireTask(J);if(Y.kind==="main")return;let Z=z??!Y.pinned;if((Y.pinned??!1)===Z)return;await this.store.update(Y.id,{pinned:Z})}async moveTask(J,z){let Y=this.requireTask(J);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,z,Z)}async setArchived(J,z){let Y=this.requireTask(J);if(Y.kind==="main")return;let Z=z??!Y.archived;if(Y.archived===Z)return;await this.store.update(Y.id,{archived:Z})}async reorderTasks(J){if(J.length===0)return;for(let z of J){if(this.requireTask(z.taskId).kind==="main")throw Error(`cannot reorder a main task: ${z.taskId}`);if(!Number.isFinite(z.position))throw Error(`position must be a finite number: ${z.taskId}`)}await this.store.reorder(J.map((z)=>({id:z.taskId,position:z.position})))}async setStatus(J,z){let Y=this.requireTask(J);if(Y.status===z)return;if(Y.status==="done"&&z==="error"||Y.status==="error"&&z==="done")throw new PB(Y.status,z,Y.id);await this.store.update(Y.id,{status:z})}async setPRStatus(J,z){let Y=this.requireTask(J);if(Lq(Y.prStatus,z??void 0))return;await this.store.update(Y.id,{prStatus:z??void 0})}async deleteTask(J,z){let Y=this.store.get(J);if(!Y)return;if(Y.kind==="main")throw new vB;let Z=z?.force===!0;if(Y.worktreePath){if(!Z){let G=!1;try{G=await this.worktrees.isDirty(Y.worktreePath)}catch{}if(G)throw new cB(Y.id)}try{await this.worktrees.remove(Y.worktreePath,{force:Z})}catch(G){throw new dB(Y.id,G)}}await this.store.remove(Y.id),this.pendingBaseRefs.delete(Y.id),this.worktreeLocks.delete(Y.id)}async forgetProject(J){if(!J)throw Error("forgetProject: repo is required");let z=MX(J).key;for(let Y of gJ())if(MX(Y).key===z)iH(Y);for(let Y of this.store.list()){if(Y.kind!=="main")continue;if(MX(Y.repo).key!==z)continue;await this.store.remove(Y.id),this.pendingBaseRefs.delete(Y.id),this.worktreeLocks.delete(Y.id)}}async discoverAdoptableWorktrees(J){if(!J)throw Error("discoverAdoptableWorktrees: repo is required");let z=await this.worktrees.listAll(J),Y=new Set(this.store.list().filter((Z)=>Z.worktreePath).map((Z)=>ZG(Z.worktreePath)));return z.filter((Z)=>!Y.has(ZG(Z.path)))}async adoptWorktree(J){if(!J.repo)throw Error("adoptWorktree: repo is required");if(!J.worktreePath)throw Error("adoptWorktree: worktreePath is required");let z=ZG(J.worktreePath),Y=this.adoptLocks.get(z);if(Y)return Y;let Z=this.adoptWorktreeLocked(J,z);this.adoptLocks.set(z,Z);try{return await Z}finally{this.adoptLocks.delete(z)}}async adoptWorktreeLocked(J,z){let Y=this.store.list().find((f)=>f.worktreePath&&ZG(f.worktreePath)===z);if(Y){if(J.ifExists==="return")return Y;throw Error(`adoptWorktree: ${J.worktreePath} is already adopted as a task`)}let G=(await this.worktrees.listAll(J.repo)).find((f)=>ZG(f.path)===z);if(!G)throw Error(`adoptWorktree: ${J.worktreePath} is not an adoptable git worktree of ${J.repo} (unknown, detached, or the main checkout)`);let X=J.branch?.trim()||G.branch,Q=(J.title??yA(G.path)).trim()||Iz;return this.store.create({repo:J.repo,title:Q,branch:X,worktreePath:G.path,status:"backlog",kind:"task",vendor:J.vendor??d1})}pendingBaseRefs=new Map;adoptLocks=new Map;requireTask(J){let z=this.store.get(J);if(!z)throw new hB(String(J));return z}}function uA(J){let z=J.split(/[/\\]/).filter(Boolean);return z.length>0?z[z.length-1]??J:J}function MX(J){let z=iz(J);return{repo:z,key:$1(z)?z:ZG(z)}}function ZG(J){try{return IA(J)}catch{return TA(J)}}var Iz="(new task)";var FX=N(()=>{j1();wB();O1();pJ();nB();hV()});function GG(J,z,Y){if(!z)return J;let Z=YG(z);return Z.ensureReady(),Z.wrapCommand(J,{tty:!0,cwd:Y})}function zJ(){let J=[];for(let z of["KOBE_HOME_DIR","KOBE_DAEMON_SOCKET_PATH","KOBE_TMUX_SOCKET"]){let Y=process.env[z];if(Y&&Y.length>0)J.push(`${z}=${X1(Y)}`)}return J.length>0?`${J.join(" ")} `:""}var OX="@kobe_remote";var DZ=N(()=>{jz();fz()});var CX={};B1(CX,{windowIsSurface:()=>vA,windowCount:()=>wA,tmuxSessionName:()=>M1,tmuxCommandSequence:()=>_B,tmuxAvailable:()=>yz,tmuxArgs:()=>LZ,tagPaneRole:()=>nV,tagClaudePane:()=>hA,switchClientBeforeKill:()=>uz,setWindowOption:()=>IY,setSessionOption:()=>bY,sessionExists:()=>W1,sendKeys:()=>Aq,sendKeyName:()=>gX,runTmuxSequenceCapturing:()=>AX,runTmuxSequence:()=>n1,runTmuxCapturing:()=>l0,runTmux:()=>P0,paneIdByRole:()=>rB,newWindow:()=>Vz,killSession:()=>rJ,globalTasksPaneWidth:()=>Oq,getSessionOptions:()=>IJ,getSessionOption:()=>MZ,getServerOptions:()=>SY,getServerOption:()=>dV,ensureFallbackSession:()=>Rq,currentSessionName:()=>yJ,claudePaneIdStrict:()=>qG,claudePaneId:()=>oB,capturePaneById:()=>fG,attachArgv:()=>QG,SURFACE_WINDOW_OPTION:()=>sB,PANE_ROLE_OPTION:()=>RX,KOBE_TMUX_SOCKET:()=>Wz,KOBE_HOME_SESSION:()=>iV,CLAUDE_ROLE_OPTION:()=>PA,CHAT_TAB_SESSION_ID_OPTION:()=>Tz});import{homedir as xA}from"os";function LZ(...J){return["tmux","-L",Wz,...J]}function M1(J){return`kobe-${J.replace(/[^A-Za-z0-9_-]/g,"")}`}function QG(J){return LZ("attach-session","-t",`=${J}`)}async function aB(J){if(!J)return"";try{return await new Response(J).text()}catch{return""}}async function P0(J){try{let z=Bun.spawn(LZ(...J),{stdin:"ignore",cwd:XG,stdout:"ignore",stderr:"pipe"}),[Y,Z]=await Promise.all([aB(z.stderr),z.exited]);if(Z!==0&&Y.trim().length>0)console.error(`[kobe tmux] ${J.join(" ")} (${Z}): ${Y.trim()}`);return Z}catch{return 1}}async function EA(J){try{return await Bun.spawn(LZ(...J),{stdin:"ignore",cwd:XG,stdout:"ignore",stderr:"ignore"}).exited}catch{return 1}}function _B(J){let z=[];for(let Y of J){if(Y.length===0)continue;if(z.length>0)z.push(";");z.push(...Y)}return z}async function n1(J){let z=_B(J);return z.length===0?0:P0(z)}async function l0(J){try{let z=Bun.spawn(LZ(...J),{stdin:"ignore",cwd:XG,stdout:"pipe",stderr:"pipe"}),[Y,Z,G]=await Promise.all([aB(z.stdout),aB(z.stderr),z.exited]);if(G!==0&&Z.trim().length>0)console.error(`[kobe tmux] ${J.join(" ")} (${G}): ${Z.trim()}`);return{code:G,stdout:Y}}catch{return{code:1,stdout:""}}}async function AX(J){let z=_B(J);return z.length===0?{code:0,stdout:""}:l0(z)}async function yz(){try{return await Bun.spawn(["tmux","-V"],{stdin:"ignore",cwd:XG,stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function W1(J){return await EA(["has-session","-t",`=${J}`])===0}async function wA(J){let{code:z,stdout:Y}=await l0(["list-windows","-t",`=${J}`,"-F","#{window_id}"]);if(z!==0)return 0;return Y.split(`
36
+ `).filter((Z)=>Z.trim().length>0).length}async function bY(J,z,Y){await P0(["set-option","-t",J,z,Y])}async function MZ(J,z){let{code:Y,stdout:Z}=await l0(["show-options","-v","-t",J,z]);return Y===0?Z.trim():""}async function IJ(J,z){let Y=Object.fromEntries(z.map((X)=>[X,void 0])),{code:Z,stdout:G}=await AX(z.map((X)=>["show-options","-q","-t",J,X]));if(Z!==0)return Y;for(let X of G.split(`
37
+ `)){let Q=X.indexOf(" ");if(Q<=0)continue;let f=X.slice(0,Q);if(f in Y)Y[f]=X.slice(Q+1).trim()}return Y}async function dV(J){let{code:z,stdout:Y}=await l0(["show-options","-sqv",J]);return z===0?Y.trim():""}async function SY(J){let z=Object.fromEntries(J.map((G)=>[G,void 0])),{code:Y,stdout:Z}=await AX(J.map((G)=>["show-options","-sq",G]));if(Y!==0)return z;for(let G of Z.split(`
38
+ `)){let X=G.indexOf(" ");if(X<=0)continue;let Q=G.slice(0,X);if(Q in z)z[Q]=G.slice(X+1).trim()}return z}async function Oq(){let J=await dV(tz),z=Number.parseInt(J,10);return Number.isFinite(z)&&z>0?HZ(z):qZ}async function nV(J,z){await P0(["set-option","-p","-t",J,RX,z])}async function IY(J,z,Y){await P0(["set-window-option","-t",J,z,Y])}async function hA(J){await nV(J,pB)}async function rB(J,z,Y=!1){let{code:Z,stdout:G}=await l0(["list-panes","-t",`=${J}`,"-F",`#{pane_id} #{${RX}}`]);if(Z!==0)return"";let X="";for(let Q of G.split(`
39
+ `)){let[f,H]=Q.split("\t");if(!f)continue;if(!X)X=f.trim();if(H?.trim()===z)return f.trim()}return Y?X:""}async function oB(J){return rB(J,pB,!0)}async function qG(J){return rB(J,pB,!1)}async function fG(J,z){if(!J)return"";let Y=["capture-pane","-t",J,"-p"];if(typeof z==="number"&&z>0)Y.push("-S",String(-z));let{code:Z,stdout:G}=await l0(Y);return Z===0?G:""}async function Aq(J,z){await P0(["send-keys","-t",J,"-l","--",z])}async function gX(J,z){await P0(["send-keys","-t",J,z])}async function Vz(J,z){let Y=["new-window","-t",`=${J}`,"-c",z.cwd];if(z.name)Y.push("-n",z.name);if(z.surface){Y.push("-P","-F","#{window_id}"),Y.push(z.command);let{code:Z,stdout:G}=await l0(Y),X=G.trim();if(Z===0&&X)await IY(X,sB,"1");return}Y.push(z.command),await P0(Y)}async function vA(J){let{code:z,stdout:Y}=await l0(["display-message","-t",J,"-p",`#{${sB}}`]);return z===0&&Y.trim()==="1"}async function yJ(){let J=["display-message","-p"],z=process.env.TMUX_PANE;if(z&&z.length>0)J.push("-t",z);J.push("#{session_name}");let{code:Y,stdout:Z}=await l0(J),G=Z.trim();return Y===0&&G.length>0?G:null}async function rJ(J){if(!J.startsWith("kobe-hidden-")){let z=QX(J);if(await W1(z))await P0(["kill-session","-t",`=${z}`])}if(await W1(J))await P0(["kill-session","-t",`=${J}`])}async function Rq(){let J=iV;if(await W1(J)){if(await MZ(J,cV)==="tasks")return J;await P0(["kill-session","-t",`=${J}`])}let Y=(await l0(["new-session","-d","-s",J,"-c",XG,"-x","220","-y","50","-P","-F","#{pane_id}",U7()])).stdout.trim();if(Y){let Z=await Oq(),X=(await l0(["split-window","-h","-b","-t",Y,"-l",`${Z}`,"-c",XG,"-P","-F","#{pane_id}",kJ(zJ()+gY(k1()))])).stdout.trim();if(X)await n1([["set-option","-p","-t",X,RX,"tasks"],["select-pane","-t",X]])}return await bY(J,cV,"tasks"),J}async function uz(J,z){if(await yJ()!==J)return;if(z&&z!==J&&await W1(z)){await P0(["switch-client","-t",`=${z}`]);return}let Z=await Rq();await P0(["switch-client","-t",`=${Z}`])}var Wz,XG,RX="@kobe_role",PA,pB="claude",Tz="@kobe_session_id",sB="@kobe_surface",iV="kobe-home",cV="@kobe_home";var P1=N(()=>{sz();DZ();fz();Wz=process.env.KOBE_TMUX_SOCKET?.trim()||"kobe";XG=xA()||"/";PA=RX});async function mA(J,z=lV){let{code:Y,stdout:Z}=await z.capture(["list-windows","-t",`=${J}`,"-F",`#{window_index} #{automatic-rename} #{${Tz}}`]);if(Y!==0)return[];let G=[];for(let X of Z.split(`
40
+ `)){let[Q,f,H]=X.split("\t"),B=Number.parseInt((Q??"").trim(),10);if(!Number.isInteger(B))continue;G.push({index:B,sessionId:H?.trim()??"",autoRename:f?.trim()??""})}return G}async function cA(J,z,Y){let{code:Z,stdout:G}=await Y.capture(["show-window-options","-t",`=${J}:${z}`,"automatic-rename"]);return Z===0&&/\boff\b/.test(G)}async function dA(J){let{code:z,stdout:Y}=await J.capture(["show-window-options","-g","automatic-rename"]);return z===0&&/\boff\b/.test(Y)}async function nA(J,z,Y,Z){return await Z.run(["rename-window","-t",`=${J}:${z}`,"--",Y])===0}async function $V(J,z=iA){let Y=0,Z=null,G=async(X,Q)=>{if(Q.autoRename==="1")return!1;if(Q.autoRename==="0"){if(Z===null)Z=await dA(z.runner);if(!Z)return!0}return cA(X,Q.index,z.runner)};for(let X of J.listTasks()){if(X.archived||X.kind==="main"||!X.worktreePath)continue;let Q=M1(X.id),f=await mA(Q,z.runner);if(f.length===0)continue;let H=f.reduce((V,j)=>Math.min(V,j.index),Number.POSITIVE_INFINITY),B=X.vendor??d1;for(let V of f)try{if(await G(Q,V))continue;let j=V.sessionId?await z.titleFromSessionId(B,V.sessionId):V.index===H?await z.titleFromWorktree(X.worktreePath,B):"";if(j&&await nA(Q,V.index,j,z.runner))Y++}catch{}}return Y}var lV,iA;var aV=N(()=>{Gq();P1();pJ();lV={capture:l0,run:P0};iA={runner:lV,titleFromSessionId:ZV,titleFromWorktree:oZ}});function pV(J){if(J instanceof Error)return J;let z;try{z=typeof J==="string"?J:JSON.stringify(J)}catch{z=String(J)}return Error(z)}function _V(J,z,Y=new Date){let Z=pV(z);return`[${Y.toISOString()}] daemon ${J}: ${Z.stack??`${Z.name}: ${Z.message}`}
41
+ `}function lA(J,z,Y=new Date){let Z=pV(z);return`[${Y.toISOString()}] daemon error [${J}]: ${Z.stack??`${Z.name}: ${Z.message}`}
42
+ `}function I1(J,z){process.stderr.write(lA(J,z))}function $A(J,z,Y=new Date){return`[${Y.toISOString()}] daemon [${J}]: ${z}
43
+ `}function xz(J,z){process.stderr.write($A(J,z))}function rV(J=(z)=>process.stderr.write(z)){if(tB||eB)return;tB=(z)=>J(_V("unhandledRejection",z)),eB=(z)=>J(_V("uncaughtException",z)),process.on("unhandledRejection",tB),process.on("uncaughtException",eB)}var tB,eB;async function aA(J,z=oZ){let Y=[];for(let Z of J.listTasks()){if(Z.archived||Z.title!==Iz||!Z.worktreePath)continue;try{let G=await z(Z.worktreePath,Z.vendor??d1);if(!G)continue;let X=J.getTask(Z.id);if(!X||X.title!==Iz)continue;await J.setTitle(Z.id,G),Y.push({id:Z.id,title:G})}catch(G){I1("auto-title-poller",G)}}return Y}function oV(J,z=J8,Y){if(z<=0)return()=>{};let Z=!1,X=setInterval(()=>{if(Y&&!Y())return;if(Z)return;Z=!0,aA(J).then(()=>$V(J)).catch((Q)=>I1("auto-title-poller",Q)).finally(()=>{Z=!1})},z);return X.unref?.(),()=>clearInterval(X)}var J8=4000;var sV=N(()=>{Gq();FX();aV();pJ()});class z8{socket;highWaterMark;queue=[];queuedBytes=0;paused=!1;draining=!1;droppedFrames=0;constructor(J,z={}){this.socket=J,this.highWaterMark=z.highWaterMark??8388608}get isPaused(){return this.paused}get pendingBytes(){return this.queuedBytes}get pendingCount(){return this.queue.length}get dropped(){return this.droppedFrames}write(J,z){if(!this.paused){if(this.safeWrite(J))return;this.pause();return}this.enqueue({line:J,bytes:Buffer.byteLength(J),critical:z})}enqueue(J){if(this.queue.push(J),this.queuedBytes+=J.bytes,this.queuedBytes<=this.highWaterMark)return;let z=[];for(let Y of this.queue){if(this.queuedBytes>this.highWaterMark&&!Y.critical){this.queuedBytes-=Y.bytes,this.droppedFrames++;continue}z.push(Y)}this.queue=z}pause(){if(this.draining)return;this.paused=!0,this.draining=!0,this.socket.once("drain",()=>{this.draining=!1,this.paused=!1,this.flush()})}flush(){while(this.queue.length>0){let J=this.queue[0],z=this.safeWrite(J.line);if(this.queue.shift(),this.queuedBytes-=J.bytes,!z){this.pause();return}}}safeWrite(J){try{return this.socket.write(J)}catch{return!0}}}class Y8{last=new Map;sinks=new Set;publish(J,z){this.last.set(J,z);let Y={channel:J,payload:z};for(let Z of this.sinks)Z(Y)}snapshot(){return[...this.last].map(([J,z])=>({channel:J,payload:z}))}onPublish(J){return this.sinks.add(J),()=>{this.sinks.delete(J)}}}function gq(){return l1()[FZ]===!0}var FZ="experimental.autoStatus";var NX=N(()=>{YZ()});async function tV(J,z,Y=gq){if(!Y())return"skipped";let Z=J.getTask(z);if(!Z)return"skipped";if((Z.kind??"task")==="main"||Z.archived)return"skipped";if(Z.status!=="backlog")return"skipped";return await J.setStatus(z,"in_progress"),"moved"}var eV=N(()=>{NX()});import{createHash as _A}from"crypto";import{homedir as pA}from"os";import TY from"path";function eA(){return TY.join(process.env.KOBE_HOME_DIR??pA(),".kobe")}function JR(J){let Y=(TY.basename(J)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",Z=_A("sha1").update(TY.resolve(J)).digest("hex").slice(0,12);return`${Y}-${Z}`}function zR(J){if(!TY.isAbsolute(J))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${J}`);return TY.join(eA(),rA,JR(J))}function YR(J){if(!TY.isAbsolute(J))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${J}`);return[zR(J),...tA.map((z)=>TY.join(J,z))]}function yY(J){return J.length>1&&J.endsWith("/")?J.slice(0,-1):J}function J5(J,z){return z===J||z.startsWith(`${J}/`)}function z5(J,z){let Y=yY(z),Z,G=-1;for(let X of J){if(!X.worktreePath)continue;let Q=yY(X.worktreePath);if(J5(Q,Y)&&Q.length>G)G=Q.length,Z=X.id}return Z}function Z8(J,z){let Y=yY(z),Z,G=-1;for(let X of J){if(!X.repo)continue;let Q=yY(X.repo);if(J5(Q,Y)&&Q.length>G)G=Q.length,Z=Q}return Z}function Y5(J,z){let Y=yY(z),Z=new Set,G=new Set;for(let X of J){if(X.repo)Z.add(yY(X.repo));if(X.worktreePath)G.add(yY(X.worktreePath))}for(let X of Z)for(let Q of YR(X).map(yY)){let f=`${Q}/`;if(!Y.startsWith(f))continue;let B=Y.slice(f.length).split("/")[0];if(!B)continue;let V=`${f}${B}`;if(G.has(V))return;return{repo:X,worktreePath:V}}return}var rA="worktrees",oA=".kobe/worktrees",sA=".claude/worktrees",tA;var Z5=N(()=>{tA=[oA,sA]});function Q8(J){return{message:J instanceof Error?J.message:String(J),name:J instanceof Error?J.name:void 0}}async function kX(J,z,Y,Z){let G=J.get(z);if(!G)throw Error(`unknown daemon request: ${z}`);return G.handle(q8(Y),Z)}function bX(){return new Map([{name:"hello",handle(z,Y){let Z=typeof z.protocolVersion==="number"?z.protocolVersion:lJ,G=typeof z.minProtocolVersion==="number"?z.minProtocolVersion:Z;if(!yQ({localVersion:lJ,localMin:MY,remoteVersion:Z,remoteMin:G}))throw Error(`daemon is protocol v${lJ} (min v${MY}); this client is v${Z} (min v${G}). Upgrade your kobe.`);return{protocolVersion:lJ,minProtocolVersion:MY,kobeVersion:t0,capabilities:[..._H],daemonPid:Y.daemon.pid,clientId:Y.clientId,tasks:Y.orch.listTasks().map(Gz)}}},{name:"daemon.status",handle(z,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(z,Y){return await Y.daemon.stopSoon(),{}}},{name:"task.list",handle(z,Y){return{tasks:Y.orch.listTasks().map(Gz)}}},{name:"task.get",handle(z,Y){let Z=A1(z,"taskId"),G=Y.orch.getTask(Z);if(!G)throw Error(`task not found: ${Z}`);return{task:Gz(G)}}},{name:"task.create",async handle(z,Y){let Z=A1(z,"repo"),G=await Y.orch.createTask({repo:Z,title:oJ(z,"title"),branch:oJ(z,"branch"),baseRef:oJ(z,"baseRef"),vendor:X8(z,"vendor"),modelEffort:oJ(z,"effort")});return{taskId:G.id,task:Gz(G)}}},{name:"task.archive",async handle(z,Y){let Z=A1(z,"taskId");return await Y.orch.setArchived(Z,G8(z,"archived")),{}}},{name:"task.rename",async handle(z,Y){let Z=A1(z,"taskId");return await Y.orch.setTitle(Z,A1(z,"title")),{}}},{name:"task.setBranch",async handle(z,Y){let Z=A1(z,"taskId");return await Y.orch.setBranch(Z,A1(z,"branch")),{}}},{name:"task.setVendor",async handle(z,Y){let Z=A1(z,"taskId"),G=X8(z,"vendor");if(!G)throw Error("task.setVendor: vendor is required");return await Y.orch.setVendor(Z,G),{}}},{name:"task.delete",async handle(z,Y){let Z=A1(z,"taskId");return await Y.orch.deleteTask(Z,{force:G8(z,"force")}),Y.activity.clearTask(Z),{}}},{name:"task.pin",async handle(z,Y){let Z=A1(z,"taskId");return await Y.orch.setPinned(Z,G8(z,"pinned")),{}}},{name:"task.move",async handle(z,Y){let Z=A1(z,"taskId"),G=A1(z,"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(z,Y){let Z=A1(z,"taskId"),G=A1(z,"status");if(!s7(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 f=await Y.issues.mirrorTaskDone(X.repo,Z);if(f)Y.bus.publish("issue.snapshot",f)}catch(f){I1("issue-done-mirror",f)}return{}}},{name:"task.reorder",async handle(z,Y){let Z=z.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,f=A1(Q,"taskId"),H=Q.position;if(typeof H!=="number"||!Number.isFinite(H))throw Error("position must be a finite number");return{taskId:f,position:H}});return await Y.orch.reorderTasks(G),{}}},{name:"task.ensureMain",async handle(z,Y){let Z=A1(z,"repo"),G=await Y.orch.ensureMainTask(Z);return{task:Gz(G)}}},{name:"project.forget",async handle(z,Y){let Z=A1(z,"repo");return await Y.orch.forgetProject(Z),{}}},{name:"task.ensureWorktree",async handle(z,Y){let Z=A1(z,"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(z,Y){let Z=A1(z,"repo");return{worktrees:await Y.orch.discoverAdoptableWorktrees(Z)}}},{name:"worktree.adopt",async handle(z,Y){let Z=await Y.orch.adoptWorktree({repo:A1(z,"repo"),worktreePath:A1(z,"worktreePath"),branch:oJ(z,"branch"),vendor:X8(z,"vendor"),title:oJ(z,"title"),ifExists:oJ(z,"ifExists")==="return"?"return":"error"});return{task:Gz(Z)}}},{name:"worktree.reconcile",async handle(z,Y){let Z=A1(z,"cwd"),G=A1(z,"worktreePath"),X=Z8(Y.orch.listTasks(),Z)??Z8(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 I1("worktree-created",Q),{adopted:!1}}}},{name:"task.setActive",async handle(z,Y){let Z=oJ(z,"taskId")??null;return await Y.orch.setActiveTask(Z),Y.bus.publish("active-task",{taskId:Z}),{}}},{name:"issue.list",async handle(z,Y){return Y.issues.list(A1(z,"repoRoot"))}},{name:"issue.mutate",async handle(z,Y){let Z=await Y.issues.mutate(A1(z,"repoRoot"),z.op);return Y.bus.publish("issue.snapshot",Z),Z}},{name:"session.deliver",async handle(z,Y){let Z=A1(z,"taskId"),G=A1(z,"text"),X=oJ(z,"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(z,Y){let Z=A1(z,"taskId"),G=A1(z,"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 f=X.title||X.branch||Z;return Y.bus.publish("session.deliver",{taskId:Q.id,text:`[KOBE FIELD NOTE] from "${f}" (task ${Z}): ${G}`,at:Date.now(),source:"note"}),{ok:!0,routed:!0}}},{name:"engine.reportEvent",async handle(z,Y){let Z=A1(z,"kind");if(!zq(Z))throw Error(`unknown engine event kind: ${Z}`);let G=oJ(z,"taskId"),X=oJ(z,"cwd");if(!G&&X&&Z==="session-start"){let H=Y5(Y.orch.listTasks(),X);if(H)try{await Y.orch.adoptWorktree({repo:H.repo,worktreePath:H.worktreePath,ifExists:"return"})}catch(B){I1("worktree-autosync",B)}}let Q=G??(X?z5(Y.orch.listTasks(),X):void 0);if(!Q)return{};let f=ZR(z);if(Y.activity.report(Q,Z,f),Z==="turn-start")tV(Y.orch,Q).then((H)=>{if(H==="moved")console.log(`[status-rules] task ${Q} auto-moved backlog \u2192 in_progress`)}).catch((H)=>I1("status-rules",H));return{}}}].map((z)=>[z.name,z]))}function q8(J){if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function A1(J,z){let Y=J[z];if(typeof Y!=="string"||Y.length===0)throw Error(`${z} is required`);return Y}function oJ(J,z){let Y=J[z];if(Y===void 0||Y===null||Y==="")return;if(typeof Y!=="string")throw Error(`${z} must be a string`);return Y}function G8(J,z){let Y=J[z];if(Y===void 0||Y===null)return;if(typeof Y!=="boolean")throw Error(`${z} must be a boolean`);return Y}function X8(J,z){let Y=oJ(J,z);return Y&&Y.trim().length>0?Y:void 0}function ZR(J){let z=J.detail;if(!z||typeof z!=="object"||Array.isArray(z))return;let Y=z,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 Cq=N(()=>{Yq();eV();pJ();FJ();Z5();ZZ()});import{execFile as GR}from"child_process";import{mkdir as XR,readFile as QR,realpath as G5,rename as qR,stat as fR,writeFile as HR}from"fs/promises";import{homedir as BR}from"os";import{dirname as jR,isAbsolute as WR,join as VR,resolve as X5}from"path";import{promisify as KR}from"util";function UR(J){return(J instanceof Error?J.message:String(J)).includes("not a git repository")}function kq(J=process.env.KOBE_HOME_DIR??BR()){return VR(J,".kobe","issues.json")}function q5(J){return typeof J==="string"&&Q5.includes(J)}function DR(J){if(J===null||typeof J!=="object"||Array.isArray(J))return null;let z=J;if(typeof z.id!=="number")return null;return{id:z.id,title:typeof z.title==="string"?z.title:"(untitled)",status:q5(z.status)?z.status:"open",created:typeof z.created==="string"?z.created:"",body:typeof z.body==="string"?z.body:"",taskId:typeof z.taskId==="string"?z.taskId:void 0}}function LR(){return{version:1,repos:{}}}function MR(){let J=new Date,z=String(J.getMonth()+1).padStart(2,"0"),Y=String(J.getDate()).padStart(2,"0");return`${J.getFullYear()}-${z}-${Y}`}async function FR(J){let{stdout:z}=await V8("git",["-C",J,"rev-parse","--git-common-dir"]),Y=z.trim();return G5(WR(Y)?Y:X5(J,Y))}async function OR(J){let{stdout:z}=await V8("git",["-C",J,"rev-parse","--show-toplevel"]);return z.trim()}async function AR(J){let{stdout:z}=await V8("git",["-C",J,"worktree","list","--porcelain"]),Y=z.split(/\r?\n/).find((Z)=>Z.startsWith("worktree "))?.slice(9).trim();return Y?G5(Y):OR(J)}async function f8(J){if(typeof J!=="string"||J.length===0)throw Error("repoRoot is required");let z=X5(J);if(!(await fR(z).catch(()=>null))?.isDirectory())throw Error("repoRoot does not exist");try{let[Z,G]=await Promise.all([AR(z),FR(z)]);return{repoRoot:Z,repoKey:G}}catch(Z){if(UR(Z))throw Error("repoRoot is not a git repository");throw Z}}async function H8(J){try{let z=JSON.parse(await QR(J,"utf8")),Y={};if(z.repos&&typeof z.repos==="object")for(let[Z,G]of Object.entries(z.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(DR).filter((Q)=>Q!==null):[]}}return{version:1,repos:Y}}catch(z){if(z.code==="ENOENT")return LR();throw z}}async function B8(J,z){await XR(jR(J),{recursive:!0});let Y=`${J}.tmp`;await HR(Y,`${JSON.stringify(z,null,2)}
44
+ `,"utf8"),await qR(Y,J)}function j8(J,z){return{repoRoot:J,exists:z!==null,nextId:z?.nextId??1,issues:z?.issues??[]}}async function W8(J,z){let Z=(Nq.get(J)??Promise.resolve()).then(z),G=Z.then(()=>{return},()=>{return});return Nq.set(J,G),G.then(()=>{if(Nq.get(J)===G)Nq.delete(J)}),Z}class bq{path;constructor(J=kq()){this.path=J}async list(J){let{repoRoot:z,repoKey:Y}=await f8(J);return W8(this.path,async()=>{let Z=await H8(this.path),G=Z.repos[Y]??null;if(G&&G.repoRoot!==z)G.repoRoot=z,await B8(this.path,Z);return j8(z,G)})}async mirrorTaskDone(J,z){let{repoRoot:Y,repoKey:Z}=await f8(J);if(!z)return null;return W8(this.path,async()=>{let G=await H8(this.path),X=G.repos[Z];if(!X)return null;let Q=X.issues.find((f)=>f.taskId===z);if(!Q||Q.status==="done")return null;return Q.status="done",X.repoRoot=Y,await B8(this.path,G),j8(Y,X)})}async mutate(J,z){let{repoRoot:Y,repoKey:Z}=await f8(J);if(!z||typeof z!=="object"||Array.isArray(z)||typeof z.type!=="string")throw Error("missing op");return W8(this.path,async()=>{let G=await H8(this.path),X=G.repos[Z];if(!X)X={repoRoot:Y,nextId:1,issues:[]},G.repos[Z]=X;X.repoRoot=Y;let Q=z;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:MR(),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(!q5(Q.status))throw Error(`invalid status: must be one of ${Q5.join(", ")}`);let f=X.issues.find((H)=>H.id===Q.id);if(!f)throw Error(`no issue #${Q.id}`);f.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 f=X.issues.find((H)=>H.id===Q.id);if(!f)throw Error(`no issue #${Q.id}`);if(typeof Q.title==="string")f.title=Q.title;if(typeof Q.body==="string")f.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 f=X.issues.find((H)=>H.id===Q.id);if(!f)throw Error(`no issue #${Q.id}`);f.taskId=Q.taskId}else if(Q.type==="unlink"){if(typeof Q.id!=="number")throw Error("unlink requires a numeric id");let f=X.issues.find((H)=>H.id===Q.id);if(!f)throw Error(`no issue #${Q.id}`);f.taskId=void 0}else if(Q.type==="delete"){if(typeof Q.id!=="number")throw Error("delete requires a numeric id");let f=X.issues.filter((H)=>H.id!==Q.id);if(f.length===X.issues.length)throw Error(`no issue #${Q.id}`);X.issues=f}else throw Error(`unknown op type: ${Q.type}`);return await B8(this.path,G),j8(Y,X)})}}var V8,Q5,Nq;var K8=N(()=>{V8=KR(GR),Q5=["open","doing","hold","done"];Nq=new Map});import{lstat as f5,readdir as RR,realpath as gR,stat as CR}from"fs/promises";import{join as NR,relative as kR,resolve as H5,sep as bR}from"path";import{Readable as SR}from"stream";function K5(J,z={}){let Y=z.entryType||z.type;if(Y==="both")Y=PJ.FILE_DIR_TYPE;if(Y)z.type=Y;if(!J)throw Error("readdirp: root argument is required. Usage: readdirp(root, options)");else if(typeof J!=="string")throw TypeError("readdirp: root argument must be a string. Usage: readdirp(root, options)");else if(Y&&!B5.includes(Y))throw Error(`readdirp: Invalid type passed. Use one of ${B5.join(", ")}`);return z.root=J,new D8(z)}var PJ,U8,V5="READDIRP_RECURSIVE_ERROR",IR,B5,yR,TR,uR=(J)=>IR.has(J.code),xR,j5=(J)=>!0,W5=(J)=>{if(J===void 0)return j5;if(typeof J==="function")return J;if(typeof J==="string"){let z=J.trim();return(Y)=>Y.basename===z}if(Array.isArray(J)){let z=J.map((Y)=>Y.trim());return(Y)=>z.some((Z)=>Y.basename===Z)}return j5},D8;var U5=N(()=>{PJ={FILE_TYPE:"files",DIR_TYPE:"directories",FILE_DIR_TYPE:"files_directories",EVERYTHING_TYPE:"all"},U8={root:".",fileFilter:(J)=>!0,directoryFilter:(J)=>!0,type:PJ.FILE_TYPE,lstat:!1,depth:2147483648,alwaysStat:!1,highWaterMark:4096};Object.freeze(U8);IR=new Set(["ENOENT","EPERM","EACCES","ELOOP",V5]),B5=[PJ.DIR_TYPE,PJ.EVERYTHING_TYPE,PJ.FILE_DIR_TYPE,PJ.FILE_TYPE],yR=new Set([PJ.DIR_TYPE,PJ.EVERYTHING_TYPE,PJ.FILE_DIR_TYPE]),TR=new Set([PJ.EVERYTHING_TYPE,PJ.FILE_DIR_TYPE,PJ.FILE_TYPE]),xR=process.platform==="win32";D8=class D8 extends SR{parents;reading;parent;_stat;_maxDepth;_wantsDir;_wantsFile;_wantsEverything;_root;_isDirent;_statsProp;_rdOptions;_fileFilter;_directoryFilter;constructor(J={}){super({objectMode:!0,autoDestroy:!0,highWaterMark:J.highWaterMark});let z={...U8,...J},{root:Y,type:Z}=z;this._fileFilter=W5(z.fileFilter),this._directoryFilter=W5(z.directoryFilter);let G=z.lstat?f5:CR;if(xR)this._stat=(X)=>G(X,{bigint:!0});else this._stat=G;this._maxDepth=z.depth!=null&&Number.isSafeInteger(z.depth)?z.depth:U8.depth,this._wantsDir=Z?yR.has(Z):!1,this._wantsFile=Z?TR.has(Z):!1,this._wantsEverything=Z===PJ.EVERYTHING_TYPE,this._root=H5(Y),this._isDirent=!z.alwaysStat,this._statsProp=this._isDirent?"dirent":"stats",this._rdOptions={encoding:"utf8",withFileTypes:this._isDirent},this.parents=[this._exploreDir(Y,1)],this.reading=!1,this.parent=void 0}async _read(J){if(this.reading)return;this.reading=!0;try{while(!this.destroyed&&J>0){let z=this.parent,Y=z&&z.files;if(Y&&Y.length>0){let{path:Z,depth:G}=z,X=Y.splice(0,J).map((f)=>this._formatEntry(f,Z)),Q=await Promise.all(X);for(let f of Q){if(!f)continue;if(this.destroyed)return;let H=await this._getEntryType(f);if(H==="directory"&&this._directoryFilter(f)){if(G<=this._maxDepth)this.parents.push(this._exploreDir(f.fullPath,G+1));if(this._wantsDir)this.push(f),J--}else if((H==="file"||this._includeAsFile(f))&&this._fileFilter(f)){if(this._wantsFile)this.push(f),J--}}}else{let Z=this.parents.pop();if(!Z){this.push(null);break}if(this.parent=await Z,this.destroyed)return}}}catch(z){this.destroy(z)}finally{this.reading=!1}}async _exploreDir(J,z){let Y;try{Y=await RR(J,this._rdOptions)}catch(Z){this._onError(Z)}return{files:Y,depth:z,path:J}}async _formatEntry(J,z){let Y,Z=this._isDirent?J.name:J;try{let G=H5(NR(z,Z));Y={path:kR(this._root,G),fullPath:G,basename:Z},Y[this._statsProp]=this._isDirent?J:await this._stat(G)}catch(G){this._onError(G);return}return Y}_onError(J){if(uR(J)&&!this.destroyed)this.emit("warn",J);else this.destroy(J)}async _getEntryType(J){if(!J&&this._statsProp in J)return"";let z=J[this._statsProp];if(z.isFile())return"file";if(z.isDirectory())return"directory";if(z&&z.isSymbolicLink()){let Y=J.fullPath;try{let Z=await gR(Y),G=await f5(Z);if(G.isFile())return"file";if(G.isDirectory()){let X=Z.length;if(Y.startsWith(Z)&&Y.substr(X,1)===bR){let Q=Error(`Circular symlink detected: "${Y}" points to "${Z}"`);return Q.code=V5,this._onError(Q)}return"directory"}}catch(Z){return this._onError(Z),""}}}_includeAsFile(J){let z=J&&J[this._statsProp];return z&&this._wantsEverything&&!z.isDirectory()}}});import{watch as ER,unwatchFile as D5,watchFile as wR}from"fs";import{realpath as L8,lstat as PR,open as hR,stat as M5}from"fs/promises";import{type as vR}from"os";import*as x1 from"path";function L5(J,z,Y,Z,G){let X=(Q,f)=>{if(Y(J),G(Q,f,{watchedPath:J}),f&&J!==f)yq(x1.resolve(J,f),OZ,x1.join(J,f))};try{return ER(J,{persistent:z.persistent},X)}catch(Q){Z(Q);return}}class R8{fsw;_boundHandleError;constructor(J){this.fsw=J,this._boundHandleError=(z)=>J._handleError(z)}_watchWithNodeFs(J,z){let Y=this.fsw.options,Z=x1.dirname(J),G=x1.basename(J);this.fsw._getWatchedDir(Z).add(G);let Q=x1.resolve(J),f={persistent:Y.persistent};if(!z)z=Tq;let H;if(Y.usePolling){let B=Y.interval!==Y.binaryInterval;f.interval=B&&_R(G)?Y.binaryInterval:Y.interval,H=oR(J,Q,f,{listener:z,rawEmitter:this.fsw._emitRaw})}else H=rR(J,Q,f,{listener:z,errHandler:this._boundHandleError,rawEmitter:this.fsw._emitRaw});return H}_handleFile(J,z,Y){if(this.fsw.closed)return;let Z=x1.dirname(J),G=x1.basename(J),X=this.fsw._getWatchedDir(Z),Q=z;if(X.has(G))return;let f=async(B,V)=>{if(!this.fsw._throttle(iR,J,5))return;if(!V||V.mtimeMs===0)try{let j=await M5(J);if(this.fsw.closed)return;let{atimeMs:K,mtimeMs:L}=j;if(!K||K<=L||L!==Q.mtimeMs)this.fsw._emit(Kz.CHANGE,J,j);if((cR||dR||nR)&&Q.ino!==j.ino){this.fsw._closeFile(B),Q=j;let A=this._watchWithNodeFs(J,f);if(A)this.fsw._addPathCloser(B,A)}else Q=j}catch(j){this.fsw._remove(Z,G)}else if(X.has(G)){let{atimeMs:j,mtimeMs:K}=V;if(!j||j<=K||K!==Q.mtimeMs)this.fsw._emit(Kz.CHANGE,J,V);Q=V}},H=this._watchWithNodeFs(J,f);if(!(Y&&this.fsw.options.ignoreInitial)&&this.fsw._isntIgnored(J)){if(!this.fsw._throttle(Kz.ADD,J,0))return;this.fsw._emit(Kz.ADD,J,z)}return H}async _handleSymlink(J,z,Y,Z){if(this.fsw.closed)return;let G=J.fullPath,X=this.fsw._getWatchedDir(z);if(!this.fsw.options.followSymlinks){this.fsw._incrReadyCount();let Q;try{Q=await L8(Y)}catch(f){return this.fsw._emitReady(),!0}if(this.fsw.closed)return;if(X.has(Z)){if(this.fsw._symlinkPaths.get(G)!==Q)this.fsw._symlinkPaths.set(G,Q),this.fsw._emit(Kz.CHANGE,Y,J.stats)}else X.add(Z),this.fsw._symlinkPaths.set(G,Q),this.fsw._emit(Kz.ADD,Y,J.stats);return this.fsw._emitReady(),!0}if(this.fsw._symlinkPaths.has(G))return!0;this.fsw._symlinkPaths.set(G,!0)}_handleRead(J,z,Y,Z,G,X,Q){J=x1.join(J,"");let f=Z?`${J}:${Z}`:J;if(Q=this.fsw._throttle("readdir",f,1000),!Q)return;let H=this.fsw._getWatchedDir(Y.path),B=new Set,V=this.fsw._readdirp(J,{fileFilter:(j)=>Y.filterPath(j),directoryFilter:(j)=>Y.filterDir(j)});if(!V)return;return V.on(mR,async(j)=>{if(this.fsw.closed){V=void 0;return}let K=j.path,L=x1.join(J,K);if(B.add(K),j.stats.isSymbolicLink()&&await this._handleSymlink(j,J,L,K))return;if(this.fsw.closed){V=void 0;return}if(K===Z||!Z&&!H.has(K))this.fsw._incrReadyCount(),L=x1.join(G,x1.relative(G,L)),this._addToNodeFs(L,z,Y,X+1)}).on(Kz.ERROR,this._boundHandleError),new Promise((j,K)=>{if(!V)return K();V.once(O8,()=>{if(this.fsw.closed){V=void 0;return}let L=Q?Q.clear():!1;if(j(void 0),H.getChildren().filter((A)=>{return A!==J&&!B.has(A)}).forEach((A)=>{this.fsw._remove(J,A)}),V=void 0,L)this._handleRead(J,!1,Y,Z,G,X,Q)})})}async _handleDir(J,z,Y,Z,G,X,Q){let f=this.fsw._getWatchedDir(x1.dirname(J)),H=f.has(x1.basename(J));if(!(Y&&this.fsw.options.ignoreInitial)&&!G&&!H)this.fsw._emit(Kz.ADD_DIR,J,z);f.add(x1.basename(J)),this.fsw._getWatchedDir(J);let B,V,j=this.fsw.options.depth;if((j==null||Z<=j)&&!this.fsw._symlinkPaths.has(Q)){if(!G){if(await this._handleRead(J,Y,X,G,J,Z,B),this.fsw.closed)return}V=this._watchWithNodeFs(J,(K,L)=>{if(L&&L.mtimeMs===0)return;this._handleRead(K,!1,X,G,J,Z,B)})}return V}async _addToNodeFs(J,z,Y,Z,G){let X=this.fsw._emitReady;if(this.fsw._isIgnored(J)||this.fsw.closed)return X(),!1;let Q=this.fsw._getWatchHelpers(J);if(Y)Q.filterPath=(f)=>Y.filterPath(f),Q.filterDir=(f)=>Y.filterDir(f);try{let f=await lR[Q.statMethod](Q.watchPath);if(this.fsw.closed)return;if(this.fsw._isIgnored(Q.watchPath,f))return X(),!1;let H=this.fsw.options.followSymlinks,B;if(f.isDirectory()){let V=x1.resolve(J),j=H?await L8(J):J;if(this.fsw.closed)return;if(B=await this._handleDir(Q.watchPath,f,z,Z,G,Q,j),this.fsw.closed)return;if(V!==j&&j!==void 0)this.fsw._symlinkPaths.set(V,j)}else if(f.isSymbolicLink()){let V=H?await L8(J):J;if(this.fsw.closed)return;let j=x1.dirname(Q.watchPath);if(this.fsw._getWatchedDir(j).add(Q.watchPath),this.fsw._emit(Kz.ADD,Q.watchPath,f),B=await this._handleDir(j,f,z,Z,J,Q,V),this.fsw.closed)return;if(V!==void 0)this.fsw._symlinkPaths.set(x1.resolve(J),V)}else B=this._handleFile(Q.watchPath,f,z);if(X(),B)this.fsw._addPathCloser(J,B);return!1}catch(f){if(this.fsw._handleError(f))return X(),J}}}var mR="data",O8="end",F5="close",Tq=()=>{},uq,A8,cR,dR,nR,O5,y1,Kz,iR="watch",lR,OZ="listeners",Sq="errHandlers",HG="rawEmitters",$R,aR,_R=(J)=>aR.has(x1.extname(J).slice(1).toLowerCase()),F8=(J,z)=>{if(J instanceof Set)J.forEach(z);else z(J)},SX=(J,z,Y)=>{let Z=J[z];if(!(Z instanceof Set))J[z]=Z=new Set([Z]);Z.add(Y)},pR=(J)=>(z)=>{let Y=J[z];if(Y instanceof Set)Y.clear();else delete J[z]},IX=(J,z,Y)=>{let Z=J[z];if(Z instanceof Set)Z.delete(Y);else if(Z===Y)delete J[z]},A5=(J)=>J instanceof Set?J.size===0:!J,Iq,yq=(J,z,Y,Z,G)=>{let X=Iq.get(J);if(!X)return;F8(X[z],(Q)=>{Q(Y,Z,G)})},rR=(J,z,Y,Z)=>{let{listener:G,errHandler:X,rawEmitter:Q}=Z,f=Iq.get(z),H;if(!Y.persistent){if(H=L5(J,Y,G,X,Q),!H)return;return H.close.bind(H)}if(f)SX(f,OZ,G),SX(f,Sq,X),SX(f,HG,Q);else{if(H=L5(J,Y,yq.bind(null,z,OZ),X,yq.bind(null,z,HG)),!H)return;H.on(Kz.ERROR,async(B)=>{let V=yq.bind(null,z,Sq);if(f)f.watcherUnusable=!0;if(A8&&B.code==="EPERM")try{await(await hR(J,"r")).close(),V(B)}catch(j){}else V(B)}),f={listeners:G,errHandlers:X,rawEmitters:Q,watcher:H},Iq.set(z,f)}return()=>{if(IX(f,OZ,G),IX(f,Sq,X),IX(f,HG,Q),A5(f.listeners))f.watcher.close(),Iq.delete(z),$R.forEach(pR(f)),f.watcher=void 0,Object.freeze(f)}},M8,oR=(J,z,Y,Z)=>{let{listener:G,rawEmitter:X}=Z,Q=M8.get(z),f=Q&&Q.options;if(f&&(f.persistent<Y.persistent||f.interval>Y.interval))D5(z),Q=void 0;if(Q)SX(Q,OZ,G),SX(Q,HG,X);else Q={listeners:G,rawEmitters:X,options:Y,watcher:wR(z,Y,(H,B)=>{F8(Q.rawEmitters,(j)=>{j(Kz.CHANGE,z,{curr:H,prev:B})});let V=H.mtimeMs;if(H.size!==B.size||V>B.mtimeMs||V===0)F8(Q.listeners,(j)=>j(J,H))})},M8.set(z,Q);return()=>{if(IX(Q,OZ,G),IX(Q,HG,X),A5(Q.listeners))M8.delete(z),D5(z),Q.options=Q.watcher=void 0,Object.freeze(Q)}};var R5=N(()=>{uq=process.platform,A8=uq==="win32",cR=uq==="darwin",dR=uq==="linux",nR=uq==="freebsd",O5=vR()==="OS400",y1={ALL:"all",READY:"ready",ADD:"add",CHANGE:"change",ADD_DIR:"addDir",UNLINK:"unlink",UNLINK_DIR:"unlinkDir",RAW:"raw",ERROR:"error"},Kz=y1,lR={lstat:PR,stat:M5},$R=[OZ,Sq,HG],aR=new Set(["3dm","3ds","3g2","3gp","7z","a","aac","adp","afdesign","afphoto","afpub","ai","aif","aiff","alz","ape","apk","appimage","ar","arj","asf","au","avi","bak","baml","bh","bin","bk","bmp","btif","bz2","bzip2","cab","caf","cgm","class","cmx","cpio","cr2","cur","dat","dcm","deb","dex","djvu","dll","dmg","dng","doc","docm","docx","dot","dotm","dra","DS_Store","dsk","dts","dtshd","dvb","dwg","dxf","ecelp4800","ecelp7470","ecelp9600","egg","eol","eot","epub","exe","f4v","fbs","fh","fla","flac","flatpak","fli","flv","fpx","fst","fvt","g3","gh","gif","graffle","gz","gzip","h261","h263","h264","icns","ico","ief","img","ipa","iso","jar","jpeg","jpg","jpgv","jpm","jxr","key","ktx","lha","lib","lvp","lz","lzh","lzma","lzo","m3u","m4a","m4v","mar","mdi","mht","mid","midi","mj2","mka","mkv","mmr","mng","mobi","mov","movie","mp3","mp4","mp4a","mpeg","mpg","mpga","mxu","nef","npx","numbers","nupkg","o","odp","ods","odt","oga","ogg","ogv","otf","ott","pages","pbm","pcx","pdb","pdf","pea","pgm","pic","png","pnm","pot","potm","potx","ppa","ppam","ppm","pps","ppsm","ppsx","ppt","pptm","pptx","psd","pya","pyc","pyo","pyv","qt","rar","ras","raw","resources","rgb","rip","rlc","rmf","rmvb","rpm","rtf","rz","s3m","s7z","scpt","sgi","shar","snap","sil","sketch","slk","smv","snk","so","stl","suo","sub","swf","tar","tbz","tbz2","tga","tgz","thmx","tif","tiff","tlz","ttc","ttf","txz","udf","uvh","uvi","uvm","uvp","uvs","uvu","viv","vob","war","wav","wax","wbmp","wdp","weba","webm","webp","whl","wim","wm","wma","wmv","wmx","woff","woff2","wrm","wvx","xbm","xif","xla","xlam","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xm","xmind","xpi","xpm","xwd","xz","z","zip","zipx"]),Iq=new Map;M8=new Map});import{EventEmitter as sR}from"events";import{stat as tR,Stats as Xv}from"fs";import{readdir as eR,stat as Jg}from"fs/promises";import*as q1 from"path";function xq(J){return Array.isArray(J)?J:[J]}function qg(J){if(typeof J==="function")return J;if(typeof J==="string")return(z)=>J===z;if(J instanceof RegExp)return(z)=>J.test(z);if(typeof J==="object"&&J!==null)return(z)=>{if(J.path===z)return!0;if(J.recursive){let Y=q1.relative(J.path,z);if(!Y)return!1;return!Y.startsWith("..")&&!q1.isAbsolute(Y)}return!1};return()=>!1}function fg(J){if(typeof J!=="string")throw Error("string expected");J=q1.normalize(J),J=J.replace(/\\/g,"/");let z=!1;if(J.startsWith("//"))z=!0;if(J=J.replace(S5,"/"),z)J="/"+J;return J}function g5(J,z,Y){let Z=fg(z);for(let G=0;G<J.length;G++){let X=J[G];if(X(Z,Y))return!0}return!1}function Hg(J,z){if(J==null)throw TypeError("anymatch: specify first argument");let Z=xq(J).map((G)=>qg(G));if(z==null)return(G,X)=>{return g5(Z,G,X)};return g5(Z,z)}class y5{path;_removeWatcher;items;constructor(J,z){this.path=J,this._removeWatcher=z,this.items=new Set}add(J){let{items:z}=this;if(!z)return;if(J!==b5&&J!==Yg)z.add(J)}async remove(J){let{items:z}=this;if(!z)return;if(z.delete(J),z.size>0)return;let Y=this.path;try{await eR(Y)}catch(Z){if(this._removeWatcher)this._removeWatcher(q1.dirname(Y),q1.basename(Y))}}has(J){let{items:z}=this;if(!z)return;return z.has(J)}getChildren(){let{items:J}=this;if(!J)return[];return[...J.values()]}dispose(){this.items.clear(),this.path="",this._removeWatcher=Tq,this.items=jg,Object.freeze(this)}}class T5{fsw;path;watchPath;fullWatchPath;dirParts;followSymlinks;statMethod;constructor(J,z,Y){this.fsw=Y;let Z=J;this.path=J=J.replace(Qg,""),this.watchPath=Z,this.fullWatchPath=q1.resolve(Z),this.dirParts=[],this.dirParts.forEach((G)=>{if(G.length>1)G.pop()}),this.followSymlinks=z,this.statMethod=z?Wg:Vg}entryPath(J){return q1.join(this.watchPath,q1.relative(this.watchPath,J.fullPath))}filterPath(J){let{stats:z}=J;if(z&&z.isSymbolicLink())return this.filterDir(J);let Y=this.entryPath(J);return this.fsw._isntIgnored(Y,z)&&this.fsw._hasReadPermissions(z)}filterDir(J){return this.fsw._isntIgnored(this.entryPath(J),J.stats)}}function x5(J,z={}){let Y=new u5(z);return Y.add(J),Y}var g8="/",zg="//",b5=".",Yg="..",Zg="string",Gg,S5,Xg,Qg,C8=(J)=>typeof J==="object"&&J!==null&&!(J instanceof RegExp),C5=(J)=>{let z=xq(J).flat();if(!z.every((Y)=>typeof Y===Zg))throw TypeError(`Non-string provided as watch path: ${z}`);return z.map(I5)},N5=(J)=>{let z=J.replace(Gg,g8),Y=!1;if(z.startsWith(zg))Y=!0;if(z=z.replace(S5,g8),Y)z=g8+z;return z},I5=(J)=>N5(q1.normalize(N5(J))),k5=(J="")=>(z)=>{if(typeof z==="string")return I5(q1.isAbsolute(z)?z:q1.join(J,z));else return z},Bg=(J,z)=>{if(q1.isAbsolute(J))return J;return q1.join(z,J)},jg,Wg="stat",Vg="lstat",u5;var E5=N(()=>{U5();R5();/*! chokidar - MIT License (c) 2012 Paul Miller (paulmillr.com) */Gg=/\\/g,S5=/\/\//g,Xg=/\..*\.(sw[px])$|~$|\.subl.*\.tmp/,Qg=/^\.[/\\]/;jg=Object.freeze(new Set);u5=class u5 extends sR{closed;options;_closers;_ignoredPaths;_throttled;_streams;_symlinkPaths;_watched;_pendingWrites;_pendingUnlinks;_readyCount;_emitReady;_closePromise;_userIgnored;_readyEmitted;_emitRaw;_boundRemove;_nodeFsHandler;constructor(J={}){super();this.closed=!1,this._closers=new Map,this._ignoredPaths=new Set,this._throttled=new Map,this._streams=new Set,this._symlinkPaths=new Map,this._watched=new Map,this._pendingWrites=new Map,this._pendingUnlinks=new Map,this._readyCount=0,this._readyEmitted=!1;let z=J.awaitWriteFinish,Y={stabilityThreshold:2000,pollInterval:100},Z={persistent:!0,ignoreInitial:!1,ignorePermissionErrors:!1,interval:100,binaryInterval:300,followSymlinks:!0,usePolling:!1,atomic:!0,...J,ignored:J.ignored?xq(J.ignored):xq([]),awaitWriteFinish:z===!0?Y:typeof z==="object"?{...Y,...z}:!1};if(O5)Z.usePolling=!0;if(Z.atomic===void 0)Z.atomic=!Z.usePolling;let G=process.env.CHOKIDAR_USEPOLLING;if(G!==void 0){let f=G.toLowerCase();if(f==="false"||f==="0")Z.usePolling=!1;else if(f==="true"||f==="1")Z.usePolling=!0;else Z.usePolling=!!f}let X=process.env.CHOKIDAR_INTERVAL;if(X)Z.interval=Number.parseInt(X,10);let Q=0;this._emitReady=()=>{if(Q++,Q>=this._readyCount)this._emitReady=Tq,this._readyEmitted=!0,process.nextTick(()=>this.emit(y1.READY))},this._emitRaw=(...f)=>this.emit(y1.RAW,...f),this._boundRemove=this._remove.bind(this),this.options=Z,this._nodeFsHandler=new R8(this),Object.freeze(Z)}_addIgnoredPath(J){if(C8(J)){for(let z of this._ignoredPaths)if(C8(z)&&z.path===J.path&&z.recursive===J.recursive)return}this._ignoredPaths.add(J)}_removeIgnoredPath(J){if(this._ignoredPaths.delete(J),typeof J==="string"){for(let z of this._ignoredPaths)if(C8(z)&&z.path===J)this._ignoredPaths.delete(z)}}add(J,z,Y){let{cwd:Z}=this.options;this.closed=!1,this._closePromise=void 0;let G=C5(J);if(Z)G=G.map((X)=>{return Bg(X,Z)});if(G.forEach((X)=>{this._removeIgnoredPath(X)}),this._userIgnored=void 0,!this._readyCount)this._readyCount=0;return this._readyCount+=G.length,Promise.all(G.map(async(X)=>{let Q=await this._nodeFsHandler._addToNodeFs(X,!Y,void 0,0,z);if(Q)this._emitReady();return Q})).then((X)=>{if(this.closed)return;X.forEach((Q)=>{if(Q)this.add(q1.dirname(Q),q1.basename(z||Q))})}),this}unwatch(J){if(this.closed)return this;let z=C5(J),{cwd:Y}=this.options;return z.forEach((Z)=>{if(!q1.isAbsolute(Z)&&!this._closers.has(Z)){if(Y)Z=q1.join(Y,Z);Z=q1.resolve(Z)}if(this._closePath(Z),this._addIgnoredPath(Z),this._watched.has(Z))this._addIgnoredPath({path:Z,recursive:!0});this._userIgnored=void 0}),this}close(){if(this._closePromise)return this._closePromise;this.closed=!0,this.removeAllListeners();let J=[];return this._closers.forEach((z)=>z.forEach((Y)=>{let Z=Y();if(Z instanceof Promise)J.push(Z)})),this._streams.forEach((z)=>z.destroy()),this._userIgnored=void 0,this._readyCount=0,this._readyEmitted=!1,this._watched.forEach((z)=>z.dispose()),this._closers.clear(),this._watched.clear(),this._streams.clear(),this._symlinkPaths.clear(),this._throttled.clear(),this._closePromise=J.length?Promise.all(J).then(()=>{return}):Promise.resolve(),this._closePromise}getWatched(){let J={};return this._watched.forEach((z,Y)=>{let G=(this.options.cwd?q1.relative(this.options.cwd,Y):Y)||b5;J[G]=z.getChildren().sort()}),J}emitWithAll(J,z){if(this.emit(J,...z),J!==y1.ERROR)this.emit(y1.ALL,J,...z)}async _emit(J,z,Y){if(this.closed)return;let Z=this.options;if(A8)z=q1.normalize(z);if(Z.cwd)z=q1.relative(Z.cwd,z);let G=[z];if(Y!=null)G.push(Y);let X=Z.awaitWriteFinish,Q;if(X&&(Q=this._pendingWrites.get(z)))return Q.lastChange=new Date,this;if(Z.atomic){if(J===y1.UNLINK)return this._pendingUnlinks.set(z,[J,...G]),setTimeout(()=>{this._pendingUnlinks.forEach((f,H)=>{this.emit(...f),this.emit(y1.ALL,...f),this._pendingUnlinks.delete(H)})},typeof Z.atomic==="number"?Z.atomic:100),this;if(J===y1.ADD&&this._pendingUnlinks.has(z))J=y1.CHANGE,this._pendingUnlinks.delete(z)}if(X&&(J===y1.ADD||J===y1.CHANGE)&&this._readyEmitted){let f=(H,B)=>{if(H)J=y1.ERROR,G[0]=H,this.emitWithAll(J,G);else if(B){if(G.length>1)G[1]=B;else G.push(B);this.emitWithAll(J,G)}};return this._awaitWriteFinish(z,X.stabilityThreshold,J,f),this}if(J===y1.CHANGE){if(!this._throttle(y1.CHANGE,z,50))return this}if(Z.alwaysStat&&Y===void 0&&(J===y1.ADD||J===y1.ADD_DIR||J===y1.CHANGE)){let f=Z.cwd?q1.join(Z.cwd,z):z,H;try{H=await Jg(f)}catch(B){}if(!H||this.closed)return;G.push(H)}return this.emitWithAll(J,G),this}_handleError(J){let z=J&&J.code;if(J&&z!=="ENOENT"&&z!=="ENOTDIR"&&(!this.options.ignorePermissionErrors||z!=="EPERM"&&z!=="EACCES"))this.emit(y1.ERROR,J);return J||this.closed}_throttle(J,z,Y){if(!this._throttled.has(J))this._throttled.set(J,new Map);let Z=this._throttled.get(J);if(!Z)throw Error("invalid throttle");let G=Z.get(z);if(G)return G.count++,!1;let X,Q=()=>{let H=Z.get(z),B=H?H.count:0;if(Z.delete(z),clearTimeout(X),H)clearTimeout(H.timeoutObject);return B};X=setTimeout(Q,Y);let f={timeoutObject:X,clear:Q,count:0};return Z.set(z,f),f}_incrReadyCount(){return this._readyCount++}_awaitWriteFinish(J,z,Y,Z){let G=this.options.awaitWriteFinish;if(typeof G!=="object")return;let X=G.pollInterval,Q,f=J;if(this.options.cwd&&!q1.isAbsolute(J))f=q1.join(this.options.cwd,J);let H=new Date,B=this._pendingWrites;function V(j){tR(f,(K,L)=>{if(K||!B.has(J)){if(K&&K.code!=="ENOENT")Z(K);return}let A=Number(new Date);if(j&&L.size!==j.size)B.get(J).lastChange=A;let F=B.get(J);if(A-F.lastChange>=z)B.delete(J),Z(void 0,L);else Q=setTimeout(V,X,L)})}if(!B.has(J))B.set(J,{lastChange:H,cancelWait:()=>{return B.delete(J),clearTimeout(Q),Y}}),Q=setTimeout(V,X)}_isIgnored(J,z){if(this.options.atomic&&Xg.test(J))return!0;if(!this._userIgnored){let{cwd:Y}=this.options,G=(this.options.ignored||[]).map(k5(Y)),Q=[...[...this._ignoredPaths].map(k5(Y)),...G];this._userIgnored=Hg(Q,void 0)}return this._userIgnored(J,z)}_isntIgnored(J,z){return!this._isIgnored(J,z)}_getWatchHelpers(J){return new T5(J,this.options.followSymlinks,this)}_getWatchedDir(J){let z=q1.resolve(J);if(!this._watched.has(z))this._watched.set(z,new y5(z,this._boundRemove));return this._watched.get(z)}_hasReadPermissions(J){if(this.options.ignorePermissionErrors)return!0;return Boolean(Number(J.mode)&256)}_remove(J,z,Y){let Z=q1.join(J,z),G=q1.resolve(Z);if(Y=Y!=null?Y:this._watched.has(Z)||this._watched.has(G),!this._throttle("remove",Z,100))return;if(!Y&&this._watched.size===1)this.add(J,z,!0);this._getWatchedDir(Z).getChildren().forEach((j)=>this._remove(Z,j));let f=this._getWatchedDir(J),H=f.has(z);if(f.remove(z),this._symlinkPaths.has(G))this._symlinkPaths.delete(G);let B=Z;if(this.options.cwd)B=q1.relative(this.options.cwd,Z);if(this.options.awaitWriteFinish&&this._pendingWrites.has(B)){if(this._pendingWrites.get(B).cancelWait()===y1.ADD)return}this._watched.delete(Z),this._watched.delete(G);let V=Y?y1.UNLINK_DIR:y1.UNLINK;if(H&&!this._isIgnored(Z))this._emit(V,Z);this._closePath(Z)}_closePath(J){this._closeFile(J);let z=q1.dirname(J);this._getWatchedDir(z).remove(q1.basename(J))}_closeFile(J){let z=this._closers.get(J);if(!z)return;z.forEach((Y)=>Y()),this._closers.delete(J)}_addPathCloser(J,z){if(!z)return;let Y=this._closers.get(J);if(!Y)Y=[],this._closers.set(J,Y);Y.push(z)}_readdirp(J,z){if(this.closed)return;let Y={type:y1.ALL,alwaysStat:!0,lstat:!0,...z,depth:0},Z=K5(J,Y);return this._streams.add(Z),Z.once(F5,()=>{Z=void 0}),Z.once(O8,()=>{if(Z)this._streams.delete(Z),Z=void 0}),Z}}});import{mkdirSync as Kg,statSync as Ug}from"fs";import{basename as w5,dirname as Dg,join as Lg}from"path";function Eq(J){if(J.debounceMs<=0)return()=>{};let z=Dg(J.filePath),Y=new Set([w5(J.filePath),...J.matchBasenames??[]]),Z=null,G=null,X=!1,Q=()=>{try{J.onTrigger()}catch(V){J.onError(V)}},f=()=>{if(Z)clearTimeout(Z);Z=setTimeout(()=>{Z=null,Q()},J.debounceMs),Z.unref?.()},H=(V)=>{if(!Y.has(w5(V)))return;f()},B=(V)=>{try{let j=Ug(Lg(z,V));return`${j.mtimeMs}:${j.size}`}catch{return null}};try{Kg(z,{recursive:!0});let V=new Map;for(let j of Y)V.set(j,B(j));G=x5(z,{depth:0,ignoreInitial:!0}),G.on("add",H),G.on("change",H),G.on("unlink",H),G.on("error",J.onError),G.once("ready",()=>{for(let j of Y)if(B(j)!==V.get(j)){f();break}})}catch(V){J.onError(V)}return()=>{if(X)return;if(X=!0,Z)clearTimeout(Z),Z=null;let V=G;G=null,V?.close().catch(J.onError)}}var N8=N(()=>{E5()});import{homedir as Mg}from"os";import{basename as Fg,join as Og}from"path";function b8(J=process.env.KOBE_HOME_DIR??Mg()){return Og(J,".kobe","settings","keybindings.yaml")}function P5(J,z={}){let Y=z.debounceMs??k8;if(Y<=0)return()=>{};let Z=z.path??b8(),G=Fg(Z),X=G.replace(/\.yaml$/,".yml"),Q=0;return J.publish("keybindings",{rev:Q}),Eq({filePath:Z,matchBasenames:[G,X],debounceMs:Y,onTrigger:()=>{try{Q+=1,J.publish("keybindings",{rev:Q})}catch(H){I1("keybindings-watcher",H)}},onError:(H)=>I1("keybindings-watcher",H)})}var k8=200;var h5=N(()=>{N8()});class S8{clients;idleGraceMs;onIdleStop;schedule;log;cancelIdle=null;stopping=!1;constructor(J){this.clients=J.clients,this.idleGraceMs=J.idleGraceMs,this.onIdleStop=J.onIdleStop,this.schedule=J.schedule??Ag,this.log=J.log??xz}guiCount(){let J=0;for(let z of this.clients())if(z.holdsLifetime)J++;return J}hasSubscribers(){for(let J of this.clients())if(J.subscribed)return!0;return!1}isStopping(){return this.stopping}markStopping(){this.stopping=!0,this.clearIdle()}guiAttached(){this.clearIdle()}clientDisconnected(J){if(J)this.maybeArm()}clearIdle(){if(this.cancelIdle)this.cancelIdle(),this.cancelIdle=null}maybeArm(){if(this.stopping||this.guiCount()>0)return;this.clearIdle(),this.log("idle",`last gui gone \u2014 arming ${this.idleGraceMs}ms idle-stop grace`),this.cancelIdle=this.schedule(()=>{if(this.cancelIdle=null,this.stopping||this.guiCount()>0)return;this.log("idle","grace elapsed with no gui \u2014 self-stopping"),this.onIdleStop()},this.idleGraceMs)}}var Ag=(J,z)=>{let Y=setTimeout(J,z);return Y.unref?.(),()=>clearTimeout(Y)};var v5=()=>{};import{spawn as Rg}from"child_process";function yg(J,z,Y){return new Promise((Z)=>{let G="",X="",Q=!1,f=(B,V)=>{if(Q)return;Q=!0,Z({status:B,stdout:G,stderr:X,spawnError:V})},H=Rg("gh",J.slice(),{cwd:z,stdio:["ignore","pipe","pipe"],signal:Y,killSignal:"SIGKILL"});H.stdout?.on("data",(B)=>{G+=String(B)}),H.stderr?.on("data",(B)=>{X+=String(B)}),H.on("error",()=>f(null,!Y.aborted)),H.on("close",(B)=>f(B,!1))})}function ug(J){if(J.archived)return!1;if(J.kind==="main")return!1;if(!J.branch||!J.worktreePath)return!1;if($1(J.repo)||$1(J.worktreePath))return!1;return!0}async function xg(J,z){let Y=z.tickMs??yX,Z=z.rand,G={tickMs:Y,settledMs:Cg,noPrMs:gg,noRemoteMs:bg,failureBaseMs:Ng,failureCapMs:kg,jitterRatio:Sg},X=[];for(let Q of J.listTasks()){if(!ug(Q)){z.schedule.delete(Q.id);continue}let f=z.schedule.get(Q.id);if(f&&z.now<f.nextAllowedAt)continue;let H=f?.failures??0;try{let B=await z.run(Q.worktreePath,Q.branch);if(B.kind==="error"){xz("pr-status-poller",`gh pr view failed (${B.error}) for task ${Q.id} [${Q.branch}] \u2014 keeping last PR status, backing off`),z.schedule.set(Q.id,LX({kind:"error",error:B.error},H,z.now,G,Z));continue}if(B.kind==="empty"){z.schedule.set(Q.id,LX({kind:"empty"},H,z.now,G,Z));continue}let V=gV(B.view,z.at),j=J.getTask(Q.id);if(!j){z.schedule.delete(Q.id);continue}if(!Lq(j.prStatus,V??void 0))await J.setPRStatus(Q.id,V),X.push(Q.id);let K=V?.lifecycle==="merged"||V?.lifecycle==="closed";z.schedule.set(Q.id,LX({kind:"pr",settled:K},H,z.now,G,Z))}catch(B){I1("pr-status-poller",B),z.schedule.set(Q.id,LX({kind:"error",error:"network"},H,z.now,G,Z))}}return X}function m5(J,z=yX,Y,Z=Tg){if(z<=0)return()=>{};let G=new Map,X=!1,f=setInterval(()=>{if(Y&&!Y())return;if(X)return;X=!0,xg(J,{run:Z,now:Date.now(),at:new Date().toISOString(),schedule:G,tickMs:z}).catch((H)=>I1("pr-status-poller",H)).finally(()=>{X=!1})},z);return f.unref?.(),()=>clearInterval(f)}var yX=30000,gg=300000,Cg=600000,Ng,kg=900000,bg=1800000,Sg=0.2,Ig=1e4,Tg=async(J,z)=>{let Y=new AbortController,Z=!1,G=setTimeout(()=>{Z=!0,Y.abort()},Ig);try{let X=await yg(["pr","view",z,"--json",RV],J,Y.signal);if(X.status===0&&!Z)try{let Q=JSON.parse(X.stdout);return typeof Q.number==="number"?{kind:"pr",view:Q}:{kind:"empty"}}catch{return EB({parseError:!0})}return EB({spawnError:X.spawnError,timedOut:Z,exitCode:X.status,stderr:X.stderr})}finally{clearTimeout(G)}};var c5=N(()=>{wB();O1();Ng=yX});function hg(J,z){return J.mtimeMs===z.mtimeMs&&J.completionId===z.completionId&&J.completionAt===z.completionAt}async function vg(J,z,Y,Z){let G=await rZ(z,J),X=await Y.latestCompletion(J);return{mtimeMs:G,completionId:X?.id??null,completionAt:X?.timestampMs??0}}function mg(J){let z=new Map;for(let Y of J){if(Y.archived)continue;if(!Y.worktreePath)continue;if($1(Y.repo)||$1(Y.worktreePath))continue;if(z.has(Y.worktreePath))continue;z.set(Y.worktreePath,Y.vendor??d1)}return z}class d5{orch;bus;options;entries=new Map;stopped=!1;constructor(J,z,Y={}){this.orch=J;this.bus=z;this.options=Y}tick(){if(this.stopped)return;if(this.options.hasSubscribers&&!this.options.hasSubscribers())return;try{let J=mg(this.orch.listTasks()),z=!1;for(let Y of this.entries.keys()){if(J.has(Y))continue;if(this.entries.get(Y)?.value)z=!0;this.entries.delete(Y)}if(z)this.publish();for(let[Y,Z]of J)this.maybeCollect(Y,Z)}catch(J){I1("transcript-activity",J)}}stop(){this.stopped=!0}maybeCollect(J,z){let Y=this.entries.get(J);if(!Y)Y={inFlight:!1,nextAllowedAt:0,vendor:z,detector:BX(z)},this.entries.set(J,Y);else if(Y.vendor!==z)Y.vendor=z,Y.detector=BX(z);let Z=this.options.cadence??{timeoutMs:Eg,slowRetryMs:wg,minIntervalMs:Pg},G=this.options.run??vg,X=Y;JG(X,Z,(Q)=>G(J,X.vendor,X.detector,Q),(Q)=>{if(this.stopped)return;if(this.entries.get(J)!==X)return;if(X.value&&hg(X.value,Q))return;X.value=Q,this.publish()})}publish(){let J={};for(let[z,Y]of this.entries)if(Y.value)J[z]=Y.value;this.bus.publish("transcript.activity",{activity:J})}}function n5(J,z,Y=I8,Z){if(Y<=0)return()=>{};let G=new d5(J,z,{hasSubscribers:Z});G.tick();let X=setInterval(()=>G.tick(),Y);return X.unref?.(),()=>{clearInterval(X),G.stop()}}var I8=1500,Eg=4000,wg=60000,Pg=1500;var i5=N(()=>{eQ();zG();Jq();O1();pJ()});import{readFileSync as cg}from"fs";import{homedir as dg}from"os";import{basename as ng,join as ig}from"path";function T8(J=process.env.KOBE_HOME_DIR??dg()){return ig(J,".config","kobe","state.json")}function l5(J){let z={};try{let B=JSON.parse(cg(J,"utf8"));if(B&&typeof B==="object"&&!Array.isArray(B))z=B}catch{}let Y=typeof z.activeTheme==="string"&&z.activeTheme.length>0?z.activeTheme:"claude",Z=z.transparentBackground===!0,G=typeof z.focusAccent==="string"&&$g.includes(z.focusAccent)?z.focusAccent:null,X=z.activeSortMode==="recent"?"recent":"default",Q=z["tasksPane.keysCollapsed"]===!0,f=typeof z["tasksPane.projectFilter"]==="string"&&z["tasksPane.projectFilter"].length>0?z["tasksPane.projectFilter"]:null,H=typeof z.locale==="string"&&z.locale.length>0?z.locale:"en";return{theme:Y,transparentBackground:Z,focusAccent:G,locale:H,sortMode:X,keysCollapsed:Q,projectFilter:f}}function ag(J,z){return J.theme===z.theme&&J.transparentBackground===z.transparentBackground&&J.focusAccent===z.focusAccent&&J.locale===z.locale&&J.sortMode===z.sortMode&&J.keysCollapsed===z.keysCollapsed&&J.projectFilter===z.projectFilter}function $5(J,z={}){let Y=z.debounceMs??y8;if(Y<=0)return()=>{};let Z=z.pollMs??lg,G=z.statePath??T8(),X=ng(G),Q=l5(G);return J.publish("ui-prefs",Q),Eq({filePath:G,matchBasenames:[X],debounceMs:Y,pollMs:Z,onTrigger:()=>{try{let H=l5(G);if(ag(Q,H))return;Q=H,J.publish("ui-prefs",H)}catch(H){I1("ui-prefs-watcher",H)}},onError:(H)=>I1("ui-prefs-watcher",H)})}var y8=200,lg=250,$g;var a5=N(()=>{N8();$g=["primary","success","info"]});function u8(){return l1()[AZ]===!0}var AZ="experimental.dispatcher";var wq=N(()=>{YZ()});import{randomUUID as _g}from"crypto";function Uz(J){return`engineCommand.${J}`}function Dz(J){return`engineName.${J}`}function RZ(J){return S1(Dz(J))?.trim()||x8[J]||J}function TX(J){return e1(J??"claude").defaultCommand}function pg(J){let z=[],Y=/"([^"]*)"|'([^']*)'|(\S+)/g;for(let Z=Y.exec(J);Z!==null;Z=Y.exec(J))z.push(Z[1]??Z[2]??Z[3]??"");return z}function TJ(J,z){let Y=J??"claude",Z=S1(Uz(Y))?.trim(),G=(()=>{if(Z){let X=pg(Z);if(X.length>0)return X}return TX(Y)})();return rg(G,Y,z)}function rg(J,z,Y){let Z=Y?.trim();if(!Z)return J;let G=z??"claude";if(!e1(G).effortLevels?.includes(Z))return J;if(G==="codex")return[...J,"-c",`model_reasoning_effort=${Z}`];return J}function BG(J,z){if((z??"claude")!=="claude")return{argv:J,sessionId:null};if(J.some((Z)=>og.has(Z)))return{argv:J,sessionId:null};let Y=_g();return{argv:[...J,"--session-id",Y],sessionId:Y}}function gZ(){let J=(z)=>/^[A-Za-z0-9_/.:=-]+$/.test(z)?z:`'${z.replace(/'/g,"'\\''")}'`;try{return[...k1(),"api"].map(J).join(" ")}catch{return"kobe api"}}function sg(J,z=gZ()){return[`You are running inside kobe (a local multi-session task manager) as task ${J}.`,"kobe tracks a lifecycle status for this task on a board.","When you have COMPLETED the work requested in this session and verified it, report it by running:",` ${z} set-status --task-id ${J} --status in_review`,"Run it only when the work is genuinely done \u2014 never while you are asking the user a question, waiting for input, or mid-task.","Never set any other status value; everything beyond in_review is the user's decision."].join(`
45
+ `)}function tg(J,z=gZ()){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:",` ${z} note --task-id ${J} --text "<one line: the verified conclusion>"`,"File only verified conclusions another session could act on \u2014 never progress logs, opinions, or details specific to your own task. A handful per session at most."].join(`
46
+ `)}function eg(J,z=gZ(),Y={}){let Z=[];if((Y.status??gq)())Z.push(sg(J,z));if((Y.notes??u8)())Z.push(tg(J,z));return Z.length>0?Z.join(`
47
+
48
+ `):null}function Pq(J,z,Y,Z={}){if(!Y)return J;if((z??"claude")!=="claude")return J;if(J.includes("--append-system-prompt")||J.includes("--append-system-prompt-file"))return J;let G=eg(Y,gZ(),Z);if(!G)return J;return[...J,"--append-system-prompt",G]}function JC(J,z=gZ()){return[`You are running inside kobe (a local multi-session task manager) as this repository's DISPATCHER (task ${J}, the repo's main session).`,"kobe runs multiple worktree task sessions on this repo in parallel. When one of them resolves a non-obvious gotcha, it files a one-line field note; kobe forwards each note to you as a user message prefixed with [KOBE FIELD NOTE].","Your job is routing that knowledge, fully autonomously \u2014 never ask the user for permission:",` - See the fleet: \`${z} 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: \`${z} 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 hq(J,z,Y,Z=u8){if(!Y||!Z())return J;if((z??"claude")!=="claude")return J;if(J.includes("--append-system-prompt")||J.includes("--append-system-prompt-file"))return J;return[...J,"--append-system-prompt",JC(Y)]}var x8,og;var hJ=N(()=>{sz();NY();NX();wq();O1();t1();x8=Object.fromEntries(oY.map((J)=>[J,e1(J).displayName]));og=new Set(["--session-id","--resume","-r","--continue","-c","--from-pr"])});function jG(J){return CZ.includes(J)?J:"auto"}var CZ,_5,ZY="editor.kind",uY="editor.customCommand",vq="auto";var mq=N(()=>{CZ=["auto","vim","nvim","nano","emacs","custom"],_5=["nvim","vim","emacs","nano"]});function kZ(J){return J==="taskpanel"?"taskpanel":"chattab"}var GY="settings.surface",NZ="chattab";function vJ(J=process.env){return{...J,...E8}}var E8;var xY=N(()=>{E8={GIT_OPTIONAL_LOCKS:"0"}});async function WG(J,z,Y={}){if(!J)return{stdout:"",stderr:"worktreePath is required",status:-1};let Z=(Y.execForPath??YY)(J),G=Y.timeoutMs&&Y.timeoutMs>0?new AbortController:null,X=!1,Q=G?setTimeout(()=>{X=!0,G.abort()},Y.timeoutMs):null,f=G&&Y.signal?AbortSignal.any([G.signal,Y.signal]):G?.signal??Y.signal,H;try{H=await Z.run(["git",...z],{cwd:J,env:E8,signal:f})}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 ${z.join(" ")} timed out after ${Y.timeoutMs}ms`,status:-1};return{stdout:H.stdout,stderr:H.stderr,status:H.exitCode}}function zC(J,z){if(!J||!z||z.startsWith("/"))return null;let Y=z.split("/");if(Y.some((Z)=>Z===".."))return null;return`${J.replace(/\/+$/,"")}/${Y.filter(Boolean).join("/")}`}async function p5(J,z,Y={}){let Z=zC(J,z);if(!Z)return null;let G=(Y.execForPath??YY)(J);try{return await G.readFile(Z)}catch{return null}}var cq=N(()=>{jz();xY()});import{statSync as YC}from"fs";async function uX(J,z){let Y=await WG(J,z,{timeoutMs:ZC}),Z=Y.status??-1;return{ok:Z===0,stdout:Y.stdout,stderr:Y.stderr,code:Z}}function XC(J){switch(J){case"M":return"modified";case"A":return"added";case"D":return"deleted";case"R":return"renamed";case"C":return"copied";case"T":return"type changed";case"U":return"unmerged";case"?":return"untracked";default:return"changed"}}function r5(J){let z=new Map;if(!J)return z;let Y=J.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;z.set(QC(G),Z.endsWith(`
50
+ `)?Z:`${Z}
51
+ `)}return z}function QC(J){if(!(J.startsWith('"')&&J.endsWith('"')))return J;return J.slice(1,-1).replace(/\\([\\"nt])/g,(Y,Z)=>Z==="n"?`
52
+ `:Z==="t"?"\t":Z)}async function qC(J,z,Y){let Z=Array(J.length),G=Math.max(1,Math.min(z,J.length)),X=0;async function Q(){while(X<J.length){let f=X++;Z[f]=await Y(J[f],f)}}return await Promise.all(Array.from({length:G},()=>Q())),Z}async function fC(J,z){let Y=await uX(J,["diff","--no-color","--no-index","--","/dev/null",z]);if(Y.stdout.trim())return Y.stdout.endsWith(`
53
+ `)?Y.stdout:`${Y.stdout}
54
+ `;return""}async function o5(J,z){if(z.pathname!=="/api/diff")return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});let Y=z.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(!Mq(Z))return Response.json({error:"worktreePath does not exist"},{status:400});if(!YY(Z).isRemote)try{if(!YC(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 uX(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,f,H]=await Promise.all([uX(Z,["status","--porcelain=v1","-z","--untracked-files=all"]),uX(Z,["diff","--no-color"]),uX(Z,["diff","--no-color","--staged"])]);if(!Q.ok)return Response.json({error:`git status failed: ${Q.stderr.trim()}`},{status:500});let B=r5(f.stdout),V=r5(H.stdout),j=Q.stdout.split("\x00"),K=[],L=[];for(let g=0;g<j.length;g++){let u=j[g];if(!u)continue;let s=u[0]??" ",S=u[1]??" ",O=u.slice(3);if(!O)continue;if(s==="R"||s==="C"||S==="R"||S==="C")g++;let C=s==="?"&&S==="?",y=s!==" "&&s!=="?"?s:S,a=s!==" "&&s!=="?",l="";if(C)L.push({fileIndex:K.length,path:O});else if(l=V.get(O)??B.get(O)??"",V.has(O)&&B.has(O))l=`${V.get(O)}${B.get(O)}`;K.push({path:O,status:C?"untracked":XC(y),staged:a,patch:l})}if(L.length>0){let g=await qC(L,GC,(u)=>fC(Z,u.path));for(let u=0;u<L.length;u++)K[L[u].fileIndex].patch=g[u]}K.sort((g,u)=>g.path.localeCompare(u.path));let A=[H.stdout,f.stdout].filter(Boolean).join(`
55
+ `),F={files:K,raw:A};return Response.json(F)}var ZC=15000,GC=8;var s5=N(()=>{jz();cq()});import{isAbsolute as HC}from"path";function e5(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9_-]+$/.test(J)}function jC(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9._-]+$/.test(J)&&!J.includes("..")}async function WC(J){let z=J.searchParams.get("worktreePath"),Y=J.searchParams.get("vendor")??"claude";if(!z||!HC(z))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!e5(Y))return Response.json({error:"invalid vendor"},{status:400});try{let Z=e1(Y).history,[G,X]=await Promise.all([Z.listSessionIdsForWorktree(z),Z.latestTranscriptMtimeForWorktree(z)]);return Response.json({sessions:G,latestMtime:X})}catch(Z){return Response.json({error:Z instanceof Error?Z.message:String(Z)},{status:500})}}async function VC(J){let z=J.searchParams.get("vendor")??"claude",Y=J.searchParams.get("sessionId");if(!e5(z))return Response.json({error:"invalid vendor"},{status:400});if(!jC(Y))return Response.json({error:"invalid sessionId"},{status:400});try{let Z=await e1(z).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 J6(J,z){if(z.pathname!==t5&&z.pathname!==BC)return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return z.pathname===t5?WC(z):VC(z)}var t5="/api/history/sessions",BC="/api/history/messages";var z6=N(()=>{NY()});import{mkdir as KC,readFile as UC,writeFile as DC}from"fs/promises";import{join as Y6}from"path";function Z6(){return Y6(qJ(),"notes")}function G6(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9_-]+$/.test(J)}function X6(J){return Y6(Z6(),`${J}.md`)}async function MC(J){let z=J.searchParams.get("taskId");if(!G6(z))return Response.json({error:"invalid taskId"},{status:400});try{let Y="";try{Y=await UC(X6(z),"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 FC(J){let z;try{z=await J.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(!G6(z.taskId))return Response.json({error:"invalid taskId"},{status:400});if(typeof z.markdown!=="string")return Response.json({error:"markdown must be a string"},{status:400});try{return await KC(Z6(),{recursive:!0}),await DC(X6(z.taskId),z.markdown,"utf8"),Response.json({ok:!0})}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function Q6(J,z){if(z.pathname!==LC)return null;if(J.method==="GET")return MC(z);if(J.method==="PUT")return FC(J);return Response.json({error:"method not allowed"},{status:405})}var LC="/api/notes";var q6=N(()=>{p1()});var VG;var dq=N(()=>{VG={$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 KG;var nq=N(()=>{KG={$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 UG;var iq=N(()=>{UG={$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 DG;var lq=N(()=>{DG={$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 LG;var $q=N(()=>{LG={$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 MG;var aq=N(()=>{MG={$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 FG;var _q=N(()=>{FG={$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 P8(J,z,Y=[]){if(z===void 0)return null;if(typeof z!=="string")return P8(J,z.dark,Y);if(z==="transparent"||z==="none")return null;if(z.startsWith("#"))return z;if(Y.includes(z))return null;let Z=J.defs?.[z]??J.theme[z];return P8(J,Z,[...Y,z])}function w8(J){return Math.max(0,Math.min(255,Math.round(J)))}function xX(J,z,Y){let Z=Number.parseInt(J.slice(1),16),G=Number.parseInt(z.slice(1),16),X=(f,H)=>f>>H&255;return`#${(w8(X(Z,16)+(X(G,16)-X(Z,16))*Y)<<16|w8(X(Z,8)+(X(G,8)-X(Z,8))*Y)<<8|w8(X(Z,0)+(X(G,0)-X(Z,0))*Y)).toString(16).padStart(6,"0")}`}function SC(J){let z=(f)=>P8(J,J.theme[f]),Y=z("background"),Z=z("text");if(!Y||!Z)return null;let G=z("textMuted")??xX(Z,Y,0.35),X=z("primary")??Z,Q=z("border")??xX(Z,Y,0.8);return{bg:Y,surface:z("backgroundPanel")??Y,inset:z("backgroundElement")??Y,menu:z("backgroundMenu")??z("backgroundElement")??Y,line:Q,"line-subtle":z("borderSubtle")??Q,"line-active":z("borderActive")??xX(Q,Z,0.3),fg:Z,muted:G,subtle:xX(G,Y,0.35),primary:X,"primary-hover":xX(X,Z,0.35),"kobe-orange":X,"kobe-green":z("success")??Z,"kobe-blue":z("info")??Z,"kobe-red":z("error")??Z,"kobe-yellow":z("warning")??Z,"kobe-violet":z("secondary")??X}}function f6(J,z){if(z.pathname!==yC)return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Response.json({themes:IC})}var bC,IC,yC="/api/themes";var H6=N(()=>{dq();nq();iq();lq();$q();aq();_q();bC={claude:VG,conductor:KG,dracula:UG,nord:DG,opencode:LG,"osaka-jade":MG,tokyonight:FG};IC=Object.fromEntries(Object.entries(bC).map(([J,z])=>[J,SC(z)]).filter((J)=>J[1]!==null))});import{createHash as TC,randomUUID as uC}from"crypto";import{mkdir as xC}from"fs/promises";import{join as h8,resolve as EC}from"path";function hC(J){return TC("sha1").update(J).digest("hex").slice(0,16)}async function cC(J){let z=Number.parseInt(J.headers.get("content-length")??"",10);if(Number.isFinite(z)&&z>B6)return Response.json({error:"asset too large"},{status:413});let Y;try{Y=await J.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>B6)return Response.json({error:"asset too large"},{status:413});let X=wC[G.type];if(!X)return Response.json({error:`unsupported content-type: ${G.type||"unknown"}`},{status:415});try{let Q=hC(Z),f=h8(yH(),Q);await xC(f,{recursive:!0});let B=`${uC()}.${X}`;return await Bun.write(h8(f,B),G),Response.json({url:`${pq}/${Q}/${B}`})}catch(Q){return Response.json({error:Q instanceof Error?Q.message:String(Q)},{status:500})}}async function dC(J){let z=J.slice(pq.length+1),Y=z.indexOf("/");if(Y<0)return Response.json({error:"not found"},{status:404});let Z=z.slice(0,Y),G=z.slice(Y+1);if(!vC.test(Z)||!mC.test(G))return Response.json({error:"invalid asset path"},{status:400});let X=yH(),Q=EC(X,Z,G);if(Q!==h8(X,Z,G)||!Q.startsWith(`${X}/`))return Response.json({error:"invalid asset path"},{status:400});let f=G.slice(G.lastIndexOf(".")+1).toLowerCase(),H=PC[f];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 j6(J,z){if(z.pathname===pq){if(J.method==="POST")return cC(J);return Response.json({error:"method not allowed"},{status:405})}if(z.pathname.startsWith(`${pq}/`)){if(J.method==="GET")return dC(z.pathname);return Response.json({error:"method not allowed"},{status:405})}return null}var pq="/api/issue-assets",B6=10485760,wC,PC,vC,mC;var W6=N(()=>{p1();wC={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp"},PC={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"};vC=/^[a-f0-9]{16}$/,mC=/^[A-Za-z0-9_-]+\.[a-z0-9]+$/});function V6(J,z=500){return Response.json({error:J instanceof Error?J.message:String(J)},{status:z})}function K6(J){let z=J instanceof Error?J.message:String(J);if(/^no issue #\d+$/.test(z))return 404;if(z==="repoRoot is required"||z==="repoRoot does not exist"||z==="repoRoot is not a git repository"||z==="missing op"||z==="create requires a non-empty title"||z==="body must be a string"||z==="setStatus requires a numeric id"||z.startsWith("invalid status:")||z==="update requires a numeric id"||z==="title must be a non-empty string"||z==="link requires a numeric id"||z==="link requires a non-empty taskId"||z==="unlink requires a numeric id"||z==="delete requires a numeric id"||z.startsWith("unknown op type:"))return 400;return 500}async function nC(J,z){let Y=z.searchParams.get("repoRoot");if(!Y)return Response.json({error:"missing repoRoot"},{status:400});try{return Response.json(await J.request("issue.list",{repoRoot:Y}))}catch(Z){return V6(Z,K6(Z))}}async function iC(J,z){let Y;try{Y=await z.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 J.request("issue.mutate",{repoRoot:Z.repoRoot,op:Z.op}))}catch(G){return V6(G,K6(G))}}async function U6(J,z,Y){if(z.pathname!=="/api/issues")return null;if(J.method==="GET")return nC(Y,z);if(J.method==="POST")return iC(Y,J);return Response.json({error:"method not allowed"},{status:405})}function D6(J){return lC.has(String(J??"").trim().toLowerCase())}function L6(J){try{if(!J)return null;let z=new URL(J);if(z.protocol!=="http:"&&z.protocol!=="https:")return null;return z.hostname}catch{return null}}function $C(J){let z=L6(J);return z!==null&&D6(z)}function M6(J,z={}){if(!J)return!0;if($C(J))return!0;let Y=z.allowedHost?.trim();if(!Y)return!1;let Z=L6(J);return Z!==null&&Z===Y}function F6(J){let z=String(J??"").trim();return z&&!D6(z)?z:void 0}var lC;var O6=N(()=>{lC=new Set(["localhost","127.0.0.1","::1","[::1]"])});var aC,A6;var R6=N(()=>{aC=["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"],A6=new Set(aC)});var v8={};B1(v8,{resolveRepoInit:()=>N6,resolveEngineLaunchInit:()=>XY});import{existsSync as C6,readFileSync as _C}from"fs";import{join as rq}from"path";function rC(J){return C6(rq(J,g6))?`sh ${g6}`:void 0}function oC(J){let z=rq(J,pC);if(!C6(z))return;try{let Y=_C(z,"utf8");return Y.trim().length>0?Y:void 0}catch{return}}function N6(J,z){let Y=J?nH(J):{},Z=rC(z)??Y.initScript,G=oC(z)??Y.initPrompt;return{initScript:Z&&Z.trim().length>0?Z:void 0,initPrompt:G&&G.trim().length>0?G:void 0}}function sC(J,z){if(J.kind==="none")return;if(J.kind==="explicit")return{source:"explicit",text:J.prompt};let Y=z.initPrompt?.trim();return Y?{source:"repo-init",text:Y}:void 0}function XY(J,z,Y={kind:"repo-init"}){let Z=N6(J,z);return{initScript:Z.initScript,firstMessage:sC(Y,Z)}}var g6,pC;var OG=N(()=>{O1();g6=rq(".kobe","init.sh"),pC=rq(".kobe","init-prompt.md")});import{existsSync as k6,readFileSync as tC}from"fs";function b6(){bZ=null}function eC(){let J=LW();if(k6(J))return{canonical:J,found:J};let z=J.replace(/\.yaml$/,".yml");if(k6(z))return{canonical:J,found:z};return{canonical:J,found:null}}function oq(){if(bZ)return bZ;let{canonical:J,found:z}=eC();if(!z)return bZ={path:J,exists:!1,doc:null,warnings:[]},bZ;let Y=[],Z=null;try{let G=tC(z,"utf8");Z=Bun.YAML.parse(G)}catch(G){let X=G instanceof Error?G.message:String(G);Y.push(`could not read/parse ${z}: ${X}`)}return bZ={path:J,exists:!0,doc:Z,warnings:Y},bZ}var bZ=null;var m8=N(()=>{p1()});function AG(J,z){let Y=`alternating [${J}, ${z}] pairs`;return{layout:Y,validateCount:(Z)=>Z>=2&&Z%2===0?null:`needs ${Y} (an even number of chords \u2014 got ${Z})`}}function QN(J,z){let Y=J.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:`"${J}": no key after the modifiers`};let X=new Set;for(let H of Z){let B=YN[H];if(!B)return{error:`"${J}": unknown modifier "${H}" (use ctrl / cmd / alt / shift)`};X.add(B)}if(G=ZN[G]??G,X.has("shift")&&G.length===1&&!z?.allowShiftCharacter)return{error:`"${J}": shift+<character> can never match \u2014 terminals deliver shift+letter as a plain character, not a modifier event`};let Q=XN.filter((H)=>X.has(H)).join("+"),f=Q?`${Q}+${G}`:G;if(G.length>1&&!GN.has(G))return{chord:f,warning:`"${J}": unrecognized key name "${G}" \u2014 the chord may never fire`};return{chord:f}}function sq(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function qN(J){if(J==="darwin")return["darwin","macos","mac"];if(J==="win32")return["win32","windows"];return[J]}function fN(J){if(!sq(J))return null;let z=J.bindings;if(sq(z))return z;return J}function tq(J,z,Y){let Z=[];if(J===null||J===void 0)return{entries:[],warnings:Z};if(!sq(J))return{entries:[],warnings:["config root must be a YAML mapping (e.g. a top-level `bindings:` key)"]};let G=new Map,X=[];if(J.bindings!==void 0)if(sq(J.bindings))X.push(J.bindings);else Z.push("`bindings:` must be a mapping of id \u2192 chord(s)");for(let Q of qN(z)){let f=J[Q];if(f===void 0)continue;let H=fN(f);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[f,H]of Object.entries(Q)){if(H===null||H===!1||Array.isArray(H)&&H.length===0){G.set(f,[]);continue}let B=typeof H==="string"?[H]:Array.isArray(H)?H:null;if(!B){Z.push(`${f}: 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(`${f}: chord entries must be strings`),j=!0;continue}let L=QN(K,Y?.chordOptsFor?.(f));if("error"in L){Z.push(`${f}: ${L.error}`),j=!0;continue}if(L.warning)Z.push(`${f}: ${L.warning}`);if(!V.includes(L.chord))V.push(L.chord)}if(V.length===0&&j){Z.push(`${f}: no valid chords \u2014 keeping the default`);continue}G.set(f,V)}return{entries:Array.from(G,([Q,f])=>({id:Q,keys:f})),warnings:Z}}function HN(J,z){return J===z||J==="global"||z==="global"}function S6(J,z){let Y=[],Z=[];for(let G of z){let X=J.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=c8[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 f=JN[G.id];if(f&&G.keys.length>0){let j=f.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&&zN.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(f&&H.length!==G.keys.length){Y.push(`${G.id}: a dropped chord would shift the slot layout (${f.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=J.find((f)=>f.id===G.id);if(!Q)continue;for(let f of J){if(f.id===G.id)continue;if(!f.keys.includes(X))continue;if(!HN(Q.scope,f.scope))continue;Y.push(`${G.id}: "${X}" also fires ${f.id} (${f.scope} scope) \u2014 last registration wins; consider a different chord`)}}return{applied:Z,warnings:Y}}var c8,JN,zN,YN,ZN,GN,XN;var eq=N(()=>{c8={"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)"};JN={"sidebar.nav":AG("down","up"),"files.nav":AG("down","up"),"sidebar.search.nav":AG("down","up"),"files.hierarchy":AG("collapse","expand"),"sidebar.view":AG("previous view","next view"),"files.tab":AG("previous tab","next tab")},zN=new Set(["global","workspace","terminal"]),YN={ctrl:"ctrl",control:"ctrl",ctl:"ctrl",cmd:"cmd",command:"cmd",meta:"cmd",super:"cmd",win:"cmd",alt:"alt",option:"alt",opt:"alt",shift:"shift"},ZN={esc:"escape",spacebar:"space",pgup:"pageup",pgdn:"pagedown",pgdown:"pagedown"},GN=new Set(["up","down","left","right","pageup","pagedown","home","end","insert","delete","backspace","tab","space","escape","enter","return",...Array.from({length:12},(J,z)=>`f${z+1}`)]),XN=["ctrl","cmd","alt","shift"]});function RG(J){return J in I6}function yZ(J,z){let Y=J.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:`"${J}": 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=jN[Z];if(!H)return{error:`"${J}": tmux can't bind the key "${Z}"`};X=H}let Q=/^f\d+$/.test(Z);if(G.size===0&&!Q&&!z?.allowBare)return{error:`"${J}": tmux session keys are no-prefix root bindings live in every pane \u2014 a bare key would shadow typing (add a modifier, or use an F-key)`};let f="";if(G.has("ctrl"))f+="C-";if(G.has("alt"))f+="M-";if(G.has("shift"))f+="S-";return{key:f+X}}function T6(){let J={};for(let[Y,Z]of Object.entries(IZ)){let G=yZ(Z,{allowBare:RG(Y)});if("error"in G)throw Error(`default tmux chord for ${Y} failed to translate: ${G.error}`);J[Y]={chord:Z,key:G.key}}let z=EY.map((Y)=>{let Z=yZ(Y);if("error"in Z)throw Error(`default tmux focus chord ${Y} failed to translate`);return{chord:Y,key:Z.key}});return{binds:J,focus:z,overridden:new Set,warnings:[]}}function d8(J){let z=T6(),Y=new Set;for(let Z of J){if(!Z.id.startsWith("tmux."))continue;if(Z.id===Ez){if(Z.keys.length===0){z.focus=[null,null,null,null],Y.add(Ez);continue}if(Z.keys.length!==EY.length){z.warnings.push(`${Ez}: needs exactly 4 chords in order left/down/up/right (got ${Z.keys.length}) \u2014 keeping the default`);continue}let f=[],H=!0;for(let B of Z.keys){let V=yZ(B);if("error"in V){z.warnings.push(`${Ez}: ${V.error} \u2014 keeping the default`),H=!1;break}f.push({chord:B,key:V.key})}if(!H)continue;z.focus=f,Y.add(Ez);continue}if(!(Z.id in IZ)){z.warnings.push(`${Z.id}: unknown tmux binding id`);continue}let G=Z.id;if(Z.keys.length===0){z.binds[G]=null,Y.add(G);continue}if(Z.keys.length>1)z.warnings.push(`${G}: tmux bindings take ONE chord \u2014 using "${Z.keys[0]}", ignoring the rest`);let X=Z.keys[0],Q=yZ(X,{allowBare:RG(G)});if("error"in Q){z.warnings.push(`${G}: ${Q.error} \u2014 keeping the default`);continue}if(X!==IZ[G])Y.add(G);z.binds[G]={chord:X,key:Q.key}}return z.overridden=Y,z}function n8(J){return J.startsWith("tmux.")?{allowShiftCharacter:!0}:{}}function u6(){SZ=null}function Jf(){if(SZ)return SZ;let J=oq();if(!J.exists||J.doc===null)return SZ=T6(),SZ;let z=tq(J.doc,process.platform,{chordOptsFor:n8}),Y=z.warnings.filter((G)=>G.startsWith("tmux.")),Z=d8(z.entries);Z.warnings=[...Y,...Z.warnings];for(let G of Z.warnings)console.warn(`[kobe/keybindings] ${G}`);return SZ=Z,SZ}var BN,I6,y6,IZ,Ez="tmux.focus",EY,jN,SZ=null;var zf=N(()=>{m8();eq();BN={"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"},I6={"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"},y6=["F6","F7","F8","F9","F10","F11"],IZ={...BN,...I6};EY=["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],jN={up:"Up",down:"Down",left:"Left",right:"Right",pageup:"PgUp",pagedown:"PgDn",home:"Home",end:"End",insert:"IC",delete:"DC",backspace:"BSpace",tab:"Tab",space:"Space",escape:"Escape",enter:"Enter",return:"Enter",...Object.fromEntries(Array.from({length:12},(J,z)=>[`f${z+1}`,`F${z+1}`]))}});async function EX(J,z){let Y=null;for(let G=0;G<24;G++){let X=await qG(J);if(X){if(!z)return{pane:X,ready:!0};let Q=(await fG(X)).trim();if(Q.length>0&&Q===Y)return{pane:X,ready:!0};Y=Q}await x6(250)}return{pane:await qG(J)||await oB(J),ready:!1}}async function wX(J,z){let Y=`kobe-api-${J.replace(/[^A-Za-z0-9]/g,"")}`;await P0(["set-buffer","-b",Y,"--",z]),await P0(["paste-buffer","-p","-d","-b",Y,"-t",J]),await x6(WN),await gX(J,"Enter")}async function E6(J,z){let{pane:Y}=await EX(J,!0);if(!Y)return;await wX(Y,z.text)}var x6=(J)=>new Promise((z)=>setTimeout(z,J)),WN=150;var Yf=N(()=>{P1()});function w6(J,z){if(J===null)return{kind:"create",reason:"no session with this name \u2014 build fresh"};let Y=J.worktree===z.cwd,Z=!z.vendor||J.vendor===z.vendor;if(J.claudePaneAlive&&Y&&Z)return{kind:"reuse",reason:"healthy: engine pane alive, worktree + vendor match"};if(Y&&!Z&&z.hasEngineCommand)return{kind:"respawn-engine",reason:`vendor drift: session tagged ${J.vendor===""?"<untagged>":`"${J.vendor}"`}, task wants "${z.vendor}" \u2014 relaunch engine pane in place (KOB-232)`};if(Y&&Z&&J.windowCount>1)return{kind:"reuse",reason:"active window's engine pane is gone but sibling chat tabs exist \u2014 reuse rather than drop them"};if(!Y)return{kind:"rebuild",reason:J.worktree===""?"legacy session with no @kobe_worktree tag \u2014 rebuild in the right place":`worktree drift: session tagged "${J.worktree}", task wants "${z.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 P6;var h6=N(()=>{dq();nq();iq();lq();$q();aq();_q();P6={claude:VG,conductor:KG,nord:DG,opencode:LG,dracula:UG,tokyonight:FG,"osaka-jade":MG}});function VN(J){let z=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.exec(J);if(!z)return null;let Y=z[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 v6(J,z,Y="dark"){let Z=J.defs??{};function G(Q,f){if(typeof Q==="string"){if(Q==="transparent"||Q==="none")return null;if(Q.startsWith("#"))return VN(Q);if(f.includes(Q))return null;let B=Z[Q]??J.theme[Q];if(B===void 0)return null;return G(B,[...f,Q])}if(!Q||typeof Q!=="object")return null;let H=Q[Y];return typeof H==="string"?G(H,f):null}let X=J.theme[z];if(X===void 0)return null;return G(X,[z])}function Zf(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function Gf(J){if(!Zf(J))return{ok:!1,reason:"theme must be a JSON object at the top level"};let z=J;if(!("theme"in z))return{ok:!1,reason:"missing required key `theme`"};let Y=z.theme;if(!Zf(Y))return{ok:!1,reason:"`theme` must be an object map"};if("defs"in z&&z.defs!==void 0){if(!Zf(z.defs))return{ok:!1,reason:"`defs` must be an object map"};for(let[Z,G]of Object.entries(z.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(!Zf(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 z&&z.$schema!==void 0&&typeof z.$schema!=="string")return{ok:!1,reason:"`$schema` must be a string when present"};return{ok:!0,theme:z}}var i8=()=>{};import{readFileSync as KN,readdirSync as UN}from"fs";import{join as m6}from"path";function gG(){return m6(qJ(),"themes")}function PX(){let J=gG(),z;try{z=UN(J)}catch{return[]}let Y=[];for(let Z of z){if(!Z.endsWith(".json"))continue;let G=m6(J,Z),X;try{let H=KN(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=Gf(X);if(!Q.ok){console.warn(`[kobe] skipping user theme ${G}: ${Q.reason}`);continue}let f=Z.slice(0,-5);Y.push({name:f,theme:Q.theme})}return Y}var Xf=N(()=>{p1();i8()});import{readFileSync as DN}from"fs";function MN(){try{let J=JSON.parse(DN(iJ(),"utf8")),z=typeof J.activeTheme==="string"&&J.activeTheme?J.activeTheme:"claude",Y=typeof J.focusAccent==="string"&&LN.includes(J.focusAccent)?J.focusAccent:"primary";return{themeName:z,focusAccentSlot:Y,enabled:J.tmuxChromeTheme!=="off"&&J.tmuxBorderTheme!=="off"}}catch{return{themeName:"claude",focusAccentSlot:"primary",enabled:!0}}}function FN(J){return PX().find((Y)=>Y.name===J)?.theme??P6[J]??null}function Lz(J,...z){for(let Y of z){let Z=v6(J,Y);if(Z)return Z}return null}function c6(J,z){let Y=Lz(J,"text"),Z=Lz(J,"background"),G=Lz(J,"textMuted","text"),X=Lz(J,"backgroundPanel","background"),Q=Lz(J,"backgroundElement","backgroundPanel","background"),f=Lz(J,"backgroundMenu","backgroundElement","backgroundPanel","background"),H=Lz(J,"selectedListItemText","background"),B=Lz(J,z,"primary","borderActive","border","text");return{border:Lz(J,"border","text"),activeBorder:B,statusBg:X,statusFg:G,statusMutedFg:G,windowFg:G,currentWindowBg:Q,currentWindowFg:B,activityFg:Lz(J,"info","primary","text"),bellFg:Lz(J,"warning","error","primary","text"),messageBg:f,messageFg:Y,messageCommandFg:B,modeBg:B,modeFg:H??Z}}function sJ(J){let z=[];if(J.bg)z.push(`bg=${J.bg}`);if(J.fg)z.push(`fg=${J.fg}`);if(z.length===0)return null;if(J.attrs)z.push(...J.attrs);return z.join(",")}function n6(J){let z=sJ({bg:J.statusBg,fg:J.statusFg}),Y=sJ({bg:J.statusBg,fg:J.statusMutedFg}),Z=sJ({bg:J.statusBg,fg:J.windowFg});return[{key:"border",option:"pane-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:sJ({fg:J.border})},{key:"active",option:"pane-active-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:sJ({fg:J.activeBorder})},{key:"status",option:"status-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:z},{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:sJ({bg:J.currentWindowBg,fg:J.currentWindowFg,attrs:["bold"]})},{key:"activity-window",option:"window-status-activity-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:sJ({bg:J.statusBg,fg:J.activityFg})},{key:"bell-window",option:"window-status-bell-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:sJ({bg:J.statusBg,fg:J.bellFg,attrs:["bold"]})},{key:"last-window",option:"window-status-last-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:sJ({bg:J.statusBg,fg:J.statusFg})},{key:"message",option:"message-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:sJ({bg:J.messageBg,fg:J.messageFg})},{key:"message-command",option:"message-command-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:sJ({bg:J.messageBg,fg:J.messageCommandFg,attrs:["bold"]})},{key:"mode",option:"mode-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:sJ({bg:J.modeBg,fg:J.modeFg})},{key:"display-panes",option:"display-panes-colour",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:J.border},{key:"display-panes-active",option:"display-panes-active-colour",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:J.activeBorder}]}function ON(J){let z=new Set(J.marker.split(",").map((X)=>X.trim()).filter(Boolean)),Y=[],Z=[];for(let X of n6(J.hexes))if(X.value){if((J.current[X.key]??"")!==X.value)Y.push(["set-option",X.setFlag,X.option,X.value]);Z.push(X.key)}else if(z.has(X.key))Y.push(["set-option",X.unsetFlag,X.option]);let G=Z.join(",");if(G!==J.marker)Y.push(G?["set-option","-g",l8,G]:["set-option","-gu",l8]);return Y}async function d6(J){let{code:z,stdout:Y}=await l0(J);return z===0?Y.trim():""}async function TZ(){try{let J=MN(),z=J.enabled?FN(J.themeName):null,Y=z?c6(z,J.focusAccentSlot):c6({theme:{}},J.focusAccentSlot),Z=n6(Y),[G,...X]=await Promise.all([d6(["show-options","-gqv",l8]),...Z.map((H)=>d6(["show-options",H.showFlag,H.option]))]),Q=Object.fromEntries(Z.map((H,B)=>[H.key,X[B]??""])),f=ON({marker:G,current:Q,hexes:Y});if(f.length>0)await n1(f)}catch{}}var l8="@kobe_border_theme",LN;var Qf=N(()=>{p1();P1();h6();Xf();LN=["primary","success","info"]});function i6(){return l1()[qf]!==!1}var qf="zen.keepTasks";var $8=N(()=>{YZ()});var ff={};B1(ff,{recordGen:()=>wY,isLatestGen:()=>p6,genAgeMs:()=>bN,coalesceLayoutWork:()=>SN,RESIZE_GUARD_MS:()=>kN,LAYOUT_COALESCE_MS:()=>a6});import{createHash as AN,randomUUID as RN}from"crypto";import{mkdirSync as gN,readFileSync as l6,renameSync as CN,writeFileSync as NN}from"fs";import{join as $6}from"path";function _6(){return $6(qJ(),"layout-coord")}function a8(J,z){let Y=AN("sha1").update(J).digest("hex").slice(0,16);return $6(_6(),`${Y}.${z}`)}function wY(J,z){let Y=RN();try{gN(_6(),{recursive:!0});let Z=a8(J,z),G=`${Z}.${Y}.tmp`;NN(G,`${Date.now()}
56
+ ${Y}`),CN(G,Z)}catch{}return Y}function p6(J,z,Y){try{return l6(a8(J,z),"utf8").split(`
57
+ `)[1]?.trim()===Y}catch{return!0}}function bN(J,z,Y=Date.now()){try{let Z=Number.parseInt(l6(a8(J,z),"utf8").split(`
58
+ `)[0]??"",10);return Number.isFinite(Z)?Y-Z:Number.POSITIVE_INFINITY}catch{return Number.POSITIVE_INFINITY}}async function SN(J,z,Y,Z=a6){let G=wY(J,z);if(Z>0)await new Promise((X)=>setTimeout(X,Z));if(!p6(J,z,G))return;await Y()}var a6=120,kN=400;var CG=N(()=>{p1()});function yN(J){let z=[];for(let Y of J.split(`
59
+ `)){let Z=Y.trim();if(!Z)continue;let[G,X,Q,f,H]=Z.split("\t");if(!G||!X||!Q)continue;let B=Number.parseInt(H?.trim()??"",10);z.push({windowId:G.trim(),paneId:X.trim(),role:Q.trim(),version:f?.trim()??"",...Number.isFinite(B)?{paneWidth:B}:{}})}return z}function TN(J){let z=J.indexOf("-t");return z>=0&&z+1<J.length?J[z+1]??null:null}function uN(J,z){return J.filter((Y)=>{let Z=TN(Y);return Z===null||z.has(Z)})}function r6(J,z){let Y=new Map;for(let G of J){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"),f=G.find((B)=>B.role==="ops");if(Q&&(z.force||Q.version!==z.currentVersion))Z.push({role:"tasks",paneId:Q.paneId});let H=z.force?!0:X&&(z.vendorChanged||f?.version!==z.currentVersion);if(f&&H)Z.push({role:"ops",paneId:f.paneId,claudePaneId:X??null})}return Z}async function Hf(J){let{code:z,stdout:Y}=await l0(["list-panes","-s","-t",`=${J}`,"-F",IN]);if(z!==0)return null;return yN(Y)}async function o6(J,z){if(z.length===0)return;let Y=await Hf(J),Z=Y?uN(z,new Set(Y.map((G)=>G.paneId))):z;if(Z.length>0)await n1(Z)}function s6(J,z){let Y=k1(),Z=zJ(),G=[];for(let X of J){let Q=X.role==="tasks"?gY(Y,{initialTaskId:z.taskId}):_Z({cwd:z.cwd,taskId:z.taskId,claudePaneId:X.claudePaneId,cliInvocation:Y,vendor:z.vendor});G.push(["respawn-pane","-k","-t",X.paneId,"-c",w1(z.cwd),kJ(Z+Q)],["set-option","-p","-t",X.paneId,"@kobe_role",X.role],["set-option","-p","-t",X.paneId,Mz,t0])}return G}function xN(J,z){if(J===0)return"no-engine-pane";return z===0?"switched":"respawn-failed"}async function t6(J,z,Y,Z,G){let X=await Hf(J);if(!X)return"no-engine-pane";let Q=X.filter((V)=>V.role==="claude");if(Q.length===0)return"no-engine-pane";let f=w1(z),H=[];for(let V of Q){let j=BG(Y,G),K=kJ(GG(NJ(j.argv),Z,z));H.push(["respawn-pane","-k","-c",f,"-t",V.paneId,K]),H.push(j.sessionId?["set-window-option","-t",V.paneId,Tz,j.sessionId]:["set-window-option","-u","-t",V.paneId,Tz])}let B=await n1(H);return xN(Q.length,B)}async function e6(){let J=await SY([tz,BZ,ez]),z=Number.parseInt(J[tz]??"",10),Y=Number.isFinite(z)&&z>0?HZ(z):qZ,Z=EN({widthPct:JY(Number.parseInt(J[BZ]??"",10)),heightPct:JY(Number.parseInt(J[ez]??"",10))});return{tasksWidth:Y,rcArgs:Z}}function EN(J){let z=[];if(J.widthPct!==null)z.push("-x",`${J.widthPct}%`);if(J.heightPct!==null)z.push("-y",`${J.heightPct}%`);return z}async function JK(){return(await e6()).rcArgs}async function _8(J,z={}){let{tasksWidth:Y,rcArgs:Z}=await e6(),G=await Hf(J);if(!G)return{rows:null,commands:[]};let X=[];for(let Q of G)if(Q.role==="tasks"&&(z.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 uZ(J,z){wY(J,"resize");let{rows:Y,commands:Z}=await _8(J);if(!Y)return;let G=[...Z];if(z)G.push(...s6(r6(Y,{currentVersion:t0,force:!1,vendorChanged:z.vendorChanged}),z));await o6(J,G)}async function zK(J){if(!await W1(J))return;await uZ(J)}async function hX(J){let{code:z,stdout:Y}=await l0(["list-panes","-t",`=${J}`,"-F",`#{@kobe_role} #{pane_width} #{pane_height} #{window_width} #{window_height} #{window_zoomed_flag} #{${qz}} #{${CJ}}`]);if(z!==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=[],f=Z.find(([B])=>B?.trim()==="tasks");if(f){let B=Number.parseInt(f[1]?.trim()??"",10);if(Number.isFinite(B)&&B>0)Q.push(["set-option","-s",tz,`${HZ(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)?JY(100*B/G):null,K=Number.isFinite(V)?JY(100*V/X):null;if(j!==null)Q.push(["set-option","-s",BZ,`${j}`]);if(K!==null)Q.push(["set-option","-s",ez,`${K}`])}if(Q.length>0)await n1(Q)}function wN(J){let z=J.split(`
61
+ `).map((Z)=>Z.split("\t")).filter((Z)=>(Z[0]?.trim()??"")!=="");if(z.length===0)return!1;if(z.some((Z)=>Z[1]?.trim()==="1"))return!1;if(z.some((Z)=>(Z[2]?.trim()??"")!==""))return!1;if(z.some((Z)=>(Z[3]?.trim()??"")!==""))return!1;let Y=new Set(z.map((Z)=>Z[0]?.trim()));return Y.has("tasks")&&Y.has("ops")}async function YK(J){let{code:z,stdout:Y}=await l0(["list-panes","-t",`=${J}`,"-F",`#{@kobe_role} #{window_zoomed_flag} #{${qz}} #{${CJ}}`]);if(z!==0||!wN(Y))return;await hX(J)}async function NG(J){let z=await IJ(J,["@kobe_worktree","@kobe_task","@kobe_vendor"]),Y=z["@kobe_worktree"]||process.cwd(),Z=z["@kobe_task"]||void 0,G=z["@kobe_vendor"]||void 0,X=await Hf(J);if(!X)return;let Q=s6(r6(X,{currentVersion:t0,force:!0}),{cwd:Y,taskId:Z,vendor:G});await o6(J,Q),await TZ()}var Mz="@kobe_pane_version",IN;var vX=N(()=>{sz();hJ();jz();P1();fz();Qf();FJ();DZ();CG();IN=`#{window_id} #{pane_id} #{@kobe_role} #{${Mz}} #{pane_width}`});function hN(J){let z=[];for(let Y of J.split(`
62
+ `)){let Z=Y.trim();if(!Z)continue;let[G,X,Q,f,H,B,V]=Z.split("\t");if(!G)continue;let j=Number.parseInt(f??"",10),K=Number.parseInt(H??"",10),L=Number.parseInt(B??"",10),A=Number.parseInt(V??"",10);z.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(A)?A:0})}return z}function vN(J){let z=J.find((Z)=>Z.role===fZ);if(!z)return{kind:"missing-engine"};let Y=J.filter((Z)=>Z.role===GX);if(Y.length+1>=XB)return{kind:"maxed"};if(Y.length===0)return{kind:"split",targetPane:z.paneId,direction:"-h"};if(Y.length===1)return{kind:"split",targetPane:Y[0]?.paneId??z.paneId,direction:"-v"};return{kind:"split",targetPane:z.paneId,direction:"-v"}}function p8(J){return J.find((z)=>z.role===Qz)??J.find((z)=>z.role==="")}function mN(J){return 100-(JY(J??Number.NaN)??qX)}function cN(J){let z=Number.parseInt(J??"",10);return Number.isFinite(z)&&z>0?z:void 0}async function mJ(J,z){let Y=z?.trim()||`=${J}`,{code:Z,stdout:G}=await l0(["list-panes","-t",Y,"-F",PN]);return Z===0?hN(G):null}async function dN(J){let{code:z,stdout:Y}=await l0(["list-windows","-t",`=${J}`,"-F","#{window_active}\t#{window_id}"]);if(z!==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 QY(J,z){let{code:Y,stdout:Z}=await l0(["show-options","-wqv","-t",J,z]);return Y===0?Z.trim():""}async function r8(J,z,Y){await P0(["set-window-option","-t",J,z,Y])}async function PY(J,z){await P0(["set-window-option","-u","-t",J,z])}async function o8(J){let{code:z,stdout:Y}=await l0(["display-message","-p","-t",J,"#{pane_id}"]);return z===0&&Y.trim()===J}async function T1(J,z){await P0(["display-message","-t",J,z])}async function Bf(J){let z=await IJ(J,["@kobe_worktree","@kobe_task","@kobe_vendor"]);return{cwd:z["@kobe_worktree"]||process.cwd(),taskId:z["@kobe_task"]||void 0,vendor:z["@kobe_vendor"]||void 0}}function nN(J){let z=k1(),Y=zJ();return kJ(Y+_Z({cwd:J.cwd,taskId:J.taskId,claudePaneId:J.enginePaneId,cliInvocation:z,vendor:J.vendor}))}async function iN(J,z){return z?.trim()||await dN(J)}async function lN(J,z){let Y=await mJ(J,z);if(!Y)return;let Z=vN(Y);if(Z.kind==="missing-engine"){await T1(z,"kobe: no engine pane in this window");return}if(Z.kind==="maxed"){await T1(z,`kobe: workspace split limit is ${XB} panes`);return}let{cwd:G}=await Bf(J),{code:X,stdout:Q}=await l0(["split-window",Z.direction,"-t",Z.targetPane,"-l","50%","-c",w1(G),"-P","-F","#{pane_id}",kJ("true")]),f=Q.trim();if(X!==0||!f)return;await n1([["set-option","-p","-t",f,"@kobe_role",GX],["select-pane","-t",f]])}async function $N(J,z){let Y=await mJ(J,z);if(!Y)return;let Z=Y.filter((Q)=>Q.role===GX);if(Z.length===0){await T1(z,"kobe: no workspace split to close");return}let X=Z.find((Q)=>Q.active)??Z[Z.length-1];if(!X)return;await P0(["kill-pane","-t",X.paneId])}async function aN(J,z){let Y=await mJ(J,z);if(!Y)return;let Z=Y.filter((G)=>G.role===GX);if(Z.length===0){await T1(z,"kobe: no workspace splits to reset");return}await n1(Z.map((G)=>["kill-pane","-t",G.paneId]))}async function ZK(){let J=await SY([tz]);return HZ(cN(J[tz])??qZ)}async function _N(J){let{cwd:z,taskId:Y}=await Bf(J),Z=k1(),G=zJ();return{cwd:z,command:kJ(G+gY(Z,{initialTaskId:Y}))}}async function GK(J,z){let Y=await mJ(J,z);if(!Y)return;let Z=Y.find((F)=>F.role===Xz);if(Z){await P0(["kill-pane","-t",Z.paneId]);return}let G=p8(Y),X=Y.find((F)=>F.role===fZ);if(!X){await T1(z,"kobe: cannot restore file pane in this layout");return}let{cwd:Q,taskId:f,vendor:H}=await Bf(J),B=nN({cwd:Q,taskId:f,vendor:H,enginePaneId:X.paneId}),V=G?["split-window","-v","-b","-t",G.paneId,"-l",`${await pN()}%`,"-c",w1(Q),"-P","-F","#{pane_id}",B]:["split-window","-h","-t",X.paneId,"-l",`${await s8()}%`,"-c",w1(Q),"-P","-F","#{pane_id}",B],{code:j,stdout:K}=await l0(V),L=K.trim();if(j!==0||!L)return;let A=[["set-option","-p","-t",L,"@kobe_role",Xz],["set-option","-p","-t",L,Mz,t0]];if(G?.role==="")A.push(["set-option","-p","-t",G.paneId,"@kobe_role",Qz]);await n1(A)}async function pN(){let J=await SY([ez]);return JY(Number.parseInt(J[ez]??"",10))??qX}async function s8(){let J=await SY([BZ]);return JY(Number.parseInt(J[BZ]??"",10))??100-lQ}async function XK(){let J=await SY([ez]);return mN(Number.parseInt(J[ez]??"",10))}async function rN(J){let{code:z,stdout:Y}=await l0(["list-windows","-t",`=${J}`,"-F","#{window_index}"]);if(z!==0)return new Set;return new Set(Y.split(`
64
+ `).map((Z)=>Number.parseInt(Z.trim(),10)).filter((Z)=>Number.isFinite(Z)))}async function QK(J,z){let Y=await rN(J),Z=K7(z);while(Y.has(Z))Z++;return Z}async function qK(J){let z=QX(J);if(await W1(z))return z;return await P0(["new-session","-d","-s",z,"-n","hidden-panes","-c",w1(process.cwd()),"while :; do sleep 3600; done"]),z}async function t8(J){let z=QX(J);if(!await W1(z))return;let{code:Y,stdout:Z}=await l0(["list-panes","-s","-t",`=${z}`,"-F","#{@kobe_role}"]);if(Y!==0)return;if(!Z.split(`
65
+ `).some((X)=>{let Q=X.trim();return Q===Qz||Q===aJ}))await P0(["kill-session","-t",`=${z}`])}async function oN(J,z){await fK(J,z,qz)}async function sN(J,z){await fK(J,z,CJ)}async function fK(J,z,Y){let Z=await QY(z,Y);if(!Z)return;if(await o8(Z))await P0(["kill-pane","-t",Z]);await PY(z,Y)}async function tN(J,z){await oN(J,z),await sN(J,z),await t8(J)}function HK(J){return J.find((z)=>z.role===fZ)??J[0]}async function e8(J,z,Y){let Z=HK(Y);if(!Z)return await T1(z,"kobe: cannot restore Tasks pane in this layout"),!1;let G=await ZK(),{cwd:X,command:Q}=await _N(J),{code:f,stdout:H}=await l0(["split-window","-h","-b","-t",Z.paneId,"-l",`${G}`,"-c",w1(X),"-P","-F","#{pane_id}",Q]),B=H.trim();if(f!==0||!B)return!1;return await n1([["set-option","-p","-t",B,"@kobe_role",aJ],["set-option","-p","-t",B,Mz,t0],["select-pane","-t",B]]),await PY(z,CJ),await T1(z,"kobe: Tasks pane restored"),!0}async function BK(J,z,Y){let Z=await qK(J),G=await QK(Z,z),{code:X,stdout:Q}=await l0(["break-pane","-d","-s",Y.paneId,"-t",`${Z}:${G}`,"-P","-F","#{pane_id}"]),f=Q.trim()||Y.paneId;if(X!==0||!f){await T1(z,"kobe: could not hide Tasks pane");return}await r8(z,CJ,f),await T1(z,"kobe: Tasks pane hidden")}async function Jj(J,z,Y){let Z=await mJ(J,z);if(!Z)return;if(!await o8(Y)){await PY(z,CJ);let Q=Z.find((f)=>f.role===aJ);if(Q){await P0(["select-pane","-t",Q.paneId]);return}await e8(J,z,Z);return}let G=HK(Z);if(!G){await T1(z,"kobe: cannot restore Tasks pane in this layout");return}if(await P0(["join-pane","-h","-b","-s",Y,"-t",G.paneId,"-l",`${await ZK()}`])!==0){await T1(z,"kobe: could not restore Tasks pane");return}await n1([["set-option","-p","-t",Y,"@kobe_role",aJ],["set-option","-p","-t",Y,Mz,t0],["select-pane","-t",Y]]),await PY(z,CJ),await t8(J),await T1(z,"kobe: Tasks pane restored")}async function eN(J,z){let Y=await QY(z,CJ);if(Y){await Jj(J,z,Y);return}let Z=await mJ(J,z);if(!Z)return;let G=Z.find((X)=>X.role===aJ);if(G){await BK(J,z,G);return}await e8(J,z,Z)}async function Jk(J,z){let Y=await QY(z,CJ);if(Y){await Jj(J,z,Y);return}let Z=await mJ(J,z);if(!Z)return;let G=Z.find((X)=>X.role===aJ);if(G){await P0(["select-pane","-t",G.paneId]);return}await e8(J,z,Z)}async function jK(J,z,Y){if(Y.role==="")await P0(["set-option","-p","-t",Y.paneId,"@kobe_role",Qz]);let Z=await qK(J),G=await QK(Z,z),{code:X,stdout:Q}=await l0(["break-pane","-d","-s",Y.paneId,"-t",`${Z}:${G}`,"-P","-F","#{pane_id}"]),f=Q.trim()||Y.paneId;if(X!==0||!f){await T1(z,"kobe: could not hide terminal pane");return}await r8(z,qz,f),await T1(z,"kobe: Terminal pane hidden")}async function WK(J,z,Y){let Z=Y.find((V)=>V.role===Xz),G=Y.find((V)=>V.role===fZ);if(!Z&&!G)return await T1(z,"kobe: cannot restore terminal pane in this layout"),!1;let{cwd:X}=await Bf(J),Q=Z?["split-window","-v","-t",Z.paneId,"-l",`${await XK()}%`,"-c",w1(X),"-P","-F","#{pane_id}"]:["split-window","-h","-t",G?.paneId??"","-l",`${await s8()}%`,"-c",w1(X),"-P","-F","#{pane_id}"],{code:f,stdout:H}=await l0(Q),B=H.trim();if(f!==0||!B)return!1;return await P0(["set-option","-p","-t",B,"@kobe_role",Qz]),await PY(z,qz),await T1(z,"kobe: Terminal pane restored"),!0}async function VK(J,z,Y){let Z=await mJ(J,z);if(!Z)return;if(!await o8(Y)){await PY(z,qz),await WK(J,z,Z);return}let G=Z.find((B)=>B.role===Xz),X=Z.find((B)=>B.role===fZ);if(!G&&!X){await T1(z,"kobe: cannot restore terminal pane in this layout");return}let Q=G?["join-pane","-v","-s",Y,"-t",G.paneId,"-l",`${await XK()}%`]:["join-pane","-h","-s",Y,"-t",X?.paneId??"","-l",`${await s8()}%`];if(await P0(Q)!==0){await T1(z,"kobe: could not restore terminal pane");return}await P0(["set-option","-p","-t",Y,"@kobe_role",Qz]),await PY(z,qz),await t8(J),Z=await mJ(J,z);let H=Z?.find((B)=>B.paneId===Y);if(H)await P0(["select-pane","-t",H.paneId]);await T1(z,"kobe: Terminal pane restored")}async function zk(J,z){let Y=await QY(z,qz);if(Y){await VK(J,z,Y);return}let Z=await mJ(J,z);if(!Z)return;let G=p8(Z);if(G){await jK(J,z,G);return}await WK(J,z,Z)}async function Yk(J){if((await MZ(J,XX)).length>0){await Gk(J);return}await Zk(J)}async function KK(J){let{code:z,stdout:Y}=await l0(["list-windows","-t",`=${J}`,"-F","#{window_id}"]);if(z!==0)return[];return Y.split(`
66
+ `).map((Z)=>Z.trim()).filter((Z)=>Z.length>0)}async function UK(J,z){return!!(await mJ(J,z))?.some((Z)=>Z.role===fZ)}async function Zk(J){let z=await KK(J);for(let Y of z){if(!await UK(J,Y))continue;if(await QY(Y,RY))continue;await LK(J,Y)}await bY(J,XX,"1"),await T1(`=${J}`,"kobe: Zen mode on \u2014 all tabs")}async function Gk(J){let z=await KK(J);for(let Y of z){let Z=await QY(Y,RY);if(Z)await Xk(J,Y,Z)}await P0(["set-option","-u","-t",J,XX]),await T1(`=${J}`,"kobe: Zen mode off \u2014 all tabs")}async function DK(J,z){if((await MZ(J,XX)).length===0)return;if(await QY(z,RY))return;if(!await UK(J,z))return;await LK(J,z)}async function LK(J,z){let Y=await mJ(J,z);if(!Y)return;let Z=[],G=Y.find((Q)=>Q.role===Xz);if(G)await P0(["kill-pane","-t",G.paneId]),Z.push(Xz);let X=p8(Y);if(X)await jK(J,z,X),Z.push(Qz);if(!i6()){let Q=Y.find((f)=>f.role===aJ);if(Q)await BK(J,z,Q),Z.push(aJ)}if(Z.length===0){await T1(z,"kobe: already focused \u2014 nothing to hide");return}await r8(z,RY,Z.join(",")),await T1(z,"kobe: Zen mode on")}async function Xk(J,z,Y){let Z=new Set(Y.split(",").map((G)=>G.trim()));if(Z.has(aJ)){let G=await QY(z,CJ);if(G)await Jj(J,z,G)}if(Z.has(Xz)){let G=await mJ(J,z);if(G&&!G.some((X)=>X.role===Xz))await GK(J,z)}if(Z.has(Qz)){let G=await QY(z,qz);if(G)await VK(J,z,G)}await PY(z,RY),await T1(z,"kobe: Zen mode off")}async function Qk(J){let{code:z,stdout:Y}=await l0(["list-windows","-t",`=${J}`,"-F","#{window_id}"]);if(z!==0)return 0;return Y.split(`
67
+ `).filter((Z)=>Z.trim().length>0).length}async function qk(J,z){if(await Qk(J)<=1){await T1(z,"Cannot close the only ChatTab");return}await tN(J,z),await P0(["kill-window","-t",z])}async function jf(J,z,Y={}){if(!await W1(J))return;let Z=await iN(J,Y.windowId);if(!Z)return;switch(z){case"workspace-split":await lN(J,Z);return;case"workspace-close":await $N(J,Z);return;case"workspace-reset":await aN(J,Z);return;case"tasks-toggle":await eN(J,Z);return;case"tasks-restore":await Jk(J,Z);return;case"ops-toggle":await GK(J,Z);return;case"terminal-toggle":await zk(J,Z);return;case"zen-toggle":await Yk(J);return;case"chat-tab-close":await qk(J,Z);return}}var PN="#{pane_id}\t#{@kobe_role}\t#{pane_active}\t#{pane_width}\t#{pane_height}\t#{window_width}\t#{window_height}";var Wf=N(()=>{sz();jz();$8();P1();fz();FJ();DZ();vX()});function Kf(J,z){return[["bind-key","-n",J,"if-shell","-F","#{?#{@kobe_surface},0,1}","previous-window"],["bind-key","-n",z,"if-shell","-F","#{?#{@kobe_surface},0,1}","next-window"]]}function Uf(J,z="kill-window"){return["bind-key","-n",J,"if-shell","-F","#{>:#{session_windows},1}",z,"display-message 'Cannot close the only ChatTab'"]}function Df(J){return["bind-key","-n",J,"command-prompt","-I","#{window_name}","rename-window -- '%%'"]}function Lf(J){return[["bind-key","-n",J,"command-prompt","-p",Vf],["bind-key","T","command-prompt","-p",Vf]]}function zj(J){return J.startsWith("C-")&&J.length===3?`^${J.slice(2)}`:J}function Mf(J){return`${[J.focusLeft?`${zj(J.focusLeft)} tasks`:null,J.detach?`${zj(J.detach)} detach`:null,J.newTab?`${zj(J.newTab)} tab`:null,J.layoutSplits?`prefix ${J.layoutSplits} splits`:null,J.layoutPanes?`prefix ${J.layoutPanes} panes`:null].filter((Y)=>Y!==null).join(" ")} `}async function Zj(J,z){let Y=zJ(),Z=await Oq(),G=kJ(z.opsCommand??Y+_Z({cwd:z.cwd,taskId:z.taskId,claudePaneId:J,cliInvocation:z.inv,vendor:z.vendor})),{stdout:X}=await AX([["set-option","-p","-t",J,"@kobe_role","claude"],["set-window-option","-t",J,Yj,"idle"],["split-window","-h","-b","-t",J,"-l",`${Z}`,"-c",w1(z.cwd),"-P","-F","tasks=#{pane_id}",kJ(Y+gY(z.inv,{initialTaskId:z.taskId}))],["split-window","-h","-t",J,"-l",`${100-lQ}%`,"-c",w1(z.cwd),"-P","-F","ops=#{pane_id}",G],["split-window","-v","-l",`${100-qX}%`,"-c",w1(z.cwd),"-P","-F","shell=#{pane_id}"],["select-pane","-t",J]]),Q=Object.fromEntries(X.split(`
68
+ `).map((f)=>f.trim()).filter(Boolean).map((f)=>f.split("=",2)));if(await n1([...Q.tasks?[["set-option","-p","-t",Q.tasks,"@kobe_role",aJ]]:[],...Q.tasks?[["set-option","-p","-t",Q.tasks,Mz,t0]]:[],...Q.ops?[["set-option","-p","-t",Q.ops,"@kobe_role",Xz]]:[],...Q.ops?[["set-option","-p","-t",Q.ops,Mz,t0]]:[],...Q.shell?[["set-option","-p","-t",Q.shell,"@kobe_role",Qz]]:[]]),Q.ops){let f=await JK();if(f.length>0)await P0(["resize-pane","-t",Q.ops,...f])}}async function MK(J,z){if(!await W1(J))return;let Y=await IJ(J,["@kobe_worktree","@kobe_task","@kobe_vendor",OX]),Z=Y["@kobe_worktree"]||process.cwd(),G=Y["@kobe_task"]||void 0,X=Y[OX]||void 0,Q=z??Y["@kobe_vendor"];if(z)await fk(J,G,z);let f=TJ(Q),H=BG(f,Q),B=k1(),j=(await l0(["new-window","-t",`=${J}`,"-c",w1(Z),"-P","-F","#{pane_id}",kJ(GG(NJ(H.argv),X,Z))])).stdout.trim();if(!j)return;if(H.sessionId)await IY(j,Tz,H.sessionId);await Zj(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 DK(J,L)}async function Of(J){if(!await W1(J))return;let Y=(await IJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),Z=k1(),X=`${zJ()}${Z.map(X1).join(" ")} settings`;await Vz(J,{cwd:w1(Y),command:X,name:"settings",surface:!0})}async function Af(J){if(!await W1(J))return;let Y=(await IJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),Z=k1(),X=`${zJ()}${Z.map(X1).join(" ")} help-page`;await Vz(J,{cwd:w1(Y),command:X,name:"help",surface:!0})}async function Rf(J,z){if(!await W1(J))return;let Z=(await IJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),G=k1(),X=zJ(),Q=z?` --repo ${X1(z)}`:"",f=`${X}${G.map(X1).join(" ")} new-task${Q}`;await Vz(J,{cwd:w1(Z),command:f,name:"new task",surface:!0})}async function gf(J){if(!await W1(J))return;let Y=(await IJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),Z=k1(),X=`${zJ()}${M7({cliInvocation:Z})}`;await Vz(J,{cwd:w1(Y),command:X,name:"update",surface:!0})}async function FK(J){if(!await W1(J))return;let Y=(await IJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),Z=k1(),X=`${zJ()}${Z.map(X1).join(" ")} quick-task --session ${X1(J)}`;await Vz(J,{cwd:w1(Y),command:X,name:"quick task",surface:!0})}async function fk(J,z,Y){if(await bY(J,"@kobe_vendor",Y),!z)return;try{let{connectOrStartDaemon:Z}=await Promise.resolve().then(() => (OJ(),Cf)),G=await Z();try{await G.request("task.setVendor",{taskId:z,vendor:Y})}finally{G.close()}}catch(Z){console.error("[kobe tmux] failed to persist selected engine vendor:",Z)}}var Vf,Yj="@kobe_tab_state",mX="#{?#{==:#{@kobe_tab_state},running},\u25CF,#{?#{==:#{@kobe_tab_state},done},\u2713,#{?#{==:#{@kobe_tab_state},error},!,#{?#{==:#{@kobe_tab_state},unknown},?,\u25CB}}}} #I:#W",Ff;var Gj=N(()=>{sz();hJ();jz();P1();fz();t1();FJ();DZ();Wf();vX();Vf=`engine (${i1.join("/")}/\u2026)`;Ff=mX});var tJ={};B1(tJ,{tmuxWindowSizeArgsForClient:()=>qj,tmuxSessionName:()=>M1,tmuxInitialSizeArgs:()=>AK,tmuxInitialClientSize:()=>Qj,tmuxAvailable:()=>yz,switchClientBeforeKill:()=>uz,sessionExists:()=>W1,selectTasksPane:()=>Dk,runLayoutAction:()=>jf,resyncWindowToClient:()=>jk,refreshKobeWorkspacePanes:()=>NG,quickCreate:()=>FK,prepareWindowForSwitch:()=>kf,prepareWindowForAttach:()=>Nf,parseTmuxClientRows:()=>RK,parseObservedSession:()=>NK,openUpdateTab:()=>gf,openSettingsTab:()=>Of,openNewTaskTab:()=>Rf,openHelpTab:()=>Af,newChatTab:()=>MK,kobeStatusRight:()=>Mf,killSession:()=>rJ,healSessionLayout:()=>zK,focusBindCommand:()=>CK,ensureSession:()=>vY,currentSessionName:()=>yJ,clientsWithConflictingSize:()=>gK,chatTabSwitchBindings:()=>Kf,chatTabRenameBinding:()=>Df,chatTabCloseBinding:()=>Uf,chatTabChooseEngineBindings:()=>Lf,captureGlobalLayoutOnDrag:()=>YK,captureGlobalLayout:()=>hX,attachArgv:()=>QG,PANE_VERSION_OPTION:()=>Mz,CHAT_TAB_STATUS_FORMAT:()=>mX,CHAT_TAB_STATUS_CURRENT_FORMAT:()=>Ff,CHAT_TAB_STATE_OPTION:()=>Yj,CHAT_TAB_ENGINE_PROMPT:()=>Vf});function AK(J=process.stdout,z=process.env){let Y=Qj(J,z);return Y?["-x",`${Y.columns}`,"-y",`${Y.rows}`]:[]}function Qj(J=process.stdout,z=process.env){let Y=hY(J.columns)??hY(z.COLUMNS),Z=hY(J.rows)??hY(z.LINES);return Y&&Z?{columns:Y,rows:Z}:null}function hY(J){let z=typeof J==="number"?J:typeof J==="string"?Number.parseInt(J,10):Number.NaN;return Number.isInteger(z)&&z>0?z:void 0}function RK(J){let z=[];for(let Y of J.split(`
69
+ `)){let[Z,G,X,Q,f]=Y.split("\t"),H=hY(X?.trim()),B=hY(Q?.trim());if(!Z?.trim()||!G?.trim()||!H||!B)continue;z.push({name:Z.trim(),session:G.trim(),width:H,height:B,flags:f?.trim()??""})}return z}function gK(J,z,Y,Z={}){return J.filter((G)=>G.session===z).filter((G)=>G.name!==Z.currentClientName).filter((G)=>G.width!==Y.columns||G.height!==Y.rows).map((G)=>G.name)}function qj(J,z){let Y=Math.max(1,J.rows-(z.status?.trim()==="on"?1:0));return["-x",`${J.columns}`,"-y",`${Y}`]}async function fj(J,z,Y={}){if(!z)return;let{code:Z,stdout:G}=await l0(["list-clients","-t",`=${J}`,"-F",Hk]);if(Z!==0)return;let X=gK(RK(G),J,z,Y),Q=[];if(Y.currentClientName)Q.push(["refresh-client","-f","!ignore-size","-t",Y.currentClientName]);for(let f of X)Q.push(["refresh-client","-f","ignore-size","-t",f]);if(Q.length>0)await n1(Q)}async function Nf(J){wY(J,"resize");let z=Qj();await fj(J,z);let Y=z?["-x",`${z.columns}`,"-y",`${z.rows}`]:[];if(Y.length>0)await P0(["resize-window","-t",`=${J}`,...Y]);await uZ(J)}async function Bk(){let{code:J,stdout:z}=await l0(["display-message","-p","#{client_name}\t#{client_width}\t#{client_height}\t#{status}"]);if(J!==0)return{sizeArgs:[],clientSize:null,clientName:void 0};let[Y,Z,G,X]=z.trim().split("\t"),Q=hY(Z),f=hY(G),H=Q&&f?{columns:Q,rows:f}:null;return{sizeArgs:H?qj(H,{status:X}):[],clientSize:H,clientName:Y?.trim()||void 0}}async function kf(J){wY(J,"resize");let z=await Bk();await fj(J,z.clientSize,{currentClientName:z.clientName});let Y=z.sizeArgs;if(Y.length>0)await P0(["resize-window","-t",`=${J}`,...Y]);await uZ(J)}async function jk(J,z){if(!z.size)return;wY(J,"resize"),await fj(J,z.size,{currentClientName:z.clientName});let Y=qj(z.size,{status:z.status}),{commands:Z}=await _8(J,{force:!0});await n1([["resize-window","-t",`=${J}`,...Y],...Z])}function CK(J,z,Y){let Z=`#{?window_zoomed_flag,1,#{?${Wk[z]},,1}}`;if(Y)return["bind-key","-n",J,"if-shell","-F",Z,`select-pane ${z}`,Y];return["bind-key","-n",J,"if-shell","-F",Z,`select-pane ${z}`]}async function vY(J){let z=Xj.get(J.name);if(z)return z;let Y=Uk(J);Xj.set(J.name,Y);try{return await Y}finally{Xj.delete(J.name)}}function NK(J){let z="",Y="",Z=!1,G=new Set;for(let X of J.split(`
70
+ `)){let[Q,f,H,B,V]=X.split("\t");if(!Q?.trim())continue;if(G.add(Q.trim()),!z&&B?.trim())z=B.trim();if(!Y&&V?.trim())Y=V.trim();if(f?.trim()==="1"&&H?.trim()==="claude")Z=!0}return{worktree:z,vendor:Y,claudePaneAlive:Z,windowCount:G.size}}async function Kk(J){if(!await W1(J))return null;let{code:z,stdout:Y}=await l0(["list-panes","-s","-t",`=${J}`,"-F",Vk]);if(z!==0)return{worktree:"",vendor:"",claudePaneAlive:!1,windowCount:0};return NK(Y)}async function Uk(J){let z=J.launchInit,Y=await Kk(J.name),Z=w6(Y,{cwd:J.cwd,vendor:J.vendor,hasEngineCommand:J.command.length>0}),G=bV(J.repo);if(Z.kind==="reuse")return await uZ(J.name,{cwd:J.cwd,taskId:J.taskId,vendor:J.vendor}),!0;if(Z.kind==="respawn-engine"){let H0=await t6(J.name,J.cwd,J.command,G,J.vendor);if(H0==="switched"){if(J.vendor)await bY(J.name,"@kobe_vendor",J.vendor);return await uZ(J.name,{cwd:J.cwd,taskId:J.taskId,vendor:J.vendor,vendorChanged:!0}),!0}if(H0==="respawn-failed")return await uZ(J.name,{cwd:J.cwd,taskId:J.taskId,vendor:J.vendor}),!0}if(Z.kind==="rebuild"||Z.kind==="respawn-engine")await rJ(J.name);let X=k1(),Q=BG(J.command,J.vendor),f=J.repo!==void 0&&J.cwd===J.repo,H=f||G?void 0:J.taskId,B=f&&!G?J.taskId:void 0,V=hq(Pq(Q.argv,J.vendor,H),J.vendor,B),j=GG(NJ(V),G,J.cwd),L=(await l0(["new-session","-d","-s",J.name,"-c",w1(J.cwd),...AK(),"-P","-F","#{pane_id}",D7(j,{initScript:G?void 0:z?.initScript,markerPath:!G&&z?.initScript?MW(J.cwd):void 0,timeoutSeconds:QB(process.env.KOBE_REPO_INIT_TIMEOUT_SECONDS)})])).stdout.trim();if(!L)return console.error("[kobe tmux] new-session returned no pane id; session creation failed"),!1;if(Q.sessionId)await IY(L,Tz,Q.sessionId);await n1([...J.taskId?[["set-option","-t",J.name,"@kobe_task",J.taskId]]:[],["set-option","-t",J.name,"@kobe_worktree",J.cwd],...J.vendor?[["set-option","-t",J.name,"@kobe_vendor",J.vendor]]:[],...G?[["set-option","-t",J.name,OX,G]]:[]]),await Zj(L,{cwd:J.cwd,taskId:J.taskId,opsCommand:J.opsCommand,inv:X,vendor:J.vendor});let A=zJ(),F=X.map(X1).join(" "),g=`${A}${F} new-chattab --session '#{session_name}'`,u=`${g} --vendor '%%'`,s=`run-shell ${X1(u)}`,S=`${A}${F} focus-tasks --session '#{session_name}' --window '#{window_id}'`,O=`run-shell ${X1(S)}`,C=(H0)=>`${A}${F} layout --session '#{session_name}' --window '#{window_id}' --action ${H0}`,y=C("tasks-restore"),a=`run-shell ${X1(y)}`,l=C("chat-tab-close"),t=`run-shell ${X1(l)}`,J0=`${A}${F} heal-layout --session '#{session_name}'`,T=`run-shell -b ${X1(J0)}`,Q0=`${A}${F} resync-window --session '#{session_name}' --client '#{client_name}' --cols '#{client_width}' --rows '#{client_height}' --status '#{status}'`,r=`run-shell -b ${X1(Q0)}`,W0=`${A}${F} capture-layout --session '#{session_name}'`,O0=`run-shell -b ${X1(W0)}`,K0=F7({tmuxSocket:Wz}),_=Jf(),P=y6.map((H0)=>["unbind-key","-n",H0]);if(_.overridden.has(Ez))for(let H0 of EY){let b0=yZ(H0);if("key"in b0)P.push(["unbind-key","-n",b0.key])}for(let H0 of _.overridden){if(H0===Ez)continue;let b0=IZ[H0],w0=RG(H0),y0=yZ(b0,{allowBare:w0});if("key"in y0)P.push(w0?["unbind-key",y0.key]:["unbind-key","-n",y0.key])}let k=["-L","-D","-U","-R"],o=_.focus.flatMap((H0,b0)=>{let w0=k[b0],y0=w0==="-L"?a:void 0;return H0&&w0?[CK(H0.key,w0,y0)]:[]}),I=_.binds,h=(H0,b0)=>{let w0=I[H0];return w0?[["bind-key",w0.key,"run-shell",C(b0)]]:[]},G0=(...H0)=>{let b0=H0.map((w0)=>I[w0]?.chord).filter((w0)=>!!w0);return b0.length>0?b0.join("/"):null};await n1([["set-option","-g","status","on"],["set-window-option","-g","aggressive-resize","on"],["set-option","-g","monitor-activity","on"],["set-option","-g","visual-activity","off"],["set-option","-g","window-status-format",mX],["set-option","-g","window-status-current-format",Ff],["set-option","-g","status-right",Mf({focusLeft:_.focus[0]?.key??null,detach:I["tmux.detach"]?.key??null,newTab:I["tmux.tab.new"]?.key??null,layoutSplits:G0("tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"),layoutPanes:G0("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",O0],...P,...I["tmux.detach"]?[["bind-key","-n",I["tmux.detach"].key,"if-shell","-F",`#{?#{${CJ}},1,#{==:#{@kobe_role},tasks}}`,"detach-client",O]]:[],...o,...I["tmux.tab.new"]?[["bind-key","-n",I["tmux.tab.new"].key,"run-shell",g]]:[],...I["tmux.tab.chooseEngine"]?Lf(I["tmux.tab.chooseEngine"].key).map((H0)=>[...H0,s]):[],...I["tmux.tab.prev"]&&I["tmux.tab.next"]?Kf(I["tmux.tab.prev"].key,I["tmux.tab.next"].key):I["tmux.tab.prev"]?[["bind-key","-n",I["tmux.tab.prev"].key,"previous-window"]]:I["tmux.tab.next"]?[["bind-key","-n",I["tmux.tab.next"].key,"next-window"]]:[],...I["tmux.tab.close"]?[Uf(I["tmux.tab.close"].key,t)]:[],...I["tmux.tab.rename"]?[Df(I["tmux.tab.rename"].key)]:[],...h("tmux.layout.workspaceSplit","workspace-split"),...h("tmux.layout.workspaceClose","workspace-close"),...h("tmux.layout.workspaceReset","workspace-reset"),...h("tmux.layout.tasksToggle","tasks-toggle"),...h("tmux.layout.opsToggle","ops-toggle"),...h("tmux.layout.terminalToggle","terminal-toggle"),...h("tmux.layout.zenToggle","zen-toggle"),["bind-key","f","run-shell",`${A}${F} quick-create --session '#{session_name}'`],["bind-key","u","display-popup","-E",K0]]),await TZ(),await P0(["select-pane","-t",L]);let q0=z?.firstMessage;if(q0)E6(J.name,q0).catch((H0)=>console.error("[kobe tmux] first message delivery failed:",H0));return!0}async function OK(J,z,Y){let Z=Y?.trim()||`=${J}`,{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[f,H]=Q.split("\t");if(f?.trim()&&H?.trim()===z)return f.trim()}return""}async function Dk(J,z={}){if(!await W1(J))return"";let Y=await OK(J,"tasks",z.windowId);if(!Y)await jf(J,"tasks-restore",{windowId:z.windowId}),Y=await OK(J,"tasks",z.windowId);if(!Y)return"";return await P0(["select-pane","-t",Y]),Y}var Hk="#{client_name}\t#{client_session}\t#{client_width}\t#{client_height}\t#{client_flags}",Wk,Xj,Vk="#{window_id}\t#{window_active}\t#{@kobe_role}\t#{@kobe_worktree}\t#{@kobe_vendor}";var fJ=N(()=>{sz();hJ();p1();jz();P1();zf();Yf();fz();Qf();Gj();DZ();Wf();CG();vX();P1();Gj();vX();Wf();Wk={"-L":"pane_at_left","-D":"pane_at_bottom","-U":"pane_at_top","-R":"pane_at_right"};Xj=new Map});async function Lk(J,z){let{task:Y}=await J.request("task.get",{taskId:z});return Y}async function Hj(J,z){let Y=await Lk(J,z);if(Y.worktreePath)return{task:Y,worktreePath:Y.worktreePath};let{worktreePath:Z}=await J.request("task.ensureWorktree",{taskId:z});if(!Z)throw Error(`task ${z} has no worktree`);return{task:Y,worktreePath:Z}}async function kK(J,z){let{task:Y,worktreePath:Z}=await Hj(J,z),G=M1(z);if(!await W1(G)){let X=XY(Y.repo??"",Z,{kind:"repo-init"});if(!await vY({name:G,cwd:Z,command:TJ(Y.vendor,Y.modelEffort),taskId:z,vendor:Y.vendor,launchInit:X}))throw Error(`failed to start tmux session for ${z}`)}return{session:G,worktreePath:Z}}function Mk(J){return iQ(J,{bareSafe:!0})}async function bK(J,z){let{task:Y,worktreePath:Z}=await Hj(J,z),G=Y.kind==="main"?void 0:z,X=Y.kind==="main"?z:void 0,Q=[...hq(Pq(TJ(Y.vendor,Y.modelEffort),Y.vendor,G),Y.vendor,X)],f=XY(Y.repo??"",Z,{kind:"none"}),H=Mk(Q),B=f.initScript?.trim()?`${f.initScript}
72
+ ${H}`:H,V=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:Z,command:[V,"-ilc",B]}}async function SK(J,z){let{worktreePath:Y}=await Hj(J,z),Z=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:Y,command:[Z,"-il"]}}async function IK(J){let z=M1(J);await uz(z).catch(()=>{}),await rJ(z).catch(()=>{})}var yK=N(()=>{hJ();ZB();OG();P1();fJ()});import{existsSync as Fk}from"fs";import{join as TK,normalize as EK}from"path";function Ok(J){let z=null,Y=null,Z=new TextEncoder,G=new ReadableStream({start(X){z=J((f,H)=>{try{X.enqueue(Z.encode(`event: ${f}
73
73
  data: ${JSON.stringify(H)}
74
74
 
75
- `))}catch{}}),J=setInterval(()=>{try{G.enqueue(z.encode(`: ping
76
-
77
- `))}catch{}},15000)},cancel(){if(J)clearInterval(J);Y?.()}});return new Response(Z,{headers:{"content-type":"text/event-stream","cache-control":"no-cache, no-transform",connection:"keep-alive"}})}async function UC(f,Y,J){try{let{name:z,payload:Z}=await f.json();if(!z)return Response.json({error:"missing rpc name"},{status:400});if(!V5.has(z))return Response.json({error:`rpc ${z} is not exposed to the web UI`},{status:403});let G=await Y.request(z,Z),Q=Z?.taskId;if(typeof Q==="string"){let q=z==="task.archive"&&Z.archived!==!1;if(z==="task.delete"||q)J(Q)}return Response.json({result:G})}catch(z){let Z=z instanceof Error&&z.name!=="Error"?z.name:void 0;return Response.json({error:z instanceof Error?z.message:String(z),...Z?{name:Z}:{}},{status:500})}}async function DC(){try{let Y=(await $Y()).map((J)=>({id:J,label:Lz(J),effortLevels:_1(J).effortLevels}));return Response.json({engines:Y.length>0?Y:[{id:"claude",label:"Claude"}]})}catch(f){return Response.json({error:f instanceof Error?f.message:String(f)},{status:500})}}function LC(){return Response.json({api:Mz()})}function MC(){return Response.json({projects:Of()})}function xJ(f,Y=""){return typeof f==="string"?f:Y}function FC(f,Y){return typeof f==="boolean"?f:Y}function IK(f){let Y=f.customEngineIds;if(!Array.isArray(Y))return[];return Y.filter((J)=>typeof J==="string"&&SK.test(J)&&!Yf(J))}function OC(f){return f.split(/[-_]+/).filter(Boolean).map((Y)=>`${Y.slice(0,1).toUpperCase()}${Y.slice(1)}`).join(" ")}function AC(f,Y){return xJ(f[jY(Y)]).trim()||Lz(Y)}function RC(f,Y){return xJ(f[BY(Y)]).trim()||OG(Y).join(" ")}function TK(){let f=c1(),Y=IK(f),J=[...$J,...Y],z=xJ(f.lastSelectedVendor,"claude"),Z=xJ(f.focusAccent,"primary");return Response.json({activeTheme:xJ(f.activeTheme,"claude"),transparentBackground:FC(f.transparentBackground,!1),focusAccent:yK.includes(Z)?Z:"primary",notificationsToast:f["notifications.toast.enabled"]!==!1,notificationsSound:f["notifications.sound.enabled"]!==!1,settingsSurface:Az(f[fJ]??Oz),editorKind:JZ(f[eY]??FQ),editorCustomCommand:xJ(f[kJ]),remoteProjects:f["experimental.remoteProjects"]===!0,autoStatus:f[Uz]===!0,dispatcher:f[Dz]===!0,defaultEngine:z,engines:J.map((G)=>({id:G,label:AC(f,G),command:RC(f,G),isBuiltin:Yf(G),isCustom:!Yf(G),isDefault:G===z}))})}function SG(f,Y,J){if(typeof J==="string")f[Y]=J.trim()}function LZ(f,Y,J){if(typeof J==="boolean")f[Y]=J}async function gC(f){try{let Y=await f.json(),J={};if(SG(J,"activeTheme",Y.activeTheme),LZ(J,"transparentBackground",Y.transparentBackground),yK.includes(Y.focusAccent))J.focusAccent=Y.focusAccent;if(LZ(J,"notifications.toast.enabled",Y.notificationsToast),LZ(J,"notifications.sound.enabled",Y.notificationsSound),Y.settingsSurface==="chattab"||Y.settingsSurface==="taskpanel")J[fJ]=Y.settingsSurface;if(Fz.includes(Y.editorKind))J[eY]=Y.editorKind;SG(J,kJ,Y.editorCustomCommand),LZ(J,"experimental.remoteProjects",Y.remoteProjects),LZ(J,Uz,Y.autoStatus),LZ(J,Dz,Y.dispatcher),SG(J,"lastSelectedVendor",Y.defaultEngine);let z=c1(),Z=IK(z),G=new Set([...$J,...Z]),Q=Array.isArray(Y.engineUpdates)?Y.engineUpdates:[];for(let q of Q){if(!q||typeof q!=="object")continue;let H=q;if(typeof H.id!=="string"||!G.has(H.id))continue;SG(J,BY(H.id),H.command),SG(J,jY(H.id),H.label)}if(Y.addEngine&&typeof Y.addEngine==="object"){let q=Y.addEngine,H=typeof q.id==="string"?q.id.trim().toLowerCase():"";if(!SK.test(H)||Yf(H)||G.has(H))return Response.json({error:"invalid or duplicate engine id"},{status:400});J.customEngineIds=[...Z,H],J[BY(H)]=xJ(q.command).trim();let B=xJ(q.label).trim();J[jY(H)]=B&&B!==H?B:OC(H)}if(typeof Y.removeEngine==="string"){let q=Y.removeEngine;if(!Yf(q)){if(J.customEngineIds=Z.filter((H)=>H!==q),J[BY(q)]=void 0,J[jY(q)]=void 0,z.lastSelectedVendor===q)J.lastSelectedVendor="claude"}}if(Object.keys(J).length>0)sJ(J);return TK()}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:400})}}async function CC(f,Y){try{let{taskId:J}=await f.json();if(!J)return Response.json({error:"missing taskId"},{status:400});return Response.json(await LK(Y,J))}catch(J){return Response.json({error:J instanceof Error?J.message:String(J)},{status:500})}}async function gK(f,Y,J){try{let z=f.searchParams.get("taskId");if(!z)return Response.json({error:"missing taskId"},{status:400});return Response.json(await J(Y,z))}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:500})}}function uK(){return Response.json({review:k1(Qq.review)??null,pr:k1(Qq.pr)??null})}async function NC(f){try{let Y=await f.json();if(typeof Y.review==="string")l1(Qq.review,Y.review);if(typeof Y.pr==="string")l1(Qq.pr,Y.pr);return uK()}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:400})}}async function bC(f,Y){let z=NK(RK(Y,f==="/"?"/index.html":f));if(!z.startsWith(Y))return new Response("forbidden",{status:403});let Z=Bun.file(VC(z)?z:RK(Y,"index.html"));if(!await Z.exists())return new Response("kobe web assets not built \u2014 run `bun --filter kobe-web build`",{status:503});return new Response(Z)}function kC(f){let{link:Y,sseSends:J,staticDir:z}=f,Z=f.tearDownSession??((G)=>void OK(G));return async function(Q){let q=new URL(Q.url);if(q.pathname===kK)return new Response(bK);if(!B5(Q.headers.get("origin"),{allowedHost:f.allowedHost}))return new Response("forbidden: cross-origin request rejected",{status:403});if(q.pathname==="/events")return KC((O)=>{let M=f.onSseOpen?.()??(()=>{});return O("snapshot",Y.snapshot()),J.add(O),()=>{J.delete(O),M()}});if(q.pathname==="/api/rpc"&&Q.method==="POST")return UC(Q,Y,Z);if(q.pathname==="/api/session"&&Q.method==="POST")return CC(Q,Y);if(q.pathname==="/api/engine-spec"&&Q.method==="GET")return gK(q,Y,MK);if(q.pathname==="/api/terminal-spec"&&Q.method==="GET")return gK(q,Y,FK);if(q.pathname==="/api/engines"&&Q.method==="GET")return DC();if(q.pathname==="/api/cli-invocation"&&Q.method==="GET")return LC();if(q.pathname==="/api/projects"&&Q.method==="GET")return MC();if(q.pathname==="/api/settings"&&Q.method==="GET")return TK();if(q.pathname==="/api/settings"&&Q.method==="PATCH")return gC(Q);if(q.pathname==="/api/quick-prompts"&&Q.method==="GET")return uK();if(q.pathname==="/api/quick-prompts"&&Q.method==="PUT")return NC(Q);let H=await t7(Q,q);if(H)return H;let B=await d7(Q,q);if(B)return B;let V=await $7(Q,q);if(V)return V;let j=await Q5(Q,q,Y);if(j)return j;let K=await z5(Q,q);if(K)return K;let L=f5(Q,q);if(L)return L;if(z)return bC(q.pathname,z);return new Response("not found",{status:404})}}function yz(f,Y){let J=f.snapshot().find((z)=>z.channel===Y);return J?J.payload:null}function E8(f){return f.length>1?f.replace(/\/+$/,""):f}function yC(f,Y){let J=E8(Y),z=new Set([Y]);for(let Z of f){let G=E8(Z.repo),Q=E8(Z.worktreePath);if(G===J||Q===J){if(Z.repo)z.add(Z.repo);if(Z.worktreePath)z.add(Z.worktreePath)}}return[...z]}function EK(f){let Y=MG();return{async request(J,z){return await LG(Y,J,z,f.ctx(0))},snapshot(){let J=f.orch.listTasks().map(fY),z={},Z=yz(f.bus,"issue.snapshot");if(Z)for(let q of yC(J,Z.repoRoot))z[q]={...Z,repoRoot:q};let G=yz(f.bus,"task.jobs"),Q=G?.phase==="running"?{[G.taskId]:G}:{};return{tasks:J,activeTaskId:yz(f.bus,"active-task")?.taskId??null,engineStates:f.activity.snapshotByTask(),update:yz(f.bus,"update")?.info??null,jobs:Q,worktreeChanges:yz(f.bus,"worktree.changes")?.changes??{},issueSnapshots:z,deliver:yz(f.bus,"session.deliver"),uiPrefs:yz(f.bus,"ui-prefs"),connected:!0}}}}async function CK(f){try{let Y=Bun.spawn(["lsof","-nP",`-iTCP:${f}`,"-sTCP:LISTEN","-t"],{stdout:"pipe",stderr:"ignore"});return(await new Response(Y.stdout).text()).split(`
78
- `).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)&&z!==process.pid)}catch{return[]}}async function SC(f,Y=kK){let J;try{J=(await(await fetch(`http://localhost:${f}${Y}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(J!==bK)throw Error(`port ${f} is in use by a non-kobe service; refusing to replace it`);let z=await CK(f);for(let G of z)try{process.kill(G,"SIGTERM")}catch{}let Z=Date.now()+2000;while(Date.now()<Z){if((await CK(f)).length===0)return;await new Promise((G)=>setTimeout(G,100))}}async function xK(f){if(f.takeover!==!1)await SC(f.port);let Y=new Set,J=f.onEvent((q)=>{for(let H of Y)H("channel",q)}),z=f.hostname?.trim()||process.env.KOBE_WEB_HOST?.trim()||"127.0.0.1",Z=j5(z),G=kC({link:f.link,sseSends:Y,staticDir:f.staticDir?NK(f.staticDir):void 0,allowedHost:Z,onSseOpen:f.onSseOpen}),Q=Bun.serve({port:f.port,hostname:z,idleTimeout:0,fetch:G});return{port:Q.port??f.port,hostname:z,close(){J(),Q.stop(!0)}}}var bK="kobe-web",kK="/__kobe_web",yK,SK,Qq;var wK=N(()=>{Jz();Ef();OJ();DG();DQ();A1();tJ();OQ();$1();i7();p7();e7();Y5();jQ();eJ();Z5();W5();K5();AK();yK=["primary","success","info"],SK=/^[a-z][a-z0-9_-]{0,47}$/;Qq={review:"boardPrompt.review",pr:"boardPrompt.pr"}});function hK(f){return f>="0"&&f<="7"}function vK(f,Y){let J=[],z="",Z=()=>{if(z.length>0){for(let Q of IC.encode(z))J.push(Q);z=""}},G=Y+1;while(G<f.length){let Q=f[G];if(Q==='"'){G++;break}if(Q==="\\"){let q=f[G+1];if(q===void 0){z+="\\",G++;continue}switch(q){case"a":Z(),J.push(7),G+=2;break;case"b":Z(),J.push(8),G+=2;break;case"t":Z(),J.push(9),G+=2;break;case"n":Z(),J.push(10),G+=2;break;case"v":Z(),J.push(11),G+=2;break;case"f":Z(),J.push(12),G+=2;break;case"r":Z(),J.push(13),G+=2;break;case'"':z+='"',G+=2;break;case"\\":z+="\\",G+=2;break;default:if(hK(q)){let H="",B=G+1;while(B<f.length&&H.length<3&&hK(f[B]))H+=f[B],B++;Z(),J.push(Number.parseInt(H,8)&255),G=B}else z+=q,G+=2;break}}else z+=Q,G++}return Z(),{value:TC.decode(new Uint8Array(J)),end:G}}function qq(f){if(f.length===0||f[0]!=='"')return f;return vK(f,0).value}function mK(f,Y){if(f[0]==='"'){let z=vK(f,0);if(f.startsWith(Y,z.end))return{orig:z.value,neu:qq(f.slice(z.end+Y.length))};return null}let J=f.indexOf(Y);if(J<0)return null;return{orig:f.slice(0,J),neu:qq(f.slice(J+Y.length))}}function uC(f){let Y=f.indexOf("{");if(Y>=0){let z=f.indexOf("}",Y),Z=f.indexOf(" => ",Y);if(z>Y&&Z>=0&&Z<z){let G=f.slice(0,Y),Q=f.slice(Y+1,Z),q=f.slice(Z+4,z),H=f.slice(z+1);return{path:G+q+H,origPath:G+Q+H}}}let J=mK(f," => ");if(J)return{path:J.neu,origPath:J.orig};return{path:qq(f)}}function Hq(f){let Y=[];for(let J of f.split(`
79
- `)){let z=J.replace(/\r$/,"");if(z.length<4)continue;if(z.startsWith("##"))continue;let Z=z[0],G=z[1];if(z[2]!==" ")continue;let Q=z.slice(3);if(Z==="R"||Z==="C"||G==="R"||G==="C"){let q=mK(Q," -> ");if(q){Y.push({x:Z,y:G,path:q.neu,origPath:q.orig});continue}}Y.push({x:Z,y:G,path:qq(Q)})}return Y}function PK(f){if(f==="-")return null;let Y=Number.parseInt(f,10);return Number.isNaN(Y)?null:Y}function cK(f){let Y=[];for(let J of f.split(`
80
- `)){let z=J.replace(/\r$/,"");if(z.length===0)continue;let Z=z.indexOf("\t");if(Z<0)continue;let G=z.indexOf("\t",Z+1);if(G<0)continue;let Q=z.slice(G+1);if(Q.length===0)continue;let q=uC(Q);if(q.path.length===0)continue;Y.push({path:q.path,...q.origPath!==void 0?{origPath:q.origPath}:{},added:PK(z.slice(0,Z)),deleted:PK(z.slice(Z+1,G))})}return Y}var IC,TC;var x8=N(()=>{IC=new TextEncoder,TC=new TextDecoder});var nK={};H1(nK,{sameWorktreeChanges:()=>TY,readWorktreeChanges:()=>xC,pickPushedChanges:()=>jq,parsePorcelain:()=>MZ});import{spawnSync as EC}from"child_process";function TY(f,Y){return f.added===Y.added&&f.deleted===Y.deleted}function jq(f,Y){if(!f)return null;return f.get(Y)??Bq}function xC(f){if(!f)return Bq;try{let Y=EC("git",["status","--porcelain=v1"],{cwd:f,encoding:"utf8",stdio:["ignore","pipe","pipe"],env:xf()});if(Y.status!==0||!Y.stdout)return Bq;return MZ(Y.stdout)}catch{return Bq}}function MZ(f){let Y=0,J=0;for(let{x:z,y:Z}of Hq(f))if(z==="D"||Z==="D")J+=1;else Y+=1;return{added:Y,deleted:J}}var Bq;var FZ=N(()=>{yJ();x8();Bq={added:0,deleted:0}});async function vC(f,Y){let J=await sY("git",["status","--porcelain=v1"],{cwd:f,env:xf(),signal:Y});if(J.status!==0)throw Error("git status failed");return MZ(J.stdout)}function mC(f){let Y=new Set;for(let J of f){if(J.archived)continue;if(!J.worktreePath)continue;if(zf(J.repo)||zf(J.worktreePath))continue;Y.add(J.worktreePath)}return Y}class dK{orch;bus;options;entries=new Map;stopped=!1;constructor(f,Y,J={}){this.orch=f;this.bus=Y;this.options=J}tick(){if(this.stopped)return;if(this.options.hasSubscribers&&!this.options.hasSubscribers())return;try{let f=mC(this.orch.listTasks()),Y=!1;for(let J of this.entries.keys()){if(f.has(J))continue;if(this.entries.get(J)?.value)Y=!0;this.entries.delete(J)}if(Y)this.publish();for(let J of f)this.maybeCollect(J)}catch(f){E1("worktree-changes",f)}}stop(){this.stopped=!0}maybeCollect(f){let Y=this.entries.get(f);if(!Y)Y={inFlight:!1,nextAllowedAt:0},this.entries.set(f,Y);let J=this.options.cadence??{timeoutMs:wC,slowRetryMs:hC,minIntervalMs:PC},z=this.options.run??vC;JQ(Y,J,(Z)=>z(f,Z),(Z)=>{if(this.stopped)return;if(this.entries.get(f)!==Y)return;if(Y.value&&TY(Y.value,Z))return;Y.value=Z,this.publish()})}publish(){let f={};for(let[Y,J]of this.entries)if(J.value)f[Y]=J.value;this.bus.publish("worktree.changes",{changes:f})}}function iK(f,Y,J=w8,z){if(J<=0)return()=>{};let Z=new dK(f,Y,{hasSubscribers:z});Z.tick();let G=setInterval(()=>Z.tick(),J);return G.unref?.(),()=>{clearInterval(G),Z.stop()}}var w8=2000,wC=4000,hC=60000,PC=1500;var lK=N(()=>{yJ();QG();A1();FZ()});import{mkdir as aK,readFile as cC,unlink as h8,writeFile as nC}from"fs/promises";import{createServer as dC}from"net";import{dirname as $K}from"path";import{StringDecoder as iC}from"string_decoder";function aC(){let f=process.env.KOBE_DAEMON_IDLE_GRACE_MS;if(f===void 0)return pK;let Y=Number(f);return Number.isFinite(Y)&&Y>=0?Y:pK}async function rK(f,Y={}){let J=Y.socketPath??AY(Y.homeDir),z=Y.pidPath??lY(Y.homeDir),Z=Y.startedAt??new Date,G=new Set,Q=new Set,q=1,H=new sB({clients:function*(){yield*G,yield*Q},idleGraceMs:aC(),onIdleStop:()=>void J0().catch(($)=>E1("daemon-idle-shutdown",$))}),B=new wB;B.onPublish(($)=>{_K(G,{type:"event",name:$.channel,payload:$.payload})});let V=new IH(B),j=new KQ(VQ(Y.homeDir));await aK($K(J),{recursive:!0}),await aK($K(z),{recursive:!0}),await h8(J).catch(()=>{});let K=dC(($)=>{let x={id:q++,connectedAt:new Date,socket:$,writer:new xB($),buffer:"",subscribed:!1,holdsLifetime:!1,channels:null};G.add(x);let e=new iC("utf8");$.on("data",(I)=>{x.buffer+=e.write(I),R0(x)}),$.on("error",()=>{}),$.on("close",()=>{if(G.delete(x),x.subscribed)SY("conn",`client #${x.id} (${x.holdsLifetime?"gui":"pane"}) disconnected \u2014 ${G.size} client(s), ${H.guiCount()} gui left`);H.clientDisconnected(x.holdsLifetime)})}),L=f.subscribeTasks(($)=>{B.publish("task.snapshot",{tasks:$.map(fY)})}),O=Y.checkUpdate??dZ,M=Y.updatePollMs??lC,R=()=>{O().then(($)=>B.publish("update",{info:$})).catch(($)=>E1("update-poller",$))},S=null;if(M>0)R(),S=setInterval(R,M),S.unref?.();let a=Y.autoTitlePollMs??EB,b=F7(f,a,()=>H.hasSubscribers()),g=P7(B,{statePath:eB(Y.homeDir),debounceMs:Y.uiPrefsDebounceMs??tB}),C=T7(B,{path:oB(Y.homeDir),debounceMs:Y.keybindingsDebounceMs??rB}),y=iK(f,B,Y.worktreeChangesTickMs??w8,()=>H.hasSubscribers()),r=x7(f,Y.prStatusPollMs??FG,()=>H.hasSubscribers()),z0=null,t={socketPath:J,pidPath:z,startedAt:Z,get webPort(){return z0?.port},clients:G,async close(){if(H.markStopping(),L(),z0?.close(),z0=null,S)clearInterval(S);b(),r(),g(),C(),y(),V.close(),_K(G,{type:"event",name:"daemon.stopping",payload:{}});for(let $ of Array.from(G))$.socket.destroy();await new Promise(($)=>K.close(()=>$())),await h8(J).catch(()=>{}),await h8(z).catch(()=>{})}};await new Promise(($,x)=>{let e=K;e.once("error",x),K.listen(J,()=>{e.removeListener("error",x),$()})}),await nC(z,`${process.pid}
81
- `,"utf8");async function J0(){if(H.isStopping())return;H.markStopping(),await Y.onStop?.(),setTimeout(()=>{t.close().catch(($)=>E1("daemon-shutdown",$))},0).unref()}let T=MG();function B0($){return{orch:f,bus:B,activity:V,issues:j,daemon:{startedAt:Z,socketPath:J,webPort:z0?.port,pid:process.pid,guiCount:()=>H.guiCount(),stopSoon:J0},clientId:$}}if(Y.webPort!==void 0){let $=EK({orch:f,bus:B,activity:V,ctx:B0});z0=await xK({port:Y.webPort,hostname:Y.webHost,staticDir:Y.webStaticDir,link:$,onEvent:(x)=>B.onPublish(x),onSseOpen:()=>{let x={subscribed:!0,holdsLifetime:!0};return Q.add(x),H.guiAttached(),SY("conn",`web client subscribed \u2014 ${G.size+Q.size} client(s), ${H.guiCount()} gui`),()=>{Q.delete(x),SY("conn",`web client disconnected \u2014 ${G.size+Q.size} client(s), ${H.guiCount()} gui left`),H.clientDisconnected(!0)}}}),SY("web",`daemon web transport listening on http://${z0.hostname}:${z0.port}`)}async function _($,x){if($.name==="subscribe"){let e=cB($.payload),I=x.subscribed;x.subscribed=!0;let Z0=e.role==="gui"?"gui":"pane";x.holdsLifetime=Z0==="gui",x.channels=QW(e.channels);let u=!I;if(x.holdsLifetime)H.guiAttached();SY("conn",`client #${x.id} subscribed as ${Z0}${x.channels?` [${[...x.channels].join(",")}]`:""} \u2014 ${G.size} client(s), ${H.guiCount()} gui${u?" (collectors resume)":""}`);for(let P of B.snapshot()){if(x.channels&&!x.channels.has(P.channel))continue;IG(x,{type:"event",name:P.channel,payload:P.payload})}if(!x.channels||x.channels.has("engine-state"))for(let P of V.currentNonIdle())IG(x,{type:"event",name:"engine-state",payload:P});return{}}return LG(T,$.name,$.payload,B0(x.id))}async function D0($,x){try{let e=await _($,x);IG(x,{type:"response",id:$.id,name:$.name,payload:e})}catch(e){IG(x,{type:"response",id:$.id,name:$.name,error:mB(e)})}}function R0($){let x=$.buffer.indexOf(`
82
- `);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){IG($,{type:"response",id:"parse-error",error:{message:I instanceof Error?I.message:String(I)}})}x=$.buffer.indexOf(`
83
- `)}}return t}async function OZ(f){try{let Y=await cC(f,"utf8"),J=Number(Y.trim());return Number.isFinite(J)?J:null}catch{return null}}function oK(f){if(f.type==="event")return f.name==="daemon.stopping";return!0}function IG(f,Y){f.writer.write(lZ(Y),oK(Y))}function _K(f,Y){let J=Y.type==="event"&&Y.name!=="daemon.stopping"?Y.name:null,z=oK(Y),Z=null;for(let G of f){if(!G.subscribed&&Y.type==="event")continue;if(J&&G.channels&&!G.channels.has(J))continue;Z??=lZ(Y),G.writer.write(Z,z)}}var lC=21600000,pK=3000;var Wq=N(()=>{Df();MW();O7();jQ();pB();u7();E7();mz();w7();eJ();v7();wK();lK();jQ();pB()});import{unlink as sK}from"fs/promises";function $C(f){try{return process.kill(f,0),!0}catch(Y){return Y.code==="EPERM"}}async function AZ(f,Y){let J=await OZ(Y),z=J!==null&&J!==process.pid?J:null,Z=z!==null&&$C(z),G=Z?"graceful":"absent",Q=new nf(f),q=Q.request("daemon.stop").catch(()=>{return}),H=new Promise((B)=>setTimeout(B,2000));if(await Promise.race([q,H]),Q.close(),Z&&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{}G="sigterm",V=!0}await new Promise((j)=>setTimeout(j,50))}try{process.kill(z,0),process.kill(z,"SIGKILL"),G="sigkill",await new Promise((j)=>setTimeout(j,100))}catch{}}return await sK(f).catch(()=>{}),await sK(Y).catch(()=>{}),{pid:J,method:G}}var Vq=N(()=>{aZ();Wq()});var Zq={};H1(Zq,{testDaemonResponds:()=>Kq,ensureDaemonReachable:()=>RZ,connectOrStartDaemon:()=>KY,connectIfRunning:()=>rf});import{spawn as pC}from"child_process";import{closeSync as _C,existsSync as rC,mkdirSync as oC,openSync as sC}from"fs";import{dirname as tK,resolve as P8}from"path";import{fileURLToPath as tC}from"url";function YN(f,Y,J,z){let Z="ignore",G;try{oC(tK(z),{recursive:!0}),G=sC(z,"a"),Z=["ignore",G,G]}catch{Z="ignore"}if(pC(f,[...Y],{detached:!0,stdio:Z,env:J}).unref(),G!==void 0)try{_C(G)}catch{}}async function RZ(){let f=AY();if(await Kq(f))return f;await AZ(f,lY()).catch(()=>{});let[Y,...J]=JN(eC);YN(Y,J,process.env,OX());let z=Date.now()+5000;while(Date.now()<z){if(await Kq(f))return f;await new Promise((Z)=>setTimeout(Z,100))}throw Error(`kobe: daemon did not start (or stayed wedged) at ${f}`)}async function KY(){let f=await RZ(),Y=new nf(f);return await Y.connect(),Y}async function rf(){let f=AY();if(!await Kq(f))return null;let Y=new nf(f);return await Y.connect(),Y}async function Kq(f,Y=fN){let J=new nf(f);try{await J.connect()}catch{return J.close(),!1}let z=J.request("hello",{protocolVersion:cf}).then(()=>!0).catch(()=>!0),Z,G=new Promise((q)=>{Z=setTimeout(()=>q(!1),Y)}),Q=await Promise.race([z,G]);if(Z)clearTimeout(Z);return J.close(),Q}function JN(f){let Y=tC(import.meta.url);if(Y.startsWith("/$bunfs")||Y.startsWith("B:\\~BUN"))return[process.execPath,...f];let J=tK(Y),z=[P8(J,"../cli/index.ts"),P8(J,"../../../kobe/src/cli/index.ts"),P8(J,"../cli/index.js")],Z=z.find((G)=>rC(G));if(Z)return[process.execPath,Z,...f];throw Error(`kobe: could not locate kobe entry near ${J}; checked ${z.join(", ")}`)}var eC,fN=3000;var Lf=N(()=>{Vq();mz();eJ();aZ();eC=["daemon","start"]});import{mkdir as zN,readFile as eK,unlink as YU,writeFile as fU}from"fs/promises";import{dirname as ZN}from"path";function GN(f){if(!Number.isInteger(f)||f<=0)return!1;try{return process.kill(f,0),!0}catch(Y){if(Y.code==="ESRCH")return!1;return!0}}async function v8(f,Y={}){await zN(ZN(f),{recursive:!0});try{await fU(f,String(process.pid),{flag:"wx"});return}catch(Z){if(Z.code!=="EEXIST")throw Z}let J=-1;try{let Z=(await eK(f,"utf8")).trim();if(J=Number.parseInt(Z,10),!Number.isFinite(J))J=-1}catch{return v8(f,Y)}let z=J>0&&GN(J);if(z&&!Y.forceTakeover)throw new TG(`task index is locked by another kobe instance (pid ${J})`,J);console.warn(`[kobe] removing stale lockfile at ${f} (was held by pid ${J}${z?", forced":", process gone"})`);try{await YU(f)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{await fU(f,String(process.pid),{flag:"wx"})}catch(Z){if(Z.code==="EEXIST"){let G=-1;try{G=Number.parseInt((await eK(f,"utf8")).trim(),10)}catch{G=-1}throw new TG(`task index lockfile contended during takeover (winner pid ${G})`,G)}throw Z}}async function JU(f){try{await YU(f)}catch(Y){if(Y.code==="ENOENT")return;throw Y}}var TG;var zU=N(()=>{TG=class TG extends Error{heldByPid;constructor(f,Y){super(f);this.name="LockfileError",this.heldByPid=Y}}});function XN(f,Y){let J="",z=f;for(let Z=Y-1;Z>=0;Z--){let G=z%32;J="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[G]+J,z=(z-G)/32}return J}function XU(f){let Y=new Uint8Array(f);crypto.getRandomValues(Y);let J=Array(f);for(let z=0;z<f;z++)J[z]=(Y[z]??0)&31;return J}function QN(f){for(let Y=f.length-1;Y>=0;Y--){let J=f[Y]??0;if(J<31)return f[Y]=J+1,!0;f[Y]=0}return!1}function qN(f){let Y="";for(let J of f)Y+="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[J]??"0";return Y}function QU(f=Date.now()){let Y;if(f===ZU){let J=GU.slice();if(!QN(J))Y=XU(16);else Y=J}else Y=XU(16);return ZU=f,GU=Y,XN(f,10)+qN(Y)}var ZU=-1,GU;var qU=N(()=>{GU=Array(16).fill(0)});var m8={};H1(m8,{TaskIndexStore:()=>gZ});import{mkdir as HN,open as BN,readFile as HU,rename as jN,unlink as BU}from"fs/promises";import{homedir as WN}from"os";import{dirname as VN,join as jU}from"path";async function LN(f){let Y=Date.now()+DN;for(;;)try{await v8(f);return}catch(J){if(!(J instanceof TG)||Date.now()>=Y)throw J;await KN(UN)}}class gZ{homeDir;kobeDir;path;tmpPath;lockPath;cache={version:zJ,tasks:[]};loaded=!1;listeners=new Set;saveChain=Promise.resolve();dirtyIds=new Set;removedIds=new Set;constructor(f={}){this.homeDir=f.homeDir??WN(),this.kobeDir=jU(this.homeDir,".kobe"),this.path=jU(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(Y){console.error("[kobe TaskIndexStore] listener threw on subscribe:",Y)}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 HU(this.path,"utf8")}catch(J){if(J.code==="ENOENT")return this.cache={version:zJ,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot();throw J}let Y;try{Y=JSON.parse(f)}catch(J){return console.warn(`[kobe] tasks.json at ${this.path} is corrupted (${J.message}); recovering with empty index. The stale file is left in place.`),this.cache={version:zJ,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot()}return this.cache=WU(Y,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 HN(VN(this.path),{recursive:!0});let f=new Set(this.dirtyIds),Y=new Set(this.removedIds);await LN(this.lockPath);try{let J=await this.readDiskTasks(),z=this.mergeWithDisk(J,f,Y),G=`${JSON.stringify({version:zJ,tasks:z},null,2)}
84
- `,Q=await BN(this.tmpPath,"w",420);try{await Q.writeFile(G,"utf8"),await Q.sync()}finally{await Q.close()}await jN(this.tmpPath,this.path);for(let H of f)this.dirtyIds.delete(H);for(let H of Y)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 JU(this.lockPath)}}async readDiskTasks(){let f;try{f=await HU(this.path,"utf8")}catch(J){if(J.code==="ENOENT")return[];throw J}let Y;try{Y=JSON.parse(f)}catch{return[]}return WU(Y,this.path).tasks}mergeWithDisk(f,Y,J){let z=new Map(f.map((Q)=>[Q.id,Q])),Z=[],G=new Set;for(let Q of this.cache.tasks){if(Y.has(Q.id))Z.push(Q);else{let q=z.get(Q.id);if(q===void 0)continue;Z.push(q)}G.add(Q.id)}for(let Q of f){if(G.has(Q.id)||J.has(Q.id))continue;Z.push(Q),G.add(Q.id)}return Z}get(f){return this.assertLoaded(),this.cache.tasks.find((Y)=>Y.id===f)}list(){return this.assertLoaded(),this.cache.tasks.slice()}async create(f){this.assertLoaded();let Y=new Date().toISOString(),J={archived:!1,vendor:f.vendor??Zf,...f,id:YG(QU()),createdAt:Y,updatedAt:Y};return this.cache.tasks.push(J),this.dirtyIds.add(J.id),await this.save(),this.notifyListeners(),J}async update(f,Y){this.assertLoaded();let J=this.cache.tasks.findIndex((H)=>H.id===f);if(J<0)throw Error(`task not found: ${f}`);let z=this.cache.tasks[J];if(!z)throw Error(`task not found: ${f}`);let{id:Z,createdAt:G,...Q}=Y,q={...z,...Q,id:z.id,createdAt:z.createdAt,updatedAt:new Date().toISOString()};return this.cache.tasks[J]=q,this.dirtyIds.add(String(f)),await this.save(),this.notifyListeners(),q}async move(f,Y,J){this.assertLoaded();let z=this.cache.tasks.find((L)=>L.id===f);if(!z)throw Error(`task not found: ${f}`);let Z=J?.length?J:this.cache.tasks.map((L)=>L.id),G=Z.indexOf(String(f));if(G<0)throw Error(`task not movable in current group: ${f}`);let Q=Z[G+Y];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=Y>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 Y=f.map((G)=>{let Q=this.cache.tasks.findIndex((H)=>H.id===G.id);if(!(Q>=0?this.cache.tasks[Q]:void 0))throw Error(`task not found: ${G.id}`);return{idx:Q,position:G.position}}),J=!1,z=new Map,Z=[];for(let{idx:G,position:Q}of Y){let q=this.cache.tasks[G];if(!q||q.position===Q)continue;if(!z.has(G))z.set(G,q);if(this.cache.tasks[G]={...q,position:Q},!this.dirtyIds.has(q.id))this.dirtyIds.add(q.id),Z.push(q.id);J=!0}if(!J)return;try{await this.save()}catch(G){for(let[Q,q]of z)this.cache.tasks[Q]=q;for(let Q of Z)this.dirtyIds.delete(Q);throw G}this.notifyListeners()}async archive(f,Y="done"){return this.update(f,{status:Y})}async remove(f){this.assertLoaded();let Y=this.cache.tasks.findIndex((J)=>J.id===f);if(Y<0)return;this.cache.tasks.splice(Y,1),this.dirtyIds.delete(String(f)),this.removedIds.add(String(f)),await this.save(),this.notifyListeners()}async _unlinkForTests(){try{await BU(this.path)}catch(f){if(f.code!=="ENOENT")throw f}try{await BU(this.tmpPath)}catch(f){if(f.code!=="ENOENT")throw f}this.cache={version:zJ,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:zJ,tasks:this.cache.tasks.slice()}}notifyListeners(){if(this.listeners.size===0)return;let f=this.cache.tasks.slice();for(let Y of this.listeners)try{Y(f)}catch(J){console.error("[kobe TaskIndexStore] listener threw on notify:",J)}}}function WU(f,Y){if(!f||typeof f!=="object"||Array.isArray(f))return console.warn(`[kobe] tasks.json at ${Y} is not an object; recovering with empty index.`),{version:zJ,tasks:[]};let J=f,z=J.version;if(z!==void 0&&z!==1&&z!==2&&z!==3)return console.warn(`[kobe] tasks.json at ${Y} has unsupported version=${String(z)}; recovering with empty index.`),{version:zJ,tasks:[]};let Z=Array.isArray(J.tasks)?J.tasks:[],G=[];for(let Q of Z){let q=MN(Q);if(q)G.push(q);else console.warn(`[kobe] dropping malformed task entry from ${Y}: ${JSON.stringify(Q)}`)}return{version:zJ,tasks:G}}function MN(f){if(!f||typeof f!=="object")return null;let Y=f;if(typeof Y.id!=="string"||typeof Y.title!=="string"||typeof Y.repo!=="string"||typeof Y.branch!=="string"||typeof Y.worktreePath!=="string"||typeof Y.status!=="string"||typeof Y.createdAt!=="string"||typeof Y.updatedAt!=="string")return null;if(!gN(Y.status))return null;let J=typeof Y.archived==="boolean"?Y.archived:!1,z=Y.kind==="main"?"main":"task",Z=z==="main"?Y.status==="in_progress"||Y.status==="done"?"backlog":Y.status:Y.status==="done"&&!J?"in_progress":Y.status;return{id:YG(Y.id),title:Y.title,repo:Y.repo,branch:Y.branch,worktreePath:Y.worktreePath,status:Z,archived:J,pinned:typeof Y.pinned==="boolean"?Y.pinned:!1,kind:z,vendor:pJ(typeof Y.vendor==="string"?Y.vendor:void 0),prStatus:FN(Y.prStatus),...typeof Y.position==="number"&&Number.isFinite(Y.position)?{position:Y.position}:{},...typeof Y.modelEffort==="string"&&Y.modelEffort.length>0?{modelEffort:Y.modelEffort}:{},createdAt:Y.createdAt,updatedAt:Y.updatedAt}}function FN(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let Y=f;if(!ON(Y.provider)||!AN(Y.lifecycle)||!RN(Y.checkState))return;return{provider:Y.provider,lifecycle:Y.lifecycle,checkState:Y.checkState,...typeof Y.number==="number"&&Number.isFinite(Y.number)?{number:Y.number}:{},...typeof Y.url==="string"?{url:Y.url}:{},...typeof Y.title==="string"?{title:Y.title}:{},...typeof Y.baseRef==="string"?{baseRef:Y.baseRef}:{},...typeof Y.headRef==="string"?{headRef:Y.headRef}:{},...typeof Y.reviewDecision==="string"?{reviewDecision:Y.reviewDecision}:{},...typeof Y.mergeable==="string"?{mergeable:Y.mergeable}:{},...typeof Y.lastCheckedAt==="string"?{lastCheckedAt:Y.lastCheckedAt}:{},...typeof Y.lastError==="string"?{lastError:Y.lastError}:{}}}function ON(f){return f==="github"||f==="gitlab"||f==="bitbucket"||f==="unknown"}function AN(f){return f==="creating"||f==="open"||f==="ready_to_merge"||f==="merged"||f==="closed"||f==="unknown"}function RN(f){return f==="none"||f==="pending"||f==="passing"||f==="failing"||f==="unknown"}function gN(f){return f==="backlog"||f==="in_progress"||f==="in_review"||f==="done"||f==="canceled"||f==="error"}var KN=(f)=>new Promise((Y)=>setTimeout(Y,f)),UN=25,DN=5000,zJ=3;var uG=N(()=>{RY();$1();zU();qU()});var Uq;var VU=N(()=>{Uq=class Uq extends Error{args;cwd;exitCode;stdout;stderr;constructor(f,Y,J){super(`git ${f.join(" ")} (cwd=${Y}) exited with code ${J.exitCode}: ${J.stderr.trim()||J.stdout.trim()}`);this.name="GitCommandError",this.args=f,this.cwd=Y,this.exitCode=J.exitCode,this.stdout=J.stdout,this.stderr=J.stderr}}});var DU={};H1(DU,{GitWorktreeManager:()=>Dq});import UU from"fs";import UY from"path";class Dq{execDeps;constructor(f=CN){this.execDeps=f}ctxFor(f){let Y=this.execDeps.remoteBasePath(f);return Y?{exec:this.execDeps.execForRepo(f),dir:Y,remote:!0}:{exec:this.execDeps.execForRepo(f),dir:f,remote:!1}}async runGit(f,Y,J){if(!J.cwd)throw Error("runGit(): cwd is required; refusing to inherit from process.cwd()");let z=await f.run(["git",...Y],{cwd:J.cwd,env:J.env}),Z={stdout:z.stdout,stderr:z.stderr,exitCode:z.exitCode};if(Z.exitCode!==0&&!J.allowFail)throw new Uq(Y,J.cwd,Z);return Z}async create(f,Y,J,z){let Z=this.ctxFor(f);if(wJ("repo",Z.dir),wJ("path",J),!Y)throw Error("create(): branch must be a non-empty string");if(await Z.exec.exists(J)){let H=await this.tryDescribe(Z,J);if(H){if(H.branch!==Y)throw Error(`worktree at ${J} is on branch '${H.branch}', refusing to hijack to '${Y}'`);return H}throw Error(`create(): ${J} exists but is not a registered git worktree`)}await Z.exec.mkdirp(UY.dirname(J));let Q=await this.branchExists(Z,Y)?["worktree","add",J,Y]:z?["worktree","add","-b",Y,J,z]:["worktree","add","-b",Y,J];await this.runGit(Z.exec,Q,{cwd:Z.dir});let q=await this.tryDescribe(Z,J);if(!q)throw Error(`create(): git reported success but ${J} is not a worktree`);if(q.branch!==Y)throw Error(`create(): post-condition failed \u2014 expected branch '${Y}' at ${J}, got '${q.branch}'`);return q}async createForTask(f){let Y=this.execDeps.remoteBasePath(f.repo),J=Y?G7(Y,f.slug):Y7(f.repo,f.slug);return this.create(f.repo,f.branch,J,f.baseRef)}async remove(f,Y){wJ("path",f);let J=this.execDeps.execForPath(f),z=Y?.force===!0;if(!await J.exists(f)){let Q=await this.findRepoFor(J,f);if(Q)await this.runGit(J,["worktree","prune"],{cwd:Q,allowFail:!0});return}let Z=await this.findRepoFor(J,f);if(!Z)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 G=z?["worktree","remove","--force",f]:["worktree","remove",f];await this.runGit(J,G,{cwd:Z}),await this.runGit(J,["worktree","prune"],{cwd:Z,allowFail:!0})}async list(f){let Y=this.ctxFor(f);wJ("repo",Y.dir);let J=await this.runGit(Y.exec,["worktree","list","--porcelain"],{cwd:Y.dir}),z=c8(J.stdout),Z=[];for(let G of z){if(!G.path)continue;let Q=Y.remote?KU(Y.dir,G.path):RB(f,G.path);if(!Q)continue;if(!G.branch||G.detached)continue;let q=EG(Q),H=EG(G.path),B=UY.relative(q,H),V=UY.join(Q,B),j=await this.isDirty(G.path);Z.push({path:V,branch:G.branch,head:G.head??"",dirty:j})}return Z}async listAll(f){let Y=this.ctxFor(f);wJ("repo",Y.dir);let J=await this.runGit(Y.exec,["worktree","list","--porcelain"],{cwd:Y.dir}),z=c8(J.stdout),Z=Y.remote?Y.dir:EG(Y.dir),G=[];for(let Q of z){if(!Q.path)continue;if(Q.bare)continue;if(!Q.branch||Q.detached)continue;if((Y.remote?Q.path:EG(Q.path))===Z)continue;let q=await this.isDirty(Q.path);G.push({path:Q.path,branch:Q.branch,head:Q.head??"",dirty:q,kobeManaged:Y.remote?KU(Y.dir,Q.path)!==null:z7(f,Q.path),lastActivityMs:await this.lastActivityMs(Y.exec,Q.path)})}return G.sort((Q,q)=>q.lastActivityMs-Q.lastActivityMs),G}async lastActivityMs(f,Y){try{let J=await this.runGit(f,["log","-1","--format=%ct"],{cwd:Y}),z=Number.parseInt(J.stdout.trim(),10);if(Number.isFinite(z)&&z>0)return z*1000}catch{}if(!f.isRemote)try{return UU.statSync(Y).mtimeMs}catch{}return 0}async isDirty(f){wJ("path",f);let Y=this.execDeps.execForPath(f);return(await this.runGit(Y,["status","--porcelain"],{cwd:f})).stdout.length>0}async currentBranch(f){wJ("path",f);let Y=this.execDeps.execForPath(f),z=(await this.runGit(Y,["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,Y,J){if(wJ("path",f),Y===J)return;let z=this.execDeps.execForPath(f),Z=await this.findRepoFor(z,f);if(!Z)throw Error(`renameBranch(): ${f} is not a git worktree`);await this.runGit(z,["branch","-m",Y,J],{cwd:Z})}async tryDescribe(f,Y){let J=await this.runGit(f.exec,["worktree","list","--porcelain"],{cwd:f.dir}),z=c8(J.stdout),Z=(q)=>f.remote?q:EG(q),G=Z(Y),Q=z.find((q)=>q.path&&Z(q.path)===G);if(!Q||!Q.path||!Q.branch||Q.detached)return null;return{path:Y,branch:Q.branch,head:Q.head??"",dirty:await this.isDirty(Q.path)}}async branchExists(f,Y){let J=`refs/heads/${Y}`;return(await this.runGit(f.exec,["show-ref","--verify","--quiet",J],{cwd:f.dir,allowFail:!0})).exitCode===0}async findRepoFor(f,Y){try{let J=await this.runGit(f,["rev-parse","--git-common-dir"],{cwd:Y,allowFail:!0});if(J.exitCode!==0)return null;let z=J.stdout.trim();if(!z)return null;let Z=UY.isAbsolute(z)?z:UY.resolve(Y,z);return UY.basename(Z)===".git"?UY.dirname(Z):Z}catch(J){if(J instanceof Uq)return null;throw J}}}function c8(f){let Y=[],J=null;for(let z of f.split(`
85
- `)){let Z=z.replace(/\r$/,"");if(Z===""){if(J)Y.push(J);J=null;continue}if(!J)J={};if(Z.startsWith("worktree "))J.path=Z.slice(9);else if(Z.startsWith("HEAD "))J.head=Z.slice(5);else if(Z.startsWith("branch ")){let G=Z.slice(7);J.branch=G.startsWith("refs/heads/")?G.slice(11):G}else if(Z==="detached")J.detached=!0;else if(Z==="bare")J.bare=!0}if(J)Y.push(J);return Y}function KU(f,Y){let J=`${f.replace(/\/+$/,"")}/.kobe/worktrees`;return Y===J||Y.startsWith(`${J}/`)?J:null}function wJ(f,Y){if(!Y||!UY.isAbsolute(Y))throw Error(`${f} must be an absolute path, got: ${JSON.stringify(Y)}`)}function EG(f){try{return UU.realpathSync(f)}catch{return UY.resolve(f)}}var CN;var n8=N(()=>{QY();A1();VU();gB();CN={execForRepo:_z,execForPath:tY,remoteBasePath(f){return dY(f)?.basePath??null}}});var Lq;var LU=N(()=>{Lq=["web","completions","add","remove","adopt","export","repo","api","daemon","theme","skill","feedback","update","doctor","reset","reload","kill-sessions"]});var FU={};H1(FU,{runCompletionsSubcommand:()=>yN});function NN(){return`# kobe bash completions
75
+ `))}catch{}}),Y=setInterval(()=>{try{X.enqueue(Z.encode(`: ping
76
+
77
+ `))}catch{}},15000)},cancel(){if(Y)clearInterval(Y);z?.()}});return new Response(G,{headers:{"content-type":"text/event-stream","cache-control":"no-cache, no-transform",connection:"keep-alive"}})}async function Ak(J,z,Y){try{let{name:Z,payload:G}=await J.json();if(!Z)return Response.json({error:"missing rpc name"},{status:400});if(!A6.has(Z))return Response.json({error:`rpc ${Z} is not exposed to the web UI`},{status:403});let X=await z.request(Z,G),Q=G?.taskId;if(typeof Q==="string"){let f=Z==="task.archive"&&G.archived!==!1;if(Z==="task.delete"||f)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 Rk(){try{let z=(await oz()).map((Y)=>({id:Y,label:RZ(Y),effortLevels:e1(Y).effortLevels}));return Response.json({engines:z.length>0?z:[{id:"claude",label:"Claude"}]})}catch(J){return Response.json({error:J instanceof Error?J.message:String(J)},{status:500})}}function gk(){return Response.json({api:gZ()})}function Ck(){return Response.json({projects:gJ()})}function mY(J,z=""){return typeof J==="string"?J:z}function Nk(J,z){return typeof J==="boolean"?J:z}function mK(J){let z=J.customEngineIds;if(!Array.isArray(z))return[];return z.filter((Y)=>typeof Y==="string"&&vK.test(Y)&&!QJ(Y))}function kk(J){return J.split(/[-_]+/).filter(Boolean).map((z)=>`${z.slice(0,1).toUpperCase()}${z.slice(1)}`).join(" ")}function bk(J,z){return mY(J[Dz(z)]).trim()||RZ(z)}function Sk(J,z){return mY(J[Uz(z)]).trim()||TX(z).join(" ")}function cK(){let J=l1(),z=mK(J),Y=[...oY,...z],Z=mY(J.lastSelectedVendor,"claude"),G=mY(J.focusAccent,"primary");return Response.json({activeTheme:mY(J.activeTheme,"claude"),transparentBackground:Nk(J.transparentBackground,!1),focusAccent:hK.includes(G)?G:"primary",notificationsToast:J["notifications.toast.enabled"]!==!1,notificationsSound:J["notifications.sound.enabled"]!==!1,settingsSurface:kZ(J[GY]??NZ),editorKind:jG(J[ZY]??vq),editorCustomCommand:mY(J[uY]),remoteProjects:J["experimental.remoteProjects"]===!0,autoStatus:J[FZ]===!0,dispatcher:J[AZ]===!0,defaultEngine:Z,engines:Y.map((X)=>({id:X,label:bk(J,X),command:Sk(J,X),isBuiltin:QJ(X),isCustom:!QJ(X),isDefault:X===Z}))})}function cX(J,z,Y){if(typeof Y==="string")J[z]=Y.trim()}function kG(J,z,Y){if(typeof Y==="boolean")J[z]=Y}async function Ik(J){try{let z=await J.json(),Y={};if(cX(Y,"activeTheme",z.activeTheme),kG(Y,"transparentBackground",z.transparentBackground),hK.includes(z.focusAccent))Y.focusAccent=z.focusAccent;if(kG(Y,"notifications.toast.enabled",z.notificationsToast),kG(Y,"notifications.sound.enabled",z.notificationsSound),z.settingsSurface==="chattab"||z.settingsSurface==="taskpanel")Y[GY]=z.settingsSurface;if(CZ.includes(z.editorKind))Y[ZY]=z.editorKind;cX(Y,uY,z.editorCustomCommand),kG(Y,"experimental.remoteProjects",z.remoteProjects),kG(Y,FZ,z.autoStatus),kG(Y,AZ,z.dispatcher),cX(Y,"lastSelectedVendor",z.defaultEngine);let Z=l1(),G=mK(Z),X=new Set([...oY,...G]),Q=Array.isArray(z.engineUpdates)?z.engineUpdates:[];for(let f of Q){if(!f||typeof f!=="object")continue;let H=f;if(typeof H.id!=="string"||!X.has(H.id))continue;cX(Y,Uz(H.id),H.command),cX(Y,Dz(H.id),H.label)}if(z.addEngine&&typeof z.addEngine==="object"){let f=z.addEngine,H=typeof f.id==="string"?f.id.trim().toLowerCase():"";if(!vK.test(H)||QJ(H)||X.has(H))return Response.json({error:"invalid or duplicate engine id"},{status:400});Y.customEngineIds=[...G,H],Y[Uz(H)]=mY(f.command).trim();let B=mY(f.label).trim();Y[Dz(H)]=B&&B!==H?B:kk(H)}if(typeof z.removeEngine==="string"){let f=z.removeEngine;if(!QJ(f)){if(Y.customEngineIds=G.filter((H)=>H!==f),Y[Uz(f)]=void 0,Y[Dz(f)]=void 0,Z.lastSelectedVendor===f)Y.lastSelectedVendor="claude"}}if(Object.keys(Y).length>0)zZ(Y);return cK()}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:400})}}async function yk(J,z){try{let{taskId:Y}=await J.json();if(!Y)return Response.json({error:"missing taskId"},{status:400});return Response.json(await kK(z,Y))}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function uK(J,z,Y){try{let Z=J.searchParams.get("taskId");if(!Z)return Response.json({error:"missing taskId"},{status:400});return Response.json(await Y(z,Z))}catch(Z){return Response.json({error:Z instanceof Error?Z.message:String(Z)},{status:500})}}function dK(){return Response.json({review:S1(bf.review)??null,pr:S1(bf.pr)??null})}async function Tk(J){try{let z=await J.json();if(typeof z.review==="string")r1(bf.review,z.review);if(typeof z.pr==="string")r1(bf.pr,z.pr);return dK()}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:400})}}async function uk(J,z){let Z=EK(TK(z,J==="/"?"/index.html":J));if(!Z.startsWith(z))return new Response("forbidden",{status:403});let G=Bun.file(Fk(Z)?Z:TK(z,"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 xk(J){let{link:z,sseSends:Y,staticDir:Z}=J,G=J.tearDownSession??((X)=>void IK(X));return async function(Q){let f=new URL(Q.url);if(f.pathname===PK)return new Response(wK);if(!M6(Q.headers.get("origin"),{allowedHost:J.allowedHost}))return new Response("forbidden: cross-origin request rejected",{status:403});if(f.pathname==="/events")return Ok((A)=>{let F=J.onSseOpen?.()??(()=>{});return A("snapshot",z.snapshot()),Y.add(A),()=>{Y.delete(A),F()}});if(f.pathname==="/api/rpc"&&Q.method==="POST")return Ak(Q,z,G);if(f.pathname==="/api/session"&&Q.method==="POST")return yk(Q,z);if(f.pathname==="/api/engine-spec"&&Q.method==="GET")return uK(f,z,bK);if(f.pathname==="/api/terminal-spec"&&Q.method==="GET")return uK(f,z,SK);if(f.pathname==="/api/engines"&&Q.method==="GET")return Rk();if(f.pathname==="/api/cli-invocation"&&Q.method==="GET")return gk();if(f.pathname==="/api/projects"&&Q.method==="GET")return Ck();if(f.pathname==="/api/settings"&&Q.method==="GET")return cK();if(f.pathname==="/api/settings"&&Q.method==="PATCH")return Ik(Q);if(f.pathname==="/api/quick-prompts"&&Q.method==="GET")return dK();if(f.pathname==="/api/quick-prompts"&&Q.method==="PUT")return Tk(Q);let H=await Q6(Q,f);if(H)return H;let B=await o5(Q,f);if(B)return B;let V=await J6(Q,f);if(V)return V;let j=await U6(Q,f,z);if(j)return j;let K=await j6(Q,f);if(K)return K;let L=f6(Q,f);if(L)return L;if(Z)return uk(f.pathname,Z);return new Response("not found",{status:404})}}function xZ(J,z){let Y=J.snapshot().find((Z)=>Z.channel===z);return Y?Y.payload:null}function Bj(J){return J.length>1?J.replace(/\/+$/,""):J}function Ek(J,z){let Y=Bj(z),Z=new Set([z]);for(let G of J){let X=Bj(G.repo),Q=Bj(G.worktreePath);if(X===Y||Q===Y){if(G.repo)Z.add(G.repo);if(G.worktreePath)Z.add(G.worktreePath)}}return[...Z]}function nK(J){let z=bX();return{async request(Y,Z){return await kX(z,Y,Z,J.ctx(0))},snapshot(){let Y=J.orch.listTasks().map(Gz),Z={},G=xZ(J.bus,"issue.snapshot");if(G)for(let f of Ek(Y,G.repoRoot))Z[f]={...G,repoRoot:f};let X=xZ(J.bus,"task.jobs"),Q=X?.phase==="running"?{[X.taskId]:X}:{};return{tasks:Y,activeTaskId:xZ(J.bus,"active-task")?.taskId??null,engineStates:J.activity.snapshotByTask(),update:xZ(J.bus,"update")?.info??null,jobs:Q,worktreeChanges:xZ(J.bus,"worktree.changes")?.changes??{},issueSnapshots:Z,deliver:xZ(J.bus,"session.deliver"),uiPrefs:xZ(J.bus,"ui-prefs"),connected:!0}}}}async function xK(J){try{let z=Bun.spawn(["lsof","-nP",`-iTCP:${J}`,"-sTCP:LISTEN","-t"],{stdout:"pipe",stderr:"ignore"});return(await new Response(z.stdout).text()).split(`
78
+ `).map((Z)=>Number.parseInt(Z.trim(),10)).filter((Z)=>Number.isFinite(Z)&&Z!==process.pid)}catch{return[]}}async function wk(J,z=PK){let Y;try{Y=(await(await fetch(`http://localhost:${J}${z}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(Y!==wK)throw Error(`port ${J} is in use by a non-kobe service; refusing to replace it`);let Z=await xK(J);for(let X of Z)try{process.kill(X,"SIGTERM")}catch{}let G=Date.now()+2000;while(Date.now()<G){if((await xK(J)).length===0)return;await new Promise((X)=>setTimeout(X,100))}}async function iK(J){if(J.takeover!==!1)await wk(J.port);let z=new Set,Y=J.onEvent((f)=>{for(let H of z)H("channel",f)}),Z=J.hostname?.trim()||process.env.KOBE_WEB_HOST?.trim()||"127.0.0.1",G=F6(Z),X=xk({link:J.link,sseSends:z,staticDir:J.staticDir?EK(J.staticDir):void 0,allowedHost:G,onSseOpen:J.onSseOpen}),Q=Bun.serve({port:J.port,hostname:Z,idleTimeout:0,fetch:X});return{port:Q.port??J.port,hostname:Z,close(){Y(),Q.stop(!0)}}}var wK="kobe-web",PK="/__kobe_web",hK,vK,bf;var lK=N(()=>{QZ();hJ();NY();NX();wq();O1();YZ();mq();t1();s5();z6();q6();H6();Cq();ZZ();W6();O6();R6();yK();hK=["primary","success","info"],vK=/^[a-z][a-z0-9_-]{0,47}$/;bf={review:"boardPrompt.review",pr:"boardPrompt.pr"}});function $K(J){return J>="0"&&J<="7"}function _K(J,z){let Y=[],Z="",G=()=>{if(Z.length>0){for(let Q of Pk.encode(Z))Y.push(Q);Z=""}},X=z+1;while(X<J.length){let Q=J[X];if(Q==='"'){X++;break}if(Q==="\\"){let f=J[X+1];if(f===void 0){Z+="\\",X++;continue}switch(f){case"a":G(),Y.push(7),X+=2;break;case"b":G(),Y.push(8),X+=2;break;case"t":G(),Y.push(9),X+=2;break;case"n":G(),Y.push(10),X+=2;break;case"v":G(),Y.push(11),X+=2;break;case"f":G(),Y.push(12),X+=2;break;case"r":G(),Y.push(13),X+=2;break;case'"':Z+='"',X+=2;break;case"\\":Z+="\\",X+=2;break;default:if($K(f)){let H="",B=X+1;while(B<J.length&&H.length<3&&$K(J[B]))H+=J[B],B++;G(),Y.push(Number.parseInt(H,8)&255),X=B}else Z+=f,X+=2;break}}else Z+=Q,X++}return G(),{value:hk.decode(new Uint8Array(Y)),end:X}}function Sf(J){if(J.length===0||J[0]!=='"')return J;return _K(J,0).value}function pK(J,z){if(J[0]==='"'){let Z=_K(J,0);if(J.startsWith(z,Z.end))return{orig:Z.value,neu:Sf(J.slice(Z.end+z.length))};return null}let Y=J.indexOf(z);if(Y<0)return null;return{orig:J.slice(0,Y),neu:Sf(J.slice(Y+z.length))}}function vk(J){let z=J.indexOf("{");if(z>=0){let Z=J.indexOf("}",z),G=J.indexOf(" => ",z);if(Z>z&&G>=0&&G<Z){let X=J.slice(0,z),Q=J.slice(z+1,G),f=J.slice(G+4,Z),H=J.slice(Z+1);return{path:X+f+H,origPath:X+Q+H}}}let Y=pK(J," => ");if(Y)return{path:Y.neu,origPath:Y.orig};return{path:Sf(J)}}function If(J){let z=[];for(let Y of J.split(`
79
+ `)){let Z=Y.replace(/\r$/,"");if(Z.length<4)continue;if(Z.startsWith("##"))continue;let G=Z[0],X=Z[1];if(Z[2]!==" ")continue;let Q=Z.slice(3);if(G==="R"||G==="C"||X==="R"||X==="C"){let f=pK(Q," -> ");if(f){z.push({x:G,y:X,path:f.neu,origPath:f.orig});continue}}z.push({x:G,y:X,path:Sf(Q)})}return z}function aK(J){if(J==="-")return null;let z=Number.parseInt(J,10);return Number.isNaN(z)?null:z}function rK(J){let z=[];for(let Y of J.split(`
80
+ `)){let Z=Y.replace(/\r$/,"");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(X+1);if(Q.length===0)continue;let f=vk(Q);if(f.path.length===0)continue;z.push({path:f.path,...f.origPath!==void 0?{origPath:f.origPath}:{},added:aK(Z.slice(0,G)),deleted:aK(Z.slice(G+1,X))})}return z}var Pk,hk;var jj=N(()=>{Pk=new TextEncoder,hk=new TextDecoder});var oK={};B1(oK,{sameWorktreeChanges:()=>wz,readWorktreeChanges:()=>ck,pickPushedChanges:()=>Tf,parsePorcelain:()=>bG});import{spawnSync as mk}from"child_process";function wz(J,z){return J.added===z.added&&J.deleted===z.deleted}function Tf(J,z){if(!J)return null;return J.get(z)??yf}function ck(J){if(!J)return yf;try{let z=mk("git",["status","--porcelain=v1"],{cwd:J,encoding:"utf8",stdio:["ignore","pipe","pipe"],env:vJ()});if(z.status!==0||!z.stdout)return yf;return bG(z.stdout)}catch{return yf}}function bG(J){let z=0,Y=0;for(let{x:Z,y:G}of If(J))if(Z==="D"||G==="D")Y+=1;else z+=1;return{added:z,deleted:Y}}var yf;var SG=N(()=>{xY();jj();yf={added:0,deleted:0}});async function lk(J,z){let Y=await zY("git",["status","--porcelain=v1"],{cwd:J,env:vJ(),signal:z});if(Y.status!==0)throw Error("git status failed");return bG(Y.stdout)}function $k(J){let z=new Set;for(let Y of J){if(Y.archived)continue;if(!Y.worktreePath)continue;if($1(Y.repo)||$1(Y.worktreePath))continue;z.add(Y.worktreePath)}return z}class sK{orch;bus;options;entries=new Map;stopped=!1;constructor(J,z,Y={}){this.orch=J;this.bus=z;this.options=Y}tick(){if(this.stopped)return;if(this.options.hasSubscribers&&!this.options.hasSubscribers())return;try{let J=$k(this.orch.listTasks()),z=!1;for(let Y of this.entries.keys()){if(J.has(Y))continue;if(this.entries.get(Y)?.value)z=!0;this.entries.delete(Y)}if(z)this.publish();for(let Y of J)this.maybeCollect(Y)}catch(J){I1("worktree-changes",J)}}stop(){this.stopped=!0}maybeCollect(J){let z=this.entries.get(J);if(!z)z={inFlight:!1,nextAllowedAt:0},this.entries.set(J,z);let Y=this.options.cadence??{timeoutMs:dk,slowRetryMs:nk,minIntervalMs:ik},Z=this.options.run??lk;JG(z,Y,(G)=>Z(J,G),(G)=>{if(this.stopped)return;if(this.entries.get(J)!==z)return;if(z.value&&wz(z.value,G))return;z.value=G,this.publish()})}publish(){let J={};for(let[z,Y]of this.entries)if(Y.value)J[z]=Y.value;this.bus.publish("worktree.changes",{changes:J})}}function tK(J,z,Y=Wj,Z){if(Y<=0)return()=>{};let G=new sK(J,z,{hasSubscribers:Z});G.tick();let X=setInterval(()=>G.tick(),Y);return X.unref?.(),()=>{clearInterval(X),G.stop()}}var Wj=2000,dk=4000,nk=60000,ik=1500;var eK=N(()=>{xY();zG();O1();SG()});import{mkdir as JU,readFile as ak,unlink as Vj,writeFile as _k}from"fs/promises";import{createServer as pk}from"net";import{dirname as zU}from"path";import{StringDecoder as rk}from"string_decoder";function sk(){let J=process.env.KOBE_DAEMON_IDLE_GRACE_MS;if(J===void 0)return YU;let z=Number(J);return Number.isFinite(z)&&z>=0?z:YU}async function GU(J,z={}){let Y=z.socketPath??kz(z.homeDir),Z=z.pidPath??pz(z.homeDir),G=z.startedAt??new Date,X=new Set,Q=new Set,f=1,H=new S8({clients:function*(){yield*X,yield*Q},idleGraceMs:sk(),onIdleStop:()=>void Q0().catch((P)=>I1("daemon-idle-shutdown",P))}),B=new Y8;B.onPublish((P)=>{ZU(X,{type:"event",name:P.channel,payload:P.payload})});let j=new kB(B,void 0,void 0,async(P)=>{let k=J.getTask(P);if(!k?.worktreePath)return;return rZ(k.vendor??d1,k.worktreePath)}),K=new bq(kq(z.homeDir));await JU(zU(Y),{recursive:!0}),await JU(zU(Z),{recursive:!0}),await Vj(Y).catch(()=>{});let L=pk((P)=>{let k={id:f++,connectedAt:new Date,socket:P,writer:new z8(P),buffer:"",subscribed:!1,holdsLifetime:!1,channels:null};X.add(k);let o=new rk("utf8");P.on("data",(I)=>{k.buffer+=o.write(I),_(k)}),P.on("error",()=>{}),P.on("close",()=>{if(X.delete(k),k.subscribed)xz("conn",`client #${k.id} (${k.holdsLifetime?"gui":"pane"}) disconnected \u2014 ${X.size} client(s), ${H.guiCount()} gui left`);H.clientDisconnected(k.holdsLifetime)})}),A=J.subscribeTasks((P)=>{B.publish("task.snapshot",{tasks:P.map(Gz)})}),F=z.checkUpdate??sG,g=z.updatePollMs??ok,u=()=>{F().then((P)=>B.publish("update",{info:P})).catch((P)=>I1("update-poller",P))},s=null;if(g>0)u(),s=setInterval(u,g),s.unref?.();let S=z.autoTitlePollMs??J8,O=oV(J,S,()=>H.hasSubscribers()),C=$5(B,{statePath:T8(z.homeDir),debounceMs:z.uiPrefsDebounceMs??y8}),y=P5(B,{path:b8(z.homeDir),debounceMs:z.keybindingsDebounceMs??k8}),a=tK(J,B,z.worktreeChangesTickMs??Wj,()=>H.hasSubscribers()),l=n5(J,B,z.transcriptActivityTickMs??I8,()=>H.hasSubscribers()),t=m5(J,z.prStatusPollMs??yX,()=>H.hasSubscribers()),J0=null,T={socketPath:Y,pidPath:Z,startedAt:G,get webPort(){return J0?.port},clients:X,async close(){if(H.markStopping(),A(),J0?.close(),J0=null,s)clearInterval(s);O(),t(),C(),y(),a(),l(),j.close(),ZU(X,{type:"event",name:"daemon.stopping",payload:{}});for(let P of Array.from(X))P.socket.destroy();await new Promise((P)=>L.close(()=>P())),await Vj(Y).catch(()=>{}),await Vj(Z).catch(()=>{})}};await new Promise((P,k)=>{let o=L;o.once("error",k),L.listen(Y,()=>{o.removeListener("error",k),P()})}),await _k(Z,`${process.pid}
81
+ `,"utf8");async function Q0(){if(H.isStopping())return;H.markStopping(),await z.onStop?.(),setTimeout(()=>{T.close().catch((P)=>I1("daemon-shutdown",P))},0).unref()}let r=bX();function W0(P){return{orch:J,bus:B,activity:j,issues:K,daemon:{startedAt:G,socketPath:Y,webPort:J0?.port,pid:process.pid,guiCount:()=>H.guiCount(),stopSoon:Q0},clientId:P}}if(z.webPort!==void 0){let P=nK({orch:J,bus:B,activity:j,ctx:W0});J0=await iK({port:z.webPort,hostname:z.webHost,staticDir:z.webStaticDir,link:P,onEvent:(k)=>B.onPublish(k),onSseOpen:()=>{let k={subscribed:!0,holdsLifetime:!0};return Q.add(k),H.guiAttached(),xz("conn",`web client subscribed \u2014 ${X.size+Q.size} client(s), ${H.guiCount()} gui`),()=>{Q.delete(k),xz("conn",`web client disconnected \u2014 ${X.size+Q.size} client(s), ${H.guiCount()} gui left`),H.clientDisconnected(!0)}}}),xz("web",`daemon web transport listening on http://${J0.hostname}:${J0.port}`)}async function O0(P,k){if(P.name==="subscribe"){let o=q8(P.payload),I=k.subscribed;k.subscribed=!0;let h=o.role==="gui"?"gui":"pane";k.holdsLifetime=h==="gui",k.channels=mW(o.channels);let G0=!I;if(k.holdsLifetime)H.guiAttached();xz("conn",`client #${k.id} subscribed as ${h}${k.channels?` [${[...k.channels].join(",")}]`:""} \u2014 ${X.size} client(s), ${H.guiCount()} gui${G0?" (collectors resume)":""}`);for(let q0 of B.snapshot()){if(k.channels&&!k.channels.has(q0.channel))continue;dX(k,{type:"event",name:q0.channel,payload:q0.payload})}if(!k.channels||k.channels.has("engine-state"))for(let q0 of j.currentNonIdle())dX(k,{type:"event",name:"engine-state",payload:q0});return{}}return kX(r,P.name,P.payload,W0(k.id))}async function K0(P,k){try{let o=await O0(P,k);dX(k,{type:"response",id:P.id,name:P.name,payload:o})}catch(o){dX(k,{type:"response",id:P.id,name:P.name,error:Q8(o)})}}function _(P){let k=P.buffer.indexOf(`
82
+ `);while(k!==-1){let o=P.buffer.slice(0,k);if(P.buffer=P.buffer.slice(k+1),o.trim().length>0)try{let I=JSON.parse(o);if(I.type!=="request")throw Error("daemon only accepts request frames from clients");K0(I,P)}catch(I){dX(P,{type:"response",id:"parse-error",error:{message:I instanceof Error?I.message:String(I)}})}k=P.buffer.indexOf(`
83
+ `)}}return T}async function IG(J){try{let z=await ak(J,"utf8"),Y=Number(z.trim());return Number.isFinite(Y)?Y:null}catch{return null}}function XU(J){if(J.type==="event")return J.name==="daemon.stopping";return!0}function dX(J,z){J.writer.write(eG(z),XU(z))}function ZU(J,z){let Y=z.type==="event"&&z.name!=="daemon.stopping"?z.name:null,Z=XU(z),G=null;for(let X of J){if(!X.subscribed&&z.type==="event")continue;if(Y&&X.channels&&!X.channels.has(Y))continue;G??=eG(z),X.writer.write(G,Z)}}var ok=21600000,YU=3000;var uf=N(()=>{Jq();pJ();FJ();JV();sV();Cq();K8();h5();v5();lZ();c5();ZZ();i5();a5();lK();eK();Cq();K8()});import{unlink as QU}from"fs/promises";function tk(J){try{return process.kill(J,0),!0}catch(z){return z.code==="EPERM"}}async function yG(J,z){let Y=await IG(z),Z=Y!==null&&Y!==process.pid?Y:null,G=Z!==null&&tk(Z),X=G?"graceful":"absent",Q=new $J(J),f=Q.request("daemon.stop").catch(()=>{return}),H=new Promise((B)=>setTimeout(B,2000));if(await Promise.race([f,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 QU(J).catch(()=>{}),await QU(z).catch(()=>{}),{pid:Y,method:X}}var xf=N(()=>{JX();uf()});var Cf={};B1(Cf,{testDaemonResponds:()=>Ef,ensureDaemonReachable:()=>TG,connectOrStartDaemon:()=>Fz,connectIfRunning:()=>eJ});import{spawn as ek}from"child_process";import{closeSync as Jb,existsSync as zb,mkdirSync as Yb,openSync as Zb}from"fs";import{dirname as qU,resolve as Kj}from"path";import{fileURLToPath as Gb}from"url";function qb(J,z,Y,Z){let G="ignore",X;try{Yb(qU(Z),{recursive:!0}),X=Zb(Z,"a"),G=["ignore",X,X]}catch{G="ignore"}if(ek(J,[...z],{detached:!0,stdio:G,env:Y}).unref(),X!==void 0)try{Jb(X)}catch{}}async function TG(){let J=kz();if(await Ef(J))return J;await yG(J,pz()).catch(()=>{});let[z,...Y]=fb(Xb);qb(z,Y,process.env,uQ());let Z=Date.now()+5000;while(Date.now()<Z){if(await Ef(J))return J;await new Promise((G)=>setTimeout(G,100))}throw Error(`kobe: daemon did not start (or stayed wedged) at ${J}`)}async function Fz(){let J=await TG(),z=new $J(J);return await z.connect(),z}async function eJ(){let J=kz();if(!await Ef(J))return null;let z=new $J(J);return await z.connect(),z}async function Ef(J,z=Qb){let Y=new $J(J);try{await Y.connect()}catch{return Y.close(),!1}let Z=Y.request("hello",{protocolVersion:lJ}).then(()=>!0).catch(()=>!0),G,X=new Promise((f)=>{G=setTimeout(()=>f(!1),z)}),Q=await Promise.race([Z,X]);if(G)clearTimeout(G);return Y.close(),Q}function fb(J){let z=Gb(import.meta.url);if(z.startsWith("/$bunfs")||z.startsWith("B:\\~BUN"))return[process.execPath,...J];let Y=qU(z),Z=[Kj(Y,"../cli/index.ts"),Kj(Y,"../../../kobe/src/cli/index.ts"),Kj(Y,"../cli/index.js")],G=Z.find((X)=>zb(X));if(G)return[process.execPath,G,...J];throw Error(`kobe: could not locate kobe entry near ${Y}; checked ${Z.join(", ")}`)}var Xb,Qb=3000;var OJ=N(()=>{xf();lZ();ZZ();JX();Xb=["daemon","start"]});import{mkdir as Hb,readFile as fU,unlink as BU,writeFile as HU}from"fs/promises";import{dirname as Bb}from"path";function jb(J){if(!Number.isInteger(J)||J<=0)return!1;try{return process.kill(J,0),!0}catch(z){if(z.code==="ESRCH")return!1;return!0}}async function Uj(J,z={}){await Hb(Bb(J),{recursive:!0});try{await HU(J,String(process.pid),{flag:"wx"});return}catch(G){if(G.code!=="EEXIST")throw G}let Y=-1;try{let G=(await fU(J,"utf8")).trim();if(Y=Number.parseInt(G,10),!Number.isFinite(Y))Y=-1}catch{return Uj(J,z)}let Z=Y>0&&jb(Y);if(Z&&!z.forceTakeover)throw new nX(`task index is locked by another kobe instance (pid ${Y})`,Y);console.warn(`[kobe] removing stale lockfile at ${J} (was held by pid ${Y}${Z?", forced":", process gone"})`);try{await BU(J)}catch(G){if(G.code!=="ENOENT")throw G}try{await HU(J,String(process.pid),{flag:"wx"})}catch(G){if(G.code==="EEXIST"){let X=-1;try{X=Number.parseInt((await fU(J,"utf8")).trim(),10)}catch{X=-1}throw new nX(`task index lockfile contended during takeover (winner pid ${X})`,X)}throw G}}async function jU(J){try{await BU(J)}catch(z){if(z.code==="ENOENT")return;throw z}}var nX;var WU=N(()=>{nX=class nX extends Error{heldByPid;constructor(J,z){super(J);this.name="LockfileError",this.heldByPid=z}}});function Wb(J,z){let Y="",Z=J;for(let G=z-1;G>=0;G--){let X=Z%32;Y="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[X]+Y,Z=(Z-X)/32}return Y}function UU(J){let z=new Uint8Array(J);crypto.getRandomValues(z);let Y=Array(J);for(let Z=0;Z<J;Z++)Y[Z]=(z[Z]??0)&31;return Y}function Vb(J){for(let z=J.length-1;z>=0;z--){let Y=J[z]??0;if(Y<31)return J[z]=Y+1,!0;J[z]=0}return!1}function Kb(J){let z="";for(let Y of J)z+="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[Y]??"0";return z}function DU(J=Date.now()){let z;if(J===VU){let Y=KU.slice();if(!Vb(Y))z=UU(16);else z=Y}else z=UU(16);return VU=J,KU=z,Wb(J,10)+Kb(z)}var VU=-1,KU;var LU=N(()=>{KU=Array(16).fill(0)});var Dj={};B1(Dj,{TaskIndexStore:()=>uG});import{mkdir as Ub,open as Db,readFile as MU,rename as Lb,unlink as FU}from"fs/promises";import{homedir as Mb}from"os";import{dirname as Fb,join as OU}from"path";async function gb(J){let z=Date.now()+Rb;for(;;)try{await Uj(J);return}catch(Y){if(!(Y instanceof nX)||Date.now()>=z)throw Y;await Ob(Ab)}}class uG{homeDir;kobeDir;path;tmpPath;lockPath;cache={version:qY,tasks:[]};loaded=!1;listeners=new Set;saveChain=Promise.resolve();dirtyIds=new Set;removedIds=new Set;constructor(J={}){this.homeDir=J.homeDir??Mb(),this.kobeDir=OU(this.homeDir,".kobe"),this.path=OU(this.kobeDir,"tasks.json"),this.tmpPath=`${this.path}.tmp`,this.lockPath=`${this.path}.lock`}subscribe(J){if(this.listeners.add(J),this.loaded)try{J(this.cache.tasks.slice())}catch(z){console.error("[kobe TaskIndexStore] listener threw on subscribe:",z)}return()=>{this.listeners.delete(J)}}get filePath(){return this.path}get stateDir(){return this.kobeDir}async load(){this.dirtyIds.clear(),this.removedIds.clear();let J;try{J=await MU(this.path,"utf8")}catch(Y){if(Y.code==="ENOENT")return this.cache={version:qY,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot();throw Y}let z;try{z=JSON.parse(J)}catch(Y){return console.warn(`[kobe] tasks.json at ${this.path} is corrupted (${Y.message}); recovering with empty index. The stale file is left in place.`),this.cache={version:qY,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot()}return this.cache=AU(z,this.path),this.loaded=!0,this.notifyListeners(),this.snapshot()}async save(){this.assertLoaded();let J=this.saveChain.then(()=>this.doSave());return this.saveChain=J.catch(()=>{}),J}async doSave(){await Ub(Fb(this.path),{recursive:!0});let J=new Set(this.dirtyIds),z=new Set(this.removedIds);await gb(this.lockPath);try{let Y=await this.readDiskTasks(),Z=this.mergeWithDisk(Y,J,z),X=`${JSON.stringify({version:qY,tasks:Z},null,2)}
84
+ `,Q=await Db(this.tmpPath,"w",420);try{await Q.writeFile(X,"utf8"),await Q.sync()}finally{await Q.close()}await Lb(this.tmpPath,this.path);for(let H of J)this.dirtyIds.delete(H);for(let H of z)this.removedIds.delete(H);let f=new Set(this.cache.tasks.map((H)=>H.id));for(let H of Z)if(!f.has(H.id))this.cache.tasks.push(H)}finally{await jU(this.lockPath)}}async readDiskTasks(){let J;try{J=await MU(this.path,"utf8")}catch(Y){if(Y.code==="ENOENT")return[];throw Y}let z;try{z=JSON.parse(J)}catch{return[]}return AU(z,this.path).tasks}mergeWithDisk(J,z,Y){let Z=new Map(J.map((Q)=>[Q.id,Q])),G=[],X=new Set;for(let Q of this.cache.tasks){if(z.has(Q.id))G.push(Q);else{let f=Z.get(Q.id);if(f===void 0)continue;G.push(f)}X.add(Q.id)}for(let Q of J){if(X.has(Q.id)||Y.has(Q.id))continue;G.push(Q),X.add(Q.id)}return G}get(J){return this.assertLoaded(),this.cache.tasks.find((z)=>z.id===J)}list(){return this.assertLoaded(),this.cache.tasks.slice()}async create(J){this.assertLoaded();let z=new Date().toISOString(),Y={archived:!1,vendor:J.vendor??d1,...J,id:jX(DU()),createdAt:z,updatedAt:z};return this.cache.tasks.push(Y),this.dirtyIds.add(Y.id),await this.save(),this.notifyListeners(),Y}async update(J,z){this.assertLoaded();let Y=this.cache.tasks.findIndex((H)=>H.id===J);if(Y<0)throw Error(`task not found: ${J}`);let Z=this.cache.tasks[Y];if(!Z)throw Error(`task not found: ${J}`);let{id:G,createdAt:X,...Q}=z,f={...Z,...Q,id:Z.id,createdAt:Z.createdAt,updatedAt:new Date().toISOString()};return this.cache.tasks[Y]=f,this.dirtyIds.add(String(J)),await this.save(),this.notifyListeners(),f}async move(J,z,Y){this.assertLoaded();let Z=this.cache.tasks.find((L)=>L.id===J);if(!Z)throw Error(`task not found: ${J}`);let G=Y?.length?Y:this.cache.tasks.map((L)=>L.id),X=G.indexOf(String(J));if(X<0)throw Error(`task not movable in current group: ${J}`);let Q=G[X+z];if(!Q)return Z;let f=this.cache.tasks.findIndex((L)=>L.id===J),H=this.cache.tasks.findIndex((L)=>L.id===Q);if(f<0||H<0||f===H)return Z;let[B]=this.cache.tasks.splice(f,1);if(!B)return Z;let V=f<H?H-1:H,j=z>0?V+1:V,K={...B,updatedAt:new Date().toISOString()};return this.cache.tasks.splice(j,0,K),this.dirtyIds.add(String(J)),await this.save(),this.notifyListeners(),K}async reorder(J){this.assertLoaded();let z=J.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 z){let f=this.cache.tasks[X];if(!f||f.position===Q)continue;if(!Z.has(X))Z.set(X,f);if(this.cache.tasks[X]={...f,position:Q},!this.dirtyIds.has(f.id))this.dirtyIds.add(f.id),G.push(f.id);Y=!0}if(!Y)return;try{await this.save()}catch(X){for(let[Q,f]of Z)this.cache.tasks[Q]=f;for(let Q of G)this.dirtyIds.delete(Q);throw X}this.notifyListeners()}async archive(J,z="done"){return this.update(J,{status:z})}async remove(J){this.assertLoaded();let z=this.cache.tasks.findIndex((Y)=>Y.id===J);if(z<0)return;this.cache.tasks.splice(z,1),this.dirtyIds.delete(String(J)),this.removedIds.add(String(J)),await this.save(),this.notifyListeners()}async _unlinkForTests(){try{await FU(this.path)}catch(J){if(J.code!=="ENOENT")throw J}try{await FU(this.tmpPath)}catch(J){if(J.code!=="ENOENT")throw J}this.cache={version:qY,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:qY,tasks:this.cache.tasks.slice()}}notifyListeners(){if(this.listeners.size===0)return;let J=this.cache.tasks.slice();for(let z of this.listeners)try{z(J)}catch(Y){console.error("[kobe TaskIndexStore] listener threw on notify:",Y)}}}function AU(J,z){if(!J||typeof J!=="object"||Array.isArray(J))return console.warn(`[kobe] tasks.json at ${z} is not an object; recovering with empty index.`),{version:qY,tasks:[]};let Y=J,Z=Y.version;if(Z!==void 0&&Z!==1&&Z!==2&&Z!==3)return console.warn(`[kobe] tasks.json at ${z} has unsupported version=${String(Z)}; recovering with empty index.`),{version:qY,tasks:[]};let G=Array.isArray(Y.tasks)?Y.tasks:[],X=[];for(let Q of G){let f=Cb(Q);if(f)X.push(f);else console.warn(`[kobe] dropping malformed task entry from ${z}: ${JSON.stringify(Q)}`)}return{version:qY,tasks:X}}function Cb(J){if(!J||typeof J!=="object")return null;let z=J;if(typeof z.id!=="string"||typeof z.title!=="string"||typeof z.repo!=="string"||typeof z.branch!=="string"||typeof z.worktreePath!=="string"||typeof z.status!=="string"||typeof z.createdAt!=="string"||typeof z.updatedAt!=="string")return null;if(!Ib(z.status))return null;let Y=typeof z.archived==="boolean"?z.archived:!1,Z=z.kind==="main"?"main":"task",G=Z==="main"?z.status==="in_progress"||z.status==="done"?"backlog":z.status:z.status==="done"&&!Y?"in_progress":z.status;return{id:jX(z.id),title:z.title,repo:z.repo,branch:z.branch,worktreePath:z.worktreePath,status:G,archived:Y,pinned:typeof z.pinned==="boolean"?z.pinned:!1,kind:Z,vendor:sY(typeof z.vendor==="string"?z.vendor:void 0),prStatus:Nb(z.prStatus),...typeof z.position==="number"&&Number.isFinite(z.position)?{position:z.position}:{},...typeof z.modelEffort==="string"&&z.modelEffort.length>0?{modelEffort:z.modelEffort}:{},createdAt:z.createdAt,updatedAt:z.updatedAt}}function Nb(J){if(!J||typeof J!=="object"||Array.isArray(J))return;let z=J;if(!kb(z.provider)||!bb(z.lifecycle)||!Sb(z.checkState))return;return{provider:z.provider,lifecycle:z.lifecycle,checkState:z.checkState,...typeof z.number==="number"&&Number.isFinite(z.number)?{number:z.number}:{},...typeof z.url==="string"?{url:z.url}:{},...typeof z.title==="string"?{title:z.title}:{},...typeof z.baseRef==="string"?{baseRef:z.baseRef}:{},...typeof z.headRef==="string"?{headRef:z.headRef}:{},...typeof z.reviewDecision==="string"?{reviewDecision:z.reviewDecision}:{},...typeof z.mergeable==="string"?{mergeable:z.mergeable}:{},...typeof z.lastCheckedAt==="string"?{lastCheckedAt:z.lastCheckedAt}:{},...typeof z.lastError==="string"?{lastError:z.lastError}:{}}}function kb(J){return J==="github"||J==="gitlab"||J==="bitbucket"||J==="unknown"}function bb(J){return J==="creating"||J==="open"||J==="ready_to_merge"||J==="merged"||J==="closed"||J==="unknown"}function Sb(J){return J==="none"||J==="pending"||J==="passing"||J==="failing"||J==="unknown"}function Ib(J){return J==="backlog"||J==="in_progress"||J==="in_review"||J==="done"||J==="canceled"||J==="error"}var Ob=(J)=>new Promise((z)=>setTimeout(z,J)),Ab=25,Rb=5000,qY=3;var iX=N(()=>{pJ();t1();WU();LU()});var wf;var RU=N(()=>{wf=class wf extends Error{args;cwd;exitCode;stdout;stderr;constructor(J,z,Y){super(`git ${J.join(" ")} (cwd=${z}) exited with code ${Y.exitCode}: ${Y.stderr.trim()||Y.stdout.trim()}`);this.name="GitCommandError",this.args=J,this.cwd=z,this.exitCode=Y.exitCode,this.stdout=Y.stdout,this.stderr=Y.stderr}}});var NU={};B1(NU,{GitWorktreeManager:()=>Pf});import CU from"fs";import Oz from"path";class Pf{execDeps;constructor(J=yb){this.execDeps=J}ctxFor(J){let z=this.execDeps.remoteBasePath(J);return z?{exec:this.execDeps.execForRepo(J),dir:z,remote:!0}:{exec:this.execDeps.execForRepo(J),dir:J,remote:!1}}async runGit(J,z,Y){if(!Y.cwd)throw Error("runGit(): cwd is required; refusing to inherit from process.cwd()");let Z=await J.run(["git",...z],{cwd:Y.cwd,env:Y.env}),G={stdout:Z.stdout,stderr:Z.stderr,exitCode:Z.exitCode};if(G.exitCode!==0&&!Y.allowFail)throw new wf(z,Y.cwd,G);return G}async create(J,z,Y,Z){let G=this.ctxFor(J);if(cY("repo",G.dir),cY("path",Y),!z)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!==z)throw Error(`worktree at ${Y} is on branch '${H.branch}', refusing to hijack to '${z}'`);return H}throw Error(`create(): ${Y} exists but is not a registered git worktree`)}await G.exec.mkdirp(Oz.dirname(Y));let Q=await this.branchExists(G,z)?["worktree","add",Y,z]:Z?["worktree","add","-b",z,Y,Z]:["worktree","add","-b",z,Y];await this.runGit(G.exec,Q,{cwd:G.dir});let f=await this.tryDescribe(G,Y);if(!f)throw Error(`create(): git reported success but ${Y} is not a worktree`);if(f.branch!==z)throw Error(`create(): post-condition failed \u2014 expected branch '${z}' at ${Y}, got '${f.branch}'`);return f}async createForTask(J){let z=this.execDeps.remoteBasePath(J.repo),Y=z?PV(z,J.slug):uV(J.repo,J.slug);return this.create(J.repo,J.branch,Y,J.baseRef)}async remove(J,z){cY("path",J);let Y=this.execDeps.execForPath(J),Z=z?.force===!0;if(!await Y.exists(J)){let Q=await this.findRepoFor(Y,J);if(Q)await this.runGit(Y,["worktree","prune"],{cwd:Q,allowFail:!0});return}let G=await this.findRepoFor(Y,J);if(!G)throw Error(`remove(): ${J} is not a git worktree`);if(!Z){if(await this.isDirty(J))throw Error(`remove(): refusing to remove dirty worktree at ${J} (pass { force: true } to override)`)}let X=Z?["worktree","remove","--force",J]:["worktree","remove",J];await this.runGit(Y,X,{cwd:G}),await this.runGit(Y,["worktree","prune"],{cwd:G,allowFail:!0})}async list(J){let z=this.ctxFor(J);cY("repo",z.dir);let Y=await this.runGit(z.exec,["worktree","list","--porcelain"],{cwd:z.dir}),Z=Lj(Y.stdout),G=[];for(let X of Z){if(!X.path)continue;let Q=z.remote?gU(z.dir,X.path):iB(J,X.path);if(!Q)continue;if(!X.branch||X.detached)continue;let f=lX(Q),H=lX(X.path),B=Oz.relative(f,H),V=Oz.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(J){let z=this.ctxFor(J);cY("repo",z.dir);let Y=await this.runGit(z.exec,["worktree","list","--porcelain"],{cwd:z.dir}),Z=Lj(Y.stdout),G=z.remote?z.dir:lX(z.dir),X=[];for(let Q of Z){if(!Q.path)continue;if(Q.bare)continue;if(!Q.branch||Q.detached)continue;if((z.remote?Q.path:lX(Q.path))===G)continue;let f=await this.isDirty(Q.path);X.push({path:Q.path,branch:Q.branch,head:Q.head??"",dirty:f,kobeManaged:z.remote?gU(z.dir,Q.path)!==null:EV(J,Q.path),lastActivityMs:await this.lastActivityMs(z.exec,Q.path)})}return X.sort((Q,f)=>f.lastActivityMs-Q.lastActivityMs),X}async lastActivityMs(J,z){try{let Y=await this.runGit(J,["log","-1","--format=%ct"],{cwd:z}),Z=Number.parseInt(Y.stdout.trim(),10);if(Number.isFinite(Z)&&Z>0)return Z*1000}catch{}if(!J.isRemote)try{return CU.statSync(z).mtimeMs}catch{}return 0}async isDirty(J){cY("path",J);let z=this.execDeps.execForPath(J);return(await this.runGit(z,["status","--porcelain"],{cwd:J})).stdout.length>0}async currentBranch(J){cY("path",J);let z=this.execDeps.execForPath(J),Z=(await this.runGit(z,["rev-parse","--abbrev-ref","HEAD"],{cwd:J})).stdout.trim();if(!Z||Z==="HEAD")throw Error(`currentBranch(): ${J} is in detached-HEAD state`);return Z}async renameBranch(J,z,Y){if(cY("path",J),z===Y)return;let Z=this.execDeps.execForPath(J),G=await this.findRepoFor(Z,J);if(!G)throw Error(`renameBranch(): ${J} is not a git worktree`);await this.runGit(Z,["branch","-m",z,Y],{cwd:G})}async tryDescribe(J,z){let Y=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),Z=Lj(Y.stdout),G=(f)=>J.remote?f:lX(f),X=G(z),Q=Z.find((f)=>f.path&&G(f.path)===X);if(!Q||!Q.path||!Q.branch||Q.detached)return null;return{path:z,branch:Q.branch,head:Q.head??"",dirty:await this.isDirty(Q.path)}}async branchExists(J,z){let Y=`refs/heads/${z}`;return(await this.runGit(J.exec,["show-ref","--verify","--quiet",Y],{cwd:J.dir,allowFail:!0})).exitCode===0}async findRepoFor(J,z){try{let Y=await this.runGit(J,["rev-parse","--git-common-dir"],{cwd:z,allowFail:!0});if(Y.exitCode!==0)return null;let Z=Y.stdout.trim();if(!Z)return null;let G=Oz.isAbsolute(Z)?Z:Oz.resolve(z,Z);return Oz.basename(G)===".git"?Oz.dirname(G):G}catch(Y){if(Y instanceof wf)return null;throw Y}}}function Lj(J){let z=[],Y=null;for(let Z of J.split(`
85
+ `)){let G=Z.replace(/\r$/,"");if(G===""){if(Y)z.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)z.push(Y);return z}function gU(J,z){let Y=`${J.replace(/\/+$/,"")}/.kobe/worktrees`;return z===Y||z.startsWith(`${Y}/`)?Y:null}function cY(J,z){if(!z||!Oz.isAbsolute(z))throw Error(`${J} must be an absolute path, got: ${JSON.stringify(z)}`)}function lX(J){try{return CU.realpathSync(J)}catch{return Oz.resolve(J)}}var yb;var Mj=N(()=>{jz();O1();RU();lB();yb={execForRepo:YG,execForPath:YY,remoteBasePath(J){return az(J)?.basePath??null}}});var hf;var kU=N(()=>{hf=["web","completions","add","remove","adopt","export","repo","api","daemon","theme","skill","feedback","update","doctor","reset","reload","kill-sessions"]});var SU={};B1(SU,{runCompletionsSubcommand:()=>Eb});function Tb(){return`# kobe bash completions
86
86
  # Source: kobe completions bash
87
87
 
88
88
  _kobe() {
@@ -90,7 +90,7 @@ _kobe() {
90
90
  COMPREPLY=()
91
91
  cur="\${COMP_WORDS[COMP_CWORD]}"
92
92
  prev="\${COMP_WORDS[COMP_CWORD-1]}"
93
- opts="${Lq.join(" ")}"
93
+ opts="${hf.join(" ")}"
94
94
 
95
95
  if [[ \${cur} == * ]] ; then
96
96
  COMPREPLY=( $(compgen -W "\${opts}" -- \${cur}) )
@@ -98,47 +98,47 @@ _kobe() {
98
98
  fi
99
99
  }
100
100
  complete -F _kobe kobe
101
- `}function bN(){return`#compdef kobe
101
+ `}function ub(){return`#compdef kobe
102
102
  # kobe zsh completions
103
103
  # Source: kobe completions zsh
104
104
 
105
105
  _kobe() {
106
106
  local -a subcommands
107
- subcommands=(${Lq.map((Y)=>`"${Y}"`).join(" ")})
107
+ subcommands=(${hf.map((z)=>`"${z}"`).join(" ")})
108
108
 
109
109
  _arguments "1:subcommand:(\${subcommands})"
110
110
  }
111
111
 
112
112
  _kobe "$@"
113
- `}function kN(){return`# kobe fish completions
113
+ `}function xb(){return`# kobe fish completions
114
114
  # Source: kobe completions fish
115
115
 
116
- ${Lq.map((Y)=>`complete -c kobe -f -a ${Y}`).join(`
116
+ ${hf.map((z)=>`complete -c kobe -f -a ${z}`).join(`
117
117
  `)}
118
- `}async function yN(f){let Y=f[0];if(Y==="--help"||Y==="-h"||Y==="help"){process.stdout.write(MU);return}if(!Y||Y!=="bash"&&Y!=="zsh"&&Y!=="fish")process.stderr.write(`kobe completions: unknown shell "${Y}"
118
+ `}async function Eb(J){let z=J[0];if(z==="--help"||z==="-h"||z==="help"){process.stdout.write(bU);return}if(!z||z!=="bash"&&z!=="zsh"&&z!=="fish")process.stderr.write(`kobe completions: unknown shell "${z}"
119
119
 
120
- ${MU}`),process.exit(2);let J;if(Y==="bash")J=NN();else if(Y==="zsh")J=bN();else J=kN();process.stdout.write(J)}var MU=`Usage: kobe completions <bash|zsh|fish>
120
+ ${bU}`),process.exit(2);let Y;if(z==="bash")Y=Tb();else if(z==="zsh")Y=ub();else Y=xb();process.stdout.write(Y)}var bU=`Usage: kobe completions <bash|zsh|fish>
121
121
 
122
122
  Generate a shell completion script for kobe and print it to stdout.
123
123
  Redirect the output to the appropriate file for your shell.
124
- `;var OU=N(()=>{LU()});var CU={};H1(CU,{runExportSubcommand:()=>hN,renderExport:()=>gU,displayWidth:()=>Mq});function SN(f){return{id:f.id,title:f.title,status:f.status,archived:String(f.archived),vendor:f.vendor??Zf,branch:f.branch,repo:f.repo,worktreePath:f.worktreePath}}function d8(f){process.stderr.write(`kobe export: ${f}
125
-
126
- ${RU}
127
- `),process.exit(2)}function IN(f){let Y="json";for(let J=0;J<f.length;J++){let z=f[J];if(z==="--json")Y="json";else if(z==="--csv")Y="csv";else if(z==="--format"){let Z=f[++J];if(Z===void 0)d8("--format requires a value (json, csv, or table)");Y=AU(Z)}else if(z.startsWith("--format="))Y=AU(z.slice(9));else d8(`unexpected argument "${z}"`)}return Y}function AU(f){if(f==="json"||f==="csv"||f==="table")return f;d8(`unknown format "${f}" (expected json, csv, or table)`)}function TN(f){if(/[",\r\n]/.test(f))return`"${f.replace(/"/g,'""')}"`;return f}function uN(f){let Y=[xG.join(",")];for(let J of f)Y.push(xG.map((z)=>TN(J[z])).join(","));return Y.join(`
128
- `)}function Mq(f){let Y=0;for(let J of f)Y+=EN(J.codePointAt(0));return Y}function EN(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 xN(f,Y){return f+" ".repeat(Math.max(0,Y-Mq(f)))}function wN(f){let Y={};for(let Z of xG)Y[Z]=Math.max(Mq(Z),...f.map((G)=>Mq(G[Z])));let J=(Z)=>xG.map((G)=>xN(Z[G],Y[G])).join(" ").trimEnd(),z={};for(let Z of xG)z[Z]=Z;return[J(z),...f.map(J)].join(`
129
- `)}function gU(f,Y){let J=f.map(SN);if(Y==="json")return JSON.stringify(J,null,2);if(Y==="csv")return uN(J);return wN(J)}async function hN(f){if(f.includes("--help")||f.includes("-h")||f.includes("help")){process.stdout.write(`${RU}
130
- `);return}let Y=IN(f),{TaskIndexStore:J}=await Promise.resolve().then(() => (uG(),m8)),z=new J;await z.load();let Z=z.list();if(Z.length===0&&Y==="table"){process.stdout.write(`no tasks
131
- `);return}process.stdout.write(`${gU(Z,Y)}
132
- `)}var RU,xG;var NU=N(()=>{RY();RU=["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(`
133
- `),xG=["id","title","status","archived","vendor","branch","repo","worktreePath"]});var yU={};H1(yU,{runRepoSubcommand:()=>cN});import{readFileSync as PN}from"fs";import{resolve as Fq}from"path";function hJ(f){process.stderr.write(`kobe repo: ${f}
134
-
135
- ${kU}
136
- `),process.exit(2)}function bU(f){try{return PN(Fq(process.cwd(),f),"utf8")}catch(Y){hJ(`cannot read ${f}: ${Y instanceof Error?Y.message:String(Y)}`)}}function vN(f){let Y={};for(let J=0;J<f.length;J++){let z=f[J],Z=()=>{let G=f[++J];if(G===void 0)hJ(`${z} requires a value`);return G};if(z==="--init-script")Y.initScript=Z();else if(z==="--init-script-file")Y.initScript=bU(Z());else if(z==="--init-prompt")Y.initPrompt=Z();else if(z==="--init-prompt-file")Y.initPrompt=bU(Z());else if(z.startsWith("-"))hJ(`unknown flag "${z}"`);else if(Y.path===void 0)Y.path=z;else hJ(`unexpected argument "${z}"`)}return Y}function mN(f){let Y,J=!1,z=!1;for(let Z of f)if(Z==="--init-script")J=!0;else if(Z==="--init-prompt")z=!0;else if(Z.startsWith("-"))hJ(`unknown flag "${Z}"`);else if(Y===void 0)Y=Z;else hJ(`unexpected argument "${Z}"`);if(!J&&!z)J=!0,z=!0;return{path:Y,clearScript:J,clearPrompt:z}}async function cN(f){let[Y,...J]=f;if(Y===void 0||Y==="--help"||Y==="-h"||Y==="help"){process.stdout.write(`${kU}
137
- `);return}let{getRepoInitOverride:z,setRepoInitOverride:Z,resolveRepoRoot:G}=await Promise.resolve().then(() => (A1(),iY)),{existsSync:Q}=await import("fs"),{join:q}=await import("path");if(Y==="show"){let[H]=J.filter((L)=>!L.startsWith("-")),B=G(Fq(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?CZ(V.initScript):"(unset)"}`),console.log(` override initPrompt: ${V.initPrompt?CZ(V.initPrompt):"(unset)"}`);return}if(Y==="set"){let H=vN(J);if(H.initScript===void 0&&H.initPrompt===void 0)hJ("set needs at least one of --init-script(-file) / --init-prompt(-file)");let B=G(Fq(process.cwd(),H.path??".")),V=Z(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?CZ(V.initScript):"(unset)"}`),console.log(` initPrompt: ${V.initPrompt?CZ(V.initPrompt):"(unset)"}`);return}if(Y==="unset"){let{path:H,clearScript:B,clearPrompt:V}=mN(J),j=G(Fq(process.cwd(),H??".")),K=Z(j,{...B?{initScript:""}:{},...V?{initPrompt:""}:{}});console.log(`cleared override for ${j}`),console.log(` initScript: ${K.initScript?CZ(K.initScript):"(unset)"}`),console.log(` initPrompt: ${K.initPrompt?CZ(K.initPrompt):"(unset)"}`);return}hJ(`unknown verb "${Y}"`)}function CZ(f){let Y=f.replace(/\s+/g," ").trim();return Y.length>60?`"${Y.slice(0,57)}\u2026"`:`"${Y}"`}var kU;var SU=N(()=>{kU=["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(`
138
- `)});import{spawnSync as nN}from"child_process";function lN(f){let[Y,J]=f.split("/");if(!Y||!J)throw Error(`invalid GitHub repository slug: ${f}`);return{owner:Y,name:J}}function IU(f,Y){let J=f.trim();if(!J)throw Error(`${Y} is required`);return J}function TU(f,Y){let J=Y?.map((z)=>typeof z.message==="string"?z.message:null).filter((z)=>!!z);if(J&&J.length>0)return J.join("; ");return f.trim()||"GitHub CLI returned an empty response"}function uU(f,Y,J){let z=["api","graphql","-f",`query=${f}`];for(let[H,B]of Object.entries(Y))z.push("-f",`${H}=${B}`);let Z=J.spawn("gh",z,{encoding:"utf8"});if(Z.error)throw Error(`failed to run gh: ${Z.error.message}`);let G=typeof Z.stdout==="string"?Z.stdout:String(Z.stdout??""),Q=typeof Z.stderr==="string"?Z.stderr:String(Z.stderr??""),q;try{q=JSON.parse(G)}catch{throw Error(`failed to parse gh response: ${TU(Q,void 0)}`)}if((Z.status??0)!==0||q.errors?.length)throw Error(TU(Q,q.errors));if(!q.data)throw Error("GitHub CLI response did not include data");return q.data}function aN(f){return`${f}
124
+ `;var IU=N(()=>{kU()});var xU={};B1(xU,{runExportSubcommand:()=>nb,renderExport:()=>uU,displayWidth:()=>vf});function wb(J){return{id:J.id,title:J.title,status:J.status,archived:String(J.archived),vendor:J.vendor??d1,branch:J.branch,repo:J.repo,worktreePath:J.worktreePath}}function Fj(J){process.stderr.write(`kobe export: ${J}
125
+
126
+ ${TU}
127
+ `),process.exit(2)}function Pb(J){let z="json";for(let Y=0;Y<J.length;Y++){let Z=J[Y];if(Z==="--json")z="json";else if(Z==="--csv")z="csv";else if(Z==="--format"){let G=J[++Y];if(G===void 0)Fj("--format requires a value (json, csv, or table)");z=yU(G)}else if(Z.startsWith("--format="))z=yU(Z.slice(9));else Fj(`unexpected argument "${Z}"`)}return z}function yU(J){if(J==="json"||J==="csv"||J==="table")return J;Fj(`unknown format "${J}" (expected json, csv, or table)`)}function hb(J){if(/[",\r\n]/.test(J))return`"${J.replace(/"/g,'""')}"`;return J}function vb(J){let z=[$X.join(",")];for(let Y of J)z.push($X.map((Z)=>hb(Y[Z])).join(","));return z.join(`
128
+ `)}function vf(J){let z=0;for(let Y of J)z+=mb(Y.codePointAt(0));return z}function mb(J){if(J>=768&&J<=879||J>=6832&&J<=6911||J>=7616&&J<=7679||J>=8203&&J<=8207||J>=8234&&J<=8238||J>=8288&&J<=8292||J>=8400&&J<=8447||J>=65024&&J<=65039||J===65279)return 0;if(J>=4352&&J<=4447||J===9001||J===9002||J>=11904&&J<=12350||J>=12353&&J<=13311||J>=13312&&J<=19903||J>=19968&&J<=40959||J>=40960&&J<=42191||J>=44032&&J<=55203||J>=63744&&J<=64255||J>=65040&&J<=65049||J>=65072&&J<=65135||J>=65280&&J<=65376||J>=65504&&J<=65510||J>=127744&&J<=129791||J>=131072&&J<=262141)return 2;return 1}function cb(J,z){return J+" ".repeat(Math.max(0,z-vf(J)))}function db(J){let z={};for(let G of $X)z[G]=Math.max(vf(G),...J.map((X)=>vf(X[G])));let Y=(G)=>$X.map((X)=>cb(G[X],z[X])).join(" ").trimEnd(),Z={};for(let G of $X)Z[G]=G;return[Y(Z),...J.map(Y)].join(`
129
+ `)}function uU(J,z){let Y=J.map(wb);if(z==="json")return JSON.stringify(Y,null,2);if(z==="csv")return vb(Y);return db(Y)}async function nb(J){if(J.includes("--help")||J.includes("-h")||J.includes("help")){process.stdout.write(`${TU}
130
+ `);return}let z=Pb(J),{TaskIndexStore:Y}=await Promise.resolve().then(() => (iX(),Dj)),Z=new Y;await Z.load();let G=Z.list();if(G.length===0&&z==="table"){process.stdout.write(`no tasks
131
+ `);return}process.stdout.write(`${uU(G,z)}
132
+ `)}var TU,$X;var EU=N(()=>{pJ();TU=["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(`
133
+ `),$X=["id","title","status","archived","vendor","branch","repo","worktreePath"]});var hU={};B1(hU,{runRepoSubcommand:()=>ab});import{readFileSync as ib}from"fs";import{resolve as mf}from"path";function dY(J){process.stderr.write(`kobe repo: ${J}
134
+
135
+ ${PU}
136
+ `),process.exit(2)}function wU(J){try{return ib(mf(process.cwd(),J),"utf8")}catch(z){dY(`cannot read ${J}: ${z instanceof Error?z.message:String(z)}`)}}function lb(J){let z={};for(let Y=0;Y<J.length;Y++){let Z=J[Y],G=()=>{let X=J[++Y];if(X===void 0)dY(`${Z} requires a value`);return X};if(Z==="--init-script")z.initScript=G();else if(Z==="--init-script-file")z.initScript=wU(G());else if(Z==="--init-prompt")z.initPrompt=G();else if(Z==="--init-prompt-file")z.initPrompt=wU(G());else if(Z.startsWith("-"))dY(`unknown flag "${Z}"`);else if(z.path===void 0)z.path=Z;else dY(`unexpected argument "${Z}"`)}return z}function $b(J){let z,Y=!1,Z=!1;for(let G of J)if(G==="--init-script")Y=!0;else if(G==="--init-prompt")Z=!0;else if(G.startsWith("-"))dY(`unknown flag "${G}"`);else if(z===void 0)z=G;else dY(`unexpected argument "${G}"`);if(!Y&&!Z)Y=!0,Z=!0;return{path:z,clearScript:Y,clearPrompt:Z}}async function ab(J){let[z,...Y]=J;if(z===void 0||z==="--help"||z==="-h"||z==="help"){process.stdout.write(`${PU}
137
+ `);return}let{getRepoInitOverride:Z,setRepoInitOverride:G,resolveRepoRoot:X}=await Promise.resolve().then(() => (O1(),_z)),{existsSync:Q}=await import("fs"),{join:f}=await import("path");if(z==="show"){let[H]=Y.filter((L)=>!L.startsWith("-")),B=X(mf(process.cwd(),H??".")),V=Z(B),j=Q(f(B,".kobe","init.sh")),K=Q(f(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?xG(V.initScript):"(unset)"}`),console.log(` override initPrompt: ${V.initPrompt?xG(V.initPrompt):"(unset)"}`);return}if(z==="set"){let H=lb(Y);if(H.initScript===void 0&&H.initPrompt===void 0)dY("set needs at least one of --init-script(-file) / --init-prompt(-file)");let B=X(mf(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?xG(V.initScript):"(unset)"}`),console.log(` initPrompt: ${V.initPrompt?xG(V.initPrompt):"(unset)"}`);return}if(z==="unset"){let{path:H,clearScript:B,clearPrompt:V}=$b(Y),j=X(mf(process.cwd(),H??".")),K=G(j,{...B?{initScript:""}:{},...V?{initPrompt:""}:{}});console.log(`cleared override for ${j}`),console.log(` initScript: ${K.initScript?xG(K.initScript):"(unset)"}`),console.log(` initPrompt: ${K.initPrompt?xG(K.initPrompt):"(unset)"}`);return}dY(`unknown verb "${z}"`)}function xG(J){let z=J.replace(/\s+/g," ").trim();return z.length>60?`"${z.slice(0,57)}\u2026"`:`"${z}"`}var PU;var vU=N(()=>{PU=["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(`
138
+ `)});import{spawnSync as _b}from"child_process";function ob(J){let[z,Y]=J.split("/");if(!z||!Y)throw Error(`invalid GitHub repository slug: ${J}`);return{owner:z,name:Y}}function mU(J,z){let Y=J.trim();if(!Y)throw Error(`${z} is required`);return Y}function cU(J,z){let Y=z?.map((Z)=>typeof Z.message==="string"?Z.message:null).filter((Z)=>!!Z);if(Y&&Y.length>0)return Y.join("; ");return J.trim()||"GitHub CLI returned an empty response"}function dU(J,z,Y){let Z=["api","graphql","-f",`query=${J}`];for(let[H,B]of Object.entries(z))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??""),f;try{f=JSON.parse(X)}catch{throw Error(`failed to parse gh response: ${cU(Q,void 0)}`)}if((G.status??0)!==0||f.errors?.length)throw Error(cU(Q,f.errors));if(!f.data)throw Error("GitHub CLI response did not include data");return f.data}function sb(J){return`${J}
139
139
 
140
140
  ---
141
- Submitted from kobe ${t0}.`}function NZ(f,Y={}){let J=IU(f.title,"feedback title"),z=aN(IU(f.body,"feedback body")),Z=(Y.repoSlug??rJ)();if(!Z)throw Error("package repository is not a GitHub repository");let{owner:G,name:Q}=lN(Z),q=f.categorySlug?.trim()||i8,H={spawn:Y.spawn??nN},V=uU(dN,{owner:G,name:Q},H).repository,j=V?.id;if(!j)throw Error(`GitHub repository not found: ${Z}`);let K=V.discussionCategories?.nodes?.find((M)=>M.slug===q);if(!K)throw Error(`GitHub Discussion category not found: ${q}`);let O=uU(iN,{repositoryId:j,categoryId:K.id,title:J,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 i8="feedback",dN=`
141
+ Submitted from kobe ${t0}.`}function EG(J,z={}){let Y=mU(J.title,"feedback title"),Z=sb(mU(J.body,"feedback body")),G=(z.repoSlug??eY)();if(!G)throw Error("package repository is not a GitHub repository");let{owner:X,name:Q}=ob(G),f=J.categorySlug?.trim()||Oj,H={spawn:z.spawn??_b},V=dU(pb,{owner:X,name:Q},H).repository,j=V?.id;if(!j)throw Error(`GitHub repository not found: ${G}`);let K=V.discussionCategories?.nodes?.find((F)=>F.slug===f);if(!K)throw Error(`GitHub Discussion category not found: ${f}`);let A=dU(rb,{repositoryId:j,categoryId:K.id,title:Y,body:Z},H).createDiscussion?.discussion;if(!A?.url||typeof A.number!=="number")throw Error("GitHub did not return the created Discussion");return{number:A.number,url:A.url}}var Oj="feedback",pb=`
142
142
  query($owner: String!, $name: String!) {
143
143
  repository(owner: $owner, name: $name) {
144
144
  id
@@ -151,7 +151,7 @@ query($owner: String!, $name: String!) {
151
151
  }
152
152
  }
153
153
  }
154
- `,iN=`
154
+ `,rb=`
155
155
  mutation($repositoryId: ID!, $categoryId: ID!, $title: String!, $body: String!) {
156
156
  createDiscussion(input: {
157
157
  repositoryId: $repositoryId,
@@ -165,74 +165,74 @@ mutation($repositoryId: ID!, $categoryId: ID!, $title: String!, $body: String!)
165
165
  }
166
166
  }
167
167
  }
168
- `;var Oq=N(()=>{Df()});async function EU(f={}){let Y=f.mode==="require-running"?await rf():await KY();if(!Y)return null;return{client:Y,close:()=>Y.close()}}var xU=N(()=>{Lf()});var aU={};H1(aU,{verbSchema:()=>_8,verbHelp:()=>dU,validateAgainstSpec:()=>$8,schemaIndex:()=>cU,runApiSubcommand:()=>Db,parseFlags:()=>a8,parseAgentsSpec:()=>vU,invokeVerb:()=>Ub,fullSchema:()=>nU,findVerb:()=>wG,deliverPrompt:()=>iU,defaultApiRuntime:()=>r8,apiUsage:()=>Aq,VerbArgs:()=>p8,VERB_GROUPS:()=>kZ,VERBS:()=>yZ,FANOUT_CAP:()=>bZ,ApiError:()=>M1,API_VERBS:()=>_N,API_SCHEMA_VERSION:()=>l8});import{resolve as wU}from"path";function PU(f){for(let[Y,J]of Object.entries(kZ))if(J.includes(f))return Y;return"other"}async function pN(f){let Y=f.args.str("verb");if(Y){let z=wG(Y);if(!z)throw new M1(`unknown verb: ${Y}`,"BAD_VERB");return _8(z)}let J=f.args.str("group");if(J)return oN(J);if(f.args.bool("all"))return nU();return cU()}function wG(f){let Y=Rq[f]??f;return yZ.find((J)=>J.name===Y)}function a8(f,Y=new Set){let J=new Map,z=!1,Z=!1;for(let G=0;G<f.length;G++){let Q=f[G];if(!Q.startsWith("--")&&Q!=="-h")throw new M1(`unexpected positional arg: ${Q}`,"BAD_FLAG");if(Q==="-h"){Z=!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")Z=j!=="false"&&j!=="0";else J.set(V,j);continue}let H=Q.slice(2);if(H==="pretty"){z=!0;continue}if(H==="help"){Z=!0;continue}if(Y.has(H)){J.set(H,"true");continue}let B=f[G+1];if(B===void 0||B.startsWith("--"))throw new M1(`flag --${H} requires a value`,"BAD_FLAG");J.set(H,B),G+=1}return{flags:J,pretty:z,help:Z}}function $8(f,Y){let J=new Set(f.flags.map((z)=>z.name));for(let z of Y.keys())if(!J.has(z))throw new M1(`unknown flag --${z} for "${f.name}". Run \`kobe api ${f.name} --help\``,"BAD_FLAG");for(let z of f.flags){if(z.required&&!Y.get(z.name))throw new M1(`--${z.name} is required for "${f.name}"`,"MISSING_FLAG");if(z.type==="enum"&&z.values){let Z=Y.get(z.name);if(Z!==void 0&&!z.values.includes(Z))throw new M1(`--${z.name} must be one of ${z.values.join(", ")}`,"BAD_FLAG")}if(z.type==="int"){let Z=Y.get(z.name);if(Z!==void 0){let G=Number.parseInt(Z,10);if(!Number.isInteger(G)||G<=0)throw new M1(`--${z.name} must be a positive integer`,"BAD_FLAG")}}}}class p8{verb;flags;constructor(f,Y){this.verb=f;this.flags=Y}spec(f){let Y=this.verb.flags.find((J)=>J.name===f);if(!Y)throw Error(`internal: --${f} is not declared on verb "${this.verb.name}"`);return Y}str(f){this.spec(f);let Y=this.flags.get(f);return Y&&Y.length>0?Y:void 0}require(f){let Y=this.str(f);if(Y===void 0)throw new M1(`--${f} is required`,"MISSING_FLAG");return Y}enumOf(f){let Y=this.spec(f),J=this.str(f);if(J===void 0)return;if(Y.values&&!Y.values.includes(J))throw new M1(`--${f} must be one of ${Y.values.join(", ")}`,"BAD_FLAG");return J}requireEnum(f){return this.require(f),this.enumOf(f)}vendor(){return this.enumOf("vendor")}bool(f){this.spec(f);let Y=this.str(f);if(Y===void 0)return;if(["true","1","yes"].includes(Y))return!0;if(["false","0","no"].includes(Y))return!1;throw new M1(`--${f} must be a boolean (true/false)`,"BAD_FLAG")}int(f){this.spec(f);let Y=this.str(f);if(Y===void 0)return;let J=Number.parseInt(Y,10);if(!Number.isInteger(J)||J<=0)throw new M1(`--${f} must be a positive integer`,"BAD_FLAG");return J}path(f){let Y=this.str(f);return Y===void 0?void 0:wU(process.cwd(),Y)}requirePath(f){return wU(process.cwd(),this.require(f))}}function vU(f){let Y=[];for(let J of f.split(",")){let z=J.trim();if(!z)continue;let Z=z.indexOf(":");if(Z===-1)throw new M1(`--agents entry "${z}" must be vendor:count`,"BAD_FLAG");let G=z.slice(0,Z);if(!m1.includes(G))throw new M1(`--agents vendor "${G}" must be one of ${m1.join(", ")}`,"BAD_FLAG");let Q=Number.parseInt(z.slice(Z+1),10);if(!Number.isInteger(Q)||Q<=0)throw new M1(`--agents count for "${G}" must be a positive integer`,"BAD_FLAG");if(Y.length+Q>bZ)throw new M1(`--agents requests ${Y.length+Q} agents, exceeds the cap of ${bZ}`,"BAD_FLAG");for(let q=0;q<Q;q++)Y.push(G)}if(Y.length===0)throw new M1('--agents specified no agents (e.g. "claude:2,codex:1")',"BAD_FLAG");return Y}function rN(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 _8(f){return{name:f.name,group:PU(f.name),summary:f.summary,offline:f.offline??!1,flags:f.flags.map(rN)}}function cU(){return{apiVersion:l8,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:kZ,verbs:yZ.map((f)=>({name:f.name,group:PU(f.name),summary:f.summary})),globalFlags:mU,aliases:Rq}}function oN(f){let Y=kZ[f];if(!Y)throw new M1(`unknown group: ${f}. Groups: ${Object.keys(kZ).join(", ")}`,"BAD_FLAG");return{group:f,verbs:Y.map((J)=>{let z=wG(J);return{name:J,summary:z?.summary??""}})}}function nU(){return{apiVersion:l8,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:mU,aliases:Rq,groups:kZ,verbs:yZ.map(_8)}}function sN(f){return f.flags.map((Y)=>{let J=Y.type==="enum"&&Y.values?Y.values.join("|"):Y.placeholder??(Y.type==="bool"?"":"X"),z=J?`--${Y.name} ${J}`:`--${Y.name}`;return Y.required?z:`[${z}]`}).join(" ")}function dU(f){let Y=[`kobe api ${f.name} ${sN(f)}`.trimEnd(),"",f.summary,""],J=Object.entries(Rq).find(([,z])=>z===f.name)?.[0];if(J)Y.push(`Alias: ${J}`,"");if(f.flags.length>0){Y.push("Flags:");for(let z of f.flags){let Z=z.required?" (required)":"",G=z.default!==void 0?` [default: ${z.default}]`:"",Q=z.type==="enum"&&z.values?` {${z.values.join("|")}}`:"";Y.push(` --${z.name}${Q}${Z}${G} ${z.description}`)}Y.push("")}return Y.push("Global: [--pretty] [--help]"),Y.join(`
169
- `)}function Aq(){return["usage: kobe api <verb> [flags] [--pretty] [--help]","","Explore the full surface (names, flags, types) with: kobe api schema","","verbs:",...yZ.map((Y)=>` ${Y.name.padEnd(18)} ${Y.summary}`),"","Output is one JSON object on stdout (exit 0); errors are JSON on stderr (exit != 0)."].join(`
170
- `)}function tN(f,Y){let J=Y?JSON.stringify(f,null,2):JSON.stringify(f);process.stdout.write(`${J}
171
- `)}function ZJ(f,Y,J=1){process.stderr.write(`${JSON.stringify({error:{message:f,code:Y}})}
172
- `),process.exit(J)}async function iU(f,Y,J,z=eN){let Z=Y.worktreePath;if(!Z)Z=(await f.request("task.ensureWorktree",{taskId:Y.id})).worktreePath;if(!Z)throw new M1(`task ${Y.id} has no worktree`,"NO_WORKTREE");let G=L1(Y.id),Q=await z.sessionExists(G);if(!Q){let B=await z.resolveEngineLaunchInit(Y.repo??"",Z,{kind:"none"});if(!await z.ensureSession({name:G,cwd:Z,command:z.engineCommand(Y.vendor),taskId:Y.id,vendor:Y.vendor,repo:Y.repo,launchInit:B}))throw new M1(`failed to start tmux session for ${Y.id}`,"SESSION_FAILED")}let{pane:q,ready:H}=await z.waitForEnginePane(G,!Q);if(!q)throw new M1(`no engine pane in session ${G}`,"NO_ENGINE_PANE");return await z.pasteAndSubmit(q,J),{session:G,pane:q,started:!Q,engineReady:H}}async function fb(f){let Y=null,J=f.onChannel("active-task",(z)=>{Y=z.taskId});try{await f.subscribe()}finally{J()}return Y}function hf(f){if(!f.client)throw new M1("daemon required","BAD_DAEMON");return f.client}async function DY(f,Y,J){return hf(f).request(Y,J)}async function Yb(f){let Y=f.args.str("title"),J=f.args.str("body");if(Y===void 0&&J===void 0)throw new M1("issue-update requires --title and/or --body","MISSING_FLAG");return DY(f,"issue.mutate",{repoRoot:f.args.requirePath("repo"),op:{type:"update",id:f.args.int("id"),title:Y,body:J}})}async function Jb(f){let Y=hf(f),{args:J,runtime:z}=f,G={repo:await z.resolveRepoRoot(J.requirePath("repo"))},Q=J.str("title");if(Q)G.title=Q;let q=J.str("branch");if(q)G.branch=q;let H=J.str("base-branch");if(H)G.baseRef=H;let B=J.vendor()??await z.defaultVendor();if(B)G.vendor=B;let V=await Y.request("task.create",G),j=V.taskId;await Y.request("task.setActive",{taskId:j});let K=J.enumOf("status");if(K)await Y.request("task.status",{taskId:j,status:K});let L=J.bool("pin");if(L!==void 0)await Y.request("task.pin",{taskId:j,pinned:L});let O=V.task;if(K||L!==void 0)O=(await Y.request("task.get",{taskId:j})).task;let M=J.str("prompt");if(!M)return{taskId:j,task:O,started:!1};let R=await f.runtime.deliverPrompt(Y,{id:j,worktreePath:O.worktreePath,vendor:O.vendor,repo:O.repo},M);return O=(await Y.request("task.get",{taskId:j})).task,{taskId:j,task:O,started:R.started,engineReady:R.engineReady,session:R.session}}async function zb(f){let Y=hf(f),J=f.args.require("prompt"),z=f.args.str("task-id");if(!z){let Q=await fb(Y);if(!Q)throw new M1("no --task-id given and no active task \u2014 open a task first or pass --task-id","MISSING_TARGET");z=Q}let Z=await Y.request("task.get",{taskId:z}),G=await f.runtime.deliverPrompt(Y,{id:z,worktreePath:Z.task.worktreePath,vendor:Z.task.vendor,repo:Z.task.repo},J);return{ok:!0,taskId:z,session:G.session,started:G.started,engineReady:G.engineReady}}async function Zb(f){let Y=hf(f),J=f.args.require("task-id"),z=f.args.require("prompt");return await Y.request("session.deliver",{taskId:J,text:z,source:"dispatcher"}),{ok:!0,taskId:J,routed:"session.deliver"}}async function Gb(f){let Y=hf(f),J=f.args.require("task-id"),z=f.args.require("text");return await Y.request("note.file",{taskId:J,text:z})}async function Xb(f){let Y=hf(f),J=f.args.require("task-id"),z=await Y.request("task.get",{taskId:J}),Z=await f.runtime.isTaskRunning(J);return{task:z.task,running:Z}}async function Qb(f){return hf(f).request("task.list")}async function qb(f){let Y=hf(f),z=f.args.bool("none")?null:f.args.require("task-id");return await Y.request("task.setActive",{taskId:z}),{ok:!0,activeTaskId:z}}async function Hb(f){let Y=hf(f),J=f.args.require("task-id"),z=f.args.bool("archived")??!0,Z=await Y.request("task.archive",{taskId:J,archived:z});if(z)await f.runtime.tearDownSession(J);return Z}async function Bb(f){let Y=hf(f),J=f.args.require("task-id"),z=f.args.bool("force")??!1,Z=await Y.request("task.delete",{taskId:J,force:z});return await f.runtime.tearDownSession(J),Z}async function jb(f){let Y=hf(f),{args:J}=f,z={repo:J.requirePath("repo"),worktreePath:J.requirePath("worktree")},Z=J.str("branch");if(Z)z.branch=Z;let G=J.vendor();if(G)z.vendor=G;let Q=J.str("title");if(Q)z.title=Q;return Y.request("worktree.adopt",z)}async function Wb(f){let Y=hf(f),{args:J,runtime:z}=f,Z=await z.resolveRepoRoot(J.requirePath("repo")),G=J.require("prompt"),Q=J.str("title"),q=J.str("base-branch"),H=J.str("agents"),B=await z.defaultVendor(),V=H?vU(H):Array(J.int("count")??1).fill(J.vendor()??B??"claude");if(V.length>bZ)throw new M1(`fan-out of ${V.length} exceeds the cap of ${bZ} \u2014 spawn in batches`,"BAD_FLAG");let j=[];for(let K of V){let L={repo:Z,vendor:K};if(Q)L.title=Q;if(q)L.baseRef=q;let O=await Y.request("task.create",L),M=await f.runtime.deliverPrompt(Y,{id:O.taskId,worktreePath:O.task.worktreePath,vendor:K,repo:O.task.repo},G);j.push({taskId:O.taskId,vendor:K,started:M.started,engineReady:M.engineReady,session:M.session})}return{count:j.length,tasks:j}}async function Vb(f){let Y=hf(f),{args:J,runtime:z}=f,Z=J.str("task-ids"),G=J.path("repo"),Q;if(Z)Q=Z.split(",").map((H)=>H.trim()).filter(Boolean);else if(G){let H=await z.resolveRepoRoot(G),{tasks:B}=await Y.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 M1("collect needs --task-ids id1,id2 or --repo PATH","MISSING_TARGET");let q=[];for(let H of Q){let{task:B}=await Y.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 Kb(f){return{ok:!0,discussion:NZ({title:f.args.require("title"),body:f.args.require("body"),categorySlug:f.args.str("category")})}}function lU(f,Y,J,z){return{args:new p8(f,Y),client:J,runtime:z}}async function Ub(f,Y,J){let z=wG(f);if(!z)throw new M1(`unknown verb: ${f}`,"BAD_VERB");let Z=new Set(z.flags.filter((Q)=>Q.type==="bool").map((Q)=>Q.name)),G=a8(Y,Z);return $8(z,G.flags),z.handler(lU(z,G.flags,J.client,J.runtime??r8))}async function Db(f){let[Y,...J]=f;if(!Y||Y==="--help"||Y==="-h"||Y==="help"){if(!Y)ZJ(Aq(),"MISSING_VERB",2);process.stdout.write(`${Aq()}
173
- `);return}let z=wG(Y);if(!z)ZJ(`unknown verb: ${Y}
174
- ${Aq()}`,"BAD_VERB",2);let Z=new Set(z.flags.filter((q)=>q.type==="bool").map((q)=>q.name)),G;try{G=a8(J,Z)}catch(q){if(q instanceof M1)ZJ(q.message,q.code,2);ZJ(q instanceof Error?q.message:String(q),"BAD_FLAG",2)}if(G.help){process.stdout.write(`${dU(z)}
175
- `);return}try{$8(z,G.flags)}catch(q){if(q instanceof M1)ZJ(q.message,q.code,2);ZJ(q instanceof Error?q.message:String(q),"BAD_FLAG",2)}let Q=null;if(!z.offline)try{Q=await EU()}catch(q){ZJ(`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,G.flags,Q?.client??null,r8));tN(q,G.pretty)}catch(q){if(q instanceof M1)ZJ(q.message,q.code,1);ZJ(q instanceof Error?q.message:String(q),"RPC_ERROR",1)}finally{Q?.close()}}var l8=2,bZ=10,hU,$N,M1,V1,Rq,kZ,yZ,_N,mU,eN,r8;var $U=N(()=>{Ef();Oq();u1();PQ();$1();Df();xU();hU=["backlog","in_progress","in_review","done","canceled","error"],$N=["open","doing","hold","done"];M1=class M1 extends Error{code;constructor(f,Y){super(f);this.code=Y}};V1={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:m1,placeholder:"V",description:"Engine vendor for the task."}),title:()=>({name:"title",type:"string",placeholder:"T",description:"Human task title."}),prompt:(f,Y)=>({name:"prompt",type:"string",required:f,placeholder:"TEXT",description:Y})},Rq={"spawn-task":"add"},kZ={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"]};yZ=[{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:pN},{name:"list",summary:"List all tasks (incl. archived). Returns { tasks }.",flags:[],handler:Qb},{name:"get-task",summary:"Read one task's metadata. `.running` = its tmux session is live.",flags:[V1.taskId()],handler:Xb},{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:[V1.repo(),V1.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."},V1.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."},V1.prompt(!1,"Optional first message \u2014 when set, materializes the worktree, starts the engine, and pastes it.")],handler:Jb},{name:"fan-out",summary:`Spawn N tasks of ONE prompt in a single call (parallel attempts). Capped at ${bZ}.`,flags:[V1.repo(),V1.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)."},V1.vendor(),V1.title(),{name:"base-branch",type:"string",placeholder:"B",description:"Base ref for every worktree."}],handler:Wb},{name:"send",summary:"Paste a follow-up prompt into a task's running engine (one full turn). Defaults to the active task.",flags:[V1.taskId(!1),V1.prompt(!0,"Text pasted + submitted into the engine pane.")],handler:zb},{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:[V1.taskId(!0),V1.prompt(!0,"Text delivered into the task's engine session.")],handler:Zb},{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:[V1.taskId(!0),{name:"text",type:"string",required:!0,placeholder:"TEXT",description:"One line: the verified conclusion another session could act on."}],handler:Gb},{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:i8,placeholder:"SLUG",description:"Discussion category slug."}],offline:!0,handler:Kb},{name:"issue-list",summary:"List daemon-owned issues for a repo.",flags:[V1.repo()],handler:(f)=>DY(f,"issue.list",{repoRoot:f.args.requirePath("repo")})},{name:"issue-create",summary:"Create a daemon-owned issue for a repo.",flags:[V1.repo(),{name:"title",type:"string",required:!0,placeholder:"T",description:"Issue title."},{name:"body",type:"string",placeholder:"TEXT",description:"Issue body."}],handler:(f)=>DY(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:[V1.repo(),{name:"id",type:"int",required:!0,placeholder:"N",description:"Issue id."},{name:"status",type:"enum",required:!0,values:$N,description:"New issue status."}],handler:(f)=>DY(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:[V1.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:Yb},{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."},V1.repo(!1)],handler:Vb},{name:"rename",summary:"Set a task's title.",flags:[V1.taskId(),{name:"title",type:"string",required:!0,placeholder:"T",description:"New title."}],handler:(f)=>DY(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:[V1.taskId(),{name:"branch",type:"string",required:!0,placeholder:"B",description:"New branch name."}],handler:(f)=>DY(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:[V1.taskId(),{...V1.vendor(),required:!0}],handler:(f)=>DY(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:[V1.taskId(),{name:"status",type:"enum",required:!0,values:hU,description:"New status."}],handler:(f)=>DY(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:[V1.taskId(),{name:"archived",type:"bool",default:"true",description:"true to archive, false to unarchive."}],handler:Hb},{name:"pin",summary:"Pin (or with --pinned=false, unpin) a task to the top of the sidebar.",flags:[V1.taskId(),{name:"pinned",type:"bool",default:"true",description:"true to pin, false to unpin."}],handler:(f)=>DY(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:[V1.taskId(!1),{name:"none",type:"bool",description:"Clear the active task instead of setting one."}],handler:qb},{name:"ensure-worktree",summary:"Materialize a task's git worktree on disk now (without starting an engine). Returns { worktreePath }.",flags:[V1.taskId()],handler:(f)=>DY(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:[V1.taskId(),{name:"force",type:"bool",description:"Delete even with uncommitted changes."}],handler:Bb},{name:"discover-adoptable",summary:"List existing git worktrees in a repo not yet tracked as kobe tasks. Returns { worktrees }.",flags:[V1.repo()],handler:(f)=>DY(f,"worktree.discoverAdoptable",{repo:f.args.requirePath("repo")})},{name:"adopt",summary:"Import an existing git worktree as a kobe task. Returns { task }.",flags:[V1.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)."},V1.vendor(),V1.title()],handler:jb}],_N=yZ.map((f)=>f.name);mU=[{name:"pretty",type:"bool",description:"Pretty-print stdout JSON."},{name:"help",type:"bool",description:"Show usage for the verb and exit."}];eN={sessionExists:j1,ensureSession:async(f)=>(await Promise.resolve().then(() => (Gf(),_f))).ensureSession(f),waitForEnginePane:gG,pasteAndSubmit:CG,resolveEngineLaunchInit:async(f,Y,J)=>(await Promise.resolve().then(() => (jZ(),X8))).resolveEngineLaunchInit(f,Y,J),engineCommand:yf};r8={isTaskRunning:(f)=>j1(L1(f)),deliverPrompt:(f,Y,J)=>iU(f,Y,J),resolveRepoRoot:async(f)=>(await Promise.resolve().then(() => (A1(),iY))).resolveMainRepoRoot(f),defaultVendor:async()=>{let{getPersistedString:f}=await Promise.resolve().then(() => (A1(),iY)),Y=f("lastSelectedVendor")?.trim();return Y?Y:void 0},readWorktreeChanges:async(f)=>(await Promise.resolve().then(() => (FZ(),nK))).readWorktreeChanges(f),tearDownSession:async(f)=>{let Y=L1(f);await yY(Y).catch(()=>{}),await af(Y).catch(()=>{})}}});var oU={};H1(oU,{updatePlan:()=>pU,runUpdateSubcommand:()=>Mb,parseUpdateArgs:()=>_U});import{spawnSync as Lb}from"child_process";function pU(){return{command:"sh",args:["-c",vY],display:vY}}function _U(f){let Y=!1;for(let J=0;J<f.length;J+=1){let z=f[J];if(z==="--help"||z==="-h"||z==="help")return{help:!0,dryRun:Y};if(z==="--dry-run"){Y=!0;continue}process.stderr.write(`kobe update: unknown argument "${z}"
176
-
177
- `),rU(process.stderr),process.exit(2)}return{help:!1,dryRun:Y}}function rU(f){f.write(["Usage: kobe update [--dry-run]","","Runs kobe's GitHub-hosted update script.","","Default command:",` ${vY}`,"","Script URL:",` ${WX}`,"","Manual fallback:",` ${jH()}`,"","Examples:"," kobe update"," kobe update --dry-run",""].join(`
178
- `))}async function Mb(f,Y){let J={spawn:Y?.spawn??Lb,stdout:Y?.stdout??process.stdout,stderr:Y?.stderr??process.stderr,exit:Y?.exit??((Q)=>process.exit(Q))},z=_U(f);if(z.help){rU(J.stdout);return}let Z=pU();if(J.stdout.write(`kobe ${t0} -> latest
179
- `),J.stdout.write(`running: ${Z.display}
180
- `),z.dryRun)return;let G=J.spawn(Z.command,Z.args,{stdio:"inherit"});if(G.error)J.stderr.write(`kobe update: failed to run ${Z.command}: ${G.error.message}
181
- `),J.exit(1);J.exit(G.status??1)}var sU=N(()=>{Df()});var Y6={};H1(Y6,{runThemeSubcommand:()=>Ib});import{existsSync as eU,mkdirSync as Fb,readFileSync as Ob,readdirSync as Ab,unlinkSync as Rb,writeFileSync as gb}from"fs";import{basename as tU,join as s8,resolve as Cb}from"path";function GJ(f){process.stderr.write(`kobe theme: ${f}
182
- `),process.exit(1)}function PJ(f){process.stderr.write(`kobe theme: ${f}
183
-
184
- `),f6(),process.exit(2)}function Nb(){let f=[];f.push("bundled:");for(let z of[...o8].sort())f.push(` ${z} [built-in]`);let Y=KZ(),J=[];try{J=Ab(Y).filter((z)=>z.endsWith(".json")).sort()}catch{}if(f.push(""),f.push(`user (${Y}):`),J.length===0)f.push(" (none)");else for(let z of J){let Z=z.slice(0,-5),G=s8(Y,z),Q=o8.includes(Z)?" (overrides built-in)":"";f.push(` ${Z}${Q} ${G}`)}process.stdout.write(`${f.join(`
168
+ `;var cf=N(()=>{FJ()});async function nU(J={}){let z=J.mode==="require-running"?await eJ():await Fz();if(!z)return null;return{client:z,close:()=>z.close()}}var iU=N(()=>{OJ()});var J4={};B1(J4,{verbSchema:()=>Nj,verbHelp:()=>sU,validateAgainstSpec:()=>gj,schemaIndex:()=>rU,runApiSubcommand:()=>RS,parseFlags:()=>Rj,parseAgentsSpec:()=>_U,invokeVerb:()=>AS,fullSchema:()=>oU,findVerb:()=>aX,deliverPrompt:()=>tU,defaultApiRuntime:()=>kj,apiUsage:()=>df,VerbArgs:()=>Cj,VERB_GROUPS:()=>PG,VERBS:()=>hG,FANOUT_CAP:()=>wG,ApiError:()=>F1,API_VERBS:()=>JS,API_SCHEMA_VERSION:()=>Aj});import{resolve as lU}from"path";function aU(J){for(let[z,Y]of Object.entries(PG))if(Y.includes(J))return z;return"other"}async function eb(J){let z=J.args.str("verb");if(z){let Z=aX(z);if(!Z)throw new F1(`unknown verb: ${z}`,"BAD_VERB");return Nj(Z)}let Y=J.args.str("group");if(Y)return YS(Y);if(J.args.bool("all"))return oU();return rU()}function aX(J){let z=nf[J]??J;return hG.find((Y)=>Y.name===z)}function Rj(J,z=new Set){let Y=new Map,Z=!1,G=!1;for(let X=0;X<J.length;X++){let Q=J[X];if(!Q.startsWith("--")&&Q!=="-h")throw new F1(`unexpected positional arg: ${Q}`,"BAD_FLAG");if(Q==="-h"){G=!0;continue}let f=Q.indexOf("=");if(f!==-1){let V=Q.slice(2,f),j=Q.slice(f+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(z.has(H)){Y.set(H,"true");continue}let B=J[X+1];if(B===void 0||B.startsWith("--"))throw new F1(`flag --${H} requires a value`,"BAD_FLAG");Y.set(H,B),X+=1}return{flags:Y,pretty:Z,help:G}}function gj(J,z){let Y=new Set(J.flags.map((Z)=>Z.name));for(let Z of z.keys())if(!Y.has(Z))throw new F1(`unknown flag --${Z} for "${J.name}". Run \`kobe api ${J.name} --help\``,"BAD_FLAG");for(let Z of J.flags){if(Z.required&&!z.get(Z.name))throw new F1(`--${Z.name} is required for "${J.name}"`,"MISSING_FLAG");if(Z.type==="enum"&&Z.values){let G=z.get(Z.name);if(G!==void 0&&!Z.values.includes(G))throw new F1(`--${Z.name} must be one of ${Z.values.join(", ")}`,"BAD_FLAG")}if(Z.type==="int"){let G=z.get(Z.name);if(G!==void 0){let X=Number.parseInt(G,10);if(!Number.isInteger(X)||X<=0)throw new F1(`--${Z.name} must be a positive integer`,"BAD_FLAG")}}}}class Cj{verb;flags;constructor(J,z){this.verb=J;this.flags=z}spec(J){let z=this.verb.flags.find((Y)=>Y.name===J);if(!z)throw Error(`internal: --${J} is not declared on verb "${this.verb.name}"`);return z}str(J){this.spec(J);let z=this.flags.get(J);return z&&z.length>0?z:void 0}require(J){let z=this.str(J);if(z===void 0)throw new F1(`--${J} is required`,"MISSING_FLAG");return z}enumOf(J){let z=this.spec(J),Y=this.str(J);if(Y===void 0)return;if(z.values&&!z.values.includes(Y))throw new F1(`--${J} must be one of ${z.values.join(", ")}`,"BAD_FLAG");return Y}requireEnum(J){return this.require(J),this.enumOf(J)}vendor(){return this.enumOf("vendor")}bool(J){this.spec(J);let z=this.str(J);if(z===void 0)return;if(["true","1","yes"].includes(z))return!0;if(["false","0","no"].includes(z))return!1;throw new F1(`--${J} must be a boolean (true/false)`,"BAD_FLAG")}int(J){this.spec(J);let z=this.str(J);if(z===void 0)return;let Y=Number.parseInt(z,10);if(!Number.isInteger(Y)||Y<=0)throw new F1(`--${J} must be a positive integer`,"BAD_FLAG");return Y}path(J){let z=this.str(J);return z===void 0?void 0:lU(process.cwd(),z)}requirePath(J){return lU(process.cwd(),this.require(J))}}function _U(J){let z=[];for(let Y of J.split(",")){let Z=Y.trim();if(!Z)continue;let G=Z.indexOf(":");if(G===-1)throw new F1(`--agents entry "${Z}" must be vendor:count`,"BAD_FLAG");let X=Z.slice(0,G);if(!i1.includes(X))throw new F1(`--agents vendor "${X}" must be one of ${i1.join(", ")}`,"BAD_FLAG");let Q=Number.parseInt(Z.slice(G+1),10);if(!Number.isInteger(Q)||Q<=0)throw new F1(`--agents count for "${X}" must be a positive integer`,"BAD_FLAG");if(z.length+Q>wG)throw new F1(`--agents requests ${z.length+Q} agents, exceeds the cap of ${wG}`,"BAD_FLAG");for(let f=0;f<Q;f++)z.push(X)}if(z.length===0)throw new F1('--agents specified no agents (e.g. "claude:2,codex:1")',"BAD_FLAG");return z}function zS(J){return{name:J.name,type:J.type,required:J.required??!1,...J.values?{values:J.values}:{},...J.default!==void 0?{default:J.default}:{},...J.placeholder?{placeholder:J.placeholder}:{},description:J.description}}function Nj(J){return{name:J.name,group:aU(J.name),summary:J.summary,offline:J.offline??!1,flags:J.flags.map(zS)}}function rU(){return{apiVersion:Aj,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:PG,verbs:hG.map((J)=>({name:J.name,group:aU(J.name),summary:J.summary})),globalFlags:pU,aliases:nf}}function YS(J){let z=PG[J];if(!z)throw new F1(`unknown group: ${J}. Groups: ${Object.keys(PG).join(", ")}`,"BAD_FLAG");return{group:J,verbs:z.map((Y)=>{let Z=aX(Y);return{name:Y,summary:Z?.summary??""}})}}function oU(){return{apiVersion:Aj,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:pU,aliases:nf,groups:PG,verbs:hG.map(Nj)}}function ZS(J){return J.flags.map((z)=>{let Y=z.type==="enum"&&z.values?z.values.join("|"):z.placeholder??(z.type==="bool"?"":"X"),Z=Y?`--${z.name} ${Y}`:`--${z.name}`;return z.required?Z:`[${Z}]`}).join(" ")}function sU(J){let z=[`kobe api ${J.name} ${ZS(J)}`.trimEnd(),"",J.summary,""],Y=Object.entries(nf).find(([,Z])=>Z===J.name)?.[0];if(Y)z.push(`Alias: ${Y}`,"");if(J.flags.length>0){z.push("Flags:");for(let Z of J.flags){let G=Z.required?" (required)":"",X=Z.default!==void 0?` [default: ${Z.default}]`:"",Q=Z.type==="enum"&&Z.values?` {${Z.values.join("|")}}`:"";z.push(` --${Z.name}${Q}${G}${X} ${Z.description}`)}z.push("")}return z.push("Global: [--pretty] [--help]"),z.join(`
169
+ `)}function df(){return["usage: kobe api <verb> [flags] [--pretty] [--help]","","Explore the full surface (names, flags, types) with: kobe api schema","","verbs:",...hG.map((z)=>` ${z.name.padEnd(18)} ${z.summary}`),"","Output is one JSON object on stdout (exit 0); errors are JSON on stderr (exit != 0)."].join(`
170
+ `)}function GS(J,z){let Y=z?JSON.stringify(J,null,2):JSON.stringify(J);process.stdout.write(`${Y}
171
+ `)}function fY(J,z,Y=1){process.stderr.write(`${JSON.stringify({error:{message:J,code:z}})}
172
+ `),process.exit(Y)}async function tU(J,z,Y,Z=XS){let G=z.worktreePath;if(!G)G=(await J.request("task.ensureWorktree",{taskId:z.id})).worktreePath;if(!G)throw new F1(`task ${z.id} has no worktree`,"NO_WORKTREE");let X=M1(z.id),Q=await Z.sessionExists(X);if(!Q){let B=await Z.resolveEngineLaunchInit(z.repo??"",G,{kind:"none"});if(!await Z.ensureSession({name:X,cwd:G,command:Z.engineCommand(z.vendor),taskId:z.id,vendor:z.vendor,repo:z.repo,launchInit:B}))throw new F1(`failed to start tmux session for ${z.id}`,"SESSION_FAILED")}let{pane:f,ready:H}=await Z.waitForEnginePane(X,!Q);if(!f)throw new F1(`no engine pane in session ${X}`,"NO_ENGINE_PANE");return await Z.pasteAndSubmit(f,Y),{session:X,pane:f,started:!Q,engineReady:H}}async function QS(J){let z=null,Y=J.onChannel("active-task",(Z)=>{z=Z.taskId});try{await J.subscribe()}finally{Y()}return z}function cJ(J){if(!J.client)throw new F1("daemon required","BAD_DAEMON");return J.client}async function Az(J,z,Y){return cJ(J).request(z,Y)}async function qS(J){let z=J.args.str("title"),Y=J.args.str("body");if(z===void 0&&Y===void 0)throw new F1("issue-update requires --title and/or --body","MISSING_FLAG");return Az(J,"issue.mutate",{repoRoot:J.args.requirePath("repo"),op:{type:"update",id:J.args.int("id"),title:z,body:Y}})}async function fS(J){let z=cJ(J),{args:Y,runtime:Z}=J,X={repo:await Z.resolveRepoRoot(Y.requirePath("repo"))},Q=Y.str("title");if(Q)X.title=Q;let f=Y.str("branch");if(f)X.branch=f;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 z.request("task.create",X),j=V.taskId;await z.request("task.setActive",{taskId:j});let K=Y.enumOf("status");if(K)await z.request("task.status",{taskId:j,status:K});let L=Y.bool("pin");if(L!==void 0)await z.request("task.pin",{taskId:j,pinned:L});let A=V.task;if(K||L!==void 0)A=(await z.request("task.get",{taskId:j})).task;let F=Y.str("prompt");if(!F)return{taskId:j,task:A,started:!1};let g=await J.runtime.deliverPrompt(z,{id:j,worktreePath:A.worktreePath,vendor:A.vendor,repo:A.repo},F);return A=(await z.request("task.get",{taskId:j})).task,{taskId:j,task:A,started:g.started,engineReady:g.engineReady,session:g.session}}async function HS(J){let z=cJ(J),Y=J.args.require("prompt"),Z=J.args.str("task-id");if(!Z){let Q=await QS(z);if(!Q)throw new F1("no --task-id given and no active task \u2014 open a task first or pass --task-id","MISSING_TARGET");Z=Q}let G=await z.request("task.get",{taskId:Z}),X=await J.runtime.deliverPrompt(z,{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 BS(J){let z=cJ(J),Y=J.args.require("task-id"),Z=J.args.require("prompt");return await z.request("session.deliver",{taskId:Y,text:Z,source:"dispatcher"}),{ok:!0,taskId:Y,routed:"session.deliver"}}async function jS(J){let z=cJ(J),Y=J.args.require("task-id"),Z=J.args.require("text");return await z.request("note.file",{taskId:Y,text:Z})}async function WS(J){let z=cJ(J),Y=J.args.require("task-id"),Z=await z.request("task.get",{taskId:Y}),G=await J.runtime.isTaskRunning(Y);return{task:Z.task,running:G}}async function VS(J){return cJ(J).request("task.list")}async function KS(J){let z=cJ(J),Z=J.args.bool("none")?null:J.args.require("task-id");return await z.request("task.setActive",{taskId:Z}),{ok:!0,activeTaskId:Z}}async function US(J){let z=cJ(J),Y=J.args.require("task-id"),Z=J.args.bool("archived")??!0,G=await z.request("task.archive",{taskId:Y,archived:Z});if(Z)await J.runtime.tearDownSession(Y);return G}async function DS(J){let z=cJ(J),Y=J.args.require("task-id"),Z=J.args.bool("force")??!1,G=await z.request("task.delete",{taskId:Y,force:Z});return await J.runtime.tearDownSession(Y),G}async function LS(J){let z=cJ(J),{args:Y}=J,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 z.request("worktree.adopt",Z)}async function MS(J){let z=cJ(J),{args:Y,runtime:Z}=J,G=await Z.resolveRepoRoot(Y.requirePath("repo")),X=Y.require("prompt"),Q=Y.str("title"),f=Y.str("base-branch"),H=Y.str("agents"),B=await Z.defaultVendor(),V=H?_U(H):Array(Y.int("count")??1).fill(Y.vendor()??B??"claude");if(V.length>wG)throw new F1(`fan-out of ${V.length} exceeds the cap of ${wG} \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(f)L.baseRef=f;let A=await z.request("task.create",L),F=await J.runtime.deliverPrompt(z,{id:A.taskId,worktreePath:A.task.worktreePath,vendor:K,repo:A.task.repo},X);j.push({taskId:A.taskId,vendor:K,started:F.started,engineReady:F.engineReady,session:F.session})}return{count:j.length,tasks:j}}async function FS(J){let z=cJ(J),{args:Y,runtime:Z}=J,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 z.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 F1("collect needs --task-ids id1,id2 or --repo PATH","MISSING_TARGET");let f=[];for(let H of Q){let{task:B}=await z.request("task.get",{taskId:H}),V=await Z.isTaskRunning(H),j=B.worktreePath?await Z.readWorktreeChanges(B.worktreePath):{added:0,deleted:0};f.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:f}}async function OS(J){return{ok:!0,discussion:EG({title:J.args.require("title"),body:J.args.require("body"),categorySlug:J.args.str("category")})}}function eU(J,z,Y,Z){return{args:new Cj(J,z),client:Y,runtime:Z}}async function AS(J,z,Y){let Z=aX(J);if(!Z)throw new F1(`unknown verb: ${J}`,"BAD_VERB");let G=new Set(Z.flags.filter((Q)=>Q.type==="bool").map((Q)=>Q.name)),X=Rj(z,G);return gj(Z,X.flags),Z.handler(eU(Z,X.flags,Y.client,Y.runtime??kj))}async function RS(J){let[z,...Y]=J;if(!z||z==="--help"||z==="-h"||z==="help"){if(!z)fY(df(),"MISSING_VERB",2);process.stdout.write(`${df()}
173
+ `);return}let Z=aX(z);if(!Z)fY(`unknown verb: ${z}
174
+ ${df()}`,"BAD_VERB",2);let G=new Set(Z.flags.filter((f)=>f.type==="bool").map((f)=>f.name)),X;try{X=Rj(Y,G)}catch(f){if(f instanceof F1)fY(f.message,f.code,2);fY(f instanceof Error?f.message:String(f),"BAD_FLAG",2)}if(X.help){process.stdout.write(`${sU(Z)}
175
+ `);return}try{gj(Z,X.flags)}catch(f){if(f instanceof F1)fY(f.message,f.code,2);fY(f instanceof Error?f.message:String(f),"BAD_FLAG",2)}let Q=null;if(!Z.offline)try{Q=await nU()}catch(f){fY(`could not reach or start the kobe daemon: ${f instanceof Error?f.message:String(f)}`,"BAD_DAEMON",2)}try{let f=await Z.handler(eU(Z,X.flags,Q?.client??null,kj));GS(f,X.pretty)}catch(f){if(f instanceof F1)fY(f.message,f.code,1);fY(f instanceof Error?f.message:String(f),"RPC_ERROR",1)}finally{Q?.close()}}var Aj=2,wG=10,$U,tb,F1,K1,nf,PG,hG,JS,pU,XS,kj;var z4=N(()=>{hJ();cf();P1();Yf();t1();FJ();iU();$U=["backlog","in_progress","in_review","done","canceled","error"],tb=["open","doing","hold","done"];F1=class F1 extends Error{code;constructor(J,z){super(J);this.code=z}};K1={repo:(J=!0)=>({name:"repo",type:"string",required:J,placeholder:"PATH",description:"Repo root (git toplevel). Relative paths resolve against $PWD."}),taskId:(J=!0)=>({name:"task-id",type:"string",required:J,placeholder:"ID",description:"Target task id (from `list` / `add`)."}),vendor:()=>({name:"vendor",type:"enum",values:i1,placeholder:"V",description:"Engine vendor for the task."}),title:()=>({name:"title",type:"string",placeholder:"T",description:"Human task title."}),prompt:(J,z)=>({name:"prompt",type:"string",required:J,placeholder:"TEXT",description:z})},nf={"spawn-task":"add"},PG={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"]};hG=[{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:eb},{name:"list",summary:"List all tasks (incl. archived). Returns { tasks }.",flags:[],handler:VS},{name:"get-task",summary:"Read one task's metadata. `.running` = its tmux session is live.",flags:[K1.taskId()],handler:WS},{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:[K1.repo(),K1.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."},K1.vendor(),{name:"status",type:"enum",values:$U,default:"backlog",description:"Initial lifecycle status."},{name:"pin",type:"bool",description:"Pin the task to the top of the sidebar."},K1.prompt(!1,"Optional first message \u2014 when set, materializes the worktree, starts the engine, and pastes it.")],handler:fS},{name:"fan-out",summary:`Spawn N tasks of ONE prompt in a single call (parallel attempts). Capped at ${wG}.`,flags:[K1.repo(),K1.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)."},K1.vendor(),K1.title(),{name:"base-branch",type:"string",placeholder:"B",description:"Base ref for every worktree."}],handler:MS},{name:"send",summary:"Paste a follow-up prompt into a task's running engine (one full turn). Defaults to the active task.",flags:[K1.taskId(!1),K1.prompt(!0,"Text pasted + submitted into the engine pane.")],handler:HS},{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:[K1.taskId(!0),K1.prompt(!0,"Text delivered into the task's engine session.")],handler:BS},{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:[K1.taskId(!0),{name:"text",type:"string",required:!0,placeholder:"TEXT",description:"One line: the verified conclusion another session could act on."}],handler:jS},{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:Oj,placeholder:"SLUG",description:"Discussion category slug."}],offline:!0,handler:OS},{name:"issue-list",summary:"List daemon-owned issues for a repo.",flags:[K1.repo()],handler:(J)=>Az(J,"issue.list",{repoRoot:J.args.requirePath("repo")})},{name:"issue-create",summary:"Create a daemon-owned issue for a repo.",flags:[K1.repo(),{name:"title",type:"string",required:!0,placeholder:"T",description:"Issue title."},{name:"body",type:"string",placeholder:"TEXT",description:"Issue body."}],handler:(J)=>Az(J,"issue.mutate",{repoRoot:J.args.requirePath("repo"),op:{type:"create",title:J.args.require("title"),body:J.args.str("body")}})},{name:"issue-set-status",summary:"Set a daemon-owned issue's status.",flags:[K1.repo(),{name:"id",type:"int",required:!0,placeholder:"N",description:"Issue id."},{name:"status",type:"enum",required:!0,values:tb,description:"New issue status."}],handler:(J)=>Az(J,"issue.mutate",{repoRoot:J.args.requirePath("repo"),op:{type:"setStatus",id:J.args.int("id"),status:J.args.requireEnum("status")}})},{name:"issue-update",summary:"Update a daemon-owned issue's title and/or body.",flags:[K1.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:qS},{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."},K1.repo(!1)],handler:FS},{name:"rename",summary:"Set a task's title.",flags:[K1.taskId(),{name:"title",type:"string",required:!0,placeholder:"T",description:"New title."}],handler:(J)=>Az(J,"task.rename",{taskId:J.args.require("task-id"),title:J.args.require("title")})},{name:"set-branch",summary:"Rename a task's branch (git branch -m if materialized, else recorded).",flags:[K1.taskId(),{name:"branch",type:"string",required:!0,placeholder:"B",description:"New branch name."}],handler:(J)=>Az(J,"task.setBranch",{taskId:J.args.require("task-id"),branch:J.args.require("branch")})},{name:"set-vendor",summary:"Change a task's engine vendor (takes effect on next session rebuild).",flags:[K1.taskId(),{...K1.vendor(),required:!0}],handler:(J)=>Az(J,"task.setVendor",{taskId:J.args.require("task-id"),vendor:J.args.requireEnum("vendor")})},{name:"set-status",summary:"Set a task's lifecycle status.",flags:[K1.taskId(),{name:"status",type:"enum",required:!0,values:$U,description:"New status."}],handler:(J)=>Az(J,"task.status",{taskId:J.args.require("task-id"),status:J.args.requireEnum("status")})},{name:"archive",summary:"Archive (or with --archived=false, unarchive) a task. Non-destructive: worktree/branch/history stay.",flags:[K1.taskId(),{name:"archived",type:"bool",default:"true",description:"true to archive, false to unarchive."}],handler:US},{name:"pin",summary:"Pin (or with --pinned=false, unpin) a task to the top of the sidebar.",flags:[K1.taskId(),{name:"pinned",type:"bool",default:"true",description:"true to pin, false to unpin."}],handler:(J)=>Az(J,"task.pin",{taskId:J.args.require("task-id"),pinned:J.args.bool("pinned")??!0})},{name:"set-active",summary:"Set the shared active task (the focus every Tasks pane highlights). Pass --none to clear.",flags:[K1.taskId(!1),{name:"none",type:"bool",description:"Clear the active task instead of setting one."}],handler:KS},{name:"ensure-worktree",summary:"Materialize a task's git worktree on disk now (without starting an engine). Returns { worktreePath }.",flags:[K1.taskId()],handler:(J)=>Az(J,"task.ensureWorktree",{taskId:J.args.require("task-id")})},{name:"delete",summary:"Permanently remove a task (and its worktree). DESTRUCTIVE \u2014 prefer `archive`. Needs --force on a dirty worktree.",flags:[K1.taskId(),{name:"force",type:"bool",description:"Delete even with uncommitted changes."}],handler:DS},{name:"discover-adoptable",summary:"List existing git worktrees in a repo not yet tracked as kobe tasks. Returns { worktrees }.",flags:[K1.repo()],handler:(J)=>Az(J,"worktree.discoverAdoptable",{repo:J.args.requirePath("repo")})},{name:"adopt",summary:"Import an existing git worktree as a kobe task. Returns { task }.",flags:[K1.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)."},K1.vendor(),K1.title()],handler:LS}],JS=hG.map((J)=>J.name);pU=[{name:"pretty",type:"bool",description:"Pretty-print stdout JSON."},{name:"help",type:"bool",description:"Show usage for the verb and exit."}];XS={sessionExists:W1,ensureSession:async(J)=>(await Promise.resolve().then(() => (fJ(),tJ))).ensureSession(J),waitForEnginePane:EX,pasteAndSubmit:wX,resolveEngineLaunchInit:async(J,z,Y)=>(await Promise.resolve().then(() => (OG(),v8))).resolveEngineLaunchInit(J,z,Y),engineCommand:TJ};kj={isTaskRunning:(J)=>W1(M1(J)),deliverPrompt:(J,z,Y)=>tU(J,z,Y),resolveRepoRoot:async(J)=>(await Promise.resolve().then(() => (O1(),_z))).resolveMainRepoRoot(J),defaultVendor:async()=>{let{getPersistedString:J}=await Promise.resolve().then(() => (O1(),_z)),z=J("lastSelectedVendor")?.trim();return z?z:void 0},readWorktreeChanges:async(J)=>(await Promise.resolve().then(() => (SG(),oK))).readWorktreeChanges(J),tearDownSession:async(J)=>{let z=M1(J);await uz(z).catch(()=>{}),await rJ(z).catch(()=>{})}}});var X4={};B1(X4,{updatePlan:()=>Y4,runUpdateSubcommand:()=>CS,parseUpdateArgs:()=>Z4});import{spawnSync as gS}from"child_process";function Y4(){return{command:"sh",args:["-c",nz],display:nz}}function Z4(J){let z=!1;for(let Y=0;Y<J.length;Y+=1){let Z=J[Y];if(Z==="--help"||Z==="-h"||Z==="help")return{help:!0,dryRun:z};if(Z==="--dry-run"){z=!0;continue}process.stderr.write(`kobe update: unknown argument "${Z}"
176
+
177
+ `),G4(process.stderr),process.exit(2)}return{help:!1,dryRun:z}}function G4(J){J.write(["Usage: kobe update [--dry-run]","","Runs kobe's GitHub-hosted update script.","","Default command:",` ${nz}`,"","Script URL:",` ${CQ}`,"","Manual fallback:",` ${xH()}`,"","Examples:"," kobe update"," kobe update --dry-run",""].join(`
178
+ `))}async function CS(J,z){let Y={spawn:z?.spawn??gS,stdout:z?.stdout??process.stdout,stderr:z?.stderr??process.stderr,exit:z?.exit??((Q)=>process.exit(Q))},Z=Z4(J);if(Z.help){G4(Y.stdout);return}let G=Y4();if(Y.stdout.write(`kobe ${t0} -> latest
179
+ `),Y.stdout.write(`running: ${G.display}
180
+ `),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}
181
+ `),Y.exit(1);Y.exit(X.status??1)}var Q4=N(()=>{FJ()});var B4={};B1(B4,{runThemeSubcommand:()=>PS});import{existsSync as f4,mkdirSync as NS,readFileSync as kS,readdirSync as bS,unlinkSync as SS,writeFileSync as IS}from"fs";import{basename as q4,join as Sj,resolve as yS}from"path";function HY(J){process.stderr.write(`kobe theme: ${J}
182
+ `),process.exit(1)}function nY(J){process.stderr.write(`kobe theme: ${J}
183
+
184
+ `),H4(),process.exit(2)}function TS(){let J=[];J.push("bundled:");for(let Z of[...bj].sort())J.push(` ${Z} [built-in]`);let z=gG(),Y=[];try{Y=bS(z).filter((Z)=>Z.endsWith(".json")).sort()}catch{}if(J.push(""),J.push(`user (${z}):`),Y.length===0)J.push(" (none)");else for(let Z of Y){let G=Z.slice(0,-5),X=Sj(z,Z),Q=bj.includes(G)?" (overrides built-in)":"";J.push(` ${G}${Q} ${X}`)}process.stdout.write(`${J.join(`
185
185
  `)}
186
- `)}async function bb(f){if(/^https?:\/\//i.test(f)){let G;try{G=await fetch(f)}catch(V){GJ(`failed to fetch ${f}: ${V instanceof Error?V.message:String(V)}`)}if(!G.ok)GJ(`failed to fetch ${f}: HTTP ${G.status} ${G.statusText}`);let Q=await G.text(),q=f.split(/[?#]/)[0]??f,H=tU(q)||"theme.json",B=H.endsWith(".json")?H.slice(0,-5):H;return{text:Q,defaultName:B}}let Y=Cb(process.cwd(),f),J;try{J=Ob(Y,"utf8")}catch(G){GJ(`failed to read ${Y}: ${G instanceof Error?G.message:String(G)}`)}let z=tU(Y),Z=z.endsWith(".json")?z.slice(0,-5):z;return{text:J,defaultName:Z}}function kb(f){let Y=null,J,z=!1;for(let Z=0;Z<f.length;Z+=1){let G=f[Z];if(G==="--force"||G==="-f"){z=!0;continue}if(G==="--name"||G==="-n"){let Q=f[Z+1];if(Q===void 0)PJ("--name requires a value");J=Q,Z+=1;continue}if(G.startsWith("--name=")){J=G.slice(7);continue}if(G.startsWith("--"))PJ(`unknown flag: ${G}`);if(Y===null){Y=G;continue}PJ(`unexpected positional argument: ${G}`)}if(Y===null)PJ("missing <source> (URL or path to theme JSON)");return{source:Y,opts:{name:J,force:z}}}async function yb(f){let{source:Y,opts:J}=kb(f),{text:z,defaultName:Z}=await bb(Y),G;try{G=JSON.parse(z)}catch(V){GJ(`source is not valid JSON: ${V instanceof Error?V.message:String(V)}`)}let Q=mQ(G);if(!Q.ok)GJ(`source is not a valid kobe theme: ${Q.reason}`);let q=J.name??Z;if(!q||!/^[a-zA-Z0-9._-]+$/.test(q))GJ(`invalid theme name "${q}" (use letters, digits, '.', '_', '-')`);let H=KZ();Fb(H,{recursive:!0});let B=s8(H,`${q}.json`);if(eU(B)&&!J.force)GJ(`${B} already exists (pass --force to overwrite)`);gb(B,`${JSON.stringify(Q.theme,null,2)}
187
- `,"utf8"),process.stdout.write(`installed theme "${q}" -> ${B}
188
- `)}function Sb(f){let Y=f[0];if(!Y)PJ("missing <name>");if(f.length>1)PJ(`unexpected extra arguments after "${Y}"`);if(o8.includes(Y))GJ(`"${Y}" is a built-in theme and cannot be removed`);let J=s8(KZ(),`${Y}.json`);if(!eU(J))GJ(`no user theme named "${Y}" (looked for ${J})`);Rb(J),process.stdout.write(`removed theme "${Y}" (${J})
189
- `)}function f6(){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: ${KZ()}`,"Schema: https://raw.githubusercontent.com/sma1lboy/kobe/main/packages/kobe/src/tui/context/theme/theme.schema.json",""].join(`
190
- `))}async function Ib(f){let[Y,...J]=f;if(!Y||Y==="--help"||Y==="-h"||Y==="help"){if(f6(),!Y)process.exit(2);return}if(Y==="list"||Y==="ls"){if(J.length>0)PJ(`"${Y}" takes no arguments`);Nb();return}if(Y==="add"){await yb(J);return}if(Y==="remove"||Y==="rm"){Sb(J);return}PJ(`unknown action "${Y}" (try "list", "add", or "remove")`)}var o8;var J6=N(()=>{i1();cQ();j8();o8=["claude","conductor","dracula","nord","opencode","osaka-jade","tokyonight"]});var X6={};H1(X6,{runFeedbackSubcommand:()=>ub,parseFeedbackArgs:()=>G6});import{readFileSync as z6}from"fs";function vJ(f){process.stderr.write(`kobe feedback: ${f}
191
-
192
- ${Z6}
193
- `),process.exit(2)}function Tb(f){if(f==="-")return z6(0,"utf8");return z6(f,"utf8")}function G6(f){let Y={help:!1};for(let J=0;J<f.length;J++){let z=f[J];if(z==="--help"||z==="-h"||z==="help")return{...Y,help:!0};if(z==="--title"){if(Y.title=f[++J],Y.title===void 0)vJ("--title requires a value");continue}if(z==="--body"){if(Y.body=f[++J],Y.body===void 0)vJ("--body requires a value");continue}if(z==="--body-file"){if(Y.bodyFile=f[++J],Y.bodyFile===void 0)vJ("--body-file requires a value");continue}if(z==="--category"){if(Y.category=f[++J],Y.category===void 0)vJ("--category requires a value");continue}vJ(`unexpected argument "${z}"`)}return Y}async function ub(f){let Y=G6(f);if(Y.help){process.stdout.write(`${Z6}
194
- `);return}if(!Y.title)vJ("--title is required");if(Y.body&&Y.bodyFile)vJ("pass either --body or --body-file, not both");let J=Y.bodyFile?Tb(Y.bodyFile):Y.body;if(!J)vJ("--body or --body-file is required");let z=NZ({title:Y.title,body:J,categorySlug:Y.category});console.log(`created Discussion #${z.number}: ${z.url}`)}var Z6;var Q6=N(()=>{Oq();Z6=["Usage: kobe feedback --title <text> (--body <text> | --body-file <path>) [--category <slug>]","","Create a GitHub Discussion in the kobe repository using the GitHub CLI.","","Requires:"," gh auth login","","Options:"," --title <text> Discussion title"," --body <text> Discussion body"," --body-file <path> Read the Discussion body from a file; use - for stdin"," --category <slug> Discussion category slug (default: feedback)"," -h, --help Print this help",""].join(`
195
- `)});import{homedir as Eb}from"os";async function q6(f={}){let Y=f.homeDir??process.env.KOBE_HOME_DIR??Eb(),J=new gZ({homeDir:Y});await J.load();let z=new Dq,Z=new XQ({store:J,worktrees:z});return{homeDir:Y,orchestrator:Z,store:J,worktrees:z,async close(){Z.dispose()}}}var H6=N(()=>{BG();uG();n8()});var j6={};H1(j6,{runDaemonSubcommand:()=>wb});function B6(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(`
196
- `))}function xb(){let f=process.env.KOBE_DAEMON_WEB_PORT?.trim();if(f==="0"||f==="off"||f==="false")return;let Y=f?Number.parseInt(f,10):5174;return Number.isFinite(Y)&&Y>0?Y:5174}async function wb(f){let[Y="status"]=f,J=AY(),z=lY();if(Y==="--help"||Y==="-h"||Y==="help"){B6(process.stdout);return}if(Y==="status"){let q=new nf(J);try{let H=await q.request("daemon.status");console.log(JSON.stringify(H,null,2))}catch{let H=await OZ(z);if(H)console.log(`kobe daemon: no daemon socket at ${J} (stale pidfile pid=${H})`);else console.log(`kobe daemon: no daemon running at ${J}`);process.exitCode=1}finally{q.close()}return}if(Y==="stop"){let q=new nf(J);try{await q.request("daemon.stop"),console.log("kobe daemon: stop requested")}catch{console.log(`kobe daemon: no daemon running at ${J}`)}finally{q.close()}return}if(Y==="restart"){await AZ(J,z),(await KY()).close(),console.log(`kobe daemon: restarted, listening on ${J}`);return}if(Y!=="start")process.stderr.write(`kobe daemon: unknown command "${Y}"
197
-
198
- `),B6(process.stderr),process.exit(2);M7();let Z=await q6(),G=await rK(Z.orchestrator,{socketPath:J,pidPath:z,homeDir:Z.homeDir,webPort:xb(),webHost:process.env.KOBE_WEB_HOST,webStaticDir:process.env.KOBE_DAEMON_WEB_STATIC_DIR,onStop:async()=>{await Z.close()}});if(console.log(`kobe daemon: listening on ${G.socketPath}`),G.webPort)console.log(`kobe daemon: web transport listening on http://127.0.0.1:${G.webPort}`);let Q=async()=>{await G.close(),await Z.close(),process.exit(0)};process.once("SIGINT",()=>void Q()),process.once("SIGTERM",()=>void Q())}var W6=N(()=>{aZ();Lf();Vq();mz();Wq();H6()});import{existsSync as hb,readFileSync as Pb}from"fs";import{homedir as vb}from"os";import{join as V6}from"path";function fj(f={}){return["skills","add",mb,"--skill","kobe","--agent",f.agent??gq]}function Cq(f={}){return`npx ${fj(f).join(" ")}`}function Yj(f={}){let Y=f.home??vb(),J=f.cwd??process.cwd();return[V6(Y,K6),V6(J,K6)]}function cb(f){let Y=f.match(/kobe-skill-version:\s*(\d+)/);return Y?Number.parseInt(Y[1],10):null}function PG(f){let Y=Yj(f).find((Z)=>hb(Z));if(!Y)return{installed:!1,installedVersion:null,currentVersion:t8,stale:!1};let J=null;try{J=cb(Pb(Y,"utf8"))}catch{J=null}let z=J===null||J<t8;return{installed:!0,installedVersion:J,currentVersion:t8,stale:z}}function U6(){let f=PG();if(!f.installed){if(k1(e8)==="1")return;l1(e8,"1"),process.stderr.write(`
186
+ `)}async function uS(J){if(/^https?:\/\//i.test(J)){let X;try{X=await fetch(J)}catch(V){HY(`failed to fetch ${J}: ${V instanceof Error?V.message:String(V)}`)}if(!X.ok)HY(`failed to fetch ${J}: HTTP ${X.status} ${X.statusText}`);let Q=await X.text(),f=J.split(/[?#]/)[0]??J,H=q4(f)||"theme.json",B=H.endsWith(".json")?H.slice(0,-5):H;return{text:Q,defaultName:B}}let z=yS(process.cwd(),J),Y;try{Y=kS(z,"utf8")}catch(X){HY(`failed to read ${z}: ${X instanceof Error?X.message:String(X)}`)}let Z=q4(z),G=Z.endsWith(".json")?Z.slice(0,-5):Z;return{text:Y,defaultName:G}}function xS(J){let z=null,Y,Z=!1;for(let G=0;G<J.length;G+=1){let X=J[G];if(X==="--force"||X==="-f"){Z=!0;continue}if(X==="--name"||X==="-n"){let Q=J[G+1];if(Q===void 0)nY("--name requires a value");Y=Q,G+=1;continue}if(X.startsWith("--name=")){Y=X.slice(7);continue}if(X.startsWith("--"))nY(`unknown flag: ${X}`);if(z===null){z=X;continue}nY(`unexpected positional argument: ${X}`)}if(z===null)nY("missing <source> (URL or path to theme JSON)");return{source:z,opts:{name:Y,force:Z}}}async function ES(J){let{source:z,opts:Y}=xS(J),{text:Z,defaultName:G}=await uS(z),X;try{X=JSON.parse(Z)}catch(V){HY(`source is not valid JSON: ${V instanceof Error?V.message:String(V)}`)}let Q=Gf(X);if(!Q.ok)HY(`source is not a valid kobe theme: ${Q.reason}`);let f=Y.name??G;if(!f||!/^[a-zA-Z0-9._-]+$/.test(f))HY(`invalid theme name "${f}" (use letters, digits, '.', '_', '-')`);let H=gG();NS(H,{recursive:!0});let B=Sj(H,`${f}.json`);if(f4(B)&&!Y.force)HY(`${B} already exists (pass --force to overwrite)`);IS(B,`${JSON.stringify(Q.theme,null,2)}
187
+ `,"utf8"),process.stdout.write(`installed theme "${f}" -> ${B}
188
+ `)}function wS(J){let z=J[0];if(!z)nY("missing <name>");if(J.length>1)nY(`unexpected extra arguments after "${z}"`);if(bj.includes(z))HY(`"${z}" is a built-in theme and cannot be removed`);let Y=Sj(gG(),`${z}.json`);if(!f4(Y))HY(`no user theme named "${z}" (looked for ${Y})`);SS(Y),process.stdout.write(`removed theme "${z}" (${Y})
189
+ `)}function H4(){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: ${gG()}`,"Schema: https://raw.githubusercontent.com/sma1lboy/kobe/main/packages/kobe/src/tui/context/theme/theme.schema.json",""].join(`
190
+ `))}async function PS(J){let[z,...Y]=J;if(!z||z==="--help"||z==="-h"||z==="help"){if(H4(),!z)process.exit(2);return}if(z==="list"||z==="ls"){if(Y.length>0)nY(`"${z}" takes no arguments`);TS();return}if(z==="add"){await ES(Y);return}if(z==="remove"||z==="rm"){wS(Y);return}nY(`unknown action "${z}" (try "list", "add", or "remove")`)}var bj;var j4=N(()=>{p1();Xf();i8();bj=["claude","conductor","dracula","nord","opencode","osaka-jade","tokyonight"]});var U4={};B1(U4,{runFeedbackSubcommand:()=>vS,parseFeedbackArgs:()=>K4});import{readFileSync as W4}from"fs";function iY(J){process.stderr.write(`kobe feedback: ${J}
191
+
192
+ ${V4}
193
+ `),process.exit(2)}function hS(J){if(J==="-")return W4(0,"utf8");return W4(J,"utf8")}function K4(J){let z={help:!1};for(let Y=0;Y<J.length;Y++){let Z=J[Y];if(Z==="--help"||Z==="-h"||Z==="help")return{...z,help:!0};if(Z==="--title"){if(z.title=J[++Y],z.title===void 0)iY("--title requires a value");continue}if(Z==="--body"){if(z.body=J[++Y],z.body===void 0)iY("--body requires a value");continue}if(Z==="--body-file"){if(z.bodyFile=J[++Y],z.bodyFile===void 0)iY("--body-file requires a value");continue}if(Z==="--category"){if(z.category=J[++Y],z.category===void 0)iY("--category requires a value");continue}iY(`unexpected argument "${Z}"`)}return z}async function vS(J){let z=K4(J);if(z.help){process.stdout.write(`${V4}
194
+ `);return}if(!z.title)iY("--title is required");if(z.body&&z.bodyFile)iY("pass either --body or --body-file, not both");let Y=z.bodyFile?hS(z.bodyFile):z.body;if(!Y)iY("--body or --body-file is required");let Z=EG({title:z.title,body:Y,categorySlug:z.category});console.log(`created Discussion #${Z.number}: ${Z.url}`)}var V4;var D4=N(()=>{cf();V4=["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(`
195
+ `)});import{homedir as mS}from"os";async function L4(J={}){let z=J.homeDir??process.env.KOBE_HOME_DIR??mS(),Y=new uG({homeDir:z});await Y.load();let Z=new Pf,G=new Fq({store:Y,worktrees:Z});return{homeDir:z,orchestrator:G,store:Y,worktrees:Z,async close(){G.dispose()}}}var M4=N(()=>{FX();iX();Mj()});var O4={};B1(O4,{runDaemonSubcommand:()=>dS});function F4(J){J.write(["Usage: kobe daemon <command>","","Commands:"," status Print the running daemon's status JSON (default)"," start Run the daemon in the foreground (this process becomes it)"," stop Ask the running daemon to shut down"," restart Stop the daemon (graceful \u2192 SIGTERM \u2192 SIGKILL) and respawn it",""].join(`
196
+ `))}function cS(){let J=process.env.KOBE_DAEMON_WEB_PORT?.trim();if(J==="0"||J==="off"||J==="false")return;let z=J?Number.parseInt(J,10):5174;return Number.isFinite(z)&&z>0?z:5174}async function dS(J){let[z="status"]=J,Y=kz(),Z=pz();if(z==="--help"||z==="-h"||z==="help"){F4(process.stdout);return}if(z==="status"){let f=new $J(Y);try{let H=await f.request("daemon.status");console.log(JSON.stringify(H,null,2))}catch{let H=await IG(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{f.close()}return}if(z==="stop"){let f=new $J(Y);try{await f.request("daemon.stop"),console.log("kobe daemon: stop requested")}catch{console.log(`kobe daemon: no daemon running at ${Y}`)}finally{f.close()}return}if(z==="restart"){await yG(Y,Z),(await Fz()).close(),console.log(`kobe daemon: restarted, listening on ${Y}`);return}if(z!=="start")process.stderr.write(`kobe daemon: unknown command "${z}"
197
+
198
+ `),F4(process.stderr),process.exit(2);rV();let G=await L4(),X=await GU(G.orchestrator,{socketPath:Y,pidPath:Z,homeDir:G.homeDir,webPort:cS(),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 A4=N(()=>{JX();OJ();xf();lZ();uf();M4()});import{existsSync as nS,readFileSync as iS}from"fs";import{homedir as lS}from"os";import{join as R4}from"path";function Tj(J={}){return["skills","add",$S,"--skill","kobe","--agent",J.agent??lf]}function $f(J={}){return`npx ${Tj(J).join(" ")}`}function uj(J={}){let z=J.home??lS(),Y=J.cwd??process.cwd();return[R4(z,g4),R4(Y,g4)]}function aS(J){let z=J.match(/kobe-skill-version:\s*(\d+)/);return z?Number.parseInt(z[1],10):null}function pX(J){let z=uj(J).find((G)=>nS(G));if(!z)return{installed:!1,installedVersion:null,currentVersion:Ij,stale:!1};let Y=null;try{Y=aS(iS(z,"utf8"))}catch{Y=null}let Z=Y===null||Y<Ij;return{installed:!0,installedVersion:Y,currentVersion:Ij,stale:Z}}function C4(){let J=pX();if(!J.installed){if(S1(yj)==="1")return;r1(yj,"1"),process.stderr.write(`
199
199
  kobe: the kobe agent skill isn't installed \u2014 install it so your coding agent can drive kobe via \`kobe api\`:
200
- ${hG}
201
- (wraps \`${Cq()}\`; check anytime with \`kobe doctor\`)
202
-
203
- `);return}if(f.stale){let Y=`${e8}:v${f.currentVersion}`;if(k1(Y)==="1")return;l1(Y,"1");let J=f.installedVersion===null?"an older":`v${f.installedVersion}`;process.stderr.write(`
204
- kobe: your kobe agent skill is out of date (${J}; this kobe wants v${f.currentVersion}) \u2014 refresh it so \`kobe api\` guidance matches:
205
- ${hG}
206
-
207
- `)}}var t8=2,K6=".claude/skills/kobe/SKILL.md",hG="kobe skill install",mb="Sma1lboy/kobe",gq="claude-code",e8="skillHintSeen";var Nq=N(()=>{A1()});var bq={};H1(bq,{runResetSubcommand:()=>eb,runReloadSubcommand:()=>fk,runDoctorSubcommand:()=>sb});import{existsSync as nb,readFileSync as M6,statSync as db}from"fs";import{unlink as ib}from"fs/promises";import{join as F6}from"path";import{createInterface as lb}from"readline";function ab(f){try{return process.kill(f,0),!0}catch(Y){return Y.code==="EPERM"}}async function $b(f){let Y=new nf(f);try{return await Y.request("daemon.status")}catch{return null}finally{Y.close()}}function pb(f){let Y=Math.floor(f/1000);if(Y<60)return`${Y}s`;let J=Math.floor(Y/60);if(J<60)return`${J}m ${Y%60}s`;return`${Math.floor(J/60)}h ${J%60}m`}function _b(f){if(f<1024)return`${f} B`;if(f<1048576)return`${(f/1024).toFixed(1)} KB`;return`${(f/1048576).toFixed(1)} MB`}function Jj(f){try{let Y=db(f);return`present (${_b(Y.size)}, modified ${Y.mtime.toISOString()})`}catch{return"absent"}}function O6(f){try{let Y=JSON.parse(M6(f,"utf8"));return Array.isArray(Y.tasks)?Y.tasks.length:null}catch{return null}}function rb(f,Y){try{return M6(f,"utf8").split(`
208
- `).filter((z)=>z.trim().length>0).slice(-Y).join(`
209
- `)}catch{return""}}async function zj(f){let Y=Bun.spawn(Vz(...f),{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),[J,z]=await Promise.all([new Response(Y.stdout).text().catch(()=>""),Y.exited]);return{code:z,stdout:J}}async function ob(){if(!await bY())return 0;let{code:f,stdout:Y}=await zj(["list-sessions","-F","#{session_name}"]);if(f!==0)return 0;return Y.split(`
210
- `).filter((J)=>J.trim().length>0).length}async function sb(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(`
211
- `));return}let Y=f.find((j)=>j.length>0);if(Y!==void 0)process.stderr.write([`kobe doctor: unexpected argument "${Y}"`,"","Usage: kobe doctor (read-only; takes no options)",""].join(`
212
- `)),process.exit(2);let J=AY(),z=lY(),Z=OX(),G=F6(Jf(),"tasks.json"),Q=mf(),q=["kobe doctor",` home: ${OY()}`,` socket: ${J}`,""],H=await $b(J);if(H){let j=typeof H.daemonPid==="number"?H.daemonPid:"?",K=typeof H.uptimeMs==="number"?pb(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 OZ(z);if(j&&ab(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(nb(J))q.push(` orphan socket file present: ${J}`);let K=rb(Z,8);if(K){q.push(" last lines of daemon.log:");for(let L of K.split(`
213
- `))q.push(` \u2502 ${L}`)}}if(q.push(""),await bY())q.push(`tmux: ${await ob()} kobe session(s) on \`${qY}\` socket`);else q.push("tmux: \u2717 not found on PATH (task sessions need tmux)");q.push("");let B=PG();if(!B.installed)q.push("skill: \u2717 kobe agent skill not installed (optional \u2014 lets a coding agent drive `kobe api`)"),q.push(` \u2192 ${hG}`);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 ${hG}`)}else q.push(`skill: \u2713 kobe agent skill installed (v${B.installedVersion})`);q.push("");let V=O6(G);q.push(`tasks.json: ${Jj(G)}${V===null?"":` \u2014 ${V} task(s)`}`),q.push(`state.json: ${Jj(Q)}`),q.push(`daemon.log: ${Jj(Z)}`),console.log(q.join(`
214
- `))}async function tb(f){let Y=lb({input:process.stdin,output:process.stdout});try{let J=await new Promise((z)=>Y.question(f,z));return/^y(es)?$/i.test(J.trim())}finally{Y.close()}}async function D6(f,Y){try{await ib(f),console.log(` removed ${Y} (${f})`)}catch(J){if(J.code==="ENOENT")console.log(` ${Y}: already absent`);else console.error(` failed to remove ${Y} (${f}): ${J instanceof Error?J.message:String(J)}`)}}function L6(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(`
215
- `))}async function eb(f){if(f.includes("--help")||f.includes("-h")||f.includes("help")){L6(process.stdout);return}let Y=new Set(["--hard","--yes","-y"]),J=f.find((j)=>!Y.has(j));if(J!==void 0)process.stderr.write(`kobe reset: unknown argument "${J}"
216
-
217
- `),L6(process.stderr),process.exit(2);let z=f.includes("--hard"),Z=f.includes("--yes")||f.includes("-y"),G=AY(),Q=lY(),q=F6(Jf(),"tasks.json"),H=mf();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 (${G})`),console.log(` \u2022 kill all kobe tmux sessions on the \`${qY}\` socket`),z){let j=O6(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(!Z){if(!process.stdin.isTTY){console.log(`
218
- re-run with --yes to proceed (no interactive terminal for a y/N prompt)`);return}if(!await tb(z?`
200
+ ${_X}
201
+ (wraps \`${$f()}\`; check anytime with \`kobe doctor\`)
202
+
203
+ `);return}if(J.stale){let z=`${yj}:v${J.currentVersion}`;if(S1(z)==="1")return;r1(z,"1");let Y=J.installedVersion===null?"an older":`v${J.installedVersion}`;process.stderr.write(`
204
+ kobe: your kobe agent skill is out of date (${Y}; this kobe wants v${J.currentVersion}) \u2014 refresh it so \`kobe api\` guidance matches:
205
+ ${_X}
206
+
207
+ `)}}var Ij=2,g4=".claude/skills/kobe/SKILL.md",_X="kobe skill install",$S="Sma1lboy/kobe",lf="claude-code",yj="skillHintSeen";var af=N(()=>{O1()});var _f={};B1(_f,{runResetSubcommand:()=>XI,runReloadSubcommand:()=>QI,runDoctorSubcommand:()=>ZI});import{existsSync as _S,readFileSync as b4,statSync as pS}from"fs";import{unlink as rS}from"fs/promises";import{join as S4}from"path";import{createInterface as oS}from"readline";function sS(J){try{return process.kill(J,0),!0}catch(z){return z.code==="EPERM"}}async function tS(J){let z=new $J(J);try{return await z.request("daemon.status")}catch{return null}finally{z.close()}}function eS(J){let z=Math.floor(J/1000);if(z<60)return`${z}s`;let Y=Math.floor(z/60);if(Y<60)return`${Y}m ${z%60}s`;return`${Math.floor(Y/60)}h ${Y%60}m`}function JI(J){if(J<1024)return`${J} B`;if(J<1048576)return`${(J/1024).toFixed(1)} KB`;return`${(J/1048576).toFixed(1)} MB`}function xj(J){try{let z=pS(J);return`present (${JI(z.size)}, modified ${z.mtime.toISOString()})`}catch{return"absent"}}function I4(J){try{let z=JSON.parse(b4(J,"utf8"));return Array.isArray(z.tasks)?z.tasks.length:null}catch{return null}}function zI(J,z){try{return b4(J,"utf8").split(`
208
+ `).filter((Z)=>Z.trim().length>0).slice(-z).join(`
209
+ `)}catch{return""}}async function Ej(J){let z=Bun.spawn(LZ(...J),{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),[Y,Z]=await Promise.all([new Response(z.stdout).text().catch(()=>""),z.exited]);return{code:Z,stdout:Y}}async function YI(){if(!await yz())return 0;let{code:J,stdout:z}=await Ej(["list-sessions","-F","#{session_name}"]);if(J!==0)return 0;return z.split(`
210
+ `).filter((Y)=>Y.trim().length>0).length}async function ZI(J=[]){if(J.includes("--help")||J.includes("-h")||J.includes("help")){process.stdout.write(["Usage: kobe doctor","","Read-only diagnosis of the daemon / tmux / state. Takes no options.",""].join(`
211
+ `));return}let z=J.find((j)=>j.length>0);if(z!==void 0)process.stderr.write([`kobe doctor: unexpected argument "${z}"`,"","Usage: kobe doctor (read-only; takes no options)",""].join(`
212
+ `)),process.exit(2);let Y=kz(),Z=pz(),G=uQ(),X=S4(qJ(),"tasks.json"),Q=iJ(),f=["kobe doctor",` home: ${Nz()}`,` socket: ${Y}`,""],H=await tS(Y);if(H){let j=typeof H.daemonPid==="number"?H.daemonPid:"?",K=typeof H.uptimeMs==="number"?eS(H.uptimeMs):"?",L=typeof H.taskCount==="number"?H.taskCount:"?",A=typeof H.attachedClients==="number"?H.attachedClients:"?";f.push(`daemon: \u2713 running (pid ${j}, up ${K}, ${L} task(s), ${A} client(s))`);let F=typeof H.kobeVersion==="string"?H.kobeVersion:void 0;if(F&&F!==t0)f.push(` \u26A0 stale build: daemon is v${F}, you launched v${t0}`),f.push(" \u2192 run `kobe daemon restart`, then `kobe reload` in any open kobe sessions");else if(F)f.push(` build: v${F}`)}else{let j=await IG(Z);if(j&&sS(j))f.push(`daemon: \u2717 WEDGED \u2014 process alive (pid ${j}) but not accepting connections`),f.push(" \u2192 run `kobe reset` to kill it, then relaunch kobe");else if(j)f.push(`daemon: \u2717 not running (stale pidfile \u2192 pid ${j} is gone)`),f.push(" \u2192 harmless; relaunch kobe, or `kobe reset` to clear the stale pidfile");else f.push("daemon: \u2717 not running (no pidfile)");if(_S(Y))f.push(` orphan socket file present: ${Y}`);let K=zI(G,8);if(K){f.push(" last lines of daemon.log:");for(let L of K.split(`
213
+ `))f.push(` \u2502 ${L}`)}}if(f.push(""),await yz())f.push(`tmux: ${await YI()} kobe session(s) on \`${Wz}\` socket`);else f.push("tmux: \u2717 not found on PATH (task sessions need tmux)");f.push("");let B=pX();if(!B.installed)f.push("skill: \u2717 kobe agent skill not installed (optional \u2014 lets a coding agent drive `kobe api`)"),f.push(` \u2192 ${_X}`);else if(B.stale){let j=B.installedVersion===null?"unstamped":`v${B.installedVersion}`;f.push(`skill: \u26A0 kobe agent skill out of date (${j}; this kobe wants v${B.currentVersion})`),f.push(` \u2192 ${_X}`)}else f.push(`skill: \u2713 kobe agent skill installed (v${B.installedVersion})`);f.push("");let V=I4(X);f.push(`tasks.json: ${xj(X)}${V===null?"":` \u2014 ${V} task(s)`}`),f.push(`state.json: ${xj(Q)}`),f.push(`daemon.log: ${xj(G)}`),console.log(f.join(`
214
+ `))}async function GI(J){let z=oS({input:process.stdin,output:process.stdout});try{let Y=await new Promise((Z)=>z.question(J,Z));return/^y(es)?$/i.test(Y.trim())}finally{z.close()}}async function N4(J,z){try{await rS(J),console.log(` removed ${z} (${J})`)}catch(Y){if(Y.code==="ENOENT")console.log(` ${z}: already absent`);else console.error(` failed to remove ${z} (${J}): ${Y instanceof Error?Y.message:String(Y)}`)}}function k4(J){J.write(["Usage: kobe reset [--hard] [--yes]","","Recover a wedged install: stop the daemon (graceful \u2192 SIGTERM \u2192 SIGKILL),","remove its socket + pidfile, and kill all kobe tmux sessions.","Never touches your git worktrees.","","Options:"," --hard Also wipe the task index + UI state"," -y, --yes Skip the interactive confirmation"," -h, --help Print this help",""].join(`
215
+ `))}async function XI(J){if(J.includes("--help")||J.includes("-h")||J.includes("help")){k4(process.stdout);return}let z=new Set(["--hard","--yes","-y"]),Y=J.find((j)=>!z.has(j));if(Y!==void 0)process.stderr.write(`kobe reset: unknown argument "${Y}"
216
+
217
+ `),k4(process.stderr),process.exit(2);let Z=J.includes("--hard"),G=J.includes("--yes")||J.includes("-y"),X=kz(),Q=pz(),f=S4(qJ(),"tasks.json"),H=iJ();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 \`${Wz}\` socket`),Z){let j=I4(f);console.log(` \u2022 DELETE the task index${j===null?"":` (${j} task(s))`} \u2014 ${f}`),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(`
218
+ re-run with --yes to proceed (no interactive terminal for a y/N prompt)`);return}if(!await GI(Z?`
219
219
  Stop daemon, kill sessions AND wipe task index? [y/N] `:`
220
- Stop daemon and kill kobe sessions? [y/N] `)){console.log("aborted \u2014 nothing changed");return}}console.log("");let{pid:B,method:V}=await AZ(G,Q);if(console.log(V==="absent"?" daemon: was not running (cleared any stale socket/pidfile)":` daemon: stopped via ${V}${B?` (pid ${B})`:""}`),await bY()){let{code:j}=await zj(["kill-server"]);console.log(j===0?` tmux: killed all sessions on \`${qY}\``:` tmux: no sessions on \`${qY}\``)}else console.log(" tmux: not installed \u2014 no sessions to kill");if(z)await D6(q,"task index"),await D6(H,"UI state");console.log(`
221
- kobe: reset complete. Relaunch kobe to start fresh.`)}async function fk(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(`
222
- `));return}let Y=f.find((q)=>q.length>0);if(Y!==void 0)process.stderr.write(`kobe reload: unexpected argument "${Y}"
220
+ Stop daemon and kill kobe sessions? [y/N] `)){console.log("aborted \u2014 nothing changed");return}}console.log("");let{pid:B,method:V}=await yG(X,Q);if(console.log(V==="absent"?" daemon: was not running (cleared any stale socket/pidfile)":` daemon: stopped via ${V}${B?` (pid ${B})`:""}`),await yz()){let{code:j}=await Ej(["kill-server"]);console.log(j===0?` tmux: killed all sessions on \`${Wz}\``:` tmux: no sessions on \`${Wz}\``)}else console.log(" tmux: not installed \u2014 no sessions to kill");if(Z)await N4(f,"task index"),await N4(H,"UI state");console.log(`
221
+ kobe: reset complete. Relaunch kobe to start fresh.`)}async function QI(J=[]){if(J.includes("--help")||J.includes("-h")||J.includes("help")){process.stdout.write(["Usage: kobe reload","","Restart kobe's Tasks + Ops panes in every live session, in place.","Picks up new kobe code without `kobe reset` \u2014 the engine (claude)","panes and your running turns are never touched. Takes no options.",""].join(`
222
+ `));return}let z=J.find((f)=>f.length>0);if(z!==void 0)process.stderr.write(`kobe reload: unexpected argument "${z}"
223
223
 
224
224
  Usage: kobe reload (takes no options)
225
- `),process.exit(2);if(!await bY()){console.log("kobe reload: tmux is not installed \u2014 no panes to reload");return}let{code:J,stdout:z}=await zj(["list-sessions","-F","#{session_name}"]);if(J!==0){console.log(`kobe reload: no kobe tmux sessions on the \`${qY}\` socket`);return}let Z=z.split(`
226
- `).map((q)=>q.trim()).filter((q)=>q.length>0);if(Z.length===0){console.log(`kobe reload: no kobe tmux sessions on the \`${qY}\` socket`);return}let{refreshKobeWorkspacePanes:G}=await Promise.resolve().then(() => (Gf(),_f)),Q=0;for(let q of Z)try{await G(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}/${Z.length} session(s) \u2014 engine panes untouched`)}var kq=N(()=>{aZ();Vq();mz();Wq();i1();Nq();u1();Df()});var k6={};H1(k6,{runWebSubcommand:()=>qk});import{existsSync as g6}from"fs";import{homedir as Yk}from"os";import{resolve as yq}from"path";import{fileURLToPath as C6}from"url";function A6(){let f=process.env.KOBE_HOME_DIR?.trim();return f?`sandbox: ${f}`:`${Yk()}/.kobe (production)`}function zk(){let f=C6(import.meta.url),Y=[yq(f,"../../../../kobe-web/dist"),yq(f,"../../web-ui")];for(let J of Y)if(g6(`${J}/index.html`))return J;return}function Zk(){let f=C6(import.meta.url),Y=[yq(f,"../../../../kobe-web/pty-server.mjs"),yq(f,"../../web-ui/pty-server.mjs")];for(let J of Y)if(g6(J))return J;return}async function R6(f){try{let Y=Bun.spawn(["lsof","-nP",`-iTCP:${f}`,"-sTCP:LISTEN","-t"],{stdout:"pipe",stderr:"ignore"});return(await new Response(Y.stdout).text()).split(`
227
- `).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)&&z!==process.pid)}catch{return[]}}async function Gk(f){let Y;try{Y=(await(await fetch(`http://localhost:${f}${b6}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(Y!==N6)throw Error(`PTY port ${f} is in use by a non-kobe service; refusing to replace it`);let J=await R6(f);for(let Z of J)try{process.kill(Z,"SIGTERM")}catch{}let z=Date.now()+2000;while(Date.now()<z){if((await R6(f)).length===0)return;await new Promise((Z)=>setTimeout(Z,100))}}async function Xk(f){let Y=Zk();if(!Y)return null;let J=f.webPort+2;if(f.takeover)await Gk(J);return Bun.spawn(["node",Y],{stdin:"ignore",stdout:"inherit",stderr:"inherit",env:{...process.env,KOBE_DAEMON_WEB_PORT:String(f.webPort),KOBE_PTY_PORT:String(J)}})}async function Qk(f,Y){if(process.env.KOBE_DAEMON_WEB_PORT=String(f),Y)process.env.KOBE_DAEMON_WEB_STATIC_DIR=Y;await RZ();let J;try{J=(await(await fetch(`http://127.0.0.1:${f}${b6}`,{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(J!==N6)throw Error(`unexpected daemon web health marker on :${f}: ${J}`);if(Y){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 ${Y}`)}}async function qk(f){if(f.includes("--help")||f.includes("-h")){process.stdout.write(Jk);return}let Y=5174,J=f.indexOf("--port");if(J!==-1){let z=Number.parseInt(f[J+1]??"",10);if(!Number.isFinite(z))process.stderr.write(`kobe web: --port needs a number
228
- `),process.exit(2);Y=z}try{let z=f.includes("--routes-only")||f.includes("--bridge-only"),Z=!f.includes("--no-takeover"),G=z?void 0:zk();if(!z&&!G)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 Qk(Y,G);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:${Y} (routes only)
229
- `),process.stdout.write(` home: ${A6()}
230
- `);else if(Q=await Xk({webPort:Y,takeover:Z}),process.stdout.write(`kobe web \u2192 http://localhost:${Y}
231
- `),process.stdout.write(` home: ${A6()}
225
+ `),process.exit(2);if(!await yz()){console.log("kobe reload: tmux is not installed \u2014 no panes to reload");return}let{code:Y,stdout:Z}=await Ej(["list-sessions","-F","#{session_name}"]);if(Y!==0){console.log(`kobe reload: no kobe tmux sessions on the \`${Wz}\` socket`);return}let G=Z.split(`
226
+ `).map((f)=>f.trim()).filter((f)=>f.length>0);if(G.length===0){console.log(`kobe reload: no kobe tmux sessions on the \`${Wz}\` socket`);return}let{refreshKobeWorkspacePanes:X}=await Promise.resolve().then(() => (fJ(),tJ)),Q=0;for(let f of G)try{await X(f),Q++}catch(H){console.error(` failed to reload session "${f}": ${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 pf=N(()=>{JX();xf();lZ();uf();p1();af();P1();FJ()});var P4={};B1(P4,{runWebSubcommand:()=>KI});import{existsSync as u4}from"fs";import{homedir as qI}from"os";import{resolve as rf}from"path";import{fileURLToPath as x4}from"url";function y4(){let J=process.env.KOBE_HOME_DIR?.trim();return J?`sandbox: ${J}`:`${qI()}/.kobe (production)`}function HI(){let J=x4(import.meta.url),z=[rf(J,"../../../../kobe-web/dist"),rf(J,"../../web-ui")];for(let Y of z)if(u4(`${Y}/index.html`))return Y;return}function BI(){let J=x4(import.meta.url),z=[rf(J,"../../../../kobe-web/pty-server.mjs"),rf(J,"../../web-ui/pty-server.mjs")];for(let Y of z)if(u4(Y))return Y;return}async function T4(J){try{let z=Bun.spawn(["lsof","-nP",`-iTCP:${J}`,"-sTCP:LISTEN","-t"],{stdout:"pipe",stderr:"ignore"});return(await new Response(z.stdout).text()).split(`
227
+ `).map((Z)=>Number.parseInt(Z.trim(),10)).filter((Z)=>Number.isFinite(Z)&&Z!==process.pid)}catch{return[]}}async function jI(J){let z;try{z=(await(await fetch(`http://localhost:${J}${w4}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(z!==E4)throw Error(`PTY port ${J} is in use by a non-kobe service; refusing to replace it`);let Y=await T4(J);for(let G of Y)try{process.kill(G,"SIGTERM")}catch{}let Z=Date.now()+2000;while(Date.now()<Z){if((await T4(J)).length===0)return;await new Promise((G)=>setTimeout(G,100))}}async function WI(J){let z=BI();if(!z)return null;let Y=J.webPort+2;if(J.takeover)await jI(Y);return Bun.spawn(["node",z],{stdin:"ignore",stdout:"inherit",stderr:"inherit",env:{...process.env,KOBE_DAEMON_WEB_PORT:String(J.webPort),KOBE_PTY_PORT:String(Y)}})}async function VI(J,z){if(process.env.KOBE_DAEMON_WEB_PORT=String(J),z)process.env.KOBE_DAEMON_WEB_STATIC_DIR=z;await TG();let Y;try{Y=(await(await fetch(`http://127.0.0.1:${J}${w4}`,{signal:AbortSignal.timeout(1500)})).text()).trim()}catch(Z){throw Error(`daemon web transport is not reachable on :${J}; run \`kobe daemon restart\` so the daemon picks up this build (${Z instanceof Error?Z.message:String(Z)})`)}if(Y!==E4)throw Error(`unexpected daemon web health marker on :${J}: ${Y}`);if(z){if(!(await fetch(`http://127.0.0.1:${J}/`,{signal:AbortSignal.timeout(1500)})).ok)throw Error(`daemon web transport is up on :${J} but is not serving web assets; run \`kobe daemon restart\` so it picks up ${z}`)}}async function KI(J){if(J.includes("--help")||J.includes("-h")){process.stdout.write(fI);return}let z=5174,Y=J.indexOf("--port");if(Y!==-1){let Z=Number.parseInt(J[Y+1]??"",10);if(!Number.isFinite(Z))process.stderr.write(`kobe web: --port needs a number
228
+ `),process.exit(2);z=Z}try{let Z=J.includes("--routes-only")||J.includes("--bridge-only"),G=!J.includes("--no-takeover"),X=Z?void 0:HI();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 VI(z,X);let Q=null,f=!1,H=()=>{if(f)return;f=!0,Q?.kill(),Q=null};if(Z)process.stdout.write(`kobe daemon web transport listening on http://localhost:${z} (routes only)
229
+ `),process.stdout.write(` home: ${y4()}
230
+ `);else if(Q=await WI({webPort:z,takeover:G}),process.stdout.write(`kobe web \u2192 http://localhost:${z}
231
+ `),process.stdout.write(` home: ${y4()}
232
232
  `),!Q)process.stderr.write(`kobe web: PTY server not found; terminal tabs will be unavailable
233
- `);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
234
- `),H(),process.exit(1)}),await new Promise(()=>{})}catch(z){process.stderr.write(`kobe web: ${z instanceof Error?z.message:String(z)}
235
- `),process.exit(1)}}var N6="kobe-web",b6="/__kobe_web",Jk=`Usage: kobe web [options]
233
+ `);process.on("SIGINT",()=>{H(),process.exit(0)}),process.on("SIGTERM",()=>{H(),process.exit(0)}),Q?.exited.then(()=>{if(!f)process.stderr.write(`kobe web: PTY server exited
234
+ `),H(),process.exit(1)}),await new Promise(()=>{})}catch(Z){process.stderr.write(`kobe web: ${Z instanceof Error?Z.message:String(Z)}
235
+ `),process.exit(1)}}var E4="kobe-web",w4="/__kobe_web",fI=`Usage: kobe web [options]
236
236
 
237
237
  Launch the kobe web UI through daemon web transport on http://localhost:<port>.
238
238
 
@@ -241,43 +241,43 @@ Options:
241
241
  --routes-only Routes only; Vite serves the SPA separately.
242
242
  --no-takeover Reserved for compatibility; daemon owns the web port.
243
243
  -h, --help Show this help.
244
- `;var y6=N(()=>{Lf()});var I6={};H1(I6,{runSkillSubcommand:()=>Bk});function Zj(){return["usage: kobe skill <verb>","","verbs:"," install [--agent NAME] Install the kobe agent skill (wraps `npx skills add`)"," status Show whether the skill is installed"," command [--agent NAME] Print the underlying npx command without running it","",`The skill teaches a coding agent how to drive \`kobe api\`. Default agent: ${gq}.`].join(`
245
- `)}function S6(f){let Y=gq;for(let J=0;J<f.length;J++){let z=f[J];if(z==="--agent"){let Z=f[J+1];if(!Z||Z.startsWith("--"))process.stderr.write(`kobe skill: --agent requires a value
246
- `),process.exit(2);Y=Z,J++}else if(z.startsWith("--agent="))Y=z.slice(8);else process.stderr.write(`kobe skill: unknown flag "${z}"
247
-
248
- ${Zj()}
249
- `),process.exit(2)}return Y}async function Bk(f){let[Y,...J]=f;if(!Y||Y==="--help"||Y==="-h"||Y==="help"){if(process.stdout.write(`${Zj()}
250
- `),!Y)process.exitCode=2;return}if(!Hk.includes(Y))process.stderr.write(`kobe skill: unknown verb "${Y}"
251
-
252
- ${Zj()}
253
- `),process.exit(2);if(Y==="status"){let q=PG(),[H,B]=Yj(),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(`
254
- `));return}if(Y==="command"){process.stdout.write(`${Cq({agent:S6(J)})}
255
- `);return}let z=S6(J),Z=fj({agent:z});process.stdout.write(`kobe skill: running \`npx ${Z.join(" ")}\`
256
- `);let Q=await Bun.spawn(["npx",...Z],{stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited;if(Q!==0)process.stderr.write(`
244
+ `;var h4=N(()=>{OJ()});var m4={};B1(m4,{runSkillSubcommand:()=>DI});function wj(){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: ${lf}.`].join(`
245
+ `)}function v4(J){let z=lf;for(let Y=0;Y<J.length;Y++){let Z=J[Y];if(Z==="--agent"){let G=J[Y+1];if(!G||G.startsWith("--"))process.stderr.write(`kobe skill: --agent requires a value
246
+ `),process.exit(2);z=G,Y++}else if(Z.startsWith("--agent="))z=Z.slice(8);else process.stderr.write(`kobe skill: unknown flag "${Z}"
247
+
248
+ ${wj()}
249
+ `),process.exit(2)}return z}async function DI(J){let[z,...Y]=J;if(!z||z==="--help"||z==="-h"||z==="help"){if(process.stdout.write(`${wj()}
250
+ `),!z)process.exitCode=2;return}if(!UI.includes(z))process.stderr.write(`kobe skill: unknown verb "${z}"
251
+
252
+ ${wj()}
253
+ `),process.exit(2);if(z==="status"){let f=pX(),[H,B]=uj(),V=!f.installed?"\u2717 not installed":f.stale?`\u26A0 out of date (installed ${f.installedVersion===null?"unstamped":`v${f.installedVersion}`}, this kobe wants v${f.currentVersion})`:`\u2713 installed (v${f.installedVersion})`;process.stdout.write([`kobe skill: ${V}`,` looked in: ${H}`,` ${B}`,f.installed&&!f.stale?"":" \u2192 run `kobe skill install` to install / refresh",""].join(`
254
+ `));return}if(z==="command"){process.stdout.write(`${$f({agent:v4(Y)})}
255
+ `);return}let Z=v4(Y),G=Tj({agent:Z});process.stdout.write(`kobe skill: running \`npx ${G.join(" ")}\`
256
+ `);let Q=await Bun.spawn(["npx",...G],{stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited;if(Q!==0)process.stderr.write(`
257
257
  kobe skill install failed (npx exited ${Q}). Is \`npx\` on PATH and are you online?
258
- You can run it yourself: ${Cq({agent:z})}
258
+ You can run it yourself: ${$f({agent:Z})}
259
259
  `),process.exit(Q||1);process.stdout.write(`kobe skill: installed.
260
- `)}var Hk;var T6=N(()=>{Nq();Hk=["install","status","command"]});var Gj={};H1(Gj,{runHookSubcommand:()=>Mk,readTextWithTimeout:()=>w6,parseWorktreeAddPath:()=>P6,ensureGlobalKobeHooks:()=>Ak});import{homedir as jk}from"os";import{join as E6,resolve as x6}from"path";async function w6(f,Y=Wk){let J;try{return await Promise.race([f(),new Promise((z)=>{J=setTimeout(()=>z(""),Y)})])}finally{if(J!==void 0)clearTimeout(J)}}async function h6(){try{let f=await w6(()=>Bun.stdin.text());if(!f.trim())return{};let Y=JSON.parse(f);return Y&&typeof Y==="object"&&!Array.isArray(Y)?Y:{}}catch{return{}}}function Vk(f,Y){for(let J=0;J<f.length;J++){if(f[J]===Y)return f[J+1];if(f[J].startsWith(`${Y}=`))return f[J].slice(Y.length+1)}return}function Uk(f){return!!f&&typeof f==="object"&&!Array.isArray(f)}function Dk(f){let Y=[],J=/"([^"]*)"|'([^']*)'|(\S+)/g,z;while((z=J.exec(f))!==null)Y.push(z[1]??z[2]??z[3]??"");return Y}function P6(f){let Y=Dk(f),J=new Set(["-b","-B","--reason"]);for(let z=0;z+1<Y.length;z++){if(Y[z]!=="worktree"||Y[z+1]!=="add")continue;let Z=z+2;while(Z<Y.length){let G=Y[Z];if(G==="&&"||G==="||"||G===";"||G==="|"||G===">"||G===">>")break;if(G.startsWith("-")){Z+=J.has(G)?2:1;continue}return G}}return}async function Lk(){let f=await h6(),Y=Uk(f.tool_input)?f.tool_input:{},J=typeof Y.command==="string"?Y.command:"";if(!J.includes("worktree"))return;let z=P6(J);if(!z)return;let Z=typeof f.cwd==="string"&&f.cwd?f.cwd:process.cwd(),G=x6(Z,z),Q=await rf();if(!Q)return;try{await Q.request("worktree.reconcile",{cwd:Z,worktreePath:G})}finally{Q.close()}}async function Mk(f){let[Y,...J]=f;if(Y==="setup"){await Rk(J);return}if(Y===Kk){try{await Lk()}catch{}return}try{if(!Y||!RX(Y))return;let z=await h6(),Z=Vk(J,"--task-id"),G=typeof z.cwd==="string"&&z.cwd?z.cwd:process.cwd(),Q;for(let H of v6())if(Q=H.activityDetailFromPayload(Y,z),Q)break;let q=await rf();if(!q)return;try{await q.request("engine.reportEvent",{...Z?{taskId:Z}:{cwd:G},kind:Y,...Q?{detail:Q}:{}})}finally{q.close()}}catch{}}function Fk(){return m1.map((f)=>YB(f)).filter((f)=>f.supportsWorktreeSync())}function v6(){return m1.map((f)=>YB(f)).filter((f)=>f.supportsHooks())}function m6(){return E6(jk(),".claude","settings.json")}function Ok(f){if(!f||f==="off")return;if(f==="global")return m6();if(f.startsWith("repo:"))return E6(x6(f.slice(5)),".claude","settings.json");return f}async function Ak(){try{for(let f of v6()){let Y=f.globalSettingsPath();if(!Y)continue;await f.installActivityHooks(Y),await f.installWorktreeWatchHook(Y)}await c6()}catch{}}async function c6(){let f=Fk();if(f.length===0)return;let Y=k1(u6),J=new Set([m6()]),z=Ok(Y);if(z)J.add(z);for(let Z of f)for(let G of J)await Z.removeWorktreeSyncHook(G);if(Y!=="off")l1(u6,"off")}async function Rk(f){await c6(),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(`
261
- `))}var Wk=500,Kk="worktree-created",u6="externalWorktreeSync";var Xj=N(()=>{Lf();JB();gX();A1();$1()});function d6(f){var Y;if(f>=55296&&f<=57343||f>1114111)return 65533;return(Y=gk.get(f))!==null&&Y!==void 0?Y:f}var Qj,gk,n6;var i6=N(()=>{gk=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),n6=(Qj=String.fromCodePoint)!==null&&Qj!==void 0?Qj:(f)=>{let Y="";if(f>65535)f-=65536,Y+=String.fromCharCode(f>>>10&1023|55296),f=56320|f&1023;return Y+=String.fromCharCode(f),Y}});function l6(f){let Y=typeof atob==="function"?atob(f):typeof Buffer.from==="function"?Buffer.from(f,"base64").toString("binary"):new Buffer(f,"base64").toString("binary"),J=Y.length&-2,z=new Uint16Array(J/2);for(let Z=0,G=0;Z<J;Z+=2){let Q=Y.charCodeAt(Z),q=Y.charCodeAt(Z+1);z[G++]=Q|q<<8}return z}var a6;var $6=N(()=>{a6=l6("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IAAOA12J/c8iFvaxBhAAhOVGFjZGZnbG1vcHFzdHV4owOlA6kDsAO/A8IDxgPNA9ID8gP9AwEEFAQeBCAEJQRHAEphSAA7gNAA0EBjAHUAdABlADuAyQDJQIABYWl5ALYDuQO+A/Ihb24aYXIAYwA7gMoAykAtZG8AdAAWYXIAAOA12AjdcgBhAHYAZQA7gMgAyEDlIm1lbnQAoAgiAAFhcNYD2QNjAHIAEmF0AHkAUwLhAwAAAADpA20lYWxsU3F1YXJlAACg+yVlJ3J5U21hbGxTcXVhcmUAAKCrJQABZ3D2A/kDbwBuABhhZgAA4DXYPN3zImlsb26VY3UAAAFhaQYEDgRsAFSgdSppImxkZQAAoEIi7CNpYnJpdW0AoMwhAAFjaRgEGwRyAACgMCFtAACgcyphAJdjbQBsADuAywDLQAABaXApBC0E8yF0cwCgAyLvJG5lbnRpYWxFAKBHIYACY2Zpb3MAPQQ/BEMEXQRyBHkAJGRyAADgNdgJ3WwibGVkAFMCTAQAAAAAVARtJWFsbFNxdWFyZQAAoPwlZSdyeVNtYWxsU3F1YXJlAACgqiVwA2UEAABpBAAAAABtBGYAAOA12D3dwSFsbACgACLyI2llcnRyZgCgMSFjAPIAcQQABkpUYWJjZGZnb3JzdIgEiwSOBJMElwSkBKcEqwStBLIE5QTqBGMAeQADZDuAPgA+QO0hbWFkoJMD3GNyImV2ZQAeYYABZWl5AJ0EoASjBOQhaWwiYXIAYwAcYRNkbwB0ACBhcgAA4DXYCt0AoNkicABmAADgNdg+3eUiYXRlcgADRUZHTFNUvwTIBM8E1QTZBOAEcSJ1YWwATKBlIuUhc3MAoNsidSRsbEVxdWFsAACgZyJyI2VhdGVyAACgoirlIXNzAKB3IuwkYW50RXF1YWwAoH4qaSJsZGUAAKBzImMAcgAA4DXYotwAoGsiAARBYWNmaW9zdfkE/QQFBQgFCwUTBSIFKwVSIkRjeQAqZAABY3QBBQQFZQBrAMdiXmDpIXJjJGFyAACgDCFsJWJlcnRTcGFjZQAAoAsh8AEYBQAAGwVmAACgDSHpJXpvbnRhbExpbmUAoAAlAAFjdCYFKAXyABIF8iFvayZhbQBwAEQBMQU5BW8AdwBuAEgAdQBtAPAAAAFxInVhbAAAoE8iAAdFSk9hY2RmZ21ub3N0dVMFVgVZBVwFYwVtBXAFcwV6BZAFtgXFBckFzQVjAHkAFWTsIWlnMmFjAHkAAWRjAHUAdABlADuAzQDNQAABaXlnBWwFcgBjADuAzgDOQBhkbwB0ADBhcgAAoBEhcgBhAHYAZQA7gMwAzEAAoREhYXB/BYsFAAFjZ4MFhQVyACphaSNuYXJ5SQAAoEghbABpAGUA8wD6AvQBlQUAAKUFZaAsIgABZ3KaBZ4F8iFhbACgKyLzI2VjdGlvbgCgwiJpI3NpYmxlAAABQ1SsBbEFbyJtbWEAAKBjIGkibWVzAACgYiCAAWdwdAC8Bb8FwwVvAG4ALmFmAADgNdhA3WEAmWNjAHIAAKAQIWkibGRlAChh6wHSBQAA1QVjAHkABmRsADuAzwDPQIACY2Zvc3UA4QXpBe0F8gX9BQABaXnlBegFcgBjADRhGWRyAADgNdgN3XAAZgAA4DXYQd3jAfcFAAD7BXIAAOA12KXc8iFjeQhk6yFjeQRkgANISmFjZm9zAAwGDwYSBhUGHQYhBiYGYwB5ACVkYwB5AAxk8CFwYZpjAAFleRkGHAbkIWlsNmEaZHIAAOA12A7dcABmAADgNdhC3WMAcgAA4DXYptyABUpUYWNlZmxtb3N0AD0GQAZDBl4GawZkB2gHcAd0B80H2gdjAHkACWQ7gDwAPECAAmNtbnByAEwGTwZSBlUGWwb1IXRlOWHiIWRhm2NnAACg6ifsI2FjZXRyZgCgEiFyAACgniGAAWFleQBkBmcGagbyIW9uPWHkIWlsO2EbZAABZnNvBjQHdAAABUFDREZSVFVWYXKABp4GpAbGBssG3AYDByEHwQIqBwABbnKEBowGZyVsZUJyYWNrZXQAAKDoJ/Ihb3cAoZAhQlKTBpcGYQByAACg5CHpJGdodEFycm93AKDGIWUjaWxpbmcAAKAII28A9QGqBgAAsgZiJWxlQnJhY2tldAAAoOYnbgDUAbcGAAC+BmUkZVZlY3RvcgAAoGEp5SJjdG9yQqDDIWEAcgAAoFkpbCJvb3IAAKAKI2kiZ2h0AAABQVbSBtcGciJyb3cAAKCUIeUiY3RvcgCgTikAAWVy4AbwBmUAAKGjIkFW5gbrBnIicm93AACgpCHlImN0b3IAoFopaSNhbmdsZQBCorIi+wYAAAAA/wZhAHIAAKDPKXEidWFsAACgtCJwAIABRFRWAAoHEQcYB+8kd25WZWN0b3IAoFEpZSRlVmVjdG9yAACgYCnlImN0b3JCoL8hYQByAACgWCnlImN0b3JCoLwhYQByAACgUilpAGcAaAB0AGEAcgByAG8A9wDMAnMAAANFRkdMU1Q/B0cHTgdUB1gHXwfxJXVhbEdyZWF0ZXIAoNoidSRsbEVxdWFsAACgZiJyI2VhdGVyAACgdiLlIXNzAKChKuwkYW50RXF1YWwAoH0qaSJsZGUAAKByInIAAOA12A/dZaDYIuYjdGFycm93AKDaIWkiZG90AD9hgAFucHcAege1B7kHZwAAAkxSbHKCB5QHmwerB+UhZnQAAUFSiAeNB3Iicm93AACg9SfpJGdodEFycm93AKD3J+kkZ2h0QXJyb3cAoPYn5SFmdAABYXLcAqEHaQBnAGgAdABhAHIAcgBvAPcA5wJpAGcAaAB0AGEAcgByAG8A9wDuAmYAAOA12EPdZQByAAABTFK/B8YHZSRmdEFycm93AACgmSHpJGdodEFycm93AKCYIYABY2h0ANMH1QfXB/IAWgYAoLAh8iFva0FhAKBqIgAEYWNlZmlvc3XpB+wH7gf/BwMICQgOCBEIcAAAoAUpeQAcZAABZGzyB/kHaSR1bVNwYWNlAACgXyBsI2ludHJmAACgMyFyAADgNdgQ3e4jdXNQbHVzAKATInAAZgAA4DXYRN1jAPIA/gecY4AESmFjZWZvc3R1ACEIJAgoCDUIgQiFCDsKQApHCmMAeQAKZGMidXRlAENhgAFhZXkALggxCDQI8iFvbkdh5CFpbEVhHWSAAWdzdwA7CGEIfQjhInRpdmWAAU1UVgBECEwIWQhlJWRpdW1TcGFjZQAAoAsgaABpAAABY25SCFMIawBTAHAAYQBjAOUASwhlAHIAeQBUAGgAaQDuAFQI9CFlZAABR0xnCHUIcgBlAGEAdABlAHIARwByAGUAYQB0AGUA8gDrBGUAcwBzAEwAZQBzAPMA2wdMImluZQAKYHIAAOA12BHdAAJCbnB0jAiRCJkInAhyImVhawAAoGAgwiZyZWFraW5nU3BhY2WgYGYAAKAVIUOq7CqzCMIIzQgAAOcIGwkAAAAAAAAtCQAAbwkAAIcJAACdCcAJGQoAADQKAAFvdbYIvAjuI2dydWVudACgYiJwIkNhcAAAoG0ibyh1YmxlVmVydGljYWxCYXIAAKAmIoABbHF4ANII1wjhCOUibWVudACgCSL1IWFsVKBgImkibGRlAADgQiI4A2kic3RzAACgBCJyI2VhdGVyAACjbyJFRkdMU1T1CPoIAgkJCQ0JFQlxInVhbAAAoHEidSRsbEVxdWFsAADgZyI4A3IjZWF0ZXIAAOBrIjgD5SFzcwCgeSLsJGFudEVxdWFsAOB+KjgDaSJsZGUAAKB1IvUhbXBEASAJJwnvI3duSHVtcADgTiI4A3EidWFsAADgTyI4A2UAAAFmczEJRgn0JFRyaWFuZ2xlQqLqIj0JAAAAAEIJYQByAADgzyk4A3EidWFsAACg7CJzAICibiJFR0xTVABRCVYJXAlhCWkJcSJ1YWwAAKBwInIjZWF0ZXIAAKB4IuUhc3MA4GoiOAPsJGFudEVxdWFsAOB9KjgDaSJsZGUAAKB0IuUic3RlZAABR0x1CX8J8iZlYXRlckdyZWF0ZXIA4KIqOAPlI3NzTGVzcwDgoSo4A/IjZWNlZGVzAKGAIkVTjwmVCXEidWFsAADgryo4A+wkYW50RXF1YWwAoOAiAAFlaaAJqQl2JmVyc2VFbGVtZW50AACgDCLnJWh0VHJpYW5nbGVCousitgkAAAAAuwlhAHIAAODQKTgDcSJ1YWwAAKDtIgABcXXDCeAJdSNhcmVTdQAAAWJwywnVCfMhZXRF4I8iOANxInVhbAAAoOIi5SJyc2V0ReCQIjgDcSJ1YWwAAKDjIoABYmNwAOYJ8AkNCvMhZXRF4IIi0iBxInVhbAAAoIgi4yJlZWRzgKGBIkVTVAD6CQAKBwpxInVhbAAA4LAqOAPsJGFudEVxdWFsAKDhImkibGRlAADgfyI4A+UicnNldEXggyLSIHEidWFsAACgiSJpImxkZQCAoUEiRUZUACIKJwouCnEidWFsAACgRCJ1JGxsRXF1YWwAAKBHImkibGRlAACgSSJlJXJ0aWNhbEJhcgAAoCQiYwByAADgNdip3GkAbABkAGUAO4DRANFAnWMAB0VhY2RmZ21vcHJzdHV2XgphCmgKcgp2CnoKgQqRCpYKqwqtCrsKyArNCuwhaWdSYWMAdQB0AGUAO4DTANNAAAFpeWwKcQpyAGMAO4DUANRAHmRiImxhYwBQYXIAAOA12BLdcgBhAHYAZQA7gNIA0kCAAWFlaQCHCooKjQpjAHIATGFnAGEAqWNjInJvbgCfY3AAZgAA4DXYRt3lI25DdXJseQABRFGeCqYKbyV1YmxlUXVvdGUAAKAcIHUib3RlAACgGCAAoFQqAAFjbLEKtQpyAADgNdiq3GEAcwBoADuA2ADYQGkAbAHACsUKZABlADuA1QDVQGUAcwAAoDcqbQBsADuA1gDWQGUAcgAAAUJQ0wrmCgABYXLXCtoKcgAAoD4gYQBjAAABZWvgCuIKAKDeI2UAdAAAoLQjYSVyZW50aGVzaXMAAKDcI4AEYWNmaGlsb3JzAP0KAwsFCwkLCwsMCxELIwtaC3IjdGlhbEQAAKACInkAH2RyAADgNdgT3WkApmOgY/Ujc01pbnVzsWAAAWlwFQsgC24AYwBhAHIAZQBwAGwAYQBuAOUACgVmAACgGSGAobsqZWlvACoLRQtJC+MiZWRlc4CheiJFU1QANAs5C0ALcSJ1YWwAAKCvKuwkYW50RXF1YWwAoHwiaSJsZGUAAKB+Im0AZQAAoDMgAAFkcE0LUQv1IWN0AKAPIm8jcnRpb24AYaA3ImwAAKAdIgABY2leC2ILcgAA4DXYq9yoYwACVWZvc2oLbwtzC3cLTwBUADuAIgAiQHIAAOA12BTdcABmAACgGiFjAHIAAOA12KzcAAZCRWFjZWZoaW9yc3WPC5MLlwupC7YL2AvbC90LhQyTDJoMowzhIXJyAKAQKUcAO4CuAK5AgAFjbnIAnQugC6ML9SF0ZVRhZwAAoOsncgB0oKAhbAAAoBYpgAFhZXkArwuyC7UL8iFvblhh5CFpbFZhIGR2oBwhZSJyc2UAAAFFVb8LzwsAAWxxwwvIC+UibWVudACgCyL1JGlsaWJyaXVtAKDLIXAmRXF1aWxpYnJpdW0AAKBvKXIAAKAcIW8AoWPnIWh0AARBQ0RGVFVWYewLCgwQDDIMNwxeDHwM9gIAAW5y8Av4C2clbGVCcmFja2V0AACg6SfyIW93AKGSIUJM/wsDDGEAcgAAoOUhZSRmdEFycm93AACgxCFlI2lsaW5nAACgCSNvAPUBFgwAAB4MYiVsZUJyYWNrZXQAAKDnJ24A1AEjDAAAKgxlJGVWZWN0b3IAAKBdKeUiY3RvckKgwiFhAHIAAKBVKWwib29yAACgCyMAAWVyOwxLDGUAAKGiIkFWQQxGDHIicm93AACgpiHlImN0b3IAoFspaSNhbmdsZQBCorMiVgwAAAAAWgxhAHIAAKDQKXEidWFsAACgtSJwAIABRFRWAGUMbAxzDO8kd25WZWN0b3IAoE8pZSRlVmVjdG9yAACgXCnlImN0b3JCoL4hYQByAACgVCnlImN0b3JCoMAhYQByAACgUykAAXB1iQyMDGYAAKAdIe4kZEltcGxpZXMAoHAp6SRnaHRhcnJvdwCg2yEAAWNongyhDHIAAKAbIQCgsSHsJGVEZWxheWVkAKD0KYAGSE9hY2ZoaW1vcXN0dQC/DMgMzAzQDOIM5gwKDQ0NFA0ZDU8NVA1YDQABQ2PDDMYMyCFjeSlkeQAoZEYiVGN5ACxkYyJ1dGUAWmEAorwqYWVpedgM2wzeDOEM8iFvbmBh5CFpbF5hcgBjAFxhIWRyAADgNdgW3e8hcnQAAkRMUlXvDPYM/QwEDW8kd25BcnJvdwAAoJMhZSRmdEFycm93AACgkCHpJGdodEFycm93AKCSIXAjQXJyb3cAAKCRIechbWGjY+EkbGxDaXJjbGUAoBgicABmAADgNdhK3XICHw0AAAAAIg10AACgGiLhIXJlgKGhJUlTVQAqDTINSg3uJXRlcnNlY3Rpb24AoJMidQAAAWJwNw1ADfMhZXRFoI8icSJ1YWwAAKCRIuUicnNldEWgkCJxInVhbAAAoJIibiJpb24AAKCUImMAcgAA4DXYrtxhAHIAAKDGIgACYmNtcF8Nag2ODZANc6DQImUAdABFoNAicSJ1YWwAAKCGIgABY2huDYkNZSJlZHMAgKF7IkVTVAB4DX0NhA1xInVhbAAAoLAq7CRhbnRFcXVhbACgfSJpImxkZQAAoH8iVABoAGEA9ADHCwCgESIAodEiZXOVDZ8NciJzZXQARaCDInEidWFsAACghyJlAHQAAKDRIoAFSFJTYWNmaGlvcnMAtQ27Db8NyA3ODdsN3w3+DRgOHQ4jDk8AUgBOADuA3gDeQMEhREUAoCIhAAFIY8MNxg1jAHkAC2R5ACZkAAFidcwNzQ0JYKRjgAFhZXkA1A3XDdoN8iFvbmRh5CFpbGJhImRyAADgNdgX3QABZWnjDe4N8gHoDQAA7Q3lImZvcmUAoDQiYQCYYwABY27yDfkNayNTcGFjZQAA4F8gCiDTInBhY2UAoAkg7CFkZYChPCJFRlQABw4MDhMOcSJ1YWwAAKBDInUkbGxFcXVhbAAAoEUiaSJsZGUAAKBIInAAZgAA4DXYS93pI3BsZURvdACg2yAAAWN0Jw4rDnIAAOA12K/c8iFva2Zh4QpFDlYOYA5qDgAAbg5yDgAAAAAAAAAAAAB5DnwOqA6zDgAADg8RDxYPGg8AAWNySA5ODnUAdABlADuA2gDaQHIAb6CfIeMhaXIAoEkpcgDjAVsOAABdDnkADmR2AGUAbGEAAWl5Yw5oDnIAYwA7gNsA20AjZGIibGFjAHBhcgAA4DXYGN1yAGEAdgBlADuA2QDZQOEhY3JqYQABZGl/Dp8OZQByAAABQlCFDpcOAAFhcokOiw5yAF9gYQBjAAABZWuRDpMOAKDfI2UAdAAAoLUjYSVyZW50aGVzaXMAAKDdI28AbgBQoMMi7CF1cwCgjiIAAWdwqw6uDm8AbgByYWYAAOA12EzdAARBREVUYWRwc78O0g7ZDuEOBQPqDvMOBw9yInJvdwDCoZEhyA4AAMwOYQByAACgEilvJHduQXJyb3cAAKDFIW8kd25BcnJvdwAAoJUhcSV1aWxpYnJpdW0AAKBuKWUAZQBBoKUiciJyb3cAAKClIW8AdwBuAGEAcgByAG8A9wAQA2UAcgAAAUxS+Q4AD2UkZnRBcnJvdwAAoJYh6SRnaHRBcnJvdwCglyFpAGyg0gNvAG4ApWPpIW5nbmFjAHIAAOA12LDcaSJsZGUAaGFtAGwAO4DcANxAgAREYmNkZWZvc3YALQ8xDzUPNw89D3IPdg97D4AP4SFzaACgqyJhAHIAAKDrKnkAEmThIXNobKCpIgCg5ioAAWVyQQ9DDwCgwSKAAWJ0eQBJD00Paw9hAHIAAKAWIGmgFiDjIWFsAAJCTFNUWA9cD18PZg9hAHIAAKAjIukhbmV8YGUkcGFyYXRvcgAAoFgnaSJsZGUAAKBAItQkaGluU3BhY2UAoAogcgAA4DXYGd1wAGYAAOA12E3dYwByAADgNdix3GQiYXNoAACgqiKAAmNlZm9zAI4PkQ+VD5kPng/pIXJjdGHkIWdlAKDAInIAAOA12BrdcABmAADgNdhO3WMAcgAA4DXYstwAAmZpb3OqD64Prw+0D3IAAOA12BvdnmNwAGYAAOA12E/dYwByAADgNdiz3IAEQUlVYWNmb3N1AMgPyw/OD9EP2A/gD+QP6Q/uD2MAeQAvZGMAeQAHZGMAeQAuZGMAdQB0AGUAO4DdAN1AAAFpedwP3w9yAGMAdmErZHIAAOA12BzdcABmAADgNdhQ3WMAcgAA4DXYtNxtAGwAeGEABEhhY2RlZm9z/g8BEAUQDRAQEB0QIBAkEGMAeQAWZGMidXRlAHlhAAFheQkQDBDyIW9ufWEXZG8AdAB7YfIBFRAAABwQbwBXAGkAZAB0AOgAVAhhAJZjcgAAoCghcABmAACgJCFjAHIAAOA12LXc4QtCEEkQTRAAAGcQbRByEAAAAAAAAAAAeRCKEJcQ8hD9EAAAGxEhETIROREAAD4RYwB1AHQAZQA7gOEA4UByImV2ZQADYYCiPiJFZGl1eQBWEFkQWxBgEGUQAOA+IjMDAKA/InIAYwA7gOIA4kB0AGUAO4C0ALRAMGRsAGkAZwA7gOYA5kByoGEgAOA12B7dcgBhAHYAZQA7gOAA4EAAAWVwfBCGEAABZnCAEIQQ8yF5bQCgNSHoAIMQaABhALFjAAFhcI0QWwAAAWNskRCTEHIAAWFnAACgPypkApwQAAAAALEQAKInImFkc3ajEKcQqRCuEG4AZAAAoFUqAKBcKmwib3BlAACgWCoAoFoqAKMgImVsbXJzersQvRDAEN0Q5RDtEACgpCllAACgICJzAGQAYaAhImEEzhDQENIQ1BDWENgQ2hDcEACgqCkAoKkpAKCqKQCgqykAoKwpAKCtKQCgrikAoK8pdAB2oB8iYgBkoL4iAKCdKQABcHTpEOwQaAAAoCIixWDhIXJyAKB8IwABZ3D1EPgQbwBuAAVhZgAA4DXYUt0Ao0giRWFlaW9wBxEJEQ0RDxESERQRAKBwKuMhaXIAoG8qAKBKImQAAKBLInMAJ2DyIW94ZaBIIvEADhFpAG4AZwA7gOUA5UCAAWN0eQAmESoRKxFyAADgNdi23CpgbQBwAGWgSCLxAPgBaQBsAGQAZQA7gOMA40BtAGwAO4DkAORAAAFjaUERRxFvAG4AaQBuAPQA6AFuAHQAAKARKgAITmFiY2RlZmlrbG5vcHJzdWQRaBGXEZ8RpxGrEdIR1hErEjASexKKEn0RThNbE3oTbwB0AACg7SoAAWNybBGJEWsAAAJjZXBzdBF4EX0RghHvIW5nAKBMInAjc2lsb24A9mNyImltZQAAoDUgaQBtAGWgPSJxAACgzSJ2AY0RkRFlAGUAAKC9ImUAZABnoAUjZQAAoAUjcgBrAHSgtSPiIXJrAKC2IwABb3mjEaYRbgDnAHcRMWTxIXVvAKAeIIACY21wcnQAtBG5Eb4RwRHFEeEhdXPloDUi5ABwInR5dgAAoLApcwDpAH0RbgBvAPUA6gCAAWFodwDLEcwRzhGyYwCgNiHlIWVuAKBsInIAAOA12B/dZwCAA2Nvc3R1dncA4xHyEQUSEhIhEiYSKRKAAWFpdQDpEesR7xHwAKMFcgBjAACg7yVwAACgwyKAAWRwdAD4EfwRABJvAHQAAKAAKuwhdXMAoAEqaSJtZXMAAKACKnECCxIAAAAADxLjIXVwAKAGKmEAcgAAoAUm8iNpYW5nbGUAAWR1GhIeEu8hd24AoL0lcAAAoLMlcCJsdXMAAKAEKmUA5QBCD+UAkg9hInJvdwAAoA0pgAFha28ANhJoEncSAAFjbjoSZRJrAIABbHN0AEESRxJNEm8jemVuZ2UAAKDrKXEAdQBhAHIA5QBcBPIjaWFuZ2xlgKG0JWRscgBYElwSYBLvIXduAKC+JeUhZnQAoMIlaSJnaHQAAKC4JWsAAKAjJLEBbRIAAHUSsgFxEgAAcxIAoJIlAKCRJTQAAKCTJWMAawAAoIglAAFlb38ShxJx4D0A5SD1IWl2AOBhIuUgdAAAoBAjAAJwdHd4kRKVEpsSnxJmAADgNdhT3XSgpSJvAG0AAKClIvQhaWUAoMgiAAZESFVWYmRobXB0dXayEsES0RLgEvcS+xIKExoTHxMjEygTNxMAAkxSbHK5ErsSvRK/EgCgVyUAoFQlAKBWJQCgUyUAolAlRFVkdckSyxLNEs8SAKBmJQCgaSUAoGQlAKBnJQACTFJsctgS2hLcEt4SAKBdJQCgWiUAoFwlAKBZJQCjUSVITFJobHLrEu0S7xLxEvMS9RIAoGwlAKBjJQCgYCUAoGslAKBiJQCgXyVvAHgAAKDJKQACTFJscgITBBMGEwgTAKBVJQCgUiUAoBAlAKAMJQCiACVEVWR1EhMUExYTGBMAoGUlAKBoJQCgLCUAoDQlaSJudXMAAKCfIuwhdXMAoJ4iaSJtZXMAAKCgIgACTFJsci8TMRMzEzUTAKBbJQCgWCUAoBglAKAUJQCjAiVITFJobHJCE0QTRhNIE0oTTBMAoGolAKBhJQCgXiUAoDwlAKAkJQCgHCUAAWV2UhNVE3YA5QD5AGIAYQByADuApgCmQAACY2Vpb2ITZhNqE24TcgAA4DXYt9xtAGkAAKBPIG0A5aA9IogRbAAAoVwAYmh0E3YTAKDFKfMhdWIAoMgnbAF+E4QTbABloCIgdAAAoCIgcAAAoU4iRWWJE4sTAKCuKvGgTyI8BeEMqRMAAN8TABQDFB8UAAAjFDQUAAAAAIUUAAAAAI0UAAAAANcU4xT3FPsUAACIFQAAlhWAAWNwcgCuE7ET1RP1IXRlB2GAoikiYWJjZHMAuxO/E8QTzhPSE24AZAAAoEQqciJjdXAAAKBJKgABYXXIE8sTcAAAoEsqcAAAoEcqbwB0AACgQCoA4CkiAP4AAWVv2RPcE3QAAKBBIO4ABAUAAmFlaXXlE+8T9RP4E/AB6hMAAO0TcwAAoE0qbwBuAA1hZABpAGwAO4DnAOdAcgBjAAlhcABzAHOgTCptAACgUCpvAHQAC2GAAWRtbgAIFA0UEhRpAGwAO4C4ALhAcCJ0eXYAAKCyKXQAAIGiADtlGBQZFKJAcgBkAG8A9ABiAXIAAOA12CDdgAFjZWkAKBQqFDIUeQBHZGMAawBtoBMn4SFyawCgEyfHY3IAAKPLJUVjZWZtcz8UQRRHFHcUfBSAFACgwykAocYCZWxGFEkUcQAAoFciZQBhAlAUAAAAAGAUciJyb3cAAAFsclYUWhTlIWZ0AKC6IWkiZ2h0AACguyGAAlJTYWNkAGgUaRRrFG8UcxSuYACgyCRzAHQAAKCbIukhcmMAoJoi4SFzaACgnSJuImludAAAoBAqaQBkAACg7yrjIWlyAKDCKfUhYnN1oGMmaQB0AACgYybsApMUmhS2FAAAwxRvAG4AZaA6APGgVCKrAG0CnxQAAAAAoxRhAHSgLABAYAChASJmbKcUqRTuABMNZQAAAW14rhSyFOUhbnQAoAEiZQDzANIB5wG6FAAAwBRkoEUibwB0AACgbSpuAPQAzAGAAWZyeQDIFMsUzhQA4DXYVN1vAOQA1wEAgakAO3MeAdMUcgAAoBchAAFhb9oU3hRyAHIAAKC1IXMAcwAAoBcnAAFjdeYU6hRyAADgNdi43AABYnDuFPIUZaDPKgCg0SploNAqAKDSKuQhb3QAoO8igANkZWxwcnZ3AAYVEBUbFSEVRBVlFYQV4SFycgABbHIMFQ4VAKA4KQCgNSlwAhYVAAAAABkVcgAAoN4iYwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/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 Wf;var p6=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"})(Wf||(Wf={}))});function qj(f){return f>=x1.ZERO&&f<=x1.NINE}function Ck(f){return f>=x1.UPPER_A&&f<=x1.UPPER_F||f>=x1.LOWER_A&&f<=x1.LOWER_F}function Nk(f){return f>=x1.UPPER_A&&f<=x1.UPPER_Z||f>=x1.LOWER_A&&f<=x1.LOWER_Z||qj(f)}function bk(f){return f===x1.EQUALS||Nk(f)}class Hj{constructor(f,Y,J){this.decodeTree=f,this.emitCodePoint=Y,this.errors=J,this.state=s1.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=XJ.Strict,this.runConsumed=0}startEntity(f){this.decodeMode=f,this.state=s1.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(f,Y){switch(this.state){case s1.EntityStart:{if(f.charCodeAt(Y)===x1.NUM)return this.state=s1.NumericStart,this.consumed+=1,this.stateNumericStart(f,Y+1);return this.state=s1.NamedEntity,this.stateNamedEntity(f,Y)}case s1.NumericStart:return this.stateNumericStart(f,Y);case s1.NumericDecimal:return this.stateNumericDecimal(f,Y);case s1.NumericHex:return this.stateNumericHex(f,Y);case s1.NamedEntity:return this.stateNamedEntity(f,Y)}}stateNumericStart(f,Y){if(Y>=f.length)return-1;if((f.charCodeAt(Y)|_6)===x1.LOWER_X)return this.state=s1.NumericHex,this.consumed+=1,this.stateNumericHex(f,Y+1);return this.state=s1.NumericDecimal,this.stateNumericDecimal(f,Y)}stateNumericHex(f,Y){while(Y<f.length){let J=f.charCodeAt(Y);if(qj(J)||Ck(J)){let z=J<=x1.NINE?J-x1.ZERO:(J|_6)-x1.LOWER_A+10;this.result=this.result*16+z,this.consumed++,Y++}else return this.emitNumericEntity(J,3)}return-1}stateNumericDecimal(f,Y){while(Y<f.length){let J=f.charCodeAt(Y);if(qj(J))this.result=this.result*10+(J-x1.ZERO),this.consumed++,Y++;else return this.emitNumericEntity(J,2)}return-1}emitNumericEntity(f,Y){var J;if(this.consumed<=Y)return(J=this.errors)===null||J===void 0||J.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(f===x1.SEMI)this.consumed+=1;else if(this.decodeMode===XJ.Strict)return 0;if(this.emitCodePoint(d6(this.result),this.consumed),this.errors){if(f!==x1.SEMI)this.errors.missingSemicolonAfterCharacterReference();this.errors.validateNumericCharacterReference(this.result)}return this.consumed}stateNamedEntity(f,Y){let{decodeTree:J}=this,z=J[this.treeIndex],Z=(z&Wf.VALUE_LENGTH)>>14;while(Y<f.length){if(Z===0&&(z&Wf.FLAG13)!==0){let Q=(z&Wf.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let q=z&Wf.JUMP_TABLE;if(f.charCodeAt(Y)!==q)return this.result===0?0:this.emitNotTerminatedNamedEntity();Y++,this.excess++,this.runConsumed++}while(this.runConsumed<Q){if(Y>=f.length)return-1;let q=this.runConsumed-1,H=J[this.treeIndex+1+(q>>1)],B=q%2===0?H&255:H>>8&255;if(f.charCodeAt(Y)!==B)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();Y++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(Q>>1),z=J[this.treeIndex],Z=(z&Wf.VALUE_LENGTH)>>14}if(Y>=f.length)break;let G=f.charCodeAt(Y);if(G===x1.SEMI&&Z!==0&&(z&Wf.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,Z,this.consumed+this.excess);if(this.treeIndex=yk(J,z,this.treeIndex+Math.max(1,Z),G),this.treeIndex<0)return this.result===0||this.decodeMode===XJ.Attribute&&(Z===0||bk(G))?0:this.emitNotTerminatedNamedEntity();if(z=J[this.treeIndex],Z=(z&Wf.VALUE_LENGTH)>>14,Z!==0){if(G===x1.SEMI)return this.emitNamedEntityData(this.treeIndex,Z,this.consumed+this.excess);if(this.decodeMode!==XJ.Strict&&(z&Wf.FLAG13)===0)this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0}Y++,this.excess++}return-1}emitNotTerminatedNamedEntity(){var f;let{result:Y,decodeTree:J}=this,z=(J[Y]&Wf.VALUE_LENGTH)>>14;return this.emitNamedEntityData(Y,z,this.consumed),(f=this.errors)===null||f===void 0||f.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(f,Y,J){let{decodeTree:z}=this;if(this.emitCodePoint(Y===1?z[f]&~(Wf.VALUE_LENGTH|Wf.FLAG13):z[f+1],J),Y===3)this.emitCodePoint(z[f+2],J);return J}end(){var f;switch(this.state){case s1.NamedEntity:return this.result!==0&&(this.decodeMode!==XJ.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case s1.NumericDecimal:return this.emitNumericEntity(0,2);case s1.NumericHex:return this.emitNumericEntity(0,3);case s1.NumericStart:return(f=this.errors)===null||f===void 0||f.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case s1.EntityStart:return 0}}}function kk(f){let Y="",J=new Hj(f,(z)=>Y+=n6(z));return function(Z,G){let Q=0,q=0;while((q=Z.indexOf("&",q))>=0){Y+=Z.slice(Q,q),J.startEntity(G);let B=J.write(Z,q+1);if(B<0){Q=q+J.end();break}Q=q+B,q=B===0?Q+1:Q}let H=Y+Z.slice(Q);return Y="",H}}function yk(f,Y,J,z){let Z=(Y&Wf.BRANCH_LENGTH)>>7,G=Y&Wf.JUMP_TABLE;if(Z===0)return G!==0&&z===G?J:-1;if(G){let B=z-G;return B<0||B>=Z?-1:f[J+B]-1}let Q=Z+1>>1,q=0,H=Z-1;while(q<=H){let B=q+H>>>1,V=B>>1,K=f[J+V]>>(B&1)*8&255;if(K<z)q=B+1;else if(K>z)H=B-1;else return f[J+Q+B]}return-1}function Sz(f,Y=XJ.Legacy){return Sk(f,Y)}var x1,_6=32,s1,XJ,Sk;var r6=N(()=>{i6();$6();p6();(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"})(x1||(x1={}));(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"})(s1||(s1={}));(function(f){f[f.Legacy=0]="Legacy",f[f.Strict=1]="Strict",f[f.Attribute=2]="Attribute"})(XJ||(XJ={}));Sk=kk(a6)});var o6,s6;var e6=N(()=>{r6();(function(f){f[f.XML=0]="XML",f[f.HTML=1]="HTML"})(o6||(o6={}));(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"})(s6||(s6={}))});import{CliRenderer as Tk,createCliRenderer as uk,engine as Ek}from"@opentui/core";import{createTestRenderer as Gd}from"@opentui/core/testing";import{ASCIIFontRenderable as xk,BoxRenderable as wk,CodeRenderable as hk,DiffRenderable as Pk,InputRenderable as vk,LineNumberRenderable as mk,MarkdownRenderable as ck,ScrollBoxRenderable as nk,SelectRenderable as dk,TabSelectRenderable as ik,TextareaRenderable as lk,TextAttributes as Bj,TextNodeRenderable as ak,TextRenderable as $k}from"@opentui/core";import{engine as qd,Timeline as Hd}from"@opentui/core";import{BaseRenderable as GD,createTextAttributes as _k,InputRenderable as jj,InputRenderableEvents as vG,isTextNodeRenderable as Kj,parseColor as fD,Renderable as rk,RootTextNodeRenderable as ok,ScrollBoxRenderable as sk,SelectRenderable as YD,SelectRenderableEvents as Wj,TabSelectRenderable as JD,TabSelectRenderableEvents as Vj,TextNodeRenderable as tk,TextRenderable as XD}from"@opentui/core";import{BaseRenderable as Qy,isTextNodeRenderable as qy,TextNodeRenderable as Hy,TextRenderable as By,Yoga as ZD}from"@opentui/core";import{BoxRenderable as Fd,RootRenderable as Od}from"@opentui/core";import{TimeToFirstDrawRenderable as Ky}from"@opentui/core";import{createSlotRegistry as gd}from"@opentui/core";function fy({createElement:f,createTextNode:Y,createSlotNode:J,isTextNode:z,replaceText:Z,insertNode:G,removeNode:Q,setProperty:q,getParentNode:H,getFirstChild:B,getNextSibling:V}){function j(b,g,C,y){if(C!==void 0&&!y)y=[];if(typeof g!=="function")return K(b,g,y,C);gY((r)=>K(b,g(),r,C),y)}function K(b,g,C,y,r){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 J0=C[0];if(J0&&z(J0))Z(J0,g);else J0=Y(g);C=M(b,C,y,J0)}else if(C!==""&&typeof C==="string")Z(B(b),C=g);else M(b,C,y,Y(g)),C=g}else if(g==null||z0==="boolean")C=M(b,C,y);else if(z0==="function")return gY(()=>{let J0=g();while(typeof J0==="function")J0=J0();C=K(b,J0,C,y)}),()=>C;else if(Array.isArray(g)){let J0=[];if(L(J0,g,r))return gY(()=>C=K(b,J0,C,y,!0)),()=>C;if(J0.length===0){let T=M(b,C,y);if(t)return C=T}else if(Array.isArray(C))if(C.length===0)R(b,J0,y);else O(b,C,J0);else if(C==null||C==="")R(b,J0);else O(b,t&&C||[B(b)],J0);C=J0}else{if(Array.isArray(C)){if(t)return C=M(b,C,y,g);M(b,C,null,g)}else if(C==null||C===""||!B(b))G(b,g);else S(b,g,B(b));C=g}return C}function L(b,g,C){let y=!1;for(let r=0,z0=g.length;r<z0;r++){let t=g[r],J0;if(t==null||t===!0||t===!1);else if(Array.isArray(t))y=L(b,t)||y;else if((J0=typeof t)==="string"||J0==="number")b.push(Y(t));else if(J0==="function")if(C){while(typeof t==="function")t=t();y=L(b,Array.isArray(t)?t:[t])||y}else b.push(t),y=!0;else b.push(t)}return y}function O(b,g,C){let y=C.length,r=g.length,z0=y,t=0,J0=0,T=V(g[r-1]),B0=null;while(t<r||J0<z0){if(g[t]===C[J0]){t++,J0++;continue}while(g[r-1]===C[z0-1])r--,z0--;if(r===t){let _=z0<y?J0?V(C[J0-1]):C[z0-J0]:T;while(J0<z0)G(b,C[J0++],_)}else if(z0===J0)while(t<r){if(!B0||!B0.has(g[t]))Q(b,g[t]);t++}else if(g[t]===C[z0-1]&&C[J0]===g[r-1]){let _=V(g[--r]);G(b,C[J0++],V(g[t++])),G(b,C[--z0],_),g[r]=C[z0]}else{if(!B0){B0=new Map;let D0=J0;while(D0<z0)B0.set(C[D0],D0++)}let _=B0.get(g[t]);if(_!=null)if(J0<_&&_<z0){let D0=t,R0=1,$;while(++D0<r&&D0<z0){if(($=B0.get(g[D0]))==null||$!==_+R0)break;R0++}if(R0>_-J0){let x=g[t];while(J0<_)G(b,C[J0++],x)}else S(b,C[J0++],g[t++])}else t++;else Q(b,g[t++])}}}function M(b,g,C,y){if(C===void 0){let z0;while(z0=B(b))Q(b,z0);return y&&G(b,y),y??""}let r=y||J();if(g.length){let z0=!1;for(let t=g.length-1;t>=0;t--){let J0=g[t];if(r!==J0){let T=H(J0)===b;if(!z0&&!t)T?S(b,r,J0):G(b,r,C);else T&&Q(b,J0)}else z0=!0}}else G(b,r,C);return[r]}function R(b,g,C){for(let y=0,r=g.length;y<r;y++)G(b,g[y],C)}function S(b,g,C){G(b,g,C),Q(b,C)}function a(b,g,C={},y){if(g||(g={}),!y)gY(()=>C.children=K(b,g.children,C.children));return gY(()=>g.ref&&g.ref(b)),gY(()=>{for(let r in g){if(r==="children"||r==="ref")continue;let z0=g[r];if(z0===C[r])continue;q(b,r,z0,C[r]),C[r]=z0}}),C}return{render(b,g){let C;return Bz((y)=>{C=y,j(g,b())}),C},insert:j,spread(b,g,C){if(typeof g==="function")gY((y)=>a(b,g(),y,C));else a(b,g,void 0,C)},createElement:f,createTextNode:Y,insertNode:G,setProp(b,g,C,y){return q(b,g,C,y),C},mergeProps:YQ,effect:gY,memo:ek,createComponent:cV,use(b,g,C){return d1(()=>b(g,C))}}}function Yy(f){let Y=fy(f);return Y.mergeProps=YQ,Y}function Fj(f){if(!Sq.has(f))Sq.set(f,0);let Y=Sq.get(f)+1;return Sq.set(f,Y),`${f}-${Y}`}function Jy(f,Y,J){if(t1("Inserting node:",a1(Y),"into parent:",a1(f),"with anchor:",a1(J),Y instanceof SZ),Y instanceof mG)Y.parent=f,Y=Y.getSlotChild(f);if(J&&J instanceof mG)J=J.getSlotChild(f);if(Kj(Y)){if(!(f instanceof XD)&&!Kj(f))throw Error(`Orphan text error: "${Y.toChunks().map((G)=>G.text).join("")}" must have a <text> as a parent: ${f.id} above ${Y.id}`)}if(!(f instanceof GD))throw console.error("[INSERT]","Tried to mount a non base renderable"),Error("Tried to mount a non base renderable");if(!J){f.add(Y);return}let z=Uj(f),Z=z.findIndex((G)=>G.id===J.id);if(Z===-1)t1("[INSERT]","Could not find anchor",a1(f),a1(J),"[children]",...z.map((G)=>G.id));f.add(Y,Z)}function zy(f,Y){if(t1("Removing node:",a1(Y),"from parent:",a1(f)),Y instanceof mG)Y.parent=null,Y=Y.getSlotChild(f);f.remove(Y.id),process.nextTick(()=>{if(Y instanceof GD&&!Y.parent){Y.destroyRecursively();return}})}function Zy(f){t1("Creating text node:",f);let Y=Fj("text-node");if(typeof f==="number")f=f.toString();return SZ.fromString(Sz(f),{id:Y})}function Gy(){let f=Fj("slot-node");return t1("Creating slot node",f),new mG(f)}function zD(f){t1("Getting parent of node:",a1(f));let Y=f.parent??void 0;if(Y instanceof ok)Y=Y.textParent??void 0;let J=Y?.parent?.parent?.parent;if(J instanceof sk&&J.content===Y)Y=J;return Y}function Wy(f){Object.assign(VD,f)}function Vy(){return VD}var Mj,Xf=()=>{let f=Tf(Mj);if(!f)throw Error("No renderer found");return f},pk=(f)=>{let Y=Xf();r1(()=>{Y.on("resize",f)}),b1(()=>{Y.off("resize",f)})},uY=()=>{let f=Xf(),[Y,J]=p({width:f.width,height:f.height});return pk((Z,G)=>{J({width:Z,height:G})}),Y},ek=(f)=>K0(()=>f()),Sq,t1=(...f)=>{if(process.env.DEBUG)console.log("[Reconciler]",...f)},SZ,a1=(f)=>{if(!f)return;return f.id},Uj=(f)=>{let Y;if(f instanceof XD)Y=f.getTextChildren();else Y=f.getChildren();return Y},Xy,E,T0,k,W,x0,D,U,Dd,X,QD,mJ,Oj,qD,HD,mG,cG,Iq,Dj,Lj,BD,jD,WD,jy,VD,Uy=(f,Y)=>{let J,z=!1,Z=!1,G=!0,Q=!1,q=f.destroy.bind(f),H=()=>{if(Z)return;if(!J){z=!0;return}Z=!0,J()};f.once("destroy",H),f.destroy=()=>{if(G){Q=!0;return}q()};try{J=Xy(()=>k(Mj.Provider,{get value(){return f},get children(){return k(Y,{})}}),f.root)}finally{G=!1,f.destroy=q}if(z)H();if(Q)q()},KD=async(f,Y={})=>{let J=Y instanceof Tk?Y:await uk({...Y,onDestroy:()=>{Y.onDestroy?.()}});Ek.attach(J),Uy(J,f)};var h=N(()=>{B1();e6();B1();B1();B1();Mj=CY();Sq=new Map;SZ=class SZ extends tk{static fromString(f,Y={}){let J=new SZ(Y);return J.add(f),J}};({render:Xy,effect:E,memo:T0,createComponent:k,createElement:W,createTextNode:x0,insertNode:D,insert:U,spread:Dd,setProp:X,mergeProps:QD,use:mJ}=Yy({createElement(f){t1("Creating element:",f);let Y=Fj(f),J=Tf(Mj);if(!J)throw Error("No renderer found");let z=Vy();if(!z[f])throw Error(`[Reconciler] Unknown component type: ${f}`);let Z=new z[f](J,{id:Y});return t1("Element created with id:",Y),Z},createTextNode:Zy,createSlotNode:Gy,replaceText(f,Y){if(t1("Replacing text:",Y,"in node:",a1(f)),!(f instanceof SZ))return;f.replace(Sz(Y),0)},setProperty(f,Y,J,z){if(Y.startsWith("on:")){let Z=Y.slice(3);if(J)f.on(Z,J);if(z)f.off(Z,z);return}if(Kj(f)){if(Y==="href"){f.link={url:J};return}if(Y==="style"){f.attributes|=_k(J),f.fg=J.fg?fD(J.fg):f.fg,f.bg=J.bg?fD(J.bg):f.bg;return}return}switch(Y){case"id":t1("Id mapped",f.id,"=",J),f[Y]=J;break;case"focused":if(!(f instanceof rk))return;if(J)f.focus();else f.blur();break;case"onChange":let Z=void 0;if(f instanceof YD)Z=Wj.SELECTION_CHANGED;else if(f instanceof JD)Z=Vj.SELECTION_CHANGED;else if(f instanceof jj)Z=vG.CHANGE;if(!Z)break;if(J)f.on(Z,J);if(z)f.off(Z,z);break;case"onInput":if(f instanceof jj){if(J)f.on(vG.INPUT,J);if(z)f.off(vG.INPUT,z)}break;case"onSubmit":if(f instanceof jj){if(J)f.on(vG.ENTER,J);if(z)f.off(vG.ENTER,z)}else f[Y]=J;break;case"onSelect":if(f instanceof YD){if(J)f.on(Wj.ITEM_SELECTED,J);if(z)f.off(Wj.ITEM_SELECTED,z)}else if(f instanceof JD){if(J)f.on(Vj.ITEM_SELECTED,J);if(z)f.off(Vj.ITEM_SELECTED,z)}break;case"style":for(let G in J){let Q=J[G];if(z!==void 0&&Q===z[G])continue;f[G]=Q}break;case"text":case"content":{let G=typeof J==="string"?J:Array.isArray(J)?J.join(""):`${J}`;f[Y]=Sz(G);break}default:f[Y]=J}},isTextNode(f){return f instanceof SZ},insertNode:Jy,removeNode:zy,getParentNode:zD,getFirstChild(f){t1("Getting first child of node:",a1(f));let Y=Uj(f)[0];if(!Y){t1("No first child found for node:",a1(f));return}return t1("First child found:",a1(Y),"for node:",a1(f)),Y},getNextSibling(f){t1("Getting next sibling of node:",a1(f));let Y=zD(f);if(!Y){t1("No parent found for node:",a1(f));return}let J=Uj(Y),z=J.indexOf(f);if(z===-1||z===J.length-1){t1("No next sibling found for node:",a1(f));return}let Z=J[z+1];if(!Z){t1("Next sibling is null for node:",a1(f));return}return t1("Next sibling found:",a1(Z),"for node:",a1(f)),Z}}));Oj=class Oj extends Qy{constructor(f){super({id:f})}add(f,Y){throw Error("Can't add children on an Slot renderable")}getChildren(){return[]}remove(f){}insertBefore(f,Y){throw Error("Can't add children on an Slot renderable")}getRenderable(f){return}getChildrenCount(){return 0}requestRender(){}findDescendantById(f){return}};qD=class qD extends Hy{slotParent;destroyed=!1;constructor(f,Y){super({id:f});this._visible=!1,this.slotParent=Y}destroy(){if(this.destroyed)return;this.destroyed=!0,this.slotParent?.destroy(),super.destroy()}};HD=class HD extends Oj{yogaNode;slotParent;destroyed=!1;constructor(f,Y){super(f);this._visible=!1,this.slotParent=Y,this.yogaNode=ZD.default.Node.create(),this.yogaNode.setDisplay(ZD.Display.None)}getLayoutNode(){return this.yogaNode}updateFromLayout(){}updateLayout(){}onRemove(){}destroy(){if(this.destroyed)return;this.destroyed=!0,super.destroy(),this.slotParent?.destroy()}};mG=class mG extends Oj{layoutNode;textNode;destroyed=!1;constructor(f){super(f);this._visible=!1}getSlotChild(f){if(qy(f)||f instanceof By){if(!this.textNode)this.textNode=new qD(`slot-text-${this.id}`,this);return this.textNode}if(!this.layoutNode)this.layoutNode=new HD(`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()}};cG=class cG extends ak{_ctx;constructor(f,Y){super(Y);this._ctx=f}};Iq=class Iq extends cG{constructor(f,Y){super(null,f);if(Y==="b"||Y==="strong")this.attributes=(this.attributes||0)|Bj.BOLD;else if(Y==="i"||Y==="em")this.attributes=(this.attributes||0)|Bj.ITALIC;else if(Y==="u")this.attributes=(this.attributes||0)|Bj.UNDERLINE}};Dj=class Dj extends Iq{constructor(f){super(f,"b")}};Lj=class Lj extends Iq{constructor(f){super(f,"i")}};BD=class BD extends Iq{constructor(f){super(f,"u")}};jD=class jD extends cG{constructor(f,Y){super(null,Y);this.add()}add(){return super.add(`
262
- `)}};WD=class WD extends cG{constructor(f,Y){let J={...Y,link:{url:Y.href}};super(null,J)}};jy={box:wk,text:$k,input:vk,select:dk,textarea:lk,ascii_font:xk,tab_select:ik,scrollbox:nk,code:hk,diff:Pk,line_number:mk,markdown:ck,span:cG,strong:Dj,b:Dj,em:Lj,i:Lj,u:BD,br:jD,a:WD},VD={...jy};Wy({time_to_first_draw:Ky})});function cJ(f){if(f===void 0)return"undefined";if(f===null)return"null";let Y=Array.isArray(f)?"array":typeof f,J;try{J=typeof f==="string"?f:JSON.stringify(f)}catch{J=String(f)}if(J.length>120)J=`${J.slice(0,120)}\u2026`;return`${Y}:${J}`}function Dy(f){let Y=f?.changes;if(!Y||typeof Y!=="object"||Array.isArray(Y))return null;let J=new Map;for(let[z,Z]of Object.entries(Y)){let G=Z;if(typeof G?.added!=="number"||typeof G.deleted!=="number")return null;J.set(z,{added:G.added,deleted:G.deleted})}return J}function Ly(f,Y){if(f.size!==Y.size)return!1;for(let[J,z]of f){let Z=Y.get(J);if(!Z||!TY(z,Z))return!1}return!0}class Vf{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,Y={}){this.client=f;let[J,z]=p([]),[Z,G]=p(null),[Q,q]=p(null),[H,B]=p(null),[V,j]=p(new Map),[K,L]=p(new Map),[O,M]=p(null),[R,S]=p(null),[a,b]=p(null),[g,C]=p("online");this.tasksAcc=J,this.setTasks=(y)=>z(()=>y),this.activeTaskAcc=Z,this.setActiveTaskSig=(y)=>G(()=>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=K,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)=>b(()=>y),this.connectionStateAcc=g,this.setConnectionState=(y)=>C(()=>y),this.ensureReachable=Y.ensureReachable??RZ,this.role=Y.role??"pane",this.channels=Y.channels,this.subscribesTasks=!Y.channels||Y.channels.includes("task.snapshot"),this.client.on("*",(y)=>this.handleEvent(y.name,y.payload)),this.client.onLifecycle("close",()=>{if(this.setConnectionState("disconnected"),this.role==="pane")aY("orch","daemon socket closed \u2014 starting non-spawning reconnect loop"),this.reconnectLoop()})}async reconnectLoop(){if(this.reconnecting)return;this.reconnecting=!0;let f=500,Y=0;while(!this.client.isDisposed){if(await new Promise((J)=>setTimeout(J,f)),this.client.isDisposed)break;Y++;try{await this.init(),aY("orch",`reconnected and re-subscribed after ${Y} attempt(s) \u2014 task list re-synced`),this.reconnecting=!1;return}catch(J){if(Y===1||Y%10===0)p1("orch-reconnect",J);f=Math.min(f*2,3000)}}this.reconnecting=!1}async init(){let f=await this.client.request("hello",{protocolVersion:cf,minProtocolVersion:VJ}),Y=typeof f.protocolVersion==="number"?f.protocolVersion:cf,J=typeof f.minProtocolVersion==="number"?f.minProtocolVersion:Y;if(!MX({localVersion:cf,localMin:VJ,remoteVersion:Y,remoteMin:J}))throw Error(`kobe daemon is protocol v${Y} (min v${J}); this client is v${cf} (min v${VJ}). 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(nG));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"),aY("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()=>XW(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((Y)=>Y.id===f)}subscribeTasks(f){try{f(this.listTasks())}catch(J){console.error("[kobe RemoteOrchestrator] task listener threw on subscribe:",J)}let Y=!0;return Bz((J)=>{return Z1(()=>{let z=this.tasksAcc();if(Y){Y=!1;return}try{f(z)}catch(Z){console.error("[kobe RemoteOrchestrator] task listener threw:",Z)}}),J})}async createTask(f){let{modelEffort:Y,...J}=f,z=await this.client.request("task.create",{...J,effort:Y});return nG(z.task)}async ensureMainTask(f){let Y=await this.client.request("task.ensureMain",{repo:f});return nG(Y.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,Y){await this.client.request("task.rename",{taskId:String(f),title:Y})}async setBranch(f,Y){await this.client.request("task.setBranch",{taskId:String(f),branch:Y})}async setVendor(f,Y){await this.client.request("task.setVendor",{taskId:String(f),vendor:Y})}async setPinned(f,Y){await this.client.request("task.pin",{taskId:String(f),pinned:Y})}async moveTask(f,Y){await this.client.request("task.move",{taskId:String(f),direction:Y<0?"up":"down"})}async setArchived(f,Y){await this.client.request("task.archive",{taskId:String(f),archived:Y})}async setStatus(f,Y){await this.client.request("task.status",{taskId:String(f),status:Y})}async deleteTask(f,Y){await this.client.request("task.delete",{taskId:String(f),force:Y?.force})}async discoverAdoptableWorktrees(f){return(await this.client.request("worktree.discoverAdoptable",{repo:f})).worktrees}async adoptWorktree(f){let Y=await this.client.request("worktree.adopt",f);return nG(Y.task)}async setActiveTask(f){await this.client.request("task.setActive",{taskId:f===null?null:String(f)})}handleEvent(f,Y){if(f==="task.snapshot"){let J=Y?.tasks;if(Array.isArray(J))this.setTasks(J.map(nG)),this.pruneEngineState(J),this.pruneTaskJobs(J);else p1("orch",`dropped task.snapshot event: tasks is not an array (got ${cJ(J)})`);return}if(f==="active-task"){let J=Y?.taskId;this.setActiveTaskSig(typeof J==="string"?J:null);return}if(f==="update"){let J=Y?.info;this.setUpdateSig(J??null);return}if(f==="engine-state"){let J=Y;if(typeof J?.taskId!=="string"||typeof J.state!=="string"){p1("orch",`dropped engine-state event: taskId/state must be strings (taskId=${cJ(J?.taskId)}, state=${cJ(J?.state)})`);return}let z=new Map(this.engineStateAcc());if(J.state==="idle")z.delete(J.taskId);else z.set(J.taskId,{state:J.state,detail:J.detail,at:typeof J.at==="number"?J.at:0});this.setEngineStateSig(z);return}if(f==="task.jobs"){let J=Y;if(typeof J?.taskId!=="string"||J.kind!=="ensureWorktree"){p1("orch",`dropped task.jobs event: expected string taskId + kind "ensureWorktree" (taskId=${cJ(J?.taskId)}, kind=${cJ(J?.kind)})`);return}let z=this.taskJobsAcc();if(J.phase==="running"){let Z=new Map(z);Z.set(J.taskId,{kind:J.kind}),this.setTaskJobsSig(Z);return}if((J.phase==="done"||J.phase==="error")&&z.has(J.taskId)){let Z=new Map(z);Z.delete(J.taskId),this.setTaskJobsSig(Z)}return}if(f==="worktree.changes"){let J=Dy(Y);if(!J){p1("orch",`dropped worktree.changes event: malformed changes payload (${cJ(Y)})`);return}let z=this.worktreeChangesAcc();if(z&&Ly(z,J))return;this.setWorktreeChangesSig(J);return}if(f==="ui-prefs"){let J=Y;if(typeof J?.theme!=="string"){p1("orch",`dropped ui-prefs event: theme must be a string (got ${cJ(J?.theme)})`);return}this.setUiPrefsSig({theme:J.theme,transparentBackground:J.transparentBackground===!0,focusAccent:typeof J.focusAccent==="string"?J.focusAccent:null,locale:typeof J.locale==="string"?J.locale:"",sortMode:J.sortMode==="recent"?"recent":"default",keysCollapsed:J.keysCollapsed===!0,projectFilter:typeof J.projectFilter==="string"&&J.projectFilter.length>0?J.projectFilter:null});return}if(f==="keybindings"){let J=Y;if(typeof J?.rev!=="number"){p1("orch",`dropped keybindings event: rev must be a number (got ${cJ(J?.rev)})`);return}this.setKeybindingsRevSig(J.rev);return}}pruneEngineState(f){let Y=this.engineStateAcc();if(Y.size===0)return;let J=new Set(f.map((Z)=>Z.id)),z=null;for(let Z of Y.keys()){if(J.has(Z))continue;if(!z)z=new Map(Y);z.delete(Z)}if(z)this.setEngineStateSig(z)}pruneTaskJobs(f){let Y=this.taskJobsAcc();if(Y.size===0)return;let J=new Set(f.map((Z)=>Z.id)),z=null;for(let Z of Y.keys()){if(J.has(Z))continue;if(!z)z=new Map(Y);z.delete(Z)}if(z)this.setTaskJobsSig(z)}}function nG(f){return{id:YG(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 nJ=N(()=>{Yz();Lf();eJ();B1();FZ();RY();Df()});function LD(f){let Y=f[GY];if(!Y){if(Object.defineProperty(f,GY,{value:Y=new Proxy(f,Oy)}),!Array.isArray(f)){let J=Object.keys(f),z=Object.getOwnPropertyDescriptors(f),Z=Object.getPrototypeOf(f),G=Z!==null&&f!==null&&typeof f==="object"&&!Array.isArray(f)&&Z!==Object.prototype;if(G){let Q=Object.getOwnPropertyDescriptors(Z);J.push(...Object.keys(Q)),Object.assign(z,Q)}for(let Q=0,q=J.length;Q<q;Q++){let H=J[Q];if(G&&H==="constructor")continue;if(z[H].get)Object.defineProperty(f,H,{configurable:!0,enumerable:z[H].enumerable,get:z[H].get.bind(Y)})}}}return Y}function Tq(f){let Y;return f!=null&&typeof f==="object"&&(f[GY]||!(Y=Object.getPrototypeOf(f))||Y===Object.prototype||Array.isArray(f))}function iG(f,Y=new Set){let J,z,Z,G;if(J=f!=null&&f[Aj])return J;if(!Tq(f)||Y.has(f))return f;if(Array.isArray(f)){if(Object.isFrozen(f))f=f.slice(0);else Y.add(f);for(let Q=0,q=f.length;Q<q;Q++)if(Z=f[Q],(z=iG(Z,Y))!==Z)f[Q]=z}else{if(Object.isFrozen(f))f=Object.assign({},f);else Y.add(f);let Q=Object.keys(f),q=Object.getOwnPropertyDescriptors(f);for(let H=0,B=Q.length;H<B;H++){if(G=Q[H],q[G].get)continue;if(Z=f[G],(z=iG(Z,Y))!==Z)f[G]=z}}return f}function uq(f,Y){let J=f[Y];if(!J)Object.defineProperty(f,Y,{value:J=Object.create(null)});return J}function lG(f,Y,J){if(f[Y])return f[Y];let[z,Z]=p(J,{equals:!1,internal:!0});return z.$=Z,f[Y]=z}function My(f,Y){let J=Reflect.getOwnPropertyDescriptor(f,Y);if(!J||J.get||!J.configurable||Y===GY||Y===IZ)return J;return delete J.value,delete J.writable,J.get=()=>f[GY][Y],J}function MD(f){fQ()&&lG(uq(f,IZ),DD)()}function Fy(f){return MD(f),Reflect.ownKeys(f)}function Eq(f,Y,J,z=!1){if(Y==="__proto__"){console.warn('Refusing to set "__proto__" on a store.');return}if(!z&&f[Y]===J)return;let Z=f[Y],G=f.length;if(UD.onStoreNodeUpdate&&UD.onStoreNodeUpdate(f,Y,J,Z),J===void 0){if(delete f[Y],f[QJ]&&f[QJ][Y]&&Z!==void 0)f[QJ][Y].$()}else if(f[Y]=J,f[QJ]&&f[QJ][Y]&&Z===void 0)f[QJ][Y].$();let Q=uq(f,IZ),q;if(q=lG(Q,Y,Z))q.$(()=>J);if(Array.isArray(f)&&f.length!==G){for(let H=f.length;H<G;H++)(q=Q[H])&&q.$();(q=lG(Q,"length",G))&&q.$(f.length)}(q=Q[DD])&&q.$()}function FD(f,Y){let J=Object.keys(Y);for(let z=0;z<J.length;z+=1){let Z=J[z];if(OD(Z))continue;Eq(f,Z,Y[Z])}}function OD(f){return f==="__proto__"||f==="constructor"||f==="prototype"}function Ay(f,Y){if(typeof Y==="function")Y=Y(f);if(Y=iG(Y),Array.isArray(Y)){if(f===Y)return;let J=0,z=Y.length;for(;J<z;J++){let Z=Y[J];if(f[J]!==Z)Eq(f,J,Z)}Eq(f,"length",z)}else FD(f,Y)}function dG(f,Y,J=[]){let z,Z=f;if(Y.length>1){z=Y.shift();let Q=typeof z,q=Array.isArray(f);if(Q==="string"&&(z==="__proto__"||Y.length>1&&OD(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++)dG(f,[z[H]].concat(Y),J);return}else if(q&&Q==="function"){for(let H=0;H<f.length;H++)if(z(f[H],H))dG(f,[H].concat(Y),J);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)dG(f,[j].concat(Y),J);return}else if(Y.length>1){dG(f[z],Y,[z].concat(J));return}Z=f[z],J=[z].concat(J)}let G=Y[0];if(typeof G==="function"){if(G=G(Z,J),G===Z)return}if(z===void 0&&G==null)return;if(G=iG(G),z===void 0||Tq(Z)&&Tq(G)&&!Array.isArray(G))FD(Z,G);else Eq(f,z,G)}function EY(...[f,Y]){let J=iG(f||{}),z=Array.isArray(J);if(typeof J!=="object"&&typeof J!=="function")throw Error(`Unexpected type ${typeof J} received when initializing 'createStore'. Expected an object.`);let Z=LD(J);dV.registerGraph({value:J,name:Y&&Y.name});function G(...Q){eX(()=>{z&&Q.length===1?Ay(J,Q[0]):dG(J,Q)})}return[Z,G]}var Aj,IZ,QJ,DD,UD,Oy,xd;var TZ=N(()=>{B1();Aj=Symbol("store-raw"),IZ=Symbol("store-node"),QJ=Symbol("store-has"),DD=Symbol("store-self"),UD={onStoreNodeUpdate:null};Oy={get(f,Y,J){if(Y===Aj)return f;if(Y===GY)return J;if(Y===oX)return MD(f),J;let z=uq(f,IZ),Z=z[Y],G=Z?Z():f[Y];if(Y===IZ||Y===QJ||Y==="__proto__")return G;if(!Z){let Q=Object.getOwnPropertyDescriptor(f,Y);if(fQ()&&(typeof G!=="function"||f.hasOwnProperty(Y))&&!(Q&&Q.get))G=lG(z,Y,G)()}return Tq(G)?LD(G):G},has(f,Y){if(Y===Aj||Y===GY||Y===oX||Y===IZ||Y===QJ||Y==="__proto__")return!0;return fQ()&&lG(uq(f,QJ),Y)(),Y in f},set(){return console.warn("Cannot mutate a Store directly"),!0},deleteProperty(){return console.warn("Cannot mutate a Store directly"),!0},ownKeys:Fy,getOwnPropertyDescriptor:My};xd=Symbol("store-root")});function xq(f){let Y=CY();return{provider:(J)=>{let z=f.init(J);return k(G0,{get when(){return z.ready===void 0||z.ready===!0},get children(){return k(Y.Provider,{value:z,get children(){return J.children}})}})},use(){let J=Tf(Y);if(!J)throw Error(`${f.name} context must be used within a context provider`);return J}}}var Rj=N(()=>{h();h();B1()});import{RGBA as Iz}from"@opentui/core";function gy(){return Object.keys(Qf.themes)}function aG(f){return Boolean(Qf.themes[f])}function Cj(f,Y){if(!f)return!1;if(!Y||typeof Y!=="object"||!Y.theme)return!1;return Tz("themes",{...Qf.themes,[f]:Y}),!0}function gj(f,Y="dark"){let J=f.defs??{};function z(H,B=[]){if(typeof H==="string"){if(H==="transparent"||H==="none")return Iz.fromInts(0,0,0,0);if(H.startsWith("#"))return Iz.fromHex(H);if(B.includes(H))return Iz.fromInts(0,0,0);let V=J[H]??f.theme[H];if(V===void 0)return Iz.fromInts(0,0,0);return z(V,[...B,H])}return z(H[Y],B)}let Z={};for(let[H,B]of Object.entries(f.theme))Z[H]=z(B);let G=Z.text??Iz.fromHex("#ffffff"),Q=Z.background??Iz.fromHex("#000000");return{...{primary:Z.primary??G,secondary:Z.secondary??G,accent:Z.accent??Z.primary??G,error:Z.error??G,warning:Z.warning??G,success:Z.success??G,info:Z.info??G,text:G,textMuted:Z.textMuted??G,background:Q,backgroundPanel:Z.backgroundPanel??Q,backgroundElement:Z.backgroundElement??Q,backgroundMenu:Z.backgroundMenu??Z.backgroundElement??Q,backgroundDialog:Z.backgroundDialog??Z.backgroundPanel??Q,border:Z.border??G,borderActive:Z.borderActive??Z.border??G,borderSubtle:Z.borderSubtle??Z.border??G,diffAdded:Z.diffAdded??Z.success??G,diffRemoved:Z.diffRemoved??Z.error??G,diffContext:Z.diffContext??Z.textMuted??G,diffHunkHeader:Z.diffHunkHeader??Z.textMuted??G,diffAddedBg:Z.diffAddedBg??Q,diffRemovedBg:Z.diffRemovedBg??Q,selectedListItemText:Z.selectedListItemText??Q},...Z}}var Ry,uz,Qf,Tz,n0,AD;var w1=N(()=>{h();B1();TZ();Rj();RQ();gQ();CQ();NQ();bQ();kQ();yQ();Ry={claude:ZZ,conductor:GZ,nord:QZ,opencode:qZ,dracula:XZ,tokyonight:BZ,"osaka-jade":HZ},uz=["primary","success","info"],[Qf,Tz]=EY({themes:{...Ry},active:"claude",mode:"dark",transparentBackground:!1,focusAccent:"primary"});({use:n0,provider:AD}=xq({name:"Theme",init:(f)=>{if(f.mode)Tz("mode",f.mode);if(f.theme&&aG(f.theme))Tz("active",f.theme);let Y=Xf(),J=K0(()=>{let Z=Qf.themes[Qf.active];if(Z)return gj(Z,Qf.mode);let G=Qf.themes.claude??Qf.themes.opencode??Object.values(Qf.themes)[0];if(!G)return gj({theme:{background:"#000000",text:"#ffffff"}},Qf.mode);return gj(G,Qf.mode)}),z=K0(()=>{let Z=J(),G=Z[Qf.focusAccent]??Z.primary,Q={...Z,focusAccent:G};if(!Qf.transparentBackground)return Q;let q=Iz.fromInts(0,0,0,0);return{...Q,background:q,backgroundPanel:q}});return Z1(()=>{Y?.setBackgroundColor(z().background)}),{theme:new Proxy({},{get(Z,G){let Q=z();return Q[G]??Q.text}}),get selected(){return Qf.active},get transparentBackground(){return Qf.transparentBackground},get focusAccent(){return Qf.focusAccent},mode(){return Qf.mode},set(Z){if(!aG(Z))return!1;return Tz("active",Z),!0},setMode(Z){Tz("mode",Z)},setTransparentBackground(Z){Tz("transparentBackground",Z)},setFocusAccent(Z){Tz("focusAccent",Z)},all(){return gy()},has(Z){return aG(Z)}}}}))});var RD,gD;var CD=N(()=>{RD={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"}},gD={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 ND,bD;var kD=N(()=>{ND={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"}},bD={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 yD,SD;var ID=N(()=>{yD={title:"kobe \u2014 keybindings",esc:"esc"},SD={title:"kobe \u2014 \u5FEB\u6377\u952E",esc:"esc"}});var TD,uD;var ED=N(()=>{TD={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)"}},uD={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 xD,wD;var hD=N(()=>{xD={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"}},wD={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 PD,vD;var mD=N(()=>{PD={badge:{newActivity:"\u25CF new"},preview:{diffVsHead:"diff vs HEAD",file:"file",closeHint:"\xB7 q to close",loading:"loading\u2026"}},vD={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 cD,nD;var dD=N(()=>{cD={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"},nD={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 iD,lD;var aD=N(()=>{iD={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)"}},lD={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 $D,pD;var _D=N(()=>{$D={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}"}},pD={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 rD,oD;var sD=N(()=>{rD={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`"}},oD={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 $G(f){return typeof f==="string"&&Ez.some((Y)=>Y.id===f)}var Cy,Ny,Ez,uZ,EZ="en";var xZ=N(()=>{CD();kD();ID();ED();hD();mD();dD();aD();_D();sD();Cy={settings:iD,tasks:$D,files:ND,newTask:xD,ops:PD,update:rD,quickTask:cD,help:yD,common:RD,keys:TD},Ny={settings:lD,tasks:pD,files:bD,newTask:wD,ops:vD,update:oD,quickTask:nD,help:SD,common:gD,keys:uD},Ez=[{id:"en",label:"English"},{id:"zh",label:"\u4E2D\u6587"}],uZ={en:Cy,zh:Ny}});function pG(f){if(uZ[f])by("lang",f)}function bj(){return Nj.lang}function tD(f,Y){let J=f;for(let z of Y.split("."))if(J&&typeof J==="object"&&z in J)J=J[z];else return;return typeof J==="string"?J:void 0}function ky(f,Y){if(!Y)return f;return f.replace(/\{(\w+)\}/g,(J,z)=>(z in Y)?String(Y[z]):J)}function F(f,Y){let J=Nj.lang,z=tD(uZ[J],f)??tD(uZ.en,f)??f;return ky(z,Y)}function kj(f,Y){let J=Nj.lang,z=(Z)=>{return Z.keys[f]?.[Y]};return z(uZ[J])??z(uZ.en)??Y}var Nj,by;var e1=N(()=>{TZ();xZ();xZ();[Nj,by]=EY({lang:EZ})});function yy(f){let Y=[],J=f.name;if(J)Y.push(J);if(J==="return")Y.push("enter");if(J==="enter")Y.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&&J&&J.length>1)z.push("shift");if(z.length===0)return Y;let Z=`${z.join("+")}+`;return Y.map((G)=>Z+G)}function Sj(f,Y){if(Y.defaultPrevented)return!1;if(yj)return!1;let J=f.slice(),z=yy(Y);yj=!0;try{for(let Z=J.length-1;Z>=0;Z--){let G=J[Z];if(!G)continue;let Q=G.config();if(Q.enabled===!1)continue;let q=Q.bindings.find((H)=>z.includes(H.key));if(q)return q.cmd(Y,q.slot),Y.preventDefault(),!0}return!1}finally{yj=!1}}var yj=!1;function Iy(){if(Ij)return;let f=Xf();if(!f)throw Error("useBindings: no renderer in scope; call inside a component rendered by @opentui/solid.");Ij=f.keyInput,eD=(Y)=>{Sj(wq,Y)},Ij.on("keypress",eD)}function U1(f){Iy();let Y=Sy++,J={config:f,id:Y};Z1(()=>{f()}),wq.push(J),b1(()=>{let z=wq.findIndex((Z)=>Z.id===Y);if(z>=0)wq.splice(z,1)})}var Sy=1,wq,Ij=null,eD=null;var Sf=N(()=>{h();B1();wq=[]});function hq(){let f=new Set;function Y(z,Z){let G=setTimeout(()=>{f.delete(G),z()},Z);return f.add(G),G}function J(z){if(f.delete(z))clearTimeout(z)}return b1(()=>{for(let z of f)clearTimeout(z);f.clear()}),{set:Y,clear:J}}var Tj=N(()=>{B1()});import{RGBA as f4}from"@opentui/core";function Ey(f){let Y=uY(),J=n0(),{theme:z}=J,Z=Xf(),G=!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,Y().height-q*2);return(()=>{var B=W("box"),V=W("box");return D(B,V),X(B,"onMouseDown",()=>{G=!!Z?.getSelection()}),X(B,"onMouseUp",()=>{if(G){G=!1;return}f.onClose?.()}),X(B,"alignItems","center"),X(B,"justifyContent","center"),X(B,"position","absolute"),X(B,"zIndex",3000),X(B,"left",0),X(B,"top",0),X(V,"onMouseUp",(j)=>{G=!1,j.stopPropagation()}),X(V,"flexShrink",1),X(V,"flexGrow",0),X(V,"paddingTop",1),U(V,()=>f.children),E((j)=>{var K=Y().width,L=Y().height,O=J.transparentBackground?uy:Ty,M=Q(),R=Y().width-2,S=H(),a=z.backgroundDialog;return K!==j.e&&(j.e=X(B,"width",K,j.e)),L!==j.t&&(j.t=X(B,"height",L,j.t)),O!==j.a&&(j.a=X(B,"backgroundColor",O,j.a)),M!==j.o&&(j.o=X(V,"width",M,j.o)),R!==j.i&&(j.i=X(V,"maxWidth",R,j.i)),S!==j.n&&(j.n=X(V,"maxHeight",S,j.n)),a!==j.s&&(j.s=X(V,"backgroundColor",a,j.s)),j},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),B})()}function xy(){let[f,Y]=EY({stack:[],size:"medium"}),J=Xf(),z=null,Z=hq();function G(){Z.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=J?.root;if(!q)return;if(!Q(q))return;z.focus()},1)}return U1(()=>({enabled:f.stack.length>0&&!J?.getSelection()?.getSelectedText(),bindings:[{key:"escape",cmd:()=>{if(J?.getSelection())J.clearSelection();f.stack.at(-1)?.onClose?.(),Y("stack",f.stack.slice(0,-1)),G()}},{key:"ctrl+c",cmd:()=>{if(J?.getSelection())J.clearSelection();f.stack.at(-1)?.onClose?.(),Y("stack",f.stack.slice(0,-1)),G()}}]})),{clear(){for(let Q of f.stack)Q.onClose?.();eX(()=>{Y("size","medium"),Y("stack",[])}),G()},replace(Q,q){if(f.stack.length===0)z=J?.currentFocusedRenderable??null,z?.blur();for(let H of f.stack)H.onClose?.();Y("size","medium"),Y("stack",[{element:Q,onClose:q}])},push(Q,q){if(f.stack.length===0)z=J?.currentFocusedRenderable??null,z?.blur();Y("stack",[...f.stack,{element:Q,onClose:q}])},pop(){if(f.stack.at(-1)?.onClose?.(),Y("stack",f.stack.slice(0,-1)),f.stack.length===0)G()},get stack(){return f.stack},get size(){return f.size},setSize(Q){Y("size",Q)}}}function J4(f){let Y=xy();return k(Y4.Provider,{value:Y,get children(){return[T0(()=>f.children),(()=>{var J=W("box");return X(J,"position","absolute"),X(J,"zIndex",3000),U(J,k(G0,{get when(){return Y.stack.length},get children(){return k(Ey,{onClose:()=>Y.clear(),get size(){return Y.size},get children(){return Y.stack.at(-1).element()}})}})),J})()]}})}function v1(){let f=Tf(Y4);if(!f)throw Error("useDialog must be used within a DialogProvider");return f}var Ty,uy,Y4;var Pf=N(()=>{h();h();h();h();h();h();h();h();B1();TZ();w1();Sf();Tj();Ty=f4.fromInts(0,0,0,128),uy=f4.fromInts(0,0,0,64);Y4=CY()});import{spawnSync as uj}from"child_process";import*as Z4 from"fs";function z4(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 G4(f){let Y=f.trim();if(!Y)return"repo path is required";let J;try{J=Z4.statSync(Y)}catch{return`path does not exist: ${Y}`}if(!J.isDirectory())return`not a directory: ${Y}`;try{if(uj("git",["rev-parse","--git-dir"],{cwd:Y,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]}).status!==0)return z4(Y)}catch{return z4(Y)}return null}function _G(f){if(!f)return null;try{let Y=uj("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:f,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]});if(Y.status!==0)return null;let J=Y.stdout.trim();if(!J||J==="HEAD")return null;return J}catch{return null}}function X4(f){if(!f)return[];try{let Y=uj("git",["for-each-ref","--format=%(refname:short)","refs/heads/"],{cwd:f,encoding:"utf-8",timeout:2000});if(Y.status!==0)return[];return Y.stdout.split(`
263
- `).map((J)=>J.trim()).filter(Boolean).sort((J,z)=>{let Z=(q)=>q==="main"?0:q==="master"?1:q==="develop"?2:3,G=Z(J),Q=Z(z);if(G!==Q)return G-Q;return J.localeCompare(z)})}catch{return[]}}var LY="main";var Pq=()=>{};import*as Q4 from"fs";import*as vq from"os";function Kf(f){if(f==="~")return vq.homedir();if(f.startsWith("~/"))return vq.homedir()+f.slice(1);return f}function Ej(f){if(!f)return{base:"",filter:""};let J=Kf(f==="~"?"~/":f);if(J.endsWith("/"))return{base:J,filter:""};let z=J.lastIndexOf("/");if(z===-1)return{base:"",filter:J};return{base:J.slice(0,z+1),filter:J.slice(z+1)}}function xj(f){if(!f)return[];try{let Y=Q4.readdirSync(f,{withFileTypes:!0}),J=[];for(let z of Y)if(z.isDirectory())J.push(z.name);return J.sort((z,Z)=>z.localeCompare(Z))}catch{return[]}}function wj(f,Y){let J=Y.toLowerCase(),Z=J.startsWith(".")?f:f.filter((G)=>!G.startsWith("."));if(!J)return Z;return Z.filter((G)=>G.toLowerCase().startsWith(J))}function rG(f,Y,J){let z=Y+J;if(f.startsWith("~")){let Z=vq.homedir();if(z===Z)return"~";if(z.startsWith(`${Z}/`))return`~${z.slice(Z.length)}`}return z}var mq=()=>{};import{spawn as wy}from"child_process";import*as xz from"fs";import*as oG from"path";function q4(f){let Y=f.trim().replace(/\/+$/,"");if(!Y)return"";let J=Y.lastIndexOf("/"),z=Y.lastIndexOf(":"),Z=Math.max(J,z);return(Z>=0?Y.slice(Z+1):Y).replace(/\.git$/i,"")}function H4(f){let Y=f.trim();if(!Y)return F("newTask.error.gitUrlRequired");let J=Y.includes("://"),z=Y.includes("@")&&Y.includes(":"),Z=Y.includes("/");if(!J&&!z&&!Z)return F("newTask.error.gitUrlInvalid",{url:Y});return null}function B4(f,Y){let J=Y.trim();if(!J)return F("newTask.error.folderRequired");if(J.includes("/")||J.includes("\\"))return F("newTask.error.folderHasSeparator");let z=f.trim();if(!z)return F("newTask.error.parentRequired");let Z=Kf(z),G;try{G=xz.statSync(Z)}catch{return F("newTask.error.parentNotFound",{path:Z})}if(!G.isDirectory())return F("newTask.error.parentNotDir",{path:Z});let Q=oG.join(Z,J);if(xz.existsSync(Q))return F("newTask.error.targetExists",{path:Q});return null}function j4(f,Y){return oG.join(Kf(f.trim()),Y.trim())}function W4(f,Y){let J=Y.trim();if(!J)return Y;let z=Kf(f.trim());if(!z)return Y;try{if(!xz.statSync(z).isDirectory())return Y}catch{return Y}if(!xz.existsSync(oG.join(z,J)))return J;for(let Z=2;Z<1000;Z++){let G=`${J}-${Z}`;if(!xz.existsSync(oG.join(z,G)))return G}return J}function V4(f,Y,J){return new Promise((z)=>{let Z="";try{let G=wy("git",["clone","--progress",f,Y],{stdio:["ignore","ignore","pipe"]});G.stderr?.setEncoding("utf-8"),G.stderr?.on("data",(Q)=>{if(Z+=Q,J){let q=Q.split(/[\r\n]+/).filter((B)=>B.trim().length>0),H=q[q.length-1];if(H)J(H)}}),G.on("error",(Q)=>{z({ok:!1,error:Q.message})}),G.on("close",(Q)=>{if(Q===0){z({ok:!0,path:Y});return}let q=Z.split(/[\r\n]+/).filter((H)=>H.trim().length>0).pop()??`git clone exited with ${Q}`;z({ok:!1,error:q})})}catch(G){z({ok:!1,error:G instanceof Error?G.message:String(G)})}})}var K4=N(()=>{e1();mq()});function hj(f){if(f==="existing")return"clone";if(f==="clone")return"adopt";return"existing"}function Pj(f){if(f==="existing")return"adopt";if(f==="clone")return"existing";return"clone"}function U4(f,Y){let J=f.trim();if(Y.includes(J))return"saved";if(J.startsWith("~"))return"browse";if(J.includes("/"))return"browse";return"saved"}function qf(f){return f.replace(/[\r\n]+/g,"")}function vj(f,Y="existing"){if(f==="confirm")return"tabs";if(f==="tabs")return"engine";if(f==="engine")return mj(Y);if(Y==="clone"){if(f==="cloneUrl")return"cloneParent";if(f==="cloneParent")return"cloneFolder";if(f==="cloneFolder")return"cloneBaseRef";if(f==="cloneBaseRef")return"confirm";return"cloneUrl"}if(Y==="adopt")return f==="adoptFilter"?"confirm":"adoptFilter";if(f==="repo")return"baseRef";if(f==="baseRef")return"confirm";return"repo"}function mj(f){if(f==="clone")return"cloneUrl";if(f==="adopt")return"adoptFilter";return"repo"}function D4(f,Y){let J=Y.trim();if(!J)return f;return f.filter((z)=>qX(J,z.path))}function L4(f,Y){let J=new Set,z=[];for(let Z of[f,...Y]){let G=Z.trim();if(!G||J.has(G))continue;J.add(G),z.push(G)}return z}function M4(f,Y){let J=Y.trim().toLowerCase();if(!J)return f;return f.filter((z)=>z.toLowerCase().includes(J))}function F4(f,Y){let J=Y.trim().toLowerCase();if(!J)return f;return f.filter((z)=>z.toLowerCase().includes(J))}function sG(f,Y,J=hy){let z=f.length;if(z<=J)return{items:f,start:0,total:z};let Z=Math.floor(J/2),G=Math.max(0,Y-Z);if(G+J>z)G=z-J;return{items:f.slice(G,G+J),start:G,total:z}}function xY(f,Y){if(Y<=0)return 0;return Math.max(0,Math.min(Y-1,f))}function O4(f,Y,J){let z=Y[J];if(z)return z;return f.trim()||LY}var hy=8;var cj=N(()=>{XH();Pq()});import{TextAttributes as of}from"@opentui/core";function A4(f){let Y=v1(),{theme:J}=n0(),[z,Z]=p("existing"),G=()=>{let d=f.availableVendors;return d&&d.length>0?d:m1},Q=(()=>{let d=G(),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(_G(Kf(f.defaultRepo.trim()))??LY),[M,R]=p(!1),[S,a]=p(""),[b,g]=p(f.defaultCloneParent?.trim()?f.defaultCloneParent:"~/"),[C,y]=p(""),[r,z0]=p(!1),[t,J0]=p(LY),[T,B0]=p(!1),[_,D0]=p(""),R0=K0(()=>L4(f.defaultRepo,f.savedRepos)),$=K0(()=>U4(j(),R0())),x=K0(()=>Ej(j())),e=K0(()=>xj(x().base)),I=K0(()=>wj(e(),x().filter)),Z0=K0(()=>M4(R0(),j())),u=K0(()=>$()==="browse"?I():Z0()),[P,X0]=p(0),V0=K0(()=>sG(u(),P())),[q0,k0]=p(!1),w0=K0(()=>X4(Kf(j().trim()))),I0=K0(()=>F4(w0(),L())),[_0,v]=p(0),M0=K0(()=>sG(I0(),_0())),Y0=K0(()=>Ej(b())),F0=K0(()=>xj(Y0().base)),$0=K0(()=>wj(F0(),Y0().filter)),[r0,u0]=p(0),o0=K0(()=>sG($0(),r0())),[n,Q0]=p(!1),[y0,s0]=p(""),[a0,p0]=p(0),[e0,g1]=p(new Set),[R1]=tX(()=>z()==="adopt"?Kf(j().trim()):null,async(d)=>f.discoverAdoptable?await f.discoverAdoptable(d):[]),o=K0(()=>D4(R1()??[],y0())),f0=K0(()=>sG(o().map((d)=>d.path),a0())),j0=K0(()=>{let d=f0();return o().slice(d.start,d.start+d.items.length)});Z1(()=>{o(),p0((d)=>xY(d,o().length))});function C0(d){g1((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)}Z1(()=>{I0(),v(0)}),Z1(()=>{let d=Kf(j().trim());if(!d)return;if(M())return;let s=_G(d);if(s)O(s)}),Z1(()=>{u(),X0(0)}),Z1(()=>{$0(),u0(0)}),Z1(()=>{let d=S(),s=b();if(r())return;let S0=q4(d);y(W4(s,S0))});let[P0,U0]=p(null);Z1(()=>{j(),S(),b(),C(),y0(),U0(null)});function E0(){let d=Kf(j().trim());if(!d)return;let s=G4(d);if(s){U0(s),V("repo");return}let S0=L().trim()||LY;f.onSubmit({repo:d,baseRef:S0,vendor:q()}),Y.clear()}async function W0(){if(T())return;let d=H4(S());if(d){U0(d),V("cloneUrl");return}let s=B4(b(),C());if(s){U0(s),V(C().trim()?"cloneParent":"cloneFolder");return}let S0=j4(b(),C());B0(!0),D0(F("newTask.clone.progressInto",{target:S0}));let b0=await V4(S().trim(),S0,(ff)=>{D0(ff)});if(B0(!1),!b0.ok){U0(F("newTask.error.cloneFailed",{error:b0.error})),V("cloneUrl");return}let Hf=t().trim()||LY,Uf=Kf(b().trim());f.onSubmit({repo:b0.path,baseRef:Hf,vendor:q(),cloned:{parentDir:Uf}}),Y.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((b0)=>s.has(b0.path)):d.slice(a0(),a0()+1);if(S0.length===0)return;f.onSubmit({mode:"adopt",repo:Kf(j().trim()),vendor:q(),adopt:S0.map((b0)=>({worktreePath:b0.path,branch:b0.branch}))}),Y.clear()}function g0(){if(z()==="clone"){W0();return}if(z()==="adopt"){L0();return}E0()}function Y1(d){if(T())return;if(d===z())return;Z(d),V(mj(d)),U0(null)}function J1(d){if(T())return;let s=d===1?hj(z()):Pj(z());if(s===z())return;Z(s),U0(null),V("tabs")}function d0(d){H((s)=>d===1?WJ(G(),s):QH(G(),s))}function S1(){if(!j().trim()&&$()==="saved"){let s=u()[0];if(s){K(s),V("baseRef");return}}if($()==="browse"){let S0=I()[P()],b0=x();if(S0){K(rG(j(),b0.base,S0)),X0(0),k0(!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 b0=x();K(rG(j(),b0.base,S0)),X0(d),k0(!0),V("baseRef");return}K(S0),X0(d),V("baseRef")}function h1(){let s=$0()[r0()],S0=Y0();if(s){g(rG(b(),S0.base,s)),u0(0),Q0(!0),V("cloneFolder");return}V("cloneFolder")}function m(d){let S0=$0()[d];if(!S0)return;let b0=Y0();g(rG(b(),b0.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));g1(s?new Set:new Set(d.map((S0)=>S0.path)))};U1(()=>({bindings:[{key:"tab",cmd:()=>V((d)=>vj(d,z()))},{key:"ctrl+]",cmd:()=>Y1(hj(z()))},{key:"ctrl+[",cmd:()=>Y1(Pj(z()))},{key:"ctrl+e",cmd:()=>H((d)=>WJ(G(),d))},{key:"up",cmd:()=>{if(T())return;if(z()==="existing"&&B()==="repo"){let d=u();if(d.length===0)return;X0(xY(P()-1,d.length));return}if(z()==="existing"&&B()==="baseRef"){let d=I0();if(d.length===0)return;v(xY(_0()-1,d.length));return}if(z()==="clone"&&B()==="cloneParent"){let d=$0();if(d.length===0)return;u0(xY(r0()-1,d.length));return}if(z()==="adopt"){let d=o();if(d.length===0)return;p0(xY(a0()-1,d.length))}}},{key:"down",cmd:()=>{if(T())return;if(z()==="existing"&&B()==="repo"){let d=u();if(d.length===0)return;X0(xY(P()+1,d.length));return}if(z()==="existing"&&B()==="baseRef"){let d=I0();if(d.length===0)return;v(xY(_0()+1,d.length));return}if(z()==="clone"&&B()==="cloneParent"){let d=$0();if(d.length===0)return;u0(xY(r0()+1,d.length));return}if(z()==="adopt"){let d=o();if(d.length===0)return;p0(xY(a0()+1,d.length))}}},...B()==="tabs"||B()==="engine"?[{key:"left",cmd:()=>B()==="tabs"?J1(-1):d0(-1)},{key:"right",cmd:()=>B()==="tabs"?J1(1):d0(1)},{key:"return",cmd:()=>V((d)=>vj(d,z()))}]:[],...z()==="adopt"?[{key:"ctrl+a",cmd:A0}]:[]]})),U1(()=>({enabled:B()==="confirm"&&!T(),bindings:[{key:"return",cmd:()=>g0()}]}));let W1=(d)=>B()===d?J.primary:J.textMuted,O1=(d)=>B()===d?of.BOLD|of.UNDERLINE:void 0,q1=(d,s)=>d?s?of.BOLD|of.UNDERLINE:of.BOLD:void 0;return(()=>{var d=W("box"),s=W("box"),S0=W("text"),b0=W("box"),Hf=W("box"),Uf=W("text"),ff=W("box"),vf=W("box"),wY=W("text"),Ff=W("box"),hY=W("text"),BJ=W("text");return D(d,s),D(d,b0),D(d,Ff),X(d,"paddingLeft",2),X(d,"paddingRight",2),X(d,"gap",0),D(s,S0),X(s,"flexDirection","row"),U(S0,()=>F("newTask.title")),D(b0,Hf),X(b0,"gap",1),X(b0,"paddingTop",1),X(b0,"paddingBottom",1),U(b0,()=>{let c=()=>B()==="tabs",i=(l)=>l?J.primary:J.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),X(l,"flexDirection","row"),X(l,"gap",2),X(w,"onMouseUp",()=>Y1("existing")),U(w,(()=>{var O0=T0(()=>z()==="existing");return()=>O0()?`\u25B8 ${F("newTask.tabs.existing")}`:` ${F("newTask.tabs.existing")}`})()),X(m0,"onMouseUp",()=>Y1("clone")),U(m0,(()=>{var O0=T0(()=>z()==="clone");return()=>O0()?`\u25B8 ${F("newTask.tabs.clone")}`:` ${F("newTask.tabs.clone")}`})()),X(v0,"onMouseUp",()=>Y1("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"),Q1=q1(z()==="existing",c()),D1=i(z()==="clone"),Bf=q1(z()==="clone",c()),tf=i(z()==="adopt"),jJ=q1(z()==="adopt",c());return c0!==O0.e&&(O0.e=X(w,"fg",c0,O0.e)),Q1!==O0.t&&(O0.t=X(w,"attributes",Q1,O0.t)),D1!==O0.a&&(O0.a=X(m0,"fg",D1,O0.a)),Bf!==O0.o&&(O0.o=X(m0,"attributes",Bf,O0.o)),tf!==O0.i&&(O0.i=X(v0,"fg",tf,O0.i)),jJ!==O0.n&&(O0.n=X(v0,"attributes",jJ,O0.n)),O0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),l})()},Hf),D(Hf,Uf),D(Hf,ff),X(Hf,"gap",0),U(Uf,()=>F("newTask.field.engine")),D(ff,vf),D(ff,wY),X(ff,"flexDirection","row"),X(ff,"gap",2),U(ff,k(X1,{get each(){return G()},children:(c)=>{let i=()=>q()===c;return(()=>{var l=W("text");return X(l,"onMouseUp",()=>H(c)),U(l,()=>i()?"\u25B8 ":" ",null),U(l,c,null),E((w)=>{var m0=i()?J.primary:J.textMuted,v0=i()?of.BOLD:void 0;return m0!==w.e&&(w.e=X(l,"fg",m0,w.e)),v0!==w.t&&(w.t=X(l,"attributes",v0,w.t)),w},{e:void 0,t:void 0}),l})()}}),vf),X(vf,"flexGrow",1),U(wY,()=>F("newTask.hint.engineCycle")),U(b0,k(G0,{get when(){return z()==="existing"},get children(){return[(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),U(i,()=>F("newTask.field.repo")),X(l,"onInput",(w)=>{k0(!1),K(qf(w))}),X(l,"onSubmit",()=>{if(!j().trim())return;S1()}),E((w)=>{var m0=W1("repo"),v0=O1("repo"),O0=j(),c0=f.defaultRepo,Q1=B()==="repo";return m0!==w.e&&(w.e=X(i,"fg",m0,w.e)),v0!==w.t&&(w.t=X(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=X(l,"value",O0,w.a)),c0!==w.o&&(w.o=X(l,"placeholder",c0,w.o)),Q1!==w.i&&(w.i=X(l,"focused",Q1,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),c})(),k(G0,{get when(){return T0(()=>B()==="repo"&&u().length>0)()&&!q0()},get children(){var c=W("box");return X(c,"gap",0),X(c,"paddingLeft",2),U(c,k(G0,{get when(){return V0().start>0},get children(){var i=W("text");return X(i,"wrapMode","none"),U(i,()=>F("newTask.picker.moreAbove",{count:V0().start})),E((l)=>X(i,"fg",J.textMuted,l)),i}}),null),U(c,k(X1,{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"?"/":"",Q1=()=>v0()?` ${F("newTask.hint.currentDir")}`:"";return(()=>{var D1=W("text");return X(D1,"wrapMode","none"),X(D1,"onMouseUp",()=>N0(w())),U(D1,()=>m0()?"\u25B8 ":" ",null),U(D1,i,null),U(D1,c0,null),U(D1,Q1,null),E((Bf)=>{var tf=m0()?J.primary:O0()?J.accent:J.textMuted,jJ=m0()?of.BOLD:void 0;return tf!==Bf.e&&(Bf.e=X(D1,"fg",tf,Bf.e)),jJ!==Bf.t&&(Bf.t=X(D1,"attributes",jJ,Bf.t)),Bf},{e:void 0,t:void 0}),D1})()}}),null),U(c,k(G0,{get when(){return V0().start+V0().items.length<V0().total},get children(){var i=W("text");return X(i,"wrapMode","none"),U(i,()=>F("newTask.picker.moreBelow",{count:V0().total-V0().start-V0().items.length})),E((l)=>X(i,"fg",J.textMuted,l)),i}}),null),c}}),(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),U(i,()=>F("newTask.field.fromBranch")),X(l,"placeholder",LY),X(l,"onInput",(w)=>{R(!0),O(qf(w))}),X(l,"onSubmit",()=>{O(O4(L(),I0(),_0())),R(!0),E0()}),E((w)=>{var m0=W1("baseRef"),v0=O1("baseRef"),O0=L(),c0=B()==="baseRef";return m0!==w.e&&(w.e=X(i,"fg",m0,w.e)),v0!==w.t&&(w.t=X(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=X(l,"value",O0,w.a)),c0!==w.o&&(w.o=X(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),c})(),k(G0,{get when(){return T0(()=>B()==="baseRef"&&I0().length===0)()&&P0()==null},get children(){var c=W("box"),i=W("text");return D(c,i),X(c,"gap",0),X(c,"paddingLeft",2),X(c,"paddingBottom",1),X(i,"wrapMode","none"),U(i,(()=>{var l=T0(()=>w0().length===0);return()=>l()?F("newTask.hint.noBranchesFound"):F("newTask.hint.noMatchBranch")})()),E((l)=>X(i,"fg",J.textMuted,l)),c}}),k(G0,{get when(){return T0(()=>B()==="baseRef")()&&I0().length>0},get children(){var c=W("box");return X(c,"gap",0),X(c,"paddingLeft",2),X(c,"paddingBottom",1),U(c,k(G0,{get when(){return M0().start>0},get children(){var i=W("text");return X(i,"wrapMode","none"),U(i,()=>F("newTask.picker.moreAbove",{count:M0().start})),E((l)=>X(i,"fg",J.textMuted,l)),i}}),null),U(c,k(X1,{get each(){return M0().items},children:(i,l)=>{let w=()=>M0().start+l(),m0=()=>w()===_0(),v0=()=>L().trim()===i;return(()=>{var O0=W("text");return X(O0,"wrapMode","none"),X(O0,"onMouseUp",()=>{O(i),R(!0),v(w()),V("confirm")}),U(O0,()=>m0()?"\u25B8 ":" ",null),U(O0,i,null),E((c0)=>{var Q1=m0()?J.primary:v0()?J.accent:J.textMuted,D1=m0()?of.BOLD:void 0;return Q1!==c0.e&&(c0.e=X(O0,"fg",Q1,c0.e)),D1!==c0.t&&(c0.t=X(O0,"attributes",D1,c0.t)),c0},{e:void 0,t:void 0}),O0})()}}),null),U(c,k(G0,{get when(){return M0().start+M0().items.length<M0().total},get children(){var i=W("text");return X(i,"wrapMode","none"),U(i,()=>F("newTask.picker.moreBelow",{count:M0().total-M0().start-M0().items.length})),E((l)=>X(i,"fg",J.textMuted,l)),i}}),null),c}})]}}),null),U(b0,k(G0,{get when(){return z()==="clone"},get children(){return[(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),U(i,()=>F("newTask.field.gitUrl")),X(l,"placeholder","https://github.com/user/repo.git"),X(l,"onInput",(w)=>a(qf(w))),X(l,"onSubmit",()=>{if(!S().trim())return;V("cloneParent")}),E((w)=>{var m0=W1("cloneUrl"),v0=O1("cloneUrl"),O0=S(),c0=B()==="cloneUrl";return m0!==w.e&&(w.e=X(i,"fg",m0,w.e)),v0!==w.t&&(w.t=X(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=X(l,"value",O0,w.a)),c0!==w.o&&(w.o=X(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),X(c,"gap",0),U(i,()=>F("newTask.field.parentDir")),X(l,"placeholder","~/"),X(l,"onInput",(w)=>{Q0(!1),g(qf(w))}),X(l,"onSubmit",()=>h1()),E((w)=>{var m0=W1("cloneParent"),v0=O1("cloneParent"),O0=b(),c0=B()==="cloneParent";return m0!==w.e&&(w.e=X(i,"fg",m0,w.e)),v0!==w.t&&(w.t=X(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=X(l,"value",O0,w.a)),c0!==w.o&&(w.o=X(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),c})(),k(G0,{get when(){return B()==="cloneParent"},get children(){var c=W("box"),i=W("text");return D(c,i),X(c,"paddingLeft",2),X(i,"wrapMode","none"),U(i,()=>F("newTask.hint.remembered")),E((l)=>X(i,"fg",J.textMuted,l)),c}}),k(G0,{get when(){return T0(()=>B()==="cloneParent"&&$0().length>0)()&&!n()},get children(){var c=W("box");return X(c,"gap",0),X(c,"paddingLeft",2),U(c,k(G0,{get when(){return o0().start>0},get children(){var i=W("text");return X(i,"wrapMode","none"),U(i,()=>F("newTask.picker.moreAbove",{count:o0().start})),E((l)=>X(i,"fg",J.textMuted,l)),i}}),null),U(c,k(X1,{get each(){return o0().items},children:(i,l)=>{let w=()=>o0().start+l(),m0=()=>w()===r0();return(()=>{var v0=W("text"),O0=x0("/");return D(v0,O0),X(v0,"wrapMode","none"),X(v0,"onMouseUp",()=>m(w())),U(v0,()=>m0()?"\u25B8 ":" ",O0),U(v0,i,O0),E((c0)=>{var Q1=m0()?J.primary:J.textMuted,D1=m0()?of.BOLD:void 0;return Q1!==c0.e&&(c0.e=X(v0,"fg",Q1,c0.e)),D1!==c0.t&&(c0.t=X(v0,"attributes",D1,c0.t)),c0},{e:void 0,t:void 0}),v0})()}}),null),U(c,k(G0,{get when(){return o0().start+o0().items.length<o0().total},get children(){var i=W("text");return X(i,"wrapMode","none"),U(i,()=>F("newTask.picker.moreBelow",{count:o0().total-o0().start-o0().items.length})),E((l)=>X(i,"fg",J.textMuted,l)),i}}),null),c}}),(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),U(i,()=>F("newTask.field.folderName")),X(l,"onInput",(w)=>{z0(!0),y(qf(w))}),X(l,"onSubmit",()=>V("cloneBaseRef")),E((w)=>{var m0=W1("cloneFolder"),v0=O1("cloneFolder"),O0=C(),c0=F("newTask.placeholder.folderName"),Q1=B()==="cloneFolder";return m0!==w.e&&(w.e=X(i,"fg",m0,w.e)),v0!==w.t&&(w.t=X(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=X(l,"value",O0,w.a)),c0!==w.o&&(w.o=X(l,"placeholder",c0,w.o)),Q1!==w.i&&(w.i=X(l,"focused",Q1,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),X(c,"gap",0),U(i,()=>F("newTask.field.baseBranch")),X(l,"placeholder",LY),X(l,"onInput",(w)=>J0(qf(w))),X(l,"onSubmit",()=>void W0()),E((w)=>{var m0=W1("cloneBaseRef"),v0=O1("cloneBaseRef"),O0=t(),c0=B()==="cloneBaseRef";return m0!==w.e&&(w.e=X(i,"fg",m0,w.e)),v0!==w.t&&(w.t=X(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=X(l,"value",O0,w.a)),c0!==w.o&&(w.o=X(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),c})(),k(G0,{get when(){return T()},get children(){var c=W("box"),i=W("text");return D(c,i),X(c,"gap",0),X(c,"paddingLeft",2),X(i,"wrapMode","none"),U(i,()=>_()||F("newTask.clone.progressFallback")),E((l)=>X(i,"fg",J.textMuted,l)),c}})]}}),null),U(b0,k(G0,{get when(){return z()==="adopt"},get children(){return[(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),U(i,()=>F("newTask.field.adoptFilter")),X(l,"onInput",(w)=>s0(qf(w))),X(l,"onSubmit",()=>A()),E((w)=>{var m0=W1("adoptFilter"),v0=O1("adoptFilter"),O0=y0(),c0=F("newTask.placeholder.adoptFilter"),Q1=B()==="adoptFilter";return m0!==w.e&&(w.e=X(i,"fg",m0,w.e)),v0!==w.t&&(w.t=X(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=X(l,"value",O0,w.a)),c0!==w.o&&(w.o=X(l,"placeholder",c0,w.o)),Q1!==w.i&&(w.i=X(l,"focused",Q1,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),X(c,"paddingLeft",2),X(i,"wrapMode","none"),U(i,()=>F("newTask.adopt.repoLine",{path:Kf(j().trim())||F("newTask.adopt.repoNone")})),E((l)=>X(i,"fg",J.textMuted,l)),c})(),k(G0,{get when(){return R1.loading},get children(){var c=W("box"),i=W("text");return D(c,i),X(c,"paddingLeft",2),X(i,"wrapMode","none"),U(i,()=>F("newTask.hint.scanningWorktrees")),E((l)=>X(i,"fg",J.textMuted,l)),c}}),k(G0,{get when(){return T0(()=>!R1.loading)()&&o().length===0},get children(){var c=W("box"),i=W("text");return D(c,i),X(c,"paddingLeft",2),X(i,"wrapMode","none"),U(i,(()=>{var l=T0(()=>(R1()??[]).length===0);return()=>l()?F("newTask.adopt.noUnlinked"):F("newTask.adopt.noMatch")})()),E((l)=>X(i,"fg",J.textMuted,l)),c}}),k(G0,{get when(){return o().length>0},get children(){var c=W("box"),i=W("text");return D(c,i),X(c,"gap",0),X(c,"paddingLeft",2),U(c,k(G0,{get when(){return f0().start>0},get children(){var l=W("text");return X(l,"wrapMode","none"),U(l,()=>F("newTask.picker.moreAbove",{count:f0().start})),E((w)=>X(l,"fg",J.textMuted,w)),l}}),i),U(c,k(X1,{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 Q1=W("text");return X(Q1,"wrapMode","none"),X(Q1,"onMouseUp",()=>{p0(m0()),C0(l.path)}),U(Q1,()=>v0()?"\u25B8 ":" ",null),U(Q1,()=>O0()?"[x] ":"[ ] ",null),U(Q1,()=>l.branch,null),U(Q1,(()=>{var D1=T0(()=>!!c0());return()=>D1()?` (${c0()})`:""})(),null),E((D1)=>{var Bf=v0()?J.primary:O0()?J.accent:J.textMuted,tf=v0()?of.BOLD:void 0;return Bf!==D1.e&&(D1.e=X(Q1,"fg",Bf,D1.e)),tf!==D1.t&&(D1.t=X(Q1,"attributes",tf,D1.t)),D1},{e:void 0,t:void 0}),Q1})()}}),i),U(c,k(G0,{get when(){return f0().start+f0().items.length<f0().total},get children(){var l=W("text");return X(l,"wrapMode","none"),U(l,()=>F("newTask.picker.moreBelow",{count:f0().total-f0().start-f0().items.length})),E((w)=>X(l,"fg",J.textMuted,w)),l}}),i),X(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)=>X(i,"fg",J.textMuted,l)),c}})]}}),null),U(b0,k(G0,{get when(){return P0()},get children(){var c=W("text"),i=x0("\u203B ");return D(c,i),X(c,"wrapMode","word"),U(c,P0,null),E((l)=>X(c,"fg",J.error,l)),c}}),null),D(Ff,hY),D(Ff,BJ),X(Ff,"flexDirection","row"),X(Ff,"justifyContent","space-between"),X(Ff,"alignItems","center"),X(Ff,"paddingTop",1),X(Ff,"paddingBottom",1),U(hY,()=>F("newTask.hint.legend")),X(BJ,"onMouseUp",()=>g0()),U(BJ,(()=>{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=of.BOLD,l=J.text,w=W1("engine"),m0=O1("engine"),v0=J.textMuted,O0=J.textMuted,c0=B()==="confirm"?J.primary:J.text,Q1=B()==="confirm"?of.BOLD:void 0;return i!==c.e&&(c.e=X(S0,"attributes",i,c.e)),l!==c.t&&(c.t=X(S0,"fg",l,c.t)),w!==c.a&&(c.a=X(Uf,"fg",w,c.a)),m0!==c.o&&(c.o=X(Uf,"attributes",m0,c.o)),v0!==c.i&&(c.i=X(wY,"fg",v0,c.i)),O0!==c.n&&(c.n=X(hY,"fg",O0,c.n)),c0!==c.s&&(c.s=X(BJ,"fg",c0,c.s)),Q1!==c.h&&(c.h=X(BJ,"attributes",Q1,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 R4=N(()=>{h();h();h();h();h();h();h();h();e1();$1();B1();w1();Pq();Sf();mq();Pf();K4();cj()});function Py(f,Y,J,z){return new Promise((Z)=>{f.replace(()=>k(A4,{defaultRepo:Y,savedRepos:J,get defaultCloneParent(){return z?.defaultCloneParent},get defaultVendor(){return z?.defaultVendor},get availableVendors(){return z?.availableVendors},get discoverAdoptable(){return z?.discoverAdoptable},onSubmit:(G)=>Z(G),onCancel:()=>Z(void 0)}),()=>Z(void 0)),f.setSize("medium")})}var cq;var wZ=N(()=>{h();R4();cj();cq={show:Py}});function g4(f,Y){return[{key:"tab",cmd:()=>Y.cycleField(1)},{key:"shift+tab",cmd:()=>Y.cycleField(-1)},{key:"ctrl+e",cmd:()=>Y.stepEngine(1)},...f==="engine"?[{key:"left",cmd:()=>Y.stepEngine(-1)},{key:"right",cmd:()=>Y.stepEngine(1)},{key:"return",cmd:()=>Y.commit()}]:[]]}import{TextAttributes as C4}from"@opentui/core";function vy(f){let Y=v1(),{theme:J}=n0(),[z,Z]=p("prompt"),[G,Q]=p(""),[q,H]=p(f.defaultVendor),[B,V]=p(f.defaultBaseRef);function j(M){let R=nq.indexOf(z());Z(nq[(R+M+nq.length)%nq.length]??"prompt")}function K(M){let R=f.engines;if(R.length===0)return;if(M>0){H((a)=>WJ(R,a));return}let S=Math.max(0,R.indexOf(q()));H(R[(S-1+R.length)%R.length]??q())}function L(){let M=G().trim();if(!M){Z("prompt");return}f.onSubmit({prompt:M,vendor:q(),baseRef:B().trim()||f.defaultBaseRef}),Y.clear()}U1(()=>({enabled:!0,bindings:g4(z(),{cycleField:j,stepEngine:K,commit:L})}));let O=(M)=>z()===M?J.accent:J.textMuted;return(()=>{var M=W("box"),R=W("box"),S=W("text"),a=W("text"),b=W("box"),g=W("text"),C=W("input"),y=W("box"),r=W("text"),z0=W("box"),t=W("text"),J0=W("input"),T=W("box"),B0=W("text");return D(M,R),D(M,b),D(M,y),D(M,z0),D(M,T),X(M,"paddingLeft",2),X(M,"paddingRight",2),X(M,"gap",1),D(R,S),D(R,a),X(R,"flexDirection","row"),X(R,"justifyContent","space-between"),U(S,()=>F("quickTask.title",{repoLabel:f.repoLabel})),X(a,"onMouseUp",()=>f.onCancel()),U(a,()=>F("quickTask.esc")),D(b,g),D(b,C),X(b,"gap",0),U(g,()=>F("quickTask.promptLabel")),X(C,"onInput",(_)=>Q(qf(_))),X(C,"onSubmit",()=>L()),D(y,r),X(y,"flexDirection","row"),X(y,"gap",2),U(r,()=>F("quickTask.engineLabel")),U(y,k(X1,{get each(){return f.engines},children:(_)=>(()=>{var D0=W("text");return X(D0,"onMouseUp",()=>{H(_),Z("engine")}),U(D0,()=>f.engineLabel(_)),E((R0)=>{var $=q()===_?J.primary:J.textMuted,x=q()===_?C4.BOLD:void 0;return $!==R0.e&&(R0.e=X(D0,"fg",$,R0.e)),x!==R0.t&&(R0.t=X(D0,"attributes",x,R0.t)),R0},{e:void 0,t:void 0}),D0})()}),null),D(z0,t),D(z0,J0),X(z0,"gap",0),U(t,()=>F("quickTask.branchLabel")),X(J0,"onInput",(_)=>V(qf(_))),X(J0,"onSubmit",()=>L()),D(T,B0),X(T,"paddingBottom",1),U(B0,()=>F("quickTask.legend")),E((_)=>{var D0=C4.BOLD,R0=J.text,$=J.textMuted,x=O("prompt"),e=G(),I=F("quickTask.promptPlaceholder"),Z0=z()==="prompt",u=O("engine"),P=O("branch"),X0=B(),V0=f.defaultBaseRef,q0=z()==="branch",k0=J.textMuted;return D0!==_.e&&(_.e=X(S,"attributes",D0,_.e)),R0!==_.t&&(_.t=X(S,"fg",R0,_.t)),$!==_.a&&(_.a=X(a,"fg",$,_.a)),x!==_.o&&(_.o=X(g,"fg",x,_.o)),e!==_.i&&(_.i=X(C,"value",e,_.i)),I!==_.n&&(_.n=X(C,"placeholder",I,_.n)),Z0!==_.s&&(_.s=X(C,"focused",Z0,_.s)),u!==_.h&&(_.h=X(r,"fg",u,_.h)),P!==_.r&&(_.r=X(t,"fg",P,_.r)),X0!==_.d&&(_.d=X(J0,"value",X0,_.d)),V0!==_.l&&(_.l=X(J0,"placeholder",V0,_.l)),q0!==_.u&&(_.u=X(J0,"focused",q0,_.u)),k0!==_.c&&(_.c=X(B0,"fg",k0,_.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,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0}),M})()}function my(f,Y){return new Promise((J)=>{f.replace(()=>k(vy,QD(Y,{onSubmit:(z)=>J(z),onCancel:()=>J(void 0)})),()=>J(void 0)),f.setSize("medium")})}var nq,N4;var b4=N(()=>{h();h();h();h();h();h();h();B1();$1();w1();e1();Sf();Pf();wZ();nq=["prompt","engine","branch"];N4={show:my}});async function k4(f={}){let Y=f.logTag??"orch-connect",J=f.connect??rf,z=null;try{let Z=await J();if(!Z)return aY(Y,"no daemon running \u2014 caller degrades"),null;return z=new Vf(Z,{...f.orchestratorOptions,channels:f.channels}),await z.init(),z}catch(Z){return p1(Y,Z),z?.dispose(),null}}var y4=N(()=>{Yz();Lf();nJ()});function S4(f){let[Y,J]=p(f.initial??"sidebar"),[z,Z]=p(0),G=Xf();function Q(j){if(Z((L)=>L+1),Y()===j)return;let K=G?.currentFocusedRenderable;if(K&&!K.isDestroyed)try{K.blur()}catch{}J(j)}function q(j){let L=(dq.indexOf(Y())+j+dq.length)%dq.length;Q(dq[L])}let H=new Map;function B(j){let K=H.get(j);if(!K)K=()=>Y()===j,H.set(j,K);return K}let V={focused:Y,is:B,setFocused:Q,cycle:q,refocusTick:z};return k(cy.Provider,{value:V,get children(){return f.children}})}var dq,cy;var I4=N(()=>{h();h();B1();dq=["sidebar","workspace","files","terminal"],cy=CY(null)});function T4(){for(let f of dJ){let Y=ny.get(f.id);if(!Y)continue;let J=f;J.keys=[...Y.keys],J.hint=Y.hint?{...Y.hint}:void 0}}function u4(){dy((f)=>f+1)}function dj(f){return iy.get(f)}function ly(f){return dj(f)?.keys??[]}function iJ(f){let Y=[];for(let J in f){let z=f[J];if(!z)continue;let Z=ly(J);if(Z.length===0){console.warn(`[kobe/keybindings] bindByIds: id="${J}" has no chords (or doesn't exist in KobeKeymap)`);continue}Z.forEach((G,Q)=>Y.push({key:G,cmd:z,slot:Q}))}return Y}var dJ,ny,nj,dy,iy;var hZ=N(()=>{B1();dJ=[{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"}}],ny=new Map(dJ.map((f)=>[f.id,{keys:[...f.keys],hint:f.hint?{...f.hint}:void 0}]));[nj,dy]=p(0);iy=new Map(dJ.map((f)=>[f.id,f]))});function iq(){if(lJ)return lJ;let f=TQ();if(!f.exists)return lJ={path:f.path,exists:!1,applied:[],warnings:[]},lJ;let Y=[...f.warnings],J=EQ(f.doc,process.platform,{chordOptsFor:B8});Y.push(...J.warnings);let z=J.entries.filter((q)=>q.id.startsWith("tmux.")),Z=J.entries.filter((q)=>!q.id.startsWith("tmux.")),G=O5(dJ,Z);Y.push(...G.warnings);let Q=[...G.applied];if(z.length>0){let q=H8(z);Y.push(...q.warnings);for(let H of q.overridden){if(H===IY){Q.push({id:H,keys:q.focus.map((j)=>j?.chord??"").filter((j)=>j!==""),defaultKeys:SJ});continue}let B=q.binds[H];Q.push({id:H,keys:B?[B.chord]:[],defaultKeys:[Cz[H]]});let V=dJ.find((j)=>j.id===H);if(V?.hint)V.hint.keys=B?`${VZ(H)?"prefix ":""}${B.chord}`:"\u2014"}}for(let q of Y)console.warn(`[kobe/keybindings] ${q}`);return lJ={path:f.path,exists:!0,applied:Q,warnings:Y},lJ}function E4(){return lJ??iq()}function x4(){lJ=null,F5(),C5(),T4();let f=iq();return u4(),f}var lJ=null;var ij=N(()=>{Q8();hQ();xQ();hZ()});var ay=250,PZ,w4;var tG=N(()=>{TZ();tJ();Rj();({use:PZ,provider:w4}=xq({name:"KV",init:()=>{let[f,Y]=EY(c1()),J=new Set,z=null;function Z(q){if(J.size===0)return!0;try{let H={};for(let B of J)H[B]=f[B];return sJ(H),J.clear(),!0}catch(H){return console.error(`[kobe] kv ${q} failed:`,H),!1}}function G(){if(z)clearTimeout(z);z=setTimeout(()=>{z=null,Z("write")},ay)}let Q={get ready(){return!0},get store(){return f},signal(q,H){if(f[q]===void 0)Y(q,H);return[()=>Q.get(q),(B)=>Q.set(q,B)]},get(q,H){return f[q]??H},set(q,H){Y(q,H),J.add(q),G()},flush(){if(z)clearTimeout(z),z=null;return Z("flush")},clear(){for(let q of Object.keys(f))Y(q,void 0);if(z)clearTimeout(z),z=null;J.clear();try{s9({})}catch(q){console.error("[kobe] kv clear write failed:",q)}}};return Q}}))});var lq="../pulse-n3cq1btw.wav";var h4=()=>{};import{existsSync as py,mkdirSync as _y}from"fs";import{tmpdir as ry}from"os";import{basename as oy,isAbsolute as sy,join as lj,resolve as ty}from"path";function fS(f,Y,J){if(f==="ffplay")return[f,"-autoexit","-nodisp","-af",`volume=${J}`,Y];if(f==="mpv")return[f,"--no-video","--audio-display=no","--volume",String(Math.round(J*100)),Y];if(f==="mpg123"||f==="mpg321")return[f,"-g",String(Math.round(J*100)),Y];if(f==="mplayer")return[f,"-vo","null","-volume",String(Math.round(J*100)),Y];if(f==="afplay"||f==="omxplayer"||f==="aplay"||f==="cmdmp3")return[f,Y];if(f==="play")return[f,"-v",String(J),Y];if(f==="cvlc")return[f,`--gain=${J}`,"--play-and-exit",Y];return[f,"-c",`(New-Object Media.SoundPlayer '${Y.replace(/'/g,"''")}').PlaySync()`]}function YS(){if(aq!==void 0)return aq;let Y=(process.env.PATH??"").split(":").filter(Boolean);return aq=ey.find((J)=>Y.some((z)=>py(lj(z,J))))??null,aq}async function JS(){return m4??=(async()=>{_y(v4,{recursive:!0});let f=lj(v4,oy(P4)),Y=Bun.file(f);if(await Y.exists())return f;return await Bun.write(Y,Bun.file(P4)),f})(),m4}function c4(f=0.4){let Y=YS();if(!Y)return;JS().then((J)=>{try{Bun.spawn(fS(Y,J,f),{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).unref?.()}catch{}}).catch(()=>{return})}var P4,v4,ey,aq,m4;var n4=N(()=>{h4();P4=sy(lq)?lq:ty(import.meta.dir,lq),v4=lj(ry(),"kobe-sfx"),ey=["ffplay","mpv","mpg123","mpg321","mplayer","afplay","play","omxplayer","aplay","cmdmp3","cvlc","powershell.exe"]});function d4(f,Y){return`${f}:${Y}`}function l4(f){let Y=PZ(),[J,z]=p([]),[Z,G]=p(new Map),Q=hq(),q=0;function H(K){if(G((L)=>{let O=new Map(L),M=d4(K.taskId,K.tabId),R=L.get(M);if(R==="needs_input"||R==="error")return L;return O.set(M,K.kind),O}),Y.get("notifications.sound.enabled",!0)!==!1){try{process.stdout.write("\x07")}catch{}c4()}if(Y.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),zS)}}function B(K){z((L)=>L.filter((O)=>O.id!==K))}function V(K,L){G((O)=>{let M=d4(K,L);if(!O.has(M))return O;let R=new Map(O);return R.delete(M),R})}let j={toasts:J,unread:Z,notify:H,dismiss:B,markRead:V};return k(i4.Provider,{value:j,get children(){return f.children}})}function $q(){let f=Tf(i4);if(!f)throw Error("useNotifications must be used within a NotificationsProvider");return f}var zS=4500,i4;var pq=N(()=>{h();B1();Tj();n4();tG();i4=CY()});function aj(f,Y){if(typeof Y.theme==="string"&&Y.theme.length>0&&Y.theme!==f.selectedTheme()){if(!f.hasTheme(Y.theme))f.reloadUserThemes();if(f.hasTheme(Y.theme))f.setTheme(Y.theme)}if(typeof Y.transparentBackground==="boolean"&&Y.transparentBackground!==f.transparentBackground())f.setTransparentBackground(Y.transparentBackground);if(Y.focusAccent===null||typeof Y.focusAccent==="string"){let J=GS(Y.focusAccent);if(J&&J!==f.focusAccent())f.setFocusAccent(J)}}function GS(f){if(f===null)return"primary";return ZS.includes(f)?f:null}var ZS;var a4=N(()=>{ZS=["primary","success","info"]});import{readFileSync as XS}from"fs";function $4(f){try{let Y=JSON.parse(XS(mf(),"utf8")),J=typeof Y.activeTheme==="string"&&aG(Y.activeTheme)?Y.activeTheme:f,z=Y.transparentBackground===!0,Z=typeof Y.focusAccent==="string"&&uz.includes(Y.focusAccent)?Y.focusAccent:null,G=$G(Y[_q])?Y[_q]:EZ;return{theme:J,transparent:z,focusAccent:Z,locale:G}}catch{return{theme:f,transparent:!1,focusAccent:null,locale:EZ}}}var _q="locale";var $j=N(()=>{i1();w1();xZ()});function qS(f){if(f)AX(f);UW(),iq();for(let{name:Y,theme:J}of NG())Cj(Y,J)}function HS(f){let Y={backgroundColor:"transparent",externalOutputMode:"passthrough",exitOnCtrlC:!1,screenMode:"alternate-screen",useKittyKeyboard:{}};return f?{...Y,onDestroy:f}:Y}function BS(f){let Y=()=>f.children,J=()=>f.notifications?k(l4,{get children(){return Y()}}):Y(),z=()=>k(J4,{get children(){return J()}}),Z=()=>f.focus?k(S4,{initial:"sidebar",get children(){return z()}}):z(),G=()=>f.kv?k(w4,{get children(){return Z()}}):Z();return k(AD,{mode:"dark",get theme(){return f.theme},get children(){return G()}})}function jS(f){let{theme:Y}=n0();return r1(()=>p1("pane-crash",f.error)),(()=>{var J=W("box"),z=W("text"),Z=W("text");return D(J,z),D(J,Z),X(J,"flexDirection","column"),X(J,"flexGrow",1),X(J,"paddingLeft",1),X(J,"paddingTop",1),X(J,"gap",1),U(z,()=>F("common.paneCrash.title")),U(Z,()=>F("common.paneCrash.hint")),E((G)=>{var{background:Q,error:q,textMuted:H}=Y;return Q!==G.e&&(G.e=X(J,"backgroundColor",Q,G.e)),q!==G.t&&(G.t=X(z,"fg",q,G.t)),H!==G.a&&(G.a=X(Z,"fg",H,G.a)),G},{e:void 0,t:void 0,a:void 0}),J})()}function WS(f){let Y=n0(),J={selectedTheme:()=>Y.selected,hasTheme:(q)=>Y.has(q),setTheme:(q)=>Y.set(q),reloadUserThemes:()=>{for(let{name:q,theme:H}of NG())Cj(q,H)},transparentBackground:()=>Y.transparentBackground,setTransparentBackground:(q)=>Y.setTransparentBackground(q),focusAccent:()=>Y.focusAccent,setFocusAccent:(q)=>Y.setFocusAccent(q)};aj(J,{theme:f.boot.theme,transparentBackground:f.boot.transparent,focusAccent:f.boot.focusAccent}),pG(f.boot.locale);let[z,Z]=p(null),G=!1;r1(()=>{(async()=>{let q=await k4({logTag:"ui-prefs",channels:["ui-prefs","keybindings"]});if(!q)return;if(G){q.dispose();return}Z(q)})()}),Z1(()=>{let q=z()?.uiPrefsSignal()();if(!q)return;if(aj(J,q),$G(q.locale))pG(q.locale)});let Q=null;return Z1(()=>{let q=z()?.keybindingsRevSignal()();if(q==null)return;if(Q===null||q===Q){Q=q;return}Q=q,x4()}),b1(()=>{G=!0,z()?.dispose()}),null}async function Mf(f){qS(f.logContext);let Y=$4(QS),J=await f.setup(Y),z=f.providers?.kv??!0,Z=f.providers?.focus??!0,G=f.providers?.notifications??!1;await KD(()=>k(BS,{get theme(){return Y.theme},kv:z,focus:Z,notifications:G,get children(){return[k(WS,{boot:Y}),k(nV,{fallback:(Q)=>k(jS,{error:Q}),get children(){return J.root()}})]}}),HS(J.onDestroy))}var QS="claude";var aJ=N(()=>{h();h();h();h();h();h();h();Yz();B1();y4();I4();ij();tG();pq();w1();cQ();e1();Pf();a4();$j()});async function pj(f,Y,J,z,Z={}){let G=L1(Y.id);if(await j1(G))return!0;let Q=Y.worktreePath;if(!Q)Q=await f.ensureWorktree(Y.id);if(!Q)throw Error(`task ${Y.id} has no worktree`);let{ensureSession:q}=await Promise.resolve().then(() => (Gf(),_f)),{resolveEngineLaunchInit:H}=await Promise.resolve().then(() => (jZ(),X8)),B=H(J,Q,{kind:Z.includeInitPrompt?"repo-init":"none"});if(!await q({name:G,cwd:Q,command:yf(z),taskId:Y.id,vendor:z,repo:J,launchInit:B}))throw Error(`failed to start tmux session for ${Y.id}`);return!1}async function rq(f,Y,J,z,Z={}){await pj(f,Y,J,z,Z),await f.setActiveTask(Y.id).catch(()=>{});let{prepareWindowForSwitch:G}=await Promise.resolve().then(() => (Gf(),_f));await G(L1(Y.id)),await h0(["switch-client","-t",`=${L1(Y.id)}`])}var _j=N(()=>{Ef();u1()});var p4={};H1(p4,{startNewTaskHost:()=>VS,NewTaskPage:()=>oq});function oq(f){let{theme:Y}=n0(),J=v1();r1(()=>{z()});async function z(){let Z=Of(),G=f.defaultRepo||Z[0]||process.cwd(),Q=PY(k1("lastSelectedVendor"),cY()),q=await $Y(),H=f.orchestrator,B=await cq.show(J,G,Z,{defaultVendor:Q,availableVendors:q,discoverAdoptable:H?(j)=>H.discoverAdoptableWorktrees(j):void 0});if(!B)process.exit(0);if(l1("lastSelectedVendor",B.vendor),nY(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 rq(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 Z=W("box");return X(Z,"flexDirection","column"),X(Z,"flexGrow",1),E((G)=>X(Z,"backgroundColor",Y.background,G)),Z})()}async function VS(f){await Mf({setup:async()=>{let Y=null;try{let J=await KY(),z=new Vf(J);await z.init(),Y=z}catch(J){console.error("[kobe new-task] daemon unavailable; cannot create task:",J)}return{root:()=>k(oq,{get defaultRepo(){return f.defaultRepo},orchestrator:Y}),onDestroy:()=>{Y?.dispose()}}}})}var rj=N(()=>{h();h();h();h();Lf();B1();nJ();Jz();A1();$1();wZ();w1();aJ();_j();Pf()});function sq(f,Y,J,z,Z={}){if(f.length===0)return Y;let G=new Map;for(let H of f)G.set(J(H),H);let Q=f.length===Y.length,q=Array(Y.length);for(let H=0;H<Y.length;H++){let B=Y[H],V=G.get(J(B));if(V&&z(V,B)&&(!Z.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 _4(f,Y){if(!f)return!0;let J=f.toLowerCase(),z=Y.toLowerCase(),Z=0;for(let G=0;G<z.length&&Z<J.length;G++)if(z.charCodeAt(G)===J.charCodeAt(Z))Z++;return Z===J.length}function KS(f,Y){let J=Y==="archived";return f.filter((z)=>z.archived===J)}function oj(f,Y,J,z="default",Z){let G=KS(f,Y),Q=J?.trim()??"",q=Z?sf(Z):null,H=Q?G.filter((M)=>_4(Q,`${M.title} ${MY(M.repo)}`)):G,B=[],V=[],j=[],K=new Set;for(let M of H){if(M.kind==="main"){let R=sf(M.repo);if(K.has(R))continue;K.add(R),B.push(M);continue}if(q&&sf(M.repo)!==q)continue;if(M.pinned===!0)V.push(M);else j.push(M)}if(B.sort((M,R)=>MY(M.repo).localeCompare(MY(R.repo))),z==="recent")V.sort(r4),j.sort(r4);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 r4(f,Y){let J=o4(Y)-o4(f);if(J!==0)return J;return String(Y.id).localeCompare(String(f.id))}function o4(f){let Y=Date.parse(f.updatedAt||f.createdAt);return Number.isFinite(Y)?Y:0}function MY(f){let Y=f.split("/").filter(Boolean);return Y[Y.length-1]??f}function sf(f){return f.trim().replace(/[\\/]+$/,"")||f}function US(f,Y){let J=MY(f);if(!Y.some((Z)=>Z!==f&&MY(Z)===J))return J;return f.replace(/[\\/]+$/,"").split(/[\\/]+/).slice(-2).join("/")}function s4(f,Y){let J=Y==="archived",z=new Map;for(let G of f){let Q=sf(G.repo),q=z.get(Q)??{repo:G.repo,count:0};if(G.kind==="main")q.repo=G.repo;else if(G.archived===J)q.count+=1;z.set(Q,q)}let Z=[...z.values()].map((G)=>G.repo);return[...z.values()].map((G)=>({repo:G.repo,label:US(G.repo,Z),count:G.count})).sort((G,Q)=>G.label.localeCompare(Q.label))}function t4(f,Y){if(f.length===0)return-1;if(!Y)return f[0]?.flatIndex??-1;let J=sf(Y),z=f.find((G)=>G.task.kind!=="main"&&sf(G.task.repo)===J);if(z)return z.flatIndex;return f.find((G)=>G.task.kind==="main"&&sf(G.task.repo)===J)?.flatIndex??f[0]?.flatIndex??-1}function sj(f){return f.map((Y)=>Y.task.id)}function e4(f){let Y=[],J=[];for(let z of f)if(z.task.kind==="main")Y.push(z);else J.push(z);return{projectRows:Y,taskRows:J}}function DS(f,Y){return f===Y||f.id===Y.id&&f.kind===Y.kind&&f.title===Y.title&&f.repo===Y.repo&&f.branch===Y.branch&&f.worktreePath===Y.worktreePath&&f.status===Y.status&&f.archived===Y.archived&&f.pinned===Y.pinned&&f.vendor===Y.vendor}function fL(f,Y){return sq(f,Y,(J)=>J.task.id,(J,z)=>J.flatIndex===z.flatIndex&&DS(J.task,z.task),{samePosition:!0})}var tq=()=>{};var YL={};H1(YL,{startQuickTaskHost:()=>OS});async function LS(f,Y){let J,z;if(Y){let j=await bf(Y,["@kobe_task","@kobe_worktree"]);J=j["@kobe_task"]||void 0,z=j["@kobe_worktree"]||void 0}let Z=(J?f?.getTask(J)?.repo:void 0)??Of()[0],G=Z??z??process.cwd();if(!Z)return{ctx:null,fallbackRepo:G};let Q=await $Y(),q=PY(k1("lastSelectedVendor"),cY()),H=Q.length===0||Q.includes(q)?q:Q[0]??q,B=_G(Kf(Z))??LY,V=Q.length>0?Q:[H];return{ctx:{repo:Z,vendor:H,baseRef:B,engines:V},fallbackRepo:G}}async function MS(f,Y,J,z,Z){let G=await pj(f,Y,J,z),Q=L1(Y.id),{pane:q}=await gG(Q,!G);if(q)await CG(q,Z)}function FS(f){let{theme:Y}=n0(),J=v1();r1(()=>{z()});async function z(){let Z=f.ctx,G=await N4.show(J,{repoLabel:MY(Z.repo),engines:Z.engines,defaultVendor:Z.vendor,defaultBaseRef:Z.baseRef,engineLabel:Lz});if(G===void 0)process.exit(0);l1("lastSelectedVendor",G.vendor),nY(Z.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:Z.repo,baseRef:G.baseRef,vendor:G.vendor});await MS(Q,q,Z.repo,G.vendor,G.prompt),await rq(Q,q,Z.repo,G.vendor)}catch(q){console.error("[kobe quick-task] task.create/deliver failed:",q),process.exit(1)}process.exit(0)}return(()=>{var Z=W("box");return X(Z,"flexDirection","column"),X(Z,"flexGrow",1),E((G)=>X(Z,"backgroundColor",Y.background,G)),Z})()}async function OS(f){await Mf({setup:async()=>{let Y=null;try{let Z=await KY(),G=new Vf(Z);await G.init(),Y=G}catch(Z){console.error("[kobe quick-task] daemon unavailable; cannot create task:",Z)}let{ctx:J,fallbackRepo:z}=await LS(Y,f.session);return{root:()=>J?k(FS,{ctx:J,orchestrator:Y}):k(oq,{defaultRepo:z,orchestrator:Y}),onDestroy:()=>{Y?.dispose()}}}})}var JL=N(()=>{h();h();h();h();Lf();B1();nJ();Jz();Ef();A1();u1();PQ();$1();b4();w1();Pq();aJ();mq();_j();rj();tq();Pf()});function fH(f){let Y=f.trim().split(/\s+/).pop()??"",J=/^([CM])-(.+)$/.exec(Y);if(!J)return null;let z=J[1]==="C"?"\u2303":"\u2325",Z=J[2]??"";return`${z}${Z.length===1?Z.toUpperCase():Z}`}function eq(f,Y){if(f.includes("/"))return f.split("/").map((Z)=>eq(Z,Y)).join("/");let J=f.toLowerCase();if(J==="tab")return"tab";let z=RS[J];if(z)return z;if(/^f\d{1,2}$/.test(J))return J.toUpperCase();if(!Y)return f;if(/^[a-z]$/.test(J))return f.toUpperCase();return f.replace(/[a-z]+/gi,(Z)=>Z.toUpperCase())}function vZ(f,Y="\u2303B"){let J=f.trim();if(!J)return J;let z=/^prefix\s+(.+)$/i.exec(J);if(z){let q=z[1]??"";return`${Y} ${q.includes("+")?vZ(q,Y):eq(q,!0)}`}let Z=J.split("+");if(Z.length===1)return eq(Z[0]??"",!1);let G=Z[Z.length-1]??"";return`${Z.slice(0,-1).map((q)=>AS[q.toLowerCase().trim()]??q).join("")} ${eq(G,!0)}`}var AS,RS;var tj=N(()=>{AS={ctrl:"\u2303",control:"\u2303",alt:"\u2325",opt:"\u2325",option:"\u2325",shift:"\u21E7",cmd:"\u2318",command:"\u2318",meta:"\u2318",super:"\u2318"},RS={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 zL}from"@opentui/core";function gS(f){let Y=new Map,J=[];for(let z of f){if(!Y.has(z.category))Y.set(z.category,[]),J.push(z.category);Y.get(z.category).push(z)}return J.map((z)=>({category:z,rows:Y.get(z)}))}function mZ(f={}){let Y=v1(),{theme:J}=n0(),z=()=>gS(dJ),Z=()=>f.onClose?f.onClose():Y.clear(),[G,Q]=p("\u2303B");return r1(()=>{l0(["show-options","-g","prefix"]).then(({code:q,stdout:H})=>{if(q!==0)return;let B=fH(H);if(B)Q(B)})}),U1(()=>({bindings:[{key:"?",cmd:Z}]})),(()=>{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),X(q,"paddingLeft",2),X(q,"paddingRight",2),X(q,"gap",1),X(q,"flexShrink",1),D(H,B),D(H,V),X(H,"flexDirection","row"),X(H,"justifyContent","space-between"),X(H,"flexShrink",0),U(B,()=>F("help.title")),X(V,"onMouseUp",Z),U(V,()=>F("help.esc")),D(j,K),X(j,"flexShrink",1),X(j,"flexGrow",1),X(j,"stickyScroll",!1),X(K,"paddingBottom",1),X(K,"gap",1),X(K,"paddingRight",1),U(K,k(X1,{get each(){return z()},children:(L)=>(()=>{var O=W("box"),M=W("text");return D(O,M),X(O,"gap",0),U(M,()=>kj("category",L.category)),U(O,k(X1,{get each(){return L.rows},children:(R)=>{let S=R.hint?.keys??R.keys[0]??"\u2014",a=()=>S==="\u2014"?"\u2014":vZ(S,G()),b=()=>(R.hint?R.keys:R.keys.slice(1)).map((g)=>vZ(g,G()));return(()=>{var g=W("box"),C=W("box"),y=W("text"),r=W("box"),z0=W("text");return D(g,C),D(g,r),X(g,"flexDirection","row"),X(g,"gap",2),X(g,"paddingLeft",1),D(C,y),X(C,"width",14),U(y,a),D(r,z0),X(r,"flexGrow",1),U(z0,()=>kj("desc",R.id)),U(g,(()=>{var t=T0(()=>b().length>0);return()=>t()?(()=>{var J0=W("box"),T=W("text");return D(J0,T),U(T,()=>`(${b().join(", ")})`),E((B0)=>X(T,"fg",J.textMuted,B0)),J0})():null})(),null),E((t)=>{var{primary:J0,text:T}=J;return J0!==t.e&&(t.e=X(y,"fg",J0,t.e)),T!==t.t&&(t.t=X(z0,"fg",T,t.t)),t},{e:void 0,t:void 0}),g})()}}),null),E((R)=>{var S=J.accent,a=zL.BOLD;return S!==R.e&&(R.e=X(M,"fg",S,R.e)),a!==R.t&&(R.t=X(M,"attributes",a,R.t)),R},{e:void 0,t:void 0}),O})()})),E((L)=>{var O=zL.BOLD,M=J.text,R=J.textMuted,S={trackOptions:{backgroundColor:J.backgroundDialog,foregroundColor:J.borderActive}};return O!==L.e&&(L.e=X(B,"attributes",O,L.e)),M!==L.t&&(L.t=X(B,"fg",M,L.t)),R!==L.a&&(L.a=X(V,"fg",R,L.a)),S!==L.o&&(L.o=X(j,"verticalScrollbarOptions",S,L.o)),L},{e:void 0,t:void 0,a:void 0,o:void 0}),q})()}var ej=N(()=>{h();h();h();h();h();h();h();B1();u1();hZ();w1();e1();tj();Sf();Pf();mZ.show=(f)=>{f.replace(()=>k(mZ,{}))}});import{TextAttributes as CS}from"@opentui/core";function ZL(f){let Y=v1(),{theme:J}=n0(),[z,Z]=p(f.currentTitle);function G(){let Q=z().trim();if(!Q&&!f.allowEmpty)return;f.onSubmit(Q),Y.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),X(Q,"paddingLeft",2),X(Q,"paddingRight",2),X(Q,"gap",1),D(q,H),D(q,B),X(q,"flexDirection","row"),X(q,"justifyContent","space-between"),U(H,()=>f.dialogTitle??F("common.rename.defaultTitle")),D(B,x0("esc")),X(B,"onMouseUp",()=>f.onCancel()),D(V,j),D(V,K),X(V,"gap",0),U(j,()=>f.fieldLabel??F("common.rename.defaultFieldLabel")),X(K,"focused",!0),X(K,"onInput",(M)=>Z(qf(M))),X(K,"onSubmit",()=>G()),D(L,O),X(L,"paddingBottom",1),U(O,()=>F("common.rename.footerHint",{submitLabel:f.submitLabel??F("common.rename.defaultSubmitLabel")})),E((M)=>{var R=CS.BOLD,S=J.text,a=J.textMuted,b=J.accent,g=z(),C=f.placeholder??f.currentTitle,y=J.textMuted;return R!==M.e&&(M.e=X(H,"attributes",R,M.e)),S!==M.t&&(M.t=X(H,"fg",S,M.t)),a!==M.a&&(M.a=X(B,"fg",a,M.a)),b!==M.o&&(M.o=X(j,"fg",b,M.o)),g!==M.i&&(M.i=X(K,"value",g,M.i)),C!==M.n&&(M.n=X(K,"placeholder",C,M.n)),y!==M.s&&(M.s=X(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 GL=N(()=>{h();h();h();h();h();h();h();e1();B1();w1();Pf();wZ()});function NS(f,Y,J={}){return new Promise((z)=>{f.replace(()=>k(ZL,{currentTitle:Y,get dialogTitle(){return J.dialogTitle},get fieldLabel(){return J.fieldLabel},get submitLabel(){return J.submitLabel},get placeholder(){return J.placeholder},get allowEmpty(){return J.allowEmpty},onSubmit:(Z)=>z(Z),onCancel:()=>z(void 0)}),()=>z(void 0))})}var qJ;var f9=N(()=>{h();GL();qJ={show:NS}});import{TextAttributes as bS}from"@opentui/core";function kS(f){if(!f)return f;return f.charAt(0).toUpperCase()+f.slice(1)}function HJ(f){let Y=v1(),{theme:J}=n0(),[z,Z]=EY({active:f.initialActive??"confirm"});return U1(()=>({bindings:[{key:"return",cmd:()=>{if(z.active==="confirm")f.onConfirm?.();if(z.active==="cancel")f.onCancel?.();Y.clear()}},{key:"left",cmd:()=>Z("active",z.active==="confirm"?"cancel":"confirm")},{key:"right",cmd:()=>Z("active",z.active==="confirm"?"cancel":"confirm")}]})),(()=>{var G=W("box"),Q=W("box"),q=W("text"),H=W("text"),B=W("text"),V=W("box");return D(G,Q),D(G,B),D(G,V),X(G,"paddingLeft",2),X(G,"paddingRight",2),X(G,"paddingBottom",1),X(G,"gap",0),D(Q,q),D(Q,H),X(Q,"flexDirection","row"),X(Q,"justifyContent","space-between"),U(q,()=>f.title),D(H,x0("esc")),X(H,"onMouseUp",()=>Y.clear()),U(B,()=>f.message),X(V,"flexDirection","row"),X(V,"justifyContent","flex-end"),X(V,"paddingTop",1),U(V,k(X1,{each:["cancel","confirm"],children:(j)=>(()=>{var K=W("box"),L=W("text");return D(K,L),X(K,"paddingLeft",1),X(K,"paddingRight",1),X(K,"onMouseUp",()=>{if(j==="confirm")f.onConfirm?.();if(j==="cancel")f.onCancel?.();Y.clear()}),U(L,()=>kS(j==="cancel"?f.label??F("common.cancel"):f.confirmLabel??F("common.confirm"))),E((O)=>{var M=j===z.active?J.primary:void 0,R=j===z.active?J.selectedListItemText:J.textMuted;return M!==O.e&&(O.e=X(K,"backgroundColor",M,O.e)),R!==O.t&&(O.t=X(L,"fg",R,O.t)),O},{e:void 0,t:void 0}),K})()})),E((j)=>{var K=bS.BOLD,L=J.text,O=J.textMuted,M=J.textMuted;return K!==j.e&&(j.e=X(q,"attributes",K,j.e)),L!==j.t&&(j.t=X(q,"fg",L,j.t)),O!==j.a&&(j.a=X(H,"fg",O,j.a)),M!==j.o&&(j.o=X(B,"fg",M,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),G})()}var Y9=N(()=>{h();h();h();h();h();h();h();e1();B1();TZ();w1();Sf();Pf();HJ.show=(f,Y,J,z,Z,G)=>{return new Promise((Q)=>{f.replace(()=>k(HJ,{title:Y,message:J,onConfirm:()=>Q(!0),onCancel:()=>Q(!1),label:z,confirmLabel:Z,get initialActive(){return G?.initialActive}}),()=>Q(void 0)),f.setSize("small")})}});import{unlinkSync as yS}from"fs";import{join as SS}from"path";function XL(f){return f instanceof Vf}function QL(f,Y){try{f?.destroy()}catch(J){console.error(`kobe: renderer.destroy() failed during ${Y}:`,J)}}async function J9(f,Y,J){if(await HJ.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;Y.clear();try{yS(SS(OY(),".kobe","tasks.json"))}catch(Z){if(Z.code!=="ENOENT")console.error("kobe: failed to delete tasks.json during reset:",Z)}QL(J,"reset"),process.stderr.write(`kobe: UI state reset. Relaunch kobe to start fresh.
264
- `),process.exit(0)}async function z9(f,Y,J){if(!(Y instanceof Vf))return;if(await HJ.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;QL(J,"daemon restart"),process.stderr.write(`kobe: window closed. Relaunch kobe to start fresh.
265
- `),process.exit(0)}var qL=N(()=>{nJ();i1();Y9()});function IS(f){return`theme:${f}`}function Z9(f){return`language:${f}`}function G9(f){return`accent:${f}`}function TS(f){return`engine:${f}`}function eG(f){return`surface:${f}`}function X9(f){return[...f.themeNames.map((Y)=>({id:IS(Y),kind:"theme",name:Y})),...Ez.map((Y)=>({id:Z9(Y.id),kind:"language",locale:Y.id})),{id:"transparent",kind:"transparent"},...f.focusAccentSlots.map((Y)=>({id:G9(Y),kind:"focusAccent",slot:Y})),{id:"toast",kind:"toast"},{id:"sound",kind:"sound"},{id:"zen-keep-tasks",kind:"zenKeepTasks"},{id:eG("chattab"),kind:"surface",surface:"chattab"},{id:eG("taskpanel"),kind:"surface",surface:"taskpanel"},{id:"editor-kind",kind:"editorKind"},{id:"editor-custom",kind:"editorCustom"}]}function uS(f){return[...f.map((Y)=>({id:TS(Y),kind:"engine",vendor:Y})),{id:"add-engine",kind:"engineAdd"}]}function ES(){return[{id:"feedback-title",kind:"feedbackTitle"},{id:"feedback-body",kind:"feedbackBody"},{id:"feedback-send",kind:"feedbackSend"}]}function fX(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 HL(f,Y){switch(f){case"general":return X9(Y);case"engines":return uS(Y.engineList);case"accounts":case"keys":return[];case"feedback":return ES();case"dev":return fX(Y.hasDaemon)}}function YX(f,Y){return f.findIndex((J)=>J.id===Y)}function YH(f,Y){return f[Y]}var wz;var Q9=N(()=>{xZ();wz=[{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 f1}from"@opentui/core";function BL(f){let{theme:Y}=n0();return(()=>{var J=W("box");return X(J,"flexDirection","column"),X(J,"flexShrink",0),X(J,"width",14),X(J,"gap",1),U(J,k(X1,{each:wz,children:(z,Z)=>{let G=()=>Z()===f.cursor(),Q=()=>G()&&f.level()==="sidebar";return(()=>{var q=W("box"),H=W("text");return D(q,H),X(q,"paddingLeft",1),X(q,"paddingRight",1),X(q,"onMouseUp",()=>f.switchSection(z.id)),X(H,"wrapMode","none"),U(H,()=>F(`settings.sections.${z.id}`)),E((B)=>{var V=Q()?Y.primary:void 0,j=Q()?Y.selectedListItemText:G()?Y.accent:Y.textMuted,K=G()?f1.BOLD:void 0;return V!==B.e&&(B.e=X(q,"backgroundColor",V,B.e)),j!==B.t&&(B.t=X(H,"fg",j,B.t)),K!==B.a&&(B.a=X(H,"attributes",K,B.a)),B},{e:void 0,t:void 0,a:void 0}),q})()}})),J})()}function jL(f){let Y=n0(),{theme:J}=Y,z=()=>X9({themeNames:f.themeNames(),focusAccentSlots:uz}),Z=(C)=>YX(z(),C),G=()=>Z("transparent"),Q=()=>Z("toast"),q=()=>Z("sound"),H=()=>Z("zen-keep-tasks"),B=()=>Z(eG("chattab")),V=()=>Z(eG("taskpanel")),j=()=>Z("editor-kind"),K=()=>Z("editor-custom"),L=()=>f.bodyRow()===G(),O=()=>f.bodyRow()===Q(),M=()=>f.bodyRow()===q(),R=()=>f.bodyRow()===H(),S=()=>f.bodyRow()===B(),a=()=>f.bodyRow()===V(),b=()=>f.bodyRow()===j(),g=()=>f.bodyRow()===K();return(()=>{var C=W("box"),y=W("text"),r=W("text"),z0=W("box"),t=W("box"),J0=W("text"),T=W("text"),B0=W("box"),_=W("text"),D0=W("text"),R0=W("box"),$=W("text"),x=W("box"),e=W("text"),I=W("text"),Z0=W("box"),u=W("text"),P=W("text"),X0=W("box"),V0=W("text"),q0=x0(" "),k0=W("box"),w0=W("text"),I0=x0(" "),_0=W("box"),v=W("text"),M0=W("text"),Y0=W("box"),F0=W("text"),$0=x0(" "),r0=W("box"),u0=W("text"),o0=W("text"),n=W("box"),Q0=W("text"),y0=x0(" "),s0=W("box"),a0=W("text"),p0=x0(" "),e0=W("box"),g1=W("text"),R1=W("text"),o=W("box"),f0=W("text"),j0=W("box"),C0=W("text");return D(C,y),D(C,r),D(C,z0),D(C,t),D(C,B0),D(C,x),D(C,Z0),D(C,_0),D(C,r0),D(C,e0),X(C,"flexDirection","column"),X(C,"gap",1),U(y,()=>F("settings.general.theme")),U(r,()=>F("settings.general.themeHint")),X(z0,"flexDirection","column"),X(z0,"gap",0),U(z0,k(X1,{get each(){return f.themeNames()},children:(A,P0)=>{let U0=()=>f.level()==="body"&&f.bodyRow()===P0(),E0=()=>A===Y.selected;return(()=>{var W0=W("box"),L0=W("text");return D(W0,L0),X(W0,"flexDirection","row"),X(W0,"gap",1),X(W0,"paddingLeft",1),X(W0,"paddingRight",1),X(W0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(P0()),f.setThemeCursor(P0()),f.selectTheme(A)}),X(L0,"wrapMode","none"),U(L0,()=>E0()?"\u25CF ":" ",null),U(L0,A,null),E((g0)=>{var Y1=U0()?J.primary:void 0,J1=U0()?J.selectedListItemText:E0()?J.accent:J.text,d0=U0()||E0()?f1.BOLD:void 0;return Y1!==g0.e&&(g0.e=X(W0,"backgroundColor",Y1,g0.e)),J1!==g0.t&&(g0.t=X(L0,"fg",J1,g0.t)),d0!==g0.a&&(g0.a=X(L0,"attributes",d0,g0.a)),g0},{e:void 0,t:void 0,a:void 0}),W0})()}})),D(t,J0),D(t,T),X(t,"flexDirection","column"),X(t,"gap",0),X(t,"paddingTop",1),U(J0,()=>F("settings.general.language")),X(T,"wrapMode","word"),U(T,()=>F("settings.general.languageHint")),U(t,k(X1,{each:Ez,children:(A)=>{let P0=()=>Z(Z9(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),X(W0,"flexDirection","row"),X(W0,"gap",1),X(W0,"paddingLeft",1),X(W0,"paddingRight",1),X(W0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(P0()),f.selectLanguage(A.id)}),X(L0,"wrapMode","none"),U(L0,()=>E0()?"\u25CF ":" ",null),U(L0,()=>A.label,null),E((g0)=>{var Y1=U0()?J.primary:void 0,J1=U0()?J.selectedListItemText:E0()?J.accent:J.text,d0=U0()||E0()?f1.BOLD:void 0;return Y1!==g0.e&&(g0.e=X(W0,"backgroundColor",Y1,g0.e)),J1!==g0.t&&(g0.t=X(L0,"fg",J1,g0.t)),d0!==g0.a&&(g0.a=X(L0,"attributes",d0,g0.a)),g0},{e:void 0,t:void 0,a:void 0}),W0})()}}),null),D(B0,_),D(B0,D0),D(B0,R0),X(B0,"flexDirection","column"),X(B0,"gap",0),X(B0,"paddingTop",1),U(_,()=>F("settings.general.transparent")),X(D0,"wrapMode","word"),U(D0,()=>F("settings.general.transparentHint")),D(R0,$),X(R0,"flexDirection","row"),X(R0,"paddingLeft",1),X(R0,"paddingRight",1),X(R0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(G()),f.toggleTransparent()}),X($,"wrapMode","none"),U($,(()=>{var A=T0(()=>!!Y.transparentBackground);return()=>A()?F("settings.general.on"):F("settings.general.off")})()),D(x,e),D(x,I),X(x,"flexDirection","column"),X(x,"gap",0),X(x,"paddingTop",1),U(e,()=>F("settings.general.focusAccent")),X(I,"wrapMode","word"),U(I,()=>F("settings.general.focusAccentHint")),U(x,k(X1,{each:uz,children:(A)=>{let P0=()=>Z(G9(A)),U0=()=>f.level()==="body"&&f.bodyRow()===P0(),E0=()=>Y.focusAccent===A;return(()=>{var W0=W("box"),L0=W("text");return D(W0,L0),X(W0,"flexDirection","row"),X(W0,"gap",1),X(W0,"paddingLeft",1),X(W0,"paddingRight",1),X(W0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(P0()),f.selectFocusAccent(A)}),X(L0,"wrapMode","none"),U(L0,()=>E0()?"\u25CF ":" ",null),U(L0,()=>F(`settings.general.accent${A.charAt(0).toUpperCase()}${A.slice(1)}`),null),E((g0)=>{var Y1=U0()?J.primary:void 0,J1=U0()?J.selectedListItemText:E0()?J.focusAccent:J.text,d0=U0()||E0()?f1.BOLD:void 0;return Y1!==g0.e&&(g0.e=X(W0,"backgroundColor",Y1,g0.e)),J1!==g0.t&&(g0.t=X(L0,"fg",J1,g0.t)),d0!==g0.a&&(g0.a=X(L0,"attributes",d0,g0.a)),g0},{e:void 0,t:void 0,a:void 0}),W0})()}}),null),D(Z0,u),D(Z0,P),D(Z0,X0),D(Z0,k0),X(Z0,"flexDirection","column"),X(Z0,"gap",0),X(Z0,"paddingTop",1),U(u,()=>F("settings.general.notifications")),X(P,"wrapMode","word"),U(P,()=>F("settings.general.notificationsHint")),D(X0,V0),X(X0,"flexDirection","row"),X(X0,"gap",1),X(X0,"paddingLeft",1),X(X0,"paddingRight",1),X(X0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(Q()),f.toggleToast()}),D(V0,q0),X(V0,"wrapMode","none"),U(V0,()=>f.toastEnabled()?"[x]":"[ ]",q0),U(V0,()=>F("settings.general.toast"),null),D(k0,w0),X(k0,"flexDirection","row"),X(k0,"gap",1),X(k0,"paddingLeft",1),X(k0,"paddingRight",1),X(k0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(q()),f.toggleSound()}),D(w0,I0),X(w0,"wrapMode","none"),U(w0,()=>f.soundEnabled()?"[x]":"[ ]",I0),U(w0,()=>F("settings.general.sound"),null),D(_0,v),D(_0,M0),D(_0,Y0),X(_0,"flexDirection","column"),X(_0,"gap",0),X(_0,"paddingTop",1),U(v,()=>F("settings.general.zen")),X(M0,"wrapMode","word"),U(M0,()=>F("settings.general.zenHint")),D(Y0,F0),X(Y0,"flexDirection","row"),X(Y0,"gap",1),X(Y0,"paddingLeft",1),X(Y0,"paddingRight",1),X(Y0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(H()),f.toggleZenKeepsTasks()}),D(F0,$0),X(F0,"wrapMode","none"),U(F0,()=>f.zenKeepsTasks()?"[x]":"[ ]",$0),U(F0,()=>F("settings.general.zenKeepTasks"),null),D(r0,u0),D(r0,o0),D(r0,n),D(r0,s0),X(r0,"flexDirection","column"),X(r0,"gap",0),X(r0,"paddingTop",1),U(u0,()=>F("settings.general.surface")),X(o0,"wrapMode","word"),U(o0,()=>F("settings.general.surfaceHint")),D(n,Q0),X(n,"flexDirection","row"),X(n,"gap",1),X(n,"paddingLeft",1),X(n,"paddingRight",1),X(n,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(B()),f.selectSurface("chattab")}),D(Q0,y0),X(Q0,"wrapMode","none"),U(Q0,()=>f.settingsSurface()==="chattab"?"[x]":"[ ]",y0),U(Q0,()=>F("settings.general.surfaceChattab"),null),D(s0,a0),X(s0,"flexDirection","row"),X(s0,"gap",1),X(s0,"paddingLeft",1),X(s0,"paddingRight",1),X(s0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(V()),f.selectSurface("taskpanel")}),D(a0,p0),X(a0,"wrapMode","none"),U(a0,()=>f.settingsSurface()==="taskpanel"?"[x]":"[ ]",p0),U(a0,()=>F("settings.general.surfaceTaskpanel"),null),D(e0,g1),D(e0,R1),D(e0,o),D(e0,j0),X(e0,"flexDirection","column"),X(e0,"gap",0),X(e0,"paddingTop",1),U(g1,()=>F("settings.general.editor")),X(R1,"wrapMode","word"),U(R1,()=>F("settings.general.editorHint")),D(o,f0),X(o,"flexDirection","row"),X(o,"gap",1),X(o,"paddingLeft",1),X(o,"paddingRight",1),X(o,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(j()),f.cycleEditorKind()}),X(f0,"wrapMode","none"),U(f0,()=>F("settings.general.editorRow",{kind:f.editorKind()})),D(j0,C0),X(j0,"flexDirection","row"),X(j0,"gap",1),X(j0,"paddingLeft",1),X(j0,"paddingRight",1),X(j0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(K()),f.editEditorCustom()}),X(C0,"wrapMode","none"),U(C0,()=>F("settings.general.editorCustom",{cmd:f.editorCustomCommand().trim()||F("settings.general.editorCustomUnset")})),E((A)=>{var P0=J.text,U0=f1.BOLD,E0=J.textMuted,W0=J.text,L0=f1.BOLD,g0=J.textMuted,Y1=J.text,J1=f1.BOLD,d0=J.textMuted,S1=L()?J.primary:void 0,N0=L()?J.selectedListItemText:Y.transparentBackground?J.accent:J.textMuted,h1=f1.BOLD,m=J.text,A0=f1.BOLD,W1=J.textMuted,O1=J.text,q1=f1.BOLD,d=J.textMuted,s=O()?J.primary:void 0,S0=O()?J.selectedListItemText:f.toastEnabled()?J.accent:J.textMuted,b0=f1.BOLD,Hf=M()?J.primary:void 0,Uf=M()?J.selectedListItemText:f.soundEnabled()?J.accent:J.textMuted,ff=f1.BOLD,vf=J.text,wY=f1.BOLD,Ff=J.textMuted,hY=R()?J.primary:void 0,BJ=R()?J.selectedListItemText:f.zenKeepsTasks()?J.accent:J.textMuted,c=f1.BOLD,i=J.text,l=f1.BOLD,w=J.textMuted,m0=S()?J.primary:void 0,v0=S()?J.selectedListItemText:f.settingsSurface()==="chattab"?J.accent:J.textMuted,O0=f1.BOLD,c0=a()?J.primary:void 0,Q1=a()?J.selectedListItemText:f.settingsSurface()==="taskpanel"?J.accent:J.textMuted,D1=f1.BOLD,Bf=J.text,tf=f1.BOLD,jJ=J.textMuted,I9=b()?J.primary:void 0,T9=b()?J.selectedListItemText:J.accent,u9=f1.BOLD,E9=g()?J.primary:void 0,x9=g()?J.selectedListItemText:f.editorKind()==="custom"?J.text:J.textMuted;return P0!==A.e&&(A.e=X(y,"fg",P0,A.e)),U0!==A.t&&(A.t=X(y,"attributes",U0,A.t)),E0!==A.a&&(A.a=X(r,"fg",E0,A.a)),W0!==A.o&&(A.o=X(J0,"fg",W0,A.o)),L0!==A.i&&(A.i=X(J0,"attributes",L0,A.i)),g0!==A.n&&(A.n=X(T,"fg",g0,A.n)),Y1!==A.s&&(A.s=X(_,"fg",Y1,A.s)),J1!==A.h&&(A.h=X(_,"attributes",J1,A.h)),d0!==A.r&&(A.r=X(D0,"fg",d0,A.r)),S1!==A.d&&(A.d=X(R0,"backgroundColor",S1,A.d)),N0!==A.l&&(A.l=X($,"fg",N0,A.l)),h1!==A.u&&(A.u=X($,"attributes",h1,A.u)),m!==A.c&&(A.c=X(e,"fg",m,A.c)),A0!==A.w&&(A.w=X(e,"attributes",A0,A.w)),W1!==A.m&&(A.m=X(I,"fg",W1,A.m)),O1!==A.f&&(A.f=X(u,"fg",O1,A.f)),q1!==A.y&&(A.y=X(u,"attributes",q1,A.y)),d!==A.g&&(A.g=X(P,"fg",d,A.g)),s!==A.p&&(A.p=X(X0,"backgroundColor",s,A.p)),S0!==A.b&&(A.b=X(V0,"fg",S0,A.b)),b0!==A.T&&(A.T=X(V0,"attributes",b0,A.T)),Hf!==A.A&&(A.A=X(k0,"backgroundColor",Hf,A.A)),Uf!==A.O&&(A.O=X(w0,"fg",Uf,A.O)),ff!==A.I&&(A.I=X(w0,"attributes",ff,A.I)),vf!==A.S&&(A.S=X(v,"fg",vf,A.S)),wY!==A.W&&(A.W=X(v,"attributes",wY,A.W)),Ff!==A.C&&(A.C=X(M0,"fg",Ff,A.C)),hY!==A.B&&(A.B=X(Y0,"backgroundColor",hY,A.B)),BJ!==A.v&&(A.v=X(F0,"fg",BJ,A.v)),c!==A.k&&(A.k=X(F0,"attributes",c,A.k)),i!==A.x&&(A.x=X(u0,"fg",i,A.x)),l!==A.j&&(A.j=X(u0,"attributes",l,A.j)),w!==A.q&&(A.q=X(o0,"fg",w,A.q)),m0!==A.z&&(A.z=X(n,"backgroundColor",m0,A.z)),v0!==A.P&&(A.P=X(Q0,"fg",v0,A.P)),O0!==A.H&&(A.H=X(Q0,"attributes",O0,A.H)),c0!==A.F&&(A.F=X(s0,"backgroundColor",c0,A.F)),Q1!==A.M&&(A.M=X(a0,"fg",Q1,A.M)),D1!==A.D&&(A.D=X(a0,"attributes",D1,A.D)),Bf!==A.R&&(A.R=X(g1,"fg",Bf,A.R)),tf!==A.E&&(A.E=X(g1,"attributes",tf,A.E)),jJ!==A.L&&(A.L=X(R1,"fg",jJ,A.L)),I9!==A.N&&(A.N=X(o,"backgroundColor",I9,A.N)),T9!==A.G&&(A.G=X(f0,"fg",T9,A.G)),u9!==A.U&&(A.U=X(f0,"attributes",u9,A.U)),E9!==A.K&&(A.K=X(j0,"backgroundColor",E9,A.K)),x9!==A.V&&(A.V=X(C0,"fg",x9,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 WL(f){let{theme:Y}=n0(),J=()=>f.vendors.length;return(()=>{var z=W("box"),Z=W("text"),G=W("text"),Q=W("box"),q=W("box"),H=W("text");return D(z,Z),D(z,G),D(z,Q),X(z,"flexDirection","column"),X(z,"gap",1),U(Z,()=>F("settings.engines.title")),X(G,"wrapMode","word"),U(G,()=>F("settings.engines.hint")),D(Q,q),X(Q,"flexDirection","column"),X(Q,"gap",0),U(Q,k(X1,{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),X(K,"flexDirection","row"),X(K,"gap",1),X(K,"paddingLeft",1),X(K,"paddingRight",1),X(K,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(V()),f.editEngine(B)}),X(L,"wrapMode","none"),U(L,()=>f.isDefaultEngine(B)?"\u25CF":" "),X(O,"wrapMode","none"),U(O,()=>f.displayName(B)),X(M,"wrapMode","none"),U(M,()=>f.commandText(B),null),U(M,(()=>{var R=T0(()=>!!f.isDefault(B));return()=>R()?F("settings.engines.defaultTag"):T0(()=>!!f.isCustom(B))()?F("settings.engines.customTag"):""})(),null),E((R)=>{var S=j()?Y.primary:void 0,a=j()?Y.selectedListItemText:Y.accent,b=f1.BOLD,g=j()?Y.selectedListItemText:Y.text,C=f1.BOLD,y=j()?Y.selectedListItemText:f.isDefault(B)?Y.textMuted:Y.accent;return S!==R.e&&(R.e=X(K,"backgroundColor",S,R.e)),a!==R.t&&(R.t=X(L,"fg",a,R.t)),b!==R.a&&(R.a=X(L,"attributes",b,R.a)),g!==R.o&&(R.o=X(O,"fg",g,R.o)),C!==R.i&&(R.i=X(O,"attributes",C,R.i)),y!==R.n&&(R.n=X(M,"fg",y,R.n)),R},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),K})()}}),q),D(q,H),X(q,"flexDirection","row"),X(q,"paddingLeft",1),X(q,"paddingRight",1),X(q,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(J()),f.onAddEngine()}),X(H,"wrapMode","none"),U(H,()=>F("settings.engines.addEngine")),E((B)=>{var V=Y.text,j=f1.BOLD,K=Y.textMuted,L=f.level()==="body"&&f.bodyRow()===J()?Y.primary:void 0,O=f.level()==="body"&&f.bodyRow()===J()?Y.selectedListItemText:Y.primary;return V!==B.e&&(B.e=X(Z,"fg",V,B.e)),j!==B.t&&(B.t=X(Z,"attributes",j,B.t)),K!==B.a&&(B.a=X(G,"fg",K,B.a)),L!==B.o&&(B.o=X(q,"backgroundColor",L,B.o)),O!==B.i&&(B.i=X(H,"fg",O,B.i)),B},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),z})()}function VL(f){let{theme:Y}=n0(),J=(z)=>z.binary.found?`Binary: ${z.binary.path}`:`Binary: ${z.binary.error}`;return(()=>{var z=W("box"),Z=W("text"),G=W("text"),Q=W("box"),q=W("text"),H=W("box"),B=W("text"),V=W("box"),j=W("text");return D(z,Z),D(z,G),D(z,Q),D(z,H),D(z,V),X(z,"flexDirection","column"),X(z,"gap",1),U(Z,()=>F("settings.accounts.title")),X(G,"wrapMode","word"),U(G,()=>F("settings.accounts.hint")),D(Q,q),X(Q,"flexDirection","column"),X(Q,"gap",0),D(q,x0("claude-code")),U(Q,k(G0,{get when(){return f.claudeStatus()===null},get children(){var K=W("text");return U(K,()=>F("settings.accounts.checking")),E((L)=>X(K,"fg",Y.textMuted,L)),K}}),null),U(Q,k(G0,{get when(){return f.claudeStatus()},children:(K)=>(()=>{var L=W("box"),O=W("text");return D(L,O),X(L,"flexDirection","column"),X(L,"gap",0),X(O,"wrapMode","word"),U(O,()=>J(K())),U(L,()=>{let M=K().account;if(M.kind==="oauth"){let R=[M.organization,M.billingType].filter((S)=>!!S).join(" \xB7 ");return(()=>{var S=W("text");return X(S,"wrapMode","word"),U(S,()=>F("settings.accounts.loggedIn",{email:M.email}),null),U(S,R?` (${R})`:"",null),E((a)=>X(S,"fg",Y.success,a)),S})()}return(()=>{var R=W("text");return U(R,()=>F("settings.accounts.notLoggedIn")),E((S)=>X(R,"fg",Y.textMuted,S)),R})()},null),U(L,k(G0,{get when(){return K().accountError},children:(M)=>(()=>{var R=W("text");return X(R,"wrapMode","word"),U(R,()=>`! ${M()}`),E((S)=>X(R,"fg",Y.warning,S)),R})()}),null),E((M)=>X(O,"fg",K().binary.found?Y.textMuted:Y.warning,M)),L})()}),null),D(H,B),X(H,"flexDirection","column"),X(H,"gap",0),D(B,x0("codex")),U(H,k(G0,{get when(){return f.codexStatus()===null},get children(){var K=W("text");return U(K,()=>F("settings.accounts.checking")),E((L)=>X(K,"fg",Y.textMuted,L)),K}}),null),U(H,k(G0,{get when(){return f.codexStatus()},children:(K)=>(()=>{var L=W("box"),O=W("text");return D(L,O),X(L,"flexDirection","column"),X(L,"gap",0),X(O,"wrapMode","word"),U(O,()=>J(K())),U(L,()=>{let M=K().account;if(M.kind==="chatgpt")return(()=>{var R=W("text");return X(R,"wrapMode","word"),U(R,()=>F("settings.accounts.chatgptLogin",{email:M.email}),null),U(R,(()=>{var S=T0(()=>!!M.plan);return()=>S()?` (${M.plan})`:""})(),null),E((S)=>X(R,"fg",Y.success,S)),R})();if(M.kind==="apikey")return(()=>{var R=W("text");return U(R,()=>F("settings.accounts.apiKeyConfigured")),E((S)=>X(R,"fg",Y.success,S)),R})();return(()=>{var R=W("text");return U(R,()=>F("settings.accounts.notLoggedIn")),E((S)=>X(R,"fg",Y.textMuted,S)),R})()},null),U(L,k(G0,{get when(){return K().accountError},children:(M)=>(()=>{var R=W("text");return X(R,"wrapMode","word"),U(R,()=>`! ${M()}`),E((S)=>X(R,"fg",Y.warning,S)),R})()}),null),E((M)=>X(O,"fg",K().binary.found?Y.textMuted:Y.warning,M)),L})()}),null),D(V,j),X(V,"flexDirection","column"),X(V,"gap",0),D(j,x0("copilot")),U(V,k(G0,{get when(){return f.copilotStatus()===null},get children(){var K=W("text");return U(K,()=>F("settings.accounts.checking")),E((L)=>X(K,"fg",Y.textMuted,L)),K}}),null),U(V,k(G0,{get when(){return f.copilotStatus()},children:(K)=>(()=>{var L=W("box"),O=W("text");return D(L,O),X(L,"flexDirection","column"),X(L,"gap",0),X(O,"wrapMode","word"),U(O,()=>J(K())),U(L,()=>{let M=K().account;if(M.kind==="token")return(()=>{var R=W("text");return U(R,()=>F("settings.accounts.tokenConfigured",{source:M.source})),E((S)=>X(R,"fg",Y.success,S)),R})();if(M.kind==="oauth")return(()=>{var R=W("text");return U(R,()=>F("settings.accounts.copilotDetected")),E((S)=>X(R,"fg",Y.success,S)),R})();return(()=>{var R=W("text");return U(R,()=>F("settings.accounts.notLoggedIn")),E((S)=>X(R,"fg",Y.textMuted,S)),R})()},null),U(L,k(G0,{get when(){return K().accountError},children:(M)=>(()=>{var R=W("text");return X(R,"wrapMode","word"),U(R,()=>`! ${M()}`),E((S)=>X(R,"fg",Y.warning,S)),R})()}),null),E((M)=>X(O,"fg",K().binary.found?Y.textMuted:Y.warning,M)),L})()}),null),E((K)=>{var L=Y.text,O=f1.BOLD,M=Y.textMuted,R=Y.text,S=f1.BOLD,a=Y.text,b=f1.BOLD,g=Y.text,C=f1.BOLD;return L!==K.e&&(K.e=X(Z,"fg",L,K.e)),O!==K.t&&(K.t=X(Z,"attributes",O,K.t)),M!==K.a&&(K.a=X(G,"fg",M,K.a)),R!==K.o&&(K.o=X(q,"fg",R,K.o)),S!==K.i&&(K.i=X(q,"attributes",S,K.i)),a!==K.n&&(K.n=X(B,"fg",a,K.n)),b!==K.s&&(K.s=X(B,"attributes",b,K.s)),g!==K.h&&(K.h=X(j,"fg",g,K.h)),C!==K.r&&(K.r=X(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 KL(f){let{theme:Y}=n0(),J=()=>f.level()==="body",z=()=>J()&&f.bodyRow()===0,Z=()=>J()&&f.bodyRow()===1,G=()=>J()&&f.bodyRow()===2,Q=(H)=>H?Y.primary:Y.textMuted,q=(H)=>H?f1.BOLD|f1.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"),R=W("text"),S=W("input"),a=W("box"),b=W("text");return D(H,B),D(H,V),D(H,j),X(H,"flexDirection","column"),X(H,"gap",1),U(B,()=>F("settings.feedback.title")),X(V,"wrapMode","word"),U(V,()=>F("settings.feedback.hint")),D(j,K),D(j,M),D(j,a),X(j,"flexDirection","column"),X(j,"gap",1),D(K,L),D(K,O),X(K,"gap",0),U(L,()=>F("settings.feedback.titleLabel")),X(O,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(0)}),X(O,"onInput",(g)=>f.setTitle(qf(g))),X(O,"onSubmit",()=>f.onTitleSubmit()),D(M,R),D(M,S),X(M,"gap",0),U(R,()=>F("settings.feedback.descriptionLabel")),X(S,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(1)}),X(S,"onInput",(g)=>f.setBody(qf(g))),X(S,"onSubmit",()=>f.onBodySubmit()),D(a,b),X(a,"flexDirection","row"),X(a,"paddingLeft",1),X(a,"paddingRight",1),X(a,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(2),f.submit()}),U(b,()=>F("settings.feedback.send")),U(H,k(G0,{get when(){return f.status()},get children(){var g=W("text");return X(g,"wrapMode","word"),U(g,()=>f.status()),E((C)=>X(g,"fg",f.status().startsWith("error:")?Y.warning:Y.success,C)),g}}),null),E((g)=>{var C=Y.text,y=f1.BOLD,r=Y.textMuted,z0=Q(z()),t=q(z()),J0=f.title(),T=F("settings.feedback.titlePlaceholder"),B0=z(),_=Q(Z()),D0=q(Z()),R0=f.body(),$=F("settings.feedback.descriptionPlaceholder"),x=Z(),e=G()?Y.primary:Y.backgroundElement,I=G()?Y.selectedListItemText:Y.accent,Z0=f1.BOLD;return C!==g.e&&(g.e=X(B,"fg",C,g.e)),y!==g.t&&(g.t=X(B,"attributes",y,g.t)),r!==g.a&&(g.a=X(V,"fg",r,g.a)),z0!==g.o&&(g.o=X(L,"fg",z0,g.o)),t!==g.i&&(g.i=X(L,"attributes",t,g.i)),J0!==g.n&&(g.n=X(O,"value",J0,g.n)),T!==g.s&&(g.s=X(O,"placeholder",T,g.s)),B0!==g.h&&(g.h=X(O,"focused",B0,g.h)),_!==g.r&&(g.r=X(R,"fg",_,g.r)),D0!==g.d&&(g.d=X(R,"attributes",D0,g.d)),R0!==g.l&&(g.l=X(S,"value",R0,g.l)),$!==g.u&&(g.u=X(S,"placeholder",$,g.u)),x!==g.c&&(g.c=X(S,"focused",x,g.c)),e!==g.w&&(g.w=X(a,"backgroundColor",e,g.w)),I!==g.m&&(g.m=X(b,"fg",I,g.m)),Z0!==g.f&&(g.f=X(b,"attributes",Z0,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 UL(f){let{theme:Y}=n0(),J=()=>f.level()==="body"&&f.bodyRow()===0,z=()=>f.level()==="body"&&f.bodyRow()===1,Z=()=>YX(fX(f.hasDaemon),"remote-projects"),G=()=>f.level()==="body"&&f.bodyRow()===Z(),Q=()=>YX(fX(f.hasDaemon),"auto-status"),q=()=>f.level()==="body"&&f.bodyRow()===Q(),H=()=>YX(fX(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"),R=W("box"),S=W("text"),a=W("text"),b=W("box"),g=W("text"),C=W("text"),y=W("box"),r=W("text"),z0=W("text"),t=W("box"),J0=W("text");return D(V,j),D(V,K),D(V,L),D(V,M),D(V,R),X(V,"flexDirection","column"),X(V,"gap",1),U(j,()=>F("settings.dev.reset")),X(K,"wrapMode","word"),U(K,()=>F("settings.dev.resetHint")),D(L,O),X(L,"flexDirection","row"),X(L,"paddingLeft",1),X(L,"paddingRight",1),X(L,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(0),f.confirmReset()}),U(O,()=>F("settings.dev.resetButton")),U(V,k(G0,{get when(){return f.hasDaemon},get children(){var T=W("box"),B0=W("text"),_=W("text"),D0=W("box"),R0=W("text");return D(T,B0),D(T,_),D(T,D0),X(T,"flexDirection","column"),X(T,"gap",0),X(T,"paddingTop",1),U(B0,()=>F("settings.dev.restart")),X(_,"wrapMode","word"),U(_,()=>F("settings.dev.restartHint")),D(D0,R0),X(D0,"flexDirection","row"),X(D0,"paddingLeft",1),X(D0,"paddingRight",1),X(D0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(1),f.confirmRestartDaemon()}),U(R0,()=>F("settings.dev.restartButton")),E(($)=>{var x=Y.text,e=f1.BOLD,I=Y.textMuted,Z0=z()?Y.primary:Y.backgroundElement,u=z()?Y.selectedListItemText:Y.accent,P=f1.BOLD;return x!==$.e&&($.e=X(B0,"fg",x,$.e)),e!==$.t&&($.t=X(B0,"attributes",e,$.t)),I!==$.a&&($.a=X(_,"fg",I,$.a)),Z0!==$.o&&($.o=X(D0,"backgroundColor",Z0,$.o)),u!==$.i&&($.i=X(R0,"fg",u,$.i)),P!==$.n&&($.n=X(R0,"attributes",P,$.n)),$},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),T}}),M),X(M,"wrapMode","word"),U(M,()=>F("settings.dev.doctorHint")),D(R,S),D(R,a),D(R,b),D(R,C),D(R,y),D(R,z0),D(R,t),X(R,"flexDirection","column"),X(R,"gap",0),X(R,"paddingTop",1),U(S,()=>F("settings.dev.experimental")),X(a,"wrapMode","word"),U(a,()=>F("settings.dev.remoteHint")),D(b,g),X(b,"flexDirection","row"),X(b,"paddingLeft",1),X(b,"paddingRight",1),X(b,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(Z()),f.toggleRemoteProjects()}),U(g,(()=>{var T=T0(()=>!!f.remoteProjectsEnabled());return()=>T()?F("settings.dev.remoteOn"):F("settings.dev.remoteOff")})()),X(C,"wrapMode","word"),U(C,()=>F("settings.dev.autoStatusHint")),D(y,r),X(y,"flexDirection","row"),X(y,"paddingLeft",1),X(y,"paddingRight",1),X(y,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(Q()),f.toggleAutoStatus()}),U(r,(()=>{var T=T0(()=>!!f.autoStatusEnabled());return()=>T()?F("settings.dev.autoStatusOn"):F("settings.dev.autoStatusOff")})()),X(z0,"wrapMode","word"),U(z0,()=>F("settings.dev.dispatcherHint")),D(t,J0),X(t,"flexDirection","row"),X(t,"paddingLeft",1),X(t,"paddingRight",1),X(t,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(H()),f.toggleDispatcher()}),U(J0,(()=>{var T=T0(()=>!!f.dispatcherEnabled());return()=>T()?F("settings.dev.dispatcherOn"):F("settings.dev.dispatcherOff")})()),E((T)=>{var B0=Y.text,_=f1.BOLD,D0=Y.textMuted,R0=J()?Y.primary:Y.backgroundElement,$=J()?Y.selectedListItemText:Y.warning,x=f1.BOLD,e=Y.textMuted,I=Y.text,Z0=f1.BOLD,u=Y.textMuted,P=G()?Y.primary:Y.backgroundElement,X0=G()?Y.selectedListItemText:Y.text,V0=f.remoteProjectsEnabled()?f1.BOLD:void 0,q0=Y.textMuted,k0=q()?Y.primary:Y.backgroundElement,w0=q()?Y.selectedListItemText:Y.text,I0=f.autoStatusEnabled()?f1.BOLD:void 0,_0=Y.textMuted,v=B()?Y.primary:Y.backgroundElement,M0=B()?Y.selectedListItemText:Y.text,Y0=f.dispatcherEnabled()?f1.BOLD:void 0;return B0!==T.e&&(T.e=X(j,"fg",B0,T.e)),_!==T.t&&(T.t=X(j,"attributes",_,T.t)),D0!==T.a&&(T.a=X(K,"fg",D0,T.a)),R0!==T.o&&(T.o=X(L,"backgroundColor",R0,T.o)),$!==T.i&&(T.i=X(O,"fg",$,T.i)),x!==T.n&&(T.n=X(O,"attributes",x,T.n)),e!==T.s&&(T.s=X(M,"fg",e,T.s)),I!==T.h&&(T.h=X(S,"fg",I,T.h)),Z0!==T.r&&(T.r=X(S,"attributes",Z0,T.r)),u!==T.d&&(T.d=X(a,"fg",u,T.d)),P!==T.l&&(T.l=X(b,"backgroundColor",P,T.l)),X0!==T.u&&(T.u=X(g,"fg",X0,T.u)),V0!==T.c&&(T.c=X(g,"attributes",V0,T.c)),q0!==T.w&&(T.w=X(C,"fg",q0,T.w)),k0!==T.m&&(T.m=X(y,"backgroundColor",k0,T.m)),w0!==T.f&&(T.f=X(r,"fg",w0,T.f)),I0!==T.y&&(T.y=X(r,"attributes",I0,T.y)),_0!==T.g&&(T.g=X(z0,"fg",_0,T.g)),v!==T.p&&(T.p=X(t,"backgroundColor",v,T.p)),M0!==T.b&&(T.b=X(J0,"fg",M0,T.b)),Y0!==T.T&&(T.T=X(J0,"attributes",Y0,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 DL(){let{theme:f}=n0(),Y=E4(),J=Object.keys(q8).sort();return(()=>{var z=W("box"),Z=W("text"),G=W("text"),Q=W("box"),q=W("text"),H=W("text"),B=W("text"),V=W("text");return D(z,Z),D(z,G),D(z,Q),D(z,B),D(z,V),X(z,"flexDirection","column"),X(z,"gap",1),U(Z,()=>F("settings.keybindings.title")),X(G,"wrapMode","word"),U(G,()=>F("settings.keybindings.hint")),D(Q,q),D(Q,H),X(Q,"flexDirection","column"),X(Q,"gap",0),U(q,()=>F("settings.keybindings.configFile")),X(H,"wrapMode","word"),U(H,()=>Y.path,null),U(H,(()=>{var j=T0(()=>!!Y.exists);return()=>j()?"":F("settings.keybindings.notCreated")})(),null),U(z,k(G0,{get when(){return!Y.exists},get children(){var j=W("box"),K=W("text"),L=W("text"),O=W("text"),M=W("text"),R=W("text"),S=W("text"),a=W("text"),b=W("text"),g=W("text"),C=W("text");return D(j,K),D(j,L),D(j,O),D(j,M),D(j,R),D(j,S),D(j,a),D(j,b),D(j,g),D(j,C),X(j,"flexDirection","column"),X(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(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(b,x0("darwin: # platform overlay (also: linux)")),D(g,x0(" bindings:")),D(C,x0(" palette.open: [cmd+p, ctrl+p]")),E((y)=>{var r=f.text,z0=f1.BOLD,t=f.textMuted,J0=f.textMuted,T=f.textMuted,B0=f.textMuted,_=f.textMuted,D0=f.textMuted,R0=f.textMuted,$=f.textMuted,x=f.textMuted;return r!==y.e&&(y.e=X(K,"fg",r,y.e)),z0!==y.t&&(y.t=X(K,"attributes",z0,y.t)),t!==y.a&&(y.a=X(L,"fg",t,y.a)),J0!==y.o&&(y.o=X(O,"fg",J0,y.o)),T!==y.i&&(y.i=X(M,"fg",T,y.i)),B0!==y.n&&(y.n=X(R,"fg",B0,y.n)),_!==y.s&&(y.s=X(S,"fg",_,y.s)),D0!==y.h&&(y.h=X(a,"fg",D0,y.h)),R0!==y.r&&(y.r=X(b,"fg",R0,y.r)),$!==y.d&&(y.d=X(g,"fg",$,y.d)),x!==y.l&&(y.l=X(C,"fg",x,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),U(z,k(G0,{get when(){return Y.exists},get children(){var j=W("box"),K=W("text");return D(j,K),X(j,"flexDirection","column"),X(j,"gap",0),U(K,()=>F("settings.keybindings.overridesApplied")),U(j,k(G0,{get when(){return Y.applied.length===0},get children(){var L=W("text");return U(L,()=>F("settings.keybindings.none")),E((O)=>X(L,"fg",f.textMuted,O)),L}}),null),U(j,k(X1,{get each(){return Y.applied},children:(L)=>(()=>{var O=W("text");return X(O,"wrapMode","word"),U(O,()=>`${L.id} \u2192 ${L.keys.length>0?L.keys.join(" / "):"(unbound)"} (default: ${L.defaultKeys.join(" / ")})`),E((M)=>X(O,"fg",f.text,M)),O})()}),null),E((L)=>{var O=f.text,M=f1.BOLD;return O!==L.e&&(L.e=X(K,"fg",O,L.e)),M!==L.t&&(L.t=X(K,"attributes",M,L.t)),L},{e:void 0,t:void 0}),j}}),B),U(z,k(G0,{get when(){return Y.warnings.length>0},get children(){var j=W("box"),K=W("text");return D(j,K),X(j,"flexDirection","column"),X(j,"gap",0),U(K,()=>F("settings.keybindings.warnings")),U(j,k(X1,{get each(){return Y.warnings},children:(L)=>(()=>{var O=W("text");return X(O,"wrapMode","word"),U(O,`! ${L}`),E((M)=>X(O,"fg",f.warning,M)),O})()}),null),E((L)=>{var O=f.warning,M=f1.BOLD;return O!==L.e&&(L.e=X(K,"fg",O,L.e)),M!==L.t&&(L.t=X(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.")),X(B,"wrapMode","word"),X(V,"wrapMode","word"),U(V,()=>`Fixed (not rebindable): ${J.join(", ")}.`),E((j)=>{var K=f.text,L=f1.BOLD,O=f.textMuted,M=f.text,R=f1.BOLD,S=f.textMuted,a=f.textMuted,b=f.textMuted;return K!==j.e&&(j.e=X(Z,"fg",K,j.e)),L!==j.t&&(j.t=X(Z,"attributes",L,j.t)),O!==j.a&&(j.a=X(G,"fg",O,j.a)),M!==j.o&&(j.o=X(q,"fg",M,j.o)),R!==j.i&&(j.i=X(q,"attributes",R,j.i)),S!==j.n&&(j.n=X(H,"fg",S,j.n)),a!==j.s&&(j.s=X(B,"fg",a,j.s)),b!==j.h&&(j.h=X(V,"fg",b,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 LL=N(()=>{h();h();h();h();h();h();h();h();B1();ij();w1();e1();xZ();xQ();wZ();Q9()});import{TextAttributes as xS}from"@opentui/core";function wS(f){return f.split(/[-_]+/).filter((Y)=>Y.length>0).map((Y)=>Y.charAt(0).toUpperCase()+Y.slice(1)).join(" ")}function hz(f){let Y=v1(),J=n0(),z=Xf(),{theme:Z}=J,[G,Q]=p("sidebar"),[q,H]=p("general"),[B,V]=p(0),[j,K]=p(0),[L,O]=p(""),[M,R]=p(""),[S,a]=p(""),b=K0(()=>J.all().slice().sort()),[,g]=p(Math.max(0,b().findIndex((m)=>m===J.selected))),C=XL(f.orchestrator),[y,r]=p(null),[z0,t]=p(null),[J0,T]=p(null),B0=!1;Z1(()=>{if(q()!=="accounts"||B0)return;B0=!0,SX().then(r),IX().then(t),TX().then(T)});function _(){return HL(q(),{themeNames:b(),focusAccentSlots:uz,engineList:u0(),hasDaemon:C})}function D0(){return _().length}function R0(){return Az(f.kv.get(fJ,Oz))}function $(m){if(J.selected===m)return;if(!J.set(m))return;f.kv.set("activeTheme",m),f.onVisualPrefsChange?.()}function x(){return bj()}function e(m){if(bj()===m)return;pG(m),f.kv.set(_q,m),f.onVisualPrefsChange?.()}function I(m){if(J.transparentBackground===m)return;J.setTransparentBackground(m),f.kv.set("transparentBackground",m),f.onVisualPrefsChange?.()}function Z0(){I(!J.transparentBackground)}function u(m){if(J.focusAccent===m)return;J.setFocusAccent(m),f.kv.set("focusAccent",m),f.onVisualPrefsChange?.()}function P(m){f.kv.set(fJ,m)}function X0(){return f.kv.get("notifications.toast.enabled",!0)!==!1}function V0(){return f.kv.get("notifications.sound.enabled",!0)!==!1}function q0(){f.kv.set("notifications.toast.enabled",!X0())}function k0(){f.kv.set("notifications.sound.enabled",!V0())}function w0(){return f.kv.get(dQ,!0)!==!1}function I0(){f.kv.set(dQ,!w0())}function _0(){return f.kv.get("experimental.remoteProjects",!1)===!0}function v(){f.kv.set("experimental.remoteProjects",!_0())}function M0(){return f.kv.get(Uz,!1)===!0}function Y0(){f.kv.set(Uz,!M0())}function F0(){return f.kv.get(Dz,!1)===!0}function $0(){f.kv.set(Dz,!F0())}function r0(){let m=f.kv.get("customEngineIds",[]);return Array.isArray(m)?m.filter((A0)=>typeof A0==="string"&&A0.trim().length>0):[]}function u0(){return[...m1,...r0()]}function o0(m){let A0=f.kv.get(BY(m),"");return typeof A0==="string"?A0.trim():""}function n(m){return o0(m)||OG(m).join(" ")}function Q0(m){return Yf(m)&&o0(m).length===0&&!s0(m)}function y0(m){let A0=f.kv.get(jY(m),"");return typeof A0==="string"?A0.trim():""}function s0(m){return y0(m).length>0}function a0(m){return y0(m)||Y8[m]||m}let[p0,e0]=p(PY(k1("lastSelectedVendor"),r0()));function g1(m){return p0()===m}function R1(m){l1("lastSelectedVendor",m),f.kv.set("lastSelectedVendor",m),e0(m)}async function o(m){let A0=await qJ.show(Y,n(m),{dialogTitle:`${a0(m)} launch command`,fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(A0===void 0)return;f.kv.set(BY(m),A0.trim())}async function f0(m){let A0=await qJ.show(Y,a0(m),{dialogTitle:`${a0(m)} display name (blank = default)`,fieldLabel:"name",submitLabel:"save",allowEmpty:!0});if(A0===void 0)return;f.kv.set(jY(m),A0.trim())}function j0(m){if(f.kv.set(BY(m),""),f.kv.set(jY(m),""),!Yf(m))f.kv.set("customEngineIds",r0().filter((A0)=>A0!==m)),K((A0)=>Math.max(0,Math.min(A0,u0().length)))}async function C0(){let m=await qJ.show(Y,"",{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||Yf(A0)||r0().includes(A0))return;let W1=await qJ.show(Y,"",{dialogTitle:`Add engine \xB7 ${A0}`,fieldLabel:"command",submitLabel:"next",placeholder:"e.g. aider --model sonnet"});if(W1===void 0)return;let O1=await qJ.show(Y,A0,{dialogTitle:`Add engine \xB7 ${A0}`,fieldLabel:"name",submitLabel:"add",allowEmpty:!0});if(f.kv.set("customEngineIds",[...r0(),A0]),W1.trim())f.kv.set(BY(A0),W1.trim());let q1=O1?.trim()??"";f.kv.set(jY(A0),q1&&q1!==A0?q1:wS(A0))}function A(){if(q()!=="engines"||G()!=="body")return null;let m=YH(_(),j());return m?.kind==="engine"?m.vendor:null}function P0(){return JZ(f.kv.get(eY,FQ))}function U0(){let m=Fz.indexOf(P0()),A0=Fz[(m+1)%Fz.length];if(A0)f.kv.set(eY,A0)}function E0(){let m=f.kv.get(kJ,"");return typeof m==="string"?m:""}async function W0(){let m=await qJ.show(Y,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(kJ,A0),A0)f.kv.set(eY,"custom")}async function L0(){a("submitting...");try{let m=NZ({title:L(),body:M()});a(`sent: ${m.url}`),O(""),R(""),K(0)}catch(m){a(`error: ${m instanceof Error?m.message:String(m)}`)}}let g0=()=>q()==="feedback"&&G()==="body";function Y1(m){let A0=j()+m;if(A0<0||A0>2){Q("sidebar");return}K(A0)}function J1(){if(G()!=="sidebar"||D0()===0)return;if(Q("body"),K(0),q()==="general")g(0)}function d0(m){if(G()==="sidebar"){let O1=(B()+m+wz.length)%wz.length;V(O1);let q1=wz[O1];if(q1)H(q1.id),K(0);return}let A0=D0();if(A0===0)return;let W1=(j()+m+A0)%A0;if(K(W1),YH(_(),W1)?.kind==="theme")g(W1)}function S1(m){H(m),V(wz.findIndex((A0)=>A0.id===m)),K(0),Q("sidebar")}let N0={theme:(m)=>$(m.name),language:(m)=>e(m.locale),transparent:()=>Z0(),focusAccent:(m)=>u(m.slot),toast:()=>q0(),sound:()=>k0(),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 J9(Y,f.kv,z),devRestartDaemon:()=>void z9(Y,f.orchestrator,z),devRemoteProjects:()=>v(),devAutoStatus:()=>Y0(),devDispatcher:()=>$0()};function h1(){let m=YH(_(),j());if(!m)return;N0[m.kind](m)}return U1(()=>({enabled:(!f.standalone||Y.stack.length===0)&&!g0(),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:J1},{key:"l",cmd:J1},{key:"left",cmd:()=>Q("sidebar")},{key:"h",cmd:()=>Q("sidebar")},{key:"return",cmd:()=>{if(G()==="sidebar"){J1();return}h1()}},{key:"t",cmd:Z0},{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)R1(m)}}]})),U1(()=>({enabled:g0(),bindings:[{key:"tab",cmd:()=>Y1(1)},{key:"shift+tab",cmd:()=>Y1(-1)}]})),U1(()=>({enabled:g0()&&j()===2,bindings:[{key:"return",cmd:()=>void L0()}]})),(()=>{var m=W("box"),A0=W("box"),W1=W("text"),O1=W("text"),q1=W("box"),d=W("box"),s=W("box"),S0=W("text");return D(m,A0),D(m,q1),D(m,s),X(m,"paddingLeft",2),X(m,"paddingRight",2),X(m,"paddingBottom",1),X(m,"gap",1),D(A0,W1),D(A0,O1),X(A0,"flexDirection","row"),X(A0,"justifyContent","space-between"),U(W1,()=>F("settings.title")),X(O1,"onMouseUp",()=>f.onClose()),U(O1,()=>F("settings.esc")),D(q1,d),X(q1,"flexDirection","row"),X(q1,"gap",2),U(q1,k(BL,{level:G,cursor:B,switchSection:S1}),d),X(d,"flexGrow",1),X(d,"flexShrink",1),X(d,"flexDirection","column"),X(d,"gap",1),U(d,k(G0,{get when(){return q()==="general"},get children(){return k(jL,{level:G,bodyRow:j,setLevel:Q,setBodyRow:K,themeNames:b,setThemeCursor:g,selectTheme:$,currentLocale:x,selectLanguage:e,toggleTransparent:Z0,selectFocusAccent:u,toastEnabled:X0,soundEnabled:V0,toggleToast:q0,toggleSound:k0,zenKeepsTasks:w0,toggleZenKeepsTasks:I0,settingsSurface:R0,selectSurface:P,editorKind:P0,cycleEditorKind:U0,editorCustomCommand:E0,editEditorCustom:()=>void W0()})}}),null),U(d,k(G0,{get when(){return q()==="engines"},get children(){return k(WL,{level:G,bodyRow:j,setLevel:Q,setBodyRow:K,get vendors(){return u0()},isCustom:(b0)=>!Yf(b0),displayName:a0,commandText:n,isDefault:Q0,isDefaultEngine:g1,editEngine:(b0)=>void o(b0),renameEngine:(b0)=>void f0(b0),resetEngine:j0,onAddEngine:()=>void C0()})}}),null),U(d,k(G0,{get when(){return q()==="accounts"},get children(){return k(VL,{claudeStatus:y,codexStatus:z0,copilotStatus:J0})}}),null),U(d,k(G0,{get when(){return q()==="keys"},get children(){return k(DL,{})}}),null),U(d,k(G0,{get when(){return q()==="feedback"},get children(){return k(KL,{level:G,bodyRow:j,setLevel:Q,setBodyRow:K,title:L,setTitle:(b0)=>{O(b0),a("")},body:M,setBody:(b0)=>{R(b0),a("")},status:S,onTitleSubmit:()=>K(1),onBodySubmit:()=>void L0(),submit:()=>void L0()})}}),null),U(d,k(G0,{get when(){return q()==="dev"},get children(){return k(UL,{level:G,bodyRow:j,setLevel:Q,setBodyRow:K,hasDaemon:C,confirmReset:()=>void J9(Y,f.kv,z),confirmRestartDaemon:()=>void z9(Y,f.orchestrator,z),remoteProjectsEnabled:_0,toggleRemoteProjects:v,autoStatusEnabled:M0,toggleAutoStatus:Y0,dispatcherEnabled:F0,toggleDispatcher:$0})}}),null),D(s,S0),X(s,"paddingTop",0),U(S0,(()=>{var b0=T0(()=>!!g0());return()=>b0()?F("settings.nav.feedback"):F("settings.nav.default")})()),E((b0)=>{var Hf=xS.BOLD,Uf=Z.text,ff=Z.textMuted,vf=Z.textMuted;return Hf!==b0.e&&(b0.e=X(W1,"attributes",Hf,b0.e)),Uf!==b0.t&&(b0.t=X(W1,"fg",Uf,b0.t)),ff!==b0.a&&(b0.a=X(O1,"fg",ff,b0.a)),vf!==b0.o&&(b0.o=X(S0,"fg",vf,b0.o)),b0},{e:void 0,t:void 0,a:void 0,o:void 0}),m})()}var q9=N(()=>{h();h();h();h();h();h();h();h();B1();Jz();Ef();Oq();DG();DQ();A1();V8();$1();w1();e1();OQ();Sf();$j();Pf();f9();qL();Q9();LL();hz.show=(f,Y,J)=>{let z=!1;return new Promise((Z)=>{f.replace(()=>k(hz,{kv:Y,orchestrator:J,onVisualPrefsChange:()=>{z=!0},onClose:()=>Z({visualPrefsChanged:z})}),()=>Z({visualPrefsChanged:z}))})}});import{TextAttributes as hS}from"@opentui/core";function FL(){let{theme:f}=n0(),Y=uY(),J=$q(),z=()=>J.toasts().slice(-ML),Z=()=>Math.max(0,Y().width-PS-vS),G=()=>Math.max(0,Y().height-mS-ML-1);return k(G0,{get when(){return J.toasts().length>0},get children(){var Q=W("box");return X(Q,"position","absolute"),X(Q,"zIndex",2500),X(Q,"width",40),X(Q,"flexDirection","column"),X(Q,"gap",0),U(Q,k(X1,{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),X(j,"flexDirection","row"),X(j,"gap",1),X(j,"paddingLeft",1),X(j,"paddingRight",1),X(j,"onMouseUp",()=>J.dismiss(q.id)),X(K,"wrapMode","none"),U(K,V),X(L,"wrapMode","none"),U(L,()=>q.title),E((O)=>{var M=H(),R=B(),S=hS.BOLD,a=B();return M!==O.e&&(O.e=X(j,"backgroundColor",M,O.e)),R!==O.t&&(O.t=X(K,"fg",R,O.t)),S!==O.a&&(O.a=X(K,"attributes",S,O.a)),a!==O.o&&(O.o=X(L,"fg",a,O.o)),O},{e:void 0,t:void 0,a:void 0,o:void 0}),j})()}})),E((q)=>{var H=Z(),B=G();return H!==q.e&&(q.e=X(Q,"left",H,q.e)),B!==q.t&&(q.t=X(Q,"top",B,q.t)),q},{e:void 0,t:void 0}),Q}})}var ML=4,PS=40,vS=2,mS=2;var OL=N(()=>{h();h();h();h();h();h();h();B1();pq();w1()});import{TextAttributes as cS}from"@opentui/core";function nS(f,Y){let J=f?`v${f}`:F("update.skew.olderBuild");return F("update.skew.hint",{daemon:J,clientVersion:Y})}function AL(f){let{theme:Y}=n0(),J=()=>Math.max(4,f.width()-2);return k(G0,{get when(){return f.stale()},get children(){var z=W("box"),Z=W("text"),G=W("box"),Q=W("text"),q=W("box"),H=W("text");return D(z,Z),D(z,G),D(z,q),X(z,"flexDirection","column"),X(z,"flexShrink",0),X(z,"paddingLeft",1),X(z,"paddingRight",1),X(z,"paddingBottom",1),X(Z,"wrapMode","none"),U(Z,()=>"\u2594".repeat(J())),D(G,Q),X(G,"flexDirection","row"),X(G,"gap",1),X(Q,"wrapMode","none"),U(Q,()=>F("update.skew.title")),D(q,H),X(q,"flexDirection","row"),X(q,"gap",1),X(H,"wrapMode","word"),U(H,()=>nS(f.daemonVersion(),f.clientVersion)),E((B)=>{var{warning:V,warning:j}=Y,K=cS.BOLD,L=Y.text;return V!==B.e&&(B.e=X(Z,"fg",V,B.e)),j!==B.t&&(B.t=X(Q,"fg",j,B.t)),K!==B.a&&(B.a=X(Q,"attributes",K,B.a)),L!==B.o&&(B.o=X(H,"fg",L,B.o)),B},{e:void 0,t:void 0,a:void 0,o:void 0}),z}})}var RL=N(()=>{h();h();h();h();h();h();B1();w1();e1()});function gL(f,Y){return f.find((J)=>J.id!==Y&&!J.archived)}async function dS(f){let Y=f.tasks.find((G)=>G.id===f.taskId);if(!Y)return null;let J=!Y.archived;try{await f.orch.setArchived(f.taskId,J)}catch(G){return f.logger.error(`${f.logPrefix} archive failed:`,G),null}if(!J)return{archived:J};let z=L1(f.taskId),Z=gL(f.tasks,f.taskId);if(await yY(z,Z?L1(Z.id):void 0).catch((G)=>{f.logger.error(`${f.logPrefix} switch-client failed:`,G)}),f.updateActiveTask)await f.orch.setActiveTask(Z?.id??null).catch(()=>{});return await af(z).catch((G)=>{f.logger.error(`${f.logPrefix} kill tmux session failed:`,G)}),{archived:J,nextTask:Z}}async function iS(f){let Y=gL(f.tasks,f.taskId),J=L1(f.taskId);if(f.switchBeforeKill)await yY(J,Y?L1(Y.id):void 0).catch((z)=>{f.logger.error(`${f.logPrefix} switch-client failed:`,z)});if(f.updateActiveTask)await f.orch?.setActiveTask(Y?.id??null).catch(()=>{});return await af(J).catch((z)=>{f.logger.error(`${f.logPrefix} kill tmux session failed:`,z)}),{nextTask:Y}}async function CL(f,Y){if(!f.orch)return;let J=f.tasks().find((Z)=>Z.id===Y);if(!J)return;if(!J.archived){if(!await f.confirm({title:`Archive "${J.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 dS({orch:f.orch,tasks:f.tasks(),taskId:Y,logger:f.logger,logPrefix:f.logPrefix,updateActiveTask:f.updateActiveTask}))return;await f.reload?.()}async function NL(f,Y){if(!f.orch)return;let J=f.tasks().find((Q)=>Q.id===Y);if(!J)return;if(J.kind==="main"){if(!await f.confirm({title:`Remove project "${J.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(J.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 "${J.title}"?`,body:"Removes the task entry and its worktree. The tmux session (if any) is killed.",cancelLabel:"cancel",confirmLabel:"delete"}))return;let Z=!1;try{await f.orch.deleteTask(Y),Z=!0}catch(Q){if((Q instanceof Error?Q.message:String(Q)).includes(MB)){if(await f.confirm({title:`"${J.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(Y,{force:!0}),Z=!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(!Z)return;let{nextTask:G}=await iS({orch:f.orch,tasks:f.tasks(),taskId:Y,logger:f.logger,logPrefix:f.logPrefix,switchBeforeKill:f.switchBeforeKill,updateActiveTask:f.updateActiveTask});await f.reload?.(),f.onTaskDeleted?.(Y,G)}async function bL(f,Y){let J=f.tasks().find((Z)=>Z.id===Y);if(!J)return;let z=await f.promptText(J.title);if(!z||!f.orch)return;try{await f.orch.setTitle(Y,z)}catch(Z){f.logger.error(`${f.logPrefix} task.rename failed:`,Z),f.notifyError?.(`Couldn't rename task: ${Z instanceof Error?Z.message:String(Z)}`);return}await f.reload?.()}async function kL(f,Y){let J=f.tasks().find((Z)=>Z.id===Y);if(!J||J.kind==="main")return;let z=await f.promptText(J.branch,{dialogTitle:"Rename branch",fieldLabel:"branch"});if(!z||!f.orch)return;try{await f.orch.setBranch(Y,z)}catch(Z){f.logger.error(`${f.logPrefix} task.setBranch failed:`,Z),f.notifyError?.(`Couldn't rename branch: ${Z instanceof Error?Z.message:String(Z)}`);return}await f.reload?.()}async function yL(f,Y){let J=f.tasks().find((G)=>G.id===Y);if(!J||!f.orch)return;let z=await $Y(),Z=WJ(z,J.vendor??Zf);try{await f.orch.setVendor(Y,Z)}catch(G){f.logger.error(`${f.logPrefix} task.setVendor failed:`,G),f.notifyError?.(`Couldn't switch engine: ${G instanceof Error?G.message:String(G)}`);return}f.notifyInfo?.(`Engine \u2192 ${Lz(Z)} (applies on reopen)`),await f.reload?.()}async function SL(f){let Y=Of(),J=f.cursorRepo()??Y[0]??process.cwd();if(f.openCreateSurface&&await f.openCreateSurface(J))return;let z=f.lastVendor()??Zf,Z=await $Y();if(Z.length===0)f.notifyInfo?.("No engine CLI detected \u2014 install claude or codex, or add one in Settings \u2192 Engines");let G=f.orch,Q=await f.promptNewTask(J,Y,{defaultVendor:z,availableVendors:Z,discoverAdoptable:G?(H)=>G.discoverAdoptableWorktrees(H):void 0});if(!Q)return;if(f.rememberVendor(Q.vendor),nY(Q.repo),f.onRepoSaved?.(),!G){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 G.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 G.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 IL=N(()=>{Jz();Ef();AB();A1();e1();RY();$1();Gf()});import{spawn as lS}from"child_process";import{existsSync as aS}from"fs";import{basename as $S,delimiter as pS,isAbsolute as _S,join as rS}from"path";function H9(f,Y,J){if(_S(f))return J(f);let z=Y.PATH??"";for(let Z of z.split(pS)){if(!Z)continue;if(J(rS(Z,f)))return!0}return!1}function tS(f){let Y=$S(f);if(Y==="code")return"VS Code";if(Y==="cursor")return"Cursor";if(Y==="windsurf")return"Windsurf";if(Y==="zed")return"Zed";return Y||f}function TL(f={}){let Y=f.env??process.env,J=f.platform??process.platform,z=f.exists??aS,Z=Y.KOBE_OPEN_EDITOR?.trim();if(Z)return{id:"env",label:tS(Z),command:Z,args:[]};for(let G of oS)if(H9(G.command,Y,z))return{id:G.id,label:G.label,command:G.command,args:[]};if(J==="darwin"&&H9("open",Y,z)){for(let G of sS)if(G.paths.some((Q)=>z(Q)))return{id:G.id,label:G.label,command:"open",args:["-a",G.appName]};return{id:"mac-open",label:"Finder",command:"open",args:[]}}if(J==="linux"&&H9("xdg-open",Y,z))return{id:"xdg-open",label:"Open",command:"xdg-open",args:[]};return null}function eS(f,Y){return[Y.command,[...Y.args,f]]}function uL(f,Y,J={}){if(!f)return!1;let z=J.spawn??lS,[Z,G]=eS(f,Y);try{let Q=z(Z,G,{detached:!0,stdio:"ignore"});if(Q.pid===void 0)return!1;return Q.unref(),!0}catch{return!1}}var oS,sS;var EL=N(()=>{oS=[{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"}],sS=[{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 JH(f){let Y=new Map;function J(z){let Z=Y.get(z);if(!Z){let[G,Q]=p(f.initial,f.equals?{equals:f.equals}:void 0);Z={read:G,write:(q)=>Q(()=>q),inFlight:!1,nextAllowedAt:0},Y.set(z,Z)}return Z}return{read(z){if(!z)return f.initial;return J(z).read()},poll(z){if(!z)return;let Z=J(z);JQ(Z,f,(G)=>f.run(z,G),(G)=>Z.write(G))},reset(){Y.clear()}}}var JX=N(()=>{B1();QG();QG()});import{stat as fI}from"fs/promises";import{join as YI}from"path";async function GI(f){try{let Y=await fI(YI(f,".git","HEAD"));return`${Y.mtimeMs}:${Y.size}`}catch{return null}}async function XI(f,Y,J=sY){let z=await GI(f);if(z!==null){let q=xL.get(f);if(q&&q.fingerprint===z)return q.value}let Z="",G=await J("git",["symbolic-ref","--short","HEAD"],{cwd:f,env:xf(),signal:Y}),Q=G.status===0?G.stdout.trim():"";if(Q&&Q!=="HEAD")Z=Q;else if((await J("git",["rev-parse","--verify","HEAD"],{cwd:f,env:xf(),signal:Y})).status===0)Z="(detached)";if(z!==null)xL.set(f,{fingerprint:z,value:Z});return Z}function hL(f){return wL.read(f)}function PL(f){wL.poll(f)}var JI=2000,zI=30000,ZI=1500,xL,wL;var vL=N(()=>{yJ();JX();xL=new Map;wL=JH({initial:"",timeoutMs:JI,slowRetryMs:zI,minIntervalMs:ZI,run:(f,Y)=>XI(f,Y)})});function B9(f){let Y=f.scheduleTimeout??((H,B)=>{let V=setTimeout(H,B);return()=>clearTimeout(V)}),J=!1,z=null,Z=()=>{J=!0,z?.(),z=Y(()=>{J=!1,z=null},700)},G=()=>{J=!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(){G(),Q(1)},moveUp(){G(),Q(-1)},selectCurrent(){G();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(J)G(),q(0);else Z()},pressShiftG(){G(),q(f.getFlatIds().length-1)},isChordArmed(){return J},disarmChord(){G()}}}function mL(f){let Y=B9({getCursor:()=>f.cursorIndex(),setCursor:(G)=>f.setCursorIndex(G),getFlatIds:()=>f.flatTaskIds(),onSelect:(G)=>f.onSelect(G)}),J=()=>{let G=f.flatTaskIds(),Q=f.cursorIndex();if(Q<0||Q>=G.length)return;return G[Q]},z=()=>f.searchMode?.()??!1,Z=()=>f.moveMode?.()??!1;U1(()=>({enabled:f.focused()&&!z(),bindings:iJ({"sidebar.nav":(G,Q)=>{let q=(Q??0)%2===0;if(Z()){let H=J();if(H===void 0)return;f.onMoveRequest?.(H,q?1:-1);return}if(q)Y.moveDown();else Y.moveUp()},"sidebar.select":()=>{if(Z()){f.onMoveModeExit?.();return}Y.selectCurrent()},"sidebar.goto":(G)=>{if(Z())return;if(G.shift)Y.pressShiftG();else Y.pressG()},"sidebar.delete":()=>{if(Z())return;let G=J();if(G!==void 0)f.onDeleteRequest?.(G)},"sidebar.archive":()=>{if(Z())return;let G=J();if(G!==void 0)f.onArchiveRequest?.(G)},"sidebar.localMerge":(G)=>{if(!G.shift)return;let Q=J();if(Q!==void 0)f.onLocalMergeRequest?.(Q)},"sidebar.rename":()=>{if(Z())return;let G=J();if(G!==void 0)f.onRenameRequest?.(G)},"sidebar.pin":(G)=>{if(Z())return;if(!G.shift)return;let Q=J();if(Q!==void 0)f.onPinRequest?.(Q)},"sidebar.search.enter":()=>{if(Z())return;f.onSearchEnter?.()},"sidebar.sort":()=>{if(Z())return;f.onSortModeToggle?.()},"sidebar.projectFilter":()=>{if(Z())return;f.onProjectFilterToggle?.()}})})),U1(()=>({enabled:f.focused()&&Z(),bindings:[{key:"escape",cmd:()=>f.onMoveModeExit?.()}]})),U1(()=>({enabled:f.focused(),bindings:iJ({"sidebar.view":(G,Q)=>{f.onViewSwitch?.((Q??0)%2===0?-1:1)}})})),U1(()=>({enabled:f.focused()&&z(),bindings:iJ({"sidebar.search.nav":(G,Q)=>{if((Q??0)%2===0)Y.moveDown();else Y.moveUp()},"sidebar.search.submit":()=>{Y.selectCurrent(),f.onSearchExit?.(!0)},"sidebar.search.cancel":()=>f.onSearchExit?.(!1)})}))}var cL=N(()=>{hZ();Sf()});function j9(f,Y){if(Y<=0)return"";if(f.length<=Y)return f;return`${f.slice(0,Math.max(0,Y-1))}\u2026`}function W9(f,Y){return` ${j9(f,Math.max(0,Y))}`}function qI(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 HI(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 iL(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 BI(){return F("tasks.subtitle.noTracking")}function jI(){return F("tasks.subtitle.materializing")}function WI(f){if(f.kind==="main")return!1;return f.vendor!==void 0&&!Yf(f.vendor)}function V9(f){let{task:Y}=f,J=Y.kind==="main",z=J?f.mainBranch??"":Y.branch,Z=QI[Y.status],G=f.activity?.state,Q=G!==void 0,q=VI(G),H=HI(G),B=WI(Y)&&!Q,V=f.job!==void 0,j=V||!B&&(G==="running"||f.live||!Q&&!J&&Y.status==="in_progress"),K=cZ[f.spinnerFrame]??cZ[0],L=V?"primary":B?"textMuted":H?.tone??(j?"primary":q?.tone??Z.tone),O=B?BI():qI(Y.status),M=V?f.truncateBranch(jI(),f.subtitleBudget):H?f.truncateBranch(H.text,f.subtitleBudget):z.length>0?f.truncateBranch(z,f.subtitleBudget):f.truncateBranch(O,f.subtitleBudget),R=B?nL:q?.glyph??Z.glyph,S=B?nL:q?.glyph??"\u2605";return{isMain:J,titleText:J?MY(Y.repo):Y.title,subtitleText:M,loading:j,stateGlyph:j?K:R,projectGlyph:j?K:S,tone:L}}function K9(f,Y){if(!f.loading)return f;let J=cZ[Y()%cZ.length]??"\u280B";if(J===f.stateGlyph&&J===f.projectGlyph)return f;return{...f,stateGlyph:J,projectGlyph:J}}function VI(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 QI,cZ,dL=100,nL="\xB7";var lL=N(()=>{e1();$1();tq();QI={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"}};cZ=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function U9(f){return aL.read(f)}function D9(f){aL.poll(f)}var KI=4000,UI=60000,DI=1500,LI,aL;var $L=N(()=>{yJ();JX();FZ();JX();LI={added:0,deleted:0},aL=JH({initial:LI,equals:TY,timeoutMs:KI,slowRetryMs:UI,minIntervalMs:DI,run:async(f,Y)=>{let J=await sY("git",["status","--porcelain=v1"],{cwd:f,env:xf(),signal:Y});if(J.status!==0)throw Error("git status failed");return MZ(J.stdout)}})});import{TextAttributes as I1}from"@opentui/core";function MI(f){switch(f){case"active":return F("tasks.view.workspace");case"archived":return F("tasks.view.archives")}}function _L(f,Y=OI){if(f.length<=Y)return f;return`${f.slice(0,Math.max(0,Y-1))}\u2026`}function AI(f){let Y=0;for(let J of f)Y+=(J.codePointAt(0)??0)>=4352?2:1;return Y}function RI(f,Y){if(Y<=0||f.length<=Y)return f;return`\u2026${f.slice(f.length-Math.max(0,Y-1))}`}function rL(f){let{theme:Y}=n0(),J=()=>f.focused?f.focused():!0,[z,Z]=p("active"),[G,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)}Z1(()=>{if(!G())return;let n=Xf();if(!n)return;let Q0=(y0)=>{if(y0.defaultPrevented)return;if(!J())return;if(y0.ctrl||y0.meta||y0.option)return;if(y0.name==="backspace"){H((p0)=>p0.slice(0,-1));return}let s0=y0.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),b1(()=>n.keyInput.off("keypress",Q0))});let[M,R]=p(0),S=setInterval(()=>R((n)=>n+1),FI);b1(()=>clearInterval(S));let[a,b]=p(0),g=setInterval(()=>b((n)=>(n+1)%cZ.length),dL);b1(()=>clearInterval(g));let C=()=>f.sortMode?.()??"default",y=K0(()=>s4(f.tasks(),z())),r=K0(()=>{let n=j();if(!n)return null;let Q0=sf(n);return y().find((y0)=>sf(y0.repo)===Q0)??null}),z0=K0(()=>r()?.repo??null),t=K0(()=>r()?.label??"all"),J0=K0(()=>{let n=r();return n?n.count:y().reduce((Q0,y0)=>Q0+y0.count,0)}),T=K0(()=>{let n=J0();return`${n} ${n===1?F("tasks.project.taskSingular"):F("tasks.project.taskPlural")}`}),B0=K0((n)=>fL(n,oj(f.tasks(),z(),G()?q():"",C(),z0())),[]),_=K0(()=>sj(B0())),D0=K0(()=>e4(B0())),R0=K0(()=>D0().projectRows),$=K0(()=>D0().taskRows),x=K0(()=>{let n=new Map;for(let Q0 of B0())n.set(Q0.flatIndex,Q0);return n}),e=K0(()=>sj(oj(f.tasks(),z(),"",C(),z0())).length),I=K0(()=>$().length>0);Z1(()=>{let n=j(),Q0=y();if(n!==null&&Q0.length>0&&(Q0.length<=1||r()===null))K(null)});function Z0(){let n=y();if(n.length<=1){K(null);return}let Q0=z0(),y0=Q0?sf(Q0):null,s0=y0===null?-1:n.findIndex((p0)=>sf(p0.repo)===y0),a0=n[s0+1];K(a0?.repo??null)}let u=()=>f.width?f.width():pL,P=K0(()=>Math.max(6,u()-9)),X0=K0(()=>Math.max(6,u()-16)),V0=uY(),q0=K0(()=>{let n=Math.max(2,Math.min(10,Math.floor(V0().height*0.25))),Q0=Math.max(2,R0().length*2);return Math.min(n,Q0)}),[k0,w0]=p(null),[I0,_0]=p(-1),v,M0,Y0,F0=new Map;Z1(()=>{let n=f.width?f.width():pL,Q0=Y0;if(!Q0)return;Q0.width=n,Q0.flexShrink=1,Q0.minHeight=0}),Z1(Nf([I0,B0],([n])=>{let Q0=x().get(n);if(!Q0)return;let y0=Q0.task.kind==="main"?v:M0;if(!y0)return;if(y0.viewport.height<=0)return;let s0=F0.get(n);if(!s0)return;y0.scrollChildIntoView(s0.id)})),Z1(Nf(()=>[f.selectedId(),_()],([n,Q0])=>{let y0=d1(I0);if(n===null){if(y0===-1&&Q0.length>0)_0(0);else if(y0>=Q0.length)_0(Math.max(0,Q0.length-1));else if(Q0.length===0)_0(-1);return}let s0=Q0.indexOf(n);if(s0>=0){if(s0!==y0)_0(s0)}else if(Q0.length===0)_0(-1);else if(y0<0||y0>=Q0.length)_0(Q0.length-1)})),Z1(Nf(z,()=>{let n=_();_0(n.length>0?0:-1)},{defer:!0})),Z1(Nf(z0,(n)=>_0(t4(B0(),n)),{defer:!0})),Z1(Nf([G,q],()=>{if(!G())return;let n=_();_0(n.length>0?0:-1)}));function $0(n){let Q0=z(),y0=zX.findIndex((p0)=>p0.view===Q0);if(y0<0)return;let s0=(y0+n+zX.length)%zX.length,a0=zX[s0];if(a0)Z(a0.view)}mL({focused:J,cursorIndex:I0,setCursorIndex:_0,flatTaskIds:_,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:()=>Z0(),searchMode:G,onSearchEnter:()=>L(),onSearchExit:(n)=>O(n)});let r0=(n)=>(()=>{var Q0=W("box"),y0=W("box"),s0=W("text"),a0=W("text");return D(Q0,y0),X(Q0,"flexDirection","column"),X(Q0,"flexShrink",0),U(Q0,k(G0,{get when(){return n.topPad},get children(){var p0=W("box"),e0=W("text");return D(p0,e0),X(p0,"flexShrink",0),D(e0,x0(" ")),X(e0,"wrapMode","none"),p0}}),y0),D(y0,s0),D(y0,a0),X(y0,"flexDirection","row"),X(y0,"flexShrink",0),X(y0,"gap",1),X(y0,"paddingLeft",1),X(y0,"paddingRight",1),X(s0,"wrapMode","none"),U(s0,()=>n.label),X(a0,"wrapMode","none"),U(a0,()=>"\u2500".repeat(Math.max(2,u()-10-n.label.length-(n.suffix?.length??0)))),U(y0,k(G0,{get when(){return n.suffix},get children(){var p0=W("text");return X(p0,"wrapMode","none"),U(p0,()=>n.suffix),E((e0)=>{var g1=Y.info,R1=I1.BOLD;return g1!==e0.e&&(e0.e=X(p0,"fg",g1,e0.e)),R1!==e0.t&&(e0.t=X(p0,"attributes",R1,e0.t)),e0},{e:void 0,t:void 0}),p0}}),null),E((p0)=>{var e0=Y.textMuted,g1=I1.BOLD,R1=Y.border;return e0!==p0.e&&(p0.e=X(s0,"fg",e0,p0.e)),g1!==p0.t&&(p0.t=X(s0,"attributes",g1,p0.t)),R1!==p0.a&&(p0.a=X(a0,"fg",R1,p0.a)),p0},{e:void 0,t:void 0,a:void 0}),Q0})(),u0=(n)=>{switch(n){case"success":return Y.success;case"warning":return Y.warning;case"primary":return Y.primary;case"error":return Y.error;default:return Y.textMuted}},o0=(n)=>{let Q0=n.row.task,y0=n.row.flatIndex,s0=()=>y0===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)D9(Q0.worktreePath);return U9(Q0.worktreePath)},void 0,{equals:TY}),g1=K0(()=>{return M(),PL(Q0.repo),hL(Q0.repo)}),R1=K0(()=>V9({task:Q0,activity:f.engineState?.().get(Q0.id),job:f.taskJobs?.().get(Q0.id),live:p0(),spinnerFrame:0,subtitleBudget:X0(),truncateBranch:_L,mainBranch:g1()})),o=K0(()=>K9(R1(),a)),f0=()=>!o().loading?Y.primary:u0(o().tone),j0=()=>s0()?Y.focusAccent:a0()?Y.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"),g0=W("text"),Y1=W("box"),J1=W("text"),d0=W("box"),S1=W("text");return D(A,P0),X(A,"flexDirection","column"),X(A,"gap",0),X(A,"paddingBottom",0),D(P0,U0),D(P0,Y1),mJ((N0)=>{F0.set(y0,N0),b1(()=>{if(F0.get(y0)===N0)F0.delete(y0)})},P0),X(P0,"flexDirection","column"),X(P0,"gap",0),X(P0,"onMouseUp",()=>{if(f.onSelect(Q0.id),f.activateOnClick)f.onActivate?.(Q0.id)}),X(P0,"onMouseOver",(N0)=>w0({task:Q0,x:N0.x,y:N0.y})),X(P0,"onMouseOut",()=>w0((N0)=>N0?.task.id===Q0.id?null:N0)),D(U0,E0),D(U0,W0),X(U0,"flexDirection","row"),X(U0,"gap",0),X(E0,"wrapMode","none"),U(E0,C0),D(W0,L0),D(W0,g0),X(W0,"flexDirection","row"),X(W0,"flexGrow",1),X(W0,"paddingRight",1),X(W0,"gap",0),X(L0,"wrapMode","none"),U(L0,()=>o().projectGlyph),X(g0,"wrapMode","none"),X(g0,"flexGrow",1),U(g0,()=>W9(o().titleText,P())),D(Y1,J1),D(Y1,d0),X(Y1,"flexDirection","row"),X(Y1,"gap",0),X(J1,"wrapMode","none"),U(J1,C0),D(d0,S1),X(d0,"flexDirection","row"),X(d0,"flexGrow",1),X(d0,"paddingLeft",2),X(d0,"paddingRight",1),X(d0,"gap",1),X(S1,"wrapMode","none"),X(S1,"flexGrow",1),U(S1,()=>o().subtitleText),U(d0,k(G0,{get when(){return e0().added>0},get children(){var N0=W("text"),h1=x0("+");return D(N0,h1),X(N0,"wrapMode","none"),U(N0,()=>e0().added,null),E((m)=>X(N0,"fg",Y.success,m)),N0}}),null),U(d0,k(G0,{get when(){return e0().deleted>0},get children(){var N0=W("text"),h1=x0("\u2212");return D(N0,h1),X(N0,"wrapMode","none"),U(N0,()=>e0().deleted,null),E((m)=>X(N0,"fg",Y.error,m)),N0}}),null),E((N0)=>{var h1=s0()?Y.backgroundElement:void 0,m=j0(),A0=f0(),W1=I1.BOLD,O1=Y.text,q1=I1.BOLD,d=j0(),s=Y.textMuted,S0=I1.DIM;return h1!==N0.e&&(N0.e=X(P0,"backgroundColor",h1,N0.e)),m!==N0.t&&(N0.t=X(E0,"fg",m,N0.t)),A0!==N0.a&&(N0.a=X(L0,"fg",A0,N0.a)),W1!==N0.o&&(N0.o=X(L0,"attributes",W1,N0.o)),O1!==N0.i&&(N0.i=X(g0,"fg",O1,N0.i)),q1!==N0.n&&(N0.n=X(g0,"attributes",q1,N0.n)),d!==N0.s&&(N0.s=X(J1,"fg",d,N0.s)),s!==N0.h&&(N0.h=X(S1,"fg",s,N0.h)),S0!==N0.r&&(N0.r=X(S1,"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"),y0=W("box"),s0=W("text"),a0=W("box"),p0=W("box"),e0=W("text"),g1=W("scrollbox"),R1=W("box");return D(n,Q0),D(n,a0),D(n,g1),mJ((o)=>{Y0=o},n),X(n,"flexGrow",1),X(n,"minHeight",0),X(n,"flexDirection","column"),X(n,"paddingTop",1),X(n,"paddingBottom",1),X(n,"paddingLeft",0),X(n,"paddingRight",0),D(Q0,y0),X(Q0,"flexDirection","row"),X(Q0,"justifyContent","space-between"),X(Q0,"gap",1),X(Q0,"paddingBottom",1),X(Q0,"paddingLeft",1),X(Q0,"paddingRight",1),D(y0,s0),X(y0,"flexDirection","row"),X(y0,"gap",1),D(s0,x0("KOBE")),X(s0,"wrapMode","none"),U(y0,k(G0,{get when(){return f.headerStatus?.()},children:(o)=>(()=>{var f0=W("text");return X(f0,"wrapMode","none"),X(f0,"onMouseUp",()=>f.onHeaderStatusClick?.()),U(f0,()=>o().label),E((j0)=>{var C0=o().emphasize?Y.warning:Y.textMuted,A=o().emphasize?I1.BOLD:I1.DIM;return C0!==j0.e&&(j0.e=X(f0,"fg",C0,j0.e)),A!==j0.t&&(j0.t=X(f0,"attributes",A,j0.t)),j0},{e:void 0,t:void 0}),f0})()}),null),U(Q0,k(G0,{get when(){return f.onAddTask},get children(){var o=W("text");return D(o,x0("[+]")),X(o,"wrapMode","none"),X(o,"onMouseUp",()=>f.onAddTask?.()),E((f0)=>{var j0=Y.primary,C0=I1.BOLD;return j0!==f0.e&&(f0.e=X(o,"fg",j0,f0.e)),C0!==f0.t&&(f0.t=X(o,"attributes",C0,f0.t)),f0},{e:void 0,t:void 0}),o}}),null),U(n,k(G0,{get when(){return G()},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),X(o,"flexDirection","row"),X(o,"gap",0),X(o,"paddingBottom",1),X(o,"paddingLeft",1),D(f0,x0("/")),X(f0,"wrapMode","none"),X(j0,"wrapMode","none"),U(j0,q),D(C0,x0("\u2588")),X(C0,"wrapMode","none"),U(o,k(G0,{get when(){return q().length===0},get children(){var A=W("text"),P0=x0(" ");return D(A,P0),X(A,"wrapMode","none"),U(A,()=>F("tasks.search.placeholder"),null),E((U0)=>X(A,"fg",Y.textMuted,U0)),A}}),null),U(o,k(G0,{get when(){return q().length>0},get children(){var A=W("text"),P0=x0(" "),U0=x0("/");return D(A,P0),D(A,U0),X(A,"wrapMode","none"),U(A,()=>_().length,U0),U(A,e,null),E((E0)=>X(A,"fg",Y.textMuted,E0)),A}}),null),E((A)=>{var{info:P0,text:U0,info:E0}=Y,W0=I1.BLINK;return P0!==A.e&&(A.e=X(f0,"fg",P0,A.e)),U0!==A.t&&(A.t=X(j0,"fg",U0,A.t)),E0!==A.a&&(A.a=X(C0,"fg",E0,A.a)),W0!==A.o&&(A.o=X(C0,"attributes",W0,A.o)),A},{e:void 0,t:void 0,a:void 0,o:void 0}),o}}),a0),D(a0,p0),X(a0,"flexDirection","row"),X(a0,"justifyContent","space-between"),X(a0,"gap",1),X(a0,"paddingBottom",1),X(a0,"paddingLeft",1),X(a0,"paddingRight",1),D(p0,e0),X(p0,"flexDirection","row"),X(p0,"gap",2),U(p0,k(X1,{each:zX,children:(o)=>{let f0=()=>z()===o.view;return(()=>{var j0=W("text");return X(j0,"wrapMode","none"),X(j0,"onMouseUp",()=>Z(o.view)),U(j0,()=>MI(o.view)),E((C0)=>{var A=f0()?Y.primary:Y.textMuted,P0=f0()?I1.BOLD:void 0;return A!==C0.e&&(C0.e=X(j0,"fg",A,C0.e)),P0!==C0.t&&(C0.t=X(j0,"attributes",P0,C0.t)),C0},{e:void 0,t:void 0}),j0})()}}),e0),D(e0,x0("[/]")),X(e0,"wrapMode","none"),U(a0,k(G0,{get when(){return f.sortMode},get children(){var o=W("text");return X(o,"wrapMode","none"),X(o,"onMouseUp",()=>f.onSortModeToggle?.()),U(o,()=>F("tasks.sort")),E((f0)=>{var j0=Y.textMuted,C0=I1.DIM;return j0!==f0.e&&(f0.e=X(o,"fg",j0,f0.e)),C0!==f0.t&&(f0.t=X(o,"attributes",C0,f0.t)),f0},{e:void 0,t:void 0}),o}}),null),U(n,k(G0,{get when(){return R0().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),X(o,"flexDirection","column"),X(o,"flexShrink",0),D(f0,j0),D(f0,C0),X(f0,"flexDirection","row"),X(f0,"flexShrink",0),X(f0,"gap",1),X(f0,"paddingLeft",1),X(f0,"paddingRight",1),X(f0,"onMouseUp",()=>Z0()),X(j0,"wrapMode","none"),U(j0,()=>F("tasks.header.projects")),U(f0,k(G0,{get when(){return y().length>1},get children(){var U0=W("text");return X(U0,"wrapMode","none"),U(U0,t),E((E0)=>{var W0=z0()?Y.primary:Y.textMuted,L0=z0()?I1.BOLD:void 0;return W0!==E0.e&&(E0.e=X(U0,"fg",W0,E0.e)),L0!==E0.t&&(E0.t=X(U0,"attributes",L0,E0.t)),E0},{e:void 0,t:void 0}),U0}}),C0),X(C0,"wrapMode","none"),U(C0,()=>"\u2500".repeat(Math.max(2,u()-10-F("tasks.header.projects").length-(y().length>1?t().length+1:0)-(y().length>1?T().length+1:0)))),U(f0,k(G0,{get when(){return y().length>1},get children(){var U0=W("text");return X(U0,"wrapMode","none"),U(U0,T),E((E0)=>{var W0=Y.textMuted,L0=I1.DIM;return W0!==E0.e&&(E0.e=X(U0,"fg",W0,E0.e)),L0!==E0.t&&(E0.t=X(U0,"attributes",L0,E0.t)),E0},{e:void 0,t:void 0}),U0}}),null),D(A,P0),mJ((U0)=>{v=U0},A),X(A,"flexShrink",0),X(A,"flexGrow",0),X(A,"minHeight",0),X(A,"stickyScroll",!1),X(A,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),X(P0,"flexShrink",0),X(P0,"gap",0),X(P0,"paddingRight",1),U(P0,k(X1,{get each(){return R0()},children:(U0)=>k(o0,{row:U0})})),E((U0)=>{var E0=Y.textMuted,W0=I1.BOLD,L0=Y.border,g0=q0();return E0!==U0.e&&(U0.e=X(j0,"fg",E0,U0.e)),W0!==U0.t&&(U0.t=X(j0,"attributes",W0,U0.t)),L0!==U0.a&&(U0.a=X(C0,"fg",L0,U0.a)),g0!==U0.o&&(U0.o=X(A,"maxHeight",g0,U0.o)),U0},{e:void 0,t:void 0,a:void 0,o:void 0}),o}}),g1),U(n,k(r0,{get label(){return F("tasks.header.tasks")},get suffix(){return T0(()=>C()==="default")()?void 0:C()},get topPad(){return R0().length>0}}),g1),D(g1,R1),mJ((o)=>{M0=o},g1),X(g1,"flexGrow",1),X(g1,"minHeight",0),X(g1,"stickyScroll",!1),X(g1,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),X(R1,"flexShrink",0),X(R1,"gap",0),X(R1,"paddingRight",1),U(R1,k(X1,{get each(){return $()},children:(o)=>{let{task:f0,flatIndex:j0}=o,C0=()=>j0===I0(),A=()=>f0.id===f.selectedId(),P0=K0(()=>{let J1=f.chatRunState?.();if(!J1)return!1;let d0=`${f0.id}:`;for(let[S1,N0]of J1)if(N0==="running"&&S1.startsWith(d0))return!0;return!1}),U0=K0(()=>{let J1=jq(f.worktreeChanges?.(),f0.worktreePath);if(J1)return J1;if(M(),!f0.archived)D9(f0.worktreePath);return U9(f0.worktreePath)},void 0,{equals:TY}),E0=K0(()=>V9({task:f0,activity:f.engineState?.().get(f0.id),job:f.taskJobs?.().get(f0.id),live:P0(),spinnerFrame:0,subtitleBudget:X0(),truncateBranch:_L,mainBranch:""})),W0=K0(()=>K9(E0(),a)),L0=()=>u0(W0().tone),g0=()=>C0()?Y.focusAccent:A()?Y.primary:void 0,Y1=()=>C0()||A()?"\u258C":" ";return(()=>{var J1=W("box"),d0=W("box"),S1=W("box"),N0=W("text"),h1=W("box"),m=W("text"),A0=W("text"),W1=W("box"),O1=W("text"),q1=W("box"),d=W("text");return D(J1,d0),X(J1,"flexDirection","column"),X(J1,"gap",0),X(J1,"paddingBottom",1),D(d0,S1),D(d0,W1),mJ((s)=>{F0.set(j0,s),b1(()=>{if(F0.get(j0)===s)F0.delete(j0)})},d0),X(d0,"flexDirection","column"),X(d0,"gap",0),X(d0,"onMouseUp",()=>{if(f.onSelect(f0.id),f.activateOnClick)f.onActivate?.(f0.id)}),X(d0,"onMouseOver",(s)=>w0({task:f0,x:s.x,y:s.y})),X(d0,"onMouseOut",()=>w0((s)=>s?.task.id===f0.id?null:s)),D(S1,N0),D(S1,h1),X(S1,"flexDirection","row"),X(S1,"gap",0),X(N0,"wrapMode","none"),U(N0,Y1),D(h1,m),D(h1,A0),X(h1,"flexDirection","row"),X(h1,"flexGrow",1),X(h1,"paddingRight",1),X(h1,"gap",0),X(m,"wrapMode","none"),U(m,()=>W0().stateGlyph),X(A0,"wrapMode","none"),X(A0,"flexGrow",1),U(A0,()=>W9(W0().titleText,P())),U(h1,k(G0,{get when(){return T0(()=>!!f.moveMode?.())()&&C0()},get children(){var s=W("text");return X(s,"wrapMode","none"),U(s,()=>F("tasks.moveChip")),E((S0)=>X(s,"fg",Y.warning,S0)),s}}),null),D(W1,O1),D(W1,q1),X(W1,"flexDirection","row"),X(W1,"gap",0),X(O1,"wrapMode","none"),U(O1,Y1),D(q1,d),X(q1,"flexDirection","row"),X(q1,"flexGrow",1),X(q1,"paddingLeft",2),X(q1,"paddingRight",1),X(q1,"gap",1),X(d,"wrapMode","none"),X(d,"flexGrow",1),U(d,()=>W0().subtitleText),U(q1,k(G0,{get when(){return f0.pinned===!0},get children(){var s=W("text");return D(s,x0("\u25B4")),X(s,"wrapMode","none"),E((S0)=>X(s,"fg",Y.warning,S0)),s}}),null),U(q1,k(G0,{get when(){return iL(f0)},children:(s)=>(()=>{var S0=W("text");return X(S0,"wrapMode","none"),U(S0,()=>s().glyph),E((b0)=>X(S0,"fg",u0(s().tone),b0)),S0})()}),null),U(q1,k(G0,{get when(){return U0().added>0},get children(){var s=W("text"),S0=x0("+");return D(s,S0),X(s,"wrapMode","none"),U(s,()=>U0().added,null),E((b0)=>X(s,"fg",Y.success,b0)),s}}),null),U(q1,k(G0,{get when(){return U0().deleted>0},get children(){var s=W("text"),S0=x0("\u2212");return D(s,S0),X(s,"wrapMode","none"),U(s,()=>U0().deleted,null),E((b0)=>X(s,"fg",Y.error,b0)),s}}),null),E((s)=>{var S0=C0()?Y.backgroundElement:void 0,b0=g0(),Hf=L0(),Uf=I1.BOLD,ff=Y.text,vf=A()||C0()?I1.BOLD:void 0,wY=g0(),Ff=Y.textMuted,hY=I1.DIM;return S0!==s.e&&(s.e=X(d0,"backgroundColor",S0,s.e)),b0!==s.t&&(s.t=X(N0,"fg",b0,s.t)),Hf!==s.a&&(s.a=X(m,"fg",Hf,s.a)),Uf!==s.o&&(s.o=X(m,"attributes",Uf,s.o)),ff!==s.i&&(s.i=X(A0,"fg",ff,s.i)),vf!==s.n&&(s.n=X(A0,"attributes",vf,s.n)),wY!==s.s&&(s.s=X(O1,"fg",wY,s.s)),Ff!==s.h&&(s.h=X(d,"fg",Ff,s.h)),hY!==s.r&&(s.r=X(d,"attributes",hY,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}),J1})()}}),null),U(R1,k(G0,{get when(){return _().length===0},get children(){var o=W("box"),f0=W("text");return D(o,f0),X(o,"paddingTop",1),X(o,"paddingLeft",1),U(f0,(()=>{var j0=T0(()=>!!(G()&&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)=>X(f0,"fg",Y.textMuted,j0)),o}}),null),U(R1,k(G0,{get when(){return T0(()=>!!(z0()&&_().length>0&&!I()))()&&!(G()&&q().trim().length>0)},get children(){var o=W("box"),f0=W("text");return D(o,f0),X(o,"paddingTop",1),X(o,"paddingLeft",1),X(f0,"wrapMode","none"),U(f0,(()=>{var j0=T0(()=>z()==="active");return()=>j0()?F("tasks.empty.noActiveProject"):F("tasks.empty.noArchivedProject")})()),E((j0)=>{var C0=Y.textMuted,A=I1.DIM;return C0!==j0.e&&(j0.e=X(f0,"fg",C0,j0.e)),A!==j0.t&&(j0.t=X(f0,"attributes",A,j0.t)),j0},{e:void 0,t:void 0}),o}}),null),U(R1,k(G0,{get when(){return T0(()=>z()==="archived")()&&_().length>0},get children(){var o=W("box"),f0=W("text");return D(o,f0),X(o,"paddingTop",1),X(o,"paddingLeft",1),X(f0,"wrapMode","none"),U(f0,()=>F("tasks.archiveHint")),E((j0)=>{var C0=Y.textMuted,A=I1.DIM;return C0!==j0.e&&(j0.e=X(f0,"fg",C0,j0.e)),A!==j0.t&&(j0.t=X(f0,"attributes",A,j0.t)),j0},{e:void 0,t:void 0}),o}}),null),U(n,k(G0,{get when(){return f.zenActive?.()},get children(){var o=W("box"),f0=W("text");return D(o,f0),X(o,"flexShrink",0),X(o,"paddingLeft",1),X(o,"paddingRight",1),X(o,"paddingTop",1),D(f0,x0("\u262F ZEN")),X(f0,"wrapMode","none"),E((j0)=>{var C0=Y.accent,A=I1.BOLD;return C0!==j0.e&&(j0.e=X(f0,"fg",C0,j0.e)),A!==j0.t&&(j0.t=X(f0,"attributes",A,j0.t)),j0},{e:void 0,t:void 0}),o}}),null),U(n,k(G0,{get when(){return k0()},children:(o)=>{let f0=K0(()=>{let W0=o().task,L0=[];if(L0.push({text:W0.kind==="main"?MY(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)=>AI(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 X(W0,"position","absolute"),X(W0,"zIndex",2600),X(W0,"flexDirection","column"),X(W0,"border",!0),X(W0,"paddingLeft",1),X(W0,"paddingRight",1),U(W0,k(X1,{get each(){return f0()},children:(L0)=>(()=>{var g0=W("text");return X(g0,"wrapMode","none"),U(g0,(()=>{var Y1=T0(()=>!!L0.dim);return()=>Y1()?RI(L0.text,C0()):j9(L0.text,C0())})()),E((Y1)=>{var J1=L0.dim?Y.textMuted:Y.text,d0=L0.bold?I1.BOLD:L0.dim?I1.DIM:void 0;return J1!==Y1.e&&(Y1.e=X(g0,"fg",J1,Y1.e)),d0!==Y1.t&&(Y1.t=X(g0,"attributes",d0,Y1.t)),Y1},{e:void 0,t:void 0}),g0})()})),E((L0)=>{var g0=U0(),Y1=E0(),J1=A(),d0=Y.focusAccent,S1=Y.backgroundElement;return g0!==L0.e&&(L0.e=X(W0,"left",g0,L0.e)),Y1!==L0.t&&(L0.t=X(W0,"top",Y1,L0.t)),J1!==L0.a&&(L0.a=X(W0,"width",J1,L0.a)),d0!==L0.o&&(L0.o=X(W0,"borderColor",d0,L0.o)),S1!==L0.i&&(L0.i=X(W0,"backgroundColor",S1,L0.i)),L0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),W0})()}}),null),E((o)=>{var f0=J()?Y.focusAccent:Y.textMuted,j0=I1.BOLD,C0=Y.textMuted,A=I1.DIM;return f0!==o.e&&(o.e=X(s0,"fg",f0,o.e)),j0!==o.t&&(o.t=X(s0,"attributes",j0,o.t)),C0!==o.a&&(o.a=X(e0,"fg",C0,o.a)),A!==o.o&&(o.o=X(e0,"attributes",A,o.o)),o},{e:void 0,t:void 0,a:void 0,o:void 0}),n})()}var pL=32,zX,FI=2000,OI=16;var oL=N(()=>{h();h();h();h();h();h();h();h();h();e1();h();B1();w1();w1();vL();tq();cL();lL();FZ();$L();zX=[{view:"active"},{view:"archived"}]});var YM={};H1(YM,{startTasksPane:()=>kI,legendRowCap:()=>fM,legendCap:()=>eL});import{existsSync as sL}from"fs";import{stat as gI}from"fs/promises";import{TextAttributes as zH}from"@opentui/core";function L9(f){return!!f&&GQ(f)}function tL(f){let Y=f instanceof Error?f.message:String(f);if(/not a git repository/i.test(Y))return F("tasks.toast.worktreeErrorNotGit");return F("tasks.toast.worktreeErrorGeneric",{message:Y})}function NI(f){let{theme:Y}=n0(),J=v1(),z=PZ(),Z=$q(),[G,Q]=p(f.tasks().some((v)=>v.id===f.initialTaskId)?f.initialTaskId:f.tasks()[0]?.id??null);function q(v){Z.notify({kind:"error",taskId:G()??"",tabId:"",title:v})}function H(v){Z.notify({kind:"done",taskId:G()??"",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),R=(v)=>{M(v),z.set("tasksPane.projectFilter",v)},[S,a]=p(null),[b,g]=p(!1);{let v=process.env.TMUX_PANE;if(v){let M0=()=>{l0(["show-options","-wqv","-t",v,LJ]).then(({code:F0,stdout:$0})=>{g(F0===0&&$0.trim().length>0)})};M0();let Y0=setInterval(M0,1000);b1(()=>clearInterval(Y0))}}let C=uY(),y=!f.initialTaskId;Z1(()=>{let v=f.orch?.activeTaskSignal()();if(!v)return;if(!y){if(v!==f.initialTaskId)return;y=!0}Q(v)}),Z1(Nf(()=>f.orch?.uiPrefsSignal()(),(v)=>{if(v&&v.sortMode!==d1(j))K(v.sortMode);if(v&&v.projectFilter!==d1(O))M(v.projectFilter)})),Z1(()=>{let v=f.orch?.updateSignal()();if(v)a(v)});let r={orch:f.orch,tasks:()=>f.tasks(),confirm:async(v)=>await HJ.show(J,v.title,v.body,v.cancelLabel,v.confirmLabel)===!0,promptText:(v,M0)=>qJ.show(J,v,M0),logger:console,logPrefix:"[kobe tasks]",notifyError:q,notifyInfo:H,reload:()=>f.reload(),switchBeforeKill:!0,updateActiveTask:!0,onTaskDeleted:(v,M0)=>{if(G()!==v)return;let Y0=f.tasks();Q(M0?.id??(Y0.find((F0)=>!F0.archived)??Y0[0])?.id??null)},promptNewTask:(v,M0,Y0)=>cq.show(J,v,M0,Y0),cursorRepo:()=>{let v=f.tasks();return(v.find((M0)=>M0.id===G())??v[0])?.repo},lastVendor:()=>PY(k1("lastSelectedVendor"),cY()),rememberVendor:(v)=>l1("lastSelectedVendor",v),openCreateSurface:async(v)=>{if(Az(z.get(fJ,Oz))!=="chattab")return!1;let Y0=await kf();if(!Y0)return!1;return await Jq(Y0,v),!0},selectTask:(v)=>Q(v),enterTask:(v)=>q0(v)};async function z0(){await SL(r)}async function t(){if(Az(z.get(fJ,Oz))==="chattab"){let Y0=await kf();if(Y0){await fq(Y0);return}}if(!(await hz.show(J,z,f.orch??void 0)).visualPrefsChanged)return;if(!z.flush())return;try{let Y0=await kf();if(Y0)await DZ(Y0)}catch(Y0){console.error("[kobe tasks] failed to refresh workspace panes:",Y0)}}async function J0(){let v=await kf();if(v){await Yq(v);return}mZ.show(J)}async function T(){if(!S()?.hasUpdate){H(F("tasks.toast.alreadyLatest",{version:t0}));return}let M0=await kf();if(!M0)return;await zq(M0)}async function B0(v){await CL(r,v)}async function _(v){await NL(r,v)}async function D0(v){await bL(r,v)}async function R0(v){await kL(r,v)}async function $(v){await yL(r,v)}async function x(v){let Y0=f.tasks().find(($0)=>$0.id===v)?.worktreePath;if(!Y0||!sL(Y0)){if(!f.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),q(F("tasks.toast.noDaemonWorktree"));return}try{Y0=await f.orch.ensureWorktree(v)}catch($0){console.error("[kobe tasks] task.ensureWorktree failed:",$0),q(tL($0));return}await f.reload()}if(!Y0||!sL(Y0))return;let F0=TL();if(!F0){console.error("[kobe tasks] no editor/opener found; set KOBE_OPEN_EDITOR"),q(F("tasks.toast.noEditor"));return}if(!uL(Y0,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 kf();if(!v)return;let M0=await ez(v);if(!M0)return;await h0(["select-pane","-t",M0])}async function I(v,M0){let Y0=f.tasks().find((F0)=>F0.id===v);if(!Y0||Y0.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[Z0,u]=p(z.get("tasksPane.keysCollapsed",!1)===!0),P=(v)=>{u(v),z.set("tasksPane.keysCollapsed",v)};Z1(Nf(()=>f.orch?.uiPrefsSignal()(),(v)=>{if(v&&v.keysCollapsed!==d1(Z0))u(v.keysCollapsed)}));let[X0,V0]=p(!1);U1(()=>({enabled:J.stack.length===0&&!X0(),bindings:iJ({"help.open":()=>void J0(),"task.new":()=>void z0(),"settings.open.sidebar":()=>void t(),"tasks.update":()=>void T(),"tasks.openWorktree":()=>{let v=G();if(v)x(v)},"tasks.renameBranch":()=>{let v=G();if(v)R0(v)},"tasks.cycleEngine":()=>{let v=G();if(v)$(v)},"tasks.toggleKeys":()=>P(!Z0()),"tasks.focusEngine":()=>void e().catch((v)=>console.error("[kobe tasks] focus engine pane failed:",v))})}));async function q0(v){let M0=L1(v),Y0=f.tasks().find((n)=>n.id===v),F0=await kf();if(F0&&F0!==M0)await bG(F0);if(await j1(M0)){let n=await Kz(M0,"@kobe_worktree")||Y0?.worktreePath||"";if(L9(n)){let Q0=Y0?.repo?YJ(Y0.repo,n,{kind:"repo-init"}):void 0;await EJ({name:M0,cwd:n,command:yf(Y0?.vendor),taskId:v,vendor:Y0?.vendor,repo:Y0?.repo,launchInit:Q0})}await Xq(M0),await h0(["switch-client","-t",`=${M0}`]),f.orch?.setActiveTask(v).catch(()=>{});return}let r0=Y0?.worktreePath;if(!L9(r0)){if(!f.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),q(F("tasks.toast.noDaemonOpen"));return}try{r0=await f.orch.ensureWorktree(v)}catch(n){console.error("[kobe tasks] task.ensureWorktree failed:",n),q(tL(n));return}await f.reload()}if(!L9(r0))return;let u0=Y0?.repo?YJ(Y0.repo,r0,{kind:"repo-init"}):void 0;if(!await EJ({name:M0,cwd:r0,command:yf(Y0?.vendor),taskId:v,vendor:Y0?.vendor,repo:Y0?.repo,launchInit:u0})){console.error(`[kobe tasks] failed to start session ${M0}`),q(F("tasks.toast.sessionStartFailed"));return}await Xq(M0),await h0(["switch-client","-t",`=${M0}`]),f.orch?.setActiveTask(v).catch(()=>{})}let k0=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,_0=K0(()=>f.tasks().find((v)=>v.id===G())?.kind==="main");return(()=>{var v=W("box"),M0=W("box");return D(v,M0),X(v,"flexDirection","column"),X(v,"flexGrow",1),U(v,k(AL,{stale:w0,daemonVersion:I0,clientVersion:t0,width:()=>C().width}),M0),X(M0,"flexGrow",1),X(M0,"flexShrink",1),U(M0,k(rL,{get tasks(){return f.tasks},selectedId:G,onSelect:Q,onActivate:(Y0)=>void q0(Y0),activateOnClick:!0,headerStatus:k0,onHeaderStatusClick:()=>void T(),onAddTask:()=>void z0(),zenActive:b,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 Y0=f.orch;if(!Y0||Y0.connectionStateSignal()()!=="online")return null;return Y0.worktreeChangesSignal()()}:void 0},onRenameRequest:(Y0)=>void D0(Y0),onDeleteRequest:(Y0)=>void _(Y0),onArchiveRequest:(Y0)=>void B0(Y0),onLocalMergeRequest:(Y0)=>{let F0=f.tasks().find(($0)=>$0.id===Y0);if(!F0||F0.kind==="main")return;Q(Y0),V(($0)=>!$0)},moveMode:B,onMoveRequest:(Y0,F0)=>void I(Y0,F0),onMoveModeExit:()=>V(!1),sortMode:j,projectFilter:O,onProjectFilterChange:R,onSortModeToggle:()=>{let Y0=j()==="default"?"recent":"default";K(Y0),z.set("activeSortMode",Y0)},focused:()=>J.stack.length===0,onSearchActiveChange:V0})),U(v,k(bI,{moveMode:B,selectedIsMain:_0,collapsed:Z0,onToggleCollapsed:()=>P(!Z0())}),null),E((Y0)=>X(v,"backgroundColor",Y.background,Y0)),v})()}function eL(f){let Y=dj(f);if(!Y)return null;let J=Y.hint?.keys??Y.keys[0];return J&&J.length>0?J:null}function fM(f){let Y=f.map(eL).filter((J)=>J!==null);return Y.length>0?Y.join("/"):null}function bI(f){let{theme:Y}=n0(),[J,z]=p("Prefix");r1(()=>{l0(["show-options","-g","prefix"]).then(({code:K,stdout:L})=>{if(K!==0)return;let O=fH(L);if(O)z(O)})});let Z=()=>{nj();let K=wQ(),L=K.binds,O=[],M=K.focus.filter((S)=>S!==null).map((S)=>S.chord);if(M.length===4&&M.every((S,a)=>S===SJ[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 b=a.map((g)=>L[g]?.chord).filter((g)=>!!g);if(b.length>0)O.push({k:`prefix ${b.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},G=()=>{nj();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=fM(O.ids);if(M===null)continue;L.push({k:M,label:O.label,dimWhenMain:O.dimWhenMain})}return L.push(...Z()),L},Q=()=>[{k:"j/k",label:F("tasks.hints.reorder")},{k:"enter/esc",label:F("tasks.hints.done")}],q=()=>f.moveMode?.()?Q():G(),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),X(K,"flexShrink",0),X(K,"flexDirection","column"),X(K,"paddingLeft",1),X(K,"paddingRight",1),X(K,"paddingTop",1),X(K,"paddingBottom",1),X(K,"gap",0),X(L,"wrapMode","none"),X(L,"onMouseUp",()=>f.onToggleCollapsed?.()),U(L,(()=>{var O=T0(()=>!!j());return()=>O()?F("tasks.hints.headerFolded"):F("tasks.hints.headerUnfolded")})()),U(K,k(G0,{get when(){return!j()},get children(){return k(X1,{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"),b=x0("["),g=x0("]"),C=W("box"),y=W("text");return D(R,S),D(R,C),X(R,"flexDirection","row"),X(R,"gap",1),X(R,"justifyContent","space-between"),D(S,a),X(S,"width",10),X(S,"flexShrink",0),D(a,b),D(a,g),X(a,"wrapMode","none"),U(a,()=>vZ(O.k,J()),g),D(C,y),X(C,"flexShrink",0),X(y,"wrapMode","none"),U(y,()=>V(O.label)),E((r)=>{var z0=M()?Y.textMuted:Y.accent,t=M()?zH.DIM:zH.BOLD,J0=B(),T=Y.textMuted,B0=M()?zH.DIM:void 0;return z0!==r.e&&(r.e=X(a,"fg",z0,r.e)),t!==r.t&&(r.t=X(a,"attributes",t,r.t)),J0!==r.a&&(r.a=X(C,"width",J0,r.a)),T!==r.o&&(r.o=X(y,"fg",T,r.o)),B0!==r.i&&(r.i=X(y,"attributes",B0,r.i)),r},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),R})()}})}}),null),E((O)=>{var M=Y.textMuted,R=zH.DIM;return M!==O.e&&(O.e=X(L,"fg",M,O.e)),R!==O.t&&(O.t=X(L,"attributes",R,O.t)),O},{e:void 0,t:void 0}),K})()}async function kI(f={}){await Mf({logContext:"tasks",providers:{notifications:!0},setup:()=>yI(f)})}async function yI(f){let Y=new gZ({homeDir:OY()});await Y.load();let[J,z]=p(Y.list()),Z=null;try{let B=await rf();if(B){let V=new Vf(B);await V.init(),Z=V}else aY("tasks-boot","no daemon running \u2014 polling tasks.json (a gui owns daemon lifecycle)")}catch(B){p1("tasks-boot",B),aY("tasks-boot","daemon subscribe failed \u2014 polling tasks.json")}let G=()=>Z&&Z.connectionStateSignal()()==="online"?Z.tasksSignal()():J(),Q=async()=>{await Y.load(),z(Y.list())},q="",H=setInterval(()=>{if(Z&&Z.connectionStateSignal()()==="online")return;(async()=>{let B="missing";try{let V=await gI(Y.filePath);B=`${V.mtimeMs}:${V.size}`}catch{}if(B===q)return;q=B,await Q()})().catch(()=>{})},CI);return{root:()=>[k(NI,{tasks:G,get initialTaskId(){return f.initialTaskId},orch:Z,reload:Q}),k(FL,{})],onDestroy:()=>{if(H)clearInterval(H);Z?.dispose()}}}var CI=1500;var JM=N(()=>{h();h();h();h();h();h();h();h();u1();ZY();e1();h();Yz();Lf();B1();nJ();Ef();i1();QY();uG();jZ();A1();hQ();$1();Df();ej();wZ();f9();q9();OL();RL();hZ();tG();pq();w1();tj();aJ();Sf();IL();EL();oL();Gf();Pf();Y9()});var zM={};H1(zM,{startSettingsHost:()=>II});function SI(f){let Y=PZ(),J=v1(),{theme:z}=n0(),Z=!1,G=!1;async function Q(){if(G)return;G=!0;try{if(Y.flush()&&Z){let H=await kf();if(H)await DZ(H)}}catch(q){console.error("[kobe settings] failed to refresh workspace panes:",q)}finally{process.exit(0)}}return U1(()=>({enabled:J.stack.length===0,bindings:[{key:"escape",cmd:Q},{key:"q",cmd:Q},{key:"ctrl+c",cmd:Q}]})),(()=>{var q=W("scrollbox");return X(q,"flexGrow",1),X(q,"paddingTop",1),X(q,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),U(q,k(hz,{kv:Y,get orchestrator(){return f.orchestrator??void 0},standalone:!0,onVisualPrefsChange:()=>{Z=!0},onClose:Q})),E((H)=>X(q,"backgroundColor",z.background,H)),q})()}async function II(){await Mf({setup:async()=>{let f=null;try{let Y=await rf();if(Y){let J=new Vf(Y);await J.init(),f=J}else console.error("[kobe settings] no daemon running; Restart backend disabled")}catch(Y){console.error("[kobe settings] daemon unavailable; Restart backend disabled:",Y)}return{root:()=>k(SI,{orchestrator:f}),onDestroy:()=>{f?.dispose()}}}})}var ZM=N(()=>{h();h();h();h();h();h();Lf();nJ();q9();tG();w1();aJ();Sf();Gf();Pf()});var GM={};H1(GM,{startHelpHost:()=>uI});function TI(){let f=v1(),{theme:Y}=n0();function J(){process.exit(0)}return U1(()=>({enabled:f.stack.length===0,bindings:[{key:"escape",cmd:J},{key:"q",cmd:J},{key:"f1",cmd:J},{key:"ctrl+c",cmd:J}]})),(()=>{var z=W("box");return X(z,"flexGrow",1),X(z,"paddingTop",1),U(z,k(mZ,{onClose:J})),E((Z)=>X(z,"backgroundColor",Y.background,Z)),z})()}async function uI(){await Mf({providers:{kv:!1,focus:!1},setup:()=>({root:()=>k(TI,{})})})}var XM=N(()=>{h();h();h();h();h();ej();w1();aJ();Sf();Pf()});var QM={};H1(QM,{startUpdateHost:()=>mI});import{spawn as EI,spawnSync as xI}from"child_process";import{TextAttributes as nZ}from"@opentui/core";function wI(f){if(!f)return!1;let Y=process.platform,[J,z]=Y==="darwin"?["open",[f]]:Y==="win32"?["cmd",["/c","start","",f]]:["xdg-open",[f]];try{return EI(J,z,{stdio:"ignore",detached:!0}).unref(),!0}catch{return!1}}function hI(f){return f.replace(/\r\n/g,`
260
+ `)}var UI;var c4=N(()=>{af();UI=["install","status","command"]});var Pj={};B1(Pj,{runHookSubcommand:()=>CI,readTextWithTimeout:()=>l4,parseWorktreeAddPath:()=>a4,ensureGlobalKobeHooks:()=>bI});import{homedir as LI}from"os";import{join as n4,resolve as i4}from"path";async function l4(J,z=MI){let Y;try{return await Promise.race([J(),new Promise((Z)=>{Y=setTimeout(()=>Z(""),z)})])}finally{if(Y!==void 0)clearTimeout(Y)}}async function $4(){try{let J=await l4(()=>Bun.stdin.text());if(!J.trim())return{};let z=JSON.parse(J);return z&&typeof z==="object"&&!Array.isArray(z)?z:{}}catch{return{}}}function FI(J,z){for(let Y=0;Y<J.length;Y++){if(J[Y]===z)return J[Y+1];if(J[Y].startsWith(`${z}=`))return J[Y].slice(z.length+1)}return}function AI(J){return!!J&&typeof J==="object"&&!Array.isArray(J)}function RI(J){let z=[],Y=/"([^"]*)"|'([^']*)'|(\S+)/g,Z;while((Z=Y.exec(J))!==null)z.push(Z[1]??Z[2]??Z[3]??"");return z}function a4(J){let z=RI(J),Y=new Set(["-b","-B","--reason"]);for(let Z=0;Z+1<z.length;Z++){if(z[Z]!=="worktree"||z[Z+1]!=="add")continue;let G=Z+2;while(G<z.length){let X=z[G];if(X==="&&"||X==="||"||X===";"||X==="|"||X===">"||X===">>")break;if(X.startsWith("-")){G+=Y.has(X)?2:1;continue}return X}}return}async function gI(){let J=await $4(),z=AI(J.tool_input)?J.tool_input:{},Y=typeof z.command==="string"?z.command:"";if(!Y.includes("worktree"))return;let Z=a4(Y);if(!Z)return;let G=typeof J.cwd==="string"&&J.cwd?J.cwd:process.cwd(),X=i4(G,Z),Q=await eJ();if(!Q)return;try{await Q.request("worktree.reconcile",{cwd:G,worktreePath:X})}finally{Q.close()}}async function CI(J){let[z,...Y]=J;if(z==="setup"){await SI(Y);return}if(z===OI){try{await gI()}catch{}return}try{if(!z||!zq(z))return;let Z=await $4(),G=FI(Y,"--task-id"),X=typeof Z.cwd==="string"&&Z.cwd?Z.cwd:process.cwd(),Q;for(let H of _4())if(Q=H.activityDetailFromPayload(z,Z),Q)break;let f=await eJ();if(!f)return;try{await f.request("engine.reportEvent",{...G?{taskId:G}:{cwd:X},kind:z,...Q?{detail:Q}:{}})}finally{f.close()}}catch{}}function NI(){return i1.map((J)=>RB(J)).filter((J)=>J.supportsWorktreeSync())}function _4(){return i1.map((J)=>RB(J)).filter((J)=>J.supportsHooks())}function p4(){return n4(LI(),".claude","settings.json")}function kI(J){if(!J||J==="off")return;if(J==="global")return p4();if(J.startsWith("repo:"))return n4(i4(J.slice(5)),".claude","settings.json");return J}async function bI(){try{for(let J of _4()){let z=J.globalSettingsPath();if(!z)continue;await J.installActivityHooks(z),await J.installWorktreeWatchHook(z)}await r4()}catch{}}async function r4(){let J=NI();if(J.length===0)return;let z=S1(d4),Y=new Set([p4()]),Z=kI(z);if(Z)Y.add(Z);for(let G of J)for(let X of Y)await G.removeWorktreeSyncHook(X);if(z!=="off")r1(d4,"off")}async function SI(J){await r4(),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(`
261
+ `))}var MI=500,OI="worktree-created",d4="externalWorktreeSync";var hj=N(()=>{OJ();gB();Yq();O1();t1()});function s4(J){var z;if(J>=55296&&J<=57343||J>1114111)return 65533;return(z=II.get(J))!==null&&z!==void 0?z:J}var vj,II,o4;var t4=N(()=>{II=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]]),o4=(vj=String.fromCodePoint)!==null&&vj!==void 0?vj:(J)=>{let z="";if(J>65535)J-=65536,z+=String.fromCharCode(J>>>10&1023|55296),J=56320|J&1023;return z+=String.fromCharCode(J),z}});function e4(J){let z=typeof atob==="function"?atob(J):typeof Buffer.from==="function"?Buffer.from(J,"base64").toString("binary"):new Buffer(J,"base64").toString("binary"),Y=z.length&-2,Z=new Uint16Array(Y/2);for(let G=0,X=0;G<Y;G+=2){let Q=z.charCodeAt(G),f=z.charCodeAt(G+1);Z[X++]=Q|f<<8}return Z}var JD;var zD=N(()=>{JD=e4("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IAAOA12J/c8iFvaxBhAAhOVGFjZGZnbG1vcHFzdHV4owOlA6kDsAO/A8IDxgPNA9ID8gP9AwEEFAQeBCAEJQRHAEphSAA7gNAA0EBjAHUAdABlADuAyQDJQIABYWl5ALYDuQO+A/Ihb24aYXIAYwA7gMoAykAtZG8AdAAWYXIAAOA12AjdcgBhAHYAZQA7gMgAyEDlIm1lbnQAoAgiAAFhcNYD2QNjAHIAEmF0AHkAUwLhAwAAAADpA20lYWxsU3F1YXJlAACg+yVlJ3J5U21hbGxTcXVhcmUAAKCrJQABZ3D2A/kDbwBuABhhZgAA4DXYPN3zImlsb26VY3UAAAFhaQYEDgRsAFSgdSppImxkZQAAoEIi7CNpYnJpdW0AoMwhAAFjaRgEGwRyAACgMCFtAACgcyphAJdjbQBsADuAywDLQAABaXApBC0E8yF0cwCgAyLvJG5lbnRpYWxFAKBHIYACY2Zpb3MAPQQ/BEMEXQRyBHkAJGRyAADgNdgJ3WwibGVkAFMCTAQAAAAAVARtJWFsbFNxdWFyZQAAoPwlZSdyeVNtYWxsU3F1YXJlAACgqiVwA2UEAABpBAAAAABtBGYAAOA12D3dwSFsbACgACLyI2llcnRyZgCgMSFjAPIAcQQABkpUYWJjZGZnb3JzdIgEiwSOBJMElwSkBKcEqwStBLIE5QTqBGMAeQADZDuAPgA+QO0hbWFkoJMD3GNyImV2ZQAeYYABZWl5AJ0EoASjBOQhaWwiYXIAYwAcYRNkbwB0ACBhcgAA4DXYCt0AoNkicABmAADgNdg+3eUiYXRlcgADRUZHTFNUvwTIBM8E1QTZBOAEcSJ1YWwATKBlIuUhc3MAoNsidSRsbEVxdWFsAACgZyJyI2VhdGVyAACgoirlIXNzAKB3IuwkYW50RXF1YWwAoH4qaSJsZGUAAKBzImMAcgAA4DXYotwAoGsiAARBYWNmaW9zdfkE/QQFBQgFCwUTBSIFKwVSIkRjeQAqZAABY3QBBQQFZQBrAMdiXmDpIXJjJGFyAACgDCFsJWJlcnRTcGFjZQAAoAsh8AEYBQAAGwVmAACgDSHpJXpvbnRhbExpbmUAoAAlAAFjdCYFKAXyABIF8iFvayZhbQBwAEQBMQU5BW8AdwBuAEgAdQBtAPAAAAFxInVhbAAAoE8iAAdFSk9hY2RmZ21ub3N0dVMFVgVZBVwFYwVtBXAFcwV6BZAFtgXFBckFzQVjAHkAFWTsIWlnMmFjAHkAAWRjAHUAdABlADuAzQDNQAABaXlnBWwFcgBjADuAzgDOQBhkbwB0ADBhcgAAoBEhcgBhAHYAZQA7gMwAzEAAoREhYXB/BYsFAAFjZ4MFhQVyACphaSNuYXJ5SQAAoEghbABpAGUA8wD6AvQBlQUAAKUFZaAsIgABZ3KaBZ4F8iFhbACgKyLzI2VjdGlvbgCgwiJpI3NpYmxlAAABQ1SsBbEFbyJtbWEAAKBjIGkibWVzAACgYiCAAWdwdAC8Bb8FwwVvAG4ALmFmAADgNdhA3WEAmWNjAHIAAKAQIWkibGRlAChh6wHSBQAA1QVjAHkABmRsADuAzwDPQIACY2Zvc3UA4QXpBe0F8gX9BQABaXnlBegFcgBjADRhGWRyAADgNdgN3XAAZgAA4DXYQd3jAfcFAAD7BXIAAOA12KXc8iFjeQhk6yFjeQRkgANISmFjZm9zAAwGDwYSBhUGHQYhBiYGYwB5ACVkYwB5AAxk8CFwYZpjAAFleRkGHAbkIWlsNmEaZHIAAOA12A7dcABmAADgNdhC3WMAcgAA4DXYptyABUpUYWNlZmxtb3N0AD0GQAZDBl4GawZkB2gHcAd0B80H2gdjAHkACWQ7gDwAPECAAmNtbnByAEwGTwZSBlUGWwb1IXRlOWHiIWRhm2NnAACg6ifsI2FjZXRyZgCgEiFyAACgniGAAWFleQBkBmcGagbyIW9uPWHkIWlsO2EbZAABZnNvBjQHdAAABUFDREZSVFVWYXKABp4GpAbGBssG3AYDByEHwQIqBwABbnKEBowGZyVsZUJyYWNrZXQAAKDoJ/Ihb3cAoZAhQlKTBpcGYQByAACg5CHpJGdodEFycm93AKDGIWUjaWxpbmcAAKAII28A9QGqBgAAsgZiJWxlQnJhY2tldAAAoOYnbgDUAbcGAAC+BmUkZVZlY3RvcgAAoGEp5SJjdG9yQqDDIWEAcgAAoFkpbCJvb3IAAKAKI2kiZ2h0AAABQVbSBtcGciJyb3cAAKCUIeUiY3RvcgCgTikAAWVy4AbwBmUAAKGjIkFW5gbrBnIicm93AACgpCHlImN0b3IAoFopaSNhbmdsZQBCorIi+wYAAAAA/wZhAHIAAKDPKXEidWFsAACgtCJwAIABRFRWAAoHEQcYB+8kd25WZWN0b3IAoFEpZSRlVmVjdG9yAACgYCnlImN0b3JCoL8hYQByAACgWCnlImN0b3JCoLwhYQByAACgUilpAGcAaAB0AGEAcgByAG8A9wDMAnMAAANFRkdMU1Q/B0cHTgdUB1gHXwfxJXVhbEdyZWF0ZXIAoNoidSRsbEVxdWFsAACgZiJyI2VhdGVyAACgdiLlIXNzAKChKuwkYW50RXF1YWwAoH0qaSJsZGUAAKByInIAAOA12A/dZaDYIuYjdGFycm93AKDaIWkiZG90AD9hgAFucHcAege1B7kHZwAAAkxSbHKCB5QHmwerB+UhZnQAAUFSiAeNB3Iicm93AACg9SfpJGdodEFycm93AKD3J+kkZ2h0QXJyb3cAoPYn5SFmdAABYXLcAqEHaQBnAGgAdABhAHIAcgBvAPcA5wJpAGcAaAB0AGEAcgByAG8A9wDuAmYAAOA12EPdZQByAAABTFK/B8YHZSRmdEFycm93AACgmSHpJGdodEFycm93AKCYIYABY2h0ANMH1QfXB/IAWgYAoLAh8iFva0FhAKBqIgAEYWNlZmlvc3XpB+wH7gf/BwMICQgOCBEIcAAAoAUpeQAcZAABZGzyB/kHaSR1bVNwYWNlAACgXyBsI2ludHJmAACgMyFyAADgNdgQ3e4jdXNQbHVzAKATInAAZgAA4DXYRN1jAPIA/gecY4AESmFjZWZvc3R1ACEIJAgoCDUIgQiFCDsKQApHCmMAeQAKZGMidXRlAENhgAFhZXkALggxCDQI8iFvbkdh5CFpbEVhHWSAAWdzdwA7CGEIfQjhInRpdmWAAU1UVgBECEwIWQhlJWRpdW1TcGFjZQAAoAsgaABpAAABY25SCFMIawBTAHAAYQBjAOUASwhlAHIAeQBUAGgAaQDuAFQI9CFlZAABR0xnCHUIcgBlAGEAdABlAHIARwByAGUAYQB0AGUA8gDrBGUAcwBzAEwAZQBzAPMA2wdMImluZQAKYHIAAOA12BHdAAJCbnB0jAiRCJkInAhyImVhawAAoGAgwiZyZWFraW5nU3BhY2WgYGYAAKAVIUOq7CqzCMIIzQgAAOcIGwkAAAAAAAAtCQAAbwkAAIcJAACdCcAJGQoAADQKAAFvdbYIvAjuI2dydWVudACgYiJwIkNhcAAAoG0ibyh1YmxlVmVydGljYWxCYXIAAKAmIoABbHF4ANII1wjhCOUibWVudACgCSL1IWFsVKBgImkibGRlAADgQiI4A2kic3RzAACgBCJyI2VhdGVyAACjbyJFRkdMU1T1CPoIAgkJCQ0JFQlxInVhbAAAoHEidSRsbEVxdWFsAADgZyI4A3IjZWF0ZXIAAOBrIjgD5SFzcwCgeSLsJGFudEVxdWFsAOB+KjgDaSJsZGUAAKB1IvUhbXBEASAJJwnvI3duSHVtcADgTiI4A3EidWFsAADgTyI4A2UAAAFmczEJRgn0JFRyaWFuZ2xlQqLqIj0JAAAAAEIJYQByAADgzyk4A3EidWFsAACg7CJzAICibiJFR0xTVABRCVYJXAlhCWkJcSJ1YWwAAKBwInIjZWF0ZXIAAKB4IuUhc3MA4GoiOAPsJGFudEVxdWFsAOB9KjgDaSJsZGUAAKB0IuUic3RlZAABR0x1CX8J8iZlYXRlckdyZWF0ZXIA4KIqOAPlI3NzTGVzcwDgoSo4A/IjZWNlZGVzAKGAIkVTjwmVCXEidWFsAADgryo4A+wkYW50RXF1YWwAoOAiAAFlaaAJqQl2JmVyc2VFbGVtZW50AACgDCLnJWh0VHJpYW5nbGVCousitgkAAAAAuwlhAHIAAODQKTgDcSJ1YWwAAKDtIgABcXXDCeAJdSNhcmVTdQAAAWJwywnVCfMhZXRF4I8iOANxInVhbAAAoOIi5SJyc2V0ReCQIjgDcSJ1YWwAAKDjIoABYmNwAOYJ8AkNCvMhZXRF4IIi0iBxInVhbAAAoIgi4yJlZWRzgKGBIkVTVAD6CQAKBwpxInVhbAAA4LAqOAPsJGFudEVxdWFsAKDhImkibGRlAADgfyI4A+UicnNldEXggyLSIHEidWFsAACgiSJpImxkZQCAoUEiRUZUACIKJwouCnEidWFsAACgRCJ1JGxsRXF1YWwAAKBHImkibGRlAACgSSJlJXJ0aWNhbEJhcgAAoCQiYwByAADgNdip3GkAbABkAGUAO4DRANFAnWMAB0VhY2RmZ21vcHJzdHV2XgphCmgKcgp2CnoKgQqRCpYKqwqtCrsKyArNCuwhaWdSYWMAdQB0AGUAO4DTANNAAAFpeWwKcQpyAGMAO4DUANRAHmRiImxhYwBQYXIAAOA12BLdcgBhAHYAZQA7gNIA0kCAAWFlaQCHCooKjQpjAHIATGFnAGEAqWNjInJvbgCfY3AAZgAA4DXYRt3lI25DdXJseQABRFGeCqYKbyV1YmxlUXVvdGUAAKAcIHUib3RlAACgGCAAoFQqAAFjbLEKtQpyAADgNdiq3GEAcwBoADuA2ADYQGkAbAHACsUKZABlADuA1QDVQGUAcwAAoDcqbQBsADuA1gDWQGUAcgAAAUJQ0wrmCgABYXLXCtoKcgAAoD4gYQBjAAABZWvgCuIKAKDeI2UAdAAAoLQjYSVyZW50aGVzaXMAAKDcI4AEYWNmaGlsb3JzAP0KAwsFCwkLCwsMCxELIwtaC3IjdGlhbEQAAKACInkAH2RyAADgNdgT3WkApmOgY/Ujc01pbnVzsWAAAWlwFQsgC24AYwBhAHIAZQBwAGwAYQBuAOUACgVmAACgGSGAobsqZWlvACoLRQtJC+MiZWRlc4CheiJFU1QANAs5C0ALcSJ1YWwAAKCvKuwkYW50RXF1YWwAoHwiaSJsZGUAAKB+Im0AZQAAoDMgAAFkcE0LUQv1IWN0AKAPIm8jcnRpb24AYaA3ImwAAKAdIgABY2leC2ILcgAA4DXYq9yoYwACVWZvc2oLbwtzC3cLTwBUADuAIgAiQHIAAOA12BTdcABmAACgGiFjAHIAAOA12KzcAAZCRWFjZWZoaW9yc3WPC5MLlwupC7YL2AvbC90LhQyTDJoMowzhIXJyAKAQKUcAO4CuAK5AgAFjbnIAnQugC6ML9SF0ZVRhZwAAoOsncgB0oKAhbAAAoBYpgAFhZXkArwuyC7UL8iFvblhh5CFpbFZhIGR2oBwhZSJyc2UAAAFFVb8LzwsAAWxxwwvIC+UibWVudACgCyL1JGlsaWJyaXVtAKDLIXAmRXF1aWxpYnJpdW0AAKBvKXIAAKAcIW8AoWPnIWh0AARBQ0RGVFVWYewLCgwQDDIMNwxeDHwM9gIAAW5y8Av4C2clbGVCcmFja2V0AACg6SfyIW93AKGSIUJM/wsDDGEAcgAAoOUhZSRmdEFycm93AACgxCFlI2lsaW5nAACgCSNvAPUBFgwAAB4MYiVsZUJyYWNrZXQAAKDnJ24A1AEjDAAAKgxlJGVWZWN0b3IAAKBdKeUiY3RvckKgwiFhAHIAAKBVKWwib29yAACgCyMAAWVyOwxLDGUAAKGiIkFWQQxGDHIicm93AACgpiHlImN0b3IAoFspaSNhbmdsZQBCorMiVgwAAAAAWgxhAHIAAKDQKXEidWFsAACgtSJwAIABRFRWAGUMbAxzDO8kd25WZWN0b3IAoE8pZSRlVmVjdG9yAACgXCnlImN0b3JCoL4hYQByAACgVCnlImN0b3JCoMAhYQByAACgUykAAXB1iQyMDGYAAKAdIe4kZEltcGxpZXMAoHAp6SRnaHRhcnJvdwCg2yEAAWNongyhDHIAAKAbIQCgsSHsJGVEZWxheWVkAKD0KYAGSE9hY2ZoaW1vcXN0dQC/DMgMzAzQDOIM5gwKDQ0NFA0ZDU8NVA1YDQABQ2PDDMYMyCFjeSlkeQAoZEYiVGN5ACxkYyJ1dGUAWmEAorwqYWVpedgM2wzeDOEM8iFvbmBh5CFpbF5hcgBjAFxhIWRyAADgNdgW3e8hcnQAAkRMUlXvDPYM/QwEDW8kd25BcnJvdwAAoJMhZSRmdEFycm93AACgkCHpJGdodEFycm93AKCSIXAjQXJyb3cAAKCRIechbWGjY+EkbGxDaXJjbGUAoBgicABmAADgNdhK3XICHw0AAAAAIg10AACgGiLhIXJlgKGhJUlTVQAqDTINSg3uJXRlcnNlY3Rpb24AoJMidQAAAWJwNw1ADfMhZXRFoI8icSJ1YWwAAKCRIuUicnNldEWgkCJxInVhbAAAoJIibiJpb24AAKCUImMAcgAA4DXYrtxhAHIAAKDGIgACYmNtcF8Nag2ODZANc6DQImUAdABFoNAicSJ1YWwAAKCGIgABY2huDYkNZSJlZHMAgKF7IkVTVAB4DX0NhA1xInVhbAAAoLAq7CRhbnRFcXVhbACgfSJpImxkZQAAoH8iVABoAGEA9ADHCwCgESIAodEiZXOVDZ8NciJzZXQARaCDInEidWFsAACghyJlAHQAAKDRIoAFSFJTYWNmaGlvcnMAtQ27Db8NyA3ODdsN3w3+DRgOHQ4jDk8AUgBOADuA3gDeQMEhREUAoCIhAAFIY8MNxg1jAHkAC2R5ACZkAAFidcwNzQ0JYKRjgAFhZXkA1A3XDdoN8iFvbmRh5CFpbGJhImRyAADgNdgX3QABZWnjDe4N8gHoDQAA7Q3lImZvcmUAoDQiYQCYYwABY27yDfkNayNTcGFjZQAA4F8gCiDTInBhY2UAoAkg7CFkZYChPCJFRlQABw4MDhMOcSJ1YWwAAKBDInUkbGxFcXVhbAAAoEUiaSJsZGUAAKBIInAAZgAA4DXYS93pI3BsZURvdACg2yAAAWN0Jw4rDnIAAOA12K/c8iFva2Zh4QpFDlYOYA5qDgAAbg5yDgAAAAAAAAAAAAB5DnwOqA6zDgAADg8RDxYPGg8AAWNySA5ODnUAdABlADuA2gDaQHIAb6CfIeMhaXIAoEkpcgDjAVsOAABdDnkADmR2AGUAbGEAAWl5Yw5oDnIAYwA7gNsA20AjZGIibGFjAHBhcgAA4DXYGN1yAGEAdgBlADuA2QDZQOEhY3JqYQABZGl/Dp8OZQByAAABQlCFDpcOAAFhcokOiw5yAF9gYQBjAAABZWuRDpMOAKDfI2UAdAAAoLUjYSVyZW50aGVzaXMAAKDdI28AbgBQoMMi7CF1cwCgjiIAAWdwqw6uDm8AbgByYWYAAOA12EzdAARBREVUYWRwc78O0g7ZDuEOBQPqDvMOBw9yInJvdwDCoZEhyA4AAMwOYQByAACgEilvJHduQXJyb3cAAKDFIW8kd25BcnJvdwAAoJUhcSV1aWxpYnJpdW0AAKBuKWUAZQBBoKUiciJyb3cAAKClIW8AdwBuAGEAcgByAG8A9wAQA2UAcgAAAUxS+Q4AD2UkZnRBcnJvdwAAoJYh6SRnaHRBcnJvdwCglyFpAGyg0gNvAG4ApWPpIW5nbmFjAHIAAOA12LDcaSJsZGUAaGFtAGwAO4DcANxAgAREYmNkZWZvc3YALQ8xDzUPNw89D3IPdg97D4AP4SFzaACgqyJhAHIAAKDrKnkAEmThIXNobKCpIgCg5ioAAWVyQQ9DDwCgwSKAAWJ0eQBJD00Paw9hAHIAAKAWIGmgFiDjIWFsAAJCTFNUWA9cD18PZg9hAHIAAKAjIukhbmV8YGUkcGFyYXRvcgAAoFgnaSJsZGUAAKBAItQkaGluU3BhY2UAoAogcgAA4DXYGd1wAGYAAOA12E3dYwByAADgNdix3GQiYXNoAACgqiKAAmNlZm9zAI4PkQ+VD5kPng/pIXJjdGHkIWdlAKDAInIAAOA12BrdcABmAADgNdhO3WMAcgAA4DXYstwAAmZpb3OqD64Prw+0D3IAAOA12BvdnmNwAGYAAOA12E/dYwByAADgNdiz3IAEQUlVYWNmb3N1AMgPyw/OD9EP2A/gD+QP6Q/uD2MAeQAvZGMAeQAHZGMAeQAuZGMAdQB0AGUAO4DdAN1AAAFpedwP3w9yAGMAdmErZHIAAOA12BzdcABmAADgNdhQ3WMAcgAA4DXYtNxtAGwAeGEABEhhY2RlZm9z/g8BEAUQDRAQEB0QIBAkEGMAeQAWZGMidXRlAHlhAAFheQkQDBDyIW9ufWEXZG8AdAB7YfIBFRAAABwQbwBXAGkAZAB0AOgAVAhhAJZjcgAAoCghcABmAACgJCFjAHIAAOA12LXc4QtCEEkQTRAAAGcQbRByEAAAAAAAAAAAeRCKEJcQ8hD9EAAAGxEhETIROREAAD4RYwB1AHQAZQA7gOEA4UByImV2ZQADYYCiPiJFZGl1eQBWEFkQWxBgEGUQAOA+IjMDAKA/InIAYwA7gOIA4kB0AGUAO4C0ALRAMGRsAGkAZwA7gOYA5kByoGEgAOA12B7dcgBhAHYAZQA7gOAA4EAAAWVwfBCGEAABZnCAEIQQ8yF5bQCgNSHoAIMQaABhALFjAAFhcI0QWwAAAWNskRCTEHIAAWFnAACgPypkApwQAAAAALEQAKInImFkc3ajEKcQqRCuEG4AZAAAoFUqAKBcKmwib3BlAACgWCoAoFoqAKMgImVsbXJzersQvRDAEN0Q5RDtEACgpCllAACgICJzAGQAYaAhImEEzhDQENIQ1BDWENgQ2hDcEACgqCkAoKkpAKCqKQCgqykAoKwpAKCtKQCgrikAoK8pdAB2oB8iYgBkoL4iAKCdKQABcHTpEOwQaAAAoCIixWDhIXJyAKB8IwABZ3D1EPgQbwBuAAVhZgAA4DXYUt0Ao0giRWFlaW9wBxEJEQ0RDxESERQRAKBwKuMhaXIAoG8qAKBKImQAAKBLInMAJ2DyIW94ZaBIIvEADhFpAG4AZwA7gOUA5UCAAWN0eQAmESoRKxFyAADgNdi23CpgbQBwAGWgSCLxAPgBaQBsAGQAZQA7gOMA40BtAGwAO4DkAORAAAFjaUERRxFvAG4AaQBuAPQA6AFuAHQAAKARKgAITmFiY2RlZmlrbG5vcHJzdWQRaBGXEZ8RpxGrEdIR1hErEjASexKKEn0RThNbE3oTbwB0AACg7SoAAWNybBGJEWsAAAJjZXBzdBF4EX0RghHvIW5nAKBMInAjc2lsb24A9mNyImltZQAAoDUgaQBtAGWgPSJxAACgzSJ2AY0RkRFlAGUAAKC9ImUAZABnoAUjZQAAoAUjcgBrAHSgtSPiIXJrAKC2IwABb3mjEaYRbgDnAHcRMWTxIXVvAKAeIIACY21wcnQAtBG5Eb4RwRHFEeEhdXPloDUi5ABwInR5dgAAoLApcwDpAH0RbgBvAPUA6gCAAWFodwDLEcwRzhGyYwCgNiHlIWVuAKBsInIAAOA12B/dZwCAA2Nvc3R1dncA4xHyEQUSEhIhEiYSKRKAAWFpdQDpEesR7xHwAKMFcgBjAACg7yVwAACgwyKAAWRwdAD4EfwRABJvAHQAAKAAKuwhdXMAoAEqaSJtZXMAAKACKnECCxIAAAAADxLjIXVwAKAGKmEAcgAAoAUm8iNpYW5nbGUAAWR1GhIeEu8hd24AoL0lcAAAoLMlcCJsdXMAAKAEKmUA5QBCD+UAkg9hInJvdwAAoA0pgAFha28ANhJoEncSAAFjbjoSZRJrAIABbHN0AEESRxJNEm8jemVuZ2UAAKDrKXEAdQBhAHIA5QBcBPIjaWFuZ2xlgKG0JWRscgBYElwSYBLvIXduAKC+JeUhZnQAoMIlaSJnaHQAAKC4JWsAAKAjJLEBbRIAAHUSsgFxEgAAcxIAoJIlAKCRJTQAAKCTJWMAawAAoIglAAFlb38ShxJx4D0A5SD1IWl2AOBhIuUgdAAAoBAjAAJwdHd4kRKVEpsSnxJmAADgNdhT3XSgpSJvAG0AAKClIvQhaWUAoMgiAAZESFVWYmRobXB0dXayEsES0RLgEvcS+xIKExoTHxMjEygTNxMAAkxSbHK5ErsSvRK/EgCgVyUAoFQlAKBWJQCgUyUAolAlRFVkdckSyxLNEs8SAKBmJQCgaSUAoGQlAKBnJQACTFJsctgS2hLcEt4SAKBdJQCgWiUAoFwlAKBZJQCjUSVITFJobHLrEu0S7xLxEvMS9RIAoGwlAKBjJQCgYCUAoGslAKBiJQCgXyVvAHgAAKDJKQACTFJscgITBBMGEwgTAKBVJQCgUiUAoBAlAKAMJQCiACVEVWR1EhMUExYTGBMAoGUlAKBoJQCgLCUAoDQlaSJudXMAAKCfIuwhdXMAoJ4iaSJtZXMAAKCgIgACTFJsci8TMRMzEzUTAKBbJQCgWCUAoBglAKAUJQCjAiVITFJobHJCE0QTRhNIE0oTTBMAoGolAKBhJQCgXiUAoDwlAKAkJQCgHCUAAWV2UhNVE3YA5QD5AGIAYQByADuApgCmQAACY2Vpb2ITZhNqE24TcgAA4DXYt9xtAGkAAKBPIG0A5aA9IogRbAAAoVwAYmh0E3YTAKDFKfMhdWIAoMgnbAF+E4QTbABloCIgdAAAoCIgcAAAoU4iRWWJE4sTAKCuKvGgTyI8BeEMqRMAAN8TABQDFB8UAAAjFDQUAAAAAIUUAAAAAI0UAAAAANcU4xT3FPsUAACIFQAAlhWAAWNwcgCuE7ET1RP1IXRlB2GAoikiYWJjZHMAuxO/E8QTzhPSE24AZAAAoEQqciJjdXAAAKBJKgABYXXIE8sTcAAAoEsqcAAAoEcqbwB0AACgQCoA4CkiAP4AAWVv2RPcE3QAAKBBIO4ABAUAAmFlaXXlE+8T9RP4E/AB6hMAAO0TcwAAoE0qbwBuAA1hZABpAGwAO4DnAOdAcgBjAAlhcABzAHOgTCptAACgUCpvAHQAC2GAAWRtbgAIFA0UEhRpAGwAO4C4ALhAcCJ0eXYAAKCyKXQAAIGiADtlGBQZFKJAcgBkAG8A9ABiAXIAAOA12CDdgAFjZWkAKBQqFDIUeQBHZGMAawBtoBMn4SFyawCgEyfHY3IAAKPLJUVjZWZtcz8UQRRHFHcUfBSAFACgwykAocYCZWxGFEkUcQAAoFciZQBhAlAUAAAAAGAUciJyb3cAAAFsclYUWhTlIWZ0AKC6IWkiZ2h0AACguyGAAlJTYWNkAGgUaRRrFG8UcxSuYACgyCRzAHQAAKCbIukhcmMAoJoi4SFzaACgnSJuImludAAAoBAqaQBkAACg7yrjIWlyAKDCKfUhYnN1oGMmaQB0AACgYybsApMUmhS2FAAAwxRvAG4AZaA6APGgVCKrAG0CnxQAAAAAoxRhAHSgLABAYAChASJmbKcUqRTuABMNZQAAAW14rhSyFOUhbnQAoAEiZQDzANIB5wG6FAAAwBRkoEUibwB0AACgbSpuAPQAzAGAAWZyeQDIFMsUzhQA4DXYVN1vAOQA1wEAgakAO3MeAdMUcgAAoBchAAFhb9oU3hRyAHIAAKC1IXMAcwAAoBcnAAFjdeYU6hRyAADgNdi43AABYnDuFPIUZaDPKgCg0SploNAqAKDSKuQhb3QAoO8igANkZWxwcnZ3AAYVEBUbFSEVRBVlFYQV4SFycgABbHIMFQ4VAKA4KQCgNSlwAhYVAAAAABkVcgAAoN4iYwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/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 UJ;var YD=N(()=>{(function(J){J[J.VALUE_LENGTH=49152]="VALUE_LENGTH",J[J.FLAG13=8192]="FLAG13",J[J.BRANCH_LENGTH=8064]="BRANCH_LENGTH",J[J.JUMP_TABLE=127]="JUMP_TABLE"})(UJ||(UJ={}))});function mj(J){return J>=h1.ZERO&&J<=h1.NINE}function yI(J){return J>=h1.UPPER_A&&J<=h1.UPPER_F||J>=h1.LOWER_A&&J<=h1.LOWER_F}function TI(J){return J>=h1.UPPER_A&&J<=h1.UPPER_Z||J>=h1.LOWER_A&&J<=h1.LOWER_Z||mj(J)}function uI(J){return J===h1.EQUALS||TI(J)}class cj{constructor(J,z,Y){this.decodeTree=J,this.emitCodePoint=z,this.errors=Y,this.state=YJ.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=BY.Strict,this.runConsumed=0}startEntity(J){this.decodeMode=J,this.state=YJ.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(J,z){switch(this.state){case YJ.EntityStart:{if(J.charCodeAt(z)===h1.NUM)return this.state=YJ.NumericStart,this.consumed+=1,this.stateNumericStart(J,z+1);return this.state=YJ.NamedEntity,this.stateNamedEntity(J,z)}case YJ.NumericStart:return this.stateNumericStart(J,z);case YJ.NumericDecimal:return this.stateNumericDecimal(J,z);case YJ.NumericHex:return this.stateNumericHex(J,z);case YJ.NamedEntity:return this.stateNamedEntity(J,z)}}stateNumericStart(J,z){if(z>=J.length)return-1;if((J.charCodeAt(z)|ZD)===h1.LOWER_X)return this.state=YJ.NumericHex,this.consumed+=1,this.stateNumericHex(J,z+1);return this.state=YJ.NumericDecimal,this.stateNumericDecimal(J,z)}stateNumericHex(J,z){while(z<J.length){let Y=J.charCodeAt(z);if(mj(Y)||yI(Y)){let Z=Y<=h1.NINE?Y-h1.ZERO:(Y|ZD)-h1.LOWER_A+10;this.result=this.result*16+Z,this.consumed++,z++}else return this.emitNumericEntity(Y,3)}return-1}stateNumericDecimal(J,z){while(z<J.length){let Y=J.charCodeAt(z);if(mj(Y))this.result=this.result*10+(Y-h1.ZERO),this.consumed++,z++;else return this.emitNumericEntity(Y,2)}return-1}emitNumericEntity(J,z){var Y;if(this.consumed<=z)return(Y=this.errors)===null||Y===void 0||Y.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(J===h1.SEMI)this.consumed+=1;else if(this.decodeMode===BY.Strict)return 0;if(this.emitCodePoint(s4(this.result),this.consumed),this.errors){if(J!==h1.SEMI)this.errors.missingSemicolonAfterCharacterReference();this.errors.validateNumericCharacterReference(this.result)}return this.consumed}stateNamedEntity(J,z){let{decodeTree:Y}=this,Z=Y[this.treeIndex],G=(Z&UJ.VALUE_LENGTH)>>14;while(z<J.length){if(G===0&&(Z&UJ.FLAG13)!==0){let Q=(Z&UJ.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let f=Z&UJ.JUMP_TABLE;if(J.charCodeAt(z)!==f)return this.result===0?0:this.emitNotTerminatedNamedEntity();z++,this.excess++,this.runConsumed++}while(this.runConsumed<Q){if(z>=J.length)return-1;let f=this.runConsumed-1,H=Y[this.treeIndex+1+(f>>1)],B=f%2===0?H&255:H>>8&255;if(J.charCodeAt(z)!==B)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();z++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(Q>>1),Z=Y[this.treeIndex],G=(Z&UJ.VALUE_LENGTH)>>14}if(z>=J.length)break;let X=J.charCodeAt(z);if(X===h1.SEMI&&G!==0&&(Z&UJ.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.treeIndex=EI(Y,Z,this.treeIndex+Math.max(1,G),X),this.treeIndex<0)return this.result===0||this.decodeMode===BY.Attribute&&(G===0||uI(X))?0:this.emitNotTerminatedNamedEntity();if(Z=Y[this.treeIndex],G=(Z&UJ.VALUE_LENGTH)>>14,G!==0){if(X===h1.SEMI)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.decodeMode!==BY.Strict&&(Z&UJ.FLAG13)===0)this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0}z++,this.excess++}return-1}emitNotTerminatedNamedEntity(){var J;let{result:z,decodeTree:Y}=this,Z=(Y[z]&UJ.VALUE_LENGTH)>>14;return this.emitNamedEntityData(z,Z,this.consumed),(J=this.errors)===null||J===void 0||J.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(J,z,Y){let{decodeTree:Z}=this;if(this.emitCodePoint(z===1?Z[J]&~(UJ.VALUE_LENGTH|UJ.FLAG13):Z[J+1],Y),z===3)this.emitCodePoint(Z[J+2],Y);return Y}end(){var J;switch(this.state){case YJ.NamedEntity:return this.result!==0&&(this.decodeMode!==BY.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case YJ.NumericDecimal:return this.emitNumericEntity(0,2);case YJ.NumericHex:return this.emitNumericEntity(0,3);case YJ.NumericStart:return(J=this.errors)===null||J===void 0||J.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case YJ.EntityStart:return 0}}}function xI(J){let z="",Y=new cj(J,(Z)=>z+=o4(Z));return function(G,X){let Q=0,f=0;while((f=G.indexOf("&",f))>=0){z+=G.slice(Q,f),Y.startEntity(X);let B=Y.write(G,f+1);if(B<0){Q=f+Y.end();break}Q=f+B,f=B===0?Q+1:Q}let H=z+G.slice(Q);return z="",H}}function EI(J,z,Y,Z){let G=(z&UJ.BRANCH_LENGTH)>>7,X=z&UJ.JUMP_TABLE;if(G===0)return X!==0&&Z===X?Y:-1;if(X){let B=Z-X;return B<0||B>=G?-1:J[Y+B]-1}let Q=G+1>>1,f=0,H=G-1;while(f<=H){let B=f+H>>>1,V=B>>1,K=J[Y+V]>>(B&1)*8&255;if(K<Z)f=B+1;else if(K>Z)H=B-1;else return J[Y+Q+B]}return-1}function EZ(J,z=BY.Legacy){return wI(J,z)}var h1,ZD=32,YJ,BY,wI;var GD=N(()=>{t4();zD();YD();(function(J){J[J.NUM=35]="NUM",J[J.SEMI=59]="SEMI",J[J.EQUALS=61]="EQUALS",J[J.ZERO=48]="ZERO",J[J.NINE=57]="NINE",J[J.LOWER_A=97]="LOWER_A",J[J.LOWER_F=102]="LOWER_F",J[J.LOWER_X=120]="LOWER_X",J[J.LOWER_Z=122]="LOWER_Z",J[J.UPPER_A=65]="UPPER_A",J[J.UPPER_F=70]="UPPER_F",J[J.UPPER_Z=90]="UPPER_Z"})(h1||(h1={}));(function(J){J[J.EntityStart=0]="EntityStart",J[J.NumericStart=1]="NumericStart",J[J.NumericDecimal=2]="NumericDecimal",J[J.NumericHex=3]="NumericHex",J[J.NamedEntity=4]="NamedEntity"})(YJ||(YJ={}));(function(J){J[J.Legacy=0]="Legacy",J[J.Strict=1]="Strict",J[J.Attribute=2]="Attribute"})(BY||(BY={}));wI=xI(JD)});var XD,QD;var fD=N(()=>{GD();(function(J){J[J.XML=0]="XML",J[J.HTML=1]="HTML"})(XD||(XD={}));(function(J){J[J.UTF8=0]="UTF8",J[J.ASCII=1]="ASCII",J[J.Extensive=2]="Extensive",J[J.Attribute=3]="Attribute",J[J.Text=4]="Text"})(QD||(QD={}))});import{CliRenderer as hI,createCliRenderer as vI,engine as mI}from"@opentui/core";import{createTestRenderer as hl}from"@opentui/core/testing";import{ASCIIFontRenderable as cI,BoxRenderable as dI,CodeRenderable as nI,DiffRenderable as iI,InputRenderable as lI,LineNumberRenderable as $I,MarkdownRenderable as aI,ScrollBoxRenderable as _I,SelectRenderable as pI,TabSelectRenderable as rI,TextareaRenderable as oI,TextAttributes as dj,TextNodeRenderable as sI,TextRenderable as tI}from"@opentui/core";import{engine as cl,Timeline as dl}from"@opentui/core";import{BaseRenderable as KD,createTextAttributes as Jy,InputRenderable as nj,InputRenderableEvents as rX,isTextNodeRenderable as $j,parseColor as HD,Renderable as zy,RootTextNodeRenderable as Yy,ScrollBoxRenderable as Zy,SelectRenderable as BD,SelectRenderableEvents as ij,TabSelectRenderable as jD,TabSelectRenderableEvents as lj,TextNodeRenderable as Gy,TextRenderable as UD}from"@opentui/core";import{BaseRenderable as Vy,isTextNodeRenderable as Ky,TextNodeRenderable as Uy,TextRenderable as Dy,Yoga as VD}from"@opentui/core";import{BoxRenderable as sl,RootRenderable as tl}from"@opentui/core";import{TimeToFirstDrawRenderable as Oy}from"@opentui/core";import{createSlotRegistry as z$}from"@opentui/core";function Qy({createElement:J,createTextNode:z,createSlotNode:Y,isTextNode:Z,replaceText:G,insertNode:X,removeNode:Q,setProperty:f,getParentNode:H,getFirstChild:B,getNextSibling:V}){function j(S,O,C,y){if(C!==void 0&&!y)y=[];if(typeof O!=="function")return K(S,O,y,C);bz((a)=>K(S,O(),a,C),y)}function K(S,O,C,y,a){while(typeof C==="function")C=C();if(O===C)return C;let l=typeof O,t=y!==void 0;if(l==="string"||l==="number"){if(l==="number")O=O.toString();if(t){let J0=C[0];if(J0&&Z(J0))G(J0,O);else J0=z(O);C=F(S,C,y,J0)}else if(C!==""&&typeof C==="string")G(B(S),C=O);else F(S,C,y,z(O)),C=O}else if(O==null||l==="boolean")C=F(S,C,y);else if(l==="function")return bz(()=>{let J0=O();while(typeof J0==="function")J0=J0();C=K(S,J0,C,y)}),()=>C;else if(Array.isArray(O)){let J0=[];if(L(J0,O,a))return bz(()=>C=K(S,J0,C,y,!0)),()=>C;if(J0.length===0){let T=F(S,C,y);if(t)return C=T}else if(Array.isArray(C))if(C.length===0)g(S,J0,y);else A(S,C,J0);else if(C==null||C==="")g(S,J0);else A(S,t&&C||[B(S)],J0);C=J0}else{if(Array.isArray(C)){if(t)return C=F(S,C,y,O);F(S,C,null,O)}else if(C==null||C===""||!B(S))X(S,O);else u(S,O,B(S));C=O}return C}function L(S,O,C){let y=!1;for(let a=0,l=O.length;a<l;a++){let t=O[a],J0;if(t==null||t===!0||t===!1);else if(Array.isArray(t))y=L(S,t)||y;else if((J0=typeof t)==="string"||J0==="number")S.push(z(t));else if(J0==="function")if(C){while(typeof t==="function")t=t();y=L(S,Array.isArray(t)?t:[t])||y}else S.push(t),y=!0;else S.push(t)}return y}function A(S,O,C){let y=C.length,a=O.length,l=y,t=0,J0=0,T=V(O[a-1]),Q0=null;while(t<a||J0<l){if(O[t]===C[J0]){t++,J0++;continue}while(O[a-1]===C[l-1])a--,l--;if(a===t){let r=l<y?J0?V(C[J0-1]):C[l-J0]:T;while(J0<l)X(S,C[J0++],r)}else if(l===J0)while(t<a){if(!Q0||!Q0.has(O[t]))Q(S,O[t]);t++}else if(O[t]===C[l-1]&&C[J0]===O[a-1]){let r=V(O[--a]);X(S,C[J0++],V(O[t++])),X(S,C[--l],r),O[a]=C[l]}else{if(!Q0){Q0=new Map;let W0=J0;while(W0<l)Q0.set(C[W0],W0++)}let r=Q0.get(O[t]);if(r!=null)if(J0<r&&r<l){let W0=t,O0=1,K0;while(++W0<a&&W0<l){if((K0=Q0.get(O[W0]))==null||K0!==r+O0)break;O0++}if(O0>r-J0){let _=O[t];while(J0<r)X(S,C[J0++],_)}else u(S,C[J0++],O[t++])}else t++;else Q(S,O[t++])}}}function F(S,O,C,y){if(C===void 0){let l;while(l=B(S))Q(S,l);return y&&X(S,y),y??""}let a=y||Y();if(O.length){let l=!1;for(let t=O.length-1;t>=0;t--){let J0=O[t];if(a!==J0){let T=H(J0)===S;if(!l&&!t)T?u(S,a,J0):X(S,a,C);else T&&Q(S,J0)}else l=!0}}else X(S,a,C);return[a]}function g(S,O,C){for(let y=0,a=O.length;y<a;y++)X(S,O[y],C)}function u(S,O,C){X(S,O,C),Q(S,C)}function s(S,O,C={},y){if(O||(O={}),!y)bz(()=>C.children=K(S,O.children,C.children));return bz(()=>O.ref&&O.ref(S)),bz(()=>{for(let a in O){if(a==="children"||a==="ref")continue;let l=O[a];if(l===C[a])continue;f(S,a,l,C[a]),C[a]=l}}),C}return{render(S,O){let C;return KZ((y)=>{C=y,j(O,S())}),C},insert:j,spread(S,O,C){if(typeof O==="function")bz((y)=>s(S,O(),y,C));else s(S,O,void 0,C)},createElement:J,createTextNode:z,insertNode:X,setProp(S,O,C,y){return f(S,O,C,y),C},mergeProps:Uq,effect:bz,memo:Xy,createComponent:LV,use(S,O,C){return _1(()=>S(O,C))}}}function qy(J){let z=Qy(J);return z.mergeProps=Uq,z}function oj(J){if(!of.has(J))of.set(J,0);let z=of.get(J)+1;return of.set(J,z),`${J}-${z}`}function fy(J,z,Y){if(ZJ("Inserting node:",s1(z),"into parent:",s1(J),"with anchor:",s1(Y),z instanceof vG),z instanceof oX)z.parent=J,z=z.getSlotChild(J);if(Y&&Y instanceof oX)Y=Y.getSlotChild(J);if($j(z)){if(!(J instanceof UD)&&!$j(J))throw Error(`Orphan text error: "${z.toChunks().map((X)=>X.text).join("")}" must have a <text> as a parent: ${J.id} above ${z.id}`)}if(!(J instanceof KD))throw console.error("[INSERT]","Tried to mount a non base renderable"),Error("Tried to mount a non base renderable");if(!Y){J.add(z);return}let Z=aj(J),G=Z.findIndex((X)=>X.id===Y.id);if(G===-1)ZJ("[INSERT]","Could not find anchor",s1(J),s1(Y),"[children]",...Z.map((X)=>X.id));J.add(z,G)}function Hy(J,z){if(ZJ("Removing node:",s1(z),"from parent:",s1(J)),z instanceof oX)z.parent=null,z=z.getSlotChild(J);J.remove(z.id),process.nextTick(()=>{if(z instanceof KD&&!z.parent){z.destroyRecursively();return}})}function By(J){ZJ("Creating text node:",J);let z=oj("text-node");if(typeof J==="number")J=J.toString();return vG.fromString(EZ(J),{id:z})}function jy(){let J=oj("slot-node");return ZJ("Creating slot node",J),new oX(J)}function WD(J){ZJ("Getting parent of node:",s1(J));let z=J.parent??void 0;if(z instanceof Yy)z=z.textParent??void 0;let Y=z?.parent?.parent?.parent;if(Y instanceof Zy&&Y.content===z)z=Y;return z}function My(J){Object.assign(RD,J)}function Fy(){return RD}var rj,HJ=()=>{let J=EJ(rj);if(!J)throw Error("No renderer found");return J},eI=(J)=>{let z=HJ();JJ(()=>{z.on("resize",J)}),N1(()=>{z.off("resize",J)})},Pz=()=>{let J=HJ(),[z,Y]=p({width:J.width,height:J.height});return eI((G,X)=>{Y({width:G,height:X})}),z},Xy=(J)=>U0(()=>J()),of,ZJ=(...J)=>{if(process.env.DEBUG)console.log("[Reconciler]",...J)},vG,s1=(J)=>{if(!J)return;return J.id},aj=(J)=>{let z;if(J instanceof UD)z=J.getTextChildren();else z=J.getChildren();return z},Wy,x,T0,b,W,E0,D,U,pl,q,DD,lY,sj,LD,MD,oX,sX,sf,_j,pj,FD,OD,AD,Ly,RD,Ay=(J,z)=>{let Y,Z=!1,G=!1,X=!0,Q=!1,f=J.destroy.bind(J),H=()=>{if(G)return;if(!Y){Z=!0;return}G=!0,Y()};J.once("destroy",H),J.destroy=()=>{if(X){Q=!0;return}f()};try{Y=Wy(()=>b(rj.Provider,{get value(){return J},get children(){return b(z,{})}}),J.root)}finally{X=!1,J.destroy=f}if(Z)H();if(Q)f()},gD=async(J,z={})=>{let Y=z instanceof hI?z:await vI({...z,onDestroy:()=>{z.onDestroy?.()}});mI.attach(Y),Ay(Y,J)};var w=N(()=>{j1();fD();j1();j1();j1();rj=Sz();of=new Map;vG=class vG extends Gy{static fromString(J,z={}){let Y=new vG(z);return Y.add(J),Y}};({render:Wy,effect:x,memo:T0,createComponent:b,createElement:W,createTextNode:E0,insertNode:D,insert:U,spread:pl,setProp:q,mergeProps:DD,use:lY}=qy({createElement(J){ZJ("Creating element:",J);let z=oj(J),Y=EJ(rj);if(!Y)throw Error("No renderer found");let Z=Fy();if(!Z[J])throw Error(`[Reconciler] Unknown component type: ${J}`);let G=new Z[J](Y,{id:z});return ZJ("Element created with id:",z),G},createTextNode:By,createSlotNode:jy,replaceText(J,z){if(ZJ("Replacing text:",z,"in node:",s1(J)),!(J instanceof vG))return;J.replace(EZ(z),0)},setProperty(J,z,Y,Z){if(z.startsWith("on:")){let G=z.slice(3);if(Y)J.on(G,Y);if(Z)J.off(G,Z);return}if($j(J)){if(z==="href"){J.link={url:Y};return}if(z==="style"){J.attributes|=Jy(Y),J.fg=Y.fg?HD(Y.fg):J.fg,J.bg=Y.bg?HD(Y.bg):J.bg;return}return}switch(z){case"id":ZJ("Id mapped",J.id,"=",Y),J[z]=Y;break;case"focused":if(!(J instanceof zy))return;if(Y)J.focus();else J.blur();break;case"onChange":let G=void 0;if(J instanceof BD)G=ij.SELECTION_CHANGED;else if(J instanceof jD)G=lj.SELECTION_CHANGED;else if(J instanceof nj)G=rX.CHANGE;if(!G)break;if(Y)J.on(G,Y);if(Z)J.off(G,Z);break;case"onInput":if(J instanceof nj){if(Y)J.on(rX.INPUT,Y);if(Z)J.off(rX.INPUT,Z)}break;case"onSubmit":if(J instanceof nj){if(Y)J.on(rX.ENTER,Y);if(Z)J.off(rX.ENTER,Z)}else J[z]=Y;break;case"onSelect":if(J instanceof BD){if(Y)J.on(ij.ITEM_SELECTED,Y);if(Z)J.off(ij.ITEM_SELECTED,Z)}else if(J instanceof jD){if(Y)J.on(lj.ITEM_SELECTED,Y);if(Z)J.off(lj.ITEM_SELECTED,Z)}break;case"style":for(let X in Y){let Q=Y[X];if(Z!==void 0&&Q===Z[X])continue;J[X]=Q}break;case"text":case"content":{let X=typeof Y==="string"?Y:Array.isArray(Y)?Y.join(""):`${Y}`;J[z]=EZ(X);break}default:J[z]=Y}},isTextNode(J){return J instanceof vG},insertNode:fy,removeNode:Hy,getParentNode:WD,getFirstChild(J){ZJ("Getting first child of node:",s1(J));let z=aj(J)[0];if(!z){ZJ("No first child found for node:",s1(J));return}return ZJ("First child found:",s1(z),"for node:",s1(J)),z},getNextSibling(J){ZJ("Getting next sibling of node:",s1(J));let z=WD(J);if(!z){ZJ("No parent found for node:",s1(J));return}let Y=aj(z),Z=Y.indexOf(J);if(Z===-1||Z===Y.length-1){ZJ("No next sibling found for node:",s1(J));return}let G=Y[Z+1];if(!G){ZJ("Next sibling is null for node:",s1(J));return}return ZJ("Next sibling found:",s1(G),"for node:",s1(J)),G}}));sj=class sj extends Vy{constructor(J){super({id:J})}add(J,z){throw Error("Can't add children on an Slot renderable")}getChildren(){return[]}remove(J){}insertBefore(J,z){throw Error("Can't add children on an Slot renderable")}getRenderable(J){return}getChildrenCount(){return 0}requestRender(){}findDescendantById(J){return}};LD=class LD extends Uy{slotParent;destroyed=!1;constructor(J,z){super({id:J});this._visible=!1,this.slotParent=z}destroy(){if(this.destroyed)return;this.destroyed=!0,this.slotParent?.destroy(),super.destroy()}};MD=class MD extends sj{yogaNode;slotParent;destroyed=!1;constructor(J,z){super(J);this._visible=!1,this.slotParent=z,this.yogaNode=VD.default.Node.create(),this.yogaNode.setDisplay(VD.Display.None)}getLayoutNode(){return this.yogaNode}updateFromLayout(){}updateLayout(){}onRemove(){}destroy(){if(this.destroyed)return;this.destroyed=!0,super.destroy(),this.slotParent?.destroy()}};oX=class oX extends sj{layoutNode;textNode;destroyed=!1;constructor(J){super(J);this._visible=!1}getSlotChild(J){if(Ky(J)||J instanceof Dy){if(!this.textNode)this.textNode=new LD(`slot-text-${this.id}`,this);return this.textNode}if(!this.layoutNode)this.layoutNode=new MD(`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()}};sX=class sX extends sI{_ctx;constructor(J,z){super(z);this._ctx=J}};sf=class sf extends sX{constructor(J,z){super(null,J);if(z==="b"||z==="strong")this.attributes=(this.attributes||0)|dj.BOLD;else if(z==="i"||z==="em")this.attributes=(this.attributes||0)|dj.ITALIC;else if(z==="u")this.attributes=(this.attributes||0)|dj.UNDERLINE}};_j=class _j extends sf{constructor(J){super(J,"b")}};pj=class pj extends sf{constructor(J){super(J,"i")}};FD=class FD extends sf{constructor(J){super(J,"u")}};OD=class OD extends sX{constructor(J,z){super(null,z);this.add()}add(){return super.add(`
262
+ `)}};AD=class AD extends sX{constructor(J,z){let Y={...z,link:{url:z.href}};super(null,Y)}};Ly={box:dI,text:tI,input:lI,select:pI,textarea:oI,ascii_font:cI,tab_select:rI,scrollbox:_I,code:nI,diff:iI,line_number:$I,markdown:aI,span:sX,strong:_j,b:_j,em:pj,i:pj,u:FD,br:OD,a:AD},RD={...Ly};My({time_to_first_draw:Oy})});function jY(J){if(J===void 0)return"undefined";if(J===null)return"null";let z=Array.isArray(J)?"array":typeof J,Y;try{Y=typeof J==="string"?J:JSON.stringify(J)}catch{Y=String(J)}if(Y.length>120)Y=`${Y.slice(0,120)}\u2026`;return`${z}:${Y}`}function Ry(J){let z=J?.changes;if(!z||typeof z!=="object"||Array.isArray(z))return null;let Y=new Map;for(let[Z,G]of Object.entries(z)){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 gy(J,z){if(J.size!==z.size)return!1;for(let[Y,Z]of J){let G=z.get(Y);if(!G||!wz(Z,G))return!1}return!0}function Cy(J){let z=J?.activity;if(!z||typeof z!=="object"||Array.isArray(z))return null;let Y=new Map;for(let[Z,G]of Object.entries(z)){let X=G;if(typeof X?.mtimeMs!=="number"||typeof X.completionAt!=="number")return null;if(X.completionId!==null&&typeof X.completionId!=="string")return null;Y.set(Z,{mtimeMs:X.mtimeMs,completionId:X.completionId,completionAt:X.completionAt})}return Y}function Ny(J,z){if(J.size!==z.size)return!1;for(let[Y,Z]of J){let G=z.get(Y);if(!G||G.mtimeMs!==Z.mtimeMs||G.completionId!==Z.completionId||G.completionAt!==Z.completionAt)return!1}return!0}class DJ{client;tasksAcc;setTasks;activeTaskAcc;setActiveTaskSig;updateAcc;setUpdateSig;daemonVersionAcc;setDaemonVersionSig;engineStateAcc;setEngineStateSig;taskJobsAcc;setTaskJobsSig;worktreeChangesAcc;setWorktreeChangesSig;transcriptActivityAcc;setTranscriptActivitySig;uiPrefsAcc;setUiPrefsSig;keybindingsRevAcc;setKeybindingsRevSig;connectionStateAcc;setConnectionState;ensureReachable;role;channels;subscribesTasks;reconnecting=!1;constructor(J,z={}){this.client=J;let[Y,Z]=p([]),[G,X]=p(null),[Q,f]=p(null),[H,B]=p(null),[V,j]=p(new Map),[K,L]=p(new Map),[A,F]=p(null),[g,u]=p(null),[s,S]=p(null),[O,C]=p(null),[y,a]=p("online");this.tasksAcc=Y,this.setTasks=(l)=>Z(()=>l),this.activeTaskAcc=G,this.setActiveTaskSig=(l)=>X(()=>l),this.updateAcc=Q,this.setUpdateSig=(l)=>f(()=>l),this.daemonVersionAcc=H,this.setDaemonVersionSig=(l)=>B(()=>l),this.engineStateAcc=V,this.setEngineStateSig=(l)=>j(()=>l),this.taskJobsAcc=K,this.setTaskJobsSig=(l)=>L(()=>l),this.worktreeChangesAcc=A,this.setWorktreeChangesSig=(l)=>F(()=>l),this.transcriptActivityAcc=g,this.setTranscriptActivitySig=(l)=>u(()=>l),this.uiPrefsAcc=s,this.setUiPrefsSig=(l)=>S(()=>l),this.keybindingsRevAcc=O,this.setKeybindingsRevSig=(l)=>C(()=>l),this.connectionStateAcc=y,this.setConnectionState=(l)=>a(()=>l),this.ensureReachable=z.ensureReachable??TG,this.role=z.role??"pane",this.channels=z.channels,this.subscribesTasks=!z.channels||z.channels.includes("task.snapshot"),this.client.on("*",(l)=>this.handleEvent(l.name,l.payload)),this.client.onLifecycle("close",()=>{if(this.setConnectionState("disconnected"),this.role==="pane")rz("orch","daemon socket closed \u2014 starting non-spawning reconnect loop"),this.reconnectLoop()})}async reconnectLoop(){if(this.reconnecting)return;this.reconnecting=!0;let J=500,z=0;while(!this.client.isDisposed){if(await new Promise((Y)=>setTimeout(Y,J)),this.client.isDisposed)break;z++;try{await this.init(),rz("orch",`reconnected and re-subscribed after ${z} attempt(s) \u2014 task list re-synced`),this.reconnecting=!1;return}catch(Y){if(z===1||z%10===0)o1("orch-reconnect",Y);J=Math.min(J*2,3000)}}this.reconnecting=!1}async init(){let J=await this.client.request("hello",{protocolVersion:lJ,minProtocolVersion:MY}),z=typeof J.protocolVersion==="number"?J.protocolVersion:lJ,Y=typeof J.minProtocolVersion==="number"?J.minProtocolVersion:z;if(!yQ({localVersion:lJ,localMin:MY,remoteVersion:z,remoteMin:Y}))throw Error(`kobe daemon is protocol v${z} (min v${Y}); this client is v${lJ} (min v${MY}). Restart the daemon (\`kobe daemon restart\`) or upgrade kobe.`);if(this.setDaemonVersionSig(typeof J.kobeVersion==="string"?J.kobeVersion:null),J.tasks&&this.subscribesTasks)this.setTasks(J.tasks.map(tX));if(await this.client.subscribe({role:this.role,channels:this.channels}),J.capabilities?.includes("worktree.changes")){if(this.worktreeChangesAcc()===null)this.setWorktreeChangesSig(new Map)}else this.setWorktreeChangesSig(null);if(J.capabilities?.includes("transcript.activity")){if(this.transcriptActivityAcc()===null)this.setTranscriptActivitySig(new Map)}else this.setTranscriptActivitySig(null);this.setConnectionState("online"),rz("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()=>vW(this.daemonVersionAcc()??void 0,t0)}engineStateSignal(){return this.engineStateAcc}taskJobsSignal(){return this.taskJobsAcc}worktreeChangesSignal(){return this.worktreeChangesAcc}transcriptActivitySignal(){return this.transcriptActivityAcc}uiPrefsSignal(){return this.uiPrefsAcc}keybindingsRevSignal(){return this.keybindingsRevAcc}listTasks(){return this.tasksAcc()}getTask(J){return this.tasksAcc().find((z)=>z.id===J)}subscribeTasks(J){try{J(this.listTasks())}catch(Y){console.error("[kobe RemoteOrchestrator] task listener threw on subscribe:",Y)}let z=!0;return KZ((Y)=>{return Y1(()=>{let Z=this.tasksAcc();if(z){z=!1;return}try{J(Z)}catch(G){console.error("[kobe RemoteOrchestrator] task listener threw:",G)}}),Y})}async createTask(J){let{modelEffort:z,...Y}=J,Z=await this.client.request("task.create",{...Y,effort:z});return tX(Z.task)}async ensureMainTask(J){let z=await this.client.request("task.ensureMain",{repo:J});return tX(z.task)}async ensureWorktree(J){return(await this.client.request("task.ensureWorktree",{taskId:String(J)})).worktreePath}async forgetProject(J){await this.client.request("project.forget",{repo:J})}async setTitle(J,z){await this.client.request("task.rename",{taskId:String(J),title:z})}async setBranch(J,z){await this.client.request("task.setBranch",{taskId:String(J),branch:z})}async setVendor(J,z){await this.client.request("task.setVendor",{taskId:String(J),vendor:z})}async setPinned(J,z){await this.client.request("task.pin",{taskId:String(J),pinned:z})}async moveTask(J,z){await this.client.request("task.move",{taskId:String(J),direction:z<0?"up":"down"})}async setArchived(J,z){await this.client.request("task.archive",{taskId:String(J),archived:z})}async setStatus(J,z){await this.client.request("task.status",{taskId:String(J),status:z})}async deleteTask(J,z){await this.client.request("task.delete",{taskId:String(J),force:z?.force})}async discoverAdoptableWorktrees(J){return(await this.client.request("worktree.discoverAdoptable",{repo:J})).worktrees}async adoptWorktree(J){let z=await this.client.request("worktree.adopt",J);return tX(z.task)}async setActiveTask(J){await this.client.request("task.setActive",{taskId:J===null?null:String(J)})}handleEvent(J,z){if(J==="task.snapshot"){let Y=z?.tasks;if(Array.isArray(Y))this.setTasks(Y.map(tX)),this.pruneEngineState(Y),this.pruneTaskJobs(Y);else o1("orch",`dropped task.snapshot event: tasks is not an array (got ${jY(Y)})`);return}if(J==="active-task"){let Y=z?.taskId;this.setActiveTaskSig(typeof Y==="string"?Y:null);return}if(J==="update"){let Y=z?.info;this.setUpdateSig(Y??null);return}if(J==="engine-state"){let Y=z;if(typeof Y?.taskId!=="string"||typeof Y.state!=="string"){o1("orch",`dropped engine-state event: taskId/state must be strings (taskId=${jY(Y?.taskId)}, state=${jY(Y?.state)})`);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(J==="task.jobs"){let Y=z;if(typeof Y?.taskId!=="string"||Y.kind!=="ensureWorktree"){o1("orch",`dropped task.jobs event: expected string taskId + kind "ensureWorktree" (taskId=${jY(Y?.taskId)}, kind=${jY(Y?.kind)})`);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(J==="worktree.changes"){let Y=Ry(z);if(!Y){o1("orch",`dropped worktree.changes event: malformed changes payload (${jY(z)})`);return}let Z=this.worktreeChangesAcc();if(Z&&gy(Z,Y))return;this.setWorktreeChangesSig(Y);return}if(J==="transcript.activity"){let Y=Cy(z);if(!Y){o1("orch",`dropped transcript.activity event: malformed activity payload (${jY(z)})`);return}let Z=this.transcriptActivityAcc();if(Z&&Ny(Z,Y))return;this.setTranscriptActivitySig(Y);return}if(J==="ui-prefs"){let Y=z;if(typeof Y?.theme!=="string"){o1("orch",`dropped ui-prefs event: theme must be a string (got ${jY(Y?.theme)})`);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(J==="keybindings"){let Y=z;if(typeof Y?.rev!=="number"){o1("orch",`dropped keybindings event: rev must be a number (got ${jY(Y?.rev)})`);return}this.setKeybindingsRevSig(Y.rev);return}}pruneEngineState(J){let z=this.engineStateAcc();if(z.size===0)return;let Y=new Set(J.map((G)=>G.id)),Z=null;for(let G of z.keys()){if(Y.has(G))continue;if(!Z)Z=new Map(z);Z.delete(G)}if(Z)this.setEngineStateSig(Z)}pruneTaskJobs(J){let z=this.taskJobsAcc();if(z.size===0)return;let Y=new Set(J.map((G)=>G.id)),Z=null;for(let G of z.keys()){if(Y.has(G))continue;if(!Z)Z=new Map(z);Z.delete(G)}if(Z)this.setTaskJobsSig(Z)}}function tX(J){return{id:jX(J.id),title:J.title,repo:J.repo,branch:J.branch,worktreePath:J.worktreePath,kind:J.kind,status:J.status,archived:J.archived,pinned:J.pinned,vendor:J.vendor,prStatus:J.prStatus,modelEffort:J.modelEffort,createdAt:J.createdAt,updatedAt:J.updatedAt}}var $Y=N(()=>{XZ();OJ();ZZ();j1();SG();pJ();FJ()});function kD(J){let z=J[Hz];if(!z){if(Object.defineProperty(J,Hz,{value:z=new Proxy(J,Sy)}),!Array.isArray(J)){let Y=Object.keys(J),Z=Object.getOwnPropertyDescriptors(J),G=Object.getPrototypeOf(J),X=G!==null&&J!==null&&typeof J==="object"&&!Array.isArray(J)&&G!==Object.prototype;if(X){let Q=Object.getOwnPropertyDescriptors(G);Y.push(...Object.keys(Q)),Object.assign(Z,Q)}for(let Q=0,f=Y.length;Q<f;Q++){let H=Y[Q];if(X&&H==="constructor")continue;if(Z[H].get)Object.defineProperty(J,H,{configurable:!0,enumerable:Z[H].enumerable,get:Z[H].get.bind(z)})}}}return z}function tf(J){let z;return J!=null&&typeof J==="object"&&(J[Hz]||!(z=Object.getPrototypeOf(J))||z===Object.prototype||Array.isArray(J))}function JQ(J,z=new Set){let Y,Z,G,X;if(Y=J!=null&&J[tj])return Y;if(!tf(J)||z.has(J))return J;if(Array.isArray(J)){if(Object.isFrozen(J))J=J.slice(0);else z.add(J);for(let Q=0,f=J.length;Q<f;Q++)if(G=J[Q],(Z=JQ(G,z))!==G)J[Q]=Z}else{if(Object.isFrozen(J))J=Object.assign({},J);else z.add(J);let Q=Object.keys(J),f=Object.getOwnPropertyDescriptors(J);for(let H=0,B=Q.length;H<B;H++){if(X=Q[H],f[X].get)continue;if(G=J[X],(Z=JQ(G,z))!==G)J[X]=Z}}return J}function ef(J,z){let Y=J[z];if(!Y)Object.defineProperty(J,z,{value:Y=Object.create(null)});return Y}function zQ(J,z,Y){if(J[z])return J[z];let[Z,G]=p(Y,{equals:!1,internal:!0});return Z.$=G,J[z]=Z}function ky(J,z){let Y=Reflect.getOwnPropertyDescriptor(J,z);if(!Y||Y.get||!Y.configurable||z===Hz||z===mG)return Y;return delete Y.value,delete Y.writable,Y.get=()=>J[Hz][z],Y}function bD(J){Kq()&&zQ(ef(J,mG),ND)()}function by(J){return bD(J),Reflect.ownKeys(J)}function JH(J,z,Y,Z=!1){if(z==="__proto__"){console.warn('Refusing to set "__proto__" on a store.');return}if(!Z&&J[z]===Y)return;let G=J[z],X=J.length;if(CD.onStoreNodeUpdate&&CD.onStoreNodeUpdate(J,z,Y,G),Y===void 0){if(delete J[z],J[WY]&&J[WY][z]&&G!==void 0)J[WY][z].$()}else if(J[z]=Y,J[WY]&&J[WY][z]&&G===void 0)J[WY][z].$();let Q=ef(J,mG),f;if(f=zQ(Q,z,G))f.$(()=>Y);if(Array.isArray(J)&&J.length!==X){for(let H=J.length;H<X;H++)(f=Q[H])&&f.$();(f=zQ(Q,"length",X))&&f.$(J.length)}(f=Q[ND])&&f.$()}function SD(J,z){let Y=Object.keys(z);for(let Z=0;Z<Y.length;Z+=1){let G=Y[Z];if(ID(G))continue;JH(J,G,z[G])}}function ID(J){return J==="__proto__"||J==="constructor"||J==="prototype"}function Iy(J,z){if(typeof z==="function")z=z(J);if(z=JQ(z),Array.isArray(z)){if(J===z)return;let Y=0,Z=z.length;for(;Y<Z;Y++){let G=z[Y];if(J[Y]!==G)JH(J,Y,G)}JH(J,"length",Z)}else SD(J,z)}function eX(J,z,Y=[]){let Z,G=J;if(z.length>1){Z=z.shift();let Q=typeof Z,f=Array.isArray(J);if(Q==="string"&&(Z==="__proto__"||z.length>1&&ID(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++)eX(J,[Z[H]].concat(z),Y);return}else if(f&&Q==="function"){for(let H=0;H<J.length;H++)if(Z(J[H],H))eX(J,[H].concat(z),Y);return}else if(f&&Q==="object"){let{from:H=0,to:B=J.length-1,by:V=1}=Z;for(let j=H;j<=B;j+=V)eX(J,[j].concat(z),Y);return}else if(z.length>1){eX(J[Z],z,[Z].concat(Y));return}G=J[Z],Y=[Z].concat(Y)}let X=z[0];if(typeof X==="function"){if(X=X(G,Y),X===G)return}if(Z===void 0&&X==null)return;if(X=JQ(X),Z===void 0||tf(G)&&tf(X)&&!Array.isArray(X))SD(G,X);else JH(J,Z,X)}function hz(...[J,z]){let Y=JQ(J||{}),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=kD(Y);FV.registerGraph({value:Y,name:z&&z.name});function X(...Q){Vq(()=>{Z&&Q.length===1?Iy(Y,Q[0]):eX(Y,Q)})}return[G,X]}var tj,mG,WY,ND,CD,Sy,W$;var cG=N(()=>{j1();tj=Symbol("store-raw"),mG=Symbol("store-node"),WY=Symbol("store-has"),ND=Symbol("store-self"),CD={onStoreNodeUpdate:null};Sy={get(J,z,Y){if(z===tj)return J;if(z===Hz)return Y;if(z===Bq)return bD(J),Y;let Z=ef(J,mG),G=Z[z],X=G?G():J[z];if(z===mG||z===WY||z==="__proto__")return X;if(!G){let Q=Object.getOwnPropertyDescriptor(J,z);if(Kq()&&(typeof X!=="function"||J.hasOwnProperty(z))&&!(Q&&Q.get))X=zQ(Z,z,X)()}return tf(X)?kD(X):X},has(J,z){if(z===tj||z===Hz||z===Bq||z===mG||z===WY||z==="__proto__")return!0;return Kq()&&zQ(ef(J,WY),z)(),z in J},set(){return console.warn("Cannot mutate a Store directly"),!0},deleteProperty(){return console.warn("Cannot mutate a Store directly"),!0},ownKeys:by,getOwnPropertyDescriptor:ky};W$=Symbol("store-root")});function zH(J){let z=Sz();return{provider:(Y)=>{let Z=J.init(Y);return b(X0,{get when(){return Z.ready===void 0||Z.ready===!0},get children(){return b(z.Provider,{value:Z,get children(){return Y.children}})}})},use(){let Y=EJ(z);if(!Y)throw Error(`${J.name} context must be used within a context provider`);return Y}}}var ej=N(()=>{w();w();j1()});import{RGBA as wZ}from"@opentui/core";function Ty(){return Object.keys(BJ.themes)}function YQ(J){return Boolean(BJ.themes[J])}function z9(J,z){if(!J)return!1;if(!z||typeof z!=="object"||!z.theme)return!1;return PZ("themes",{...BJ.themes,[J]:z}),!0}function J9(J,z="dark"){let Y=J.defs??{};function Z(H,B=[]){if(typeof H==="string"){if(H==="transparent"||H==="none")return wZ.fromInts(0,0,0,0);if(H.startsWith("#"))return wZ.fromHex(H);if(B.includes(H))return wZ.fromInts(0,0,0);let V=Y[H]??J.theme[H];if(V===void 0)return wZ.fromInts(0,0,0);return Z(V,[...B,H])}return Z(H[z],B)}let G={};for(let[H,B]of Object.entries(J.theme))G[H]=Z(B);let X=G.text??wZ.fromHex("#ffffff"),Q=G.background??wZ.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 yy,hZ,BJ,PZ,d0,yD;var v1=N(()=>{w();j1();cG();ej();dq();nq();iq();lq();$q();aq();_q();yy={claude:VG,conductor:KG,nord:DG,opencode:LG,dracula:UG,tokyonight:FG,"osaka-jade":MG},hZ=["primary","success","info"],[BJ,PZ]=hz({themes:{...yy},active:"claude",mode:"dark",transparentBackground:!1,focusAccent:"primary"});({use:d0,provider:yD}=zH({name:"Theme",init:(J)=>{if(J.mode)PZ("mode",J.mode);if(J.theme&&YQ(J.theme))PZ("active",J.theme);let z=HJ(),Y=U0(()=>{let G=BJ.themes[BJ.active];if(G)return J9(G,BJ.mode);let X=BJ.themes.claude??BJ.themes.opencode??Object.values(BJ.themes)[0];if(!X)return J9({theme:{background:"#000000",text:"#ffffff"}},BJ.mode);return J9(X,BJ.mode)}),Z=U0(()=>{let G=Y(),X=G[BJ.focusAccent]??G.primary,Q={...G,focusAccent:X};if(!BJ.transparentBackground)return Q;let f=wZ.fromInts(0,0,0,0);return{...Q,background:f,backgroundPanel:f}});return Y1(()=>{z?.setBackgroundColor(Z().background)}),{theme:new Proxy({},{get(G,X){let Q=Z();return Q[X]??Q.text}}),get selected(){return BJ.active},get transparentBackground(){return BJ.transparentBackground},get focusAccent(){return BJ.focusAccent},mode(){return BJ.mode},set(G){if(!YQ(G))return!1;return PZ("active",G),!0},setMode(G){PZ("mode",G)},setTransparentBackground(G){PZ("transparentBackground",G)},setFocusAccent(G){PZ("focusAccent",G)},all(){return Ty()},has(G){return YQ(G)}}}}))});var TD,uD;var xD=N(()=>{TD={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"}},uD={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 ED,wD;var PD=N(()=>{ED={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"}},wD={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 hD,vD;var mD=N(()=>{hD={title:"kobe \u2014 keybindings",esc:"esc"},vD={title:"kobe \u2014 \u5FEB\u6377\u952E",esc:"esc"}});var cD,dD;var nD=N(()=>{cD={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)"}},dD={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 iD,lD;var $D=N(()=>{iD={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"}},lD={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 aD,_D;var pD=N(()=>{aD={badge:{newActivity:"\u25CF new"},preview:{diffVsHead:"diff vs HEAD",file:"file",closeHint:"\xB7 q to close",loading:"loading\u2026"}},_D={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 rD,oD;var sD=N(()=>{rD={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"},oD={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 tD,eD;var JL=N(()=>{tD={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)"}},eD={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 zL,YL;var ZL=N(()=>{zL={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}"}},YL={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 GL,XL;var QL=N(()=>{GL={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`"}},XL={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 ZQ(J){return typeof J==="string"&&vZ.some((z)=>z.id===J)}var uy,xy,vZ,dG,nG="en";var iG=N(()=>{xD();PD();mD();nD();$D();pD();sD();JL();ZL();QL();uy={settings:tD,tasks:zL,files:ED,newTask:iD,ops:aD,update:GL,quickTask:rD,help:hD,common:TD,keys:cD},xy={settings:eD,tasks:YL,files:wD,newTask:lD,ops:_D,update:XL,quickTask:oD,help:vD,common:uD,keys:dD},vZ=[{id:"en",label:"English"},{id:"zh",label:"\u4E2D\u6587"}],dG={en:uy,zh:xy}});function GQ(J){if(dG[J])Ey("lang",J)}function Z9(){return Y9.lang}function qL(J,z){let Y=J;for(let Z of z.split("."))if(Y&&typeof Y==="object"&&Z in Y)Y=Y[Z];else return;return typeof Y==="string"?Y:void 0}function wy(J,z){if(!z)return J;return J.replace(/\{(\w+)\}/g,(Y,Z)=>(Z in z)?String(z[Z]):Y)}function M(J,z){let Y=Y9.lang,Z=qL(dG[Y],J)??qL(dG.en,J)??J;return wy(Z,z)}function G9(J,z){let Y=Y9.lang,Z=(G)=>{return G.keys[J]?.[z]};return Z(dG[Y])??Z(dG.en)??z}var Y9,Ey;var GJ=N(()=>{cG();iG();iG();[Y9,Ey]=hz({lang:nG})});function Py(J){let z=[],Y=J.name;if(Y)z.push(Y);if(Y==="return")z.push("enter");if(Y==="enter")z.push("return");let Z=[];if(J.ctrl)Z.push("ctrl");if(J.meta)Z.push("cmd");if(J.option)Z.push("alt");if(J.shift&&Y&&Y.length>1)Z.push("shift");if(Z.length===0)return z;let G=`${Z.join("+")}+`;return z.map((X)=>G+X)}function Q9(J,z){if(z.defaultPrevented)return!1;if(X9)return!1;let Y=J.slice(),Z=Py(z);X9=!0;try{for(let G=Y.length-1;G>=0;G--){let X=Y[G];if(!X)continue;let Q=X.config();if(Q.enabled===!1)continue;let f=Q.bindings.find((H)=>Z.includes(H.key));if(f)return f.cmd(z,f.slot),z.preventDefault(),!0}return!1}finally{X9=!1}}var X9=!1;function vy(){if(q9)return;let J=HJ();if(!J)throw Error("useBindings: no renderer in scope; call inside a component rendered by @opentui/solid.");q9=J.keyInput,fL=(z)=>{Q9(YH,z)},q9.on("keypress",fL)}function D1(J){vy();let z=hy++,Y={config:J,id:z};Y1(()=>{J()}),YH.push(Y),N1(()=>{let Z=YH.findIndex((G)=>G.id===z);if(Z>=0)YH.splice(Z,1)})}var hy=1,YH,q9=null,fL=null;var uJ=N(()=>{w();j1();YH=[]});function ZH(){let J=new Set;function z(Z,G){let X=setTimeout(()=>{J.delete(X),Z()},G);return J.add(X),X}function Y(Z){if(J.delete(Z))clearTimeout(Z)}return N1(()=>{for(let Z of J)clearTimeout(Z);J.clear()}),{set:z,clear:Y}}var f9=N(()=>{j1()});import{RGBA as HL}from"@opentui/core";function dy(J){let z=Pz(),Y=d0(),{theme:Z}=Y,G=HJ(),X=!1,Q=()=>{if(J.size==="xlarge")return 140;if(J.size==="large")return 110;if(J.size==="small")return 50;return 80},f=2,H=()=>Math.max(8,z().height-f*2);return(()=>{var B=W("box"),V=W("box");return D(B,V),q(B,"onMouseDown",()=>{X=!!G?.getSelection()}),q(B,"onMouseUp",()=>{if(X){X=!1;return}J.onClose?.()}),q(B,"alignItems","center"),q(B,"justifyContent","center"),q(B,"position","absolute"),q(B,"zIndex",3000),q(B,"left",0),q(B,"top",0),q(V,"onMouseUp",(j)=>{X=!1,j.stopPropagation()}),q(V,"flexShrink",1),q(V,"flexGrow",0),q(V,"paddingTop",1),U(V,()=>J.children),x((j)=>{var K=z().width,L=z().height,A=Y.transparentBackground?cy:my,F=Q(),g=z().width-2,u=H(),s=Z.backgroundDialog;return K!==j.e&&(j.e=q(B,"width",K,j.e)),L!==j.t&&(j.t=q(B,"height",L,j.t)),A!==j.a&&(j.a=q(B,"backgroundColor",A,j.a)),F!==j.o&&(j.o=q(V,"width",F,j.o)),g!==j.i&&(j.i=q(V,"maxWidth",g,j.i)),u!==j.n&&(j.n=q(V,"maxHeight",u,j.n)),s!==j.s&&(j.s=q(V,"backgroundColor",s,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 ny(){let[J,z]=hz({stack:[],size:"medium"}),Y=HJ(),Z=null,G=ZH();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 f=Y?.root;if(!f)return;if(!Q(f))return;Z.focus()},1)}return D1(()=>({enabled:J.stack.length>0&&!Y?.getSelection()?.getSelectedText(),bindings:[{key:"escape",cmd:()=>{if(Y?.getSelection())Y.clearSelection();J.stack.at(-1)?.onClose?.(),z("stack",J.stack.slice(0,-1)),X()}},{key:"ctrl+c",cmd:()=>{if(Y?.getSelection())Y.clearSelection();J.stack.at(-1)?.onClose?.(),z("stack",J.stack.slice(0,-1)),X()}}]})),{clear(){for(let Q of J.stack)Q.onClose?.();Vq(()=>{z("size","medium"),z("stack",[])}),X()},replace(Q,f){if(J.stack.length===0)Z=Y?.currentFocusedRenderable??null,Z?.blur();for(let H of J.stack)H.onClose?.();z("size","medium"),z("stack",[{element:Q,onClose:f}])},push(Q,f){if(J.stack.length===0)Z=Y?.currentFocusedRenderable??null,Z?.blur();z("stack",[...J.stack,{element:Q,onClose:f}])},pop(){if(J.stack.at(-1)?.onClose?.(),z("stack",J.stack.slice(0,-1)),J.stack.length===0)X()},get stack(){return J.stack},get size(){return J.size},setSize(Q){z("size",Q)}}}function jL(J){let z=ny();return b(BL.Provider,{value:z,get children(){return[T0(()=>J.children),(()=>{var Y=W("box");return q(Y,"position","absolute"),q(Y,"zIndex",3000),U(Y,b(X0,{get when(){return z.stack.length},get children(){return b(dy,{onClose:()=>z.clear(),get size(){return z.size},get children(){return z.stack.at(-1).element()}})}})),Y})()]}})}function c1(){let J=EJ(BL);if(!J)throw Error("useDialog must be used within a DialogProvider");return J}var my,cy,BL;var dJ=N(()=>{w();w();w();w();w();w();w();w();j1();cG();v1();uJ();f9();my=HL.fromInts(0,0,0,128),cy=HL.fromInts(0,0,0,64);BL=Sz()});import{spawnSync as H9}from"child_process";import*as VL from"fs";function WL(J){return`This folder isn't a git repository yet, and a task needs a git branch to work in. To fix it, turn ${J} into a repo: git init && git add -A && git commit -m "init" \u2014 then create the task again. (Working in non-git folders is coming soon.)`}function KL(J){let z=J.trim();if(!z)return"repo path is required";let Y;try{Y=VL.statSync(z)}catch{return`path does not exist: ${z}`}if(!Y.isDirectory())return`not a directory: ${z}`;try{if(H9("git",["rev-parse","--git-dir"],{cwd:z,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]}).status!==0)return WL(z)}catch{return WL(z)}return null}function XQ(J){if(!J)return null;try{let z=H9("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:J,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]});if(z.status!==0)return null;let Y=z.stdout.trim();if(!Y||Y==="HEAD")return null;return Y}catch{return null}}function UL(J){if(!J)return[];try{let z=H9("git",["for-each-ref","--format=%(refname:short)","refs/heads/"],{cwd:J,encoding:"utf-8",timeout:2000});if(z.status!==0)return[];return z.stdout.split(`
263
+ `).map((Y)=>Y.trim()).filter(Boolean).sort((Y,Z)=>{let G=(f)=>f==="main"?0:f==="master"?1:f==="develop"?2:3,X=G(Y),Q=G(Z);if(X!==Q)return X-Q;return Y.localeCompare(Z)})}catch{return[]}}var Rz="main";var GH=()=>{};import*as DL from"fs";import*as XH from"os";function LJ(J){if(J==="~")return XH.homedir();if(J.startsWith("~/"))return XH.homedir()+J.slice(1);return J}function B9(J){if(!J)return{base:"",filter:""};let Y=LJ(J==="~"?"~/":J);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 j9(J){if(!J)return[];try{let z=DL.readdirSync(J,{withFileTypes:!0}),Y=[];for(let Z of z)if(Z.isDirectory())Y.push(Z.name);return Y.sort((Z,G)=>Z.localeCompare(G))}catch{return[]}}function W9(J,z){let Y=z.toLowerCase(),G=Y.startsWith(".")?J:J.filter((X)=>!X.startsWith("."));if(!Y)return G;return G.filter((X)=>X.toLowerCase().startsWith(Y))}function QQ(J,z,Y){let Z=z+Y;if(J.startsWith("~")){let G=XH.homedir();if(Z===G)return"~";if(Z.startsWith(`${G}/`))return`~${Z.slice(G.length)}`}return Z}var QH=()=>{};import{spawn as iy}from"child_process";import*as mZ from"fs";import*as qQ from"path";function LL(J){let z=J.trim().replace(/\/+$/,"");if(!z)return"";let Y=z.lastIndexOf("/"),Z=z.lastIndexOf(":"),G=Math.max(Y,Z);return(G>=0?z.slice(G+1):z).replace(/\.git$/i,"")}function ML(J){let z=J.trim();if(!z)return M("newTask.error.gitUrlRequired");let Y=z.includes("://"),Z=z.includes("@")&&z.includes(":"),G=z.includes("/");if(!Y&&!Z&&!G)return M("newTask.error.gitUrlInvalid",{url:z});return null}function FL(J,z){let Y=z.trim();if(!Y)return M("newTask.error.folderRequired");if(Y.includes("/")||Y.includes("\\"))return M("newTask.error.folderHasSeparator");let Z=J.trim();if(!Z)return M("newTask.error.parentRequired");let G=LJ(Z),X;try{X=mZ.statSync(G)}catch{return M("newTask.error.parentNotFound",{path:G})}if(!X.isDirectory())return M("newTask.error.parentNotDir",{path:G});let Q=qQ.join(G,Y);if(mZ.existsSync(Q))return M("newTask.error.targetExists",{path:Q});return null}function OL(J,z){return qQ.join(LJ(J.trim()),z.trim())}function AL(J,z){let Y=z.trim();if(!Y)return z;let Z=LJ(J.trim());if(!Z)return z;try{if(!mZ.statSync(Z).isDirectory())return z}catch{return z}if(!mZ.existsSync(qQ.join(Z,Y)))return Y;for(let G=2;G<1000;G++){let X=`${Y}-${G}`;if(!mZ.existsSync(qQ.join(Z,X)))return X}return Y}function RL(J,z,Y){return new Promise((Z)=>{let G="";try{let X=iy("git",["clone","--progress",J,z],{stdio:["ignore","ignore","pipe"]});X.stderr?.setEncoding("utf-8"),X.stderr?.on("data",(Q)=>{if(G+=Q,Y){let f=Q.split(/[\r\n]+/).filter((B)=>B.trim().length>0),H=f[f.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:z});return}let f=G.split(/[\r\n]+/).filter((H)=>H.trim().length>0).pop()??`git clone exited with ${Q}`;Z({ok:!1,error:f})})}catch(X){Z({ok:!1,error:X instanceof Error?X.message:String(X)})}})}var gL=N(()=>{GJ();QH()});function V9(J){if(J==="existing")return"clone";if(J==="clone")return"adopt";return"existing"}function K9(J){if(J==="existing")return"adopt";if(J==="clone")return"existing";return"clone"}function CL(J,z){let Y=J.trim();if(z.includes(Y))return"saved";if(Y.startsWith("~"))return"browse";if(Y.includes("/"))return"browse";return"saved"}function jJ(J){return J.replace(/[\r\n]+/g,"")}function U9(J,z="existing"){if(J==="confirm")return"tabs";if(J==="tabs")return"engine";if(J==="engine")return D9(z);if(z==="clone"){if(J==="cloneUrl")return"cloneParent";if(J==="cloneParent")return"cloneFolder";if(J==="cloneFolder")return"cloneBaseRef";if(J==="cloneBaseRef")return"confirm";return"cloneUrl"}if(z==="adopt")return J==="adoptFilter"?"confirm":"adoptFilter";if(J==="repo")return"baseRef";if(J==="baseRef")return"confirm";return"repo"}function D9(J){if(J==="clone")return"cloneUrl";if(J==="adopt")return"adoptFilter";return"repo"}function NL(J,z){let Y=z.trim();if(!Y)return J;return J.filter((Z)=>OQ(Y,Z.path))}function kL(J,z){let Y=new Set,Z=[];for(let G of[J,...z]){let X=G.trim();if(!X||Y.has(X))continue;Y.add(X),Z.push(X)}return Z}function bL(J,z){let Y=z.trim().toLowerCase();if(!Y)return J;return J.filter((Z)=>Z.toLowerCase().includes(Y))}function SL(J,z){let Y=z.trim().toLowerCase();if(!Y)return J;return J.filter((Z)=>Z.toLowerCase().includes(Y))}function fQ(J,z,Y=ly){let Z=J.length;if(Z<=Y)return{items:J,start:0,total:Z};let G=Math.floor(Y/2),X=Math.max(0,z-G);if(X+Y>Z)X=Z-Y;return{items:J.slice(X,X+Y),start:X,total:Z}}function vz(J,z){if(z<=0)return 0;return Math.max(0,Math.min(z-1,J))}function IL(J,z,Y){let Z=z[Y];if(Z)return Z;return J.trim()||Rz}var ly=8;var L9=N(()=>{SH();GH()});import{TextAttributes as Jz}from"@opentui/core";function yL(J){let z=c1(),{theme:Y}=d0(),[Z,G]=p("existing"),X=()=>{let n=J.availableVendors;return n&&n.length>0?n:i1},Q=(()=>{let n=X(),z0=J.defaultVendor??"claude";return n.includes(z0)?z0:n[0]??"claude"})(),[f,H]=p(Q),[B,V]=p("tabs"),[j,K]=p(J.defaultRepo),[L,A]=p(XQ(LJ(J.defaultRepo.trim()))??Rz),[F,g]=p(!1),[u,s]=p(""),[S,O]=p(J.defaultCloneParent?.trim()?J.defaultCloneParent:"~/"),[C,y]=p(""),[a,l]=p(!1),[t,J0]=p(Rz),[T,Q0]=p(!1),[r,W0]=p(""),O0=U0(()=>kL(J.defaultRepo,J.savedRepos)),K0=U0(()=>CL(j(),O0())),_=U0(()=>B9(j())),P=U0(()=>j9(_().base)),k=U0(()=>W9(P(),_().filter)),o=U0(()=>bL(O0(),j())),I=U0(()=>K0()==="browse"?k():o()),[h,G0]=p(0),q0=U0(()=>fQ(I(),h())),[H0,b0]=p(!1),w0=U0(()=>UL(LJ(j().trim()))),y0=U0(()=>SL(w0(),L())),[p0,v]=p(0),M0=U0(()=>fQ(y0(),p0())),Z0=U0(()=>B9(S())),F0=U0(()=>j9(Z0().base)),a0=U0(()=>W9(F0(),Z0().filter)),[r0,u0]=p(0),o0=U0(()=>fQ(a0(),r0())),[d,f0]=p(!1),[S0,s0]=p(""),[$0,_0]=p(0),[e0,C1]=p(new Set),[g1]=Wq(()=>Z()==="adopt"?LJ(j().trim()):null,async(n)=>J.discoverAdoptable?await J.discoverAdoptable(n):[]),e=U0(()=>NL(g1()??[],S0())),Y0=U0(()=>fQ(e().map((n)=>n.path),$0())),j0=U0(()=>{let n=Y0();return e().slice(n.start,n.start+n.items.length)});Y1(()=>{e(),_0((n)=>vz(n,e().length))});function C0(n){C1((z0)=>{let I0=new Set(z0);if(I0.has(n))I0.delete(n);else I0.add(n);return I0})}function R(){let n=e()[$0()];if(n)C0(n.path)}Y1(()=>{y0(),v(0)}),Y1(()=>{let n=LJ(j().trim());if(!n)return;if(F())return;let z0=XQ(n);if(z0)A(z0)}),Y1(()=>{I(),G0(0)}),Y1(()=>{a0(),u0(0)}),Y1(()=>{let n=u(),z0=S();if(a())return;let I0=LL(n);y(AL(z0,I0))});let[h0,D0]=p(null);Y1(()=>{j(),u(),S(),C(),S0(),D0(null)});function x0(){let n=LJ(j().trim());if(!n)return;let z0=KL(n);if(z0){D0(z0),V("repo");return}let I0=L().trim()||Rz;J.onSubmit({repo:n,baseRef:I0,vendor:f()}),z.clear()}async function V0(){if(T())return;let n=ML(u());if(n){D0(n),V("cloneUrl");return}let z0=FL(S(),C());if(z0){D0(z0),V(C().trim()?"cloneParent":"cloneFolder");return}let I0=OL(S(),C());Q0(!0),W0(M("newTask.clone.progressInto",{target:I0}));let k0=await RL(u().trim(),I0,(XJ)=>{W0(XJ)});if(Q0(!1),!k0.ok){D0(M("newTask.error.cloneFailed",{error:k0.error})),V("cloneUrl");return}let WJ=t().trim()||Rz,MJ=LJ(S().trim());J.onSubmit({repo:k0.path,baseRef:WJ,vendor:f(),cloned:{parentDir:MJ}}),z.clear()}function L0(){let n=e();if(n.length===0){D0(M("newTask.error.noAdoptable"));return}let z0=e0(),I0=z0.size>0?n.filter((k0)=>z0.has(k0.path)):n.slice($0(),$0()+1);if(I0.length===0)return;J.onSubmit({mode:"adopt",repo:LJ(j().trim()),vendor:f(),adopt:I0.map((k0)=>({worktreePath:k0.path,branch:k0.branch}))}),z.clear()}function g0(){if(Z()==="clone"){V0();return}if(Z()==="adopt"){L0();return}x0()}function z1(n){if(T())return;if(n===Z())return;G(n),V(D9(n)),D0(null)}function Z1(n){if(T())return;let z0=n===1?V9(Z()):K9(Z());if(z0===Z())return;G(z0),D0(null),V("tabs")}function n0(n){H((z0)=>n===1?LY(X(),z0):IH(X(),z0))}function u1(){if(!j().trim()&&K0()==="saved"){let z0=I()[0];if(z0){K(z0),V("baseRef");return}}if(K0()==="browse"){let I0=k()[h()],k0=_();if(I0){K(QQ(j(),k0.base,I0)),G0(0),b0(!0),V("baseRef");return}V("baseRef");return}let n=I()[h()];if(n){K(n),V("baseRef");return}V("baseRef")}function N0(n){let I0=I()[n];if(!I0)return;if(K0()==="browse"){let k0=_();K(QQ(j(),k0.base,I0)),G0(n),b0(!0),V("baseRef");return}K(I0),G0(n),V("baseRef")}function m1(){let z0=a0()[r0()],I0=Z0();if(z0){O(QQ(S(),I0.base,z0)),u0(0),f0(!0),V("cloneFolder");return}V("cloneFolder")}function m(n){let I0=a0()[n];if(!I0)return;let k0=Z0();O(QQ(S(),k0.base,I0)),u0(n),f0(!0),V("cloneFolder")}let R0=()=>{let n=e();if(n.length===0)return;let z0=n.every((I0)=>e0().has(I0.path));C1(z0?new Set:new Set(n.map((I0)=>I0.path)))};D1(()=>({bindings:[{key:"tab",cmd:()=>V((n)=>U9(n,Z()))},{key:"ctrl+]",cmd:()=>z1(V9(Z()))},{key:"ctrl+[",cmd:()=>z1(K9(Z()))},{key:"ctrl+e",cmd:()=>H((n)=>LY(X(),n))},{key:"up",cmd:()=>{if(T())return;if(Z()==="existing"&&B()==="repo"){let n=I();if(n.length===0)return;G0(vz(h()-1,n.length));return}if(Z()==="existing"&&B()==="baseRef"){let n=y0();if(n.length===0)return;v(vz(p0()-1,n.length));return}if(Z()==="clone"&&B()==="cloneParent"){let n=a0();if(n.length===0)return;u0(vz(r0()-1,n.length));return}if(Z()==="adopt"){let n=e();if(n.length===0)return;_0(vz($0()-1,n.length))}}},{key:"down",cmd:()=>{if(T())return;if(Z()==="existing"&&B()==="repo"){let n=I();if(n.length===0)return;G0(vz(h()+1,n.length));return}if(Z()==="existing"&&B()==="baseRef"){let n=y0();if(n.length===0)return;v(vz(p0()+1,n.length));return}if(Z()==="clone"&&B()==="cloneParent"){let n=a0();if(n.length===0)return;u0(vz(r0()+1,n.length));return}if(Z()==="adopt"){let n=e();if(n.length===0)return;_0(vz($0()+1,n.length))}}},...B()==="tabs"||B()==="engine"?[{key:"left",cmd:()=>B()==="tabs"?Z1(-1):n0(-1)},{key:"right",cmd:()=>B()==="tabs"?Z1(1):n0(1)},{key:"return",cmd:()=>V((n)=>U9(n,Z()))}]:[],...Z()==="adopt"?[{key:"ctrl+a",cmd:R0}]:[]]})),D1(()=>({enabled:B()==="confirm"&&!T(),bindings:[{key:"return",cmd:()=>g0()}]}));let V1=(n)=>B()===n?Y.primary:Y.textMuted,R1=(n)=>B()===n?Jz.BOLD|Jz.UNDERLINE:void 0,H1=(n,z0)=>n?z0?Jz.BOLD|Jz.UNDERLINE:Jz.BOLD:void 0;return(()=>{var n=W("box"),z0=W("box"),I0=W("text"),k0=W("box"),WJ=W("box"),MJ=W("text"),XJ=W("box"),nJ=W("box"),mz=W("text"),RJ=W("box"),cz=W("text"),UY=W("text");return D(n,z0),D(n,k0),D(n,RJ),q(n,"paddingLeft",2),q(n,"paddingRight",2),q(n,"gap",0),D(z0,I0),q(z0,"flexDirection","row"),U(I0,()=>M("newTask.title")),D(k0,WJ),q(k0,"gap",1),q(k0,"paddingTop",1),q(k0,"paddingBottom",1),U(k0,()=>{let c=()=>B()==="tabs",i=($)=>$?Y.primary:Y.textMuted;return(()=>{var $=W("box"),E=W("text"),m0=W("text"),v0=W("text");return D($,E),D($,m0),D($,v0),q($,"flexDirection","row"),q($,"gap",2),q(E,"onMouseUp",()=>z1("existing")),U(E,(()=>{var A0=T0(()=>Z()==="existing");return()=>A0()?`\u25B8 ${M("newTask.tabs.existing")}`:` ${M("newTask.tabs.existing")}`})()),q(m0,"onMouseUp",()=>z1("clone")),U(m0,(()=>{var A0=T0(()=>Z()==="clone");return()=>A0()?`\u25B8 ${M("newTask.tabs.clone")}`:` ${M("newTask.tabs.clone")}`})()),q(v0,"onMouseUp",()=>z1("adopt")),U(v0,(()=>{var A0=T0(()=>Z()==="adopt");return()=>A0()?`\u25B8 ${M("newTask.tabs.adopt")}`:` ${M("newTask.tabs.adopt")}`})()),x((A0)=>{var c0=i(Z()==="existing"),f1=H1(Z()==="existing",c()),L1=i(Z()==="clone"),VJ=H1(Z()==="clone",c()),Yz=i(Z()==="adopt"),DY=H1(Z()==="adopt",c());return c0!==A0.e&&(A0.e=q(E,"fg",c0,A0.e)),f1!==A0.t&&(A0.t=q(E,"attributes",f1,A0.t)),L1!==A0.a&&(A0.a=q(m0,"fg",L1,A0.a)),VJ!==A0.o&&(A0.o=q(m0,"attributes",VJ,A0.o)),Yz!==A0.i&&(A0.i=q(v0,"fg",Yz,A0.i)),DY!==A0.n&&(A0.n=q(v0,"attributes",DY,A0.n)),A0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),$})()},WJ),D(WJ,MJ),D(WJ,XJ),q(WJ,"gap",0),U(MJ,()=>M("newTask.field.engine")),D(XJ,nJ),D(XJ,mz),q(XJ,"flexDirection","row"),q(XJ,"gap",2),U(XJ,b(Q1,{get each(){return X()},children:(c)=>{let i=()=>f()===c;return(()=>{var $=W("text");return q($,"onMouseUp",()=>H(c)),U($,()=>i()?"\u25B8 ":" ",null),U($,c,null),x((E)=>{var m0=i()?Y.primary:Y.textMuted,v0=i()?Jz.BOLD:void 0;return m0!==E.e&&(E.e=q($,"fg",m0,E.e)),v0!==E.t&&(E.t=q($,"attributes",v0,E.t)),E},{e:void 0,t:void 0}),$})()}}),nJ),q(nJ,"flexGrow",1),U(mz,()=>M("newTask.hint.engineCycle")),U(k0,b(X0,{get when(){return Z()==="existing"},get children(){return[(()=>{var c=W("box"),i=W("text"),$=W("input");return D(c,i),D(c,$),q(c,"gap",0),U(i,()=>M("newTask.field.repo")),q($,"onInput",(E)=>{b0(!1),K(jJ(E))}),q($,"onSubmit",()=>{if(!j().trim())return;u1()}),x((E)=>{var m0=V1("repo"),v0=R1("repo"),A0=j(),c0=J.defaultRepo,f1=B()==="repo";return m0!==E.e&&(E.e=q(i,"fg",m0,E.e)),v0!==E.t&&(E.t=q(i,"attributes",v0,E.t)),A0!==E.a&&(E.a=q($,"value",A0,E.a)),c0!==E.o&&(E.o=q($,"placeholder",c0,E.o)),f1!==E.i&&(E.i=q($,"focused",f1,E.i)),E},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),c})(),b(X0,{get when(){return T0(()=>B()==="repo"&&I().length>0)()&&!H0()},get children(){var c=W("box");return q(c,"gap",0),q(c,"paddingLeft",2),U(c,b(X0,{get when(){return q0().start>0},get children(){var i=W("text");return q(i,"wrapMode","none"),U(i,()=>M("newTask.picker.moreAbove",{count:q0().start})),x(($)=>q(i,"fg",Y.textMuted,$)),i}}),null),U(c,b(Q1,{get each(){return q0().items},children:(i,$)=>{let E=()=>q0().start+$(),m0=()=>E()===h(),v0=()=>K0()==="saved"&&i===J.defaultRepo,A0=()=>K0()==="saved"&&j().trim()===i,c0=()=>K0()==="browse"?"/":"",f1=()=>v0()?` ${M("newTask.hint.currentDir")}`:"";return(()=>{var L1=W("text");return q(L1,"wrapMode","none"),q(L1,"onMouseUp",()=>N0(E())),U(L1,()=>m0()?"\u25B8 ":" ",null),U(L1,i,null),U(L1,c0,null),U(L1,f1,null),x((VJ)=>{var Yz=m0()?Y.primary:A0()?Y.accent:Y.textMuted,DY=m0()?Jz.BOLD:void 0;return Yz!==VJ.e&&(VJ.e=q(L1,"fg",Yz,VJ.e)),DY!==VJ.t&&(VJ.t=q(L1,"attributes",DY,VJ.t)),VJ},{e:void 0,t:void 0}),L1})()}}),null),U(c,b(X0,{get when(){return q0().start+q0().items.length<q0().total},get children(){var i=W("text");return q(i,"wrapMode","none"),U(i,()=>M("newTask.picker.moreBelow",{count:q0().total-q0().start-q0().items.length})),x(($)=>q(i,"fg",Y.textMuted,$)),i}}),null),c}}),(()=>{var c=W("box"),i=W("text"),$=W("input");return D(c,i),D(c,$),q(c,"gap",0),U(i,()=>M("newTask.field.fromBranch")),q($,"placeholder",Rz),q($,"onInput",(E)=>{g(!0),A(jJ(E))}),q($,"onSubmit",()=>{A(IL(L(),y0(),p0())),g(!0),x0()}),x((E)=>{var m0=V1("baseRef"),v0=R1("baseRef"),A0=L(),c0=B()==="baseRef";return m0!==E.e&&(E.e=q(i,"fg",m0,E.e)),v0!==E.t&&(E.t=q(i,"attributes",v0,E.t)),A0!==E.a&&(E.a=q($,"value",A0,E.a)),c0!==E.o&&(E.o=q($,"focused",c0,E.o)),E},{e:void 0,t:void 0,a:void 0,o:void 0}),c})(),b(X0,{get when(){return T0(()=>B()==="baseRef"&&y0().length===0)()&&h0()==null},get children(){var c=W("box"),i=W("text");return D(c,i),q(c,"gap",0),q(c,"paddingLeft",2),q(c,"paddingBottom",1),q(i,"wrapMode","none"),U(i,(()=>{var $=T0(()=>w0().length===0);return()=>$()?M("newTask.hint.noBranchesFound"):M("newTask.hint.noMatchBranch")})()),x(($)=>q(i,"fg",Y.textMuted,$)),c}}),b(X0,{get when(){return T0(()=>B()==="baseRef")()&&y0().length>0},get children(){var c=W("box");return q(c,"gap",0),q(c,"paddingLeft",2),q(c,"paddingBottom",1),U(c,b(X0,{get when(){return M0().start>0},get children(){var i=W("text");return q(i,"wrapMode","none"),U(i,()=>M("newTask.picker.moreAbove",{count:M0().start})),x(($)=>q(i,"fg",Y.textMuted,$)),i}}),null),U(c,b(Q1,{get each(){return M0().items},children:(i,$)=>{let E=()=>M0().start+$(),m0=()=>E()===p0(),v0=()=>L().trim()===i;return(()=>{var A0=W("text");return q(A0,"wrapMode","none"),q(A0,"onMouseUp",()=>{A(i),g(!0),v(E()),V("confirm")}),U(A0,()=>m0()?"\u25B8 ":" ",null),U(A0,i,null),x((c0)=>{var f1=m0()?Y.primary:v0()?Y.accent:Y.textMuted,L1=m0()?Jz.BOLD:void 0;return f1!==c0.e&&(c0.e=q(A0,"fg",f1,c0.e)),L1!==c0.t&&(c0.t=q(A0,"attributes",L1,c0.t)),c0},{e:void 0,t:void 0}),A0})()}}),null),U(c,b(X0,{get when(){return M0().start+M0().items.length<M0().total},get children(){var i=W("text");return q(i,"wrapMode","none"),U(i,()=>M("newTask.picker.moreBelow",{count:M0().total-M0().start-M0().items.length})),x(($)=>q(i,"fg",Y.textMuted,$)),i}}),null),c}})]}}),null),U(k0,b(X0,{get when(){return Z()==="clone"},get children(){return[(()=>{var c=W("box"),i=W("text"),$=W("input");return D(c,i),D(c,$),q(c,"gap",0),U(i,()=>M("newTask.field.gitUrl")),q($,"placeholder","https://github.com/user/repo.git"),q($,"onInput",(E)=>s(jJ(E))),q($,"onSubmit",()=>{if(!u().trim())return;V("cloneParent")}),x((E)=>{var m0=V1("cloneUrl"),v0=R1("cloneUrl"),A0=u(),c0=B()==="cloneUrl";return m0!==E.e&&(E.e=q(i,"fg",m0,E.e)),v0!==E.t&&(E.t=q(i,"attributes",v0,E.t)),A0!==E.a&&(E.a=q($,"value",A0,E.a)),c0!==E.o&&(E.o=q($,"focused",c0,E.o)),E},{e:void 0,t:void 0,a:void 0,o:void 0}),c})(),(()=>{var c=W("box"),i=W("text"),$=W("input");return D(c,i),D(c,$),q(c,"gap",0),U(i,()=>M("newTask.field.parentDir")),q($,"placeholder","~/"),q($,"onInput",(E)=>{f0(!1),O(jJ(E))}),q($,"onSubmit",()=>m1()),x((E)=>{var m0=V1("cloneParent"),v0=R1("cloneParent"),A0=S(),c0=B()==="cloneParent";return m0!==E.e&&(E.e=q(i,"fg",m0,E.e)),v0!==E.t&&(E.t=q(i,"attributes",v0,E.t)),A0!==E.a&&(E.a=q($,"value",A0,E.a)),c0!==E.o&&(E.o=q($,"focused",c0,E.o)),E},{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),q(c,"paddingLeft",2),q(i,"wrapMode","none"),U(i,()=>M("newTask.hint.remembered")),x(($)=>q(i,"fg",Y.textMuted,$)),c}}),b(X0,{get when(){return T0(()=>B()==="cloneParent"&&a0().length>0)()&&!d()},get children(){var c=W("box");return q(c,"gap",0),q(c,"paddingLeft",2),U(c,b(X0,{get when(){return o0().start>0},get children(){var i=W("text");return q(i,"wrapMode","none"),U(i,()=>M("newTask.picker.moreAbove",{count:o0().start})),x(($)=>q(i,"fg",Y.textMuted,$)),i}}),null),U(c,b(Q1,{get each(){return o0().items},children:(i,$)=>{let E=()=>o0().start+$(),m0=()=>E()===r0();return(()=>{var v0=W("text"),A0=E0("/");return D(v0,A0),q(v0,"wrapMode","none"),q(v0,"onMouseUp",()=>m(E())),U(v0,()=>m0()?"\u25B8 ":" ",A0),U(v0,i,A0),x((c0)=>{var f1=m0()?Y.primary:Y.textMuted,L1=m0()?Jz.BOLD:void 0;return f1!==c0.e&&(c0.e=q(v0,"fg",f1,c0.e)),L1!==c0.t&&(c0.t=q(v0,"attributes",L1,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 q(i,"wrapMode","none"),U(i,()=>M("newTask.picker.moreBelow",{count:o0().total-o0().start-o0().items.length})),x(($)=>q(i,"fg",Y.textMuted,$)),i}}),null),c}}),(()=>{var c=W("box"),i=W("text"),$=W("input");return D(c,i),D(c,$),q(c,"gap",0),U(i,()=>M("newTask.field.folderName")),q($,"onInput",(E)=>{l(!0),y(jJ(E))}),q($,"onSubmit",()=>V("cloneBaseRef")),x((E)=>{var m0=V1("cloneFolder"),v0=R1("cloneFolder"),A0=C(),c0=M("newTask.placeholder.folderName"),f1=B()==="cloneFolder";return m0!==E.e&&(E.e=q(i,"fg",m0,E.e)),v0!==E.t&&(E.t=q(i,"attributes",v0,E.t)),A0!==E.a&&(E.a=q($,"value",A0,E.a)),c0!==E.o&&(E.o=q($,"placeholder",c0,E.o)),f1!==E.i&&(E.i=q($,"focused",f1,E.i)),E},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),c})(),(()=>{var c=W("box"),i=W("text"),$=W("input");return D(c,i),D(c,$),q(c,"gap",0),U(i,()=>M("newTask.field.baseBranch")),q($,"placeholder",Rz),q($,"onInput",(E)=>J0(jJ(E))),q($,"onSubmit",()=>void V0()),x((E)=>{var m0=V1("cloneBaseRef"),v0=R1("cloneBaseRef"),A0=t(),c0=B()==="cloneBaseRef";return m0!==E.e&&(E.e=q(i,"fg",m0,E.e)),v0!==E.t&&(E.t=q(i,"attributes",v0,E.t)),A0!==E.a&&(E.a=q($,"value",A0,E.a)),c0!==E.o&&(E.o=q($,"focused",c0,E.o)),E},{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),q(c,"gap",0),q(c,"paddingLeft",2),q(i,"wrapMode","none"),U(i,()=>r()||M("newTask.clone.progressFallback")),x(($)=>q(i,"fg",Y.textMuted,$)),c}})]}}),null),U(k0,b(X0,{get when(){return Z()==="adopt"},get children(){return[(()=>{var c=W("box"),i=W("text"),$=W("input");return D(c,i),D(c,$),q(c,"gap",0),U(i,()=>M("newTask.field.adoptFilter")),q($,"onInput",(E)=>s0(jJ(E))),q($,"onSubmit",()=>R()),x((E)=>{var m0=V1("adoptFilter"),v0=R1("adoptFilter"),A0=S0(),c0=M("newTask.placeholder.adoptFilter"),f1=B()==="adoptFilter";return m0!==E.e&&(E.e=q(i,"fg",m0,E.e)),v0!==E.t&&(E.t=q(i,"attributes",v0,E.t)),A0!==E.a&&(E.a=q($,"value",A0,E.a)),c0!==E.o&&(E.o=q($,"placeholder",c0,E.o)),f1!==E.i&&(E.i=q($,"focused",f1,E.i)),E},{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),q(c,"paddingLeft",2),q(i,"wrapMode","none"),U(i,()=>M("newTask.adopt.repoLine",{path:LJ(j().trim())||M("newTask.adopt.repoNone")})),x(($)=>q(i,"fg",Y.textMuted,$)),c})(),b(X0,{get when(){return g1.loading},get children(){var c=W("box"),i=W("text");return D(c,i),q(c,"paddingLeft",2),q(i,"wrapMode","none"),U(i,()=>M("newTask.hint.scanningWorktrees")),x(($)=>q(i,"fg",Y.textMuted,$)),c}}),b(X0,{get when(){return T0(()=>!g1.loading)()&&e().length===0},get children(){var c=W("box"),i=W("text");return D(c,i),q(c,"paddingLeft",2),q(i,"wrapMode","none"),U(i,(()=>{var $=T0(()=>(g1()??[]).length===0);return()=>$()?M("newTask.adopt.noUnlinked"):M("newTask.adopt.noMatch")})()),x(($)=>q(i,"fg",Y.textMuted,$)),c}}),b(X0,{get when(){return e().length>0},get children(){var c=W("box"),i=W("text");return D(c,i),q(c,"gap",0),q(c,"paddingLeft",2),U(c,b(X0,{get when(){return Y0().start>0},get children(){var $=W("text");return q($,"wrapMode","none"),U($,()=>M("newTask.picker.moreAbove",{count:Y0().start})),x((E)=>q($,"fg",Y.textMuted,E)),$}}),i),U(c,b(Q1,{get each(){return j0()},children:($,E)=>{let m0=()=>Y0().start+E(),v0=()=>m0()===$0(),A0=()=>e0().has($.path),c0=()=>[$.dirty?"dirty":"",$.kobeManaged?"":"external"].filter(Boolean).join(",");return(()=>{var f1=W("text");return q(f1,"wrapMode","none"),q(f1,"onMouseUp",()=>{_0(m0()),C0($.path)}),U(f1,()=>v0()?"\u25B8 ":" ",null),U(f1,()=>A0()?"[x] ":"[ ] ",null),U(f1,()=>$.branch,null),U(f1,(()=>{var L1=T0(()=>!!c0());return()=>L1()?` (${c0()})`:""})(),null),x((L1)=>{var VJ=v0()?Y.primary:A0()?Y.accent:Y.textMuted,Yz=v0()?Jz.BOLD:void 0;return VJ!==L1.e&&(L1.e=q(f1,"fg",VJ,L1.e)),Yz!==L1.t&&(L1.t=q(f1,"attributes",Yz,L1.t)),L1},{e:void 0,t:void 0}),f1})()}}),i),U(c,b(X0,{get when(){return Y0().start+Y0().items.length<Y0().total},get children(){var $=W("text");return q($,"wrapMode","none"),U($,()=>M("newTask.picker.moreBelow",{count:Y0().total-Y0().start-Y0().items.length})),x((E)=>q($,"fg",Y.textMuted,E)),$}}),i),q(i,"wrapMode","none"),U(i,(()=>{var $=T0(()=>e0().size>0);return()=>$()?M("newTask.adopt.hintSelected",{count:e0().size}):M("newTask.adopt.hintDefault")})()),x(($)=>q(i,"fg",Y.textMuted,$)),c}})]}}),null),U(k0,b(X0,{get when(){return h0()},get children(){var c=W("text"),i=E0("\u203B ");return D(c,i),q(c,"wrapMode","word"),U(c,h0,null),x(($)=>q(c,"fg",Y.error,$)),c}}),null),D(RJ,cz),D(RJ,UY),q(RJ,"flexDirection","row"),q(RJ,"justifyContent","space-between"),q(RJ,"alignItems","center"),q(RJ,"paddingTop",1),q(RJ,"paddingBottom",1),U(cz,()=>M("newTask.hint.legend")),q(UY,"onMouseUp",()=>g0()),U(UY,(()=>{var c=T0(()=>!!T());return()=>c()?M("newTask.button.cloning"):T0(()=>B()==="confirm")()?M("newTask.button.createFocused"):M("newTask.button.create")})()),x((c)=>{var i=Jz.BOLD,$=Y.text,E=V1("engine"),m0=R1("engine"),v0=Y.textMuted,A0=Y.textMuted,c0=B()==="confirm"?Y.primary:Y.text,f1=B()==="confirm"?Jz.BOLD:void 0;return i!==c.e&&(c.e=q(I0,"attributes",i,c.e)),$!==c.t&&(c.t=q(I0,"fg",$,c.t)),E!==c.a&&(c.a=q(MJ,"fg",E,c.a)),m0!==c.o&&(c.o=q(MJ,"attributes",m0,c.o)),v0!==c.i&&(c.i=q(mz,"fg",v0,c.i)),A0!==c.n&&(c.n=q(cz,"fg",A0,c.n)),c0!==c.s&&(c.s=q(UY,"fg",c0,c.s)),f1!==c.h&&(c.h=q(UY,"attributes",f1,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}),n})()}var TL=N(()=>{w();w();w();w();w();w();w();w();GJ();t1();j1();v1();GH();uJ();QH();dJ();gL();L9()});function $y(J,z,Y,Z){return new Promise((G)=>{J.replace(()=>b(yL,{defaultRepo:z,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)),J.setSize("medium")})}var qH;var lG=N(()=>{w();TL();L9();qH={show:$y}});function uL(J,z){return[{key:"tab",cmd:()=>z.cycleField(1)},{key:"shift+tab",cmd:()=>z.cycleField(-1)},{key:"ctrl+e",cmd:()=>z.stepEngine(1)},...J==="engine"?[{key:"left",cmd:()=>z.stepEngine(-1)},{key:"right",cmd:()=>z.stepEngine(1)},{key:"return",cmd:()=>z.commit()}]:[]]}import{TextAttributes as xL}from"@opentui/core";function ay(J){let z=c1(),{theme:Y}=d0(),[Z,G]=p("prompt"),[X,Q]=p(""),[f,H]=p(J.defaultVendor),[B,V]=p(J.defaultBaseRef);function j(F){let g=fH.indexOf(Z());G(fH[(g+F+fH.length)%fH.length]??"prompt")}function K(F){let g=J.engines;if(g.length===0)return;if(F>0){H((s)=>LY(g,s));return}let u=Math.max(0,g.indexOf(f()));H(g[(u-1+g.length)%g.length]??f())}function L(){let F=X().trim();if(!F){G("prompt");return}J.onSubmit({prompt:F,vendor:f(),baseRef:B().trim()||J.defaultBaseRef}),z.clear()}D1(()=>({enabled:!0,bindings:uL(Z(),{cycleField:j,stepEngine:K,commit:L})}));let A=(F)=>Z()===F?Y.accent:Y.textMuted;return(()=>{var F=W("box"),g=W("box"),u=W("text"),s=W("text"),S=W("box"),O=W("text"),C=W("input"),y=W("box"),a=W("text"),l=W("box"),t=W("text"),J0=W("input"),T=W("box"),Q0=W("text");return D(F,g),D(F,S),D(F,y),D(F,l),D(F,T),q(F,"paddingLeft",2),q(F,"paddingRight",2),q(F,"gap",1),D(g,u),D(g,s),q(g,"flexDirection","row"),q(g,"justifyContent","space-between"),U(u,()=>M("quickTask.title",{repoLabel:J.repoLabel})),q(s,"onMouseUp",()=>J.onCancel()),U(s,()=>M("quickTask.esc")),D(S,O),D(S,C),q(S,"gap",0),U(O,()=>M("quickTask.promptLabel")),q(C,"onInput",(r)=>Q(jJ(r))),q(C,"onSubmit",()=>L()),D(y,a),q(y,"flexDirection","row"),q(y,"gap",2),U(a,()=>M("quickTask.engineLabel")),U(y,b(Q1,{get each(){return J.engines},children:(r)=>(()=>{var W0=W("text");return q(W0,"onMouseUp",()=>{H(r),G("engine")}),U(W0,()=>J.engineLabel(r)),x((O0)=>{var K0=f()===r?Y.primary:Y.textMuted,_=f()===r?xL.BOLD:void 0;return K0!==O0.e&&(O0.e=q(W0,"fg",K0,O0.e)),_!==O0.t&&(O0.t=q(W0,"attributes",_,O0.t)),O0},{e:void 0,t:void 0}),W0})()}),null),D(l,t),D(l,J0),q(l,"gap",0),U(t,()=>M("quickTask.branchLabel")),q(J0,"onInput",(r)=>V(jJ(r))),q(J0,"onSubmit",()=>L()),D(T,Q0),q(T,"paddingBottom",1),U(Q0,()=>M("quickTask.legend")),x((r)=>{var W0=xL.BOLD,O0=Y.text,K0=Y.textMuted,_=A("prompt"),P=X(),k=M("quickTask.promptPlaceholder"),o=Z()==="prompt",I=A("engine"),h=A("branch"),G0=B(),q0=J.defaultBaseRef,H0=Z()==="branch",b0=Y.textMuted;return W0!==r.e&&(r.e=q(u,"attributes",W0,r.e)),O0!==r.t&&(r.t=q(u,"fg",O0,r.t)),K0!==r.a&&(r.a=q(s,"fg",K0,r.a)),_!==r.o&&(r.o=q(O,"fg",_,r.o)),P!==r.i&&(r.i=q(C,"value",P,r.i)),k!==r.n&&(r.n=q(C,"placeholder",k,r.n)),o!==r.s&&(r.s=q(C,"focused",o,r.s)),I!==r.h&&(r.h=q(a,"fg",I,r.h)),h!==r.r&&(r.r=q(t,"fg",h,r.r)),G0!==r.d&&(r.d=q(J0,"value",G0,r.d)),q0!==r.l&&(r.l=q(J0,"placeholder",q0,r.l)),H0!==r.u&&(r.u=q(J0,"focused",H0,r.u)),b0!==r.c&&(r.c=q(Q0,"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}),F})()}function _y(J,z){return new Promise((Y)=>{J.replace(()=>b(ay,DD(z,{onSubmit:(Z)=>Y(Z),onCancel:()=>Y(void 0)})),()=>Y(void 0)),J.setSize("medium")})}var fH,EL;var wL=N(()=>{w();w();w();w();w();w();w();j1();t1();v1();GJ();uJ();dJ();lG();fH=["prompt","engine","branch"];EL={show:_y}});async function HH(J={}){let z=J.logTag??"orch-connect",Y=J.connect??eJ,Z=null;try{let G=await Y();if(!G)return rz(z,"no daemon running \u2014 caller degrades"),null;return Z=new DJ(G,{...J.orchestratorOptions,channels:J.channels}),await Z.init(),Z}catch(G){return o1(z,G),Z?.dispose(),null}}var M9=N(()=>{XZ();OJ();$Y()});function PL(J){let[z,Y]=p(J.initial??"sidebar"),[Z,G]=p(0),X=HJ();function Q(j){if(G((L)=>L+1),z()===j)return;let K=X?.currentFocusedRenderable;if(K&&!K.isDestroyed)try{K.blur()}catch{}Y(j)}function f(j){let L=(BH.indexOf(z())+j+BH.length)%BH.length;Q(BH[L])}let H=new Map;function B(j){let K=H.get(j);if(!K)K=()=>z()===j,H.set(j,K);return K}let V={focused:z,is:B,setFocused:Q,cycle:f,refocusTick:Z};return b(py.Provider,{value:V,get children(){return J.children}})}var BH,py;var hL=N(()=>{w();w();j1();BH=["sidebar","workspace","files","terminal"],py=Sz(null)});function vL(){for(let J of aY){let z=ry.get(J.id);if(!z)continue;let Y=J;Y.keys=[...z.keys],Y.hint=z.hint?{...z.hint}:void 0}}function mL(){oy((J)=>J+1)}function O9(J){return sy.get(J)}function ty(J){return O9(J)?.keys??[]}function _Y(J){let z=[];for(let Y in J){let Z=J[Y];if(!Z)continue;let G=ty(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)=>z.push({key:X,cmd:Z,slot:Q}))}return z}var aY,ry,F9,oy,sy;var $G=N(()=>{j1();aY=[{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"}}],ry=new Map(aY.map((J)=>[J.id,{keys:[...J.keys],hint:J.hint?{...J.hint}:void 0}]));[F9,oy]=p(0);sy=new Map(aY.map((J)=>[J.id,J]))});function jH(){if(pY)return pY;let J=oq();if(!J.exists)return pY={path:J.path,exists:!1,applied:[],warnings:[]},pY;let z=[...J.warnings],Y=tq(J.doc,process.platform,{chordOptsFor:n8});z.push(...Y.warnings);let Z=Y.entries.filter((f)=>f.id.startsWith("tmux.")),G=Y.entries.filter((f)=>!f.id.startsWith("tmux.")),X=S6(aY,G);z.push(...X.warnings);let Q=[...X.applied];if(Z.length>0){let f=d8(Z);z.push(...f.warnings);for(let H of f.overridden){if(H===Ez){Q.push({id:H,keys:f.focus.map((j)=>j?.chord??"").filter((j)=>j!==""),defaultKeys:EY});continue}let B=f.binds[H];Q.push({id:H,keys:B?[B.chord]:[],defaultKeys:[IZ[H]]});let V=aY.find((j)=>j.id===H);if(V?.hint)V.hint.keys=B?`${RG(H)?"prefix ":""}${B.chord}`:"\u2014"}}for(let f of z)console.warn(`[kobe/keybindings] ${f}`);return pY={path:J.path,exists:!0,applied:Q,warnings:z},pY}function cL(){return pY??jH()}function dL(){pY=null,b6(),u6(),vL();let J=jH();return mL(),J}var pY=null;var A9=N(()=>{m8();zf();eq();$G()});var ey=250,aG,nL;var HQ=N(()=>{cG();YZ();ej();({use:aG,provider:nL}=zH({name:"KV",init:()=>{let[J,z]=hz(l1()),Y=new Set,Z=null;function G(f){if(Y.size===0)return!0;try{let H={};for(let B of Y)H[B]=J[B];return zZ(H),Y.clear(),!0}catch(H){return console.error(`[kobe] kv ${f} failed:`,H),!1}}function X(){if(Z)clearTimeout(Z);Z=setTimeout(()=>{Z=null,G("write")},ey)}let Q={get ready(){return!0},get store(){return J},signal(f,H){if(J[f]===void 0)z(f,H);return[()=>Q.get(f),(B)=>Q.set(f,B)]},get(f,H){return J[f]??H},set(f,H){z(f,H),Y.add(f),X()},flush(){if(Z)clearTimeout(Z),Z=null;return G("flush")},clear(){for(let f of Object.keys(J))z(f,void 0);if(Z)clearTimeout(Z),Z=null;Y.clear();try{IW({})}catch(f){console.error("[kobe] kv clear write failed:",f)}}};return Q}}))});var WH="../pulse-n3cq1btw.wav";var iL=()=>{};import{existsSync as zT,mkdirSync as YT}from"fs";import{tmpdir as ZT}from"os";import{basename as GT,isAbsolute as XT,join as R9,resolve as QT}from"path";function fT(J,z,Y){if(J==="ffplay")return[J,"-autoexit","-nodisp","-af",`volume=${Y}`,z];if(J==="mpv")return[J,"--no-video","--audio-display=no","--volume",String(Math.round(Y*100)),z];if(J==="mpg123"||J==="mpg321")return[J,"-g",String(Math.round(Y*100)),z];if(J==="mplayer")return[J,"-vo","null","-volume",String(Math.round(Y*100)),z];if(J==="afplay"||J==="omxplayer"||J==="aplay"||J==="cmdmp3")return[J,z];if(J==="play")return[J,"-v",String(Y),z];if(J==="cvlc")return[J,`--gain=${Y}`,"--play-and-exit",z];return[J,"-c",`(New-Object Media.SoundPlayer '${z.replace(/'/g,"''")}').PlaySync()`]}function HT(){if(VH!==void 0)return VH;let z=(process.env.PATH??"").split(":").filter(Boolean);return VH=qT.find((Y)=>z.some((Z)=>zT(R9(Z,Y))))??null,VH}async function BT(){return aL??=(async()=>{YT($L,{recursive:!0});let J=R9($L,GT(lL)),z=Bun.file(J);if(await z.exists())return J;return await Bun.write(z,Bun.file(lL)),J})(),aL}function _L(J=0.4){let z=HT();if(!z)return;BT().then((Y)=>{try{Bun.spawn(fT(z,Y,J),{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).unref?.()}catch{}}).catch(()=>{return})}var lL,$L,qT,VH,aL;var pL=N(()=>{iL();lL=XT(WH)?WH:QT(import.meta.dir,WH),$L=R9(ZT(),"kobe-sfx"),qT=["ffplay","mpv","mpg123","mpg321","mplayer","afplay","play","omxplayer","aplay","cmdmp3","cvlc","powershell.exe"]});function rL(J,z){return`${J}:${z}`}function sL(J){let z=aG(),[Y,Z]=p([]),[G,X]=p(new Map),Q=ZH(),f=0;function H(K){if(X((L)=>{let A=new Map(L),F=rL(K.taskId,K.tabId),g=L.get(F);if(g==="needs_input"||g==="error")return L;return A.set(F,K.kind),A}),z.get("notifications.sound.enabled",!0)!==!1){try{process.stdout.write("\x07")}catch{}_L()}if(z.get("notifications.toast.enabled",!0)!==!1){let L=++f,A={id:L,kind:K.kind,taskId:K.taskId,tabId:K.tabId,title:K.title};Z((F)=>[...F,A]),Q.set(()=>B(L),jT)}}function B(K){Z((L)=>L.filter((A)=>A.id!==K))}function V(K,L){X((A)=>{let F=rL(K,L);if(!A.has(F))return A;let g=new Map(A);return g.delete(F),g})}let j={toasts:Y,unread:G,notify:H,dismiss:B,markRead:V};return b(oL.Provider,{value:j,get children(){return J.children}})}function KH(){let J=EJ(oL);if(!J)throw Error("useNotifications must be used within a NotificationsProvider");return J}var jT=4500,oL;var UH=N(()=>{w();j1();f9();pL();HQ();oL=Sz()});function g9(J,z){if(typeof z.theme==="string"&&z.theme.length>0&&z.theme!==J.selectedTheme()){if(!J.hasTheme(z.theme))J.reloadUserThemes();if(J.hasTheme(z.theme))J.setTheme(z.theme)}if(typeof z.transparentBackground==="boolean"&&z.transparentBackground!==J.transparentBackground())J.setTransparentBackground(z.transparentBackground);if(z.focusAccent===null||typeof z.focusAccent==="string"){let Y=VT(z.focusAccent);if(Y&&Y!==J.focusAccent())J.setFocusAccent(Y)}}function VT(J){if(J===null)return"primary";return WT.includes(J)?J:null}var WT;var tL=N(()=>{WT=["primary","success","info"]});import{readFileSync as KT}from"fs";function eL(J){try{let z=JSON.parse(KT(iJ(),"utf8")),Y=typeof z.activeTheme==="string"&&YQ(z.activeTheme)?z.activeTheme:J,Z=z.transparentBackground===!0,G=typeof z.focusAccent==="string"&&hZ.includes(z.focusAccent)?z.focusAccent:null,X=ZQ(z[DH])?z[DH]:nG;return{theme:Y,transparent:Z,focusAccent:G,locale:X}}catch{return{theme:J,transparent:!1,focusAccent:null,locale:nG}}}var DH="locale";var C9=N(()=>{p1();v1();iG()});function DT(J){if(J)xQ(J);_W(),jH();for(let{name:z,theme:Y}of PX())z9(z,Y)}function LT(J){let z={backgroundColor:"transparent",externalOutputMode:"passthrough",exitOnCtrlC:!1,screenMode:"alternate-screen",useKittyKeyboard:{}};return J?{...z,onDestroy:J}:z}function MT(J){let z=()=>J.children,Y=()=>J.notifications?b(sL,{get children(){return z()}}):z(),Z=()=>b(jL,{get children(){return Y()}}),G=()=>J.focus?b(PL,{initial:"sidebar",get children(){return Z()}}):Z(),X=()=>J.kv?b(nL,{get children(){return G()}}):G();return b(yD,{mode:"dark",get theme(){return J.theme},get children(){return X()}})}function FT(J){let{theme:z}=d0();return JJ(()=>o1("pane-crash",J.error)),(()=>{var Y=W("box"),Z=W("text"),G=W("text");return D(Y,Z),D(Y,G),q(Y,"flexDirection","column"),q(Y,"flexGrow",1),q(Y,"paddingLeft",1),q(Y,"paddingTop",1),q(Y,"gap",1),U(Z,()=>M("common.paneCrash.title")),U(G,()=>M("common.paneCrash.hint")),x((X)=>{var{background:Q,error:f,textMuted:H}=z;return Q!==X.e&&(X.e=q(Y,"backgroundColor",Q,X.e)),f!==X.t&&(X.t=q(Z,"fg",f,X.t)),H!==X.a&&(X.a=q(G,"fg",H,X.a)),X},{e:void 0,t:void 0,a:void 0}),Y})()}function OT(J){let z=d0(),Y={selectedTheme:()=>z.selected,hasTheme:(f)=>z.has(f),setTheme:(f)=>z.set(f),reloadUserThemes:()=>{for(let{name:f,theme:H}of PX())z9(f,H)},transparentBackground:()=>z.transparentBackground,setTransparentBackground:(f)=>z.setTransparentBackground(f),focusAccent:()=>z.focusAccent,setFocusAccent:(f)=>z.setFocusAccent(f)};g9(Y,{theme:J.boot.theme,transparentBackground:J.boot.transparent,focusAccent:J.boot.focusAccent}),GQ(J.boot.locale);let[Z,G]=p(null),X=!1;JJ(()=>{(async()=>{let f=await HH({logTag:"ui-prefs",channels:["ui-prefs","keybindings"]});if(!f)return;if(X){f.dispose();return}G(f)})()}),Y1(()=>{let f=Z()?.uiPrefsSignal()();if(!f)return;if(g9(Y,f),ZQ(f.locale))GQ(f.locale)});let Q=null;return Y1(()=>{let f=Z()?.keybindingsRevSignal()();if(f==null)return;if(Q===null||f===Q){Q=f;return}Q=f,dL()}),N1(()=>{X=!0,Z()?.dispose()}),null}async function AJ(J){DT(J.logContext);let z=eL(UT),Y=await J.setup(z),Z=J.providers?.kv??!0,G=J.providers?.focus??!0,X=J.providers?.notifications??!1;await gD(()=>b(MT,{get theme(){return z.theme},kv:Z,focus:G,notifications:X,get children(){return[b(OT,{boot:z}),b(MV,{fallback:(Q)=>b(FT,{error:Q}),get children(){return Y.root()}})]}}),LT(Y.onDestroy))}var UT="claude";var rY=N(()=>{w();w();w();w();w();w();w();XZ();j1();M9();hL();A9();HQ();UH();v1();Xf();GJ();dJ();tL();C9()});async function N9(J,z,Y,Z,G={}){let X=M1(z.id);if(await W1(X))return!0;let Q=z.worktreePath;if(!Q)Q=await J.ensureWorktree(z.id);if(!Q)throw Error(`task ${z.id} has no worktree`);let{ensureSession:f}=await Promise.resolve().then(() => (fJ(),tJ)),{resolveEngineLaunchInit:H}=await Promise.resolve().then(() => (OG(),v8)),B=H(Y,Q,{kind:G.includeInitPrompt?"repo-init":"none"});if(!await f({name:X,cwd:Q,command:TJ(Z),taskId:z.id,vendor:Z,repo:Y,launchInit:B}))throw Error(`failed to start tmux session for ${z.id}`);return!1}async function LH(J,z,Y,Z,G={}){await N9(J,z,Y,Z,G),await J.setActiveTask(z.id).catch(()=>{});let{prepareWindowForSwitch:X}=await Promise.resolve().then(() => (fJ(),tJ));await X(M1(z.id)),await P0(["switch-client","-t",`=${M1(z.id)}`])}var k9=N(()=>{hJ();P1()});var J3={};B1(J3,{startNewTaskHost:()=>AT,NewTaskPage:()=>MH});function MH(J){let{theme:z}=d0(),Y=c1();JJ(()=>{Z()});async function Z(){let G=gJ(),X=J.defaultRepo||G[0]||process.cwd(),Q=dz(S1("lastSelectedVendor"),lz()),f=await oz(),H=J.orchestrator,B=await qH.show(Y,X,G,{defaultVendor:Q,availableVendors:f,discoverAdoptable:H?(j)=>H.discoverAdoptableWorktrees(j):void 0});if(!B)process.exit(0);if(r1("lastSelectedVendor",B.vendor),$z(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 LH(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 q(G,"flexDirection","column"),q(G,"flexGrow",1),x((X)=>q(G,"backgroundColor",z.background,X)),G})()}async function AT(J){await AJ({setup:async()=>{let z=null;try{let Y=await Fz(),Z=new DJ(Y);await Z.init(),z=Z}catch(Y){console.error("[kobe new-task] daemon unavailable; cannot create task:",Y)}return{root:()=>b(MH,{get defaultRepo(){return J.defaultRepo},orchestrator:z}),onDestroy:()=>{z?.dispose()}}}})}var b9=N(()=>{w();w();w();w();OJ();j1();$Y();QZ();O1();t1();lG();v1();rY();k9();dJ()});function FH(J,z,Y,Z,G={}){if(J.length===0)return z;let X=new Map;for(let H of J)X.set(Y(H),H);let Q=J.length===z.length,f=Array(z.length);for(let H=0;H<z.length;H++){let B=z[H],V=X.get(Y(B));if(V&&Z(V,B)&&(!G.samePosition||J[H]===V)){if(f[H]=V,Q&&J[H]!==V)Q=!1}else f[H]=B,Q=!1}return Q?J:f}function z3(J,z){if(!J)return!0;let Y=J.toLowerCase(),Z=z.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 RT(J,z){let Y=z==="archived";return J.filter((Z)=>Z.archived===Y)}function S9(J,z,Y,Z="default",G){let X=RT(J,z),Q=Y?.trim()??"",f=G?zz(G):null,H=Q?X.filter((F)=>z3(Q,`${F.title} ${gz(F.repo)}`)):X,B=[],V=[],j=[],K=new Set;for(let F of H){if(F.kind==="main"){let g=zz(F.repo);if(K.has(g))continue;K.add(g),B.push(F);continue}if(f&&zz(F.repo)!==f)continue;if(F.pinned===!0)V.push(F);else j.push(F)}if(B.sort((F,g)=>gz(F.repo).localeCompare(gz(g.repo))),Z==="recent")V.sort(Y3),j.sort(Y3);let L=[],A=0;for(let F of B)L.push({kind:"task",task:F,flatIndex:A}),A++;for(let F of V)L.push({kind:"task",task:F,flatIndex:A}),A++;for(let F of j)L.push({kind:"task",task:F,flatIndex:A}),A++;return L}function Y3(J,z){let Y=Z3(z)-Z3(J);if(Y!==0)return Y;return String(z.id).localeCompare(String(J.id))}function Z3(J){let z=Date.parse(J.updatedAt||J.createdAt);return Number.isFinite(z)?z:0}function gz(J){let z=J.split("/").filter(Boolean);return z[z.length-1]??J}function zz(J){return J.trim().replace(/[\\/]+$/,"")||J}function gT(J,z){let Y=gz(J);if(!z.some((G)=>G!==J&&gz(G)===Y))return Y;return J.replace(/[\\/]+$/,"").split(/[\\/]+/).slice(-2).join("/")}function G3(J,z){let Y=z==="archived",Z=new Map;for(let X of J){let Q=zz(X.repo),f=Z.get(Q)??{repo:X.repo,count:0};if(X.kind==="main")f.repo=X.repo;else if(X.archived===Y)f.count+=1;Z.set(Q,f)}let G=[...Z.values()].map((X)=>X.repo);return[...Z.values()].map((X)=>({repo:X.repo,label:gT(X.repo,G),count:X.count})).sort((X,Q)=>X.label.localeCompare(Q.label))}function X3(J,z){if(J.length===0)return-1;if(!z)return J[0]?.flatIndex??-1;let Y=zz(z),Z=J.find((X)=>X.task.kind!=="main"&&zz(X.task.repo)===Y);if(Z)return Z.flatIndex;return J.find((X)=>X.task.kind==="main"&&zz(X.task.repo)===Y)?.flatIndex??J[0]?.flatIndex??-1}function I9(J){return J.map((z)=>z.task.id)}function Q3(J){let z=[],Y=[];for(let Z of J)if(Z.task.kind==="main")z.push(Z);else Y.push(Z);return{projectRows:z,taskRows:Y}}function CT(J,z){return J===z||J.id===z.id&&J.kind===z.kind&&J.title===z.title&&J.repo===z.repo&&J.branch===z.branch&&J.worktreePath===z.worktreePath&&J.status===z.status&&J.archived===z.archived&&J.pinned===z.pinned&&J.vendor===z.vendor}function q3(J,z){return FH(J,z,(Y)=>Y.task.id,(Y,Z)=>Y.flatIndex===Z.flatIndex&&CT(Y.task,Z.task),{samePosition:!0})}var OH=()=>{};var f3={};B1(f3,{startQuickTaskHost:()=>ST});async function NT(J,z){let Y,Z;if(z){let j=await IJ(z,["@kobe_task","@kobe_worktree"]);Y=j["@kobe_task"]||void 0,Z=j["@kobe_worktree"]||void 0}let G=(Y?J?.getTask(Y)?.repo:void 0)??gJ()[0],X=G??Z??process.cwd();if(!G)return{ctx:null,fallbackRepo:X};let Q=await oz(),f=dz(S1("lastSelectedVendor"),lz()),H=Q.length===0||Q.includes(f)?f:Q[0]??f,B=XQ(LJ(G))??Rz,V=Q.length>0?Q:[H];return{ctx:{repo:G,vendor:H,baseRef:B,engines:V},fallbackRepo:X}}async function kT(J,z,Y,Z,G){let X=await N9(J,z,Y,Z),Q=M1(z.id),{pane:f}=await EX(Q,!X);if(f)await wX(f,G)}function bT(J){let{theme:z}=d0(),Y=c1();JJ(()=>{Z()});async function Z(){let G=J.ctx,X=await EL.show(Y,{repoLabel:gz(G.repo),engines:G.engines,defaultVendor:G.vendor,defaultBaseRef:G.baseRef,engineLabel:RZ});if(X===void 0)process.exit(0);r1("lastSelectedVendor",X.vendor),$z(G.repo);let Q=J.orchestrator;if(!Q)console.error("[kobe quick-task] no daemon; cannot create task"),process.exit(1);try{let f=await Q.createTask({repo:G.repo,baseRef:X.baseRef,vendor:X.vendor});await kT(Q,f,G.repo,X.vendor,X.prompt),await LH(Q,f,G.repo,X.vendor)}catch(f){console.error("[kobe quick-task] task.create/deliver failed:",f),process.exit(1)}process.exit(0)}return(()=>{var G=W("box");return q(G,"flexDirection","column"),q(G,"flexGrow",1),x((X)=>q(G,"backgroundColor",z.background,X)),G})()}async function ST(J){await AJ({setup:async()=>{let z=null;try{let G=await Fz(),X=new DJ(G);await X.init(),z=X}catch(G){console.error("[kobe quick-task] daemon unavailable; cannot create task:",G)}let{ctx:Y,fallbackRepo:Z}=await NT(z,J.session);return{root:()=>Y?b(bT,{ctx:Y,orchestrator:z}):b(MH,{defaultRepo:Z,orchestrator:z}),onDestroy:()=>{z?.dispose()}}}})}var H3=N(()=>{w();w();w();w();OJ();j1();$Y();QZ();hJ();O1();P1();Yf();t1();wL();v1();GH();rY();QH();k9();b9();OH();dJ()});function RH(J){let z=J.trim().split(/\s+/).pop()??"",Y=/^([CM])-(.+)$/.exec(z);if(!Y)return null;let Z=Y[1]==="C"?"\u2303":"\u2325",G=Y[2]??"";return`${Z}${G.length===1?G.toUpperCase():G}`}function AH(J,z){if(J.includes("/"))return J.split("/").map((G)=>AH(G,z)).join("/");let Y=J.toLowerCase();if(Y==="tab")return"tab";let Z=yT[Y];if(Z)return Z;if(/^f\d{1,2}$/.test(Y))return Y.toUpperCase();if(!z)return J;if(/^[a-z]$/.test(Y))return J.toUpperCase();return J.replace(/[a-z]+/gi,(G)=>G.toUpperCase())}function _G(J,z="\u2303B"){let Y=J.trim();if(!Y)return Y;let Z=/^prefix\s+(.+)$/i.exec(Y);if(Z){let f=Z[1]??"";return`${z} ${f.includes("+")?_G(f,z):AH(f,!0)}`}let G=Y.split("+");if(G.length===1)return AH(G[0]??"",!1);let X=G[G.length-1]??"";return`${G.slice(0,-1).map((f)=>IT[f.toLowerCase().trim()]??f).join("")} ${AH(X,!0)}`}var IT,yT;var y9=N(()=>{IT={ctrl:"\u2303",control:"\u2303",alt:"\u2325",opt:"\u2325",option:"\u2325",shift:"\u21E7",cmd:"\u2318",command:"\u2318",meta:"\u2318",super:"\u2318"},yT={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 B3}from"@opentui/core";function TT(J){let z=new Map,Y=[];for(let Z of J){if(!z.has(Z.category))z.set(Z.category,[]),Y.push(Z.category);z.get(Z.category).push(Z)}return Y.map((Z)=>({category:Z,rows:z.get(Z)}))}function pG(J={}){let z=c1(),{theme:Y}=d0(),Z=()=>TT(aY),G=()=>J.onClose?J.onClose():z.clear(),[X,Q]=p("\u2303B");return JJ(()=>{l0(["show-options","-g","prefix"]).then(({code:f,stdout:H})=>{if(f!==0)return;let B=RH(H);if(B)Q(B)})}),D1(()=>({bindings:[{key:"?",cmd:G}]})),(()=>{var f=W("box"),H=W("box"),B=W("text"),V=W("text"),j=W("scrollbox"),K=W("box");return D(f,H),D(f,j),q(f,"paddingLeft",2),q(f,"paddingRight",2),q(f,"gap",1),q(f,"flexShrink",1),D(H,B),D(H,V),q(H,"flexDirection","row"),q(H,"justifyContent","space-between"),q(H,"flexShrink",0),U(B,()=>M("help.title")),q(V,"onMouseUp",G),U(V,()=>M("help.esc")),D(j,K),q(j,"flexShrink",1),q(j,"flexGrow",1),q(j,"stickyScroll",!1),q(K,"paddingBottom",1),q(K,"gap",1),q(K,"paddingRight",1),U(K,b(Q1,{get each(){return Z()},children:(L)=>(()=>{var A=W("box"),F=W("text");return D(A,F),q(A,"gap",0),U(F,()=>G9("category",L.category)),U(A,b(Q1,{get each(){return L.rows},children:(g)=>{let u=g.hint?.keys??g.keys[0]??"\u2014",s=()=>u==="\u2014"?"\u2014":_G(u,X()),S=()=>(g.hint?g.keys:g.keys.slice(1)).map((O)=>_G(O,X()));return(()=>{var O=W("box"),C=W("box"),y=W("text"),a=W("box"),l=W("text");return D(O,C),D(O,a),q(O,"flexDirection","row"),q(O,"gap",2),q(O,"paddingLeft",1),D(C,y),q(C,"width",14),U(y,s),D(a,l),q(a,"flexGrow",1),U(l,()=>G9("desc",g.id)),U(O,(()=>{var t=T0(()=>S().length>0);return()=>t()?(()=>{var J0=W("box"),T=W("text");return D(J0,T),U(T,()=>`(${S().join(", ")})`),x((Q0)=>q(T,"fg",Y.textMuted,Q0)),J0})():null})(),null),x((t)=>{var{primary:J0,text:T}=Y;return J0!==t.e&&(t.e=q(y,"fg",J0,t.e)),T!==t.t&&(t.t=q(l,"fg",T,t.t)),t},{e:void 0,t:void 0}),O})()}}),null),x((g)=>{var u=Y.accent,s=B3.BOLD;return u!==g.e&&(g.e=q(F,"fg",u,g.e)),s!==g.t&&(g.t=q(F,"attributes",s,g.t)),g},{e:void 0,t:void 0}),A})()})),x((L)=>{var A=B3.BOLD,F=Y.text,g=Y.textMuted,u={trackOptions:{backgroundColor:Y.backgroundDialog,foregroundColor:Y.borderActive}};return A!==L.e&&(L.e=q(B,"attributes",A,L.e)),F!==L.t&&(L.t=q(B,"fg",F,L.t)),g!==L.a&&(L.a=q(V,"fg",g,L.a)),u!==L.o&&(L.o=q(j,"verticalScrollbarOptions",u,L.o)),L},{e:void 0,t:void 0,a:void 0,o:void 0}),f})()}var T9=N(()=>{w();w();w();w();w();w();w();j1();P1();$G();v1();GJ();y9();uJ();dJ();pG.show=(J)=>{J.replace(()=>b(pG,{}))}});import{TextAttributes as uT}from"@opentui/core";function j3(J){let z=c1(),{theme:Y}=d0(),[Z,G]=p(J.currentTitle);function X(){let Q=Z().trim();if(!Q&&!J.allowEmpty)return;J.onSubmit(Q),z.clear()}return(()=>{var Q=W("box"),f=W("box"),H=W("text"),B=W("text"),V=W("box"),j=W("text"),K=W("input"),L=W("box"),A=W("text");return D(Q,f),D(Q,V),D(Q,L),q(Q,"paddingLeft",2),q(Q,"paddingRight",2),q(Q,"gap",1),D(f,H),D(f,B),q(f,"flexDirection","row"),q(f,"justifyContent","space-between"),U(H,()=>J.dialogTitle??M("common.rename.defaultTitle")),D(B,E0("esc")),q(B,"onMouseUp",()=>J.onCancel()),D(V,j),D(V,K),q(V,"gap",0),U(j,()=>J.fieldLabel??M("common.rename.defaultFieldLabel")),q(K,"focused",!0),q(K,"onInput",(F)=>G(jJ(F))),q(K,"onSubmit",()=>X()),D(L,A),q(L,"paddingBottom",1),U(A,()=>M("common.rename.footerHint",{submitLabel:J.submitLabel??M("common.rename.defaultSubmitLabel")})),x((F)=>{var g=uT.BOLD,u=Y.text,s=Y.textMuted,S=Y.accent,O=Z(),C=J.placeholder??J.currentTitle,y=Y.textMuted;return g!==F.e&&(F.e=q(H,"attributes",g,F.e)),u!==F.t&&(F.t=q(H,"fg",u,F.t)),s!==F.a&&(F.a=q(B,"fg",s,F.a)),S!==F.o&&(F.o=q(j,"fg",S,F.o)),O!==F.i&&(F.i=q(K,"value",O,F.i)),C!==F.n&&(F.n=q(K,"placeholder",C,F.n)),y!==F.s&&(F.s=q(A,"fg",y,F.s)),F},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),Q})()}var W3=N(()=>{w();w();w();w();w();w();w();GJ();j1();v1();dJ();lG()});function xT(J,z,Y={}){return new Promise((Z)=>{J.replace(()=>b(j3,{currentTitle:z,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 VY;var u9=N(()=>{w();W3();VY={show:xT}});import{TextAttributes as ET}from"@opentui/core";function wT(J){if(!J)return J;return J.charAt(0).toUpperCase()+J.slice(1)}function KY(J){let z=c1(),{theme:Y}=d0(),[Z,G]=hz({active:J.initialActive??"confirm"});return D1(()=>({bindings:[{key:"return",cmd:()=>{if(Z.active==="confirm")J.onConfirm?.();if(Z.active==="cancel")J.onCancel?.();z.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"),f=W("text"),H=W("text"),B=W("text"),V=W("box");return D(X,Q),D(X,B),D(X,V),q(X,"paddingLeft",2),q(X,"paddingRight",2),q(X,"paddingBottom",1),q(X,"gap",0),D(Q,f),D(Q,H),q(Q,"flexDirection","row"),q(Q,"justifyContent","space-between"),U(f,()=>J.title),D(H,E0("esc")),q(H,"onMouseUp",()=>z.clear()),U(B,()=>J.message),q(V,"flexDirection","row"),q(V,"justifyContent","flex-end"),q(V,"paddingTop",1),U(V,b(Q1,{each:["cancel","confirm"],children:(j)=>(()=>{var K=W("box"),L=W("text");return D(K,L),q(K,"paddingLeft",1),q(K,"paddingRight",1),q(K,"onMouseUp",()=>{if(j==="confirm")J.onConfirm?.();if(j==="cancel")J.onCancel?.();z.clear()}),U(L,()=>wT(j==="cancel"?J.label??M("common.cancel"):J.confirmLabel??M("common.confirm"))),x((A)=>{var F=j===Z.active?Y.primary:void 0,g=j===Z.active?Y.selectedListItemText:Y.textMuted;return F!==A.e&&(A.e=q(K,"backgroundColor",F,A.e)),g!==A.t&&(A.t=q(L,"fg",g,A.t)),A},{e:void 0,t:void 0}),K})()})),x((j)=>{var K=ET.BOLD,L=Y.text,A=Y.textMuted,F=Y.textMuted;return K!==j.e&&(j.e=q(f,"attributes",K,j.e)),L!==j.t&&(j.t=q(f,"fg",L,j.t)),A!==j.a&&(j.a=q(H,"fg",A,j.a)),F!==j.o&&(j.o=q(B,"fg",F,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),X})()}var x9=N(()=>{w();w();w();w();w();w();w();GJ();j1();cG();v1();uJ();dJ();KY.show=(J,z,Y,Z,G,X)=>{return new Promise((Q)=>{J.replace(()=>b(KY,{title:z,message:Y,onConfirm:()=>Q(!0),onCancel:()=>Q(!1),label:Z,confirmLabel:G,get initialActive(){return X?.initialActive}}),()=>Q(void 0)),J.setSize("small")})}});import{unlinkSync as PT}from"fs";import{join as hT}from"path";function V3(J){return J instanceof DJ}function K3(J,z){try{J?.destroy()}catch(Y){console.error(`kobe: renderer.destroy() failed during ${z}:`,Y)}}async function E9(J,z,Y){if(await KY.show(J,"Reset UI state?","Wipes ~/.config/kobe/state.json and ~/.kobe/tasks.json, then quits kobe \u2014 relaunch for a fresh start with empty Working session / Archive lists. Worktrees on disk and Claude Code session history are NOT touched.","cancel")!==!0)return;z.clear();try{PT(hT(Nz(),".kobe","tasks.json"))}catch(G){if(G.code!=="ENOENT")console.error("kobe: failed to delete tasks.json during reset:",G)}K3(Y,"reset"),process.stderr.write(`kobe: UI state reset. Relaunch kobe to start fresh.
264
+ `),process.exit(0)}async function w9(J,z,Y){if(!(z instanceof DJ))return;if(await KY.show(J,"Restart backend?","Quits this kobe window. Relaunch to (re)spawn the daemon. Any other attached windows keep their connection. In v0.6 the daemon's RPC surface shrank to task CRUD + subscribe, so a graceful daemon.stop RPC is no longer plumbed through the client \u2014 quit + relaunch is the path.","cancel")!==!0)return;K3(Y,"daemon restart"),process.stderr.write(`kobe: window closed. Relaunch kobe to start fresh.
265
+ `),process.exit(0)}var U3=N(()=>{$Y();p1();x9()});function vT(J){return`theme:${J}`}function P9(J){return`language:${J}`}function h9(J){return`accent:${J}`}function mT(J){return`engine:${J}`}function BQ(J){return`surface:${J}`}function v9(J){return[...J.themeNames.map((z)=>({id:vT(z),kind:"theme",name:z})),...vZ.map((z)=>({id:P9(z.id),kind:"language",locale:z.id})),{id:"transparent",kind:"transparent"},...J.focusAccentSlots.map((z)=>({id:h9(z),kind:"focusAccent",slot:z})),{id:"toast",kind:"toast"},{id:"sound",kind:"sound"},{id:"zen-keep-tasks",kind:"zenKeepTasks"},{id:BQ("chattab"),kind:"surface",surface:"chattab"},{id:BQ("taskpanel"),kind:"surface",surface:"taskpanel"},{id:"editor-kind",kind:"editorKind"},{id:"editor-custom",kind:"editorCustom"}]}function cT(J){return[...J.map((z)=>({id:mT(z),kind:"engine",vendor:z})),{id:"add-engine",kind:"engineAdd"}]}function dT(){return[{id:"feedback-title",kind:"feedbackTitle"},{id:"feedback-body",kind:"feedbackBody"},{id:"feedback-send",kind:"feedbackSend"}]}function jQ(J){return[{id:"dev-reset",kind:"devReset"},...J?[{id:"dev-restart",kind:"devRestartDaemon"}]:[],{id:"remote-projects",kind:"devRemoteProjects"},{id:"auto-status",kind:"devAutoStatus"},{id:"dispatcher",kind:"devDispatcher"}]}function D3(J,z){switch(J){case"general":return v9(z);case"engines":return cT(z.engineList);case"accounts":case"keys":return[];case"feedback":return dT();case"dev":return jQ(z.hasDaemon)}}function WQ(J,z){return J.findIndex((Y)=>Y.id===z)}function gH(J,z){return J[z]}var cZ;var m9=N(()=>{iG();cZ=[{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 J1}from"@opentui/core";function L3(J){let{theme:z}=d0();return(()=>{var Y=W("box");return q(Y,"flexDirection","column"),q(Y,"flexShrink",0),q(Y,"width",14),q(Y,"gap",1),U(Y,b(Q1,{each:cZ,children:(Z,G)=>{let X=()=>G()===J.cursor(),Q=()=>X()&&J.level()==="sidebar";return(()=>{var f=W("box"),H=W("text");return D(f,H),q(f,"paddingLeft",1),q(f,"paddingRight",1),q(f,"onMouseUp",()=>J.switchSection(Z.id)),q(H,"wrapMode","none"),U(H,()=>M(`settings.sections.${Z.id}`)),x((B)=>{var V=Q()?z.primary:void 0,j=Q()?z.selectedListItemText:X()?z.accent:z.textMuted,K=X()?J1.BOLD:void 0;return V!==B.e&&(B.e=q(f,"backgroundColor",V,B.e)),j!==B.t&&(B.t=q(H,"fg",j,B.t)),K!==B.a&&(B.a=q(H,"attributes",K,B.a)),B},{e:void 0,t:void 0,a:void 0}),f})()}})),Y})()}function M3(J){let z=d0(),{theme:Y}=z,Z=()=>v9({themeNames:J.themeNames(),focusAccentSlots:hZ}),G=(C)=>WQ(Z(),C),X=()=>G("transparent"),Q=()=>G("toast"),f=()=>G("sound"),H=()=>G("zen-keep-tasks"),B=()=>G(BQ("chattab")),V=()=>G(BQ("taskpanel")),j=()=>G("editor-kind"),K=()=>G("editor-custom"),L=()=>J.bodyRow()===X(),A=()=>J.bodyRow()===Q(),F=()=>J.bodyRow()===f(),g=()=>J.bodyRow()===H(),u=()=>J.bodyRow()===B(),s=()=>J.bodyRow()===V(),S=()=>J.bodyRow()===j(),O=()=>J.bodyRow()===K();return(()=>{var C=W("box"),y=W("text"),a=W("text"),l=W("box"),t=W("box"),J0=W("text"),T=W("text"),Q0=W("box"),r=W("text"),W0=W("text"),O0=W("box"),K0=W("text"),_=W("box"),P=W("text"),k=W("text"),o=W("box"),I=W("text"),h=W("text"),G0=W("box"),q0=W("text"),H0=E0(" "),b0=W("box"),w0=W("text"),y0=E0(" "),p0=W("box"),v=W("text"),M0=W("text"),Z0=W("box"),F0=W("text"),a0=E0(" "),r0=W("box"),u0=W("text"),o0=W("text"),d=W("box"),f0=W("text"),S0=E0(" "),s0=W("box"),$0=W("text"),_0=E0(" "),e0=W("box"),C1=W("text"),g1=W("text"),e=W("box"),Y0=W("text"),j0=W("box"),C0=W("text");return D(C,y),D(C,a),D(C,l),D(C,t),D(C,Q0),D(C,_),D(C,o),D(C,p0),D(C,r0),D(C,e0),q(C,"flexDirection","column"),q(C,"gap",1),U(y,()=>M("settings.general.theme")),U(a,()=>M("settings.general.themeHint")),q(l,"flexDirection","column"),q(l,"gap",0),U(l,b(Q1,{get each(){return J.themeNames()},children:(R,h0)=>{let D0=()=>J.level()==="body"&&J.bodyRow()===h0(),x0=()=>R===z.selected;return(()=>{var V0=W("box"),L0=W("text");return D(V0,L0),q(V0,"flexDirection","row"),q(V0,"gap",1),q(V0,"paddingLeft",1),q(V0,"paddingRight",1),q(V0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(h0()),J.setThemeCursor(h0()),J.selectTheme(R)}),q(L0,"wrapMode","none"),U(L0,()=>x0()?"\u25CF ":" ",null),U(L0,R,null),x((g0)=>{var z1=D0()?Y.primary:void 0,Z1=D0()?Y.selectedListItemText:x0()?Y.accent:Y.text,n0=D0()||x0()?J1.BOLD:void 0;return z1!==g0.e&&(g0.e=q(V0,"backgroundColor",z1,g0.e)),Z1!==g0.t&&(g0.t=q(L0,"fg",Z1,g0.t)),n0!==g0.a&&(g0.a=q(L0,"attributes",n0,g0.a)),g0},{e:void 0,t:void 0,a:void 0}),V0})()}})),D(t,J0),D(t,T),q(t,"flexDirection","column"),q(t,"gap",0),q(t,"paddingTop",1),U(J0,()=>M("settings.general.language")),q(T,"wrapMode","word"),U(T,()=>M("settings.general.languageHint")),U(t,b(Q1,{each:vZ,children:(R)=>{let h0=()=>G(P9(R.id)),D0=()=>J.level()==="body"&&J.bodyRow()===h0(),x0=()=>J.currentLocale()===R.id;return(()=>{var V0=W("box"),L0=W("text");return D(V0,L0),q(V0,"flexDirection","row"),q(V0,"gap",1),q(V0,"paddingLeft",1),q(V0,"paddingRight",1),q(V0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(h0()),J.selectLanguage(R.id)}),q(L0,"wrapMode","none"),U(L0,()=>x0()?"\u25CF ":" ",null),U(L0,()=>R.label,null),x((g0)=>{var z1=D0()?Y.primary:void 0,Z1=D0()?Y.selectedListItemText:x0()?Y.accent:Y.text,n0=D0()||x0()?J1.BOLD:void 0;return z1!==g0.e&&(g0.e=q(V0,"backgroundColor",z1,g0.e)),Z1!==g0.t&&(g0.t=q(L0,"fg",Z1,g0.t)),n0!==g0.a&&(g0.a=q(L0,"attributes",n0,g0.a)),g0},{e:void 0,t:void 0,a:void 0}),V0})()}}),null),D(Q0,r),D(Q0,W0),D(Q0,O0),q(Q0,"flexDirection","column"),q(Q0,"gap",0),q(Q0,"paddingTop",1),U(r,()=>M("settings.general.transparent")),q(W0,"wrapMode","word"),U(W0,()=>M("settings.general.transparentHint")),D(O0,K0),q(O0,"flexDirection","row"),q(O0,"paddingLeft",1),q(O0,"paddingRight",1),q(O0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(X()),J.toggleTransparent()}),q(K0,"wrapMode","none"),U(K0,(()=>{var R=T0(()=>!!z.transparentBackground);return()=>R()?M("settings.general.on"):M("settings.general.off")})()),D(_,P),D(_,k),q(_,"flexDirection","column"),q(_,"gap",0),q(_,"paddingTop",1),U(P,()=>M("settings.general.focusAccent")),q(k,"wrapMode","word"),U(k,()=>M("settings.general.focusAccentHint")),U(_,b(Q1,{each:hZ,children:(R)=>{let h0=()=>G(h9(R)),D0=()=>J.level()==="body"&&J.bodyRow()===h0(),x0=()=>z.focusAccent===R;return(()=>{var V0=W("box"),L0=W("text");return D(V0,L0),q(V0,"flexDirection","row"),q(V0,"gap",1),q(V0,"paddingLeft",1),q(V0,"paddingRight",1),q(V0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(h0()),J.selectFocusAccent(R)}),q(L0,"wrapMode","none"),U(L0,()=>x0()?"\u25CF ":" ",null),U(L0,()=>M(`settings.general.accent${R.charAt(0).toUpperCase()}${R.slice(1)}`),null),x((g0)=>{var z1=D0()?Y.primary:void 0,Z1=D0()?Y.selectedListItemText:x0()?Y.focusAccent:Y.text,n0=D0()||x0()?J1.BOLD:void 0;return z1!==g0.e&&(g0.e=q(V0,"backgroundColor",z1,g0.e)),Z1!==g0.t&&(g0.t=q(L0,"fg",Z1,g0.t)),n0!==g0.a&&(g0.a=q(L0,"attributes",n0,g0.a)),g0},{e:void 0,t:void 0,a:void 0}),V0})()}}),null),D(o,I),D(o,h),D(o,G0),D(o,b0),q(o,"flexDirection","column"),q(o,"gap",0),q(o,"paddingTop",1),U(I,()=>M("settings.general.notifications")),q(h,"wrapMode","word"),U(h,()=>M("settings.general.notificationsHint")),D(G0,q0),q(G0,"flexDirection","row"),q(G0,"gap",1),q(G0,"paddingLeft",1),q(G0,"paddingRight",1),q(G0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(Q()),J.toggleToast()}),D(q0,H0),q(q0,"wrapMode","none"),U(q0,()=>J.toastEnabled()?"[x]":"[ ]",H0),U(q0,()=>M("settings.general.toast"),null),D(b0,w0),q(b0,"flexDirection","row"),q(b0,"gap",1),q(b0,"paddingLeft",1),q(b0,"paddingRight",1),q(b0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(f()),J.toggleSound()}),D(w0,y0),q(w0,"wrapMode","none"),U(w0,()=>J.soundEnabled()?"[x]":"[ ]",y0),U(w0,()=>M("settings.general.sound"),null),D(p0,v),D(p0,M0),D(p0,Z0),q(p0,"flexDirection","column"),q(p0,"gap",0),q(p0,"paddingTop",1),U(v,()=>M("settings.general.zen")),q(M0,"wrapMode","word"),U(M0,()=>M("settings.general.zenHint")),D(Z0,F0),q(Z0,"flexDirection","row"),q(Z0,"gap",1),q(Z0,"paddingLeft",1),q(Z0,"paddingRight",1),q(Z0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(H()),J.toggleZenKeepsTasks()}),D(F0,a0),q(F0,"wrapMode","none"),U(F0,()=>J.zenKeepsTasks()?"[x]":"[ ]",a0),U(F0,()=>M("settings.general.zenKeepTasks"),null),D(r0,u0),D(r0,o0),D(r0,d),D(r0,s0),q(r0,"flexDirection","column"),q(r0,"gap",0),q(r0,"paddingTop",1),U(u0,()=>M("settings.general.surface")),q(o0,"wrapMode","word"),U(o0,()=>M("settings.general.surfaceHint")),D(d,f0),q(d,"flexDirection","row"),q(d,"gap",1),q(d,"paddingLeft",1),q(d,"paddingRight",1),q(d,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(B()),J.selectSurface("chattab")}),D(f0,S0),q(f0,"wrapMode","none"),U(f0,()=>J.settingsSurface()==="chattab"?"[x]":"[ ]",S0),U(f0,()=>M("settings.general.surfaceChattab"),null),D(s0,$0),q(s0,"flexDirection","row"),q(s0,"gap",1),q(s0,"paddingLeft",1),q(s0,"paddingRight",1),q(s0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(V()),J.selectSurface("taskpanel")}),D($0,_0),q($0,"wrapMode","none"),U($0,()=>J.settingsSurface()==="taskpanel"?"[x]":"[ ]",_0),U($0,()=>M("settings.general.surfaceTaskpanel"),null),D(e0,C1),D(e0,g1),D(e0,e),D(e0,j0),q(e0,"flexDirection","column"),q(e0,"gap",0),q(e0,"paddingTop",1),U(C1,()=>M("settings.general.editor")),q(g1,"wrapMode","word"),U(g1,()=>M("settings.general.editorHint")),D(e,Y0),q(e,"flexDirection","row"),q(e,"gap",1),q(e,"paddingLeft",1),q(e,"paddingRight",1),q(e,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(j()),J.cycleEditorKind()}),q(Y0,"wrapMode","none"),U(Y0,()=>M("settings.general.editorRow",{kind:J.editorKind()})),D(j0,C0),q(j0,"flexDirection","row"),q(j0,"gap",1),q(j0,"paddingLeft",1),q(j0,"paddingRight",1),q(j0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(K()),J.editEditorCustom()}),q(C0,"wrapMode","none"),U(C0,()=>M("settings.general.editorCustom",{cmd:J.editorCustomCommand().trim()||M("settings.general.editorCustomUnset")})),x((R)=>{var h0=Y.text,D0=J1.BOLD,x0=Y.textMuted,V0=Y.text,L0=J1.BOLD,g0=Y.textMuted,z1=Y.text,Z1=J1.BOLD,n0=Y.textMuted,u1=L()?Y.primary:void 0,N0=L()?Y.selectedListItemText:z.transparentBackground?Y.accent:Y.textMuted,m1=J1.BOLD,m=Y.text,R0=J1.BOLD,V1=Y.textMuted,R1=Y.text,H1=J1.BOLD,n=Y.textMuted,z0=A()?Y.primary:void 0,I0=A()?Y.selectedListItemText:J.toastEnabled()?Y.accent:Y.textMuted,k0=J1.BOLD,WJ=F()?Y.primary:void 0,MJ=F()?Y.selectedListItemText:J.soundEnabled()?Y.accent:Y.textMuted,XJ=J1.BOLD,nJ=Y.text,mz=J1.BOLD,RJ=Y.textMuted,cz=g()?Y.primary:void 0,UY=g()?Y.selectedListItemText:J.zenKeepsTasks()?Y.accent:Y.textMuted,c=J1.BOLD,i=Y.text,$=J1.BOLD,E=Y.textMuted,m0=u()?Y.primary:void 0,v0=u()?Y.selectedListItemText:J.settingsSurface()==="chattab"?Y.accent:Y.textMuted,A0=J1.BOLD,c0=s()?Y.primary:void 0,f1=s()?Y.selectedListItemText:J.settingsSurface()==="taskpanel"?Y.accent:Y.textMuted,L1=J1.BOLD,VJ=Y.text,Yz=J1.BOLD,DY=Y.textMuted,fW=S()?Y.primary:void 0,HW=S()?Y.selectedListItemText:Y.accent,BW=J1.BOLD,jW=O()?Y.primary:void 0,WW=O()?Y.selectedListItemText:J.editorKind()==="custom"?Y.text:Y.textMuted;return h0!==R.e&&(R.e=q(y,"fg",h0,R.e)),D0!==R.t&&(R.t=q(y,"attributes",D0,R.t)),x0!==R.a&&(R.a=q(a,"fg",x0,R.a)),V0!==R.o&&(R.o=q(J0,"fg",V0,R.o)),L0!==R.i&&(R.i=q(J0,"attributes",L0,R.i)),g0!==R.n&&(R.n=q(T,"fg",g0,R.n)),z1!==R.s&&(R.s=q(r,"fg",z1,R.s)),Z1!==R.h&&(R.h=q(r,"attributes",Z1,R.h)),n0!==R.r&&(R.r=q(W0,"fg",n0,R.r)),u1!==R.d&&(R.d=q(O0,"backgroundColor",u1,R.d)),N0!==R.l&&(R.l=q(K0,"fg",N0,R.l)),m1!==R.u&&(R.u=q(K0,"attributes",m1,R.u)),m!==R.c&&(R.c=q(P,"fg",m,R.c)),R0!==R.w&&(R.w=q(P,"attributes",R0,R.w)),V1!==R.m&&(R.m=q(k,"fg",V1,R.m)),R1!==R.f&&(R.f=q(I,"fg",R1,R.f)),H1!==R.y&&(R.y=q(I,"attributes",H1,R.y)),n!==R.g&&(R.g=q(h,"fg",n,R.g)),z0!==R.p&&(R.p=q(G0,"backgroundColor",z0,R.p)),I0!==R.b&&(R.b=q(q0,"fg",I0,R.b)),k0!==R.T&&(R.T=q(q0,"attributes",k0,R.T)),WJ!==R.A&&(R.A=q(b0,"backgroundColor",WJ,R.A)),MJ!==R.O&&(R.O=q(w0,"fg",MJ,R.O)),XJ!==R.I&&(R.I=q(w0,"attributes",XJ,R.I)),nJ!==R.S&&(R.S=q(v,"fg",nJ,R.S)),mz!==R.W&&(R.W=q(v,"attributes",mz,R.W)),RJ!==R.C&&(R.C=q(M0,"fg",RJ,R.C)),cz!==R.B&&(R.B=q(Z0,"backgroundColor",cz,R.B)),UY!==R.v&&(R.v=q(F0,"fg",UY,R.v)),c!==R.k&&(R.k=q(F0,"attributes",c,R.k)),i!==R.x&&(R.x=q(u0,"fg",i,R.x)),$!==R.j&&(R.j=q(u0,"attributes",$,R.j)),E!==R.q&&(R.q=q(o0,"fg",E,R.q)),m0!==R.z&&(R.z=q(d,"backgroundColor",m0,R.z)),v0!==R.P&&(R.P=q(f0,"fg",v0,R.P)),A0!==R.H&&(R.H=q(f0,"attributes",A0,R.H)),c0!==R.F&&(R.F=q(s0,"backgroundColor",c0,R.F)),f1!==R.M&&(R.M=q($0,"fg",f1,R.M)),L1!==R.D&&(R.D=q($0,"attributes",L1,R.D)),VJ!==R.R&&(R.R=q(C1,"fg",VJ,R.R)),Yz!==R.E&&(R.E=q(C1,"attributes",Yz,R.E)),DY!==R.L&&(R.L=q(g1,"fg",DY,R.L)),fW!==R.N&&(R.N=q(e,"backgroundColor",fW,R.N)),HW!==R.G&&(R.G=q(Y0,"fg",HW,R.G)),BW!==R.U&&(R.U=q(Y0,"attributes",BW,R.U)),jW!==R.K&&(R.K=q(j0,"backgroundColor",jW,R.K)),WW!==R.V&&(R.V=q(C0,"fg",WW,R.V)),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,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 F3(J){let{theme:z}=d0(),Y=()=>J.vendors.length;return(()=>{var Z=W("box"),G=W("text"),X=W("text"),Q=W("box"),f=W("box"),H=W("text");return D(Z,G),D(Z,X),D(Z,Q),q(Z,"flexDirection","column"),q(Z,"gap",1),U(G,()=>M("settings.engines.title")),q(X,"wrapMode","word"),U(X,()=>M("settings.engines.hint")),D(Q,f),q(Q,"flexDirection","column"),q(Q,"gap",0),U(Q,b(Q1,{get each(){return J.vendors},children:(B,V)=>{let j=()=>J.level()==="body"&&J.bodyRow()===V();return(()=>{var K=W("box"),L=W("text"),A=W("text"),F=W("text");return D(K,L),D(K,A),D(K,F),q(K,"flexDirection","row"),q(K,"gap",1),q(K,"paddingLeft",1),q(K,"paddingRight",1),q(K,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(V()),J.editEngine(B)}),q(L,"wrapMode","none"),U(L,()=>J.isDefaultEngine(B)?"\u25CF":" "),q(A,"wrapMode","none"),U(A,()=>J.displayName(B)),q(F,"wrapMode","none"),U(F,()=>J.commandText(B),null),U(F,(()=>{var g=T0(()=>!!J.isDefault(B));return()=>g()?M("settings.engines.defaultTag"):T0(()=>!!J.isCustom(B))()?M("settings.engines.customTag"):""})(),null),x((g)=>{var u=j()?z.primary:void 0,s=j()?z.selectedListItemText:z.accent,S=J1.BOLD,O=j()?z.selectedListItemText:z.text,C=J1.BOLD,y=j()?z.selectedListItemText:J.isDefault(B)?z.textMuted:z.accent;return u!==g.e&&(g.e=q(K,"backgroundColor",u,g.e)),s!==g.t&&(g.t=q(L,"fg",s,g.t)),S!==g.a&&(g.a=q(L,"attributes",S,g.a)),O!==g.o&&(g.o=q(A,"fg",O,g.o)),C!==g.i&&(g.i=q(A,"attributes",C,g.i)),y!==g.n&&(g.n=q(F,"fg",y,g.n)),g},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),K})()}}),f),D(f,H),q(f,"flexDirection","row"),q(f,"paddingLeft",1),q(f,"paddingRight",1),q(f,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(Y()),J.onAddEngine()}),q(H,"wrapMode","none"),U(H,()=>M("settings.engines.addEngine")),x((B)=>{var V=z.text,j=J1.BOLD,K=z.textMuted,L=J.level()==="body"&&J.bodyRow()===Y()?z.primary:void 0,A=J.level()==="body"&&J.bodyRow()===Y()?z.selectedListItemText:z.primary;return V!==B.e&&(B.e=q(G,"fg",V,B.e)),j!==B.t&&(B.t=q(G,"attributes",j,B.t)),K!==B.a&&(B.a=q(X,"fg",K,B.a)),L!==B.o&&(B.o=q(f,"backgroundColor",L,B.o)),A!==B.i&&(B.i=q(H,"fg",A,B.i)),B},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),Z})()}function O3(J){let{theme:z}=d0(),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"),f=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),q(Z,"flexDirection","column"),q(Z,"gap",1),U(G,()=>M("settings.accounts.title")),q(X,"wrapMode","word"),U(X,()=>M("settings.accounts.hint")),D(Q,f),q(Q,"flexDirection","column"),q(Q,"gap",0),D(f,E0("claude-code")),U(Q,b(X0,{get when(){return J.claudeStatus()===null},get children(){var K=W("text");return U(K,()=>M("settings.accounts.checking")),x((L)=>q(K,"fg",z.textMuted,L)),K}}),null),U(Q,b(X0,{get when(){return J.claudeStatus()},children:(K)=>(()=>{var L=W("box"),A=W("text");return D(L,A),q(L,"flexDirection","column"),q(L,"gap",0),q(A,"wrapMode","word"),U(A,()=>Y(K())),U(L,()=>{let F=K().account;if(F.kind==="oauth"){let g=[F.organization,F.billingType].filter((u)=>!!u).join(" \xB7 ");return(()=>{var u=W("text");return q(u,"wrapMode","word"),U(u,()=>M("settings.accounts.loggedIn",{email:F.email}),null),U(u,g?` (${g})`:"",null),x((s)=>q(u,"fg",z.success,s)),u})()}return(()=>{var g=W("text");return U(g,()=>M("settings.accounts.notLoggedIn")),x((u)=>q(g,"fg",z.textMuted,u)),g})()},null),U(L,b(X0,{get when(){return K().accountError},children:(F)=>(()=>{var g=W("text");return q(g,"wrapMode","word"),U(g,()=>`! ${F()}`),x((u)=>q(g,"fg",z.warning,u)),g})()}),null),x((F)=>q(A,"fg",K().binary.found?z.textMuted:z.warning,F)),L})()}),null),D(H,B),q(H,"flexDirection","column"),q(H,"gap",0),D(B,E0("codex")),U(H,b(X0,{get when(){return J.codexStatus()===null},get children(){var K=W("text");return U(K,()=>M("settings.accounts.checking")),x((L)=>q(K,"fg",z.textMuted,L)),K}}),null),U(H,b(X0,{get when(){return J.codexStatus()},children:(K)=>(()=>{var L=W("box"),A=W("text");return D(L,A),q(L,"flexDirection","column"),q(L,"gap",0),q(A,"wrapMode","word"),U(A,()=>Y(K())),U(L,()=>{let F=K().account;if(F.kind==="chatgpt")return(()=>{var g=W("text");return q(g,"wrapMode","word"),U(g,()=>M("settings.accounts.chatgptLogin",{email:F.email}),null),U(g,(()=>{var u=T0(()=>!!F.plan);return()=>u()?` (${F.plan})`:""})(),null),x((u)=>q(g,"fg",z.success,u)),g})();if(F.kind==="apikey")return(()=>{var g=W("text");return U(g,()=>M("settings.accounts.apiKeyConfigured")),x((u)=>q(g,"fg",z.success,u)),g})();return(()=>{var g=W("text");return U(g,()=>M("settings.accounts.notLoggedIn")),x((u)=>q(g,"fg",z.textMuted,u)),g})()},null),U(L,b(X0,{get when(){return K().accountError},children:(F)=>(()=>{var g=W("text");return q(g,"wrapMode","word"),U(g,()=>`! ${F()}`),x((u)=>q(g,"fg",z.warning,u)),g})()}),null),x((F)=>q(A,"fg",K().binary.found?z.textMuted:z.warning,F)),L})()}),null),D(V,j),q(V,"flexDirection","column"),q(V,"gap",0),D(j,E0("copilot")),U(V,b(X0,{get when(){return J.copilotStatus()===null},get children(){var K=W("text");return U(K,()=>M("settings.accounts.checking")),x((L)=>q(K,"fg",z.textMuted,L)),K}}),null),U(V,b(X0,{get when(){return J.copilotStatus()},children:(K)=>(()=>{var L=W("box"),A=W("text");return D(L,A),q(L,"flexDirection","column"),q(L,"gap",0),q(A,"wrapMode","word"),U(A,()=>Y(K())),U(L,()=>{let F=K().account;if(F.kind==="token")return(()=>{var g=W("text");return U(g,()=>M("settings.accounts.tokenConfigured",{source:F.source})),x((u)=>q(g,"fg",z.success,u)),g})();if(F.kind==="oauth")return(()=>{var g=W("text");return U(g,()=>M("settings.accounts.copilotDetected")),x((u)=>q(g,"fg",z.success,u)),g})();return(()=>{var g=W("text");return U(g,()=>M("settings.accounts.notLoggedIn")),x((u)=>q(g,"fg",z.textMuted,u)),g})()},null),U(L,b(X0,{get when(){return K().accountError},children:(F)=>(()=>{var g=W("text");return q(g,"wrapMode","word"),U(g,()=>`! ${F()}`),x((u)=>q(g,"fg",z.warning,u)),g})()}),null),x((F)=>q(A,"fg",K().binary.found?z.textMuted:z.warning,F)),L})()}),null),x((K)=>{var L=z.text,A=J1.BOLD,F=z.textMuted,g=z.text,u=J1.BOLD,s=z.text,S=J1.BOLD,O=z.text,C=J1.BOLD;return L!==K.e&&(K.e=q(G,"fg",L,K.e)),A!==K.t&&(K.t=q(G,"attributes",A,K.t)),F!==K.a&&(K.a=q(X,"fg",F,K.a)),g!==K.o&&(K.o=q(f,"fg",g,K.o)),u!==K.i&&(K.i=q(f,"attributes",u,K.i)),s!==K.n&&(K.n=q(B,"fg",s,K.n)),S!==K.s&&(K.s=q(B,"attributes",S,K.s)),O!==K.h&&(K.h=q(j,"fg",O,K.h)),C!==K.r&&(K.r=q(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 A3(J){let{theme:z}=d0(),Y=()=>J.level()==="body",Z=()=>Y()&&J.bodyRow()===0,G=()=>Y()&&J.bodyRow()===1,X=()=>Y()&&J.bodyRow()===2,Q=(H)=>H?z.primary:z.textMuted,f=(H)=>H?J1.BOLD|J1.UNDERLINE:void 0;return(()=>{var H=W("box"),B=W("text"),V=W("text"),j=W("box"),K=W("box"),L=W("text"),A=W("input"),F=W("box"),g=W("text"),u=W("input"),s=W("box"),S=W("text");return D(H,B),D(H,V),D(H,j),q(H,"flexDirection","column"),q(H,"gap",1),U(B,()=>M("settings.feedback.title")),q(V,"wrapMode","word"),U(V,()=>M("settings.feedback.hint")),D(j,K),D(j,F),D(j,s),q(j,"flexDirection","column"),q(j,"gap",1),D(K,L),D(K,A),q(K,"gap",0),U(L,()=>M("settings.feedback.titleLabel")),q(A,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(0)}),q(A,"onInput",(O)=>J.setTitle(jJ(O))),q(A,"onSubmit",()=>J.onTitleSubmit()),D(F,g),D(F,u),q(F,"gap",0),U(g,()=>M("settings.feedback.descriptionLabel")),q(u,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(1)}),q(u,"onInput",(O)=>J.setBody(jJ(O))),q(u,"onSubmit",()=>J.onBodySubmit()),D(s,S),q(s,"flexDirection","row"),q(s,"paddingLeft",1),q(s,"paddingRight",1),q(s,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(2),J.submit()}),U(S,()=>M("settings.feedback.send")),U(H,b(X0,{get when(){return J.status()},get children(){var O=W("text");return q(O,"wrapMode","word"),U(O,()=>J.status()),x((C)=>q(O,"fg",J.status().startsWith("error:")?z.warning:z.success,C)),O}}),null),x((O)=>{var C=z.text,y=J1.BOLD,a=z.textMuted,l=Q(Z()),t=f(Z()),J0=J.title(),T=M("settings.feedback.titlePlaceholder"),Q0=Z(),r=Q(G()),W0=f(G()),O0=J.body(),K0=M("settings.feedback.descriptionPlaceholder"),_=G(),P=X()?z.primary:z.backgroundElement,k=X()?z.selectedListItemText:z.accent,o=J1.BOLD;return C!==O.e&&(O.e=q(B,"fg",C,O.e)),y!==O.t&&(O.t=q(B,"attributes",y,O.t)),a!==O.a&&(O.a=q(V,"fg",a,O.a)),l!==O.o&&(O.o=q(L,"fg",l,O.o)),t!==O.i&&(O.i=q(L,"attributes",t,O.i)),J0!==O.n&&(O.n=q(A,"value",J0,O.n)),T!==O.s&&(O.s=q(A,"placeholder",T,O.s)),Q0!==O.h&&(O.h=q(A,"focused",Q0,O.h)),r!==O.r&&(O.r=q(g,"fg",r,O.r)),W0!==O.d&&(O.d=q(g,"attributes",W0,O.d)),O0!==O.l&&(O.l=q(u,"value",O0,O.l)),K0!==O.u&&(O.u=q(u,"placeholder",K0,O.u)),_!==O.c&&(O.c=q(u,"focused",_,O.c)),P!==O.w&&(O.w=q(s,"backgroundColor",P,O.w)),k!==O.m&&(O.m=q(S,"fg",k,O.m)),o!==O.f&&(O.f=q(S,"attributes",o,O.f)),O},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0}),H})()}function R3(J){let{theme:z}=d0(),Y=()=>J.level()==="body"&&J.bodyRow()===0,Z=()=>J.level()==="body"&&J.bodyRow()===1,G=()=>WQ(jQ(J.hasDaemon),"remote-projects"),X=()=>J.level()==="body"&&J.bodyRow()===G(),Q=()=>WQ(jQ(J.hasDaemon),"auto-status"),f=()=>J.level()==="body"&&J.bodyRow()===Q(),H=()=>WQ(jQ(J.hasDaemon),"dispatcher"),B=()=>J.level()==="body"&&J.bodyRow()===H();return(()=>{var V=W("box"),j=W("text"),K=W("text"),L=W("box"),A=W("text"),F=W("text"),g=W("box"),u=W("text"),s=W("text"),S=W("box"),O=W("text"),C=W("text"),y=W("box"),a=W("text"),l=W("text"),t=W("box"),J0=W("text");return D(V,j),D(V,K),D(V,L),D(V,F),D(V,g),q(V,"flexDirection","column"),q(V,"gap",1),U(j,()=>M("settings.dev.reset")),q(K,"wrapMode","word"),U(K,()=>M("settings.dev.resetHint")),D(L,A),q(L,"flexDirection","row"),q(L,"paddingLeft",1),q(L,"paddingRight",1),q(L,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(0),J.confirmReset()}),U(A,()=>M("settings.dev.resetButton")),U(V,b(X0,{get when(){return J.hasDaemon},get children(){var T=W("box"),Q0=W("text"),r=W("text"),W0=W("box"),O0=W("text");return D(T,Q0),D(T,r),D(T,W0),q(T,"flexDirection","column"),q(T,"gap",0),q(T,"paddingTop",1),U(Q0,()=>M("settings.dev.restart")),q(r,"wrapMode","word"),U(r,()=>M("settings.dev.restartHint")),D(W0,O0),q(W0,"flexDirection","row"),q(W0,"paddingLeft",1),q(W0,"paddingRight",1),q(W0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(1),J.confirmRestartDaemon()}),U(O0,()=>M("settings.dev.restartButton")),x((K0)=>{var _=z.text,P=J1.BOLD,k=z.textMuted,o=Z()?z.primary:z.backgroundElement,I=Z()?z.selectedListItemText:z.accent,h=J1.BOLD;return _!==K0.e&&(K0.e=q(Q0,"fg",_,K0.e)),P!==K0.t&&(K0.t=q(Q0,"attributes",P,K0.t)),k!==K0.a&&(K0.a=q(r,"fg",k,K0.a)),o!==K0.o&&(K0.o=q(W0,"backgroundColor",o,K0.o)),I!==K0.i&&(K0.i=q(O0,"fg",I,K0.i)),h!==K0.n&&(K0.n=q(O0,"attributes",h,K0.n)),K0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),T}}),F),q(F,"wrapMode","word"),U(F,()=>M("settings.dev.doctorHint")),D(g,u),D(g,s),D(g,S),D(g,C),D(g,y),D(g,l),D(g,t),q(g,"flexDirection","column"),q(g,"gap",0),q(g,"paddingTop",1),U(u,()=>M("settings.dev.experimental")),q(s,"wrapMode","word"),U(s,()=>M("settings.dev.remoteHint")),D(S,O),q(S,"flexDirection","row"),q(S,"paddingLeft",1),q(S,"paddingRight",1),q(S,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(G()),J.toggleRemoteProjects()}),U(O,(()=>{var T=T0(()=>!!J.remoteProjectsEnabled());return()=>T()?M("settings.dev.remoteOn"):M("settings.dev.remoteOff")})()),q(C,"wrapMode","word"),U(C,()=>M("settings.dev.autoStatusHint")),D(y,a),q(y,"flexDirection","row"),q(y,"paddingLeft",1),q(y,"paddingRight",1),q(y,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(Q()),J.toggleAutoStatus()}),U(a,(()=>{var T=T0(()=>!!J.autoStatusEnabled());return()=>T()?M("settings.dev.autoStatusOn"):M("settings.dev.autoStatusOff")})()),q(l,"wrapMode","word"),U(l,()=>M("settings.dev.dispatcherHint")),D(t,J0),q(t,"flexDirection","row"),q(t,"paddingLeft",1),q(t,"paddingRight",1),q(t,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(H()),J.toggleDispatcher()}),U(J0,(()=>{var T=T0(()=>!!J.dispatcherEnabled());return()=>T()?M("settings.dev.dispatcherOn"):M("settings.dev.dispatcherOff")})()),x((T)=>{var Q0=z.text,r=J1.BOLD,W0=z.textMuted,O0=Y()?z.primary:z.backgroundElement,K0=Y()?z.selectedListItemText:z.warning,_=J1.BOLD,P=z.textMuted,k=z.text,o=J1.BOLD,I=z.textMuted,h=X()?z.primary:z.backgroundElement,G0=X()?z.selectedListItemText:z.text,q0=J.remoteProjectsEnabled()?J1.BOLD:void 0,H0=z.textMuted,b0=f()?z.primary:z.backgroundElement,w0=f()?z.selectedListItemText:z.text,y0=J.autoStatusEnabled()?J1.BOLD:void 0,p0=z.textMuted,v=B()?z.primary:z.backgroundElement,M0=B()?z.selectedListItemText:z.text,Z0=J.dispatcherEnabled()?J1.BOLD:void 0;return Q0!==T.e&&(T.e=q(j,"fg",Q0,T.e)),r!==T.t&&(T.t=q(j,"attributes",r,T.t)),W0!==T.a&&(T.a=q(K,"fg",W0,T.a)),O0!==T.o&&(T.o=q(L,"backgroundColor",O0,T.o)),K0!==T.i&&(T.i=q(A,"fg",K0,T.i)),_!==T.n&&(T.n=q(A,"attributes",_,T.n)),P!==T.s&&(T.s=q(F,"fg",P,T.s)),k!==T.h&&(T.h=q(u,"fg",k,T.h)),o!==T.r&&(T.r=q(u,"attributes",o,T.r)),I!==T.d&&(T.d=q(s,"fg",I,T.d)),h!==T.l&&(T.l=q(S,"backgroundColor",h,T.l)),G0!==T.u&&(T.u=q(O,"fg",G0,T.u)),q0!==T.c&&(T.c=q(O,"attributes",q0,T.c)),H0!==T.w&&(T.w=q(C,"fg",H0,T.w)),b0!==T.m&&(T.m=q(y,"backgroundColor",b0,T.m)),w0!==T.f&&(T.f=q(a,"fg",w0,T.f)),y0!==T.y&&(T.y=q(a,"attributes",y0,T.y)),p0!==T.g&&(T.g=q(l,"fg",p0,T.g)),v!==T.p&&(T.p=q(t,"backgroundColor",v,T.p)),M0!==T.b&&(T.b=q(J0,"fg",M0,T.b)),Z0!==T.T&&(T.T=q(J0,"attributes",Z0,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 g3(){let{theme:J}=d0(),z=cL(),Y=Object.keys(c8).sort();return(()=>{var Z=W("box"),G=W("text"),X=W("text"),Q=W("box"),f=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),q(Z,"flexDirection","column"),q(Z,"gap",1),U(G,()=>M("settings.keybindings.title")),q(X,"wrapMode","word"),U(X,()=>M("settings.keybindings.hint")),D(Q,f),D(Q,H),q(Q,"flexDirection","column"),q(Q,"gap",0),U(f,()=>M("settings.keybindings.configFile")),q(H,"wrapMode","word"),U(H,()=>z.path,null),U(H,(()=>{var j=T0(()=>!!z.exists);return()=>j()?"":M("settings.keybindings.notCreated")})(),null),U(Z,b(X0,{get when(){return!z.exists},get children(){var j=W("box"),K=W("text"),L=W("text"),A=W("text"),F=W("text"),g=W("text"),u=W("text"),s=W("text"),S=W("text"),O=W("text"),C=W("text");return D(j,K),D(j,L),D(j,A),D(j,F),D(j,g),D(j,u),D(j,s),D(j,S),D(j,O),D(j,C),q(j,"flexDirection","column"),q(j,"gap",0),U(K,()=>M("settings.keybindings.example")),D(L,E0("bindings:")),D(A,E0(" chat.fork.new: ctrl+g # string = one chord")),D(F,E0(" sidebar.select: [enter] # list = several chords")),D(g,E0(" files.createPR: null # null = unbind")),D(u,E0(" tmux.tab.new: ctrl+y # tmux session key (see below)")),D(s,E0(" tmux.layout.workspaceSplit: g # prefix g")),D(S,E0("darwin: # platform overlay (also: linux)")),D(O,E0(" bindings:")),D(C,E0(" palette.open: [cmd+p, ctrl+p]")),x((y)=>{var a=J.text,l=J1.BOLD,t=J.textMuted,J0=J.textMuted,T=J.textMuted,Q0=J.textMuted,r=J.textMuted,W0=J.textMuted,O0=J.textMuted,K0=J.textMuted,_=J.textMuted;return a!==y.e&&(y.e=q(K,"fg",a,y.e)),l!==y.t&&(y.t=q(K,"attributes",l,y.t)),t!==y.a&&(y.a=q(L,"fg",t,y.a)),J0!==y.o&&(y.o=q(A,"fg",J0,y.o)),T!==y.i&&(y.i=q(F,"fg",T,y.i)),Q0!==y.n&&(y.n=q(g,"fg",Q0,y.n)),r!==y.s&&(y.s=q(u,"fg",r,y.s)),W0!==y.h&&(y.h=q(s,"fg",W0,y.h)),O0!==y.r&&(y.r=q(S,"fg",O0,y.r)),K0!==y.d&&(y.d=q(O,"fg",K0,y.d)),_!==y.l&&(y.l=q(C,"fg",_,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),U(Z,b(X0,{get when(){return z.exists},get children(){var j=W("box"),K=W("text");return D(j,K),q(j,"flexDirection","column"),q(j,"gap",0),U(K,()=>M("settings.keybindings.overridesApplied")),U(j,b(X0,{get when(){return z.applied.length===0},get children(){var L=W("text");return U(L,()=>M("settings.keybindings.none")),x((A)=>q(L,"fg",J.textMuted,A)),L}}),null),U(j,b(Q1,{get each(){return z.applied},children:(L)=>(()=>{var A=W("text");return q(A,"wrapMode","word"),U(A,()=>`${L.id} \u2192 ${L.keys.length>0?L.keys.join(" / "):"(unbound)"} (default: ${L.defaultKeys.join(" / ")})`),x((F)=>q(A,"fg",J.text,F)),A})()}),null),x((L)=>{var A=J.text,F=J1.BOLD;return A!==L.e&&(L.e=q(K,"fg",A,L.e)),F!==L.t&&(L.t=q(K,"attributes",F,L.t)),L},{e:void 0,t:void 0}),j}}),B),U(Z,b(X0,{get when(){return z.warnings.length>0},get children(){var j=W("box"),K=W("text");return D(j,K),q(j,"flexDirection","column"),q(j,"gap",0),U(K,()=>M("settings.keybindings.warnings")),U(j,b(Q1,{get each(){return z.warnings},children:(L)=>(()=>{var A=W("text");return q(A,"wrapMode","word"),U(A,`! ${L}`),x((F)=>q(A,"fg",J.warning,F)),A})()}),null),x((L)=>{var A=J.warning,F=J1.BOLD;return A!==L.e&&(L.e=q(K,"fg",A,L.e)),F!==L.t&&(L.t=q(K,"attributes",F,L.t)),L},{e:void 0,t:void 0}),j}}),B),D(B,E0("tmux session keys use the same file: tmux.tab.new (ctrl+t), tmux.tab.prev/next (ctrl+[/]), tmux.tab.close (ctrl+w), tmux.tab.rename (f2), tmux.tab.chooseEngine (ctrl+shift+t), tmux.detach (ctrl+q), tmux.focus (4 chords, left/down/up/right), and prefix layout keys: workspaceSplit (s), workspaceClose (x), workspaceReset (r), tasksToggle (a), opsToggle (o), terminalToggle (z). They apply when a session is (re)built.")),q(B,"wrapMode","word"),q(V,"wrapMode","word"),U(V,()=>`Fixed (not rebindable): ${Y.join(", ")}.`),x((j)=>{var K=J.text,L=J1.BOLD,A=J.textMuted,F=J.text,g=J1.BOLD,u=J.textMuted,s=J.textMuted,S=J.textMuted;return K!==j.e&&(j.e=q(G,"fg",K,j.e)),L!==j.t&&(j.t=q(G,"attributes",L,j.t)),A!==j.a&&(j.a=q(X,"fg",A,j.a)),F!==j.o&&(j.o=q(f,"fg",F,j.o)),g!==j.i&&(j.i=q(f,"attributes",g,j.i)),u!==j.n&&(j.n=q(H,"fg",u,j.n)),s!==j.s&&(j.s=q(B,"fg",s,j.s)),S!==j.h&&(j.h=q(V,"fg",S,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 C3=N(()=>{w();w();w();w();w();w();w();w();j1();A9();v1();GJ();iG();eq();lG();m9()});import{TextAttributes as nT}from"@opentui/core";function iT(J){return J.split(/[-_]+/).filter((z)=>z.length>0).map((z)=>z.charAt(0).toUpperCase()+z.slice(1)).join(" ")}function dZ(J){let z=c1(),Y=d0(),Z=HJ(),{theme:G}=Y,[X,Q]=p("sidebar"),[f,H]=p("general"),[B,V]=p(0),[j,K]=p(0),[L,A]=p(""),[F,g]=p(""),[u,s]=p(""),S=U0(()=>Y.all().slice().sort()),[,O]=p(Math.max(0,S().findIndex((m)=>m===Y.selected))),C=V3(J.orchestrator),[y,a]=p(null),[l,t]=p(null),[J0,T]=p(null),Q0=!1;Y1(()=>{if(f()!=="accounts"||Q0)return;Q0=!0,mQ().then(a),cQ().then(t),dQ().then(T)});function r(){return D3(f(),{themeNames:S(),focusAccentSlots:hZ,engineList:u0(),hasDaemon:C})}function W0(){return r().length}function O0(){return kZ(J.kv.get(GY,NZ))}function K0(m){if(Y.selected===m)return;if(!Y.set(m))return;J.kv.set("activeTheme",m),J.onVisualPrefsChange?.()}function _(){return Z9()}function P(m){if(Z9()===m)return;GQ(m),J.kv.set(DH,m),J.onVisualPrefsChange?.()}function k(m){if(Y.transparentBackground===m)return;Y.setTransparentBackground(m),J.kv.set("transparentBackground",m),J.onVisualPrefsChange?.()}function o(){k(!Y.transparentBackground)}function I(m){if(Y.focusAccent===m)return;Y.setFocusAccent(m),J.kv.set("focusAccent",m),J.onVisualPrefsChange?.()}function h(m){J.kv.set(GY,m)}function G0(){return J.kv.get("notifications.toast.enabled",!0)!==!1}function q0(){return J.kv.get("notifications.sound.enabled",!0)!==!1}function H0(){J.kv.set("notifications.toast.enabled",!G0())}function b0(){J.kv.set("notifications.sound.enabled",!q0())}function w0(){return J.kv.get(qf,!0)!==!1}function y0(){J.kv.set(qf,!w0())}function p0(){return J.kv.get("experimental.remoteProjects",!1)===!0}function v(){J.kv.set("experimental.remoteProjects",!p0())}function M0(){return J.kv.get(FZ,!1)===!0}function Z0(){J.kv.set(FZ,!M0())}function F0(){return J.kv.get(AZ,!1)===!0}function a0(){J.kv.set(AZ,!F0())}function r0(){let m=J.kv.get("customEngineIds",[]);return Array.isArray(m)?m.filter((R0)=>typeof R0==="string"&&R0.trim().length>0):[]}function u0(){return[...i1,...r0()]}function o0(m){let R0=J.kv.get(Uz(m),"");return typeof R0==="string"?R0.trim():""}function d(m){return o0(m)||TX(m).join(" ")}function f0(m){return QJ(m)&&o0(m).length===0&&!s0(m)}function S0(m){let R0=J.kv.get(Dz(m),"");return typeof R0==="string"?R0.trim():""}function s0(m){return S0(m).length>0}function $0(m){return S0(m)||x8[m]||m}let[_0,e0]=p(dz(S1("lastSelectedVendor"),r0()));function C1(m){return _0()===m}function g1(m){r1("lastSelectedVendor",m),J.kv.set("lastSelectedVendor",m),e0(m)}async function e(m){let R0=await VY.show(z,d(m),{dialogTitle:`${$0(m)} launch command`,fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(R0===void 0)return;J.kv.set(Uz(m),R0.trim())}async function Y0(m){let R0=await VY.show(z,$0(m),{dialogTitle:`${$0(m)} display name (blank = default)`,fieldLabel:"name",submitLabel:"save",allowEmpty:!0});if(R0===void 0)return;J.kv.set(Dz(m),R0.trim())}function j0(m){if(J.kv.set(Uz(m),""),J.kv.set(Dz(m),""),!QJ(m))J.kv.set("customEngineIds",r0().filter((R0)=>R0!==m)),K((R0)=>Math.max(0,Math.min(R0,u0().length)))}async function C0(){let m=await VY.show(z,"",{dialogTitle:"Add engine",fieldLabel:"id",submitLabel:"next",placeholder:"lowercase slug, e.g. aider"});if(m===void 0)return;let R0=m.trim().toLowerCase();if(!R0||QJ(R0)||r0().includes(R0))return;let V1=await VY.show(z,"",{dialogTitle:`Add engine \xB7 ${R0}`,fieldLabel:"command",submitLabel:"next",placeholder:"e.g. aider --model sonnet"});if(V1===void 0)return;let R1=await VY.show(z,R0,{dialogTitle:`Add engine \xB7 ${R0}`,fieldLabel:"name",submitLabel:"add",allowEmpty:!0});if(J.kv.set("customEngineIds",[...r0(),R0]),V1.trim())J.kv.set(Uz(R0),V1.trim());let H1=R1?.trim()??"";J.kv.set(Dz(R0),H1&&H1!==R0?H1:iT(R0))}function R(){if(f()!=="engines"||X()!=="body")return null;let m=gH(r(),j());return m?.kind==="engine"?m.vendor:null}function h0(){return jG(J.kv.get(ZY,vq))}function D0(){let m=CZ.indexOf(h0()),R0=CZ[(m+1)%CZ.length];if(R0)J.kv.set(ZY,R0)}function x0(){let m=J.kv.get(uY,"");return typeof m==="string"?m:""}async function V0(){let m=await VY.show(z,x0(),{dialogTitle:"Custom editor command (use {file} for the path)",fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(m===void 0)return;let R0=m.trim();if(J.kv.set(uY,R0),R0)J.kv.set(ZY,"custom")}async function L0(){s("submitting...");try{let m=EG({title:L(),body:F()});s(`sent: ${m.url}`),A(""),g(""),K(0)}catch(m){s(`error: ${m instanceof Error?m.message:String(m)}`)}}let g0=()=>f()==="feedback"&&X()==="body";function z1(m){let R0=j()+m;if(R0<0||R0>2){Q("sidebar");return}K(R0)}function Z1(){if(X()!=="sidebar"||W0()===0)return;if(Q("body"),K(0),f()==="general")O(0)}function n0(m){if(X()==="sidebar"){let R1=(B()+m+cZ.length)%cZ.length;V(R1);let H1=cZ[R1];if(H1)H(H1.id),K(0);return}let R0=W0();if(R0===0)return;let V1=(j()+m+R0)%R0;if(K(V1),gH(r(),V1)?.kind==="theme")O(V1)}function u1(m){H(m),V(cZ.findIndex((R0)=>R0.id===m)),K(0),Q("sidebar")}let N0={theme:(m)=>K0(m.name),language:(m)=>P(m.locale),transparent:()=>o(),focusAccent:(m)=>I(m.slot),toast:()=>H0(),sound:()=>b0(),zenKeepTasks:()=>y0(),surface:(m)=>h(m.surface),editorKind:()=>D0(),editorCustom:()=>void V0(),engine:(m)=>void e(m.vendor),engineAdd:()=>void C0(),feedbackTitle:()=>K(0),feedbackBody:()=>K(1),feedbackSend:()=>void L0(),devReset:()=>void E9(z,J.kv,Z),devRestartDaemon:()=>void w9(z,J.orchestrator,Z),devRemoteProjects:()=>v(),devAutoStatus:()=>Z0(),devDispatcher:()=>a0()};function m1(){let m=gH(r(),j());if(!m)return;N0[m.kind](m)}return D1(()=>({enabled:(!J.standalone||z.stack.length===0)&&!g0(),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:Z1},{key:"l",cmd:Z1},{key:"left",cmd:()=>Q("sidebar")},{key:"h",cmd:()=>Q("sidebar")},{key:"return",cmd:()=>{if(X()==="sidebar"){Z1();return}m1()}},{key:"t",cmd:o},{key:"r",cmd:()=>{let m=R();if(m)Y0(m)}},{key:"x",cmd:()=>{let m=R();if(m)j0(m)}},{key:"d",cmd:()=>{let m=R();if(m)g1(m)}}]})),D1(()=>({enabled:g0(),bindings:[{key:"tab",cmd:()=>z1(1)},{key:"shift+tab",cmd:()=>z1(-1)}]})),D1(()=>({enabled:g0()&&j()===2,bindings:[{key:"return",cmd:()=>void L0()}]})),(()=>{var m=W("box"),R0=W("box"),V1=W("text"),R1=W("text"),H1=W("box"),n=W("box"),z0=W("box"),I0=W("text");return D(m,R0),D(m,H1),D(m,z0),q(m,"paddingLeft",2),q(m,"paddingRight",2),q(m,"paddingBottom",1),q(m,"gap",1),D(R0,V1),D(R0,R1),q(R0,"flexDirection","row"),q(R0,"justifyContent","space-between"),U(V1,()=>M("settings.title")),q(R1,"onMouseUp",()=>J.onClose()),U(R1,()=>M("settings.esc")),D(H1,n),q(H1,"flexDirection","row"),q(H1,"gap",2),U(H1,b(L3,{level:X,cursor:B,switchSection:u1}),n),q(n,"flexGrow",1),q(n,"flexShrink",1),q(n,"flexDirection","column"),q(n,"gap",1),U(n,b(X0,{get when(){return f()==="general"},get children(){return b(M3,{level:X,bodyRow:j,setLevel:Q,setBodyRow:K,themeNames:S,setThemeCursor:O,selectTheme:K0,currentLocale:_,selectLanguage:P,toggleTransparent:o,selectFocusAccent:I,toastEnabled:G0,soundEnabled:q0,toggleToast:H0,toggleSound:b0,zenKeepsTasks:w0,toggleZenKeepsTasks:y0,settingsSurface:O0,selectSurface:h,editorKind:h0,cycleEditorKind:D0,editorCustomCommand:x0,editEditorCustom:()=>void V0()})}}),null),U(n,b(X0,{get when(){return f()==="engines"},get children(){return b(F3,{level:X,bodyRow:j,setLevel:Q,setBodyRow:K,get vendors(){return u0()},isCustom:(k0)=>!QJ(k0),displayName:$0,commandText:d,isDefault:f0,isDefaultEngine:C1,editEngine:(k0)=>void e(k0),renameEngine:(k0)=>void Y0(k0),resetEngine:j0,onAddEngine:()=>void C0()})}}),null),U(n,b(X0,{get when(){return f()==="accounts"},get children(){return b(O3,{claudeStatus:y,codexStatus:l,copilotStatus:J0})}}),null),U(n,b(X0,{get when(){return f()==="keys"},get children(){return b(g3,{})}}),null),U(n,b(X0,{get when(){return f()==="feedback"},get children(){return b(A3,{level:X,bodyRow:j,setLevel:Q,setBodyRow:K,title:L,setTitle:(k0)=>{A(k0),s("")},body:F,setBody:(k0)=>{g(k0),s("")},status:u,onTitleSubmit:()=>K(1),onBodySubmit:()=>void L0(),submit:()=>void L0()})}}),null),U(n,b(X0,{get when(){return f()==="dev"},get children(){return b(R3,{level:X,bodyRow:j,setLevel:Q,setBodyRow:K,hasDaemon:C,confirmReset:()=>void E9(z,J.kv,Z),confirmRestartDaemon:()=>void w9(z,J.orchestrator,Z),remoteProjectsEnabled:p0,toggleRemoteProjects:v,autoStatusEnabled:M0,toggleAutoStatus:Z0,dispatcherEnabled:F0,toggleDispatcher:a0})}}),null),D(z0,I0),q(z0,"paddingTop",0),U(I0,(()=>{var k0=T0(()=>!!g0());return()=>k0()?M("settings.nav.feedback"):M("settings.nav.default")})()),x((k0)=>{var WJ=nT.BOLD,MJ=G.text,XJ=G.textMuted,nJ=G.textMuted;return WJ!==k0.e&&(k0.e=q(V1,"attributes",WJ,k0.e)),MJ!==k0.t&&(k0.t=q(V1,"fg",MJ,k0.t)),XJ!==k0.a&&(k0.a=q(R1,"fg",XJ,k0.a)),nJ!==k0.o&&(k0.o=q(I0,"fg",nJ,k0.o)),k0},{e:void 0,t:void 0,a:void 0,o:void 0}),m})()}var c9=N(()=>{w();w();w();w();w();w();w();w();j1();QZ();hJ();cf();NX();wq();O1();$8();t1();v1();GJ();mq();uJ();C9();dJ();u9();U3();m9();C3();dZ.show=(J,z,Y)=>{let Z=!1;return new Promise((G)=>{J.replace(()=>b(dZ,{kv:z,orchestrator:Y,onVisualPrefsChange:()=>{Z=!0},onClose:()=>G({visualPrefsChanged:Z})}),()=>G({visualPrefsChanged:Z}))})}});import{TextAttributes as lT}from"@opentui/core";function k3(){let{theme:J}=d0(),z=Pz(),Y=KH(),Z=()=>Y.toasts().slice(-N3),G=()=>Math.max(0,z().width-$T-aT),X=()=>Math.max(0,z().height-_T-N3-1);return b(X0,{get when(){return Y.toasts().length>0},get children(){var Q=W("box");return q(Q,"position","absolute"),q(Q,"zIndex",2500),q(Q,"width",40),q(Q,"flexDirection","column"),q(Q,"gap",0),U(Q,b(Q1,{get each(){return Z()},children:(f)=>{let H=()=>f.kind==="needs_input"?J.warning:f.kind==="error"?J.error:J.success,B=()=>J.selectedListItemText,V=()=>f.kind==="needs_input"?"?":f.kind==="error"?"\u2715":"\u2713";return(()=>{var j=W("box"),K=W("text"),L=W("text");return D(j,K),D(j,L),q(j,"flexDirection","row"),q(j,"gap",1),q(j,"paddingLeft",1),q(j,"paddingRight",1),q(j,"onMouseUp",()=>Y.dismiss(f.id)),q(K,"wrapMode","none"),U(K,V),q(L,"wrapMode","none"),U(L,()=>f.title),x((A)=>{var F=H(),g=B(),u=lT.BOLD,s=B();return F!==A.e&&(A.e=q(j,"backgroundColor",F,A.e)),g!==A.t&&(A.t=q(K,"fg",g,A.t)),u!==A.a&&(A.a=q(K,"attributes",u,A.a)),s!==A.o&&(A.o=q(L,"fg",s,A.o)),A},{e:void 0,t:void 0,a:void 0,o:void 0}),j})()}})),x((f)=>{var H=G(),B=X();return H!==f.e&&(f.e=q(Q,"left",H,f.e)),B!==f.t&&(f.t=q(Q,"top",B,f.t)),f},{e:void 0,t:void 0}),Q}})}var N3=4,$T=40,aT=2,_T=2;var b3=N(()=>{w();w();w();w();w();w();w();j1();UH();v1()});import{TextAttributes as pT}from"@opentui/core";function rT(J,z){let Y=J?`v${J}`:M("update.skew.olderBuild");return M("update.skew.hint",{daemon:Y,clientVersion:z})}function S3(J){let{theme:z}=d0(),Y=()=>Math.max(4,J.width()-2);return b(X0,{get when(){return J.stale()},get children(){var Z=W("box"),G=W("text"),X=W("box"),Q=W("text"),f=W("box"),H=W("text");return D(Z,G),D(Z,X),D(Z,f),q(Z,"flexDirection","column"),q(Z,"flexShrink",0),q(Z,"paddingLeft",1),q(Z,"paddingRight",1),q(Z,"paddingBottom",1),q(G,"wrapMode","none"),U(G,()=>"\u2594".repeat(Y())),D(X,Q),q(X,"flexDirection","row"),q(X,"gap",1),q(Q,"wrapMode","none"),U(Q,()=>M("update.skew.title")),D(f,H),q(f,"flexDirection","row"),q(f,"gap",1),q(H,"wrapMode","word"),U(H,()=>rT(J.daemonVersion(),J.clientVersion)),x((B)=>{var{warning:V,warning:j}=z,K=pT.BOLD,L=z.text;return V!==B.e&&(B.e=q(G,"fg",V,B.e)),j!==B.t&&(B.t=q(Q,"fg",j,B.t)),K!==B.a&&(B.a=q(Q,"attributes",K,B.a)),L!==B.o&&(B.o=q(H,"fg",L,B.o)),B},{e:void 0,t:void 0,a:void 0,o:void 0}),Z}})}var I3=N(()=>{w();w();w();w();w();w();j1();v1();GJ()});function y3(J,z){return J.find((Y)=>Y.id!==z&&!Y.archived)}async function oT(J){let z=J.tasks.find((X)=>X.id===J.taskId);if(!z)return null;let Y=!z.archived;try{await J.orch.setArchived(J.taskId,Y)}catch(X){return J.logger.error(`${J.logPrefix} archive failed:`,X),null}if(!Y)return{archived:Y};let Z=M1(J.taskId),G=y3(J.tasks,J.taskId);if(await uz(Z,G?M1(G.id):void 0).catch((X)=>{J.logger.error(`${J.logPrefix} switch-client failed:`,X)}),J.updateActiveTask)await J.orch.setActiveTask(G?.id??null).catch(()=>{});return await rJ(Z).catch((X)=>{J.logger.error(`${J.logPrefix} kill tmux session failed:`,X)}),{archived:Y,nextTask:G}}async function sT(J){let z=y3(J.tasks,J.taskId),Y=M1(J.taskId);if(J.switchBeforeKill)await uz(Y,z?M1(z.id):void 0).catch((Z)=>{J.logger.error(`${J.logPrefix} switch-client failed:`,Z)});if(J.updateActiveTask)await J.orch?.setActiveTask(z?.id??null).catch(()=>{});return await rJ(Y).catch((Z)=>{J.logger.error(`${J.logPrefix} kill tmux session failed:`,Z)}),{nextTask:z}}async function T3(J,z){if(!J.orch)return;let Y=J.tasks().find((G)=>G.id===z);if(!Y)return;if(!Y.archived){if(!await J.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 oT({orch:J.orch,tasks:J.tasks(),taskId:z,logger:J.logger,logPrefix:J.logPrefix,updateActiveTask:J.updateActiveTask}))return;await J.reload?.()}async function u3(J,z){if(!J.orch)return;let Y=J.tasks().find((Q)=>Q.id===z);if(!Y)return;if(Y.kind==="main"){if(!await J.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 J.orch.forgetProject(Y.repo)}catch(f){J.logger.error(`${J.logPrefix} forget project failed:`,f),J.notifyError?.(`Couldn't remove: ${f instanceof Error?f.message:String(f)}`);return}await J.reload?.();return}if(!await J.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 J.orch.deleteTask(z),G=!0}catch(Q){if((Q instanceof Error?Q.message:String(Q)).includes(mB)){if(await J.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 J.orch.deleteTask(z,{force:!0}),G=!0}catch(B){J.logger.error(`${J.logPrefix} force delete failed:`,B),J.notifyError?.(`Couldn't delete: ${B instanceof Error?B.message:String(B)}`)}}else J.logger.error(`${J.logPrefix} delete failed:`,Q),J.notifyError?.(`Couldn't delete: ${Q instanceof Error?Q.message:String(Q)}`)}if(!G)return;let{nextTask:X}=await sT({orch:J.orch,tasks:J.tasks(),taskId:z,logger:J.logger,logPrefix:J.logPrefix,switchBeforeKill:J.switchBeforeKill,updateActiveTask:J.updateActiveTask});await J.reload?.(),J.onTaskDeleted?.(z,X)}async function x3(J,z){let Y=J.tasks().find((G)=>G.id===z);if(!Y)return;let Z=await J.promptText(Y.title);if(!Z||!J.orch)return;try{await J.orch.setTitle(z,Z)}catch(G){J.logger.error(`${J.logPrefix} task.rename failed:`,G),J.notifyError?.(`Couldn't rename task: ${G instanceof Error?G.message:String(G)}`);return}await J.reload?.()}async function E3(J,z){let Y=J.tasks().find((G)=>G.id===z);if(!Y||Y.kind==="main")return;let Z=await J.promptText(Y.branch,{dialogTitle:"Rename branch",fieldLabel:"branch"});if(!Z||!J.orch)return;try{await J.orch.setBranch(z,Z)}catch(G){J.logger.error(`${J.logPrefix} task.setBranch failed:`,G),J.notifyError?.(`Couldn't rename branch: ${G instanceof Error?G.message:String(G)}`);return}await J.reload?.()}async function w3(J,z){let Y=J.tasks().find((X)=>X.id===z);if(!Y||!J.orch)return;let Z=await oz(),G=LY(Z,Y.vendor??d1);try{await J.orch.setVendor(z,G)}catch(X){J.logger.error(`${J.logPrefix} task.setVendor failed:`,X),J.notifyError?.(`Couldn't switch engine: ${X instanceof Error?X.message:String(X)}`);return}J.notifyInfo?.(`Engine \u2192 ${RZ(G)} (applies on reopen)`),await J.reload?.()}async function P3(J){let z=gJ(),Y=J.cursorRepo()??z[0]??process.cwd();if(J.openCreateSurface&&await J.openCreateSurface(Y))return;let Z=J.lastVendor()??d1,G=await oz();if(G.length===0)J.notifyInfo?.("No engine CLI detected \u2014 install claude or codex, or add one in Settings \u2192 Engines");let X=J.orch,Q=await J.promptNewTask(Y,z,{defaultVendor:Z,availableVendors:G,discoverAdoptable:X?(H)=>X.discoverAdoptableWorktrees(H):void 0});if(!Q)return;if(J.rememberVendor(Q.vendor),$z(Q.repo),J.onRepoSaved?.(),!X){J.logger.error(`${J.logPrefix} no daemon; cannot create task`);return}J.notifyInfo?.("Creating task\u2026");let f;if(Q.mode==="adopt"){let H=Q.adopt.length,B=0,V;for(let j of Q.adopt)try{f=(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);J.logger.error(`${J.logPrefix} adoptWorktree failed for ${j.worktreePath}:`,K)}if(B===0){J.notifyError?.(M("newTask.adopt.summaryNone",{error:V??""}));return}if(B<H)J.notifyInfo?.(M("newTask.adopt.summaryPartial",{done:B,total:H}));else J.notifyInfo?.(M("newTask.adopt.summaryAll",{count:B}))}else try{f=(await X.createTask({repo:Q.repo,baseRef:Q.baseRef,vendor:Q.vendor})).id}catch(H){J.logger.error(`${J.logPrefix} task.create failed:`,H),J.notifyError?.(`Couldn't create task: ${H instanceof Error?H.message:String(H)}`);return}if(await J.reload?.(),f)J.selectTask?.(f),await J.enterTask?.(f)}var h3=N(()=>{QZ();hJ();nB();O1();GJ();pJ();t1();fJ()});import{spawn as tT}from"child_process";import{existsSync as eT}from"fs";import{basename as Ju,delimiter as zu,isAbsolute as Yu,join as Zu}from"path";function d9(J,z,Y){if(Yu(J))return Y(J);let Z=z.PATH??"";for(let G of Z.split(zu)){if(!G)continue;if(Y(Zu(G,J)))return!0}return!1}function Qu(J){let z=Ju(J);if(z==="code")return"VS Code";if(z==="cursor")return"Cursor";if(z==="windsurf")return"Windsurf";if(z==="zed")return"Zed";return z||J}function v3(J={}){let z=J.env??process.env,Y=J.platform??process.platform,Z=J.exists??eT,G=z.KOBE_OPEN_EDITOR?.trim();if(G)return{id:"env",label:Qu(G),command:G,args:[]};for(let X of Gu)if(d9(X.command,z,Z))return{id:X.id,label:X.label,command:X.command,args:[]};if(Y==="darwin"&&d9("open",z,Z)){for(let X of Xu)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"&&d9("xdg-open",z,Z))return{id:"xdg-open",label:"Open",command:"xdg-open",args:[]};return null}function qu(J,z){return[z.command,[...z.args,J]]}function m3(J,z,Y={}){if(!J)return!1;let Z=Y.spawn??tT,[G,X]=qu(J,z);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 Gu,Xu;var c3=N(()=>{Gu=[{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"}],Xu=[{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 CH(J){let z=new Map;function Y(Z){let G=z.get(Z);if(!G){let[X,Q]=p(J.initial,J.equals?{equals:J.equals}:void 0);G={read:X,write:(f)=>Q(()=>f),inFlight:!1,nextAllowedAt:0},z.set(Z,G)}return G}return{read(Z){if(!Z)return J.initial;return Y(Z).read()},poll(Z){if(!Z)return;let G=Y(Z);JG(G,J,(X)=>J.run(Z,X),(X)=>G.write(X))},reset(){z.clear()}}}var VQ=N(()=>{j1();zG();zG()});import{stat as fu}from"fs/promises";import{join as Hu}from"path";async function Vu(J){try{let z=await fu(Hu(J,".git","HEAD"));return`${z.mtimeMs}:${z.size}`}catch{return null}}async function Ku(J,z,Y=zY){let Z=await Vu(J);if(Z!==null){let f=d3.get(J);if(f&&f.fingerprint===Z)return f.value}let G="",X=await Y("git",["symbolic-ref","--short","HEAD"],{cwd:J,env:vJ(),signal:z}),Q=X.status===0?X.stdout.trim():"";if(Q&&Q!=="HEAD")G=Q;else if((await Y("git",["rev-parse","--verify","HEAD"],{cwd:J,env:vJ(),signal:z})).status===0)G="(detached)";if(Z!==null)d3.set(J,{fingerprint:Z,value:G});return G}function i3(J){return n3.read(J)}function l3(J){n3.poll(J)}var Bu=2000,ju=30000,Wu=1500,d3,n3;var $3=N(()=>{xY();VQ();d3=new Map;n3=CH({initial:"",timeoutMs:Bu,slowRetryMs:ju,minIntervalMs:Wu,run:(J,z)=>Ku(J,z)})});function n9(J){let z=J.scheduleTimeout??((H,B)=>{let V=setTimeout(H,B);return()=>clearTimeout(V)}),Y=!1,Z=null,G=()=>{Y=!0,Z?.(),Z=z(()=>{Y=!1,Z=null},700)},X=()=>{Y=!1,Z?.(),Z=null},Q=(H)=>{let B=J.getFlatIds();if(B.length===0)return;let V=J.getCursor(),j=V<0?0:V,K=Math.min(B.length-1,Math.max(0,j+H));J.setCursor(K)},f=(H)=>{let B=J.getFlatIds();if(B.length===0)return;J.setCursor(Math.min(B.length-1,Math.max(0,H)))};return{moveDown(){X(),Q(1)},moveUp(){X(),Q(-1)},selectCurrent(){X();let H=J.getFlatIds(),B=J.getCursor();if(B<0||B>=H.length)return;let V=H[B];if(V!==void 0)J.onSelect(V)},pressG(){if(Y)X(),f(0);else G()},pressShiftG(){X(),f(J.getFlatIds().length-1)},isChordArmed(){return Y},disarmChord(){X()}}}function a3(J){let z=n9({getCursor:()=>J.cursorIndex(),setCursor:(X)=>J.setCursorIndex(X),getFlatIds:()=>J.flatTaskIds(),onSelect:(X)=>J.onSelect(X)}),Y=()=>{let X=J.flatTaskIds(),Q=J.cursorIndex();if(Q<0||Q>=X.length)return;return X[Q]},Z=()=>J.searchMode?.()??!1,G=()=>J.moveMode?.()??!1;D1(()=>({enabled:J.focused()&&!Z(),bindings:_Y({"sidebar.nav":(X,Q)=>{let f=(Q??0)%2===0;if(G()){let H=Y();if(H===void 0)return;J.onMoveRequest?.(H,f?1:-1);return}if(f)z.moveDown();else z.moveUp()},"sidebar.select":()=>{if(G()){J.onMoveModeExit?.();return}z.selectCurrent()},"sidebar.goto":(X)=>{if(G())return;if(X.shift)z.pressShiftG();else z.pressG()},"sidebar.delete":()=>{if(G())return;let X=Y();if(X!==void 0)J.onDeleteRequest?.(X)},"sidebar.archive":()=>{if(G())return;let X=Y();if(X!==void 0)J.onArchiveRequest?.(X)},"sidebar.localMerge":(X)=>{if(!X.shift)return;let Q=Y();if(Q!==void 0)J.onLocalMergeRequest?.(Q)},"sidebar.rename":()=>{if(G())return;let X=Y();if(X!==void 0)J.onRenameRequest?.(X)},"sidebar.pin":(X)=>{if(G())return;if(!X.shift)return;let Q=Y();if(Q!==void 0)J.onPinRequest?.(Q)},"sidebar.search.enter":()=>{if(G())return;J.onSearchEnter?.()},"sidebar.sort":()=>{if(G())return;J.onSortModeToggle?.()},"sidebar.projectFilter":()=>{if(G())return;J.onProjectFilterToggle?.()}})})),D1(()=>({enabled:J.focused()&&G(),bindings:[{key:"escape",cmd:()=>J.onMoveModeExit?.()}]})),D1(()=>({enabled:J.focused(),bindings:_Y({"sidebar.view":(X,Q)=>{J.onViewSwitch?.((Q??0)%2===0?-1:1)}})})),D1(()=>({enabled:J.focused()&&Z(),bindings:_Y({"sidebar.search.nav":(X,Q)=>{if((Q??0)%2===0)z.moveDown();else z.moveUp()},"sidebar.search.submit":()=>{z.selectCurrent(),J.onSearchExit?.(!0)},"sidebar.search.cancel":()=>J.onSearchExit?.(!1)})}))}var _3=N(()=>{$G();uJ()});function i9(J,z){if(z<=0)return"";if(J.length<=z)return J;return`${J.slice(0,Math.max(0,z-1))}\u2026`}function l9(J,z){return` ${i9(J,Math.max(0,z))}`}function Du(J){switch(J){case"done":return M("tasks.status.done");case"in_review":return M("tasks.status.inReview");case"in_progress":return M("tasks.status.working");case"backlog":return M("tasks.status.backlog");case"canceled":return M("tasks.status.canceled");case"error":return M("tasks.status.error")}}function Lu(J){switch(J){case"rate_limited":return{text:M("tasks.activity.rateLimited"),tone:"warning"};case"permission_needed":return{text:M("tasks.activity.permissionNeeded"),tone:"warning"};case"error":return{text:M("tasks.activity.error"),tone:"error"};default:return null}}function o3(J){switch(J.prStatus?.checkState){case"passing":return{glyph:"\u2713",tone:"success"};case"failing":return{glyph:"\u2717",tone:"error"};case"pending":return{glyph:"\u2022",tone:"warning"};default:return null}}function Mu(){return M("tasks.subtitle.noTracking")}function Fu(){return M("tasks.subtitle.materializing")}function Ou(J){if(J.kind==="main")return!1;return J.vendor!==void 0&&!QJ(J.vendor)}function $9(J){let{task:z}=J,Y=z.kind==="main",Z=Y?J.mainBranch??"":z.branch,G=Uu[z.status],X=J.activity?.state,Q=X!==void 0,f=Au(X),H=Lu(X),B=Ou(z)&&!Q,V=J.job!==void 0,j=V||!B&&(X==="running"||J.live||!Q&&!Y&&z.status==="in_progress"),K=rG[J.spinnerFrame]??rG[0],L=V?"primary":B?"textMuted":H?.tone??(j?"primary":f?.tone??G.tone),A=B?Mu():Du(z.status),F=V?J.truncateBranch(Fu(),J.subtitleBudget):H?J.truncateBranch(H.text,J.subtitleBudget):Z.length>0?J.truncateBranch(Z,J.subtitleBudget):J.truncateBranch(A,J.subtitleBudget),g=B?p3:f?.glyph??G.glyph,u=B?p3:f?.glyph??"\u2605";return{isMain:Y,titleText:Y?gz(z.repo):z.title,subtitleText:F,loading:j,stateGlyph:j?K:g,projectGlyph:j?K:u,tone:L}}function a9(J,z){if(!J.loading)return J;let Y=rG[z()%rG.length]??"\u280B";if(Y===J.stateGlyph&&Y===J.projectGlyph)return J;return{...J,stateGlyph:Y,projectGlyph:Y}}function Au(J){switch(J){case"rate_limited":return{glyph:"\u25F7",tone:"warning"};case"permission_needed":return{glyph:"?",tone:"warning"};case"error":return{glyph:"\u2715",tone:"error"};case"turn_complete":return{glyph:"\u2713",tone:"primary"};default:return null}}var Uu,rG,r3=100,p3="\xB7";var s3=N(()=>{GJ();t1();OH();Uu={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"}};rG=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function _9(J){return t3.read(J)}function p9(J){t3.poll(J)}var Ru=4000,gu=60000,Cu=1500,Nu,t3;var e3=N(()=>{xY();VQ();SG();VQ();Nu={added:0,deleted:0},t3=CH({initial:Nu,equals:wz,timeoutMs:Ru,slowRetryMs:gu,minIntervalMs:Cu,run:async(J,z)=>{let Y=await zY("git",["status","--porcelain=v1"],{cwd:J,env:vJ(),signal:z});if(Y.status!==0)throw Error("git status failed");return bG(Y.stdout)}})});import{TextAttributes as E1}from"@opentui/core";function ku(J){switch(J){case"active":return M("tasks.view.workspace");case"archived":return M("tasks.view.archives")}}function zM(J,z=Su){if(J.length<=z)return J;return`${J.slice(0,Math.max(0,z-1))}\u2026`}function Iu(J){let z=0;for(let Y of J)z+=(Y.codePointAt(0)??0)>=4352?2:1;return z}function yu(J,z){if(z<=0||J.length<=z)return J;return`\u2026${J.slice(J.length-Math.max(0,z-1))}`}function YM(J){let{theme:z}=d0(),Y=()=>J.focused?J.focused():!0,[Z,G]=p("active"),[X,Q]=p(!1),[f,H]=p(""),[B,V]=p(null),j=()=>J.projectFilter?.()??B(),K=(d)=>{if(J.onProjectFilterChange)J.onProjectFilterChange(d);else V(d)};function L(){H(""),Q(!0),J.onSearchActiveChange?.(!0)}function A(d){Q(!1),H(""),J.onSearchActiveChange?.(!1)}Y1(()=>{if(!X())return;let d=HJ();if(!d)return;let f0=(S0)=>{if(S0.defaultPrevented)return;if(!Y())return;if(S0.ctrl||S0.meta||S0.option)return;if(S0.name==="backspace"){H((_0)=>_0.slice(0,-1));return}let s0=S0.sequence;if(!s0||s0.length!==1)return;let $0=s0.charCodeAt(0);if($0<32||$0===127)return;H((_0)=>_0+s0)};d.keyInput.on("keypress",f0),N1(()=>d.keyInput.off("keypress",f0))});let[F,g]=p(0),u=setInterval(()=>g((d)=>d+1),bu);N1(()=>clearInterval(u));let[s,S]=p(0),O=setInterval(()=>S((d)=>(d+1)%rG.length),r3);N1(()=>clearInterval(O));let C=()=>J.sortMode?.()??"default",y=U0(()=>G3(J.tasks(),Z())),a=U0(()=>{let d=j();if(!d)return null;let f0=zz(d);return y().find((S0)=>zz(S0.repo)===f0)??null}),l=U0(()=>a()?.repo??null),t=U0(()=>a()?.label??"all"),J0=U0(()=>{let d=a();return d?d.count:y().reduce((f0,S0)=>f0+S0.count,0)}),T=U0(()=>{let d=J0();return`${d} ${d===1?M("tasks.project.taskSingular"):M("tasks.project.taskPlural")}`}),Q0=U0((d)=>q3(d,S9(J.tasks(),Z(),X()?f():"",C(),l())),[]),r=U0(()=>I9(Q0())),W0=U0(()=>Q3(Q0())),O0=U0(()=>W0().projectRows),K0=U0(()=>W0().taskRows),_=U0(()=>{let d=new Map;for(let f0 of Q0())d.set(f0.flatIndex,f0);return d}),P=U0(()=>I9(S9(J.tasks(),Z(),"",C(),l())).length),k=U0(()=>K0().length>0);Y1(()=>{let d=j(),f0=y();if(d!==null&&f0.length>0&&(f0.length<=1||a()===null))K(null)});function o(){let d=y();if(d.length<=1){K(null);return}let f0=l(),S0=f0?zz(f0):null,s0=S0===null?-1:d.findIndex((_0)=>zz(_0.repo)===S0),$0=d[s0+1];K($0?.repo??null)}let I=()=>J.width?J.width():JM,h=U0(()=>Math.max(6,I()-9)),G0=U0(()=>Math.max(6,I()-16)),q0=Pz(),H0=U0(()=>{let d=Math.max(2,Math.min(10,Math.floor(q0().height*0.25))),f0=Math.max(2,O0().length*2);return Math.min(d,f0)}),[b0,w0]=p(null),[y0,p0]=p(-1),v,M0,Z0,F0=new Map;Y1(()=>{let d=J.width?J.width():JM,f0=Z0;if(!f0)return;f0.width=d,f0.flexShrink=1,f0.minHeight=0}),Y1(SJ([y0,Q0],([d])=>{let f0=_().get(d);if(!f0)return;let S0=f0.task.kind==="main"?v:M0;if(!S0)return;if(S0.viewport.height<=0)return;let s0=F0.get(d);if(!s0)return;S0.scrollChildIntoView(s0.id)})),Y1(SJ(()=>[J.selectedId(),r()],([d,f0])=>{let S0=_1(y0);if(d===null){if(S0===-1&&f0.length>0)p0(0);else if(S0>=f0.length)p0(Math.max(0,f0.length-1));else if(f0.length===0)p0(-1);return}let s0=f0.indexOf(d);if(s0>=0){if(s0!==S0)p0(s0)}else if(f0.length===0)p0(-1);else if(S0<0||S0>=f0.length)p0(f0.length-1)})),Y1(SJ(Z,()=>{let d=r();p0(d.length>0?0:-1)},{defer:!0})),Y1(SJ(l,(d)=>p0(X3(Q0(),d)),{defer:!0})),Y1(SJ([X,f],()=>{if(!X())return;let d=r();p0(d.length>0?0:-1)}));function a0(d){let f0=Z(),S0=KQ.findIndex((_0)=>_0.view===f0);if(S0<0)return;let s0=(S0+d+KQ.length)%KQ.length,$0=KQ[s0];if($0)G($0.view)}a3({focused:Y,cursorIndex:y0,setCursorIndex:p0,flatTaskIds:r,onSelect:(d)=>{J.onSelect(d),J.onActivate?.(d)},onDeleteRequest:(d)=>J.onDeleteRequest?.(d),onArchiveRequest:(d)=>J.onArchiveRequest?.(d),onLocalMergeRequest:(d)=>J.onLocalMergeRequest?.(d),moveMode:J.moveMode,onMoveRequest:(d,f0)=>J.onMoveRequest?.(d,f0),onMoveModeExit:()=>J.onMoveModeExit?.(),onRenameRequest:(d)=>J.onRenameRequest?.(d),onPinRequest:(d)=>J.onPinRequest?.(d),onViewSwitch:(d)=>a0(d),onSortModeToggle:()=>J.onSortModeToggle?.(),onProjectFilterToggle:()=>o(),searchMode:X,onSearchEnter:()=>L(),onSearchExit:(d)=>A(d)});let r0=(d)=>(()=>{var f0=W("box"),S0=W("box"),s0=W("text"),$0=W("text");return D(f0,S0),q(f0,"flexDirection","column"),q(f0,"flexShrink",0),U(f0,b(X0,{get when(){return d.topPad},get children(){var _0=W("box"),e0=W("text");return D(_0,e0),q(_0,"flexShrink",0),D(e0,E0(" ")),q(e0,"wrapMode","none"),_0}}),S0),D(S0,s0),D(S0,$0),q(S0,"flexDirection","row"),q(S0,"flexShrink",0),q(S0,"gap",1),q(S0,"paddingLeft",1),q(S0,"paddingRight",1),q(s0,"wrapMode","none"),U(s0,()=>d.label),q($0,"wrapMode","none"),U($0,()=>"\u2500".repeat(Math.max(2,I()-10-d.label.length-(d.suffix?.length??0)))),U(S0,b(X0,{get when(){return d.suffix},get children(){var _0=W("text");return q(_0,"wrapMode","none"),U(_0,()=>d.suffix),x((e0)=>{var C1=z.info,g1=E1.BOLD;return C1!==e0.e&&(e0.e=q(_0,"fg",C1,e0.e)),g1!==e0.t&&(e0.t=q(_0,"attributes",g1,e0.t)),e0},{e:void 0,t:void 0}),_0}}),null),x((_0)=>{var e0=z.textMuted,C1=E1.BOLD,g1=z.border;return e0!==_0.e&&(_0.e=q(s0,"fg",e0,_0.e)),C1!==_0.t&&(_0.t=q(s0,"attributes",C1,_0.t)),g1!==_0.a&&(_0.a=q($0,"fg",g1,_0.a)),_0},{e:void 0,t:void 0,a:void 0}),f0})(),u0=(d)=>{switch(d){case"success":return z.success;case"warning":return z.warning;case"primary":return z.primary;case"error":return z.error;default:return z.textMuted}},o0=(d)=>{let f0=d.row.task,S0=d.row.flatIndex,s0=()=>S0===y0(),$0=()=>f0.id===J.selectedId(),_0=U0(()=>{let R=J.chatRunState?.();if(!R)return!1;let h0=`${f0.id}:`;for(let[D0,x0]of R)if(x0==="running"&&D0.startsWith(h0))return!0;return!1}),e0=U0(()=>{let R=Tf(J.worktreeChanges?.(),f0.worktreePath);if(R)return R;if(F(),!f0.archived)p9(f0.worktreePath);return _9(f0.worktreePath)},void 0,{equals:wz}),C1=U0(()=>{return F(),l3(f0.repo),i3(f0.repo)}),g1=U0(()=>$9({task:f0,activity:J.engineState?.().get(f0.id),job:J.taskJobs?.().get(f0.id),live:_0(),spinnerFrame:0,subtitleBudget:G0(),truncateBranch:zM,mainBranch:C1()})),e=U0(()=>a9(g1(),s)),Y0=()=>!e().loading?z.primary:u0(e().tone),j0=()=>s0()?z.focusAccent:$0()?z.primary:void 0,C0=()=>s0()||$0()?"\u258C":" ";return(()=>{var R=W("box"),h0=W("box"),D0=W("box"),x0=W("text"),V0=W("box"),L0=W("text"),g0=W("text"),z1=W("box"),Z1=W("text"),n0=W("box"),u1=W("text");return D(R,h0),q(R,"flexDirection","column"),q(R,"gap",0),q(R,"paddingBottom",0),D(h0,D0),D(h0,z1),lY((N0)=>{F0.set(S0,N0),N1(()=>{if(F0.get(S0)===N0)F0.delete(S0)})},h0),q(h0,"flexDirection","column"),q(h0,"gap",0),q(h0,"onMouseUp",()=>{if(J.onSelect(f0.id),J.activateOnClick)J.onActivate?.(f0.id)}),q(h0,"onMouseOver",(N0)=>w0({task:f0,x:N0.x,y:N0.y})),q(h0,"onMouseOut",()=>w0((N0)=>N0?.task.id===f0.id?null:N0)),D(D0,x0),D(D0,V0),q(D0,"flexDirection","row"),q(D0,"gap",0),q(x0,"wrapMode","none"),U(x0,C0),D(V0,L0),D(V0,g0),q(V0,"flexDirection","row"),q(V0,"flexGrow",1),q(V0,"paddingRight",1),q(V0,"gap",0),q(L0,"wrapMode","none"),U(L0,()=>e().projectGlyph),q(g0,"wrapMode","none"),q(g0,"flexGrow",1),U(g0,()=>l9(e().titleText,h())),D(z1,Z1),D(z1,n0),q(z1,"flexDirection","row"),q(z1,"gap",0),q(Z1,"wrapMode","none"),U(Z1,C0),D(n0,u1),q(n0,"flexDirection","row"),q(n0,"flexGrow",1),q(n0,"paddingLeft",2),q(n0,"paddingRight",1),q(n0,"gap",1),q(u1,"wrapMode","none"),q(u1,"flexGrow",1),U(u1,()=>e().subtitleText),U(n0,b(X0,{get when(){return e0().added>0},get children(){var N0=W("text"),m1=E0("+");return D(N0,m1),q(N0,"wrapMode","none"),U(N0,()=>e0().added,null),x((m)=>q(N0,"fg",z.success,m)),N0}}),null),U(n0,b(X0,{get when(){return e0().deleted>0},get children(){var N0=W("text"),m1=E0("\u2212");return D(N0,m1),q(N0,"wrapMode","none"),U(N0,()=>e0().deleted,null),x((m)=>q(N0,"fg",z.error,m)),N0}}),null),x((N0)=>{var m1=s0()?z.backgroundElement:void 0,m=j0(),R0=Y0(),V1=E1.BOLD,R1=z.text,H1=E1.BOLD,n=j0(),z0=z.textMuted,I0=E1.DIM;return m1!==N0.e&&(N0.e=q(h0,"backgroundColor",m1,N0.e)),m!==N0.t&&(N0.t=q(x0,"fg",m,N0.t)),R0!==N0.a&&(N0.a=q(L0,"fg",R0,N0.a)),V1!==N0.o&&(N0.o=q(L0,"attributes",V1,N0.o)),R1!==N0.i&&(N0.i=q(g0,"fg",R1,N0.i)),H1!==N0.n&&(N0.n=q(g0,"attributes",H1,N0.n)),n!==N0.s&&(N0.s=q(Z1,"fg",n,N0.s)),z0!==N0.h&&(N0.h=q(u1,"fg",z0,N0.h)),I0!==N0.r&&(N0.r=q(u1,"attributes",I0,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}),R})()};return(()=>{var d=W("box"),f0=W("box"),S0=W("box"),s0=W("text"),$0=W("box"),_0=W("box"),e0=W("text"),C1=W("scrollbox"),g1=W("box");return D(d,f0),D(d,$0),D(d,C1),lY((e)=>{Z0=e},d),q(d,"flexGrow",1),q(d,"minHeight",0),q(d,"flexDirection","column"),q(d,"paddingTop",1),q(d,"paddingBottom",1),q(d,"paddingLeft",0),q(d,"paddingRight",0),D(f0,S0),q(f0,"flexDirection","row"),q(f0,"justifyContent","space-between"),q(f0,"gap",1),q(f0,"paddingBottom",1),q(f0,"paddingLeft",1),q(f0,"paddingRight",1),D(S0,s0),q(S0,"flexDirection","row"),q(S0,"gap",1),D(s0,E0("KOBE")),q(s0,"wrapMode","none"),U(S0,b(X0,{get when(){return J.headerStatus?.()},children:(e)=>(()=>{var Y0=W("text");return q(Y0,"wrapMode","none"),q(Y0,"onMouseUp",()=>J.onHeaderStatusClick?.()),U(Y0,()=>e().label),x((j0)=>{var C0=e().emphasize?z.warning:z.textMuted,R=e().emphasize?E1.BOLD:E1.DIM;return C0!==j0.e&&(j0.e=q(Y0,"fg",C0,j0.e)),R!==j0.t&&(j0.t=q(Y0,"attributes",R,j0.t)),j0},{e:void 0,t:void 0}),Y0})()}),null),U(f0,b(X0,{get when(){return J.onAddTask},get children(){var e=W("text");return D(e,E0("[+]")),q(e,"wrapMode","none"),q(e,"onMouseUp",()=>J.onAddTask?.()),x((Y0)=>{var j0=z.primary,C0=E1.BOLD;return j0!==Y0.e&&(Y0.e=q(e,"fg",j0,Y0.e)),C0!==Y0.t&&(Y0.t=q(e,"attributes",C0,Y0.t)),Y0},{e:void 0,t:void 0}),e}}),null),U(d,b(X0,{get when(){return X()},get children(){var e=W("box"),Y0=W("text"),j0=W("text"),C0=W("text");return D(e,Y0),D(e,j0),D(e,C0),q(e,"flexDirection","row"),q(e,"gap",0),q(e,"paddingBottom",1),q(e,"paddingLeft",1),D(Y0,E0("/")),q(Y0,"wrapMode","none"),q(j0,"wrapMode","none"),U(j0,f),D(C0,E0("\u2588")),q(C0,"wrapMode","none"),U(e,b(X0,{get when(){return f().length===0},get children(){var R=W("text"),h0=E0(" ");return D(R,h0),q(R,"wrapMode","none"),U(R,()=>M("tasks.search.placeholder"),null),x((D0)=>q(R,"fg",z.textMuted,D0)),R}}),null),U(e,b(X0,{get when(){return f().length>0},get children(){var R=W("text"),h0=E0(" "),D0=E0("/");return D(R,h0),D(R,D0),q(R,"wrapMode","none"),U(R,()=>r().length,D0),U(R,P,null),x((x0)=>q(R,"fg",z.textMuted,x0)),R}}),null),x((R)=>{var{info:h0,text:D0,info:x0}=z,V0=E1.BLINK;return h0!==R.e&&(R.e=q(Y0,"fg",h0,R.e)),D0!==R.t&&(R.t=q(j0,"fg",D0,R.t)),x0!==R.a&&(R.a=q(C0,"fg",x0,R.a)),V0!==R.o&&(R.o=q(C0,"attributes",V0,R.o)),R},{e:void 0,t:void 0,a:void 0,o:void 0}),e}}),$0),D($0,_0),q($0,"flexDirection","row"),q($0,"justifyContent","space-between"),q($0,"gap",1),q($0,"paddingBottom",1),q($0,"paddingLeft",1),q($0,"paddingRight",1),D(_0,e0),q(_0,"flexDirection","row"),q(_0,"gap",2),U(_0,b(Q1,{each:KQ,children:(e)=>{let Y0=()=>Z()===e.view;return(()=>{var j0=W("text");return q(j0,"wrapMode","none"),q(j0,"onMouseUp",()=>G(e.view)),U(j0,()=>ku(e.view)),x((C0)=>{var R=Y0()?z.primary:z.textMuted,h0=Y0()?E1.BOLD:void 0;return R!==C0.e&&(C0.e=q(j0,"fg",R,C0.e)),h0!==C0.t&&(C0.t=q(j0,"attributes",h0,C0.t)),C0},{e:void 0,t:void 0}),j0})()}}),e0),D(e0,E0("[/]")),q(e0,"wrapMode","none"),U($0,b(X0,{get when(){return J.sortMode},get children(){var e=W("text");return q(e,"wrapMode","none"),q(e,"onMouseUp",()=>J.onSortModeToggle?.()),U(e,()=>M("tasks.sort")),x((Y0)=>{var j0=z.textMuted,C0=E1.DIM;return j0!==Y0.e&&(Y0.e=q(e,"fg",j0,Y0.e)),C0!==Y0.t&&(Y0.t=q(e,"attributes",C0,Y0.t)),Y0},{e:void 0,t:void 0}),e}}),null),U(d,b(X0,{get when(){return O0().length>0},get children(){var e=W("box"),Y0=W("box"),j0=W("text"),C0=W("text"),R=W("scrollbox"),h0=W("box");return D(e,Y0),D(e,R),q(e,"flexDirection","column"),q(e,"flexShrink",0),D(Y0,j0),D(Y0,C0),q(Y0,"flexDirection","row"),q(Y0,"flexShrink",0),q(Y0,"gap",1),q(Y0,"paddingLeft",1),q(Y0,"paddingRight",1),q(Y0,"onMouseUp",()=>o()),q(j0,"wrapMode","none"),U(j0,()=>M("tasks.header.projects")),U(Y0,b(X0,{get when(){return y().length>1},get children(){var D0=W("text");return q(D0,"wrapMode","none"),U(D0,t),x((x0)=>{var V0=l()?z.primary:z.textMuted,L0=l()?E1.BOLD:void 0;return V0!==x0.e&&(x0.e=q(D0,"fg",V0,x0.e)),L0!==x0.t&&(x0.t=q(D0,"attributes",L0,x0.t)),x0},{e:void 0,t:void 0}),D0}}),C0),q(C0,"wrapMode","none"),U(C0,()=>"\u2500".repeat(Math.max(2,I()-10-M("tasks.header.projects").length-(y().length>1?t().length+1:0)-(y().length>1?T().length+1:0)))),U(Y0,b(X0,{get when(){return y().length>1},get children(){var D0=W("text");return q(D0,"wrapMode","none"),U(D0,T),x((x0)=>{var V0=z.textMuted,L0=E1.DIM;return V0!==x0.e&&(x0.e=q(D0,"fg",V0,x0.e)),L0!==x0.t&&(x0.t=q(D0,"attributes",L0,x0.t)),x0},{e:void 0,t:void 0}),D0}}),null),D(R,h0),lY((D0)=>{v=D0},R),q(R,"flexShrink",0),q(R,"flexGrow",0),q(R,"minHeight",0),q(R,"stickyScroll",!1),q(R,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),q(h0,"flexShrink",0),q(h0,"gap",0),q(h0,"paddingRight",1),U(h0,b(Q1,{get each(){return O0()},children:(D0)=>b(o0,{row:D0})})),x((D0)=>{var x0=z.textMuted,V0=E1.BOLD,L0=z.border,g0=H0();return x0!==D0.e&&(D0.e=q(j0,"fg",x0,D0.e)),V0!==D0.t&&(D0.t=q(j0,"attributes",V0,D0.t)),L0!==D0.a&&(D0.a=q(C0,"fg",L0,D0.a)),g0!==D0.o&&(D0.o=q(R,"maxHeight",g0,D0.o)),D0},{e:void 0,t:void 0,a:void 0,o:void 0}),e}}),C1),U(d,b(r0,{get label(){return M("tasks.header.tasks")},get suffix(){return T0(()=>C()==="default")()?void 0:C()},get topPad(){return O0().length>0}}),C1),D(C1,g1),lY((e)=>{M0=e},C1),q(C1,"flexGrow",1),q(C1,"minHeight",0),q(C1,"stickyScroll",!1),q(C1,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),q(g1,"flexShrink",0),q(g1,"gap",0),q(g1,"paddingRight",1),U(g1,b(Q1,{get each(){return K0()},children:(e)=>{let{task:Y0,flatIndex:j0}=e,C0=()=>j0===y0(),R=()=>Y0.id===J.selectedId(),h0=U0(()=>{let Z1=J.chatRunState?.();if(!Z1)return!1;let n0=`${Y0.id}:`;for(let[u1,N0]of Z1)if(N0==="running"&&u1.startsWith(n0))return!0;return!1}),D0=U0(()=>{let Z1=Tf(J.worktreeChanges?.(),Y0.worktreePath);if(Z1)return Z1;if(F(),!Y0.archived)p9(Y0.worktreePath);return _9(Y0.worktreePath)},void 0,{equals:wz}),x0=U0(()=>$9({task:Y0,activity:J.engineState?.().get(Y0.id),job:J.taskJobs?.().get(Y0.id),live:h0(),spinnerFrame:0,subtitleBudget:G0(),truncateBranch:zM,mainBranch:""})),V0=U0(()=>a9(x0(),s)),L0=()=>u0(V0().tone),g0=()=>C0()?z.focusAccent:R()?z.primary:void 0,z1=()=>C0()||R()?"\u258C":" ";return(()=>{var Z1=W("box"),n0=W("box"),u1=W("box"),N0=W("text"),m1=W("box"),m=W("text"),R0=W("text"),V1=W("box"),R1=W("text"),H1=W("box"),n=W("text");return D(Z1,n0),q(Z1,"flexDirection","column"),q(Z1,"gap",0),q(Z1,"paddingBottom",1),D(n0,u1),D(n0,V1),lY((z0)=>{F0.set(j0,z0),N1(()=>{if(F0.get(j0)===z0)F0.delete(j0)})},n0),q(n0,"flexDirection","column"),q(n0,"gap",0),q(n0,"onMouseUp",()=>{if(J.onSelect(Y0.id),J.activateOnClick)J.onActivate?.(Y0.id)}),q(n0,"onMouseOver",(z0)=>w0({task:Y0,x:z0.x,y:z0.y})),q(n0,"onMouseOut",()=>w0((z0)=>z0?.task.id===Y0.id?null:z0)),D(u1,N0),D(u1,m1),q(u1,"flexDirection","row"),q(u1,"gap",0),q(N0,"wrapMode","none"),U(N0,z1),D(m1,m),D(m1,R0),q(m1,"flexDirection","row"),q(m1,"flexGrow",1),q(m1,"paddingRight",1),q(m1,"gap",0),q(m,"wrapMode","none"),U(m,()=>V0().stateGlyph),q(R0,"wrapMode","none"),q(R0,"flexGrow",1),U(R0,()=>l9(V0().titleText,h())),U(m1,b(X0,{get when(){return T0(()=>!!J.moveMode?.())()&&C0()},get children(){var z0=W("text");return q(z0,"wrapMode","none"),U(z0,()=>M("tasks.moveChip")),x((I0)=>q(z0,"fg",z.warning,I0)),z0}}),null),D(V1,R1),D(V1,H1),q(V1,"flexDirection","row"),q(V1,"gap",0),q(R1,"wrapMode","none"),U(R1,z1),D(H1,n),q(H1,"flexDirection","row"),q(H1,"flexGrow",1),q(H1,"paddingLeft",2),q(H1,"paddingRight",1),q(H1,"gap",1),q(n,"wrapMode","none"),q(n,"flexGrow",1),U(n,()=>V0().subtitleText),U(H1,b(X0,{get when(){return Y0.pinned===!0},get children(){var z0=W("text");return D(z0,E0("\u25B4")),q(z0,"wrapMode","none"),x((I0)=>q(z0,"fg",z.warning,I0)),z0}}),null),U(H1,b(X0,{get when(){return o3(Y0)},children:(z0)=>(()=>{var I0=W("text");return q(I0,"wrapMode","none"),U(I0,()=>z0().glyph),x((k0)=>q(I0,"fg",u0(z0().tone),k0)),I0})()}),null),U(H1,b(X0,{get when(){return D0().added>0},get children(){var z0=W("text"),I0=E0("+");return D(z0,I0),q(z0,"wrapMode","none"),U(z0,()=>D0().added,null),x((k0)=>q(z0,"fg",z.success,k0)),z0}}),null),U(H1,b(X0,{get when(){return D0().deleted>0},get children(){var z0=W("text"),I0=E0("\u2212");return D(z0,I0),q(z0,"wrapMode","none"),U(z0,()=>D0().deleted,null),x((k0)=>q(z0,"fg",z.error,k0)),z0}}),null),x((z0)=>{var I0=C0()?z.backgroundElement:void 0,k0=g0(),WJ=L0(),MJ=E1.BOLD,XJ=z.text,nJ=R()||C0()?E1.BOLD:void 0,mz=g0(),RJ=z.textMuted,cz=E1.DIM;return I0!==z0.e&&(z0.e=q(n0,"backgroundColor",I0,z0.e)),k0!==z0.t&&(z0.t=q(N0,"fg",k0,z0.t)),WJ!==z0.a&&(z0.a=q(m,"fg",WJ,z0.a)),MJ!==z0.o&&(z0.o=q(m,"attributes",MJ,z0.o)),XJ!==z0.i&&(z0.i=q(R0,"fg",XJ,z0.i)),nJ!==z0.n&&(z0.n=q(R0,"attributes",nJ,z0.n)),mz!==z0.s&&(z0.s=q(R1,"fg",mz,z0.s)),RJ!==z0.h&&(z0.h=q(n,"fg",RJ,z0.h)),cz!==z0.r&&(z0.r=q(n,"attributes",cz,z0.r)),z0},{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}),Z1})()}}),null),U(g1,b(X0,{get when(){return r().length===0},get children(){var e=W("box"),Y0=W("text");return D(e,Y0),q(e,"paddingTop",1),q(e,"paddingLeft",1),U(Y0,(()=>{var j0=T0(()=>!!(X()&&f().trim().length>0));return()=>j0()?M("tasks.empty.noMatchSearch"):T0(()=>!!l())()?T0(()=>Z()==="active")()?M("tasks.empty.noActiveProject"):M("tasks.empty.noArchivedProject"):T0(()=>Z()==="active")()?M("tasks.empty.noActive"):M("tasks.empty.noArchived")})()),x((j0)=>q(Y0,"fg",z.textMuted,j0)),e}}),null),U(g1,b(X0,{get when(){return T0(()=>!!(l()&&r().length>0&&!k()))()&&!(X()&&f().trim().length>0)},get children(){var e=W("box"),Y0=W("text");return D(e,Y0),q(e,"paddingTop",1),q(e,"paddingLeft",1),q(Y0,"wrapMode","none"),U(Y0,(()=>{var j0=T0(()=>Z()==="active");return()=>j0()?M("tasks.empty.noActiveProject"):M("tasks.empty.noArchivedProject")})()),x((j0)=>{var C0=z.textMuted,R=E1.DIM;return C0!==j0.e&&(j0.e=q(Y0,"fg",C0,j0.e)),R!==j0.t&&(j0.t=q(Y0,"attributes",R,j0.t)),j0},{e:void 0,t:void 0}),e}}),null),U(g1,b(X0,{get when(){return T0(()=>Z()==="archived")()&&r().length>0},get children(){var e=W("box"),Y0=W("text");return D(e,Y0),q(e,"paddingTop",1),q(e,"paddingLeft",1),q(Y0,"wrapMode","none"),U(Y0,()=>M("tasks.archiveHint")),x((j0)=>{var C0=z.textMuted,R=E1.DIM;return C0!==j0.e&&(j0.e=q(Y0,"fg",C0,j0.e)),R!==j0.t&&(j0.t=q(Y0,"attributes",R,j0.t)),j0},{e:void 0,t:void 0}),e}}),null),U(d,b(X0,{get when(){return J.zenActive?.()},get children(){var e=W("box"),Y0=W("text");return D(e,Y0),q(e,"flexShrink",0),q(e,"paddingLeft",1),q(e,"paddingRight",1),q(e,"paddingTop",1),D(Y0,E0("\u262F ZEN")),q(Y0,"wrapMode","none"),x((j0)=>{var C0=z.accent,R=E1.BOLD;return C0!==j0.e&&(j0.e=q(Y0,"fg",C0,j0.e)),R!==j0.t&&(j0.t=q(Y0,"attributes",R,j0.t)),j0},{e:void 0,t:void 0}),e}}),null),U(d,b(X0,{get when(){return b0()},children:(e)=>{let Y0=U0(()=>{let V0=e().task,L0=[];if(L0.push({text:V0.kind==="main"?gz(V0.repo):V0.title,bold:!0}),V0.branch.length>0)L0.push({text:`\u2387 ${V0.branch}`});if(V0.worktreePath.length>0)L0.push({text:V0.worktreePath,dim:!0});return L0}),j0=72,C0=U0(()=>Math.min(68,Math.max(...Y0().map((V0)=>Iu(V0.text))))),R=U0(()=>C0()+4),h0=U0(()=>Y0().length+2),D0=U0(()=>Math.max(0,Math.min(e().x+2,q0().width-R()-1))),x0=U0(()=>Math.max(0,Math.min(e().y+1,q0().height-h0()-1)));return(()=>{var V0=W("box");return q(V0,"position","absolute"),q(V0,"zIndex",2600),q(V0,"flexDirection","column"),q(V0,"border",!0),q(V0,"paddingLeft",1),q(V0,"paddingRight",1),U(V0,b(Q1,{get each(){return Y0()},children:(L0)=>(()=>{var g0=W("text");return q(g0,"wrapMode","none"),U(g0,(()=>{var z1=T0(()=>!!L0.dim);return()=>z1()?yu(L0.text,C0()):i9(L0.text,C0())})()),x((z1)=>{var Z1=L0.dim?z.textMuted:z.text,n0=L0.bold?E1.BOLD:L0.dim?E1.DIM:void 0;return Z1!==z1.e&&(z1.e=q(g0,"fg",Z1,z1.e)),n0!==z1.t&&(z1.t=q(g0,"attributes",n0,z1.t)),z1},{e:void 0,t:void 0}),g0})()})),x((L0)=>{var g0=D0(),z1=x0(),Z1=R(),n0=z.focusAccent,u1=z.backgroundElement;return g0!==L0.e&&(L0.e=q(V0,"left",g0,L0.e)),z1!==L0.t&&(L0.t=q(V0,"top",z1,L0.t)),Z1!==L0.a&&(L0.a=q(V0,"width",Z1,L0.a)),n0!==L0.o&&(L0.o=q(V0,"borderColor",n0,L0.o)),u1!==L0.i&&(L0.i=q(V0,"backgroundColor",u1,L0.i)),L0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),V0})()}}),null),x((e)=>{var Y0=Y()?z.focusAccent:z.textMuted,j0=E1.BOLD,C0=z.textMuted,R=E1.DIM;return Y0!==e.e&&(e.e=q(s0,"fg",Y0,e.e)),j0!==e.t&&(e.t=q(s0,"attributes",j0,e.t)),C0!==e.a&&(e.a=q(e0,"fg",C0,e.a)),R!==e.o&&(e.o=q(e0,"attributes",R,e.o)),e},{e:void 0,t:void 0,a:void 0,o:void 0}),d})()}var JM=32,KQ,bu=2000,Su=16;var ZM=N(()=>{w();w();w();w();w();w();w();w();w();GJ();w();j1();v1();v1();$3();OH();_3();s3();SG();e3();KQ=[{view:"active"},{view:"archived"}]});var fM={};B1(fM,{startTasksPane:()=>wu,legendRowCap:()=>qM,legendCap:()=>QM});import{existsSync as GM}from"fs";import{stat as Tu}from"fs/promises";import{TextAttributes as NH}from"@opentui/core";function r9(J){return!!J&&Mq(J)}function XM(J){let z=J instanceof Error?J.message:String(J);if(/not a git repository/i.test(z))return M("tasks.toast.worktreeErrorNotGit");return M("tasks.toast.worktreeErrorGeneric",{message:z})}function xu(J){let{theme:z}=d0(),Y=c1(),Z=aG(),G=KH(),[X,Q]=p(J.tasks().some((v)=>v.id===J.initialTaskId)?J.initialTaskId:J.tasks()[0]?.id??null);function f(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"),[A,F]=p(typeof L==="string"&&L.length>0?L:null),g=(v)=>{F(v),Z.set("tasksPane.projectFilter",v)},[u,s]=p(null),[S,O]=p(!1);{let v=process.env.TMUX_PANE;if(v){let M0=()=>{l0(["show-options","-wqv","-t",v,RY]).then(({code:F0,stdout:a0})=>{O(F0===0&&a0.trim().length>0)})};M0();let Z0=setInterval(M0,1000);N1(()=>clearInterval(Z0))}}let C=Pz(),y=!J.initialTaskId;Y1(()=>{let v=J.orch?.activeTaskSignal()();if(!v)return;if(!y){if(v!==J.initialTaskId)return;y=!0}Q(v)}),Y1(SJ(()=>J.orch?.uiPrefsSignal()(),(v)=>{if(v&&v.sortMode!==_1(j))K(v.sortMode);if(v&&v.projectFilter!==_1(A))F(v.projectFilter)})),Y1(()=>{let v=J.orch?.updateSignal()();if(v)s(v)});let a={orch:J.orch,tasks:()=>J.tasks(),confirm:async(v)=>await KY.show(Y,v.title,v.body,v.cancelLabel,v.confirmLabel)===!0,promptText:(v,M0)=>VY.show(Y,v,M0),logger:console,logPrefix:"[kobe tasks]",notifyError:f,notifyInfo:H,reload:()=>J.reload(),switchBeforeKill:!0,updateActiveTask:!0,onTaskDeleted:(v,M0)=>{if(X()!==v)return;let Z0=J.tasks();Q(M0?.id??(Z0.find((F0)=>!F0.archived)??Z0[0])?.id??null)},promptNewTask:(v,M0,Z0)=>qH.show(Y,v,M0,Z0),cursorRepo:()=>{let v=J.tasks();return(v.find((M0)=>M0.id===X())??v[0])?.repo},lastVendor:()=>dz(S1("lastSelectedVendor"),lz()),rememberVendor:(v)=>r1("lastSelectedVendor",v),openCreateSurface:async(v)=>{if(kZ(Z.get(GY,NZ))!=="chattab")return!1;let Z0=await yJ();if(!Z0)return!1;return await Rf(Z0,v),!0},selectTask:(v)=>Q(v),enterTask:(v)=>H0(v)};async function l(){await P3(a)}async function t(){if(kZ(Z.get(GY,NZ))==="chattab"){let Z0=await yJ();if(Z0){await Of(Z0);return}}if(!(await dZ.show(Y,Z,J.orch??void 0)).visualPrefsChanged)return;if(!Z.flush())return;try{let Z0=await yJ();if(Z0)await NG(Z0)}catch(Z0){console.error("[kobe tasks] failed to refresh workspace panes:",Z0)}}async function J0(){let v=await yJ();if(v){await Af(v);return}pG.show(Y)}async function T(){if(!u()?.hasUpdate){H(M("tasks.toast.alreadyLatest",{version:t0}));return}let M0=await yJ();if(!M0)return;await gf(M0)}async function Q0(v){await T3(a,v)}async function r(v){await u3(a,v)}async function W0(v){await x3(a,v)}async function O0(v){await E3(a,v)}async function K0(v){await w3(a,v)}async function _(v){let Z0=J.tasks().find((a0)=>a0.id===v)?.worktreePath;if(!Z0||!GM(Z0)){if(!J.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),f(M("tasks.toast.noDaemonWorktree"));return}try{Z0=await J.orch.ensureWorktree(v)}catch(a0){console.error("[kobe tasks] task.ensureWorktree failed:",a0),f(XM(a0));return}await J.reload()}if(!Z0||!GM(Z0))return;let F0=v3();if(!F0){console.error("[kobe tasks] no editor/opener found; set KOBE_OPEN_EDITOR"),f(M("tasks.toast.noEditor"));return}if(!m3(Z0,F0))console.error(`[kobe tasks] failed to open worktree with ${F0.label}`),f(M("tasks.toast.openWorktreeFailed",{label:F0.label}))}async function P(){if(!process.env.TMUX_PANE)return;let v=await yJ();if(!v)return;let M0=await qG(v);if(!M0)return;await P0(["select-pane","-t",M0])}async function k(v,M0){let Z0=J.tasks().find((F0)=>F0.id===v);if(!Z0||Z0.kind==="main"||!J.orch)return;try{await J.orch.moveTask(v,M0)}catch(F0){console.error("[kobe tasks] task.move failed:",F0),f(M("tasks.toast.moveTaskFailed",{message:F0 instanceof Error?F0.message:String(F0)}));return}Q(v),await J.reload()}let[o,I]=p(Z.get("tasksPane.keysCollapsed",!1)===!0),h=(v)=>{I(v),Z.set("tasksPane.keysCollapsed",v)};Y1(SJ(()=>J.orch?.uiPrefsSignal()(),(v)=>{if(v&&v.keysCollapsed!==_1(o))I(v.keysCollapsed)}));let[G0,q0]=p(!1);D1(()=>({enabled:Y.stack.length===0&&!G0(),bindings:_Y({"help.open":()=>void J0(),"task.new":()=>void l(),"settings.open.sidebar":()=>void t(),"tasks.update":()=>void T(),"tasks.openWorktree":()=>{let v=X();if(v)_(v)},"tasks.renameBranch":()=>{let v=X();if(v)O0(v)},"tasks.cycleEngine":()=>{let v=X();if(v)K0(v)},"tasks.toggleKeys":()=>h(!o()),"tasks.focusEngine":()=>void P().catch((v)=>console.error("[kobe tasks] focus engine pane failed:",v))})}));async function H0(v){let M0=M1(v),Z0=J.tasks().find((d)=>d.id===v),F0=await yJ();if(F0&&F0!==M0)await hX(F0);if(await W1(M0)){let d=await MZ(M0,"@kobe_worktree")||Z0?.worktreePath||"";if(r9(d)){let f0=Z0?.repo?XY(Z0.repo,d,{kind:"repo-init"}):void 0;await vY({name:M0,cwd:d,command:TJ(Z0?.vendor),taskId:v,vendor:Z0?.vendor,repo:Z0?.repo,launchInit:f0})}await kf(M0),await P0(["switch-client","-t",`=${M0}`]),J.orch?.setActiveTask(v).catch(()=>{});return}let r0=Z0?.worktreePath;if(!r9(r0)){if(!J.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),f(M("tasks.toast.noDaemonOpen"));return}try{r0=await J.orch.ensureWorktree(v)}catch(d){console.error("[kobe tasks] task.ensureWorktree failed:",d),f(XM(d));return}await J.reload()}if(!r9(r0))return;let u0=Z0?.repo?XY(Z0.repo,r0,{kind:"repo-init"}):void 0;if(!await vY({name:M0,cwd:r0,command:TJ(Z0?.vendor),taskId:v,vendor:Z0?.vendor,repo:Z0?.repo,launchInit:u0})){console.error(`[kobe tasks] failed to start session ${M0}`),f(M("tasks.toast.sessionStartFailed"));return}await kf(M0),await P0(["switch-client","-t",`=${M0}`]),J.orch?.setActiveTask(v).catch(()=>{})}let b0=U0(()=>{let v=u();if(v?.hasUpdate)return{label:`v${v.latest} \u2191`,emphasize:!0};return{label:`v${t0}`,emphasize:!1}}),w0=()=>J.orch?.daemonStaleSignal()()??!1,y0=()=>J.orch?.daemonVersionSignal()()??null,p0=U0(()=>J.tasks().find((v)=>v.id===X())?.kind==="main");return(()=>{var v=W("box"),M0=W("box");return D(v,M0),q(v,"flexDirection","column"),q(v,"flexGrow",1),U(v,b(S3,{stale:w0,daemonVersion:y0,clientVersion:t0,width:()=>C().width}),M0),q(M0,"flexGrow",1),q(M0,"flexShrink",1),U(M0,b(YM,{get tasks(){return J.tasks},selectedId:X,onSelect:Q,onActivate:(Z0)=>void H0(Z0),activateOnClick:!0,headerStatus:b0,onHeaderStatusClick:()=>void T(),onAddTask:()=>void l(),zenActive:S,width:()=>C().width,get engineState(){return T0(()=>!!J.orch)()?J.orch.engineStateSignal():void 0},get taskJobs(){return T0(()=>!!J.orch)()?J.orch.taskJobsSignal():void 0},get worktreeChanges(){return J.orch?()=>{let Z0=J.orch;if(!Z0||Z0.connectionStateSignal()()!=="online")return null;return Z0.worktreeChangesSignal()()}:void 0},onRenameRequest:(Z0)=>void W0(Z0),onDeleteRequest:(Z0)=>void r(Z0),onArchiveRequest:(Z0)=>void Q0(Z0),onLocalMergeRequest:(Z0)=>{let F0=J.tasks().find((a0)=>a0.id===Z0);if(!F0||F0.kind==="main")return;Q(Z0),V((a0)=>!a0)},moveMode:B,onMoveRequest:(Z0,F0)=>void k(Z0,F0),onMoveModeExit:()=>V(!1),sortMode:j,projectFilter:A,onProjectFilterChange:g,onSortModeToggle:()=>{let Z0=j()==="default"?"recent":"default";K(Z0),Z.set("activeSortMode",Z0)},focused:()=>Y.stack.length===0,onSearchActiveChange:q0})),U(v,b(Eu,{moveMode:B,selectedIsMain:p0,collapsed:o,onToggleCollapsed:()=>h(!o())}),null),x((Z0)=>q(v,"backgroundColor",z.background,Z0)),v})()}function QM(J){let z=O9(J);if(!z)return null;let Y=z.hint?.keys??z.keys[0];return Y&&Y.length>0?Y:null}function qM(J){let z=J.map(QM).filter((Y)=>Y!==null);return z.length>0?z.join("/"):null}function Eu(J){let{theme:z}=d0(),[Y,Z]=p("Prefix");JJ(()=>{l0(["show-options","-g","prefix"]).then(({code:K,stdout:L})=>{if(K!==0)return;let A=RH(L);if(A)Z(A)})});let G=()=>{F9();let K=Jf(),L=K.binds,A=[],F=K.focus.filter((u)=>u!==null).map((u)=>u.chord);if(F.length===4&&F.every((u,s)=>u===EY[s]))A.push({k:"ctrl+hjkl",label:M("tasks.hints.movePanes")});else if(F.length>0)A.push({k:F[0],label:M("tasks.hints.movePanes")});let g=(u,s)=>{let S=s.map((O)=>L[O]?.chord).filter((O)=>!!O);if(S.length>0)A.push({k:`prefix ${S.join("/")}`,label:u})};if(L["tmux.detach"])A.push({k:L["tmux.detach"].chord,label:M("tasks.hints.detach")});return g(M("tasks.hints.splits"),["tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"]),g(M("tasks.hints.panes"),["tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle"]),A},X=()=>{F9();let K=[{ids:["help.open"],label:M("tasks.hints.fullHelp")},{ids:["task.new"],label:M("tasks.hints.newTask")},{ids:["settings.open.sidebar"],label:M("tasks.hints.settings")},{ids:["sidebar.select"],label:M("tasks.hints.open")},{ids:["tasks.focusEngine"],label:M("tasks.hints.focusEngine")},{ids:["tasks.openWorktree"],label:M("tasks.hints.openWorktree")},{ids:["sidebar.delete"],label:M("tasks.hints.delete")},{ids:["sidebar.view"],label:M("tasks.hints.views")},{ids:["sidebar.projectFilter"],label:M("tasks.hints.project")}],L=[];for(let A of K){let F=qM(A.ids);if(F===null)continue;L.push({k:F,label:A.label,dimWhenMain:A.dimWhenMain})}return L.push(...G()),L},Q=()=>[{k:"j/k",label:M("tasks.hints.reorder")},{k:"enter/esc",label:M("tasks.hints.done")}],f=()=>J.moveMode?.()?Q():X(),H=18,B=()=>Math.min(H,Math.max(...f().map((K)=>K.label.length))),V=(K)=>K.length<=B()?K:`${K.slice(0,Math.max(0,B()-1))}\u2026`,j=()=>(J.collapsed?.()??!1)&&!(J.moveMode?.()??!1);return(()=>{var K=W("box"),L=W("text");return D(K,L),q(K,"flexShrink",0),q(K,"flexDirection","column"),q(K,"paddingLeft",1),q(K,"paddingRight",1),q(K,"paddingTop",1),q(K,"paddingBottom",1),q(K,"gap",0),q(L,"wrapMode","none"),q(L,"onMouseUp",()=>J.onToggleCollapsed?.()),U(L,(()=>{var A=T0(()=>!!j());return()=>A()?M("tasks.hints.headerFolded"):M("tasks.hints.headerUnfolded")})()),U(K,b(X0,{get when(){return!j()},get children(){return b(Q1,{get each(){return f()},children:(A)=>{let F=()=>A.dimWhenMain===!0&&(J.selectedIsMain?.()??!1);return(()=>{var g=W("box"),u=W("box"),s=W("text"),S=E0("["),O=E0("]"),C=W("box"),y=W("text");return D(g,u),D(g,C),q(g,"flexDirection","row"),q(g,"gap",1),q(g,"justifyContent","space-between"),D(u,s),q(u,"width",10),q(u,"flexShrink",0),D(s,S),D(s,O),q(s,"wrapMode","none"),U(s,()=>_G(A.k,Y()),O),D(C,y),q(C,"flexShrink",0),q(y,"wrapMode","none"),U(y,()=>V(A.label)),x((a)=>{var l=F()?z.textMuted:z.accent,t=F()?NH.DIM:NH.BOLD,J0=B(),T=z.textMuted,Q0=F()?NH.DIM:void 0;return l!==a.e&&(a.e=q(s,"fg",l,a.e)),t!==a.t&&(a.t=q(s,"attributes",t,a.t)),J0!==a.a&&(a.a=q(C,"width",J0,a.a)),T!==a.o&&(a.o=q(y,"fg",T,a.o)),Q0!==a.i&&(a.i=q(y,"attributes",Q0,a.i)),a},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),g})()}})}}),null),x((A)=>{var F=z.textMuted,g=NH.DIM;return F!==A.e&&(A.e=q(L,"fg",F,A.e)),g!==A.t&&(A.t=q(L,"attributes",g,A.t)),A},{e:void 0,t:void 0}),K})()}async function wu(J={}){await AJ({logContext:"tasks",providers:{notifications:!0},setup:()=>Pu(J)})}async function Pu(J){let z=new uG({homeDir:Nz()});await z.load();let[Y,Z]=p(z.list()),G=null;try{let B=await eJ();if(B){let V=new DJ(B);await V.init(),G=V}else rz("tasks-boot","no daemon running \u2014 polling tasks.json (a gui owns daemon lifecycle)")}catch(B){o1("tasks-boot",B),rz("tasks-boot","daemon subscribe failed \u2014 polling tasks.json")}let X=()=>G&&G.connectionStateSignal()()==="online"?G.tasksSignal()():Y(),Q=async()=>{await z.load(),Z(z.list())},f="",H=setInterval(()=>{if(G&&G.connectionStateSignal()()==="online")return;(async()=>{let B="missing";try{let V=await Tu(z.filePath);B=`${V.mtimeMs}:${V.size}`}catch{}if(B===f)return;f=B,await Q()})().catch(()=>{})},uu);return{root:()=>[b(xu,{tasks:X,get initialTaskId(){return J.initialTaskId},orch:G,reload:Q}),b(k3,{})],onDestroy:()=>{if(H)clearInterval(H);G?.dispose()}}}var uu=1500;var HM=N(()=>{w();w();w();w();w();w();w();w();P1();fz();GJ();w();XZ();OJ();j1();$Y();hJ();p1();jz();iX();OG();O1();zf();t1();FJ();T9();lG();u9();c9();b3();I3();$G();HQ();UH();v1();y9();rY();uJ();h3();c3();ZM();fJ();dJ();x9()});var BM={};B1(BM,{startSettingsHost:()=>vu});function hu(J){let z=aG(),Y=c1(),{theme:Z}=d0(),G=!1,X=!1;async function Q(){if(X)return;X=!0;try{if(z.flush()&&G){let H=await yJ();if(H)await NG(H)}}catch(f){console.error("[kobe settings] failed to refresh workspace panes:",f)}finally{process.exit(0)}}return D1(()=>({enabled:Y.stack.length===0,bindings:[{key:"escape",cmd:Q},{key:"q",cmd:Q},{key:"ctrl+c",cmd:Q}]})),(()=>{var f=W("scrollbox");return q(f,"flexGrow",1),q(f,"paddingTop",1),q(f,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),U(f,b(dZ,{kv:z,get orchestrator(){return J.orchestrator??void 0},standalone:!0,onVisualPrefsChange:()=>{G=!0},onClose:Q})),x((H)=>q(f,"backgroundColor",Z.background,H)),f})()}async function vu(){await AJ({setup:async()=>{let J=null;try{let z=await eJ();if(z){let Y=new DJ(z);await Y.init(),J=Y}else console.error("[kobe settings] no daemon running; Restart backend disabled")}catch(z){console.error("[kobe settings] daemon unavailable; Restart backend disabled:",z)}return{root:()=>b(hu,{orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var jM=N(()=>{w();w();w();w();w();w();OJ();$Y();c9();HQ();v1();rY();uJ();fJ();dJ()});var WM={};B1(WM,{startHelpHost:()=>cu});function mu(){let J=c1(),{theme:z}=d0();function Y(){process.exit(0)}return D1(()=>({enabled:J.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 q(Z,"flexGrow",1),q(Z,"paddingTop",1),U(Z,b(pG,{onClose:Y})),x((G)=>q(Z,"backgroundColor",z.background,G)),Z})()}async function cu(){await AJ({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(mu,{})})})}var VM=N(()=>{w();w();w();w();w();T9();v1();rY();uJ();dJ()});var KM={};B1(KM,{startUpdateHost:()=>_u});import{spawn as du,spawnSync as nu}from"child_process";import{TextAttributes as oG}from"@opentui/core";function iu(J){if(!J)return!1;let z=process.platform,[Y,Z]=z==="darwin"?["open",[J]]:z==="win32"?["cmd",["/c","start","",J]]:["xdg-open",[J]];try{return du(Y,Z,{stdio:"ignore",detached:!0}).unref(),!0}catch{return!1}}function lu(J){return J.replace(/\r\n/g,`
266
266
  `).split(`
267
- `).map((Y)=>Y.trim()).filter(Boolean)}function PI(){if(!process.stdin.isTTY)return Promise.resolve();return new Promise((f)=>{let Y=process.stdin,J=()=>{Y.off("data",J),Y.setRawMode?.(!1),Y.pause(),f()};Y.setRawMode?.(!0),Y.resume(),Y.once("data",J)})}function vI(){let{theme:f}=n0(),Y=Xf(),[J,z]=p(null),[Z,G]=p([]),[Q,q]=p(!0),[H,B]=p("update"),[V,j]=p(null),K=K0(()=>J()?.latest??t0),L=K0(()=>Z()[0]?.url??VH(K())),O=K0(()=>[{id:"update",key:"U",label:F("update.actions.updateNow"),detail:vY},{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")}]);r1(()=>{M()});async function M(){let b=await dZ({force:!0});z(b);let g=b?.latest??t0,C=await WH({current:t0,latest:g});G(C),q(!1)}function R(b){let g=O().map((r)=>r.id),y=(g.indexOf(H())+b+g.length)%g.length;B(g[y]??"update")}function S(b=H()){if(b==="close")process.exit(0);if(b==="release"){j(wI(L())?F("update.statusReleaseOpened"):F("update.statusReleaseError"));return}a()}async function a(){j(F("update.statusRunningUpdater")),await new Promise((C)=>setTimeout(C,30)),Y?.destroy(),process.stdout.write(`
267
+ `).map((z)=>z.trim()).filter(Boolean)}function $u(){if(!process.stdin.isTTY)return Promise.resolve();return new Promise((J)=>{let z=process.stdin,Y=()=>{z.off("data",Y),z.setRawMode?.(!1),z.pause(),J()};z.setRawMode?.(!0),z.resume(),z.once("data",Y)})}function au(){let{theme:J}=d0(),z=HJ(),[Y,Z]=p(null),[G,X]=p([]),[Q,f]=p(!0),[H,B]=p("update"),[V,j]=p(null),K=U0(()=>Y()?.latest??t0),L=U0(()=>G()[0]?.url??wH(K())),A=U0(()=>[{id:"update",key:"U",label:M("update.actions.updateNow"),detail:nz},{id:"release",key:"R",label:M("update.actions.openRelease"),detail:L()??M("update.releaseUrlUnavailable")},{id:"close",key:"Q",label:M("update.actions.close"),detail:M("update.actions.closeDetail")}]);JJ(()=>{F()});async function F(){let S=await sG({force:!0});Z(S);let O=S?.latest??t0,C=await EH({current:t0,latest:O});X(C),f(!1)}function g(S){let O=A().map((a)=>a.id),y=(O.indexOf(H())+S+O.length)%O.length;B(O[y]??"update")}function u(S=H()){if(S==="close")process.exit(0);if(S==="release"){j(iu(L())?M("update.statusReleaseOpened"):M("update.statusReleaseError"));return}s()}async function s(){j(M("update.statusRunningUpdater")),await new Promise((C)=>setTimeout(C,30)),z?.destroy(),process.stdout.write(`
268
268
  kobe ${t0} -> latest
269
- `),process.stdout.write(`running: ${vY}
269
+ `),process.stdout.write(`running: ${nz}
270
270
 
271
- `);let b=xI("sh",["-c",vY],{stdio:"inherit"}),g=b.status??(b.error?1:0);if(b.error)process.stderr.write(`
272
- kobe update: failed to start updater: ${b.error.message}
273
- `);process.stdout.write(g===0?`
274
- ${F("update.updateComplete")}
271
+ `);let S=nu("sh",["-c",nz],{stdio:"inherit"}),O=S.status??(S.error?1:0);if(S.error)process.stderr.write(`
272
+ kobe update: failed to start updater: ${S.error.message}
273
+ `);process.stdout.write(O===0?`
274
+ ${M("update.updateComplete")}
275
275
  `:`
276
- ${F("update.updateFailed",{code:String(g)})}
277
- `),process.stdout.write(F("update.pressAnyKey")),await PI(),process.exit(g)}return U1(()=>({bindings:[{key:"up",cmd:()=>R(-1)},{key:"down",cmd:()=>R(1)},{key:"k",cmd:()=>R(-1)},{key:"j",cmd:()=>R(1)},{key:"return",cmd:()=>S()},{key:"u",cmd:()=>S("update")},{key:"r",cmd:()=>S("release")},{key:"q",cmd:()=>S("close")},{key:"escape",cmd:()=>S("close")},{key:"ctrl+c",cmd:()=>S("close")}]})),(()=>{var b=W("box"),g=W("box"),C=W("text"),y=W("text"),r=W("box"),z0=W("text"),t=W("text"),J0=x0("v"),T=W("text"),B0=W("text"),_=x0("v"),D0=W("box"),R0=W("box"),$=W("text"),x=W("scrollbox"),e=W("box");return D(b,g),D(b,r),D(b,D0),D(b,R0),D(b,x),X(b,"flexDirection","column"),X(b,"flexGrow",1),X(b,"paddingTop",1),X(b,"paddingLeft",2),X(b,"paddingRight",2),D(g,C),D(g,y),X(g,"flexDirection","row"),X(g,"justifyContent","space-between"),X(g,"flexShrink",0),X(C,"wrapMode","none"),U(C,()=>F("update.pageTitle")),D(y,x0("q / esc")),X(y,"wrapMode","none"),X(y,"onMouseUp",()=>S("close")),D(r,z0),D(r,t),D(r,T),D(r,B0),X(r,"flexDirection","row"),X(r,"gap",2),X(r,"flexShrink",0),X(r,"paddingTop",1),X(z0,"wrapMode","none"),U(z0,()=>F("update.current")),D(t,J0),X(t,"wrapMode","none"),U(t,t0,null),X(T,"wrapMode","none"),U(T,()=>F("update.latest")),D(B0,_),X(B0,"wrapMode","none"),U(B0,K,null),X(D0,"flexDirection","column"),X(D0,"flexShrink",0),X(D0,"paddingTop",1),X(D0,"gap",0),U(D0,k(X1,{get each(){return O()},children:(I)=>(()=>{var Z0=W("box"),u=W("box"),P=W("text"),X0=x0("["),V0=x0("]"),q0=W("box"),k0=W("text"),w0=W("text");return D(Z0,u),D(Z0,q0),D(Z0,w0),X(Z0,"flexDirection","row"),X(Z0,"gap",1),X(Z0,"paddingLeft",1),X(Z0,"paddingRight",1),X(Z0,"onMouseUp",()=>S(I.id)),D(u,P),X(u,"width",4),X(u,"flexShrink",0),D(P,X0),D(P,V0),X(P,"wrapMode","none"),U(P,()=>I.key,V0),D(q0,k0),X(q0,"width",14),X(q0,"flexShrink",0),X(k0,"wrapMode","none"),U(k0,()=>I.label),X(w0,"wrapMode","word"),U(w0,()=>I.detail),E((I0)=>{var _0=H()===I.id?f.primary:void 0,v=H()===I.id?f.selectedListItemText:f.accent,M0=nZ.BOLD,Y0=H()===I.id?f.selectedListItemText:f.text,F0=H()===I.id?f.selectedListItemText:f.textMuted;return _0!==I0.e&&(I0.e=X(Z0,"backgroundColor",_0,I0.e)),v!==I0.t&&(I0.t=X(P,"fg",v,I0.t)),M0!==I0.a&&(I0.a=X(P,"attributes",M0,I0.a)),Y0!==I0.o&&(I0.o=X(k0,"fg",Y0,I0.o)),F0!==I0.i&&(I0.i=X(w0,"fg",F0,I0.i)),I0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),Z0})()})),U(b,k(G0,{get when(){return V()},get children(){var I=W("text");return X(I,"wrapMode","word"),U(I,V),E((Z0)=>X(I,"fg",f.info,Z0)),I}}),R0),D(R0,$),X(R0,"flexShrink",0),X(R0,"paddingTop",1),X($,"wrapMode","none"),U($,()=>F("update.changesSectionHeader",{from:t0,to:K()})),D(x,e),X(x,"flexGrow",1),X(x,"flexShrink",1),X(x,"stickyScroll",!1),X(e,"flexDirection","column"),X(e,"paddingRight",1),X(e,"paddingBottom",1),X(e,"gap",0),U(e,k(G0,{get when(){return Q()},get children(){var I=W("text");return U(I,()=>F("update.loadingNotes")),E((Z0)=>X(I,"fg",f.textMuted,Z0)),I}}),null),U(e,k(G0,{get when(){return T0(()=>!Q())()&&Z().length===0},get children(){var I=W("text");return X(I,"wrapMode","word"),U(I,()=>F("update.notesUnavailable")),E((Z0)=>X(I,"fg",f.textMuted,Z0)),I}}),null),U(e,k(X1,{get each(){return Z()},children:(I)=>(()=>{var Z0=W("box"),u=W("text"),P=x0("v");return D(Z0,u),X(Z0,"flexDirection","column"),X(Z0,"paddingBottom",1),X(Z0,"gap",0),D(u,P),X(u,"wrapMode","none"),U(u,()=>I.version,null),U(Z0,k(X1,{get each(){return hI(I.body)},children:(X0)=>(()=>{var V0=W("text");return X(V0,"wrapMode","word"),U(V0,X0),E((q0)=>X(V0,"fg",f.textMuted,q0)),V0})()}),null),E((X0)=>{var V0=f.text,q0=nZ.BOLD;return V0!==X0.e&&(X0.e=X(u,"fg",V0,X0.e)),q0!==X0.t&&(X0.t=X(u,"attributes",q0,X0.t)),X0},{e:void 0,t:void 0}),Z0})()}),null),E((I)=>{var{background:Z0,text:u}=f,P=nZ.BOLD,X0=f.textMuted,V0=f.textMuted,q0=f.text,k0=nZ.BOLD,w0=f.textMuted,I0=J()?.hasUpdate?f.warning:f.success,_0=nZ.BOLD,v=f.textMuted,M0=nZ.DIM,Y0={trackOptions:{backgroundColor:f.background,foregroundColor:f.borderActive}};return Z0!==I.e&&(I.e=X(b,"backgroundColor",Z0,I.e)),u!==I.t&&(I.t=X(C,"fg",u,I.t)),P!==I.a&&(I.a=X(C,"attributes",P,I.a)),X0!==I.o&&(I.o=X(y,"fg",X0,I.o)),V0!==I.i&&(I.i=X(z0,"fg",V0,I.i)),q0!==I.n&&(I.n=X(t,"fg",q0,I.n)),k0!==I.s&&(I.s=X(t,"attributes",k0,I.s)),w0!==I.h&&(I.h=X(T,"fg",w0,I.h)),I0!==I.r&&(I.r=X(B0,"fg",I0,I.r)),_0!==I.d&&(I.d=X(B0,"attributes",_0,I.d)),v!==I.l&&(I.l=X($,"fg",v,I.l)),M0!==I.u&&(I.u=X($,"attributes",M0,I.u)),Y0!==I.c&&(I.c=X(x,"verticalScrollbarOptions",Y0,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}),b})()}async function mI(){await Mf({setup:()=>({root:()=>k(vI,{})})})}var qM=N(()=>{h();h();h();h();h();h();h();h();h();B1();Df();w1();e1();aJ();Sf()});async function HM(f,Y){if(!Y)return 0;return _1(f).history.latestTranscriptMtimeForWorktree(Y)}var BM=N(()=>{OJ()});function cI(f){return f.trim().split(/\s+/)[0]??""}function WM(f,Y,J,z){let Z=G1(J);if(f==="vim")return{bin:"vim",command:`vim ${Z}`};if(f==="nvim")return{bin:"nvim",command:`nvim ${Z}`};if(f==="nano")return{bin:"nano",command:`nano ${Z}`};if(f==="emacs")return{bin:"emacs",command:`emacs ${Z}`};let G=(Y.trim()||(z??"").trim()).trim();if(!G)return null;let Q=cI(G);if(!Q)return null;let q=G.includes(jM)?G.split(jM).join(Z):`${G} ${Z}`;return{bin:Q,command:q}}function nI(f,Y,J){let z=G1(Y);return["f=$(mktemp 2>/dev/null)",`if [ -n "$f" ] && git show ${G1(`HEAD:./${J}`)} > "$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(`
278
- `)}function dI(f,Y){let J=f.endsWith("/")?f:`${f}/`;return Y.startsWith(J)?Y.slice(J.length):null}async function iI(f){let Y=JZ(k1(eY)),J=k1(kJ)??"",z=(process.env.VISUAL??process.env.EDITOR??"").trim();if(Y!=="auto")return WM(Y,J,f,z);if(z)return WM("custom","",f,z);let Z=G1(f);for(let G of m7)if(await VM(G))return{bin:G,command:`${G} ${Z}`};return null}async function VM(f){try{return await Bun.spawn(["sh","-c",`command -v ${G1(f)} >/dev/null 2>&1`],{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function lI(f,Y){try{return await Bun.spawn(["git","diff","--quiet","HEAD","--",Y],{cwd:f,stdin:"ignore",stdout:"ignore",stderr:"ignore",env:xf()}).exited===1}catch{return!1}}async function KM(f,Y,J){let z=await iI(J);if(!z)return!1;if(!await VM(z.bin))return!1;let Z=await aI(z,Y,J);return await HY(f,{cwd:Y,command:Z,name:$I(J)}),!0}async function aI(f,Y,J){let{bin:z,command:Z}=f;if(z!=="nvim"&&z!=="vim")return Z;if(Z!==`${z} ${G1(J)}`)return Z;let G=dI(Y,J);if(!G)return Z;if(!await lI(Y,G))return Z;return nI(z,J,G)}function $I(f){let Y=f.slice(f.lastIndexOf("/")+1).trim();return Y.length>0?Y:"edit"}var jM="{file}";var UM=N(()=>{yJ();A1();OQ();u1();ZY()});async function ZH(f,Y,J){if(!Y)throw Error("git(): cwd is required");let z=await zZ(Y,f,{signal:J}),Z=z.status??-1;if(Z!==0){let G=(z.stderr??"").trim(),Q=(z.stdout??"").trim();throw Error(`git ${f.join(" ")} (cwd=${Y}) exited with code ${Z}: ${G||Q||"(no output)"}`)}return z.stdout??""}async function M9(f,Y){let z=(await ZH(["ls-files","--cached","--others","--exclude-standard","--full-name"],f,Y)).split(`
279
- `).map((G)=>G.replace(/\r$/,"")),Z=new Set;for(let G of z)if(G.length>0)Z.add(G);return Array.from(Z).sort()}async function F9(f,Y){let J=await ZH(["status","--porcelain","--untracked-files=all"],f,Y),z=FM(J),Z=new Map;try{let G=await ZH(["diff","--no-color","--numstat","HEAD"],f,Y);Z=new Map(DM(G).map((Q)=>[Q.path,{added:Q.added,deleted:Q.deleted}]))}catch{try{let G=await ZH(["diff","--no-color","--numstat","--cached"],f,Y);Z=new Map(DM(G).map((Q)=>[Q.path,{added:Q.added,deleted:Q.deleted}]))}catch{Z=new Map}}return z.map((G)=>{let Q=Z.get(G.path);if(Q)return{...G,added:Q.added,deleted:Q.deleted};return G})}function DM(f){return cK(f).map((Y)=>({path:Y.path,added:Y.added,deleted:Y.deleted}))}function LM(f){let Y={name:"",path:"",isDir:!0,children:[]};for(let J of f){if(!J)continue;let z=J.split("/").filter((G)=>G.length>0);if(z.length===0)continue;let Z=Y;for(let G=0;G<z.length;G++){let Q=z[G],H=G!==z.length-1,B=Z.children.find((V)=>V.name===Q&&V.isDir===H);if(!B)B={name:Q,path:z.slice(0,G+1).join("/"),isDir:H,children:[]},Z.children.push(B);Z=B}}return MM(Y),Y}function MM(f){f.children.sort((Y,J)=>{if(Y.isDir!==J.isDir)return Y.isDir?-1:1;return Y.name.localeCompare(J.name)});for(let Y of f.children)MM(Y)}function FM(f){let Y=[];for(let J of Hq(f)){let z;if(J.x==="?"&&J.y==="?")z="?";else{let G=J.y!==" "?J.y:J.x;if(G==="M"||G==="A"||G==="D"||G==="R"||G==="C"||G==="U")z=G;else continue}let Z=J.path;if(Z.length===0)continue;if(Z.endsWith("/"))continue;Y.push({path:Z,status:z})}return Y}var O9=N(()=>{x8();AQ()});function A9(f){U1(()=>({enabled:f.focused(),bindings:iJ({"files.nav":(Y,J)=>{if((J??0)%2===0)f.moveDown();else f.moveUp()},"files.hierarchy":(Y,J)=>{if((J??0)%2===0)f.collapseOrParent();else f.expandOrDescend()},"files.tab":(Y,J)=>{let z=f.currentTab(),Z=ZX.indexOf(z);if(Z<0)return;let G=(J??0)%2===0?-1:1,Q=ZX[(Z+G+ZX.length)%ZX.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 ZX;var R9=N(()=>{hZ();Sf();ZX=["all","changes"]});import{spawn as OM}from"child_process";import{existsSync as pI}from"fs";import{platform as _I}from"os";function AM(f){if(!f)return;let Y=_I();if(Y==="linux"){if(pI("/proc/sys/fs/binfmt_misc/WSLInterop")||process.env.WSL_DISTRO_NAME){GX("wslview",[f],()=>{let J=OM("wslpath",["-w",f],{stdio:["ignore","pipe","ignore"]}),z="";J.stdout?.on("data",(Z)=>{z+=Z.toString()}),J.on("close",(Z)=>{if(Z===0)GX("explorer.exe",[z.trim()])})});return}GX("xdg-open",[f]);return}if(Y==="darwin"){GX("open",[f]);return}if(Y==="win32"){GX("cmd.exe",["/c","start","",f]);return}}function GX(f,Y,J){try{let z=OM(f,Y,{stdio:"ignore",detached:!0});z.on("error",()=>J?.()),z.unref()}catch{J?.()}}var RM=()=>{};function g9(f,Y,J,z){for(let Z of f.children)if(Z.isDir){let G=Y.has(Z.path);if(z.push({kind:"dir",path:Z.path,name:Z.name,depth:J,expanded:G,hasChildren:Z.children.length>0}),G)g9(Z,Y,J+1,z)}else z.push({kind:"file",path:Z.path,name:Z.name,depth:J})}function gM(f,Y){if(Y<=0)return f;let J=[...f];if(J.length<=Y)return f;return`\u2026${J.slice(J.length-Math.max(0,Y-1)).join("")}`}function CM(f){return f.map((Y)=>({kind:"status",path:Y.path,status:Y.status,added:Y.added,deleted:Y.deleted}))}function rI(f){return`${f.kind}\x00${f.path}`}function oI(f,Y){if(f.kind!==Y.kind||f.path!==Y.path)return!1;switch(f.kind){case"file":{let J=Y;return f.name===J.name&&f.depth===J.depth}case"dir":{let J=Y;return f.name===J.name&&f.depth===J.depth&&f.expanded===J.expanded&&f.hasChildren===J.hasChildren}case"status":{let J=Y;return f.status===J.status&&f.added===J.added&&f.deleted===J.deleted}}}function NM(f,Y){return sq(f,Y,rI,oI)}function bM(f,Y){if(f===Y)return!0;if(f==null||Y==null)return!1;if(f.length!==Y.length)return!1;for(let J=0;J<f.length;J++)if(f[J]!==Y[J])return!1;return!0}function kM(f,Y){if(f===Y)return!0;if(f==null||Y==null)return!1;if(f.length!==Y.length)return!1;for(let J=0;J<f.length;J++){let z=f[J],Z=Y[J];if(z.path!==Z.path||z.status!==Z.status||z.added!==Z.added||z.deleted!==Z.deleted)return!1}return!0}var yM=()=>{};import{watch as sI}from"fs";import{TextAttributes as XX}from"@opentui/core";function tI(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 fT(f){let Y=f.toLowerCase();if(Y.includes("not a git repository"))return F("files.error.notGitRepo");if(Y.includes("does not exist")||Y.includes("enoent"))return F("files.error.pathMissing");if(Y.includes("permission denied")||Y.includes("eacces"))return F("files.error.permissionDenied");if(Y.includes("git: not found")||Y.includes("command not found"))return F("files.error.gitNotInstalled");let J=f.indexOf(": ");if(J>=0&&f.startsWith("git "))return f.slice(J+2).trim()||F("files.error.gitFailed");return f.trim()||F("files.error.gitFailed")}function YT(f){switch(f){case"all":return F("files.tabs.all");case"changes":return F("files.tabs.changes")}}function C9(f){let{theme:Y}=n0(),J=uY(),z=()=>f.focused?f.focused():!0,[Z,G]=p("all"),[Q,q]=p(0),[H,B]=p(0),[V,j]=p(null,{equals:bM}),[K,L]=p(null,{equals:kM}),[O,M]=p(null),[R,S]=p(new Set),a=0;async function b(x,e,I){let Z0=++a;if(e==null){j(null),L(null),M(null);return}M(null);try{if(x==="all"){let u=await M9(e,I);if(I?.aborted||Z0!==a||f.worktreePath()!==e)return;j(u)}else if(x==="changes"){let u=await F9(e,I);if(I?.aborted||Z0!==a||f.worktreePath()!==e)return;L(u)}}catch(u){if(I?.aborted)return;let P=u instanceof Error?u.message:String(u);if(Z0===a&&f.worktreePath()===e)M(P)}}Z1(Nf(f.worktreePath,async(x)=>{j(null),L(null),M(null),q(0),S(new Set);let e=new AbortController;b1(()=>e.abort()),await b(Z(),x,e.signal)})),Z1(Nf(f.worktreePath,(x)=>{if(x==null)return;if(process.env.KOBE_FILETREE_WATCH!=="1")return;let e=null,I=null;try{I=sI(x,{recursive:!0},(Z0,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((X0)=>X0+1)},500)}),I.on("error",()=>{})}catch{}b1(()=>{if(e!=null)clearTimeout(e);if(I!=null)I.close()})})),Z1(Nf([Z,H],async([x,e])=>{let I=f.worktreePath();if(I==null)return;q(0);let Z0=new AbortController;b1(()=>Z0.abort());let P=H()>0;if(x==="all"){if(V()==null||P)await b("all",I,Z0.signal)}else if(x==="changes"){if(K()==null||P)await b("changes",I,Z0.signal)}}));let g=K0(()=>{let x=V();if(x==null)return null;return LM(x)}),C=K0((x)=>{let e=[];if(Z()==="all"){let I=g();if(I!=null)g9(I,R(),0,e)}else if(Z()==="changes"){let I=K();if(I!=null)e.push(...CM(I))}return NM(x??[],e)},[]),y=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}}),r=K0(()=>{let x=y(),e=(x.added>0?x.added+1:0)+(x.deleted>0?x.deleted+1:0);return Math.max(8,J().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 J0(){let x=C(),e=Q(),I=x[e];if(!I)return;if(I.kind!=="dir")return;if(!I.expanded&&I.hasChildren)S((Z0)=>{let u=new Set(Z0);return u.add(I.path),u});else if(I.expanded){if(e+1<x.length)q(e+1)}}function T(){if(Z()!=="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 Z0=I.depth-1;if(Z0<0)return;for(let u=e-1;u>=0;u--){let P=x[u];if(!P)continue;if(P.kind==="dir"&&P.depth===Z0){q(u);return}}}function B0(){let x=C(),e=Q();if(e<0||e>=x.length)return;let I=x[e];if(!I)return;if(I.kind==="dir"){S((Z0)=>{let u=new Set(Z0);if(u.has(I.path))u.delete(I.path);else u.add(I.path);return u});return}f.onOpenFile(I.path)}function _(){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 R0(){let x=C(),e=Q();if(e<0||e>=x.length)return;let I=x[e];if(!I||I.kind==="dir")return;let Z0=f.worktreePath();if(!Z0)return;let u=`${Z0}/${I.path}`;AM(u)}A9({focused:z,moveDown:z0,moveUp:t,setTab:(x)=>G(x),currentTab:Z,openCurrent:B0,mentionCurrent:_,createPR:f.onCreatePR,openExternal:R0,refresh:D0,expandOrDescend:J0,collapseOrParent:T});let $;return Z1(Nf([Q,C],([x,e])=>{if(!$)return;if(e.length===0)return;let I=$.scrollTop,Z0=$.viewport.height;if(Z0<=0)return;if(x<I)$.scrollTo({x:0,y:x});else if(x>=I+Z0)$.scrollTo({x:0,y:x-Z0+1})})),(()=>{var x=W("box"),e=W("box"),I=W("box"),Z0=W("scrollbox");return D(x,e),D(x,Z0),X(x,"flexDirection","column"),X(x,"flexGrow",1),X(x,"paddingTop",1),X(x,"paddingBottom",1),X(x,"paddingLeft",0),X(x,"paddingRight",0),U(x,k(G0,{get when(){return f.onZenToggle||f.onCreatePR},get children(){var u=W("box");return X(u,"flexDirection","row"),X(u,"justifyContent","flex-end"),X(u,"gap",2),X(u,"paddingBottom",1),X(u,"flexShrink",0),U(u,k(G0,{get when(){return f.onZenToggle},get children(){var P=W("box"),X0=W("text"),V0=W("text");return D(P,X0),D(P,V0),X(P,"flexDirection","row"),X(P,"gap",1),X(P,"onMouseUp",()=>f.onZenToggle?.()),D(X0,x0("[~]")),X(X0,"wrapMode","none"),X(V0,"wrapMode","none"),U(V0,()=>F("files.actions.zen")),E((q0)=>{var k0=Y.accent,w0=XX.BOLD,I0=Y.text;return k0!==q0.e&&(q0.e=X(X0,"fg",k0,q0.e)),w0!==q0.t&&(q0.t=X(X0,"attributes",w0,q0.t)),I0!==q0.a&&(q0.a=X(V0,"fg",I0,q0.a)),q0},{e:void 0,t:void 0,a:void 0}),P}}),null),U(u,k(G0,{get when(){return f.onCreatePR},get children(){var P=W("box"),X0=W("text"),V0=W("text");return D(P,X0),D(P,V0),X(P,"flexDirection","row"),X(P,"gap",1),X(P,"onMouseUp",()=>f.onCreatePR?.()),D(X0,x0("[P]")),X(X0,"wrapMode","none"),X(V0,"wrapMode","none"),U(V0,()=>F("files.actions.createPR")),E((q0)=>{var k0=Y.accent,w0=XX.BOLD,I0=Y.text;return k0!==q0.e&&(q0.e=X(X0,"fg",k0,q0.e)),w0!==q0.t&&(q0.t=X(X0,"attributes",w0,q0.t)),I0!==q0.a&&(q0.a=X(V0,"fg",I0,q0.a)),q0},{e:void 0,t:void 0,a:void 0}),P}}),null),u}}),e),D(e,I),X(e,"flexDirection","row"),X(e,"justifyContent","space-between"),X(e,"paddingBottom",0),X(e,"flexShrink",0),X(I,"flexDirection","row"),X(I,"gap",2),U(I,k(X1,{each:eI,children:(u)=>{let P=()=>Z()===u;return(()=>{var X0=W("text");return X(X0,"wrapMode","none"),X(X0,"onMouseUp",()=>G(u)),U(X0,()=>YT(u)),E((V0)=>{var q0=P()?Y.primary:Y.textMuted,k0=P()?XX.BOLD:void 0;return q0!==V0.e&&(V0.e=X(X0,"fg",q0,V0.e)),k0!==V0.t&&(V0.t=X(X0,"attributes",k0,V0.t)),V0},{e:void 0,t:void 0}),X0})()}})),U(e,k(G0,{get when(){return f.cornerBadge?.()},children:(u)=>(()=>{var P=W("text");return X(P,"wrapMode","none"),U(P,()=>u().text),E((X0)=>{var V0=u().active?Y.accent:Y.textMuted,q0=u().active?XX.BOLD:void 0;return V0!==X0.e&&(X0.e=X(P,"fg",V0,X0.e)),q0!==X0.t&&(X0.t=X(P,"attributes",q0,X0.t)),X0},{e:void 0,t:void 0}),P})()}),null),U(x,k(G0,{get when(){return Z()==="changes"},get children(){var u=W("box"),P=W("text");return D(u,P),X(u,"flexDirection","column"),X(u,"paddingBottom",1),X(u,"flexShrink",0),X(u,"gap",0),X(P,"wrapMode","none"),U(P,()=>F("files.legend.changes")),E((X0)=>X(P,"fg",Y.textMuted,X0)),u}}),Z0),U(x,k(G0,{get when(){return Z()!=="changes"},get children(){var u=W("box");return X(u,"flexDirection","row"),X(u,"paddingBottom",1),X(u,"flexShrink",0),u}}),Z0),mJ((u)=>{$=u},Z0),X(Z0,"flexGrow",1),X(Z0,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),U(Z0,k(G0,{get when(){return f.worktreePath()==null},get children(){var u=W("box"),P=W("text");return D(u,P),X(u,"paddingTop",1),X(u,"paddingLeft",1),U(P,()=>F("files.empty.noTask")),E((X0)=>X(P,"fg",Y.textMuted,X0)),u}}),null),U(Z0,k(G0,{get when(){return T0(()=>f.worktreePath()!=null)()&&O()!=null},get children(){var u=W("box"),P=W("text"),X0=W("text");return D(u,P),D(u,X0),X(u,"paddingTop",1),X(u,"paddingLeft",1),X(u,"flexDirection","column"),X(u,"gap",0),X(P,"wrapMode","word"),U(P,()=>fT(O()??"")),X(X0,"wrapMode","word"),U(X0,()=>F("files.error.retryHint")),E((V0)=>{var{error:q0,textMuted:k0}=Y;return q0!==V0.e&&(V0.e=X(P,"fg",q0,V0.e)),k0!==V0.t&&(V0.t=X(X0,"fg",k0,V0.t)),V0},{e:void 0,t:void 0}),u}}),null),U(Z0,k(G0,{get when(){return T0(()=>f.worktreePath()!=null&&O()==null&&C().length===0)()&&(Z()==="all"&&V()!=null||Z()==="changes"&&K()!=null)},get children(){var u=W("box"),P=W("text");return D(u,P),X(u,"paddingTop",1),X(u,"paddingLeft",1),U(P,(()=>{var X0=T0(()=>Z()==="all");return()=>X0()?F("files.empty.noFiles"):F("files.empty.noChanges")})()),E((X0)=>X(P,"fg",Y.textMuted,X0)),u}}),null),U(Z0,k(G0,{get when(){return T0(()=>f.worktreePath()!=null&&O()==null)()&&C().length>0},get children(){var u=W("box");return X(u,"flexShrink",0),X(u,"gap",0),X(u,"paddingRight",1),U(u,k(X1,{get each(){return C()},children:(P,X0)=>{let V0=()=>X0()===Q(),q0=(()=>{var Y0=W("text");return X(Y0,"wrapMode","none"),U(Y0,()=>V0()?"\u258C":" "),E((F0)=>X(Y0,"fg",V0()?Y.focusAccent:void 0,F0)),Y0})(),k0=()=>V0()?Y.backgroundElement:void 0;if(P.kind==="dir"){let Y0=" ".repeat(P.depth),F0=P.expanded?"\u25BE":"\u25B8";return(()=>{var $0=W("box"),r0=W("box"),u0=W("text");return D($0,r0),X($0,"flexDirection","row"),X($0,"gap",0),X($0,"onMouseUp",()=>{q(X0()),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,q0,r0),D(r0,u0),X(r0,"flexGrow",1),X(r0,"paddingRight",1),X(u0,"wrapMode","none"),U(u0,()=>`${Y0}${F0} ${P.name}/`),E((o0)=>{var n=k0(),Q0=Y.textMuted,y0=XX.BOLD;return n!==o0.e&&(o0.e=X($0,"backgroundColor",n,o0.e)),Q0!==o0.t&&(o0.t=X(u0,"fg",Q0,o0.t)),y0!==o0.a&&(o0.a=X(u0,"attributes",y0,o0.a)),o0},{e:void 0,t:void 0,a:void 0}),$0})()}if(P.kind==="file"){let Y0=" ".repeat(P.depth);return(()=>{var F0=W("box"),$0=W("box"),r0=W("text");return D(F0,$0),X(F0,"flexDirection","row"),X(F0,"gap",0),X(F0,"onMouseUp",()=>{q(X0()),f.onOpenFile(P.path)}),U(F0,q0,$0),D($0,r0),X($0,"flexGrow",1),X($0,"paddingRight",1),X(r0,"wrapMode","none"),U(r0,()=>`${Y0} ${P.name}`),E((u0)=>{var o0=k0(),n=Y.text;return o0!==u0.e&&(u0.e=X(F0,"backgroundColor",o0,u0.e)),n!==u0.t&&(u0.t=X(r0,"fg",n,u0.t)),u0},{e:void 0,t:void 0}),F0})()}let w0=tI(P.status),I0=()=>{switch(w0){case"success":return Y.success;case"warning":return Y.warning;case"error":return Y.error;case"info":return Y.info;default:return Y.textMuted}},_0=y(),v=P.added==null?" ".repeat(_0.added):`+${P.added}`.padStart(_0.added),M0=P.deleted==null?" ".repeat(_0.deleted):`-${P.deleted}`.padStart(_0.deleted);return(()=>{var Y0=W("box"),F0=W("box"),$0=W("text"),r0=W("text");return D(Y0,F0),X(Y0,"flexDirection","row"),X(Y0,"gap",0),X(Y0,"onMouseUp",()=>{q(X0()),f.onOpenFile(P.path)}),U(Y0,q0,F0),D(F0,$0),D(F0,r0),X(F0,"flexDirection","row"),X(F0,"flexGrow",1),X(F0,"gap",1),X(F0,"paddingRight",1),X($0,"wrapMode","none"),U($0,()=>P.status),X(r0,"wrapMode","none"),X(r0,"flexGrow",1),U(r0,()=>gM(P.path,r())),U(F0,k(G0,{get when(){return _0.added>0},get children(){var u0=W("text");return X(u0,"wrapMode","none"),U(u0,v),E((o0)=>X(u0,"fg",Y.success,o0)),u0}}),null),U(F0,k(G0,{get when(){return _0.deleted>0},get children(){var u0=W("text");return X(u0,"wrapMode","none"),U(u0,M0),E((o0)=>X(u0,"fg",Y.error,o0)),u0}}),null),E((u0)=>{var o0=k0(),n=I0(),Q0=Y.text;return o0!==u0.e&&(u0.e=X(Y0,"backgroundColor",o0,u0.e)),n!==u0.t&&(u0.t=X($0,"fg",n,u0.t)),Q0!==u0.a&&(u0.a=X(r0,"fg",Q0,u0.a)),u0},{e:void 0,t:void 0,a:void 0}),Y0})()}})),u}}),null),U(x,k(G0,{get when(){return f.worktreePath()!=null},get children(){var u=W("box"),P=W("text");return D(u,P),X(u,"flexDirection","row"),X(u,"paddingTop",1),X(u,"flexShrink",0),X(P,"wrapMode","none"),U(P,()=>F("files.footer.openHint")),E((X0)=>X(P,"fg",Y.textMuted,X0)),u}}),null),x})()}var eI;var SM=N(()=>{h();h();h();h();h();h();h();h();h();e1();h();B1();w1();O9();R9();RM();yM();eI=["all","changes"]});var IM=N(()=>{SM();O9();R9()});import{promises as JT}from"fs";import zT from"path";async function GH(f,Y){let J=new AbortController,z=setTimeout(()=>J.abort(),ZT);try{let Z=await sY("git",Y,{cwd:f,env:xf(),signal:J.signal});if(J.signal.aborted)return null;if(Z.status!==0)return null;return Z.stdout.trim()}finally{clearTimeout(z)}}async function GT(f){return await GH(f,["rev-parse","--abbrev-ref","HEAD"])||"HEAD"}async function XT(f){let Y=await GH(f,["symbolic-ref","refs/remotes/origin/HEAD","--short"]);if(!Y)return"main";return Y.startsWith("origin/")?Y.slice(7):Y}async function QT(f){let Y=await GH(f,["rev-parse","--abbrev-ref","@{u}"]);return Y!==null&&Y.length>0}async function qT(f){let Y=await GH(f,["status","--porcelain"]);if(!Y)return 0;return Y.split(`
280
- `).filter((J)=>J.length>0).length}async function HT(f){let[Y,J,z,Z]=await Promise.all([GT(f),XT(f),QT(f),qT(f)]);return{branch:Y,targetBranch:J,hasUpstream:z,dirtyCount:Z}}function BT(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 jT(f){return f?"The current branch tracks an upstream.":"There is no upstream branch yet."}function WT(f,Y){let J={branch:Y.branch,targetBranch:Y.targetBranch,dirtyCountSentence:BT(Y.dirtyCount),upstreamSentence:jT(Y.hasUpstream)};return f.replace(/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/g,(z,Z)=>Object.hasOwn(J,Z)?J[Z]:z)}async function VT(f){let Y=zT.join(f,".kobe","pr-instructions.md");try{let J=await JT.readFile(Y,"utf8");return J.length>0?J:TM}catch{return TM}}async function uM(f){let[Y,J]=await Promise.all([VT(f),HT(f)]);return WT(Y,J)}var ZT=5000,TM=`The user likes the current state of the code.
276
+ ${M("update.updateFailed",{code:String(O)})}
277
+ `),process.stdout.write(M("update.pressAnyKey")),await $u(),process.exit(O)}return D1(()=>({bindings:[{key:"up",cmd:()=>g(-1)},{key:"down",cmd:()=>g(1)},{key:"k",cmd:()=>g(-1)},{key:"j",cmd:()=>g(1)},{key:"return",cmd:()=>u()},{key:"u",cmd:()=>u("update")},{key:"r",cmd:()=>u("release")},{key:"q",cmd:()=>u("close")},{key:"escape",cmd:()=>u("close")},{key:"ctrl+c",cmd:()=>u("close")}]})),(()=>{var S=W("box"),O=W("box"),C=W("text"),y=W("text"),a=W("box"),l=W("text"),t=W("text"),J0=E0("v"),T=W("text"),Q0=W("text"),r=E0("v"),W0=W("box"),O0=W("box"),K0=W("text"),_=W("scrollbox"),P=W("box");return D(S,O),D(S,a),D(S,W0),D(S,O0),D(S,_),q(S,"flexDirection","column"),q(S,"flexGrow",1),q(S,"paddingTop",1),q(S,"paddingLeft",2),q(S,"paddingRight",2),D(O,C),D(O,y),q(O,"flexDirection","row"),q(O,"justifyContent","space-between"),q(O,"flexShrink",0),q(C,"wrapMode","none"),U(C,()=>M("update.pageTitle")),D(y,E0("q / esc")),q(y,"wrapMode","none"),q(y,"onMouseUp",()=>u("close")),D(a,l),D(a,t),D(a,T),D(a,Q0),q(a,"flexDirection","row"),q(a,"gap",2),q(a,"flexShrink",0),q(a,"paddingTop",1),q(l,"wrapMode","none"),U(l,()=>M("update.current")),D(t,J0),q(t,"wrapMode","none"),U(t,t0,null),q(T,"wrapMode","none"),U(T,()=>M("update.latest")),D(Q0,r),q(Q0,"wrapMode","none"),U(Q0,K,null),q(W0,"flexDirection","column"),q(W0,"flexShrink",0),q(W0,"paddingTop",1),q(W0,"gap",0),U(W0,b(Q1,{get each(){return A()},children:(k)=>(()=>{var o=W("box"),I=W("box"),h=W("text"),G0=E0("["),q0=E0("]"),H0=W("box"),b0=W("text"),w0=W("text");return D(o,I),D(o,H0),D(o,w0),q(o,"flexDirection","row"),q(o,"gap",1),q(o,"paddingLeft",1),q(o,"paddingRight",1),q(o,"onMouseUp",()=>u(k.id)),D(I,h),q(I,"width",4),q(I,"flexShrink",0),D(h,G0),D(h,q0),q(h,"wrapMode","none"),U(h,()=>k.key,q0),D(H0,b0),q(H0,"width",14),q(H0,"flexShrink",0),q(b0,"wrapMode","none"),U(b0,()=>k.label),q(w0,"wrapMode","word"),U(w0,()=>k.detail),x((y0)=>{var p0=H()===k.id?J.primary:void 0,v=H()===k.id?J.selectedListItemText:J.accent,M0=oG.BOLD,Z0=H()===k.id?J.selectedListItemText:J.text,F0=H()===k.id?J.selectedListItemText:J.textMuted;return p0!==y0.e&&(y0.e=q(o,"backgroundColor",p0,y0.e)),v!==y0.t&&(y0.t=q(h,"fg",v,y0.t)),M0!==y0.a&&(y0.a=q(h,"attributes",M0,y0.a)),Z0!==y0.o&&(y0.o=q(b0,"fg",Z0,y0.o)),F0!==y0.i&&(y0.i=q(w0,"fg",F0,y0.i)),y0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),o})()})),U(S,b(X0,{get when(){return V()},get children(){var k=W("text");return q(k,"wrapMode","word"),U(k,V),x((o)=>q(k,"fg",J.info,o)),k}}),O0),D(O0,K0),q(O0,"flexShrink",0),q(O0,"paddingTop",1),q(K0,"wrapMode","none"),U(K0,()=>M("update.changesSectionHeader",{from:t0,to:K()})),D(_,P),q(_,"flexGrow",1),q(_,"flexShrink",1),q(_,"stickyScroll",!1),q(P,"flexDirection","column"),q(P,"paddingRight",1),q(P,"paddingBottom",1),q(P,"gap",0),U(P,b(X0,{get when(){return Q()},get children(){var k=W("text");return U(k,()=>M("update.loadingNotes")),x((o)=>q(k,"fg",J.textMuted,o)),k}}),null),U(P,b(X0,{get when(){return T0(()=>!Q())()&&G().length===0},get children(){var k=W("text");return q(k,"wrapMode","word"),U(k,()=>M("update.notesUnavailable")),x((o)=>q(k,"fg",J.textMuted,o)),k}}),null),U(P,b(Q1,{get each(){return G()},children:(k)=>(()=>{var o=W("box"),I=W("text"),h=E0("v");return D(o,I),q(o,"flexDirection","column"),q(o,"paddingBottom",1),q(o,"gap",0),D(I,h),q(I,"wrapMode","none"),U(I,()=>k.version,null),U(o,b(Q1,{get each(){return lu(k.body)},children:(G0)=>(()=>{var q0=W("text");return q(q0,"wrapMode","word"),U(q0,G0),x((H0)=>q(q0,"fg",J.textMuted,H0)),q0})()}),null),x((G0)=>{var q0=J.text,H0=oG.BOLD;return q0!==G0.e&&(G0.e=q(I,"fg",q0,G0.e)),H0!==G0.t&&(G0.t=q(I,"attributes",H0,G0.t)),G0},{e:void 0,t:void 0}),o})()}),null),x((k)=>{var{background:o,text:I}=J,h=oG.BOLD,G0=J.textMuted,q0=J.textMuted,H0=J.text,b0=oG.BOLD,w0=J.textMuted,y0=Y()?.hasUpdate?J.warning:J.success,p0=oG.BOLD,v=J.textMuted,M0=oG.DIM,Z0={trackOptions:{backgroundColor:J.background,foregroundColor:J.borderActive}};return o!==k.e&&(k.e=q(S,"backgroundColor",o,k.e)),I!==k.t&&(k.t=q(C,"fg",I,k.t)),h!==k.a&&(k.a=q(C,"attributes",h,k.a)),G0!==k.o&&(k.o=q(y,"fg",G0,k.o)),q0!==k.i&&(k.i=q(l,"fg",q0,k.i)),H0!==k.n&&(k.n=q(t,"fg",H0,k.n)),b0!==k.s&&(k.s=q(t,"attributes",b0,k.s)),w0!==k.h&&(k.h=q(T,"fg",w0,k.h)),y0!==k.r&&(k.r=q(Q0,"fg",y0,k.r)),p0!==k.d&&(k.d=q(Q0,"attributes",p0,k.d)),v!==k.l&&(k.l=q(K0,"fg",v,k.l)),M0!==k.u&&(k.u=q(K0,"attributes",M0,k.u)),Z0!==k.c&&(k.c=q(_,"verticalScrollbarOptions",Z0,k.c)),k},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0}),S})()}async function _u(){await AJ({setup:()=>({root:()=>b(au,{})})})}var UM=N(()=>{w();w();w();w();w();w();w();w();w();j1();FJ();v1();GJ();rY();uJ()});function pu(J){return J.trim().split(/\s+/)[0]??""}function LM(J,z,Y,Z){let G=X1(Y);if(J==="vim")return{bin:"vim",command:`vim ${G}`};if(J==="nvim")return{bin:"nvim",command:`nvim ${G}`};if(J==="nano")return{bin:"nano",command:`nano ${G}`};if(J==="emacs")return{bin:"emacs",command:`emacs ${G}`};let X=(z.trim()||(Z??"").trim()).trim();if(!X)return null;let Q=pu(X);if(!Q)return null;let f=X.includes(DM)?X.split(DM).join(G):`${X} ${G}`;return{bin:Q,command:f}}function ru(J,z,Y){let Z=X1(z);return["f=$(mktemp 2>/dev/null)",`if [ -n "$f" ] && git show ${X1(`HEAD:./${Y}`)} > "$f" 2>/dev/null; then`,` ${J} -d "$f" ${Z} -c 'setlocal nomodifiable' -c 'wincmd l'; r=$?`,"else",` ${J} ${Z}; r=$?`,"fi",'rm -f "$f" 2>/dev/null; exit $r'].join(`
278
+ `)}function ou(J,z){let Y=J.endsWith("/")?J:`${J}/`;return z.startsWith(Y)?z.slice(Y.length):null}async function su(J){let z=jG(S1(ZY)),Y=S1(uY)??"",Z=(process.env.VISUAL??process.env.EDITOR??"").trim();if(z!=="auto")return LM(z,Y,J,Z);if(Z)return LM("custom","",J,Z);let G=X1(J);for(let X of _5)if(await MM(X))return{bin:X,command:`${X} ${G}`};return null}async function MM(J){try{return await Bun.spawn(["sh","-c",`command -v ${X1(J)} >/dev/null 2>&1`],{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function tu(J,z){try{return await Bun.spawn(["git","diff","--quiet","HEAD","--",z],{cwd:J,stdin:"ignore",stdout:"ignore",stderr:"ignore",env:vJ()}).exited===1}catch{return!1}}async function FM(J,z,Y){let Z=await su(Y);if(!Z)return!1;if(!await MM(Z.bin))return!1;let G=await eu(Z,z,Y);return await Vz(J,{cwd:z,command:G,name:Jx(Y)}),!0}async function eu(J,z,Y){let{bin:Z,command:G}=J;if(Z!=="nvim"&&Z!=="vim")return G;if(G!==`${Z} ${X1(Y)}`)return G;let X=ou(z,Y);if(!X)return G;if(!await tu(z,X))return G;return ru(Z,Y,X)}function Jx(J){let z=J.slice(J.lastIndexOf("/")+1).trim();return z.length>0?z:"edit"}var DM="{file}";var OM=N(()=>{xY();O1();mq();P1();fz()});async function kH(J,z,Y){if(!z)throw Error("git(): cwd is required");let Z=await WG(z,J,{signal:Y}),G=Z.status??-1;if(G!==0){let X=(Z.stderr??"").trim(),Q=(Z.stdout??"").trim();throw Error(`git ${J.join(" ")} (cwd=${z}) exited with code ${G}: ${X||Q||"(no output)"}`)}return Z.stdout??""}async function o9(J,z){let Z=(await kH(["ls-files","--cached","--others","--exclude-standard","--full-name"],J,z)).split(`
279
+ `).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 s9(J,z){let Y=await kH(["status","--porcelain","--untracked-files=all"],J,z),Z=CM(Y),G=new Map;try{let X=await kH(["diff","--no-color","--numstat","HEAD"],J,z);G=new Map(AM(X).map((Q)=>[Q.path,{added:Q.added,deleted:Q.deleted}]))}catch{try{let X=await kH(["diff","--no-color","--numstat","--cached"],J,z);G=new Map(AM(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 AM(J){return rK(J).map((z)=>({path:z.path,added:z.added,deleted:z.deleted}))}function RM(J){let z={name:"",path:"",isDir:!0,children:[]};for(let Y of J){if(!Y)continue;let Z=Y.split("/").filter((X)=>X.length>0);if(Z.length===0)continue;let G=z;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 gM(z),z}function gM(J){J.children.sort((z,Y)=>{if(z.isDir!==Y.isDir)return z.isDir?-1:1;return z.name.localeCompare(Y.name)});for(let z of J.children)gM(z)}function CM(J){let z=[];for(let Y of If(J)){let Z;if(Y.x==="?"&&Y.y==="?")Z="?";else{let X=Y.y!==" "?Y.y:Y.x;if(X==="M"||X==="A"||X==="D"||X==="R"||X==="C"||X==="U")Z=X;else continue}let G=Y.path;if(G.length===0)continue;if(G.endsWith("/"))continue;z.push({path:G,status:Z})}return z}var t9=N(()=>{jj();cq()});function e9(J){D1(()=>({enabled:J.focused(),bindings:_Y({"files.nav":(z,Y)=>{if((Y??0)%2===0)J.moveDown();else J.moveUp()},"files.hierarchy":(z,Y)=>{if((Y??0)%2===0)J.collapseOrParent();else J.expandOrDescend()},"files.tab":(z,Y)=>{let Z=J.currentTab(),G=UQ.indexOf(Z);if(G<0)return;let X=(Y??0)%2===0?-1:1,Q=UQ[(G+X+UQ.length)%UQ.length];if(Q)J.setTab(Q)},"files.open":()=>J.openCurrent(),"files.mention":()=>J.mentionCurrent?.(),"files.createPR":()=>J.createPR?.(),"files.openExternal":()=>J.openExternal(),"files.refresh":()=>J.refresh()})}))}var UQ;var JW=N(()=>{$G();uJ();UQ=["all","changes"]});import{spawn as NM}from"child_process";import{existsSync as zx}from"fs";import{platform as Yx}from"os";function kM(J){if(!J)return;let z=Yx();if(z==="linux"){if(zx("/proc/sys/fs/binfmt_misc/WSLInterop")||process.env.WSL_DISTRO_NAME){DQ("wslview",[J],()=>{let Y=NM("wslpath",["-w",J],{stdio:["ignore","pipe","ignore"]}),Z="";Y.stdout?.on("data",(G)=>{Z+=G.toString()}),Y.on("close",(G)=>{if(G===0)DQ("explorer.exe",[Z.trim()])})});return}DQ("xdg-open",[J]);return}if(z==="darwin"){DQ("open",[J]);return}if(z==="win32"){DQ("cmd.exe",["/c","start","",J]);return}}function DQ(J,z,Y){try{let Z=NM(J,z,{stdio:"ignore",detached:!0});Z.on("error",()=>Y?.()),Z.unref()}catch{Y?.()}}var bM=()=>{};function zW(J,z,Y,Z){for(let G of J.children)if(G.isDir){let X=z.has(G.path);if(Z.push({kind:"dir",path:G.path,name:G.name,depth:Y,expanded:X,hasChildren:G.children.length>0}),X)zW(G,z,Y+1,Z)}else Z.push({kind:"file",path:G.path,name:G.name,depth:Y})}function SM(J,z){if(z<=0)return J;let Y=[...J];if(Y.length<=z)return J;return`\u2026${Y.slice(Y.length-Math.max(0,z-1)).join("")}`}function IM(J){return J.map((z)=>({kind:"status",path:z.path,status:z.status,added:z.added,deleted:z.deleted}))}function Zx(J){return`${J.kind}\x00${J.path}`}function Gx(J,z){if(J.kind!==z.kind||J.path!==z.path)return!1;switch(J.kind){case"file":{let Y=z;return J.name===Y.name&&J.depth===Y.depth}case"dir":{let Y=z;return J.name===Y.name&&J.depth===Y.depth&&J.expanded===Y.expanded&&J.hasChildren===Y.hasChildren}case"status":{let Y=z;return J.status===Y.status&&J.added===Y.added&&J.deleted===Y.deleted}}}function yM(J,z){return FH(J,z,Zx,Gx)}function TM(J,z){if(J===z)return!0;if(J==null||z==null)return!1;if(J.length!==z.length)return!1;for(let Y=0;Y<J.length;Y++)if(J[Y]!==z[Y])return!1;return!0}function uM(J,z){if(J===z)return!0;if(J==null||z==null)return!1;if(J.length!==z.length)return!1;for(let Y=0;Y<J.length;Y++){let Z=J[Y],G=z[Y];if(Z.path!==G.path||Z.status!==G.status||Z.added!==G.added||Z.deleted!==G.deleted)return!1}return!0}var xM=()=>{};import{watch as Xx}from"fs";import{TextAttributes as LQ}from"@opentui/core";function Qx(J){switch(J){case"M":return"warning";case"A":return"success";case"D":return"error";case"?":return"textMuted";case"R":case"C":case"U":return"info"}}function fx(J){let z=J.toLowerCase();if(z.includes("not a git repository"))return M("files.error.notGitRepo");if(z.includes("does not exist")||z.includes("enoent"))return M("files.error.pathMissing");if(z.includes("permission denied")||z.includes("eacces"))return M("files.error.permissionDenied");if(z.includes("git: not found")||z.includes("command not found"))return M("files.error.gitNotInstalled");let Y=J.indexOf(": ");if(Y>=0&&J.startsWith("git "))return J.slice(Y+2).trim()||M("files.error.gitFailed");return J.trim()||M("files.error.gitFailed")}function Hx(J){switch(J){case"all":return M("files.tabs.all");case"changes":return M("files.tabs.changes")}}function YW(J){let{theme:z}=d0(),Y=Pz(),Z=()=>J.focused?J.focused():!0,[G,X]=p("all"),[Q,f]=p(0),[H,B]=p(0),[V,j]=p(null,{equals:TM}),[K,L]=p(null,{equals:uM}),[A,F]=p(null),[g,u]=p(new Set),s=0;async function S(_,P,k){let o=++s;if(P==null){j(null),L(null),F(null);return}F(null);try{if(_==="all"){let I=await o9(P,k);if(k?.aborted||o!==s||J.worktreePath()!==P)return;j(I)}else if(_==="changes"){let I=await s9(P,k);if(k?.aborted||o!==s||J.worktreePath()!==P)return;L(I)}}catch(I){if(k?.aborted)return;let h=I instanceof Error?I.message:String(I);if(o===s&&J.worktreePath()===P)F(h)}}Y1(SJ(J.worktreePath,async(_)=>{j(null),L(null),F(null),f(0),u(new Set);let P=new AbortController;N1(()=>P.abort()),await S(G(),_,P.signal)})),Y1(SJ(J.worktreePath,(_)=>{if(_==null)return;if(process.env.KOBE_FILETREE_WATCH!=="1")return;let P=null,k=null;try{k=Xx(_,{recursive:!0},(o,I)=>{if(I==null)return;let h=I.toString();if(h===".git"||h.startsWith(".git/")||h.startsWith(".git\\"))return;if(h.startsWith("node_modules/")||h.startsWith("node_modules\\"))return;if(P!=null)clearTimeout(P);P=setTimeout(()=>{P=null,B((G0)=>G0+1)},500)}),k.on("error",()=>{})}catch{}N1(()=>{if(P!=null)clearTimeout(P);if(k!=null)k.close()})})),Y1(SJ([G,H],async([_,P])=>{let k=J.worktreePath();if(k==null)return;f(0);let o=new AbortController;N1(()=>o.abort());let h=H()>0;if(_==="all"){if(V()==null||h)await S("all",k,o.signal)}else if(_==="changes"){if(K()==null||h)await S("changes",k,o.signal)}}));let O=U0(()=>{let _=V();if(_==null)return null;return RM(_)}),C=U0((_)=>{let P=[];if(G()==="all"){let k=O();if(k!=null)zW(k,g(),0,P)}else if(G()==="changes"){let k=K();if(k!=null)P.push(...IM(k))}return yM(_??[],P)},[]),y=U0(()=>{let _=0,P=0;for(let k of C()){if(k.kind!=="status")continue;if(k.added!=null)_=Math.max(_,String(k.added).length+1);if(k.deleted!=null)P=Math.max(P,String(k.deleted).length+1)}return{added:_,deleted:P}}),a=U0(()=>{let _=y(),P=(_.added>0?_.added+1:0)+(_.deleted>0?_.deleted+1:0);return Math.max(8,Y().width-6-P)});function l(){let _=C();if(_.length===0)return;f(Math.min(Q()+1,_.length-1))}function t(){if(C().length===0)return;f(Math.max(Q()-1,0))}function J0(){let _=C(),P=Q(),k=_[P];if(!k)return;if(k.kind!=="dir")return;if(!k.expanded&&k.hasChildren)u((o)=>{let I=new Set(o);return I.add(k.path),I});else if(k.expanded){if(P+1<_.length)f(P+1)}}function T(){if(G()!=="all")return;let _=C(),P=Q(),k=_[P];if(!k)return;if(k.kind==="dir"&&k.expanded){u((I)=>{let h=new Set(I);return h.delete(k.path),h});return}if(k.kind!=="dir"&&k.kind!=="file")return;let o=k.depth-1;if(o<0)return;for(let I=P-1;I>=0;I--){let h=_[I];if(!h)continue;if(h.kind==="dir"&&h.depth===o){f(I);return}}}function Q0(){let _=C(),P=Q();if(P<0||P>=_.length)return;let k=_[P];if(!k)return;if(k.kind==="dir"){u((o)=>{let I=new Set(o);if(I.has(k.path))I.delete(k.path);else I.add(k.path);return I});return}J.onOpenFile(k.path)}function r(){let _=C(),P=Q();if(P<0||P>=_.length)return;let k=_[P];if(!k||k.kind==="dir")return;J.onMention?.(k.path)}function W0(){B((_)=>_+1),J.onRefresh?.()}function O0(){let _=C(),P=Q();if(P<0||P>=_.length)return;let k=_[P];if(!k||k.kind==="dir")return;let o=J.worktreePath();if(!o)return;let I=`${o}/${k.path}`;kM(I)}e9({focused:Z,moveDown:l,moveUp:t,setTab:(_)=>X(_),currentTab:G,openCurrent:Q0,mentionCurrent:r,createPR:J.onCreatePR,openExternal:O0,refresh:W0,expandOrDescend:J0,collapseOrParent:T});let K0;return Y1(SJ([Q,C],([_,P])=>{if(!K0)return;if(P.length===0)return;let k=K0.scrollTop,o=K0.viewport.height;if(o<=0)return;if(_<k)K0.scrollTo({x:0,y:_});else if(_>=k+o)K0.scrollTo({x:0,y:_-o+1})})),(()=>{var _=W("box"),P=W("box"),k=W("box"),o=W("scrollbox");return D(_,P),D(_,o),q(_,"flexDirection","column"),q(_,"flexGrow",1),q(_,"paddingTop",1),q(_,"paddingBottom",1),q(_,"paddingLeft",0),q(_,"paddingRight",0),U(_,b(X0,{get when(){return J.onZenToggle||J.onCreatePR},get children(){var I=W("box");return q(I,"flexDirection","row"),q(I,"justifyContent","flex-end"),q(I,"gap",2),q(I,"paddingBottom",1),q(I,"flexShrink",0),U(I,b(X0,{get when(){return J.onZenToggle},get children(){var h=W("box"),G0=W("text"),q0=W("text");return D(h,G0),D(h,q0),q(h,"flexDirection","row"),q(h,"gap",1),q(h,"onMouseUp",()=>J.onZenToggle?.()),D(G0,E0("[~]")),q(G0,"wrapMode","none"),q(q0,"wrapMode","none"),U(q0,()=>M("files.actions.zen")),x((H0)=>{var b0=z.accent,w0=LQ.BOLD,y0=z.text;return b0!==H0.e&&(H0.e=q(G0,"fg",b0,H0.e)),w0!==H0.t&&(H0.t=q(G0,"attributes",w0,H0.t)),y0!==H0.a&&(H0.a=q(q0,"fg",y0,H0.a)),H0},{e:void 0,t:void 0,a:void 0}),h}}),null),U(I,b(X0,{get when(){return J.onCreatePR},get children(){var h=W("box"),G0=W("text"),q0=W("text");return D(h,G0),D(h,q0),q(h,"flexDirection","row"),q(h,"gap",1),q(h,"onMouseUp",()=>J.onCreatePR?.()),D(G0,E0("[P]")),q(G0,"wrapMode","none"),q(q0,"wrapMode","none"),U(q0,()=>M("files.actions.createPR")),x((H0)=>{var b0=z.accent,w0=LQ.BOLD,y0=z.text;return b0!==H0.e&&(H0.e=q(G0,"fg",b0,H0.e)),w0!==H0.t&&(H0.t=q(G0,"attributes",w0,H0.t)),y0!==H0.a&&(H0.a=q(q0,"fg",y0,H0.a)),H0},{e:void 0,t:void 0,a:void 0}),h}}),null),I}}),P),D(P,k),q(P,"flexDirection","row"),q(P,"justifyContent","space-between"),q(P,"paddingBottom",0),q(P,"flexShrink",0),q(k,"flexDirection","row"),q(k,"gap",2),U(k,b(Q1,{each:qx,children:(I)=>{let h=()=>G()===I;return(()=>{var G0=W("text");return q(G0,"wrapMode","none"),q(G0,"onMouseUp",()=>X(I)),U(G0,()=>Hx(I)),x((q0)=>{var H0=h()?z.primary:z.textMuted,b0=h()?LQ.BOLD:void 0;return H0!==q0.e&&(q0.e=q(G0,"fg",H0,q0.e)),b0!==q0.t&&(q0.t=q(G0,"attributes",b0,q0.t)),q0},{e:void 0,t:void 0}),G0})()}})),U(P,b(X0,{get when(){return J.cornerBadge?.()},children:(I)=>(()=>{var h=W("text");return q(h,"wrapMode","none"),U(h,()=>I().text),x((G0)=>{var q0=I().active?z.accent:z.textMuted,H0=I().active?LQ.BOLD:void 0;return q0!==G0.e&&(G0.e=q(h,"fg",q0,G0.e)),H0!==G0.t&&(G0.t=q(h,"attributes",H0,G0.t)),G0},{e:void 0,t:void 0}),h})()}),null),U(_,b(X0,{get when(){return G()==="changes"},get children(){var I=W("box"),h=W("text");return D(I,h),q(I,"flexDirection","column"),q(I,"paddingBottom",1),q(I,"flexShrink",0),q(I,"gap",0),q(h,"wrapMode","none"),U(h,()=>M("files.legend.changes")),x((G0)=>q(h,"fg",z.textMuted,G0)),I}}),o),U(_,b(X0,{get when(){return G()!=="changes"},get children(){var I=W("box");return q(I,"flexDirection","row"),q(I,"paddingBottom",1),q(I,"flexShrink",0),I}}),o),lY((I)=>{K0=I},o),q(o,"flexGrow",1),q(o,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),U(o,b(X0,{get when(){return J.worktreePath()==null},get children(){var I=W("box"),h=W("text");return D(I,h),q(I,"paddingTop",1),q(I,"paddingLeft",1),U(h,()=>M("files.empty.noTask")),x((G0)=>q(h,"fg",z.textMuted,G0)),I}}),null),U(o,b(X0,{get when(){return T0(()=>J.worktreePath()!=null)()&&A()!=null},get children(){var I=W("box"),h=W("text"),G0=W("text");return D(I,h),D(I,G0),q(I,"paddingTop",1),q(I,"paddingLeft",1),q(I,"flexDirection","column"),q(I,"gap",0),q(h,"wrapMode","word"),U(h,()=>fx(A()??"")),q(G0,"wrapMode","word"),U(G0,()=>M("files.error.retryHint")),x((q0)=>{var{error:H0,textMuted:b0}=z;return H0!==q0.e&&(q0.e=q(h,"fg",H0,q0.e)),b0!==q0.t&&(q0.t=q(G0,"fg",b0,q0.t)),q0},{e:void 0,t:void 0}),I}}),null),U(o,b(X0,{get when(){return T0(()=>J.worktreePath()!=null&&A()==null&&C().length===0)()&&(G()==="all"&&V()!=null||G()==="changes"&&K()!=null)},get children(){var I=W("box"),h=W("text");return D(I,h),q(I,"paddingTop",1),q(I,"paddingLeft",1),U(h,(()=>{var G0=T0(()=>G()==="all");return()=>G0()?M("files.empty.noFiles"):M("files.empty.noChanges")})()),x((G0)=>q(h,"fg",z.textMuted,G0)),I}}),null),U(o,b(X0,{get when(){return T0(()=>J.worktreePath()!=null&&A()==null)()&&C().length>0},get children(){var I=W("box");return q(I,"flexShrink",0),q(I,"gap",0),q(I,"paddingRight",1),U(I,b(Q1,{get each(){return C()},children:(h,G0)=>{let q0=()=>G0()===Q(),H0=(()=>{var Z0=W("text");return q(Z0,"wrapMode","none"),U(Z0,()=>q0()?"\u258C":" "),x((F0)=>q(Z0,"fg",q0()?z.focusAccent:void 0,F0)),Z0})(),b0=()=>q0()?z.backgroundElement:void 0;if(h.kind==="dir"){let Z0=" ".repeat(h.depth),F0=h.expanded?"\u25BE":"\u25B8";return(()=>{var a0=W("box"),r0=W("box"),u0=W("text");return D(a0,r0),q(a0,"flexDirection","row"),q(a0,"gap",0),q(a0,"onMouseUp",()=>{f(G0()),u((o0)=>{let d=new Set(o0);if(d.has(h.path))d.delete(h.path);else d.add(h.path);return d})}),U(a0,H0,r0),D(r0,u0),q(r0,"flexGrow",1),q(r0,"paddingRight",1),q(u0,"wrapMode","none"),U(u0,()=>`${Z0}${F0} ${h.name}/`),x((o0)=>{var d=b0(),f0=z.textMuted,S0=LQ.BOLD;return d!==o0.e&&(o0.e=q(a0,"backgroundColor",d,o0.e)),f0!==o0.t&&(o0.t=q(u0,"fg",f0,o0.t)),S0!==o0.a&&(o0.a=q(u0,"attributes",S0,o0.a)),o0},{e:void 0,t:void 0,a:void 0}),a0})()}if(h.kind==="file"){let Z0=" ".repeat(h.depth);return(()=>{var F0=W("box"),a0=W("box"),r0=W("text");return D(F0,a0),q(F0,"flexDirection","row"),q(F0,"gap",0),q(F0,"onMouseUp",()=>{f(G0()),J.onOpenFile(h.path)}),U(F0,H0,a0),D(a0,r0),q(a0,"flexGrow",1),q(a0,"paddingRight",1),q(r0,"wrapMode","none"),U(r0,()=>`${Z0} ${h.name}`),x((u0)=>{var o0=b0(),d=z.text;return o0!==u0.e&&(u0.e=q(F0,"backgroundColor",o0,u0.e)),d!==u0.t&&(u0.t=q(r0,"fg",d,u0.t)),u0},{e:void 0,t:void 0}),F0})()}let w0=Qx(h.status),y0=()=>{switch(w0){case"success":return z.success;case"warning":return z.warning;case"error":return z.error;case"info":return z.info;default:return z.textMuted}},p0=y(),v=h.added==null?" ".repeat(p0.added):`+${h.added}`.padStart(p0.added),M0=h.deleted==null?" ".repeat(p0.deleted):`-${h.deleted}`.padStart(p0.deleted);return(()=>{var Z0=W("box"),F0=W("box"),a0=W("text"),r0=W("text");return D(Z0,F0),q(Z0,"flexDirection","row"),q(Z0,"gap",0),q(Z0,"onMouseUp",()=>{f(G0()),J.onOpenFile(h.path)}),U(Z0,H0,F0),D(F0,a0),D(F0,r0),q(F0,"flexDirection","row"),q(F0,"flexGrow",1),q(F0,"gap",1),q(F0,"paddingRight",1),q(a0,"wrapMode","none"),U(a0,()=>h.status),q(r0,"wrapMode","none"),q(r0,"flexGrow",1),U(r0,()=>SM(h.path,a())),U(F0,b(X0,{get when(){return p0.added>0},get children(){var u0=W("text");return q(u0,"wrapMode","none"),U(u0,v),x((o0)=>q(u0,"fg",z.success,o0)),u0}}),null),U(F0,b(X0,{get when(){return p0.deleted>0},get children(){var u0=W("text");return q(u0,"wrapMode","none"),U(u0,M0),x((o0)=>q(u0,"fg",z.error,o0)),u0}}),null),x((u0)=>{var o0=b0(),d=y0(),f0=z.text;return o0!==u0.e&&(u0.e=q(Z0,"backgroundColor",o0,u0.e)),d!==u0.t&&(u0.t=q(a0,"fg",d,u0.t)),f0!==u0.a&&(u0.a=q(r0,"fg",f0,u0.a)),u0},{e:void 0,t:void 0,a:void 0}),Z0})()}})),I}}),null),U(_,b(X0,{get when(){return J.worktreePath()!=null},get children(){var I=W("box"),h=W("text");return D(I,h),q(I,"flexDirection","row"),q(I,"paddingTop",1),q(I,"flexShrink",0),q(h,"wrapMode","none"),U(h,()=>M("files.footer.openHint")),x((G0)=>q(h,"fg",z.textMuted,G0)),I}}),null),_})()}var qx;var EM=N(()=>{w();w();w();w();w();w();w();w();w();GJ();w();j1();v1();t9();JW();bM();xM();qx=["all","changes"]});var wM=N(()=>{EM();t9();JW()});function hM(J,z){if(z<3)return 2500;return Math.min(J*2,20000)}function vM(J,z,Y){if(z)return 1500;if(Y==="running")return 1500;return Math.min(J*2,6000)}var PM=2500,MQ=1500;import{promises as Bx}from"fs";import jx from"path";async function bH(J,z){let Y=new AbortController,Z=setTimeout(()=>Y.abort(),Wx);try{let G=await zY("git",z,{cwd:J,env:vJ(),signal:Y.signal});if(Y.signal.aborted)return null;if(G.status!==0)return null;return G.stdout.trim()}finally{clearTimeout(Z)}}async function Vx(J){return await bH(J,["rev-parse","--abbrev-ref","HEAD"])||"HEAD"}async function Kx(J){let z=await bH(J,["symbolic-ref","refs/remotes/origin/HEAD","--short"]);if(!z)return"main";return z.startsWith("origin/")?z.slice(7):z}async function Ux(J){let z=await bH(J,["rev-parse","--abbrev-ref","@{u}"]);return z!==null&&z.length>0}async function Dx(J){let z=await bH(J,["status","--porcelain"]);if(!z)return 0;return z.split(`
280
+ `).filter((Y)=>Y.length>0).length}async function Lx(J){let[z,Y,Z,G]=await Promise.all([Vx(J),Kx(J),Ux(J),Dx(J)]);return{branch:z,targetBranch:Y,hasUpstream:Z,dirtyCount:G}}function Mx(J){if(J<=0)return"There are no uncommitted changes.";if(J===1)return"There is 1 uncommitted change.";return`There are ${J} uncommitted changes.`}function Fx(J){return J?"The current branch tracks an upstream.":"There is no upstream branch yet."}function Ox(J,z){let Y={branch:z.branch,targetBranch:z.targetBranch,dirtyCountSentence:Mx(z.dirtyCount),upstreamSentence:Fx(z.hasUpstream)};return J.replace(/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/g,(Z,G)=>Object.hasOwn(Y,G)?Y[G]:Z)}async function Ax(J){let z=jx.join(J,".kobe","pr-instructions.md");try{let Y=await Bx.readFile(z,"utf8");return Y.length>0?Y:mM}catch{return mM}}async function cM(J){let[z,Y]=await Promise.all([Ax(J),Lx(J)]);return Ox(z,Y)}var Wx=5000,mM=`The user likes the current state of the code.
281
281
 
282
282
  {{dirtyCountSentence}}
283
283
  The current branch is {{branch}}.
@@ -294,16 +294,16 @@ Follow these steps to create a PR:
294
294
  - Push to origin.
295
295
  - 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.
296
296
 
297
- If any of these steps fail, ask the user for help.`;var EM=N(()=>{yJ();JX()});var N9={};H1(N9,{startOpsPreview:()=>ST,startOpsHost:()=>gT,nextActivityPollDelay:()=>hM});import{createHash as KT}from"crypto";import{SyntaxStyle as UT}from"@opentui/core";function hM(f,Y){if(Y<LT)return wM;return Math.min(f*2,DT)}function AT(f){let{theme:Y}=n0(),[J,z]=p(0),[Z,G]=p(0),Q=!1;r1(()=>{let M=!1,R,S=wM,a=0,b=0;async function g(){try{let C=await HM(f.vendor,f.worktree);if(M)return;if(!Q)Q=!0,z(C),b=C;if(C>b)b=C,a=0;else a++;G(C)}catch{a++}finally{if(!M)S=hM(S,a),R=setTimeout(()=>void g(),S)}}g(),b1(()=>{if(M=!0,R)clearTimeout(R)})});let q=()=>Q&&Z()>J(),H=()=>q()?{text:F("ops.badge.newActivity"),active:!0}:null;function B(){z(Z())}r1(()=>{if(!f.targetPane)return;let M=FV(f.vendor),R=!1,S=null,a="",b=!1,g=0,C=null;async function y(J0){if(J0===C)return;C=J0,await CJ(f.targetPane,OT,J0)}async function r(){try{a=xM(await fZ(f.targetPane,80)),S=(await M.latestCompletion(f.worktree))?.id??null,await y(M.supportsCompletionMarkers()?"idle":"unknown")}catch{}}async function z0(){try{let J0=xM(await fZ(f.targetPane,80));if(R)return;if(J0!==a)a=J0,b=!0,g=0,await y(M.supportsCompletionMarkers()?"running":"unknown");else if(b)g++;if(!M.supportsCompletionMarkers()||!b||g<FT)return;let T=await M.latestCompletion(f.worktree);if(R||!T||T.id===S)return;S=T.id,b=!1,g=0,await y("done")}catch{}}r();let t=setInterval(()=>void z0(),MT);b1(()=>{R=!0,clearInterval(t)})});function V(M){if(!f.taskId)return;HY(L1(f.taskId),{cwd:f.worktree,command:dW({worktree:f.worktree,relPath:M,cliInvocation:C1()}),name:RT(M)})}function j(M){if(!f.taskId){V(M);return}let R=`${f.worktree}/${M}`;KM(L1(f.taskId),f.worktree,R).then((S)=>{if(!S)V(M)})}function K(M){if(!f.targetPane)return;qQ(f.targetPane,`@${M} `)}async function L(){if(!f.targetPane)return;let M=await uM(f.worktree);await qQ(f.targetPane,M),await KG(f.targetPane,"Enter")}function O(){if(!f.taskId)return;let M=L1(f.taskId),R=C1(),S=`${o1()}${Rf(R)} layout --session ${G1(M)} --action zen-toggle`;h0(["run-shell","-b",S])}return(()=>{var M=W("box");return X(M,"flexDirection","column"),X(M,"flexGrow",1),U(M,k(C9,{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((R)=>X(M,"backgroundColor",Y.background,R)),M})()}function RT(f){let Y=f.lastIndexOf("/");return Y>=0?f.slice(Y+1):f}function xM(f){return KT("sha1").update(f).digest("hex")}async function gT(f){await Mf({logContext:"ops",providers:{kv:!1,focus:!1},setup:()=>({root:()=>k(AT,f)})})}function CT(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 NT(f,Y){let J=await zZ(f,["diff","HEAD","--",Y]);return J.status===0?J.stdout:""}async function bT(f,Y){return await c7(f,Y)??""}function kT(f){let Y={fg:f.primary},J={fg:f.success},z={fg:f.info},Z={fg:f.warning},G={fg:f.accent},Q={fg:f.textMuted,italic:!0},q={fg:f.textMuted},H={fg:f.text};return UT.fromStyles({keyword:Y,"keyword.function":Y,"keyword.return":Y,"keyword.import":Y,"keyword.exception":Y,"keyword.conditional":Y,"keyword.repeat":Y,"keyword.operator":Y,"keyword.modifier":Y,"keyword.type":Y,string:J,"string.escape":J,"string.regexp":J,"string.special":J,"character.special":J,comment:Q,"comment.documentation":Q,function:z,"function.call":z,"function.method":z,"function.builtin":z,constructor:z,type:Z,"type.builtin":Z,constant:G,"constant.builtin":G,boolean:G,number:G,operator:q,"punctuation.bracket":q,"punctuation.delimiter":q,"punctuation.special":q,variable:H,"variable.member":H,"variable.parameter":H,"variable.builtin":G,property:H,attribute:Z,label:H,module:H})}function yT(f){let{theme:Y}=n0(),J=kT(Y),z=CT(f.relPath),[Z]=tX(()=>f.relPath,async(G)=>{let Q=await NT(f.worktree,G);if(Q.trim().length>0)return{kind:"diff",text:Q};return{kind:"code",text:await bT(f.worktree,G)}});return U1(()=>({bindings:[{key:"q",cmd:()=>process.exit(0)},{key:"escape",cmd:()=>process.exit(0)},{key:"ctrl+c",cmd:()=>process.exit(0)}]})),(()=>{var G=W("box"),Q=W("box"),q=W("text"),H=W("text"),B=W("text"),V=W("box");return D(G,Q),D(G,V),X(G,"flexDirection","column"),X(G,"flexGrow",1),D(Q,q),D(Q,H),D(Q,B),X(Q,"flexDirection","row"),X(Q,"gap",1),X(Q,"paddingLeft",1),X(Q,"paddingRight",1),U(q,()=>f.relPath),U(H,(()=>{var j=T0(()=>Z()?.kind==="diff");return()=>j()?F("ops.preview.diffVsHead"):F("ops.preview.file")})()),U(B,()=>F("ops.preview.closeHint")),X(V,"flexGrow",1),U(V,k(G0,{get when(){return Z()},get fallback(){return(()=>{var j=W("text");return U(j,()=>F("ops.preview.loading")),E((K)=>X(j,"fg",Y.textMuted,K)),j})()},children:(j)=>k(G0,{get when(){return j().kind==="diff"},get fallback(){return(()=>{var K=W("code");return X(K,"filetype",z),X(K,"syntaxStyle",J),E((L)=>X(K,"content",j().text,L)),K})()},get children(){var K=W("diff");return X(K,"view","unified"),X(K,"filetype",z),X(K,"syntaxStyle",J),X(K,"showLineNumbers",!0),E((L)=>X(K,"diff",j().text,L)),K}})})),E((j)=>{var{background:K,accent:L,textMuted:O,textMuted:M}=Y;return K!==j.e&&(j.e=X(G,"backgroundColor",K,j.e)),L!==j.t&&(j.t=X(q,"fg",L,j.t)),O!==j.a&&(j.a=X(H,"fg",O,j.a)),M!==j.o&&(j.o=X(B,"fg",M,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),G})()}async function ST(f){await Mf({providers:{kv:!1,focus:!1},setup:()=>({root:()=>k(yT,f)})})}var wM=2500,DT=20000,LT=3,MT=1500,FT=2,OT="@kobe_tab_state";var b9=N(()=>{h();h();h();h();h();h();h();pY();GB();BM();u1();UM();ZY();AQ();B1();w1();e1();aJ();Sf();IM();Wz();EM()});var cM={};H1(cM,{startDirectTmux:()=>TT,chooseInitialTask:()=>mM});import{resolve as PM}from"path";function mM(f,Y={}){let J=(Q)=>Q?f.find((q)=>q.id===Q):void 0,z=J(Y.activeTaskId);if(z)return z;let Z=J(Y.persistedTaskId);if(Z)return Z;if(Y.cwdRepo){let Q=f.find((q)=>q.kind==="main"&&q.repo===Y.cwdRepo);if(Q)return Q}let G=f.filter((Q)=>!Q.archived);return G.find((Q)=>Q.pinned)??G[0]??f[0]}async function vM(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 IT(f){FH();let Y=[...Of()];if(Y.length===0)Y=[nY(PM(process.cwd())).path];for(let J of Y)try{await f.ensureMainTask(J)}catch(z){console.error(`[kobe] ensureMainTask failed for ${J}:`,z)}return Y[0]??PM(process.cwd())}async function TT(){if(AX("gui"),Promise.resolve().then(() => (Xj(),Gj)).then((J)=>J.ensureGlobalKobeHooks()),!await bY()){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 KY(),Y=new Vf(f,{role:"gui"});try{process.env.KOBE_DAEMON_SOCKET_PATH=f.socketPath,await Y.init();let J=await IT(Y),z=mM(Y.listTasks(),{activeTaskId:Y.activeTaskSignal()(),persistedTaskId:k1("lastSelectedTaskId"),cwdRepo:J});if(!z){let V=await HQ();if(await bz(),await Gq(V),await vM(tz(V))===null)console.error("kobe: failed to attach to the kobe-home session"),process.exitCode=1;return}let Z=z.worktreePath||await Y.ensureWorktree(z.id),G=L1(z.id);await Y.setActiveTask(z.id).catch(()=>{}),l1("lastSelectedTaskId",z.id);let Q=YJ(z.repo,Z,{kind:"repo-init"});if(!await EJ({name:G,cwd:Z,command:yf(z.vendor),taskId:z.id,vendor:z.vendor,repo:z.repo,launchInit:Q})){console.error(`kobe: tmux session ${G} failed to start (check the daemon log)`),process.exitCode=1;return}await bz(),await Gq(G);let H=await vM(tz(G));if(H===null){console.error(`kobe: failed to attach to tmux session ${G}`),process.exitCode=1;return}if(H!==0&&!await j1(G)){console.error(`kobe: tmux session ${G} ended unexpectedly (attach exited ${H})`),process.exitCode=H;return}let B=Y.getTask(z.id);if(B&&B.title===NY&&B.worktreePath)try{let V=await lz(B.worktreePath,B.vendor);if(V)await Y.setTitle(B.id,V)}catch(V){console.error("[kobe] auto-title failed:",V)}}finally{Y.dispose()}}var nM=N(()=>{Yz();Lf();nJ();Ef();lX();BG();jZ();A1();u1();nQ();Gf()});var dM={};H1(dM,{startTui:()=>uT});async function uT(){U6();let{startDirectTmux:f}=await Promise.resolve().then(() => (nM(),cM));await f()}var iM=N(()=>{Nq()});XH();$1();import{resolve as y9}from"path";Df();function i9(){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(`
298
- `)}var lM=`Usage: kobe add [path]
297
+ If any of these steps fail, ask the user for help.`;var dM=N(()=>{xY();VQ()});var ZW={};B1(ZW,{startOpsPreview:()=>Ex,startOpsHost:()=>Sx});import{createHash as Rx}from"crypto";import{SyntaxStyle as gx}from"@opentui/core";function kx(J){let{theme:z}=d0(),[Y,Z]=p(null),G=!1;JJ(()=>{(async()=>{let O=await HH({logTag:"ops-activity",channels:["transcript.activity"]});if(!O)return;if(G){O.dispose();return}Z(O)})()}),N1(()=>{G=!0,Y()?.dispose()});let X=()=>Y()?.transcriptActivitySignal()()??null,Q=()=>X()?.get(J.worktree)??null,[f,H]=p(0),[B,V]=p(0),j=!1;Y1(()=>{let O=X();if(!O)return;let C=O.get(J.worktree)?.mtimeMs??0;if(!j&&C>0)j=!0,H(C);V(C)}),Y1(()=>{if(X()!==null)return;let O=!1,C,y=PM,a=0,l=0;async function t(){try{let J0=await rZ(J.vendor,J.worktree);if(O)return;if(!j)j=!0,H(J0),l=J0;if(J0>l)l=J0,a=0;else a++;V(J0)}catch{a++}finally{if(!O)y=hM(y,a),C=setTimeout(()=>void t(),y)}}t(),N1(()=>{if(O=!0,C)clearTimeout(C)})});let K=()=>j&&B()>f(),L=()=>K()?{text:M("ops.badge.newActivity"),active:!0}:null;function A(){H(B())}JJ(()=>{if(!J.targetPane)return;let O=BX(J.vendor),C=!1,y=null,a=!1,l="",t=!1,J0=0,T=null,Q0=MQ,r=0,W0,O0=()=>X()!==null;async function K0(o){if(o===T)return;T=o,await IY(J.targetPane,Nx,o)}async function _(){if(O0())return Q()?.completionId??null;return(await O.latestCompletion(J.worktree))?.id??null}async function P(){try{l=nM(await fG(J.targetPane,80)),y=await _(),a=!0,await K0(O.supportsCompletionMarkers()?"idle":"unknown")}catch{}}async function k(){let o=O0();try{let I=nM(await fG(J.targetPane,80));if(C)return;if(o&&!a)y=Q()?.completionId??null,a=!0;let h=o?Q()?.mtimeMs??0:0,G0=h>r;if(h>r)r=h;if(I!==l)l=I,t=!0,J0=0,await K0(O.supportsCompletionMarkers()?"running":"unknown");else if(t)J0++;if(O.supportsCompletionMarkers()&&t&&J0>=Cx){let q0=await _();if(!C&&q0!==null&&q0!==y)y=q0,t=!1,J0=0,await K0("done")}Q0=o?vM(Q0,G0,T):MQ}catch{Q0=MQ}finally{if(!C)W0=setTimeout(()=>void k(),Q0)}}P(),W0=setTimeout(()=>void k(),MQ),N1(()=>{if(C=!0,W0)clearTimeout(W0)})});function F(O){if(!J.taskId)return;Vz(M1(J.taskId),{cwd:J.worktree,command:L7({worktree:J.worktree,relPath:O,cliInvocation:k1()}),name:bx(O)})}function g(O){if(!J.taskId){F(O);return}let C=`${J.worktree}/${O}`;FM(M1(J.taskId),J.worktree,C).then((y)=>{if(!y)F(O)})}function u(O){if(!J.targetPane)return;Aq(J.targetPane,`@${O} `)}async function s(){if(!J.targetPane)return;let O=await cM(J.worktree);await Aq(J.targetPane,O),await gX(J.targetPane,"Enter")}function S(){if(!J.taskId)return;let O=M1(J.taskId),C=k1(),y=`${zJ()}${NJ(C)} layout --session ${X1(O)} --action zen-toggle`;P0(["run-shell","-b",y])}return(()=>{var O=W("box");return q(O,"flexDirection","column"),q(O,"flexGrow",1),U(O,b(YW,{worktreePath:()=>J.worktree,focused:()=>!0,onOpenFile:g,onMention:u,onCreatePR:()=>void s(),get onZenToggle(){return J.taskId?S:void 0},cornerBadge:L,onRefresh:A})),x((C)=>q(O,"backgroundColor",z.background,C)),O})()}function bx(J){let z=J.lastIndexOf("/");return z>=0?J.slice(z+1):J}function nM(J){return Rx("sha1").update(J).digest("hex")}async function Sx(J){await AJ({logContext:"ops",providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(kx,J)})})}function Ix(J){switch(J.slice(J.lastIndexOf(".")+1).toLowerCase()){case"ts":case"tsx":case"mts":case"cts":return"typescript";case"js":case"jsx":case"mjs":case"cjs":return"javascript";case"md":case"markdown":return"markdown";default:return}}async function yx(J,z){let Y=await WG(J,["diff","HEAD","--",z]);return Y.status===0?Y.stdout:""}async function Tx(J,z){return await p5(J,z)??""}function ux(J){let z={fg:J.primary},Y={fg:J.success},Z={fg:J.info},G={fg:J.warning},X={fg:J.accent},Q={fg:J.textMuted,italic:!0},f={fg:J.textMuted},H={fg:J.text};return gx.fromStyles({keyword:z,"keyword.function":z,"keyword.return":z,"keyword.import":z,"keyword.exception":z,"keyword.conditional":z,"keyword.repeat":z,"keyword.operator":z,"keyword.modifier":z,"keyword.type":z,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:f,"punctuation.bracket":f,"punctuation.delimiter":f,"punctuation.special":f,variable:H,"variable.member":H,"variable.parameter":H,"variable.builtin":X,property:H,attribute:G,label:H,module:H})}function xx(J){let{theme:z}=d0(),Y=ux(z),Z=Ix(J.relPath),[G]=Wq(()=>J.relPath,async(X)=>{let Q=await yx(J.worktree,X);if(Q.trim().length>0)return{kind:"diff",text:Q};return{kind:"code",text:await Tx(J.worktree,X)}});return D1(()=>({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"),f=W("text"),H=W("text"),B=W("text"),V=W("box");return D(X,Q),D(X,V),q(X,"flexDirection","column"),q(X,"flexGrow",1),D(Q,f),D(Q,H),D(Q,B),q(Q,"flexDirection","row"),q(Q,"gap",1),q(Q,"paddingLeft",1),q(Q,"paddingRight",1),U(f,()=>J.relPath),U(H,(()=>{var j=T0(()=>G()?.kind==="diff");return()=>j()?M("ops.preview.diffVsHead"):M("ops.preview.file")})()),U(B,()=>M("ops.preview.closeHint")),q(V,"flexGrow",1),U(V,b(X0,{get when(){return G()},get fallback(){return(()=>{var j=W("text");return U(j,()=>M("ops.preview.loading")),x((K)=>q(j,"fg",z.textMuted,K)),j})()},children:(j)=>b(X0,{get when(){return j().kind==="diff"},get fallback(){return(()=>{var K=W("code");return q(K,"filetype",Z),q(K,"syntaxStyle",Y),x((L)=>q(K,"content",j().text,L)),K})()},get children(){var K=W("diff");return q(K,"view","unified"),q(K,"filetype",Z),q(K,"syntaxStyle",Y),q(K,"showLineNumbers",!0),x((L)=>q(K,"diff",j().text,L)),K}})})),x((j)=>{var{background:K,accent:L,textMuted:A,textMuted:F}=z;return K!==j.e&&(j.e=q(X,"backgroundColor",K,j.e)),L!==j.t&&(j.t=q(f,"fg",L,j.t)),A!==j.a&&(j.a=q(H,"fg",A,j.a)),F!==j.o&&(j.o=q(B,"fg",F,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),X})()}async function Ex(J){await AJ({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(xx,J)})})}var Cx=2,Nx="@kobe_tab_state";var GW=N(()=>{w();w();w();w();w();w();w();sz();eQ();Jq();P1();OM();fz();cq();j1();M9();v1();GJ();rY();uJ();wM();DZ();dM()});var aM={};B1(aM,{startDirectTmux:()=>Px,chooseInitialTask:()=>$M});import{resolve as iM}from"path";function $M(J,z={}){let Y=(Q)=>Q?J.find((f)=>f.id===Q):void 0,Z=Y(z.activeTaskId);if(Z)return Z;let G=Y(z.persistedTaskId);if(G)return G;if(z.cwdRepo){let Q=J.find((f)=>f.kind==="main"&&f.repo===z.cwdRepo);if(Q)return Q}let X=J.filter((Q)=>!Q.archived);return X.find((Q)=>Q.pinned)??X[0]??J[0]}async function lM(J){if(J.length===0)return null;try{return await Bun.spawn(J,{stdin:"inherit",stdout:"inherit",stderr:"inherit",env:process.env}).exited}catch{return null}}async function wx(J){dH();let z=[...gJ()];if(z.length===0)z=[$z(iM(process.cwd())).path];for(let Y of z)try{await J.ensureMainTask(Y)}catch(Z){console.error(`[kobe] ensureMainTask failed for ${Y}:`,Z)}return z[0]??iM(process.cwd())}async function Px(){if(xQ("gui"),Promise.resolve().then(() => (hj(),Pj)).then((Y)=>Y.ensureGlobalKobeHooks()),!await yz()){console.error("kobe: tmux not found on PATH \u2014 install tmux to use kobe 0.6 direct mode"),process.exitCode=1;return}let J=await Fz(),z=new DJ(J,{role:"gui"});try{process.env.KOBE_DAEMON_SOCKET_PATH=J.socketPath,await z.init();let Y=await wx(z),Z=$M(z.listTasks(),{activeTaskId:z.activeTaskSignal()(),persistedTaskId:S1("lastSelectedTaskId"),cwdRepo:Y});if(!Z){let V=await Rq();if(await TZ(),await Nf(V),await lM(QG(V))===null)console.error("kobe: failed to attach to the kobe-home session"),process.exitCode=1;return}let G=Z.worktreePath||await z.ensureWorktree(Z.id),X=M1(Z.id);await z.setActiveTask(Z.id).catch(()=>{}),r1("lastSelectedTaskId",Z.id);let Q=XY(Z.repo,G,{kind:"repo-init"});if(!await vY({name:X,cwd:G,command:TJ(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 TZ(),await Nf(X);let H=await lM(QG(X));if(H===null){console.error(`kobe: failed to attach to tmux session ${X}`),process.exitCode=1;return}if(H!==0&&!await W1(X)){console.error(`kobe: tmux session ${X} ended unexpectedly (attach exited ${H})`),process.exitCode=H;return}let B=z.getTask(Z.id);if(B&&B.title===Iz&&B.worktreePath)try{let V=await oZ(B.worktreePath,B.vendor);if(V)await z.setTitle(B.id,V)}catch(V){console.error("[kobe] auto-title failed:",V)}}finally{z.dispose()}}var _M=N(()=>{XZ();OJ();$Y();hJ();Gq();FX();OG();O1();P1();Qf();fJ()});var pM={};B1(pM,{startTui:()=>hx});async function hx(){C4();let{startDirectTmux:J}=await Promise.resolve().then(() => (_M(),aM));await J()}var rM=N(()=>{af()});SH();t1();import{resolve as QW}from"path";FJ();function AW(){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(`
298
+ `)}var oM=`Usage: kobe add [path]
299
299
  kobe add --remote --host <host> --user <user> --path <basePath> [--port N] [--key <path> | --password]
300
300
 
301
301
  Save a repo for the new-task picker. With --remote, register an SSH-backed
302
302
  project whose worktrees + engine run on <host> under <basePath>.
303
- `;async function ET(f){let Y=f[0];if(Y==="--help"||Y==="-h"||Y==="help"){process.stdout.write(lM);return}if(Y==="--remote"){let{runAddRemote:Q}=await Promise.resolve().then(() => (GW(),ZW));await Q(f.slice(1));return}if(Y?.startsWith("-"))process.stderr.write(`kobe add: unknown flag "${Y}"
303
+ `;async function vx(J){let z=J[0];if(z==="--help"||z==="-h"||z==="help"){process.stdout.write(oM);return}if(z==="--remote"){let{runAddRemote:Q}=await Promise.resolve().then(() => (hW(),PW));await Q(J.slice(1));return}if(z?.startsWith("-"))process.stderr.write(`kobe add: unknown flag "${z}"
304
304
 
305
- ${lM}`),process.exit(2);let J=y9(process.cwd(),Y&&Y.length>0?Y:"."),{addSavedRepo:z,isGitRepo:Z}=await Promise.resolve().then(() => (A1(),iY));if(!Z(J))process.stderr.write(`kobe add: "${Y&&Y.length>0?Y:"."}" is not a git repository (resolved to ${J}).
306
- `),process.exit(1);let G=z(J);if(G.added)console.log(`added ${G.path} (${G.total} saved repo${G.total===1?"":"s"} total)`);else console.log(`already saved: ${G.path}`);await wT(G.path)}var aM=`Usage: kobe remove [path]
305
+ ${oM}`),process.exit(2);let Y=QW(process.cwd(),z&&z.length>0?z:"."),{addSavedRepo:Z,isGitRepo:G}=await Promise.resolve().then(() => (O1(),_z));if(!G(Y))process.stderr.write(`kobe add: "${z&&z.length>0?z:"."}" is not a git repository (resolved to ${Y}).
306
+ `),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 cx(X.path)}var sM=`Usage: kobe remove [path]
307
307
 
308
308
  Forget a saved project (drop it from the new-task picker). Non-destructive:
309
309
  the repo's files, worktrees, branches and tasks all stay on disk. A remote
@@ -312,19 +312,19 @@ the repo's files, worktrees, branches and tasks all stay on disk. A remote
312
312
  path defaults to the current directory. Pass an exact saved entry (e.g. a
313
313
  remote \`ssh://user@host\` key) to remove it verbatim. Run with no match to
314
314
  print the current saved projects.
315
- `;async function xT(f){let Y=f[0];if(Y==="--help"||Y==="-h"||Y==="help"){process.stdout.write(aM);return}if(Y?.startsWith("-"))process.stderr.write(`kobe remove: unknown flag "${Y}"
315
+ `;async function mx(J){let z=J[0];if(z==="--help"||z==="-h"||z==="help"){process.stdout.write(sM);return}if(z?.startsWith("-"))process.stderr.write(`kobe remove: unknown flag "${z}"
316
316
 
317
- ${aM}`),process.exit(2);let{getSavedRepos:J,resolveRepoRoot:z}=await Promise.resolve().then(() => (A1(),iY)),Z=J();if(Z.length===0){console.log("no saved projects to remove.");return}let G=Y&&Y.length>0?Y:".",Q=Z.includes(G)?G:(()=>{let V=y9(process.cwd(),G),j=z(V);if(Z.includes(j))return j;if(Z.includes(V))return V;return null})();if(Q===null){process.stderr.write(`kobe remove: "${G}" is not a saved project.
317
+ ${sM}`),process.exit(2);let{getSavedRepos:Y,resolveRepoRoot:Z}=await Promise.resolve().then(() => (O1(),_z)),G=Y();if(G.length===0){console.log("no saved projects to remove.");return}let X=z&&z.length>0?z:".",Q=G.includes(X)?X:(()=>{let V=QW(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.
318
318
 
319
319
  Saved projects:
320
- `);for(let V of Z)process.stderr.write(` ${V}
321
- `);process.exit(1)}let{connectIfRunning:q}=await Promise.resolve().then(() => (Lf(),Zq)),H=await q();try{if(H)await H.request("project.forget",{repo:Q});else await(await S9()).forgetProject(Q)}finally{H?.close()}let B=J().length;console.log(`removed ${Q} (${B} saved repo${B===1?"":"s"} left)`)}async function wT(f){let Y=await S9(),J;try{J=await Y.discoverAdoptableWorktrees(f)}catch(z){console.error(`(skipped worktree scan: ${z instanceof Error?z.message:String(z)})`);return}if(J.length===0)return;console.log(`scanning ${f}: ${J.length} unlinked worktree(s) \u2192 importing`),await pM(Y,f,J,pJ(void 0))}async function S9(){let{TaskIndexStore:f}=await Promise.resolve().then(() => (uG(),m8)),{GitWorktreeManager:Y}=await Promise.resolve().then(() => (n8(),DU)),{Orchestrator:J}=await Promise.resolve().then(() => (BG(),q7)),z=new f;return await z.load(),new J({store:z,worktrees:new Y})}async function pM(f,Y,J,z){let{connectIfRunning:Z}=await Promise.resolve().then(() => (Lf(),Zq)),G=await Z();try{for(let Q of J){let q=G?(await G.request("worktree.adopt",{repo:Y,worktreePath:Q.path,branch:Q.branch,vendor:z})).task:await f.adoptWorktree({repo:Y,worktreePath:Q.path,branch:Q.branch,vendor:z});console.log(` adopted ${Q.branch} \u2192 task ${q.id} (${q.title})`)}}finally{G?.close()}}var _M=["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(`
322
- `);function k9(f){process.stderr.write(`kobe adopt: ${f}
320
+ `);for(let V of G)process.stderr.write(` ${V}
321
+ `);process.exit(1)}let{connectIfRunning:f}=await Promise.resolve().then(() => (OJ(),Cf)),H=await f();try{if(H)await H.request("project.forget",{repo:Q});else await(await qW()).forgetProject(Q)}finally{H?.close()}let B=Y().length;console.log(`removed ${Q} (${B} saved repo${B===1?"":"s"} left)`)}async function cx(J){let z=await qW(),Y;try{Y=await z.discoverAdoptableWorktrees(J)}catch(Z){console.error(`(skipped worktree scan: ${Z instanceof Error?Z.message:String(Z)})`);return}if(Y.length===0)return;console.log(`scanning ${J}: ${Y.length} unlinked worktree(s) \u2192 importing`),await eM(z,J,Y,sY(void 0))}async function qW(){let{TaskIndexStore:J}=await Promise.resolve().then(() => (iX(),Dj)),{GitWorktreeManager:z}=await Promise.resolve().then(() => (Mj(),NU)),{Orchestrator:Y}=await Promise.resolve().then(() => (FX(),mV)),Z=new J;return await Z.load(),new Y({store:Z,worktrees:new z})}async function eM(J,z,Y,Z){let{connectIfRunning:G}=await Promise.resolve().then(() => (OJ(),Cf)),X=await G();try{for(let Q of Y){let f=X?(await X.request("worktree.adopt",{repo:z,worktreePath:Q.path,branch:Q.branch,vendor:Z})).task:await J.adoptWorktree({repo:z,worktreePath:Q.path,branch:Q.branch,vendor:Z});console.log(` adopted ${Q.branch} \u2192 task ${f.id} (${f.title})`)}}finally{X?.close()}}var JF=["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(`
322
+ `);function XW(J){process.stderr.write(`kobe adopt: ${J}
323
323
 
324
- ${_M}
325
- `),process.exit(2)}async function hT(f){let Y,J,z,Z=!1;for(let K=0;K<f.length;K++){let L=f[K];if(L==="--help"||L==="-h"||L==="help"){process.stdout.write(`${_M}
326
- `);return}if(L==="--repo"){if(J=f[++K],J===void 0)k9("--repo requires a value")}else if(L==="--vendor"){if(z=f[++K],z===void 0)k9("--vendor requires a value")}else if(L==="--yes"||L==="-y")Z=!0;else if(L&&!L.startsWith("-")&&Y===void 0)Y=L;else k9(`unexpected argument "${L}"`)}let{resolveRepoRoot:G}=await Promise.resolve().then(() => (A1(),iY)),Q=G(y9(process.cwd(),J&&J.length>0?J:".")),q=pJ(z),H=await S9(),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)=>!Y||qX(Y,K.path);console.log(`adoptable worktrees in ${Q}:`);for(let K of B){let L=Y?V(K)?"*":" ":"-",O=[K.dirty?"dirty":"",K.kobeManaged?"":"external"].filter(Boolean).join(",");console.log(` ${L} ${K.branch} ${K.path}${O?` (${O})`:""}`)}if(!Y){console.log(`
324
+ ${JF}
325
+ `),process.exit(2)}async function dx(J){let z,Y,Z,G=!1;for(let K=0;K<J.length;K++){let L=J[K];if(L==="--help"||L==="-h"||L==="help"){process.stdout.write(`${JF}
326
+ `);return}if(L==="--repo"){if(Y=J[++K],Y===void 0)XW("--repo requires a value")}else if(L==="--vendor"){if(Z=J[++K],Z===void 0)XW("--vendor requires a value")}else if(L==="--yes"||L==="-y")G=!0;else if(L&&!L.startsWith("-")&&z===void 0)z=L;else XW(`unexpected argument "${L}"`)}let{resolveRepoRoot:X}=await Promise.resolve().then(() => (O1(),_z)),Q=X(QW(process.cwd(),Y&&Y.length>0?Y:".")),f=sY(Z),H=await qW(),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)=>!z||OQ(z,K.path);console.log(`adoptable worktrees in ${Q}:`);for(let K of B){let L=z?V(K)?"*":" ":"-",A=[K.dirty?"dirty":"",K.kobeManaged?"":"external"].filter(Boolean).join(",");console.log(` ${L} ${K.branch} ${K.path}${A?` (${A})`:""}`)}if(!z){console.log(`
327
327
  pass a path glob to adopt, e.g. kobe adopt '${Q}/*' --yes`);return}let j=B.filter(V);if(j.length===0){console.log(`
328
- no worktrees match glob ${JSON.stringify(Y)}`);return}if(!Z){console.log(`
329
- ${j.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await pM(H,Q,j,q),console.log(`done \u2014 adopted ${j.length} worktree(s)`)}function $M(f){f.write(`${i9()}
330
- `)}function FY(f){let Y={};for(let J=0;J<f.length;J++){let z=f[J],Z=f[J+1];if(Z===void 0)continue;if(z==="--task-id")Y.taskId=Z,J++;else if(z==="--worktree")Y.worktree=Z,J++;else if(z==="--target-pane")Y.targetPane=Z,J++;else if(z==="--vendor")Y.vendor=Z,J++;else if(z==="--preview")Y.preview=Z,J++;else if(z==="--session")Y.session=Z,J++;else if(z==="--repo")Y.repo=Z,J++;else if(z==="--initial-task-id")Y.initialTaskId=Z,J++;else if(z==="--action")Y.action=Z,J++;else if(z==="--window")Y.windowId=Z,J++;else if(z==="--cols")Y.cols=Z,J++;else if(z==="--rows")Y.rows=Z,J++;else if(z==="--status")Y.status=Z,J++;else if(z==="--client")Y.client=Z,J++}return Y}async function PT(){let[,,...f]=process.argv,[Y,...J]=f;if(Y==="--version"||Y==="-v"||Y==="version"){let{CURRENT_VERSION:Z}=await Promise.resolve().then(() => (Df(),d9));console.log(`kobe ${Z}`);return}if(Y==="--help"||Y==="-h"||Y==="help"){$M(process.stdout);return}if(Y==="add"){await ET(J);return}if(Y==="remove"){await xT(J);return}if(Y==="completions"){let{runCompletionsSubcommand:Z}=await Promise.resolve().then(() => (OU(),FU));await Z(J);return}if(Y==="adopt"){await hT(J);return}if(Y==="export"){let{runExportSubcommand:Z}=await Promise.resolve().then(() => (NU(),CU));await Z(J);return}if(Y==="repo"){let{runRepoSubcommand:Z}=await Promise.resolve().then(() => (SU(),yU));await Z(J);return}if(Y==="api"){let{runApiSubcommand:Z}=await Promise.resolve().then(() => ($U(),aU));await Z(J);return}if(Y==="update"){let{runUpdateSubcommand:Z}=await Promise.resolve().then(() => (sU(),oU));await Z(J);return}if(Y==="theme"){let{runThemeSubcommand:Z}=await Promise.resolve().then(() => (J6(),Y6));await Z(J);return}if(Y==="feedback"){let{runFeedbackSubcommand:Z}=await Promise.resolve().then(() => (Q6(),X6));await Z(J);return}if(Y==="daemon"){let{runDaemonSubcommand:Z}=await Promise.resolve().then(() => (W6(),j6));await Z(J);return}if(Y==="doctor"){let{runDoctorSubcommand:Z}=await Promise.resolve().then(() => (kq(),bq));await Z(J);return}if(Y==="web"){let{runWebSubcommand:Z}=await Promise.resolve().then(() => (y6(),k6));await Z(J);return}if(Y==="reset"){let{runResetSubcommand:Z}=await Promise.resolve().then(() => (kq(),bq));await Z(J);return}if(Y==="reload"){let{runReloadSubcommand:Z}=await Promise.resolve().then(() => (kq(),bq));await Z(J);return}if(Y==="skill"){let{runSkillSubcommand:Z}=await Promise.resolve().then(() => (T6(),I6));await Z(J);return}if(Y==="hook"){let{runHookSubcommand:Z}=await Promise.resolve().then(() => (Xj(),Gj));await Z(J);return}if(Y==="new-chattab"){let Z=FY(J),G=Z.session;if(!G)console.error("kobe new-chattab: --session <name> is required"),process.exit(2);let{windowIsSurface:Q}=await Promise.resolve().then(() => (u1(),UG));if(await Q(G))return;let q;if(Z.vendor!==void 0){let B=Z.vendor.trim(),{getCustomEngineIds:V}=await Promise.resolve().then(() => (A1(),iY)),{isBuiltinVendor:j}=await Promise.resolve().then(() => ($1(),w9));if(!(j(B)||V().includes(B))){let O=[...m1,...V()].join(", "),M=`kobe: unknown engine '${B}' (known: ${O})`,{runTmux:R}=await Promise.resolve().then(() => (u1(),UG));await R(["display-message","-t",G,M]),console.error(M),process.exit(2)}q=B;let{setPersistedString:L}=await Promise.resolve().then(() => (A1(),iY));L("lastSelectedVendor",q)}let{newChatTab:H}=await Promise.resolve().then(() => (Gf(),_f));await H(G,q);return}if(Y==="kill-sessions"){let{runTmux:Z,KOBE_TMUX_SOCKET:G}=await Promise.resolve().then(() => (u1(),UG)),Q=await Z(["kill-server"]);console.log(Q===0?`kobe: killed all tmux sessions on the \`${G}\` socket`:`kobe: no tmux sessions to kill on the \`${G}\` socket`);return}if(Y==="quick-create"){let G=FY(J).session;if(!G)console.error("kobe quick-create: --session <name> is required"),process.exit(2);let{quickCreate:Q}=await Promise.resolve().then(() => (Gf(),_f));await Q(G);return}if(Y==="focus-tasks"){let Z=FY(J),G=Z.session;if(!G)console.error("kobe focus-tasks: --session <name> is required"),process.exit(2);let{windowIsSurface:Q}=await Promise.resolve().then(() => (u1(),UG));if(Z.windowId&&await Q(Z.windowId))return;let{selectTasksPane:q}=await Promise.resolve().then(() => (Gf(),_f));await q(G,{windowId:Z.windowId});return}if(Y==="heal-layout"){let G=FY(J).session;if(!G)console.error("kobe heal-layout: --session <name> is required"),process.exit(2);let{healSessionLayout:Q}=await Promise.resolve().then(() => (Gf(),_f)),{coalesceLayoutWork:q}=await Promise.resolve().then(() => (UZ(),iQ));await q(G,"heal",()=>Q(G));return}if(Y==="resync-window"){let Z=FY(J),G=Z.session;if(!G)console.error("kobe resync-window: --session <name> is required"),process.exit(2);let Q=Number.parseInt(Z.cols??"",10),q=Number.parseInt(Z.rows??"",10),H=Number.isInteger(Q)&&Q>0&&Number.isInteger(q)&&q>0?{columns:Q,rows:q}:null,{resyncWindowToClient:B}=await Promise.resolve().then(() => (Gf(),_f)),{coalesceLayoutWork:V}=await Promise.resolve().then(() => (UZ(),iQ));await V(G,"resync",()=>B(G,{size:H,status:Z.status,clientName:Z.client}));return}if(Y==="capture-layout"){let G=FY(J).session;if(!G)console.error("kobe capture-layout: --session <name> is required"),process.exit(2);let{captureGlobalLayoutOnDrag:Q}=await Promise.resolve().then(() => (Gf(),_f)),{coalesceLayoutWork:q,genAgeMs:H,RESIZE_GUARD_MS:B}=await Promise.resolve().then(() => (UZ(),iQ));await q(G,"capture",async()=>{if(H(G,"resize")<B)return;await Q(G)});return}if(Y==="layout"){let Z=FY(J),G=Z.session;if(!G)console.error("kobe layout: --session <name> is required"),process.exit(2);let Q=Z.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(() => (Gf(),_f));await H(G,Q,{windowId:Z.windowId});return}if(Y==="quick-task"){let Z=FY(J),{startQuickTaskHost:G}=await Promise.resolve().then(() => (JL(),YL));await G({session:Z.session});return}if(Y==="tasks"){let Z=FY(J),{startTasksPane:G}=await Promise.resolve().then(() => (JM(),YM));await G({initialTaskId:Z.initialTaskId});return}if(Y==="settings"){let{startSettingsHost:Z}=await Promise.resolve().then(() => (ZM(),zM));await Z();return}if(Y==="help-page"){let{startHelpHost:Z}=await Promise.resolve().then(() => (XM(),GM));await Z();return}if(Y==="new-task"){let Z=FY(J),{startNewTaskHost:G}=await Promise.resolve().then(() => (rj(),p4));await G({defaultRepo:Z.repo});return}if(Y==="update-page"){let{startUpdateHost:Z}=await Promise.resolve().then(() => (qM(),QM));await Z();return}if(Y==="ops"){let Z=FY(J);if(!Z.worktree)console.error("kobe ops: --worktree <path> is required"),process.exit(2);if(Z.preview){let{startOpsPreview:Q}=await Promise.resolve().then(() => (b9(),N9));await Q({worktree:Z.worktree,relPath:Z.preview});return}let{startOpsHost:G}=await Promise.resolve().then(() => (b9(),N9));await G({taskId:Z.taskId??"",worktree:Z.worktree,targetPane:Z.targetPane??null,vendor:pJ(Z.vendor)});return}if(Y!==void 0)console.error(`kobe: unknown command '${Y}'`),$M(process.stderr),process.exit(2);let{startTui:z}=await Promise.resolve().then(() => (iM(),dM));await z()}PT().catch((f)=>{console.error("kobe failed to start:",f),process.exit(1)});
328
+ no worktrees match glob ${JSON.stringify(z)}`);return}if(!G){console.log(`
329
+ ${j.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await eM(H,Q,j,f),console.log(`done \u2014 adopted ${j.length} worktree(s)`)}function tM(J){J.write(`${AW()}
330
+ `)}function Cz(J){let z={};for(let Y=0;Y<J.length;Y++){let Z=J[Y],G=J[Y+1];if(G===void 0)continue;if(Z==="--task-id")z.taskId=G,Y++;else if(Z==="--worktree")z.worktree=G,Y++;else if(Z==="--target-pane")z.targetPane=G,Y++;else if(Z==="--vendor")z.vendor=G,Y++;else if(Z==="--preview")z.preview=G,Y++;else if(Z==="--session")z.session=G,Y++;else if(Z==="--repo")z.repo=G,Y++;else if(Z==="--initial-task-id")z.initialTaskId=G,Y++;else if(Z==="--action")z.action=G,Y++;else if(Z==="--window")z.windowId=G,Y++;else if(Z==="--cols")z.cols=G,Y++;else if(Z==="--rows")z.rows=G,Y++;else if(Z==="--status")z.status=G,Y++;else if(Z==="--client")z.client=G,Y++}return z}async function nx(){let[,,...J]=process.argv,[z,...Y]=J;if(z==="--version"||z==="-v"||z==="version"){let{CURRENT_VERSION:G}=await Promise.resolve().then(() => (FJ(),OW));console.log(`kobe ${G}`);return}if(z==="--help"||z==="-h"||z==="help"){tM(process.stdout);return}if(z==="add"){await vx(Y);return}if(z==="remove"){await mx(Y);return}if(z==="completions"){let{runCompletionsSubcommand:G}=await Promise.resolve().then(() => (IU(),SU));await G(Y);return}if(z==="adopt"){await dx(Y);return}if(z==="export"){let{runExportSubcommand:G}=await Promise.resolve().then(() => (EU(),xU));await G(Y);return}if(z==="repo"){let{runRepoSubcommand:G}=await Promise.resolve().then(() => (vU(),hU));await G(Y);return}if(z==="api"){let{runApiSubcommand:G}=await Promise.resolve().then(() => (z4(),J4));await G(Y);return}if(z==="update"){let{runUpdateSubcommand:G}=await Promise.resolve().then(() => (Q4(),X4));await G(Y);return}if(z==="theme"){let{runThemeSubcommand:G}=await Promise.resolve().then(() => (j4(),B4));await G(Y);return}if(z==="feedback"){let{runFeedbackSubcommand:G}=await Promise.resolve().then(() => (D4(),U4));await G(Y);return}if(z==="daemon"){let{runDaemonSubcommand:G}=await Promise.resolve().then(() => (A4(),O4));await G(Y);return}if(z==="doctor"){let{runDoctorSubcommand:G}=await Promise.resolve().then(() => (pf(),_f));await G(Y);return}if(z==="web"){let{runWebSubcommand:G}=await Promise.resolve().then(() => (h4(),P4));await G(Y);return}if(z==="reset"){let{runResetSubcommand:G}=await Promise.resolve().then(() => (pf(),_f));await G(Y);return}if(z==="reload"){let{runReloadSubcommand:G}=await Promise.resolve().then(() => (pf(),_f));await G(Y);return}if(z==="skill"){let{runSkillSubcommand:G}=await Promise.resolve().then(() => (c4(),m4));await G(Y);return}if(z==="hook"){let{runHookSubcommand:G}=await Promise.resolve().then(() => (hj(),Pj));await G(Y);return}if(z==="new-chattab"){let G=Cz(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(() => (P1(),CX));if(await Q(X))return;let f;if(G.vendor!==void 0){let B=G.vendor.trim(),{getCustomEngineIds:V}=await Promise.resolve().then(() => (O1(),_z)),{isBuiltinVendor:j}=await Promise.resolve().then(() => (t1(),VW));if(!(j(B)||V().includes(B))){let A=[...i1,...V()].join(", "),F=`kobe: unknown engine '${B}' (known: ${A})`,{runTmux:g}=await Promise.resolve().then(() => (P1(),CX));await g(["display-message","-t",X,F]),console.error(F),process.exit(2)}f=B;let{setPersistedString:L}=await Promise.resolve().then(() => (O1(),_z));L("lastSelectedVendor",f)}let{newChatTab:H}=await Promise.resolve().then(() => (fJ(),tJ));await H(X,f);return}if(z==="kill-sessions"){let{runTmux:G,KOBE_TMUX_SOCKET:X}=await Promise.resolve().then(() => (P1(),CX)),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(z==="quick-create"){let X=Cz(Y).session;if(!X)console.error("kobe quick-create: --session <name> is required"),process.exit(2);let{quickCreate:Q}=await Promise.resolve().then(() => (fJ(),tJ));await Q(X);return}if(z==="focus-tasks"){let G=Cz(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(() => (P1(),CX));if(G.windowId&&await Q(G.windowId))return;let{selectTasksPane:f}=await Promise.resolve().then(() => (fJ(),tJ));await f(X,{windowId:G.windowId});return}if(z==="heal-layout"){let X=Cz(Y).session;if(!X)console.error("kobe heal-layout: --session <name> is required"),process.exit(2);let{healSessionLayout:Q}=await Promise.resolve().then(() => (fJ(),tJ)),{coalesceLayoutWork:f}=await Promise.resolve().then(() => (CG(),ff));await f(X,"heal",()=>Q(X));return}if(z==="resync-window"){let G=Cz(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),f=Number.parseInt(G.rows??"",10),H=Number.isInteger(Q)&&Q>0&&Number.isInteger(f)&&f>0?{columns:Q,rows:f}:null,{resyncWindowToClient:B}=await Promise.resolve().then(() => (fJ(),tJ)),{coalesceLayoutWork:V}=await Promise.resolve().then(() => (CG(),ff));await V(X,"resync",()=>B(X,{size:H,status:G.status,clientName:G.client}));return}if(z==="capture-layout"){let X=Cz(Y).session;if(!X)console.error("kobe capture-layout: --session <name> is required"),process.exit(2);let{captureGlobalLayoutOnDrag:Q}=await Promise.resolve().then(() => (fJ(),tJ)),{coalesceLayoutWork:f,genAgeMs:H,RESIZE_GUARD_MS:B}=await Promise.resolve().then(() => (CG(),ff));await f(X,"capture",async()=>{if(H(X,"resize")<B)return;await Q(X)});return}if(z==="layout"){let G=Cz(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(() => (fJ(),tJ));await H(X,Q,{windowId:G.windowId});return}if(z==="quick-task"){let G=Cz(Y),{startQuickTaskHost:X}=await Promise.resolve().then(() => (H3(),f3));await X({session:G.session});return}if(z==="tasks"){let G=Cz(Y),{startTasksPane:X}=await Promise.resolve().then(() => (HM(),fM));await X({initialTaskId:G.initialTaskId});return}if(z==="settings"){let{startSettingsHost:G}=await Promise.resolve().then(() => (jM(),BM));await G();return}if(z==="help-page"){let{startHelpHost:G}=await Promise.resolve().then(() => (VM(),WM));await G();return}if(z==="new-task"){let G=Cz(Y),{startNewTaskHost:X}=await Promise.resolve().then(() => (b9(),J3));await X({defaultRepo:G.repo});return}if(z==="update-page"){let{startUpdateHost:G}=await Promise.resolve().then(() => (UM(),KM));await G();return}if(z==="ops"){let G=Cz(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(() => (GW(),ZW));await Q({worktree:G.worktree,relPath:G.preview});return}let{startOpsHost:X}=await Promise.resolve().then(() => (GW(),ZW));await X({taskId:G.taskId??"",worktree:G.worktree,targetPane:G.targetPane??null,vendor:sY(G.vendor)});return}if(z!==void 0)console.error(`kobe: unknown command '${z}'`),tM(process.stderr),process.exit(2);let{startTui:Z}=await Promise.resolve().then(() => (rM(),pM));await Z()}nx().catch((J)=>{console.error("kobe failed to start:",J),process.exit(1)});