@sma1lboy/kobe 0.7.45 → 0.7.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +195 -195
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -1,88 +1,88 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
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 ${
|
|
3
|
+
var WF=Object.defineProperty;var VF=(J)=>J;function KF(J,z){this[J]=VF.bind(null,z)}var j1=(J,z)=>{for(var Y in z)WF(J,Y,{get:z[Y],enumerable:!0,configurable:!0,set:KF.bind(z,Y)})};var k=(J,z)=>()=>(J&&(z=J(J=0)),z);var gQ=import.meta.require;import{basename as UF}from"path";function DF(J){let z="";for(let Y=0;Y<J.length;Y++){let G=J[Y];if(G==="*")if(J[Y+1]==="*")z+=".*",Y++;else z+="[^/]*";else if(G==="?")z+="[^/]";else if(G&&"\\^$.|+()[]{}".includes(G))z+=`\\${G}`;else z+=G}return new RegExp(`^${z}$`)}function CQ(J,z){let Y;try{Y=DF(J)}catch{return!1}return Y.test(z)||Y.test(UF(z))}var TH=()=>{};var DW={};j1(DW,{resolvePersistedVendor:()=>nz,prevVendorWithin:()=>uH,nextVendorWithin:()=>OY,nextVendor:()=>LF,isBuiltinVendor:()=>QJ,coerceVendorId:()=>tY,BUILTIN_VENDORS:()=>sY,ALL_VENDORS:()=>l1});function QJ(J){return J==="claude"||J==="codex"||J==="copilot"}function LF(J){let z=l1.indexOf(J);return l1[(z+1)%l1.length]??l1[0]}function OY(J,z){if(J.length===0)return z;let Y=J.indexOf(z);return J[(Y+1)%J.length]??J[0]??z}function uH(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 tY(J){let z=J?.trim();return z&&z.length>0?z:"claude"}function nz(J,z=[]){let Y=J?.trim();if(!Y)return"claude";if(QJ(Y))return Y;if(z.includes(Y))return Y;return"claude"}var sY,l1;var t1=k(()=>{sY=["claude","codex","copilot"],l1=[...sY]});var NQ;var LW=k(()=>{NQ={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.47",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 MW}from"crypto";import{homedir as FF}from"os";import{join as eY}from"path";function FW(){return process.env.KOBE_DEV==="1"}function Nz(){return process.env.KOBE_HOME_DIR??FF()}function qJ(){return eY(Nz(),".kobe")}function iJ(){return eY(Nz(),".config","kobe","state.json")}function OF(){return eY(qJ(),"settings")}function OW(){return eY(OF(),"keybindings.yaml")}function xH(){return eY(qJ(),"issue-assets")}function kQ(J,z,Y){let G=MW("sha1").update(`${z}@${J}:${Y??22}`).digest("hex").slice(0,16);return eY(qJ(),"ssh",`${G}.sock`)}function AW(J){let z=MW("sha1").update(J).digest("hex").slice(0,16);return eY(qJ(),"worktree-init",z)}var p1=()=>{};var gW={};j1(gW,{repoSlug:()=>JG,releasePageUrl:()=>vH,recommendedGlobalInstallCommand:()=>PH,isNewerSemver:()=>EH,fetchReleaseSummaries:()=>gF,fetchReleaseNotesRange:()=>hH,fetchReleaseNotes:()=>RF,compareSemver:()=>bQ,checkLatestVersion:()=>zZ,UPDATE_SCRIPT_URL:()=>SQ,UPDATE_COMMAND:()=>iz,PACKAGE_NAME:()=>wH,CURRENT_VERSION:()=>o0});function JG(){let J=NQ.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 PH(){return`npm install -g ${wH}@latest`}async function AF(J){let z=new AbortController,Y=setTimeout(()=>z.abort(),IQ);try{let G=J.replace("/","%2F"),X=await fetch(`https://registry.npmjs.org/${G}/latest`,{signal:z.signal,headers:{accept:"application/json"}});if(!X.ok)return null;let Z=await X.json();if(typeof Z.version!=="string")return null;return Z.version}catch{return null}finally{clearTimeout(Y)}}function EH(J,z){return bQ(J,z)>0}function bQ(J,z){let Y=(Z)=>Z.split("-")[0]??Z,G=Y(J).split(".").map((Z)=>Number.parseInt(Z,10)),X=Y(z).split(".").map((Z)=>Number.parseInt(Z,10));for(let Z=0;Z<3;Z++){let Q=G[Z]??0,f=X[Z]??0;if(Number.isNaN(Q)||Number.isNaN(f))return 0;if(Q>f)return 1;if(Q<f)return-1}return 0}async function zZ(J={}){let z=process.env.KOBE_FAKE_UPDATE;if(z)return{current:o0,latest:z,hasUpdate:EH(z,o0)};if(FW()&&!J.force)return null;let Y=await AF(wH);if(!Y)return null;return{current:o0,latest:Y,hasUpdate:EH(Y,o0)}}function RW(J){if(typeof J!=="string")return null;return J.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function RF(J){let z=JG();if(!z)return null;let Y=`v${J}`,G=new AbortController,X=setTimeout(()=>G.abort(),IQ);try{let Z=await fetch(`https://api.github.com/repos/${z}/releases/tags/${Y}`,{signal:G.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!Z.ok)return null;let Q=await Z.json();if(typeof Q.body!=="string"||typeof Q.html_url!=="string")return null;return{body:Q.body,url:Q.html_url,version:J}}catch{return null}finally{clearTimeout(X)}}async function hH(J){let z=JG();if(!z)return[];let Y=J.limit??100,G=new AbortController,X=setTimeout(()=>G.abort(),IQ);try{let Z=await fetch(`https://api.github.com/repos/${z}/releases?per_page=${Y}`,{signal:G.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!Z.ok)return[];let Q=await Z.json();if(!Array.isArray(Q))return[];return Q.map((f)=>{let H=RW(f.tag_name);if(!H||typeof f.html_url!=="string"||typeof f.body!=="string")return null;if(bQ(H,J.current)<=0)return null;if(bQ(H,J.latest)>0)return null;return{version:H,url:f.html_url,body:f.body}}).filter((f)=>f!==null)}catch{return[]}finally{clearTimeout(X)}}async function gF(J=12){let z=JG();if(!z)return[];let Y=new AbortController,G=setTimeout(()=>Y.abort(),IQ);try{let X=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(!X.ok)return[];let Z=await X.json();if(!Array.isArray(Z))return[];return Z.map((Q)=>{let f=RW(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(G)}}function vH(J){let z=JG();if(!z)return null;return`https://github.com/${z}/releases/tag/v${J}`}var o0,wH,SQ="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",iz,IQ=3000;var FJ=k(()=>{LW();p1();o0=NQ.version,wH=NQ.name;iz=`curl -fsSL ${SQ} | sh`});import{spawn as CF,spawnSync as NF}from"child_process";import{existsSync as NW}from"fs";import{mkdir as kF,readFile as bF,readdir as SF}from"fs/promises";function zG(J){return`'${J.replace(/'/g,"'\\''")}'`}function IF(J){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(J)?J:zG(J)}function bW(J){return J.map(zG).join(" ")}function yF(J,z){let Y=bW(J);return z?`cd ${zG(z)} && ${Y}`:Y}function TF(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,G])=>`${Y}=${zG(G)}`).join(" ")} `}function YZ(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 SW(J,z={}){return new Promise((Y)=>{let[G,...X]=J,Z="",Q="",f=!1,H=(V)=>{if(f)return;f=!0,Y({stdout:Z,stderr:Q,exitCode:V})},B;try{B=CF(G??"",X,{cwd:z.cwd,env:z.env,shell:!1,signal:z.signal})}catch{H(-1);return}B.stdout?.setEncoding("utf8"),B.stdout?.on("data",(V)=>{Z+=V}),B.stderr?.setEncoding("utf8"),B.stderr?.on("data",(V)=>{Q+=V}),B.on("error",()=>H(-1)),B.on("close",(V)=>H(V??-1))})}class yQ{isRemote=!1;run(J,z={}){return SW(J,{cwd:z.cwd,env:z.env?{...process.env,...z.env}:process.env,signal:z.signal})}async exists(J){return NW(J)}existsSync(J){return NW(J)}async mkdirp(J){await kF(J,{recursive:!0})}async readFile(J){try{return await bF(J,"utf8")}catch{return null}}async readdir(J){try{return await SF(J)}catch{return[]}}wrapCommand(J){return J}ensureReady(){}}class nG{spec;spawn;isRemote=!0;masterUp=!1;spawnAsync;constructor(J,z=kW,Y){this.spec=J;this.spawn=z;this.spawnAsync=Y??(this.spawn===kW?uF:async(G,X)=>this.spawn(G,X))}ensureReady(){if(this.masterUp)return;if(this.spawn([...YZ(this.spec,{batch:!0}),"-O","check"]).exitCode===0){this.masterUp=!0;return}let z=[...YZ(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=`${TF(z.env)}${bW(J)}`,G=z.cwd?`cd ${zG(z.cwd)} && ${Y}`:Y;return this.spawnAsync([...YZ(this.spec,{batch:!0}),G],void 0,{signal:z.signal})}async exists(J){return(await this.run(["test","-e",J])).exitCode===0}existsSync(J){return this.ensureReady(),this.spawn([...YZ(this.spec,{batch:!0}),yF(["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 ${zG(z.cwd)} && ${J}`:J;return`${YZ(this.spec,{tty:z.tty}).map(IF).join(" ")} ${zG(Y)}`}}var kW=(J,z)=>{let[Y,...G]=J,X=NF(Y??"",G,{env:z?{...process.env,...z}:process.env,encoding:"utf8",shell:!1});return{stdout:X.stdout??"",stderr:X.stderr??"",exitCode:X.status??-1}},uF=(J,z,Y)=>SW(J,{env:z?{...process.env,...z}:process.env,signal:Y?.signal});var mH=()=>{};import{spawnSync as xF}from"child_process";import{platform as EF}from"os";function IW(J,z,Y){return{service:wF,account:Y?`${z}@${J}:${Y}`:`${z}@${J}`}}function dH(J=cH){return J.platform()==="darwin"}function yW(J,z,Y=cH){if(Y.platform()!=="darwin")return!1;let{exitCode:G}=Y.run(["security","add-generic-password","-U","-s",J.service,"-a",J.account,"-w",z]);return G===0}function TQ(J,z=cH){if(z.platform()!=="darwin")return null;let{stdout:Y,exitCode:G}=z.run(["security","find-generic-password","-s",J.service,"-a",J.account,"-w"]);if(G!==0)return null;return Y.replace(/\n$/,"")}var cH,wF="kobe-remote-ssh";var nH=k(()=>{cH={run(J){let[z,...Y]=J,G=xF(z??"",Y,{encoding:"utf8",shell:!1});return{stdout:G.stdout??"",exitCode:G.status??-1}},platform(){return EF()}}});import{mkdirSync as PF,readFileSync as hF,renameSync as vF,writeFileSync as mF}from"fs";import{dirname as cF}from"path";function d1(){try{let J=hF(iJ(),"utf8"),z=JSON.parse(J);if(z&&typeof z==="object"&&!Array.isArray(z))return z}catch{}return{}}function TW(J){let z=iJ();PF(cF(z),{recursive:!0});let Y=`${z}.tmp`;mF(Y,JSON.stringify(J,null,2),"utf8"),vF(Y,z)}function iG(J){let z=d1();if(J(z)!==!1)TW(z);return z}function lz(J){return iG((z)=>{for(let[Y,G]of Object.entries(J))if(G===void 0)delete z[Y];else z[Y]=G;return})}function uW(J){TW(J)}var YG=k(()=>{p1()});var rz={};j1(rz,{statePath:()=>iF,setRepoInitOverride:()=>lF,setPersistedString:()=>r1,resolveRepoRoot:()=>$z,resolveMainRepoRoot:()=>nF,removeSavedRepo:()=>aH,remoteRepoKey:()=>PW,normalizeSavedRepos:()=>lH,isRemoteRepoKey:()=>$1,isRemoteProjectsEnabled:()=>_H,isGitRepo:()=>dF,getSavedRepos:()=>CJ,getRepoInitOverride:()=>$H,getRemoteRepos:()=>pH,getRemoteRepoConfig:()=>pz,getPersistedString:()=>S1,getCustomEngineIds:()=>az,addSavedRepo:()=>_z,addRemoteRepo:()=>rH});import{spawnSync as iH}from"child_process";import{realpathSync as xW}from"fs";function $z(J){if($1(J))return J;let z=iH("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(xW(J)===xW(Y))return J}catch{}return Y}function dF(J){if($1(J))return!1;let z=iH("git",["rev-parse","--is-inside-work-tree"],{cwd:J,encoding:"utf8",shell:!1});return z.status===0&&(z.stdout??"").trim()==="true"}function nF(J){if($1(J))return J;let z=iH("git",["worktree","list","--porcelain"],{cwd:J,encoding:"utf8",shell:!1});if(z.status!==0)return $z(J);return(z.stdout??"").split(/\r?\n/).find((G)=>G.startsWith("worktree "))?.slice(9).trim()||$z(J)}function iF(){return iJ()}function uQ(J){let z=J.savedRepos;if(!Array.isArray(z))return[];return z.filter((Y)=>typeof Y==="string")}function CJ(){return uQ(d1())}function S1(J){let z=d1()[J];return typeof z==="string"?z:void 0}function r1(J,z){lz({[J]:z})}function az(){let J=d1().customEngineIds;if(!Array.isArray(J))return[];return J.filter((z)=>typeof z==="string"&&z.trim().length>0)}function _z(J){let z=$z(J),Y={added:!1,path:z,total:0};return iG((G)=>{let X=uQ(G);if(X.includes(z))return Y={added:!1,path:z,total:X.length},!1;G.savedRepos=[...X,z],Y={added:!0,path:z,total:X.length+1};return}),Y}function lH(){let J=CJ(),z=new Set,Y=[],G=!1;for(let X of J){let Z=$z(X);if(Z!==X)G=!0;if(z.has(Z)){G=!0;continue}z.add(Z),Y.push(Z)}if(!G)return;lz({savedRepos:Y})}function EW(J){let z=J.repoConfigs;if(!z||typeof z!=="object"||Array.isArray(z))return{};return z}function wW(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 $H(J){return wW(EW(d1())[$z(J)])}function lF(J,z){let Y=$z(J),G={};return iG((X)=>{let Z={...EW(X)},Q=wW(Z[Y]),f=z.initScript===void 0?Q.initScript:z.initScript||void 0,H=z.initPrompt===void 0?Q.initPrompt:z.initPrompt||void 0;if(G={...f?{initScript:f}:{},...H?{initPrompt:H}:{}},!G.initScript&&!G.initPrompt){let{[Y]:B,...V}=Z;X.repoConfigs=V}else Z[Y]=G,X.repoConfigs=Z;return}),G}function aH(J){let z={removed:!1,path:J,total:0};return iG((Y)=>{let G=uQ(Y);if(!G.includes(J))return z={removed:!1,path:J,total:G.length},!1;if(Y.savedRepos=G.filter((X)=>X!==J),$1(J)){let X=xQ(Y);if(J in X){let Z={...X};delete Z[J],Y.remoteRepos=Z}}z={removed:!0,path:J,total:G.length-1};return}),z}function $1(J){return J.startsWith("ssh://")}function _H(){return d1()["experimental.remoteProjects"]===!0}function PW(J,z,Y){return Y?`ssh://${z}@${J}:${Y}`:`ssh://${z}@${J}`}function xQ(J){let z=J.remoteRepos;if(!z||typeof z!=="object"||Array.isArray(z))return{};return z}function pz(J){return xQ(d1())[J]??null}function pH(){return xQ(d1())}function rH(J){let z=PW(J.host,J.user,J.port),Y=!1;return iG((G)=>{let X={...xQ(G)};X[z]=J,G.remoteRepos=X;let Z=uQ(G);if(Y=!Z.includes(z),Y)G.savedRepos=[...Z,z];return}),{key:z,added:Y}}var O1=k(()=>{p1();YG()});var mW={};j1(mW,{runAddRemote:()=>_F,parseRemoteFlags:()=>vW});import{createInterface as $F}from"readline";function vW(J){let z={};for(let Y=0;Y<J.length;Y++){let G=J[Y];switch(G){case"--host":z.host=J[++Y];break;case"--user":z.user=J[++Y];break;case"--path":z.path=J[++Y];break;case"--port":{let X=Number(J[++Y]);if(!Number.isInteger(X)||X<=0)Gz(`invalid --port "${J[Y]}"`);z.port=X;break}case"--key":{let X=J[Y+1];if(X&&!X.startsWith("-"))z.key={present:!0,path:X},Y++;else z.key={present:!0};break}case"--password":z.password=!0;break;case"--help":case"-h":process.stdout.write(hW),process.exit(0);break;default:Gz(`unknown flag "${G}"`)}}return z}function Gz(J){process.stderr.write(`kobe add --remote: ${J}
|
|
5
5
|
|
|
6
|
-
${
|
|
7
|
-
`),z.close(),
|
|
6
|
+
${hW}`),process.exit(2)}async function aF(J){let z=$F({input:process.stdin,output:process.stdout,terminal:!0}),Y=process.stdout,G=!1,X=Y._writeToOutput?.bind(Y);return Y._writeToOutput=(Z)=>{if(!G||!X)process.stdout.write(Z)},process.stdout.write(J),G=!0,new Promise((Z)=>{z.question("",(Q)=>{if(G=!1,X)Y._writeToOutput=X;process.stdout.write(`
|
|
7
|
+
`),z.close(),Z(Q)})})}async function _F(J){if(!_H())Gz("remote projects are experimental and disabled \u2014 enable Settings \u2192 Dev \u2192 Experimental \u2192 Remote projects first");let z=vW(J);if(!z.host)Gz("--host is required");if(!z.user)Gz("--user is required");if(!z.path)Gz("--path (remote base path) is required");if(z.key&&z.password)Gz("choose ONE of --key or --password, not both");if(!z.key&&!z.password)Gz("an auth method is required: --key [path] or --password");let Y;if(z.password){if(!dH())Gz("--password needs the macOS keychain (unsupported on this platform)");let Z=IW(z.host,z.user,z.port),Q=await aF(`Password for ${z.user}@${z.host}: `);if(Q.length===0)Gz("empty password");if(!yW(Z,Q))Gz("failed to store the password in the keychain");Y={kind:"password",keychainRef:Z}}else Y={kind:"key",keyPath:z.key?.path};let{key:G,added:X}=rH({host:z.host,user:z.user,port:z.port,basePath:z.path,auth:Y});console.log(X?`added remote project ${G} (base ${z.path})`:`updated remote project ${G} (base ${z.path})`),await pF(z,Y)}async function pF(J,z){if(z.kind==="password"&&!dH())return;let Y=z.kind==="key"?{kind:"key",keyPath:z.keyPath}:{kind:"password",getPassword:()=>TQ(z.keychainRef)},G={host:J.host,user:J.user,port:J.port,auth:Y,controlPath:kQ(J.host,J.user,J.port)};process.stdout.write("checking connection\u2026 ");try{if((await new nG(G).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(X){console.log(`could not connect (${X instanceof Error?X.message:String(X)})`),console.log("the project is saved; fix the host/credentials and it will connect on first use.")}}var hW;var cW=k(()=>{p1();mH();nH();O1();hW=`Usage: kobe add --remote --host <host> --user <user> --path <basePath>
|
|
8
8
|
[--port N] [--key [path] | --password]
|
|
9
9
|
|
|
10
10
|
Register an SSH-backed project. Worktrees + the engine run on <host> under
|
|
11
11
|
<basePath>. Choose ONE auth: --key [path] (ssh-agent when path omitted) or
|
|
12
12
|
`+`--password (prompted, stored in the OS keychain \u2014 never in state.json).
|
|
13
|
-
`});function
|
|
14
|
-
`}var lJ=3,
|
|
15
|
-
`}function
|
|
16
|
-
`)}catch{}}function
|
|
13
|
+
`});function EQ(J){return J.remoteVersion>=J.localMin&&J.localVersion>=J.remoteMin}function dW(J,z){if(!J)return!1;return J!==z}function oF(J){return typeof J==="string"&&rF.has(J)}function nW(J){if(!Array.isArray(J))return null;let z=new Set;for(let Y of J)if(oF(Y))z.add(Y);return z.size>0?z:null}function Xz(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 GZ(J){return`${JSON.stringify(J)}
|
|
14
|
+
`}var lJ=3,AY=2,oH,rF;var GG=k(()=>{oH=["task.snapshot","issue.snapshot","active-task","update","engine-state","ui-prefs","keybindings","task.jobs","worktree.changes","transcript.activity","session.deliver"],rF=new Set(oH)});import{createHash as sF}from"crypto";import{homedir as wQ,tmpdir as tF}from"os";import{join as XG}from"path";function eF(J){return sF("sha1").update(J).digest("hex").slice(0,8)}function tH(J,z,Y,G){if(Buffer.byteLength(J,"utf8")<=sH)return J;let X=eF(z),Z=G===void 0?"":`-${G}`,Q=XG(tF(),`kobe-${X}-${Y}${Z}.sock`);if(Buffer.byteLength(Q,"utf8")<=sH)return Q;throw Error(`kobe socket path exceeds ${sH} 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 tH(XG(Y,".kobe","daemon.sock"),Y,"daemon");let G=process.env.XDG_RUNTIME_DIR;if(G&&G.length>0)return tH(XG(G,"kobe.sock"),G,"daemon");let X=wQ();return tH(XG(X,".kobe","daemon.sock"),X,"daemon")}function oz(J=process.env.KOBE_HOME_DIR??wQ()){let z=process.env.KOBE_DAEMON_PID_PATH;if(z&&z.length>0)return z;return XG(J,".kobe","daemon.pid")}function PQ(J=process.env.KOBE_HOME_DIR??wQ()){return XG(J,".kobe","daemon.log")}function iW(J=process.env.KOBE_HOME_DIR??wQ()){return XG(J,".kobe","client.log")}var sH=100;var lG=()=>{};import{appendFile as lW,mkdir as JO}from"fs/promises";import{dirname as zO}from"path";function hQ(J){_W=J}function YO(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 pW(J,z,Y=new Date){return`[${Y.toISOString()}] client ${_W} [${J}] pid=${process.pid}: ${z}
|
|
15
|
+
`}function GO(){if($W)return;$W=!0;try{process.stderr.write(`[kobe] client log write failed; continuing without it
|
|
16
|
+
`)}catch{}}function rW(J){let z=iW();aW=aW.then(async()=>{try{await lW(z,J)}catch(Y){if(Y?.code==="ENOENT")await JO(zO(z),{recursive:!0}),await lW(z,J);else throw Y}}).catch(()=>GO())}function sz(J,z){rW(pW(J,z))}function o1(J,z){let Y=YO(z);rW(pW(J,Y.stack??Y.message))}function oW(){if(eH||J8)return;eH=(J)=>o1("crash-net",J),J8=(J)=>o1("crash-net",J),process.on("unhandledRejection",eH),process.on("uncaughtException",J8)}var _W="client",$W=!1,aW,eH,J8;var ZG=k(()=>{lG();aW=Promise.resolve()});import{connect as XO}from"net";import{StringDecoder as ZO}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 G=String(this.nextId++),X=new Promise((Z,Q)=>{this.pending.set(G,{resolve:(f)=>Z(f),reject:Q})});return Y.write(GZ({type:"request",id:G,name:J,payload:z})),X}openSocket(){return new Promise((J,z)=>{let Y=XO(this.socketPath);this.socket=Y;let G=()=>{Y.off("error",X),J()},X=(Q)=>{if(Y.off("connect",G),this.socket===Y)this.socket=null;z(Q)};Y.once("connect",G),Y.once("error",X);let Z=new ZO("utf8");this.buffer="",Y.on("data",(Q)=>this.onData(Z.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
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(
|
|
19
|
-
`).map((
|
|
20
|
-
`).map((
|
|
21
|
-
`).map((
|
|
22
|
-
`)){let G
|
|
23
|
-
`)}function
|
|
24
|
-
`)}return[
|
|
25
|
-
`)}function
|
|
26
|
-
`)}catch{}}class
|
|
18
|
+
`)}}onLine(J){let z;try{z=JSON.parse(J)}catch(G){o1("client-frame",G);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 G=Error(z.error.message);if(z.error.name)G.name=z.error.name;Y.reject(G)}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 XZ=k(()=>{GG();ZG()});import{spawnSync as QO}from"child_process";import{existsSync as qO,statSync as fO}from"fs";import{homedir as HO}from"os";import ZZ from"path";async function sW(J=BO){let z=[],Y=(B)=>{if(!B)return;return z.push(B),J.fileExists(B)?B:void 0},G=J.which("claude");if(G){if(z.push(`which:${G}`),J.fileExists(G))return G}let X=J.home(),Z=Y(ZZ.join(X,".claude","local","claude"));if(Z)return Z;let Q=J.env("NVM_BIN");if(Q){let B=Y(ZZ.join(Q,"claude"));if(B)return B}let f=ZZ.join(X,".nvm","versions","node"),H=J.readdir(f).sort().reverse();for(let B of H){let V=Y(ZZ.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(ZZ.join(X,B));if(V)return V}throw new vQ(z)}var vQ,BO;var tW=k(()=>{vQ=class vQ 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}};BO={fileExists(J){try{return fO(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return HO()},which(J){let z=process.platform==="win32"?"where":"which",Y=QO(z,[J],{encoding:"utf8"});if(Y.status!==0)return;let G=Y.stdout.split(`
|
|
19
|
+
`).map((X)=>X.trim()).filter(Boolean)[0];if(!G)return;if(G.startsWith("claude:")&&G.includes("aliased to")){let X=G.split("aliased to")[1]?.trim();return X&&qO(X)?X:void 0}return G},readdir(J){try{return gQ("fs").readdirSync(J)}catch{return[]}}}});import{spawnSync as jO}from"child_process";import{existsSync as WO,statSync as VO}from"fs";import{homedir as KO}from"os";import eW from"path";async function J7(J=UO){let z=[],Y=(Q)=>{if(!Q)return;return z.push(Q),J.fileExists(Q)?Q:void 0},G=J.which("codex");if(G){if(z.push(`which:${G}`),J.fileExists(G))return G}let X=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 Z=J.env("NVM_BIN");if(Z){let Q=Y(eW.join(Z,"codex"));if(Q)return Q}for(let Q of[".local/bin/codex",".bun/bin/codex","bin/codex"]){let f=Y(eW.join(X,Q));if(f)return f}throw new mQ(z)}var mQ,UO;var z7=k(()=>{mQ=class mQ 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}};UO={fileExists(J){try{return VO(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return KO()},which(J){let z=process.platform==="win32"?"where":"which",Y=jO(z,[J],{encoding:"utf8"});if(Y.status!==0)return;let G=Y.stdout.split(`
|
|
20
|
+
`).map((X)=>X.trim()).filter(Boolean)[0];if(!G)return;if(G.startsWith("codex:")&&G.includes("aliased to")){let X=G.split("aliased to")[1]?.trim();return X&&WO(X)?X:void 0}return G},readdir(J){try{return gQ("fs").readdirSync(J)}catch{return[]}}}});import{spawnSync as DO}from"child_process";import{existsSync as LO,statSync as MO}from"fs";import{homedir as FO}from"os";import RY from"path";async function Y7(J=OO){let z=[],Y=(V)=>{if(!V)return;return z.push(V),J.fileExists(V)?V:void 0},G=J.which("copilot");if(G){if(z.push(`which:${G}`),J.fileExists(G))return G}let X=J.platform()==="win32"?["copilot.exe","copilot.cmd","copilot"]:["copilot"],Z=(V)=>{if(!V)return;for(let j of X){let K=Y(RY.join(V,j));if(K)return K}return};for(let V of["/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin"]){let j=Z(V);if(j)return j}let Q=J.env("NVM_BIN"),f=Z(Q);if(f)return f;let H=J.home(),B=[RY.join(H,".npm-global/bin"),RY.join(H,".local/bin"),RY.join(H,".bun/bin"),RY.join(H,"bin")];if(J.platform()==="win32"){let V=J.env("APPDATA"),j=J.env("LOCALAPPDATA");if(B.unshift(RY.join(H,"AppData/Roaming/npm")),V)B.unshift(RY.join(V,"npm"));if(j)B.unshift(RY.join(j,"npm"))}for(let V of B){let j=Z(V);if(j)return j}throw new cQ(z)}var cQ,OO;var G7=k(()=>{cQ=class cQ 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}};OO={fileExists(J){try{return MO(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return FO()},which(J){let z=process.platform==="win32"?"where":"which",Y=DO(z,[J],{encoding:"utf8"});if(Y.status!==0)return;let G=Y.stdout.split(`
|
|
21
|
+
`).map((X)=>X.trim()).filter(Boolean)[0];if(!G)return;if(G.startsWith("copilot:")&&G.includes("aliased to")){let X=G.split("aliased to")[1]?.trim();return X&&LO(X)?X:void 0}return G},platform(){return process.platform}}});import{readFileSync as AO,statSync as RO}from"fs";import{readFile as gO,stat as CO}from"fs/promises";async function $G(J,z=X7){let{size:Y}=await CO(J);if(Y>z)return"";return gO(J,"utf8")}function Z7(J,z=X7){let Y;try{Y=RO(J)}catch(G){if(G.code==="ENOENT")return null;throw G}if(Y.size>z)return null;return AO(J,"utf8")}function gY(J,z=NO){return J.length<=z}var X7=104857600,NO=8388608;var QZ=()=>{};import{homedir as kO}from"os";import CY from"path";function bO(J,z){let Y=J("CLAUDE_CONFIG_DIR")?.trim();if(Y)return CY.join(Y,".claude.json");return CY.join(z,".claude.json")}function SO(J,z){let G=J("CODEX_HOME")?.trim()??CY.join(z,".codex");return CY.join(G,"auth.json")}function IO(J,z){let G=J("COPILOT_HOME")?.trim()??CY.join(z,".copilot");return CY.join(G,"config.json")}function yO(J){let z=J.split(".");if(z.length!==3)return null;let Y=z[1];if(!Y)return null;let G=Y.replace(/-/g,"+").replace(/_/g,"/"),X=G+"=".repeat((4-G.length%4)%4);try{let Z=Buffer.from(X,"base64").toString("utf8"),Q=JSON.parse(Z);return typeof Q==="object"&&Q!==null?Q:null}catch{return null}}async function nQ(J){try{return{found:!0,path:await J()}}catch(z){if(z instanceof vQ||z instanceof mQ||z instanceof cQ)return{found:!1,error:"not found on PATH"};return{found:!1,error:z instanceof Error?z.message:String(z)}}}async function Q7(J){return(await Promise.all([["claude",()=>J.findClaudeBinary()],["codex",()=>J.findCodexBinary()],["copilot",()=>J.findCopilotBinary()]].map(async([G,X])=>(await nQ(X)).found?G:null))).filter((G)=>G!==null)}function TO(J=aG){if(J!==aG)return Q7(J);if(dQ)return dQ;let z=Q7(J).catch((Y)=>{throw dQ=null,Y});return dQ=z,z}async function tz(J=aG){return[...await TO(J),...az()]}async function iQ(J=aG){let z=await nQ(()=>J.findClaudeBinary()),Y=bO(J.env,J.home()),G;try{G=J.readFile(Y)}catch(H){return{binary:z,account:{kind:"none"},accountError:`read ${Y}: ${H instanceof Error?H.message:String(H)}`}}if(G===null)return{binary:z,account:{kind:"none"}};let X;try{X=JSON.parse(G)}catch(H){return{binary:z,account:{kind:"none"},accountError:`parse ${Y}: ${H instanceof Error?H.message:String(H)}`}}let Z=X?.oauthAccount;if(!Z||typeof Z!=="object")return{binary:z,account:{kind:"none"}};let Q=Z,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 lQ(J=aG){let z=await nQ(()=>J.findCodexBinary()),Y=SO(J.env,J.home()),G;try{G=J.readFile(Y)}catch(B){return{binary:z,account:{kind:"none"},accountError:`read ${Y}: ${B instanceof Error?B.message:String(B)}`}}if(G===null)return{binary:z,account:{kind:"none"}};let X;try{X=JSON.parse(G)}catch(B){return{binary:z,account:{kind:"none"},accountError:`parse ${Y}: ${B instanceof Error?B.message:String(B)}`}}let Z=X??{},Q=Z.tokens,f=typeof Q?.id_token==="string"?Q.id_token:void 0;if(f){let B=yO(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=Z.OPENAI_API_KEY;if(typeof H==="string"&&H.length>0)return{binary:z,account:{kind:"apikey"}};return{binary:z,account:{kind:"none"}}}async function $Q(J=aG){let z=await nQ(()=>J.findCopilotBinary());for(let Z of["COPILOT_GITHUB_TOKEN","GH_TOKEN","GITHUB_TOKEN"])if(J.env(Z)?.trim())return{binary:z,account:{kind:"token",source:Z}};let Y=IO(J.env,J.home()),G;try{G=J.readFile(Y)}catch(Z){return{binary:z,account:{kind:"none"},accountError:`read ${Y}: ${Z instanceof Error?Z.message:String(Z)}`}}if(G===null)return{binary:z,account:{kind:"none"}};let X;try{X=JSON.parse(G)}catch(Z){return{binary:z,account:{kind:"none"},accountError:`parse ${Y}: ${Z instanceof Error?Z.message:String(Z)}`}}if(!z8(X))return{binary:z,account:{kind:"none"}};if(q7(X,["github_token","oauth_token","access_token","token","selectedUser","currentUser","user"]))return{binary:z,account:{kind:"oauth"}};return{binary:z,account:{kind:"none"}}}function z8(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function q7(J,z,Y=0){if(Y>4||!z8(J))return!1;for(let[G,X]of Object.entries(J)){if(z.includes(G)&&typeof X==="string"&&X.length>0)return!0;if(z8(X)&&q7(X,z,Y+1))return!0}return!1}var aG,dQ=null;var QG=k(()=>{O1();tW();z7();G7();QZ();aG={readFile(J){return Z7(J)},env(J){return process.env[J]},home(){return kO()},findClaudeBinary(){return sW()},findCodexBinary(){return J7()},findCopilotBinary(){return Y7()}}});function f7(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 G=Y;if(G.type==="text"&&typeof G.text==="string"){z.push({type:"text",text:G.text});continue}if(G.type==="tool_use"){z.push({type:"tool_call",callId:typeof G.id==="string"?G.id:"",name:typeof G.name==="string"?G.name:"",input:G.input});continue}if(G.type==="tool_result"){z.push({type:"tool_result",callId:typeof G.tool_use_id==="string"?G.tool_use_id:"",output:G.content,isError:G.is_error===!0});continue}if(G.type==="thinking"&&typeof G.thinking==="string")z.push({type:"thinking",text:G.thinking})}return z}function H7(J){return J.isMeta===!0||J.isCompactSummary===!0}function B7(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 gw,mkdir as Cw,readdir as Y8,stat as uO,unlink as Nw}from"fs/promises";import{homedir as j7}from"os";import aQ from"path";function EO(J){return J.replace(/[/.]/g,"-")}async function qZ(J){if(!J)return[];let z=aQ.join(j7(),".claude","projects",EO(J)),Y;try{Y=await Y8(z)}catch{return[]}let G=[];for(let X of Y){if(!X.endsWith(".jsonl"))continue;let Z=aQ.join(z,X),Q=0;try{Q=(await uO(Z)).mtimeMs}catch{}G.push({sessionId:X.slice(0,-6),path:Z,mtimeMs:Q})}return G.sort((X,Z)=>Z.mtimeMs-X.mtimeMs),G}async function W7(J){return(await qZ(J))[0]?.mtimeMs??0}async function V7(J,z=xO){let Y=z.projectsDir(),G=await z.readdir(Y);for(let X of G){let Z=aQ.join(Y,X,`${J}.jsonl`),Q;try{Q=await z.readFile(Z)}catch{continue}return wO(PO(Q,J))}return[]}function wO(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 PO(J,z){let Y=[];for(let G of J.split(`
|
|
22
|
+
`)){let X=G.trim();if(!X)continue;if(!gY(X))continue;let Z;try{Z=JSON.parse(X)}catch{continue}if(!G8(Z))continue;let Q=hO(Z,z);if(Q)Y.push(Q)}return Y}function hO(J,z){if(H7(J))return null;let Y=G8(J.message)?J.message:J,G=Y.role;if(G!=="user"&&G!=="assistant"&&G!=="system")return null;if(!("content"in Y))return null;let X=f7(Y.content);if(G==="user"&&B7(X))return null;let Z=typeof J.timestamp==="string"?J.timestamp:new Date().toISOString(),Q=typeof J.sessionId==="string"?J.sessionId:z,f=vO(Y.usage);return f?{role:G,blocks:X,timestamp:Z,sessionId:Q,usage:f}:{role:G,blocks:X,timestamp:Z,sessionId:Q}}function vO(J){if(!G8(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 G=typeof J.cache_read_input_tokens==="number"?J.cache_read_input_tokens:void 0,X=typeof J.cache_creation_input_tokens==="number"?J.cache_creation_input_tokens:void 0;return{input_tokens:z,output_tokens:Y,...G!==void 0?{cache_read_input_tokens:G}:{},...X!==void 0?{cache_creation_input_tokens:X}:{}}}function G8(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var xO;var X8=k(()=>{QZ();xO={projectsDir(){return aQ.join(j7(),".claude","projects")},async readdir(J){try{return await Y8(J)}catch{return[]}},async readFile(J){return await $G(J)},async pathExists(J){try{return await Y8(J),!0}catch{return!1}}}});import{fileURLToPath as U7}from"url";function k1(){if(import.meta.url.endsWith(".js"))return["kobe"];let z=U7(new URL("./index.ts",import.meta.url)),Y=U7(import.meta.resolve("@opentui/solid/preload"));return[process.execPath,"--preload",Y,"--conditions=browser",z]}var ez=()=>{};function Z8(J,z={}){if(z.bareSafe&&mO.test(J))return J;return`'${J.replace(/'/g,"'\\''")}'`}function _Q(J,z={}){return J.map((Y)=>Z8(Y,z)).join(" ")}var mO;var Q8=k(()=>{mO=/^[A-Za-z0-9_/.:=-]+$/});function HZ(J){return`kobe-hidden-${J.replace(/[^A-Za-z0-9_-]/g,"")||"session"}`}function L7(J){let z=Number.parseInt(J.replace(/^@/,""),10);return Number.isFinite(z)&&z>=0?1000+z:1000}function HG(J){if(!Number.isFinite(J))return qG;return Math.max(cO,Math.min(dO,Math.round(J)))}function YY(J){if(!Number.isFinite(J))return null;return Math.max(nO,Math.min(iO,Math.round(J)))}function Z1(J){return Z8(J)}function kJ(J){return _Q(J)}function bJ(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 q8(J){return`'${J.replace(/'/g,"'\\''")}'`}function M7(){return`clear; printf ${q8("\\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 H8(J){let z=typeof J==="number"?J:J==null?Number.NaN:Number.parseInt(J,10);if(!Number.isFinite(z))return lO;return Math.max($O,Math.min(aO,Math.round(z)))}function _O(J,z){let Y=String(z),G="\\n \u26A0 Repo init (.kobe/init.sh) timed out after %ss and was killed; continuing to the engine.\\n\\n",X="\\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 F7(J,z){let Y=bJ(J),G=z?.initScript?.trim();if(!G)return Y;let X=H8(z?.timeoutSeconds),Z=_O(G,X);if(z?.markerPath){let Q=q8(z.markerPath),f=q8(pO(z.markerPath));return[`if [ ! -f ${Q} ]; then`,Z,`if [ "$__kobe_init_rc" -eq 0 ]; then mkdir -p ${f} && : > ${Q}; fi`,"fi",Y].join(`
|
|
24
|
+
`)}return[Z,Y].join(`
|
|
25
|
+
`)}function pO(J){let z=J.lastIndexOf("/");return z<=0?".":J.slice(0,z)}function D7(J){return`cd ${Z1(J)} && while :; do clear; printf "\\033[1m# %s\\033[0m\\n\\n" ${Z1(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 O7(J){let z=Z1(J.worktree),Y=Z1(J.relPath),G=J.cliInvocation.map(Z1).join(" "),X=`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`${G} ops --worktree ${z} --preview ${Y} || { ${X}; }`}function A7(J){return`${kJ([...J.cliInvocation,"update-page"])}`}function R7(J){let z=J.opener??"open";return[`tmux -L ${Z1(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 kY(J,z={}){let Y=[...J,"tasks"];if(z.initialTaskId)Y.push("--initial-task-id",z.initialTaskId);return kJ(Y)}function pG(J){if(J.taskId&&J.claudePaneId){let z=J.cliInvocation.map(Z1).join(" "),Y=J.vendor?` --vendor ${Z1(J.vendor)}`:"";return`KOBE_FILETREE_WATCH=1 ${z} ops --task-id ${Z1(J.taskId)} --worktree ${Z1(J.cwd)} --target-pane ${Z1(J.claudePaneId)}${Y} || { ${D7(J.cwd)}; }`}return D7(J.cwd)}var qG=32,aJ="tasks",fG="claude",Zz="ops",Qz="shell",fZ="workspace_aux",f8=4,qz="@kobe_hidden_shell_pane",NJ="@kobe_hidden_tasks_pane",NY="@kobe_zen_panes",_G="@kobe_zen",JY="@kobe_tasks_width",cO=16,dO=120,pQ=60,BZ=50,BG="@kobe_right_width_pct",zY="@kobe_ops_height_pct",nO=10,iO=90,lO=120,$O=5,aO=3600;var fz=k(()=>{Q8()});function _J(J){return!!J&&typeof J==="object"&&!Array.isArray(J)}function oO(J){return J.map((z)=>kJ(["hook",z.verb]))}function sO(J,z){if(!_J(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((Y)=>_J(Y)&&typeof Y.command==="string"&&z.some((G)=>Y.command.includes(G)))}function N7(J,z=k1()){let Y={};for(let{event:G,matcher:X,verb:Z}of J){let f={hooks:[{type:"command",command:kJ([...z,"hook",Z])}]};if(X)f.matcher=X;Y[G]=[f]}return Y}function rQ(J,z,Y,G=k1()){let X=oO(Y),{hooks:Z,...Q}=J,f=_J(Z)?{...Z}:{},H=z?N7(Y,G):{};for(let{event:B}of Y){let j=(Array.isArray(f[B])?f[B]:[]).filter((K)=>!sO(K,X));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 k7(J=k1()){let z=kJ([...J,"hook",C7]);return{[g7]:[{matcher:rO,hooks:[{type:"command",command:z}]}]}}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(C7))}function oQ(J,z,Y=k1()){let{hooks:G,...X}=J,Z=_J(G)?{...G}:{},Q=g7,H=(Array.isArray(Z[Q])?Z[Q]:[]).filter((B)=>!tO(B));if(z)H.push(...k7(Y)[Q]);if(H.length>0)Z[Q]=H;else delete Z[Q];return Object.keys(Z).length>0?{...X,hooks:Z}:{...X}}var g7="PostToolUse",rO="Bash",C7="worktree-created";var B8=k(()=>{ez();fz()});import{mkdir as eO,readFile as J2,writeFile as z2}from"fs/promises";import{dirname as Y2}from"path";async function G2(J){try{let z=JSON.parse(await J2(J,"utf8"));return _J(z)?z:{}}catch{return{}}}async function rG(J,z){try{let Y=await G2(J),G=z(Y);if(JSON.stringify(G)===JSON.stringify(Y))return;await eO(Y2(J),{recursive:!0}),await z2(J,`${JSON.stringify(G,null,2)}
|
|
26
|
+
`)}catch{}}class jZ{supportsHooks(){return!0}activityDetailFromPayload(J,z){return}supportsWorktreeSync(){return!1}async removeWorktreeSyncHook(J){}async installActivityHooks(J){await rG(J,(z)=>rQ(z,!0,this.eventMap))}async removeActivityHooks(J){await rG(J,(z)=>rQ(z,!1,this.eventMap))}async installWorktreeWatchHook(J){await rG(J,(z)=>oQ(z,!0))}async removeWorktreeWatchHook(J){await rG(J,(z)=>oQ(z,!1))}}var j8=k(()=>{B8()});import{homedir as X2}from"os";import{join as Z2}from"path";function Q2(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 q2(){return Z2(X2(),".claude","settings.json")}function H2(J){if(!_J(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((z)=>_J(z)&&typeof z.command==="string"&&z.command.includes(f2))}function B2(J,z){let{hooks:Y,...G}=J,{WorktreeCreate:X,...Z}=_J(Y)?Y:{},f=(Array.isArray(X)?X:[]).filter((B)=>!H2(B));if(z!==null)f.push({hooks:[{type:"command",command:z}]});let H={...Z};if(f.length>0)H.WorktreeCreate=f;return Object.keys(H).length>0?{...G,hooks:H}:{...G}}var b7,_w,f2="worktree-created",W8;var S7=k(()=>{j8();B8();b7=[{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"}],_w=b7.map((J)=>J.event);W8=class W8 extends jZ{vendor="claude";eventMap=b7;globalSettingsPath(){return q2()}activityDetailFromPayload(J,z){if(J==="turn-failed")return{failure:Q2(z.error_type)};if(J==="awaiting-input")return{waiting:"permission"};return}supportsWorktreeSync(){return!0}async removeWorktreeSyncHook(J){await rG(J,(z)=>B2(z,null))}}});function V8(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 G=typeof Y.type==="string"?Y.type:void 0;if(G==="input_text"||G==="output_text"){let X=typeof Y.text==="string"?Y.text:"";if(X.length>0)z.push({type:"text",text:X});continue}if(G)z.push({type:"text",text:`[codex: ${G}]`})}return z}function j2(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function I7(J){if(J.length===0)return!1;for(let z of J){if(z.type!=="text")return!1;let Y=(z.text??"").trim();if(!W2(Y)&&!V2(Y))return!1}return!0}function W2(J){return J.startsWith("<environment_context>")&&J.endsWith("</environment_context>")}function V2(J){return J.startsWith("# AGENTS.md instructions for ")&&J.includes(`
|
|
27
27
|
<INSTRUCTIONS>
|
|
28
|
-
`)&&J.endsWith("</INSTRUCTIONS>")}var
|
|
29
|
-
`)){let Y=z.trim();if(!Y)continue;if(!
|
|
30
|
-
`)){let G
|
|
31
|
-
`)){let G
|
|
32
|
-
`)){let
|
|
33
|
-
`)){let H=f.trim();if(!H)continue;if(!
|
|
34
|
-
`)){
|
|
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((
|
|
37
|
-
`)){let Q=
|
|
38
|
-
`)){let X
|
|
39
|
-
`)){let[f,H]=Q.split("\t");if(!f)continue;if(!
|
|
40
|
-
`)){let[Q,f,H]=
|
|
41
|
-
`}function
|
|
42
|
-
`}function I1(J,z){process.stderr.write(
|
|
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
|
|
46
|
-
`)}function
|
|
47
|
-
|
|
48
|
-
`):null}function
|
|
49
|
-
`)}function
|
|
50
|
-
`)?
|
|
51
|
-
`)}return z}function
|
|
52
|
-
`:
|
|
28
|
+
`)&&J.endsWith("</INSTRUCTIONS>")}var y7=()=>{};function T7(J,z={}){let Y=K8(J.input_tokens,0),G=K8(J.cached_input_tokens,0),X=K8(J.output_tokens,0),Z=Math.max(0,Y-G);if(Y<=0&&X<=0&&G<=0)return;return{input_tokens:Z,output_tokens:X,...G>0?{cache_read_input_tokens:G}:{},...K2(z.contextWindowTokens)?{context_window_tokens:z.contextWindowTokens}:{}}}function K8(J,z){return typeof J==="number"&&Number.isFinite(J)?J:z}function K2(J){return typeof J==="number"&&Number.isFinite(J)&&J>0}import{readdir as U2,stat as D2,unlink as JP}from"fs/promises";import{homedir as L2}from"os";import jG from"path";async function M8(J=WG){let z=J.sessionsDir(),Y=(await J.readdir(z)).sort().reverse(),G=[];for(let X of Y){let Z=jG.join(z,X),Q=(await J.readdir(Z)).sort().reverse();for(let f of Q){let H=jG.join(Z,f),B=(await J.readdir(H)).sort().reverse();for(let V of B){let j=jG.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(G.push(jG.join(j,L)),G.length>=u7){if(!x7)x7=!0,console.warn(`[codex history] rollout scan truncated at ${u7} files; older sessions may be omitted`);return G}}}}return G}async function M2(J,z=WG){if(!J)return;let Y=J.toLowerCase(),G=await M8(z);for(let X of G)if(jG.basename(X).match(h7)?.[1]?.toLowerCase()===Y)return X;return}function F2(J){for(let z of J.split(`
|
|
29
|
+
`)){let Y=z.trim();if(!Y)continue;if(!gY(Y))return"";try{let G=JSON.parse(Y);if(G.type==="session_meta")return G.payload?.cwd??""}catch{}return""}return""}async function v7(J,z){let Y=E7.get(z);if(!Y)Y=new Map,E7.set(z,Y);let G=Y.get(J);if(G!==void 0)return G;let X;try{X=await z.readFile(J)}catch{return null}let Z=F2(X);if(Z)Y.set(J,Z);return Z}async function m7(J,z=WG){if(!J)return[];let Y=await M8(z),G=[],X=0;for(let Z of Y){if(X>=O2)break;if(X++,await v7(Z,z)!==J)continue;let Q=jG.basename(Z).match(h7)?.[1];if(Q)G.push(Q)}return G.reverse()}async function F8(J,z=WG){if(!J)return null;let Y=await M8(z),G=0;for(let X of Y){if(G>=A2)break;if(G++,await v7(X,z)!==J)continue;try{return{path:X,mtimeMs:(await z.stat(X)).mtimeMs}}catch{}}return null}async function c7(J,z=WG){return(await F8(J,z))?.mtimeMs??0}async function d7(J,z=WG){return(await R2(J,z)).messages}async function R2(J,z=WG){let Y=await M2(J,z);if(!Y)return{messages:[]};let G;try{G=await z.readFile(Y)}catch{return{messages:[]}}let X=g2(C2(G,J)),Z=I2(G);return{messages:X,...Z?{usageMetrics:Z}:{}}}function g2(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 C2(J,z){let Y=[];for(let G of J.split(`
|
|
30
|
+
`)){let X=G.trim();if(!X)continue;if(!gY(X))continue;let Z;try{Z=JSON.parse(X)}catch{continue}if(!WZ(Z))continue;if(Z.type!=="response_item")continue;let Q=WZ(Z.payload)?Z.payload:void 0;if(!Q)continue;let f=typeof Z.timestamp==="string"?Z.timestamp:new Date().toISOString(),H=N2(Q,f,z);if(H)Y.push(H)}return Y}function N2(J,z,Y){if(J.type==="message"){let G=J.role;if(G!=="user"&&G!=="assistant"&&G!=="system")return;let X=V8(J.content);if(G==="user"&&I7(X))return;return{role:G,blocks:X,timestamp:z,sessionId:Y}}if(J.type==="reasoning")return k2(J,z,Y);if(J.type==="function_call")return U8(J,z,Y,{name:L8(J.name,"function_call"),input:D8(J.arguments)});if(J.type==="custom_tool_call")return U8(J,z,Y,{name:L8(J.name,"custom_tool_call"),input:D8(J.input)});if(J.type==="tool_search_call")return U8(J,z,Y,{name:"tool_search_call",input:sQ(J,["type","call_id","status"])});if(J.type==="function_call_output"||J.type==="custom_tool_call_output")return w7(J,z,Y,D8(J.output));if(J.type==="tool_search_output")return w7(J,z,Y,sQ(J,["type","call_id"]));if(J.type==="web_search_call"||J.type==="image_generation_call"||J.type==="local_shell_call")return b2(J,z,Y);return}function k2(J,z,Y){let G=S2(J);if(G.length===0)return;return{role:"assistant",blocks:[{type:"thinking",text:G}],timestamp:z,sessionId:Y}}function U8(J,z,Y,G){let X=typeof J.call_id==="string"?J.call_id:void 0;if(!X)return;return{role:"assistant",blocks:[{type:"tool_call",callId:X,name:G.name,input:G.input}],timestamp:z,sessionId:Y}}function w7(J,z,Y,G){let X=typeof J.call_id==="string"?J.call_id:void 0;if(!X)return;return{role:"user",blocks:[{type:"tool_result",callId:X,output:G,isError:!1}],timestamp:z,sessionId:Y}}function b2(J,z,Y){let G=typeof J.type==="string"?J.type:"tool",X=typeof J.call_id==="string"&&J.call_id.length>0?J.call_id:`${G}:${z}`,Z=L8(J.name,G),Q=sQ(J,["type","call_id","status"]),f=sQ(J,["type","call_id"]);return{role:"assistant",timestamp:z,sessionId:Y,blocks:[{type:"tool_call",callId:X,name:Z,input:Q},{type:"tool_result",callId:X,output:f,isError:!1}]}}function S2(J){let z=P7(J.content);if(z.length>0)return z;let Y=typeof J.text==="string"?J.text:"";if(Y.length>0)return Y;return P7(J.summary)}function P7(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(!WZ(Y))continue;let G=typeof Y.text==="string"?Y.text:"";if(G.length>0)z.push(G)}return z.join("")}function sQ(J,z){let Y={};for(let[G,X]of Object.entries(J))if(!z.includes(G))Y[G]=X;return Y}function L8(J,z){return typeof J==="string"&&J.length>0?J:z}function D8(J){if(typeof J!=="string")return J;try{return JSON.parse(J)}catch{return J}}function I2(J){let z,Y=null;for(let G of J.split(`
|
|
31
|
+
`)){let X=G.trim();if(!X)continue;if(!gY(X))continue;let Z;try{Z=JSON.parse(X)}catch{continue}if(!WZ(Z))continue;let Q=typeof Z.timestamp==="string"?y2(Z.timestamp):null;if(Z.type==="response_item")continue;if(Z.type!=="turn.completed")continue;let f=WZ(Z.usage)?Z.usage:void 0;if(!f)continue;let H=T7(f);if(!H)continue;if(Q!==null&&(Y===null||Q>Y))Y=Q,z=H;else if(Y===null)z=H}return z}function y2(J){let z=new Date(J).getTime();return Number.isFinite(z)?z:null}function WZ(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var WG,u7=5000,x7=!1,h7,E7,O2=200,A2=12;var O8=k(()=>{QZ();y7();WG={sessionsDir(){return jG.join(L2(),".codex","sessions")},async readdir(J){try{return await U2(J)}catch{return[]}},async readFile(J){return await $G(J)},stat:D2};h7=/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/i;E7=new WeakMap});import{homedir as T2}from"os";import{join as u2}from"path";function x2(){return u2(T2(),".codex","hooks.json")}var i7,BP,A8;var l7=k(()=>{j8();i7=[{event:"SessionStart",verb:"session-start"},{event:"UserPromptSubmit",verb:"turn-start"},{event:"Stop",verb:"turn-complete"}],BP=i7.map((J)=>J.event);A8=class A8 extends jZ{vendor="codex";eventMap=i7;globalSettingsPath(){return x2()}}});function $7(J){if(!tQ(J))return;let z=tQ(J.modelMetrics)?J.modelMetrics:void 0;if(!z)return;let Y=0,G=0,X=0;for(let Q of Object.values(z)){if(!tQ(Q)||!tQ(Q.usage))continue;Y+=eQ(Q.usage.inputTokens,0),G+=eQ(Q.usage.outputTokens,0),X+=eQ(Q.usage.cacheReadTokens,0)}let Z=eQ(J.currentTokens,0);if(Y===0&&G===0&&X===0&&Z===0)return;return{input_tokens:Y,output_tokens:G,...X>0?{cache_read_input_tokens:X}:{},...Z>0?{context_tokens:Z}:{}}}function tQ(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function eQ(J,z){return typeof J==="number"&&Number.isFinite(J)?J:z}import{readdir as E2,rm as w2,stat as P2}from"fs/promises";import{homedir as h2}from"os";import bY from"path";async function g8(J=VG){let z=bY.join(J.copilotDir(),"session-state");return(await J.readdir(z)).map((G)=>bY.join(z,G))}async function a7(J,z=VG){let Y=[];for(let G of await g8(z)){let X=await C8(G,z);if(X.cwd!==J)continue;Y.push({id:X.id??bY.basename(G),updatedAt:X.updatedAt??""})}return Y.sort((G,X)=>G.updatedAt.localeCompare(X.updatedAt)).map((G)=>G.id)}async function _7(J,z=VG){if(!J)return 0;let Y=0;for(let G of await g8(z)){if((await C8(G,z)).cwd!==J)continue;try{let{mtimeMs:Z}=await z.stat(bY.join(G,"events.jsonl"));if(Z>Y)Y=Z}catch{}}return Y}async function v2(J,z=VG){let Y=await m2(J,z);if(!Y)return{messages:[]};let G=await z.readFile(bY.join(Y,"events.jsonl")).catch(()=>""),X=d2(G,J);return{messages:X.messages,...X.usageMetrics?{usageMetrics:X.usageMetrics}:{}}}async function p7(J,z=VG){return(await v2(J,z)).messages}async function m2(J,z=VG){for(let Y of await g8(z)){if(bY.basename(Y)===J)return Y;let G=await C8(Y,z);if(G.id===J||G.name?.toLowerCase()===J.toLowerCase())return Y}return}async function C8(J,z=VG){let Y=await z.readFile(bY.join(J,"workspace.yaml")).catch(()=>"");return c2(Y)}function c2(J){let z={};for(let Y of J.split(`
|
|
32
|
+
`)){let G=Y.match(/^([A-Za-z_]+):\s*(.*)$/);if(!G)continue;let X=G[1],Z=G[2]??"";if(Z.startsWith('"')&&Z.endsWith('"'))Z=Z.slice(1,-1).replace(/\\"/g,'"');z[X]=Z}return{id:z.id,cwd:z.cwd,name:z.name,updatedAt:z.updated_at,createdAt:z.created_at}}function d2(J,z){let Y=[],G=new Map,X=z,Z,Q=null;for(let f of J.split(`
|
|
33
|
+
`)){let H=f.trim();if(!H)continue;if(!gY(H))continue;let B;try{B=JSON.parse(H)}catch{continue}if(!R8(B)||typeof B.type!=="string")continue;let V=typeof B.timestamp==="string"?B.timestamp:new Date().toISOString(),j=R8(B.data)?B.data:{};if(B.type==="session.start"){let K=typeof j.sessionId==="string"?j.sessionId:void 0;if(K)X=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,n2),"utf8").toString("utf8");Y.push({role:"user",blocks:[{type:"text",text:K}],timestamp:V,sessionId:X});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 O of A){if(!R8(O))continue;let g=typeof O.id==="string"?O.id:typeof O.toolCallId==="string"?O.toolCallId:"tool",x=typeof O.name==="string"?O.name:typeof O.toolName==="string"?O.toolName:"tool";K.push({type:"tool_call",callId:g,name:x,input:O.arguments??{}})}if(K.length>0)Y.push({role:"assistant",blocks:K,timestamp:V,sessionId:X});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)G.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=G.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:X});continue}if(B.type==="session.shutdown")Z=$7(j)}return{messages:Y,usageMetrics:Z,firstUserMessage:Q}}function R8(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var VG,n2=200;var r7=k(()=>{QZ();VG={copilotDir(){let J=process.env.COPILOT_HOME?.trim();if(J)return J;return bY.join(h2(),".copilot")},async readdir(J){try{return await E2(J)}catch{return[]}},async readFile(J){return await $G(J)},stat:P2,async rm(J){await w2(J,{recursive:!0,force:!0})}}});function N8(J){return e1(J).createHookAdapter()}class Jq{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 k8=k(()=>{SY()});import{readFile as o7}from"fs/promises";class zq{supportsCompletionMarkers(){return!0}}function VZ(J){return e1(J).createTurnDetector()}function a2(J,z="claude",Y=0){let G=null,X=0;for(let Z of J.split(`
|
|
34
|
+
`)){X++;let Q=s7(Z);if(!Q)continue;let f=e7(Q.message)?Q.message:Q;if(f.role!=="assistant")continue;if(!("content"in f))continue;let H=t7(Q,Y),B={id:`claude:${z}:${H}:${X}`,timestampMs:H,source:"claude"};if(!G||B.timestampMs>=G.timestampMs)G=B}return G}function _2(J,z="codex"){let Y=null,G=0;for(let X of J.split(`
|
|
35
|
+
`)){G++;let Z=s7(X);if(!Z||Z.type!=="turn.completed")continue;let Q=t7(Z,0),f={id:`codex:${z}:${Q}:${G}`,timestampMs:Q,source:"codex"};if(!Y||f.timestampMs>=Y.timestampMs)Y=f}return Y}function s7(J){let z=J.trim();if(!z)return null;try{let Y=JSON.parse(z);return e7(Y)?Y:null}catch{return null}}function t7(J,z){let Y=typeof J.timestamp==="string"?Date.parse(J.timestamp):Number.NaN;return Number.isFinite(Y)?Y:z}function e7(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var l2,b8,$2,S8,Yq;var Gq=k(()=>{X8();O8();SY();l2={listSessionFiles:(J)=>qZ(J),readFile:(J)=>o7(J,"utf8")};b8=class b8 extends zq{deps;vendor="claude";cache=new Map;constructor(J=l2){super();this.deps=J}async latestCompletion(J){let z=await this.deps.listSessionFiles(J),Y=null,G=new Map;for(let X of z.slice(0,4)){let Z=this.cache.get(X.path),Q;if(Z&&X.mtimeMs>0&&Z.mtimeMs===X.mtimeMs)Q=Z.marker;else{let f=await this.deps.readFile(X.path).catch(()=>"");Q=a2(f,X.path,X.mtimeMs)}if(G.set(X.path,{mtimeMs:X.mtimeMs,marker:Q}),Q&&(!Y||Q.timestampMs>Y.timestampMs))Y=Q}return this.cache=G,Y}};$2={findLatestRollout:(J)=>F8(J),readFile:(J)=>o7(J,"utf8")};S8=class S8 extends zq{deps;vendor="codex";cache=null;constructor(J=$2){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 G=_2(Y,z.path);return this.cache={path:z.path,mtimeMs:z.mtimeMs,marker:G},G}};Yq=class Yq extends zq{vendor;constructor(J){super();this.vendor=J}supportsCompletionMarkers(){return!1}async latestCompletion(){return null}}});function e2(J){return{vendor:J,builtin:!1,displayName:J,defaultCommand:[J],history:p2,detectAccount:async()=>({binary:{found:!1,error:"custom engine: kobe has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new Jq(J),createTurnDetector:()=>new Yq(J)}}function e1(J){return QJ(J)?t2[J]:e2(J)}var p2,r2,o2,s2,t2;var SY=k(()=>{t1();QG();X8();S7();O8();l7();r7();k8();Gq();p2={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async latestTranscriptMtimeForWorktree(){return 0}},r2={async listSessionIdsForWorktree(J){return[...await qZ(J)].sort((Y,G)=>Y.mtimeMs-G.mtimeMs).map((Y)=>Y.sessionId)},readHistory:(J)=>V7(J),latestTranscriptMtimeForWorktree:(J)=>W7(J)},o2={listSessionIdsForWorktree:(J)=>m7(J),readHistory:(J)=>d7(J),latestTranscriptMtimeForWorktree:(J)=>c7(J)},s2={listSessionIdsForWorktree:(J)=>a7(J),readHistory:(J)=>p7(J),latestTranscriptMtimeForWorktree:(J)=>_7(J)},t2={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:r2,detectAccount:(J)=>iQ(J),createHookAdapter:()=>new W8,createTurnDetector:()=>new b8},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:o2,detectAccount:(J)=>lQ(J),createHookAdapter:()=>new A8,createTurnDetector:()=>new S8},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:s2,detectAccount:(J)=>$Q(J),createHookAdapter:()=>new Jq("copilot"),createTurnDetector:()=>new Yq("copilot")}}});async function oG(J,z){if(!z)return 0;return e1(J).history.latestTranscriptMtimeForWorktree(z)}var Xq=k(()=>{SY()});function JV(J){return typeof J==="string"&&JA.includes(J)}var KZ=(J)=>J,n1="claude",JA;var pJ=k(()=>{JA=["backlog","in_progress","in_review","done","canceled","error"]});function Zq(J){return zA.includes(J)}function zV(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 zA;var Qq=k(()=>{zA=["session-start","turn-start","turn-complete","turn-failed","awaiting-input","session-end"]});function YA(){let J=process.env.KOBE_ENGINE_STATE_TTL_MS;if(J===void 0)return YV;let z=Number(J);return Number.isFinite(z)&&z>0?z:YV}class I8{bus;staleMs;now;livenessAt;activity=new Map;constructor(J,z=YA(),Y=()=>Date.now(),G=()=>Promise.resolve(void 0)){this.bus=J;this.staleMs=z;this.now=Y;this.livenessAt=G}report(J,z,Y){let G=this.activity.get(J);if(G?.lapse)clearTimeout(G.lapse);let X=zV(G?.state,z,Y),Z=this.now(),Q={state:X,detail:Y,at:Z};if(X!=="idle"&&X!=="turn_complete")Q.lapse=this.armLapse(J,Z);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 G;try{G=await this.livenessAt(J)}catch{G=void 0}let X=this.activity.get(J);if(!X||X.at!==z)return;if(G!==void 0&&G>this.now()-this.staleMs){X.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 YV=600000;var GV=k(()=>{Qq()});function XV(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 qq(J,z){let Y=J.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,32),G=z.slice(-6).toLowerCase();return`kobe/${Y||"task"}-${G}`}function ZV(J){let z=J.find((X)=>X.role==="user");if(!z)return"";let Y=z.blocks.filter((X)=>X.type==="text").map((X)=>X.text).join(" "),G=XV(Y);return G.length>0?Buffer.from(G,"utf8").toString("utf8"):G}async function sG(J,z=n1){if(!J)return"";let{history:Y}=e1(z),G=await Y.listSessionIdsForWorktree(J);for(let X of G.slice(0,GA)){let Z=ZV(await Y.readHistory(X));if(Z)return Z}return""}async function QV(J,z){if(!z)return"";try{return ZV(await e1(J).history.readHistory(z))}catch{return""}}var GA=8;var fq=k(()=>{SY();pJ()});function qV(J){let z=String(J),Y=z.length-1;return b1.context.id+(Y?String.fromCharCode(96+Y):"")+z}function u8(J){b1.context=J}function XA(){return{...b1.context,id:b1.getNextContextId(),count:0}}function KG(J,z){let Y=U1,G=$0,X=J.length===0,Z=z===void 0?G:z,Q=X?{owned:null,cleanups:null,context:null,owner:null}:{owned:null,cleanups:null,context:Z?Z.context:null,owner:Z},f=X?()=>J(()=>{throw Error("Dispose method must be an explicit argument to createRoot function")}):()=>J(()=>_1(()=>IY(Q)));Bz.afterCreateOwner&&Bz.afterCreateOwner(Q),$0=Q,U1=null;try{return SJ(f,!0)}finally{U1=Y,$0=G}}function a(J,z){z=z?Object.assign({},Wq,z):Wq;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(UV(Y),Bz.afterCreateSignal)Bz.afterCreateSignal(Y)}let G=(X)=>{if(typeof X==="function")if(H0&&H0.running&&H0.sources.has(Y))X=X(Y.tValue);else X=X(Y.value);return E8(Y,X)};return[DV.bind(Y),G]}function fV(J,z,Y){let G=JX(J,z,!0,xJ,Y);if(eG&&H0&&H0.running)a1.push(G);else UG(G)}function bz(J,z,Y){let G=JX(J,z,!1,xJ,Y);if(eG&&H0&&H0.running)a1.push(G);else UG(G)}function s0(J,z,Y){KV=LA;let G=JX(J,z,!1,xJ,Y),X=LZ&&EJ(LZ);if(X)G.suspense=X;if(!Y||!Y.render)G.user=!0;VJ?VJ.push(G):UG(G)}function K0(J,z,Y){Y=Y?Object.assign({},Wq,Y):Wq;let G=JX(J,z,!0,0,Y);if(G.observers=null,G.observerSlots=null,G.comparator=Y.equals||void 0,eG&&H0&&H0.running)G.tState=xJ,a1.push(G);else UG(G);return DV.bind(G)}function BA(J){return J&&typeof J==="object"&&"then"in J}function Dq(J,z,Y){let G,X,Z;if(typeof z==="function")G=J,X=z,Z=Y||{};else G=!0,X=J,Z=z||{};let Q=null,f=y8,H=null,B=!1,V=!1,j="initialValue"in Z,K=typeof G==="function"&&K0(G),L=new Set,[A,O]=(Z.storage||a)(Z.initialValue),[g,x]=a(void 0),[_,S]=a(void 0,{equals:!1}),[N,M]=a(j?"ready":"unresolved");if(b1.context){if(H=b1.getNextContextId(),Z.ssrLoadFrom==="initial")f=Z.initialValue;else if(b1.load&&b1.has(H))f=b1.load(H)}function I(T,q0,p,j0){if(Q===T){if(Q=null,j0!==void 0&&(j=!0),(T===f||q0===f)&&Z.onHydrated)queueMicrotask(()=>Z.onHydrated(j0,{value:q0}));if(f=y8,H0&&T&&B)H0.promises.delete(T),B=!1,SJ(()=>{H0.running=!0,r(q0,p)},!1);else r(q0,p)}return q0}function r(T,q0){SJ(()=>{if(q0===void 0)O(()=>T);M(q0!==void 0?"errored":j?"ready":"unresolved"),x(q0);for(let p of L.keys())p.decrement();L.clear()},!1)}function l(){let T=LZ&&EJ(LZ),q0=A(),p=g();if(p!==void 0&&!Q)throw p;if(U1&&!U1.user&&T)fV(()=>{if(_(),Q){if(T.resolved&&H0&&B)H0.promises.add(Q);else if(!L.has(T))T.increment(),L.add(T)}});return q0}function e(T=!0){if(T!==!1&&V)return;V=!1;let q0=K?K():G;if(B=H0&&H0.running,q0==null||q0===!1){I(Q,_1(A));return}if(H0&&Q)H0.promises.delete(Q);let p,j0=f!==y8?f:_1(()=>{try{return X(q0,{value:A(),refetching:T})}catch(F0){p=F0}});if(p!==void 0){I(Q,void 0,jq(p),q0);return}else if(!BA(j0))return I(Q,j0,void 0,q0),j0;if(Q=j0,"v"in j0){if(j0.s===1)I(Q,j0.v,void 0,q0);else I(Q,void 0,jq(j0.v),q0);return j0}return V=!0,queueMicrotask(()=>V=!1),SJ(()=>{M(j?"refreshing":"pending"),S()},!1),j0.then((F0)=>I(j0,F0,void 0,q0),(F0)=>I(j0,void 0,jq(F0),q0))}Object.defineProperties(l,{state:{get:()=>N()},error:{get:()=>g()},loading:{get(){let T=N();return T==="pending"||T==="refreshing"}},latest:{get(){if(!j)return l();let T=g();if(T&&!Q)throw T;return A()}}});let J0=$0;if(K)fV(()=>(J0=$0,e(!1)));else e(!1);return[l,{refetch:(T)=>WA(J0,()=>e(T)),mutate:O}]}function Lq(J){return SJ(J,!1)}function _1(J){if(!tG&&U1===null)return J();let z=U1;U1=null;try{if(tG)return tG.untrack(J);return J()}finally{U1=z}}function IJ(J,z,Y){let G=Array.isArray(J),X,Z=Y&&Y.defer;return(Q)=>{let f;if(G){f=Array(J.length);for(let B=0;B<J.length;B++)f[B]=J[B]()}else f=J();if(Z)return Z=!1,Q;let H=_1(()=>z(f,X,Q));return X=f,H}}function JJ(J){s0(()=>_1(J))}function N1(J){if($0===null)console.warn("cleanups created outside a `createRoot` or `render` will never be run");else if($0.cleanups===null)$0.cleanups=[J];else $0.cleanups.push(J);return J}function jA(J,z){if(UZ||(UZ=Symbol("error")),$0=JX(void 0,void 0,!0),$0.context={...$0.context,[UZ]:[z]},H0&&H0.running)H0.sources.add($0);try{return J()}catch(Y){FZ(Y)}finally{$0=$0.owner}}function Mq(){return U1}function WA(J,z){let Y=$0,G=U1;$0=J,U1=null;try{return SJ(z,!0)}catch(X){FZ(X)}finally{$0=Y,U1=G}}function VA(J){if(H0&&H0.running)return J(),H0.done;let z=U1,Y=$0;return Promise.resolve().then(()=>{U1=z,$0=Y;let G;if(eG||LZ)G=H0||(H0={sources:new Set,effects:[],promises:new Set,disposed:new Set,queue:new Set,running:!0}),G.done||(G.done=new Promise((X)=>G.resolve=X)),G.running=!0;return SJ(J,!1),U1=$0=null,G?G.done:void 0})}function BV(J,z){let Y=JX(()=>_1(()=>{return Object.assign(J,{[fA]:!0}),J(z)}),void 0,!0,0);return Y.props=z,Y.observers=null,Y.observerSlots=null,Y.name=J.name,Y.component=J,UG(Y),Y.tValue!==void 0?Y.tValue:Y.value}function UV(J){if($0){if($0.sourceMap)$0.sourceMap.push(J);else $0.sourceMap=[J];J.graph=$0}if(Bz.afterRegisterGraph)Bz.afterRegisterGraph(J)}function Sz(J,z){let Y=Symbol("context");return{id:Y,Provider:MA(Y,z),defaultValue:J}}function EJ(J){let z;return $0&&$0.context&&(z=$0.context[J.id])!==void 0?z:J.defaultValue}function KA(J){let z=K0(J),Y=K0(()=>x8(z()),void 0,{name:"children"});return Y.toArray=()=>{let G=Y();return Array.isArray(G)?G:G!=null?[G]:[]},Y}function DV(){let J=H0&&H0.running;if(this.sources&&(J?this.tState:this.state))if((J?this.tState:this.state)===xJ)UG(this);else{let z=a1;a1=null,SJ(()=>Vq(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&&H0.sources.has(this))return this.tValue;return this.value}function E8(J,z,Y){let G=H0&&H0.running&&H0.sources.has(J)?J.tValue:J.value;if(!J.comparator||!J.comparator(G,z)){if(H0){let X=H0.running;if(X||!Y&&H0.sources.has(J))H0.sources.add(J),J.tValue=z;if(!X)J.value=z}else J.value=z;if(J.observers&&J.observers.length)SJ(()=>{for(let X=0;X<J.observers.length;X+=1){let Z=J.observers[X],Q=H0&&H0.running;if(Q&&H0.disposed.has(Z))continue;if(Q?!Z.tState:!Z.state){if(Z.pure)a1.push(Z);else VJ.push(Z);if(Z.observers)MV(Z)}if(!Q)Z.state=xJ;else Z.tState=xJ}if(a1.length>1e6){if(a1=[],ZA)throw Error("Potential Infinite Loop Detected.");throw Error()}},!1)}return z}function UG(J){if(!J.fn)return;IY(J);let z=Uq;if(jV(J,H0&&H0.running&&H0.sources.has(J)?J.tValue:J.value,z),H0&&!H0.running&&H0.sources.has(J))queueMicrotask(()=>{SJ(()=>{H0&&(H0.running=!0),U1=$0=J,jV(J,J.tValue,z),U1=$0=null},!1)})}function jV(J,z,Y){let G,X=$0,Z=U1;U1=$0=J;try{G=J.fn(z)}catch(Q){if(J.pure)if(H0&&H0.running)J.tState=xJ,J.tOwned&&J.tOwned.forEach(IY),J.tOwned=void 0;else J.state=xJ,J.owned&&J.owned.forEach(IY),J.owned=null;return J.updatedAt=Y+1,FZ(Q)}finally{U1=Z,$0=X}if(!J.updatedAt||J.updatedAt<=Y){if(J.updatedAt!=null&&"observers"in J)E8(J,G,!0);else if(H0&&H0.running&&J.pure){if(!H0.sources.has(J))J.value=G;H0.sources.add(J),J.tValue=G}else J.value=G;J.updatedAt=Y}}function JX(J,z,Y,G=xJ,X){let Z={fn:J,state:G,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:z,owner:$0,context:$0?$0.context:null,pure:Y};if(H0&&H0.running)Z.state=0,Z.tState=G;if($0===null)console.warn("computations created outside a `createRoot` or `render` will never be disposed");else if($0!==HA)if(H0&&H0.running&&$0.pure)if(!$0.tOwned)$0.tOwned=[Z];else $0.tOwned.push(Z);else if(!$0.owned)$0.owned=[Z];else $0.owned.push(Z);if(X&&X.name)Z.name=X.name;if(tG&&Z.fn){let Q=Z.fn,[f,H]=a(void 0,{equals:!1}),B=tG.factory(Q,H);N1(()=>B.dispose());let V,j=()=>VA(H).then(()=>{if(V)V.dispose(),V=void 0});Z.fn=(K)=>{if(f(),H0&&H0.running){if(!V)V=tG.factory(Q,j);return V.track(K)}return B.track(K)}}return Bz.afterCreateOwner&&Bz.afterCreateOwner(Z),Z}function MZ(J){let z=H0&&H0.running;if((z?J.tState:J.state)===0)return;if((z?J.tState:J.state)===DZ)return Vq(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<Uq)){if(z&&H0.disposed.has(J))return;if(z?J.tState:J.state)Y.push(J)}for(let G=Y.length-1;G>=0;G--){if(J=Y[G],z){let X=J,Z=Y[G+1];while((X=X.owner)&&X!==Z)if(H0.disposed.has(X))return}if((z?J.tState:J.state)===xJ)UG(J);else if((z?J.tState:J.state)===DZ){let X=a1;a1=null,SJ(()=>Vq(J,Y[0]),!1),a1=X}}}function SJ(J,z){if(a1)return J();let Y=!1;if(!z)a1=[];if(VJ)Y=!0;else VJ=[];Uq++;try{let G=J();return UA(Y),G}catch(G){if(!Y)VJ=null;a1=null,FZ(G)}}function UA(J){if(a1){if(eG&&H0&&H0.running)DA(a1);else LV(a1);a1=null}if(J)return;let z;if(H0){if(!H0.promises.size&&!H0.queue.size){let{sources:G,disposed:X}=H0;VJ.push.apply(VJ,H0.effects),z=H0.resolve;for(let Z of VJ)"tState"in Z&&(Z.state=Z.tState),delete Z.tState;H0=null,SJ(()=>{for(let Z of X)IY(Z);for(let Z of G){if(Z.value=Z.tValue,Z.owned)for(let Q=0,f=Z.owned.length;Q<f;Q++)IY(Z.owned[Q]);if(Z.tOwned)Z.owned=Z.tOwned;delete Z.tValue,delete Z.tOwned,Z.tState=0}HV(!1)},!1)}else if(H0.running){H0.running=!1,H0.effects.push.apply(H0.effects,VJ),VJ=null,HV(!0);return}}let Y=VJ;if(VJ=null,Y.length)SJ(()=>KV(Y),!1);else Bz.afterUpdate&&Bz.afterUpdate();if(z)z()}function LV(J){for(let z=0;z<J.length;z++)MZ(J[z])}function DA(J){for(let z=0;z<J.length;z++){let Y=J[z],G=H0.queue;if(!G.has(Y))G.add(Y),eG(()=>{G.delete(Y),SJ(()=>{H0.running=!0,MZ(Y)},!1),H0&&(H0.running=!1)})}}function LA(J){let z,Y=0;for(z=0;z<J.length;z++){let G=J[z];if(!G.user)MZ(G);else J[Y++]=G}if(b1.context){if(b1.count){b1.effects||(b1.effects=[]),b1.effects.push(...J.slice(0,Y));return}u8()}if(b1.effects&&(b1.done||!b1.count))J=[...b1.effects,...J],Y+=b1.effects.length,delete b1.effects;for(z=0;z<Y;z++)MZ(J[z])}function Vq(J,z){let Y=H0&&H0.running;if(Y)J.tState=0;else J.state=0;for(let G=0;G<J.sources.length;G+=1){let X=J.sources[G];if(X.sources){let Z=Y?X.tState:X.state;if(Z===xJ){if(X!==z&&(!X.updatedAt||X.updatedAt<Uq))MZ(X)}else if(Z===DZ)Vq(X,z)}}}function MV(J){let z=H0&&H0.running;for(let Y=0;Y<J.observers.length;Y+=1){let G=J.observers[Y];if(z?!G.tState:!G.state){if(z)G.tState=DZ;else G.state=DZ;if(G.pure)a1.push(G);else VJ.push(G);G.observers&&MV(G)}}}function IY(J){let z;if(J.sources)while(J.sources.length){let Y=J.sources.pop(),G=J.sourceSlots.pop(),X=Y.observers;if(X&&X.length){let Z=X.pop(),Q=Y.observerSlots.pop();if(G<X.length)Z.sourceSlots[Q]=G,X[G]=Z,Y.observerSlots[G]=Q}}if(J.tOwned){for(z=J.tOwned.length-1;z>=0;z--)IY(J.tOwned[z]);delete J.tOwned}if(H0&&H0.running&&J.pure)FV(J,!0);else if(J.owned){for(z=J.owned.length-1;z>=0;z--)IY(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(H0&&H0.running)J.tState=0;else J.state=0;delete J.sourceMap}function FV(J,z){if(!z)J.tState=0,H0.disposed.add(J);if(J.owned)for(let Y=0;Y<J.owned.length;Y++)FV(J.owned[Y])}function jq(J){if(J instanceof Error)return J;return Error(typeof J==="string"?J:"Unknown error",{cause:J})}function WV(J,z,Y){try{for(let G of z)G(J)}catch(G){FZ(G,Y&&Y.owner||null)}}function FZ(J,z=$0){let Y=UZ&&z&&z.context&&z.context[UZ],G=jq(J);if(!Y)throw G;if(VJ)VJ.push({fn(){WV(G,Y,z)},state:xJ});else WV(G,Y,z)}function x8(J){if(typeof J==="function"&&!J.length)return x8(J());if(Array.isArray(J)){let z=[];for(let Y=0;Y<J.length;Y++){let G=x8(J[Y]);if(Array.isArray(G))if(G.length<32768)z.push.apply(z,G);else for(let X=0;X<G.length;X++)z.push(G[X]);else z.push(G)}return z}return J}function MA(J,z){return function(G){let X;return bz(()=>X=_1(()=>{return $0.context={...$0.context,[J]:G.value},KA(()=>G.children)}),void 0,z),X}}function VV(J){for(let z=0;z<J.length;z++)J[z]()}function OA(J,z,Y={}){let G=[],X=[],Z=[],Q=0,f=z.length>1?[]:null;return N1(()=>VV(Z)),()=>{let H=J()||[],B=H.length,V,j;return H[Kq],_1(()=>{let L,A,O,g,x,_,S,N,M;if(B===0){if(Q!==0)VV(Z),Z=[],G=[],X=[],Q=0,f&&(f=[]);if(Y.fallback)G=[FA],X[0]=KG((I)=>{return Z[0]=I,Y.fallback()}),Q=1}else if(Q===0){X=Array(B);for(j=0;j<B;j++)G[j]=H[j],X[j]=KG(K);Q=B}else{O=Array(B),g=Array(B),f&&(x=Array(B));for(_=0,S=Math.min(Q,B);_<S&&G[_]===H[_];_++);for(S=Q-1,N=B-1;S>=_&&N>=_&&G[S]===H[N];S--,N--)O[N]=X[S],g[N]=Z[S],f&&(x[N]=f[S]);L=new Map,A=Array(N+1);for(j=N;j>=_;j--)M=H[j],V=L.get(M),A[j]=V===void 0?-1:V,L.set(M,j);for(V=_;V<=S;V++)if(M=G[V],j=L.get(M),j!==void 0&&j!==-1)O[j]=X[V],g[j]=Z[V],f&&(x[j]=f[V]),j=A[j],L.set(M,j);else Z[V]();for(j=_;j<B;j++)if(j in O){if(X[j]=O[j],Z[j]=g[j],f)f[j]=x[j],f[j](j)}else X[j]=KG(K);X=X.slice(0,Q=B),G=H.slice(0)}return X});function K(L){if(Z[j]=L,f){let[A,O]=a(j,{name:"index"});return f[j]=O,z(H[j],A)}return z(H[j])}}}function OV(J,z){if(AA){if(b1.context){let Y=b1.context;u8(XA());let G=BV(J,z||{});return u8(Y),G}}return BV(J,z||{})}function Hq(){return!0}function T8(J){return!(J=typeof J==="function"?J():J)?{}:J}function gA(){for(let J=0,z=this.length;J<z;++J){let Y=this[J]();if(Y!==void 0)return Y}}function Fq(...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,K0(f)):f}if(qA&&z)return new Proxy({get(Q){for(let f=J.length-1;f>=0;f--){let H=T8(J[f])[Q];if(H!==void 0)return H}},has(Q){for(let f=J.length-1;f>=0;f--)if(Q in T8(J[f]))return!0;return!1},keys(){let Q=[];for(let f=0;f<J.length;f++)Q.push(...Object.keys(T8(J[f])));return[...new Set(Q)]}},RA);let Y={},G=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(!G[V])G[V]=j.get?{enumerable:!0,configurable:!0,get:gA.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 X={},Z=Object.keys(G);for(let Q=Z.length-1;Q>=0;Q--){let f=Z[Q],H=G[f];if(H&&H.get)Object.defineProperty(X,f,H);else X[f]=H?H.value:void 0}return X}function Q1(J){let z="fallback"in J&&{fallback:()=>J.fallback};return K0(OA(()=>J.each,J.children,z||void 0),void 0,{name:"value"})}function X0(J){let z=J.keyed,Y=K0(()=>J.when,void 0,{name:"condition value"}),G=z?Y:K0(Y,void 0,{equals:(X,Z)=>!X===!Z,name:"condition"});return K0(()=>{let X=G();if(X){let Z=J.children;return typeof Z==="function"&&Z.length>0?_1(()=>Z(z?X:()=>{if(!_1(G))throw CA("Show");return Y()})):Z}return J.fallback},void 0,{name:"value"})}function AV(J){let z;if(b1.context&&b1.load)z=b1.load(b1.getContextId());let[Y,G]=a(z,{name:"errored"});return Bq||(Bq=new Set),Bq.add(G),N1(()=>Bq.delete(G)),K0(()=>{let X;if(X=Y()){let Z=J.fallback;if(typeof Z!=="function"||Z.length==0)console.error(X);return typeof Z==="function"&&Z.length?_1(()=>Z(X,()=>G())):Z}return jA(()=>J.children,G)},void 0,{name:"value"})}var b1,ZA=!0,QA=(J,z)=>J===z,Hz,qA,Kq,fA,Wq,UZ=null,KV,xJ=1,DZ=2,HA,y8,$0=null,H0=null,eG=null,tG=null,U1=null,a1=null,VJ=null,Uq=0,Bz,dP,HV,LZ,FA,AA=!1,RA,CA=(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.`,Bq,RV;var W1=k(()=>{b1={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return qV(this.context.count)},getNextContextId(){return qV(this.context.count++)}};Hz=Symbol("solid-proxy"),qA=typeof Proxy==="function",Kq=Symbol("solid-track"),fA=Symbol("solid-dev-component"),Wq={equals:QA},KV=LV,HA={},y8={},Bz={afterUpdate:null,afterCreateOwner:null,afterCreateSignal:null,afterRegisterGraph:null};[dP,HV]=a(!1);FA=Symbol("fallback");RA={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:Hq,deleteProperty:Hq,getOwnPropertyDescriptor(J,z){return{configurable:!0,enumerable:!0,get(){return J.get(z)},set:Hq,deleteProperty:Hq}},ownKeys(J){return J.keys()}};RV={hooks:Bz,writeSignal:E8,registerGraph:UV};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 NA}from"child_process";function w8(J,z,Y,G){if(Y)return J+G.slowRetryMs;return z+Math.max(G.minIntervalMs,(z-J)*5)}function P8(J,z){return!J.inFlight&&z>=J.nextAllowedAt}function gV(J,z,Y=Math.random){let G=Math.max(0,Math.min(1,z)),X=(Y()*2-1)*J*G;return Math.max(0,J+X)}function CV(J,z,Y){if(z<=0)return Math.min(J,Y);return Math.min(J*2**z,Y)}function zX(J,z,Y,G){let X=Date.now();if(!P8(J,X))return!1;J.inFlight=!0;let Z=new AbortController,Q=setTimeout(()=>Z.abort(),z.timeoutMs);return(async()=>{let f,H=!1;try{f=await Y(Z.signal),H=!0}catch{}clearTimeout(Q);let B=Z.signal.aborted;if(J.nextAllowedAt=w8(X,Date.now(),B,z),J.inFlight=!1,H&&!B)G(f)})(),!0}function GY(J,z,Y){return new Promise((G)=>{let X="",Z=!1,Q=(H)=>{if(Z)return;Z=!0,G({status:H,stdout:X})},f=NA(J,z.slice(),{cwd:Y.cwd,stdio:["ignore","pipe","ignore"],env:Y.env,signal:Y.signal,killSignal:"SIGKILL"});f.stdout?.on("data",(H)=>{X+=String(H)}),f.on("error",()=>Q(null)),f.on("close",(H)=>Q(H))})}var YX=()=>{};function kA(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 bA(J){let z=(J.status??"").toUpperCase(),Y=(J.conclusion??"").toUpperCase(),G=(J.state??"").toUpperCase();if(z&&z!=="COMPLETED")return"pending";if(Y){if(Y==="SUCCESS"||Y==="NEUTRAL"||Y==="SKIPPED")return"passing";return"failing"}if(G==="SUCCESS")return"passing";if(G==="PENDING"||G==="EXPECTED")return"pending";if(G==="FAILURE"||G==="ERROR")return"failing";return"unknown"}function SA(J){if(!J||J.length===0)return"none";let z=!1,Y=!1;for(let G of J){let X=bA(G);if(X==="failing")return"failing";if(X==="pending")z=!0;else if(X==="passing")Y=!0}if(z)return"pending";if(Y)return"passing";return"unknown"}function kV(J,z){if(!J||typeof J.number!=="number")return null;return{provider:"github",lifecycle:kA(J.state,J.reviewDecision),checkState:SA(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 Aq(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 Oq(J,z){return z.some((Y)=>J.includes(Y))}function h8(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(Oq(z,uA))return{kind:"empty"};if(Oq(z,IA))return{kind:"error",error:"no-remote"};if(Oq(z,yA))return{kind:"error",error:"auth"};if(Oq(z,TA))return{kind:"error",error:"network"};return{kind:"empty"}}function OZ(J,z,Y,G,X=Math.random){let Z=(f)=>Y+gV(f,G.jitterRatio,X);if(J.kind==="pr")return{nextAllowedAt:Z(J.settled?G.settledMs:G.tickMs),failures:0};if(J.kind==="empty")return{nextAllowedAt:Z(G.noPrMs),failures:0};if(J.error==="no-remote")return{nextAllowedAt:Z(G.noRemoteMs),failures:0};let Q=z+1;return{nextAllowedAt:Z(CV(G.failureBaseMs,Q-1,G.failureCapMs)),failures:Q}}var NV="number,url,title,state,baseRefName,headRefName,reviewDecision,mergeable,statusCheckRollup",IA,yA,TA,uA;var v8=k(()=>{YX();IA=["none of the git remotes","no git remote","to use github cli in a github repository","not a github repository"],yA=["gh auth login","authentication required","not logged in","http 401","bad credentials","requires authentication"],TA=["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 m8,c8,d8,n8="DIRTY_WORKTREE",i8,l8;var $8=k(()=>{m8=class m8 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"}};c8=class c8 extends Error{constructor(J){super(`task not found: ${J}`);this.name="TaskNotFoundError"}};d8=class d8 extends Error{constructor(){super("cannot delete a main task; remove the repo from saved repos instead");this.name="CannotDeleteMainTaskError"}};i8=class i8 extends Error{taskId;constructor(J){super(`${n8}: task ${J} worktree has uncommitted or untracked changes`);this.taskId=J;this.name="DirtyWorktreeError"}};l8=class l8 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 bV;var SV=k(()=>{bV=["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 IV(J){let z=J.auth,Y=z.kind==="key"?{kind:"key",keyPath:z.keyPath}:{kind:"password",getPassword:()=>TQ(z.keychainRef)};return{host:J.host,user:J.user,port:J.port,auth:Y,controlPath:kQ(J.host,J.user,J.port)}}function GX(J){let z=pz(J);if(!z)return new yQ;return new nG(IV(z))}function XY(J){for(let z of Object.values(pH()))if(J===z.basePath||J.startsWith(`${z.basePath}/`))return new nG(IV(z));return new yQ}function yV(J){return J&&$1(J)?J:void 0}function Rq(J){let z=XY(J);return z.isRemote||z.existsSync(J)}function w1(J){return XY(J).isRemote?Nz():J}var jz=k(()=>{p1();O1();mH();nH()});import{createHash as xA}from"crypto";import uV from"fs";import wJ from"path";function xV(J){if(!wJ.isAbsolute(J))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${J}`);return wJ.join(qJ(),EA,mA(J))}function EV(J){if(!wJ.isAbsolute(J))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${J}`);return[xV(J),...hA.map((z)=>wJ.join(J,z))]}function wV(J,z){if(!z||/[/\\\0]/.test(z))throw Error(`worktreePathFor: invalid slug: ${JSON.stringify(z)}`);return wJ.join(xV(J),z)}async function PV(J){if($1(J)){let Y=pz(J)?.basePath;if(!Y)return[];return GX(J).readdir(vV(Y))}let z=new Set;for(let Y of EV(J))try{for(let G of uV.readdirSync(Y,{withFileTypes:!0}))if(G.isDirectory())z.add(G.name)}catch{}return[...z]}function a8(J,z){if(!wJ.isAbsolute(J)||!wJ.isAbsolute(z))return null;let Y=TV(z);for(let G of EV(J)){let X=TV(G),Z=wJ.relative(X,Y);if(Z!==""&&!Z.startsWith("..")&&!wJ.isAbsolute(Z))return G}return null}function hV(J,z){return a8(J,z)!==null}function vV(J){return`${vA(J)}/.kobe/worktrees`}function mV(J,z){if(!z||/[/\\\0]/.test(z))throw Error(`remoteWorktreePathFor: invalid slug: ${JSON.stringify(z)}`);return`${vV(J)}/${z}`}function vA(J){return J.length>1&&J.endsWith("/")?J.replace(/\/+$/,""):J}function TV(J){try{return uV.realpathSync(J)}catch{return wJ.resolve(J)}}function mA(J){let Y=(wJ.basename(J)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",G=xA("sha1").update(wJ.resolve(J)).digest("hex").slice(0,12);return`${Y}-${G}`}var EA="worktrees",wA=".kobe/worktrees",PA=".claude/worktrees",hA;var _8=k(()=>{p1();jz();O1();hA=[wA,PA]});class p8{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??bV,this.pool.length===0)throw Error("SlugAllocator: animal pool cannot be empty")}async allocate(J){let z=this.chain,Y;this.chain=new Promise((G)=>{Y=G}),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((X)=>!z.has(X));if(Y.length>0){let X=Y[Math.floor(this.random()*Y.length)];return this.addPending(J,X),X}let G=this.pool[Math.floor(this.random()*this.pool.length)];for(let X=2;;X++){let Z=`${G}-v${X}`;if(!z.has(Z))return this.addPending(J,Z),Z}}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 PV(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 cV=k(()=>{SV();_8()});var nV={};j1(nV,{PLACEHOLDER_TASK_TITLE:()=>Iz,Orchestrator:()=>gq});import{realpathSync as cA}from"fs";import{basename as dA,resolve as nA}from"path";function dV(J){return pz(J)?.basePath??J}class gq{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 p8((Z)=>this.store.list().filter((Q)=>Q.repo===Z&&Q.kind!=="main").map((Q)=>{return Q.worktreePath.match(/([^/\\]+)[/\\]*$/)?.[1]??""}).filter((Q)=>Q.length>0));let[z,Y]=a(this.store.list());this.tasksAcc=z,this.setTasks=(Z)=>Y(()=>Z);let[G,X]=a(null);this.activeTaskAcc=G,this.setActiveTaskSig=(Z)=>X(()=>Z),this.unsubscribeStore=this.store.subscribe((Z)=>{this.setTasks(Z.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??n1,...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}=AZ(J),G=this.store.list().find((Q)=>Q.kind==="main"&&AZ(Q.repo).key===Y);if(G)return G;let X=this.mainTaskLocks.get(Y);if(X)return X;let Z=(async()=>{return await this.store.create({repo:z,title:iA(z),branch:"",worktreePath:dV(z),status:"backlog",kind:"main",vendor:n1})})();this.mainTaskLocks.set(Y,Z);try{return await Z}finally{this.mainTaskLocks.delete(Y)}}async ensureWorktree(J){let z=this.requireTask(J);if(z.kind==="main")return dV(z.repo);if(z.worktreePath)return z.worktreePath;let Y=this.worktreeLocks.get(z.id);if(Y)return Y;let G=this.createWorktree(z);this.worktreeLocks.set(z.id,G);try{return await G}finally{this.worktreeLocks.delete(z.id)}}async createWorktree(J){let z=await this.slugs.allocate(J.repo),Y=J.branch||qq(J.title,J.id),G=this.pendingBaseRefs.get(J.id),X;try{X=await this.worktrees.createForTask({repo:J.repo,slug:z,branch:Y,baseRef:G})}catch(Z){throw this.slugs.cancel(J.repo,z),Z}try{await this.store.update(J.id,{worktreePath:X.path,branch:Y})}catch(Z){throw await this.rollbackWorktree(X.path),this.slugs.cancel(J.repo,z),Z}return this.slugs.commit(J.repo,z),this.pendingBaseRefs.delete(J.id),X.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 G=this.requireTask(J);if(G.title===Y)return;await this.store.update(G.id,{title:Y}),await this.followBranchToTitle(G,Y)}async followBranchToTitle(J,z){if(J.kind==="main"||!J.worktreePath)return;if(J.branch!==qq(Iz,J.id))return;let Y=qq(z,J.id);if(Y===J.branch)return;try{await this.setBranch(J.id,Y)}catch(G){console.error(`[kobe] follow-branch-to-title failed for ${J.id}:`,G)}}async setBranch(J,z){let Y=z.trim();if(!Y)throw Error("setBranch: branch is required (empty or whitespace-only rejected)");let G=this.requireTask(J);if(G.kind==="main")throw Error("setBranch: a main task tracks the repo's own branch; rename it with git directly");if(G.branch===Y)return;if(G.worktreePath)await this.worktrees.renameBranch(G.worktreePath,G.branch,Y);await this.store.update(G.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 G=z??!Y.pinned;if((Y.pinned??!1)===G)return;await this.store.update(Y.id,{pinned:G})}async moveTask(J,z){let Y=this.requireTask(J);if(Y.kind==="main")return;let G=this.store.list().filter((X)=>(X.kind??"task")!=="main"&&X.archived===Y.archived&&(X.pinned??!1)===(Y.pinned??!1)).map((X)=>String(X.id));await this.store.move(Y.id,z,G)}async setArchived(J,z){let Y=this.requireTask(J);if(Y.kind==="main")return;let G=z??!Y.archived;if(Y.archived===G)return;await this.store.update(Y.id,{archived:G})}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 m8(Y.status,z,Y.id);await this.store.update(Y.id,{status:z})}async setPRStatus(J,z){let Y=this.requireTask(J);if(Aq(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 d8;let G=z?.force===!0;if(Y.worktreePath){if(!G){let X=!1;try{X=await this.worktrees.isDirty(Y.worktreePath)}catch{}if(X)throw new i8(Y.id)}try{await this.worktrees.remove(Y.worktreePath,{force:G})}catch(X){throw new l8(Y.id,X)}}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=AZ(J).key;for(let Y of CJ())if(AZ(Y).key===z)aH(Y);for(let Y of this.store.list()){if(Y.kind!=="main")continue;if(AZ(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((G)=>G.worktreePath).map((G)=>XX(G.worktreePath)));return z.filter((G)=>!Y.has(XX(G.path)))}async adoptWorktree(J){if(!J.repo)throw Error("adoptWorktree: repo is required");if(!J.worktreePath)throw Error("adoptWorktree: worktreePath is required");let z=XX(J.worktreePath),Y=this.adoptLocks.get(z);if(Y)return Y;let G=this.adoptWorktreeLocked(J,z);this.adoptLocks.set(z,G);try{return await G}finally{this.adoptLocks.delete(z)}}async adoptWorktreeLocked(J,z){let Y=this.store.list().find((f)=>f.worktreePath&&XX(f.worktreePath)===z);if(Y){if(J.ifExists==="return")return Y;throw Error(`adoptWorktree: ${J.worktreePath} is already adopted as a task`)}let X=(await this.worktrees.listAll(J.repo)).find((f)=>XX(f.path)===z);if(!X)throw Error(`adoptWorktree: ${J.worktreePath} is not an adoptable git worktree of ${J.repo} (unknown, detached, or the main checkout)`);let Z=J.branch?.trim()||X.branch,Q=(J.title??dA(X.path)).trim()||Iz;return this.store.create({repo:J.repo,title:Q,branch:Z,worktreePath:X.path,status:"backlog",kind:"task",vendor:J.vendor??n1})}pendingBaseRefs=new Map;adoptLocks=new Map;requireTask(J){let z=this.store.get(J);if(!z)throw new c8(String(J));return z}}function iA(J){let z=J.split(/[/\\]/).filter(Boolean);return z.length>0?z[z.length-1]??J:J}function AZ(J){let z=$z(J);return{repo:z,key:$1(z)?z:XX(z)}}function XX(J){try{return cA(J)}catch{return nA(J)}}var Iz="(new task)";var RZ=k(()=>{W1();v8();O1();pJ();$8();cV()});function ZX(J,z,Y){if(!z)return J;let G=GX(z);return G.ensureReady(),G.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}=${Z1(Y)}`)}return J.length>0?`${J.join(" ")} `:""}var gZ="@kobe_remote";var DG=k(()=>{jz();fz()});var bZ={};j1(bZ,{windowIsSurface:()=>rA,windowCount:()=>aA,tmuxSessionName:()=>M1,tmuxCommandSequence:()=>o8,tmuxAvailable:()=>yz,tmuxArgs:()=>LG,tagPaneRole:()=>$V,tagClaudePane:()=>pA,switchClientBeforeKill:()=>uz,setWindowOption:()=>TY,setSessionOption:()=>ZY,sessionExists:()=>H1,sendKeys:()=>Nq,sendKeyName:()=>kZ,runTmuxSequenceCapturing:()=>CZ,runTmuxSequence:()=>i1,runTmuxCapturing:()=>a0,runTmux:()=>P0,paneIdByRole:()=>t8,newWindow:()=>Vz,killSession:()=>rJ,globalTasksPaneWidth:()=>Cq,getSessionOptions:()=>yJ,getSessionOption:()=>MG,getServerOptions:()=>yY,getServerOption:()=>lV,ensureFallbackSession:()=>kq,currentSessionName:()=>OJ,claudePaneIdStrict:()=>fX,claudePaneId:()=>e8,capturePaneById:()=>HX,attachArgv:()=>qX,SURFACE_WINDOW_OPTION:()=>JB,PANE_ROLE_OPTION:()=>NZ,KOBE_TMUX_SOCKET:()=>Wz,KOBE_HOME_SESSION:()=>aV,CLAUDE_ROLE_OPTION:()=>_A,CHAT_TAB_SESSION_ID_OPTION:()=>Tz});import{homedir as lA}from"os";function LG(...J){return["tmux","-L",Wz,...J]}function M1(J){return`kobe-${J.replace(/[^A-Za-z0-9_-]/g,"")}`}function qX(J){return LG("attach-session","-t",`=${J}`)}async function r8(J){if(!J)return"";try{return await new Response(J).text()}catch{return""}}async function P0(J){try{let z=Bun.spawn(LG(...J),{stdin:"ignore",cwd:QX,stdout:"ignore",stderr:"pipe"}),[Y,G]=await Promise.all([r8(z.stderr),z.exited]);if(G!==0&&Y.trim().length>0)console.error(`[kobe tmux] ${J.join(" ")} (${G}): ${Y.trim()}`);return G}catch{return 1}}async function $A(J){try{return await Bun.spawn(LG(...J),{stdin:"ignore",cwd:QX,stdout:"ignore",stderr:"ignore"}).exited}catch{return 1}}function o8(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 i1(J){let z=o8(J);return z.length===0?0:P0(z)}async function a0(J){try{let z=Bun.spawn(LG(...J),{stdin:"ignore",cwd:QX,stdout:"pipe",stderr:"pipe"}),[Y,G,X]=await Promise.all([r8(z.stdout),r8(z.stderr),z.exited]);if(X!==0&&G.trim().length>0)console.error(`[kobe tmux] ${J.join(" ")} (${X}): ${G.trim()}`);return{code:X,stdout:Y}}catch{return{code:1,stdout:""}}}async function CZ(J){let z=o8(J);return z.length===0?{code:0,stdout:""}:a0(z)}async function yz(){try{return await Bun.spawn(["tmux","-V"],{stdin:"ignore",cwd:QX,stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function H1(J){return await $A(["has-session","-t",`=${J}`])===0}async function aA(J){let{code:z,stdout:Y}=await a0(["list-windows","-t",`=${J}`,"-F","#{window_id}"]);if(z!==0)return 0;return Y.split(`
|
|
36
|
+
`).filter((G)=>G.trim().length>0).length}async function ZY(J,z,Y){await P0(["set-option","-t",J,z,Y])}async function MG(J,z){let{code:Y,stdout:G}=await a0(["show-options","-v","-t",J,z]);return Y===0?G.trim():""}async function yJ(J,z){let Y=Object.fromEntries(z.map((Z)=>[Z,void 0])),{code:G,stdout:X}=await CZ(z.map((Z)=>["show-options","-q","-t",J,Z]));if(G!==0)return Y;for(let Z of X.split(`
|
|
37
|
+
`)){let Q=Z.indexOf(" ");if(Q<=0)continue;let f=Z.slice(0,Q);if(f in Y)Y[f]=Z.slice(Q+1).trim()}return Y}async function lV(J){let{code:z,stdout:Y}=await a0(["show-options","-sqv",J]);return z===0?Y.trim():""}async function yY(J){let z=Object.fromEntries(J.map((X)=>[X,void 0])),{code:Y,stdout:G}=await CZ(J.map((X)=>["show-options","-sq",X]));if(Y!==0)return z;for(let X of G.split(`
|
|
38
|
+
`)){let Z=X.indexOf(" ");if(Z<=0)continue;let Q=X.slice(0,Z);if(Q in z)z[Q]=X.slice(Z+1).trim()}return z}async function Cq(){let J=await lV(JY),z=Number.parseInt(J,10);return Number.isFinite(z)&&z>0?HG(z):qG}async function $V(J,z){await P0(["set-option","-p","-t",J,NZ,z])}async function TY(J,z,Y){await P0(["set-window-option","-t",J,z,Y])}async function pA(J){await $V(J,s8)}async function t8(J,z,Y=!1){let{code:G,stdout:X}=await a0(["list-panes","-t",`=${J}`,"-F",`#{pane_id} #{${NZ}}`]);if(G!==0)return"";let Z="";for(let Q of X.split(`
|
|
39
|
+
`)){let[f,H]=Q.split("\t");if(!f)continue;if(!Z)Z=f.trim();if(H?.trim()===z)return f.trim()}return Y?Z:""}async function e8(J){return t8(J,s8,!0)}async function fX(J){return t8(J,s8,!1)}async function HX(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:G,stdout:X}=await a0(Y);return G===0?X:""}async function Nq(J,z){await P0(["send-keys","-t",J,"-l","--",z])}async function kZ(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:G,stdout:X}=await a0(Y),Z=X.trim();if(G===0&&Z)await TY(Z,JB,"1");return}Y.push(z.command),await P0(Y)}async function rA(J){let{code:z,stdout:Y}=await a0(["display-message","-t",J,"-p",`#{${JB}}`]);return z===0&&Y.trim()==="1"}async function OJ(){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:G}=await a0(J),X=G.trim();return Y===0&&X.length>0?X:null}async function rJ(J){if(!J.startsWith("kobe-hidden-")){let z=HZ(J);if(await H1(z))await P0(["kill-session","-t",`=${z}`])}if(await H1(J))await P0(["kill-session","-t",`=${J}`])}async function kq(){let J=aV;if(await H1(J)){if(await MG(J,iV)==="tasks")return J;await P0(["kill-session","-t",`=${J}`])}let Y=(await a0(["new-session","-d","-s",J,"-c",QX,"-x","220","-y","50","-P","-F","#{pane_id}",M7()])).stdout.trim();if(Y){let G=await Cq(),Z=(await a0(["split-window","-h","-b","-t",Y,"-l",`${G}`,"-c",QX,"-P","-F","#{pane_id}",bJ(zJ()+kY(k1()))])).stdout.trim();if(Z)await i1([["set-option","-p","-t",Z,NZ,"tasks"],["select-pane","-t",Z]])}return await ZY(J,iV,"tasks"),J}async function uz(J,z){if(await OJ()!==J)return;if(z&&z!==J&&await H1(z)){await P0(["switch-client","-t",`=${z}`]);return}let G=await kq();await P0(["switch-client","-t",`=${G}`])}var Wz,QX,NZ="@kobe_role",_A,s8="claude",Tz="@kobe_session_id",JB="@kobe_surface",aV="kobe-home",iV="@kobe_home";var P1=k(()=>{ez();DG();fz();Wz=process.env.KOBE_TMUX_SOCKET?.trim()||"kobe";QX=lA()||"/";_A=NZ});async function oA(J,z=_V){let{code:Y,stdout:G}=await z.capture(["list-windows","-t",`=${J}`,"-F",`#{window_index} #{automatic-rename} #{${Tz}}`]);if(Y!==0)return[];let X=[];for(let Z of G.split(`
|
|
40
|
+
`)){let[Q,f,H]=Z.split("\t"),B=Number.parseInt((Q??"").trim(),10);if(!Number.isInteger(B))continue;X.push({index:B,sessionId:H?.trim()??"",autoRename:f?.trim()??""})}return X}async function sA(J,z,Y){let{code:G,stdout:X}=await Y.capture(["show-window-options","-t",`=${J}:${z}`,"automatic-rename"]);return G===0&&/\boff\b/.test(X)}async function tA(J){let{code:z,stdout:Y}=await J.capture(["show-window-options","-g","automatic-rename"]);return z===0&&/\boff\b/.test(Y)}async function eA(J,z,Y,G){return await G.run(["rename-window","-t",`=${J}:${z}`,"--",Y])===0}async function pV(J,z=JR){let Y=0,G=null,X=async(Z,Q)=>{if(Q.autoRename==="1")return!1;if(Q.autoRename==="0"){if(G===null)G=await tA(z.runner);if(!G)return!0}return sA(Z,Q.index,z.runner)};for(let Z of J.listTasks()){if(Z.archived||Z.kind==="main"||!Z.worktreePath)continue;let Q=M1(Z.id),f=await oA(Q,z.runner);if(f.length===0)continue;let H=f.reduce((V,j)=>Math.min(V,j.index),Number.POSITIVE_INFINITY),B=Z.vendor??n1;for(let V of f)try{if(await X(Q,V))continue;let j=V.sessionId?await z.titleFromSessionId(B,V.sessionId):V.index===H?await z.titleFromWorktree(Z.worktreePath,B):"";if(j&&await eA(Q,V.index,j,z.runner))Y++}catch{}}return Y}var _V,JR;var rV=k(()=>{fq();P1();pJ();_V={capture:a0,run:P0};JR={runner:_V,titleFromSessionId:QV,titleFromWorktree:sG}});function sV(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 oV(J,z,Y=new Date){let G=sV(z);return`[${Y.toISOString()}] daemon ${J}: ${G.stack??`${G.name}: ${G.message}`}
|
|
41
|
+
`}function zR(J,z,Y=new Date){let G=sV(z);return`[${Y.toISOString()}] daemon error [${J}]: ${G.stack??`${G.name}: ${G.message}`}
|
|
42
|
+
`}function I1(J,z){process.stderr.write(zR(J,z))}function YR(J,z,Y=new Date){return`[${Y.toISOString()}] daemon [${J}]: ${z}
|
|
43
|
+
`}function xz(J,z){process.stderr.write(YR(J,z))}function tV(J=(z)=>process.stderr.write(z)){if(zB||YB)return;zB=(z)=>J(oV("unhandledRejection",z)),YB=(z)=>J(oV("uncaughtException",z)),process.on("unhandledRejection",zB),process.on("uncaughtException",YB)}var zB,YB;async function GR(J,z=sG){let Y=[];for(let G of J.listTasks()){if(G.archived||G.title!==Iz||!G.worktreePath)continue;try{let X=await z(G.worktreePath,G.vendor??n1);if(!X)continue;let Z=J.getTask(G.id);if(!Z||Z.title!==Iz)continue;await J.setTitle(G.id,X),Y.push({id:G.id,title:X})}catch(X){I1("auto-title-poller",X)}}return Y}function eV(J,z=GB,Y){if(z<=0)return()=>{};let G=!1,Z=setInterval(()=>{if(Y&&!Y())return;if(G)return;G=!0,GR(J).then(()=>pV(J)).catch((Q)=>I1("auto-title-poller",Q)).finally(()=>{G=!1})},z);return Z.unref?.(),()=>clearInterval(Z)}var GB=4000;var J5=k(()=>{fq();RZ();rV();pJ()});class XB{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 ZB{last=new Map;sinks=new Set;publish(J,z){this.last.set(J,z);let Y={channel:J,payload:z};for(let G of this.sinks)G(Y)}snapshot(){return[...this.last].map(([J,z])=>({channel:J,payload:z}))}onPublish(J){return this.sinks.add(J),()=>{this.sinks.delete(J)}}}function bq(){return d1()[FG]===!0}var FG="experimental.autoStatus";var SZ=k(()=>{YG()});async function z5(J,z,Y=bq){if(!Y())return"skipped";let G=J.getTask(z);if(!G)return"skipped";if((G.kind??"task")==="main"||G.archived)return"skipped";if(G.status!=="backlog")return"skipped";return await J.setStatus(z,"in_progress"),"moved"}var Y5=k(()=>{SZ()});import{createHash as XR}from"crypto";import{homedir as ZR}from"os";import xY from"path";function BR(){return xY.join(process.env.KOBE_HOME_DIR??ZR(),".kobe")}function jR(J){let Y=(xY.basename(J)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",G=XR("sha1").update(xY.resolve(J)).digest("hex").slice(0,12);return`${Y}-${G}`}function WR(J){if(!xY.isAbsolute(J))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${J}`);return xY.join(BR(),QR,jR(J))}function VR(J){if(!xY.isAbsolute(J))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${J}`);return[WR(J),...HR.map((z)=>xY.join(J,z))]}function uY(J){return J.length>1&&J.endsWith("/")?J.slice(0,-1):J}function G5(J,z){return z===J||z.startsWith(`${J}/`)}function X5(J,z){let Y=uY(z),G,X=-1;for(let Z of J){if(!Z.worktreePath)continue;let Q=uY(Z.worktreePath);if(G5(Q,Y)&&Q.length>X)X=Q.length,G=Z.id}return G}function QB(J,z){let Y=uY(z),G,X=-1;for(let Z of J){if(!Z.repo)continue;let Q=uY(Z.repo);if(G5(Q,Y)&&Q.length>X)X=Q.length,G=Q}return G}function Z5(J,z){let Y=uY(z),G=new Set,X=new Set;for(let Z of J){if(Z.repo)G.add(uY(Z.repo));if(Z.worktreePath)X.add(uY(Z.worktreePath))}for(let Z of G)for(let Q of VR(Z).map(uY)){let f=`${Q}/`;if(!Y.startsWith(f))continue;let B=Y.slice(f.length).split("/")[0];if(!B)continue;let V=`${f}${B}`;if(X.has(V))return;return{repo:Z,worktreePath:V}}return}var QR="worktrees",qR=".kobe/worktrees",fR=".claude/worktrees",HR;var Q5=k(()=>{HR=[qR,fR]});function HB(J){return{message:J instanceof Error?J.message:String(J),name:J instanceof Error?J.name:void 0}}async function IZ(J,z,Y,G){let X=J.get(z);if(!X)throw Error(`unknown daemon request: ${z}`);return X.handle(BB(Y),G)}function yZ(){return new Map([{name:"hello",handle(z,Y){let G=typeof z.protocolVersion==="number"?z.protocolVersion:lJ,X=typeof z.minProtocolVersion==="number"?z.minProtocolVersion:G;if(!EQ({localVersion:lJ,localMin:AY,remoteVersion:G,remoteMin:X}))throw Error(`daemon is protocol v${lJ} (min v${AY}); this client is v${G} (min v${X}). Upgrade your kobe.`);return{protocolVersion:lJ,minProtocolVersion:AY,kobeVersion:o0,capabilities:[...oH],daemonPid:Y.daemon.pid,clientId:Y.clientId,tasks:Y.orch.listTasks().map(Xz)}}},{name:"daemon.status",handle(z,Y){return{daemonPid:Y.daemon.pid,kobeVersion:o0,uptimeMs:Date.now()-Y.daemon.startedAt.getTime(),startedAt:Y.daemon.startedAt.toISOString(),attachedClients:Y.daemon.guiCount(),taskCount:Y.orch.listTasks().length,socketPath:Y.daemon.socketPath,webPort:Y.daemon.webPort??null}}},{name:"daemon.stop",async handle(z,Y){return await Y.daemon.stopSoon(),{}}},{name:"task.list",handle(z,Y){return{tasks:Y.orch.listTasks().map(Xz)}}},{name:"task.get",handle(z,Y){let G=A1(z,"taskId"),X=Y.orch.getTask(G);if(!X)throw Error(`task not found: ${G}`);return{task:Xz(X)}}},{name:"task.create",async handle(z,Y){let G=A1(z,"repo"),X=await Y.orch.createTask({repo:G,title:oJ(z,"title"),branch:oJ(z,"branch"),baseRef:oJ(z,"baseRef"),vendor:fB(z,"vendor"),modelEffort:oJ(z,"effort")});return{taskId:X.id,task:Xz(X)}}},{name:"task.archive",async handle(z,Y){let G=A1(z,"taskId");return await Y.orch.setArchived(G,qB(z,"archived")),{}}},{name:"task.rename",async handle(z,Y){let G=A1(z,"taskId");return await Y.orch.setTitle(G,A1(z,"title")),{}}},{name:"task.setBranch",async handle(z,Y){let G=A1(z,"taskId");return await Y.orch.setBranch(G,A1(z,"branch")),{}}},{name:"task.setVendor",async handle(z,Y){let G=A1(z,"taskId"),X=fB(z,"vendor");if(!X)throw Error("task.setVendor: vendor is required");return await Y.orch.setVendor(G,X),{}}},{name:"task.delete",async handle(z,Y){let G=A1(z,"taskId");return await Y.orch.deleteTask(G,{force:qB(z,"force")}),Y.activity.clearTask(G),{}}},{name:"task.pin",async handle(z,Y){let G=A1(z,"taskId");return await Y.orch.setPinned(G,qB(z,"pinned")),{}}},{name:"task.move",async handle(z,Y){let G=A1(z,"taskId"),X=A1(z,"direction");if(X!=="up"&&X!=="down")throw Error("direction must be up or down");return await Y.orch.moveTask(G,X==="up"?-1:1),{}}},{name:"task.status",async handle(z,Y){let G=A1(z,"taskId"),X=A1(z,"status");if(!JV(X))throw Error("status must be a TaskStatus");let Z=X==="done"?Y.orch.getTask(G):void 0,Q=Z?.status;if(await Y.orch.setStatus(G,X),X==="done"&&Q!=="done"&&Z)try{let f=await Y.issues.mirrorTaskDone(Z.repo,G);if(f)Y.bus.publish("issue.snapshot",f)}catch(f){I1("issue-done-mirror",f)}return{}}},{name:"task.reorder",async handle(z,Y){let G=z.moves;if(!Array.isArray(G)||G.length===0)throw Error("moves must be a non-empty array");if(G.length>500)throw Error("too many moves in one task.reorder batch (max 500)");let X=G.map((Z)=>{if(typeof Z!=="object"||Z===null)throw Error("each move needs taskId and position");let Q=Z,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(X),{}}},{name:"task.ensureMain",async handle(z,Y){let G=A1(z,"repo"),X=await Y.orch.ensureMainTask(G);return{task:Xz(X)}}},{name:"project.forget",async handle(z,Y){let G=A1(z,"repo");return await Y.orch.forgetProject(G),{}}},{name:"task.ensureWorktree",async handle(z,Y){let G=A1(z,"taskId");Y.bus.publish("task.jobs",{taskId:G,kind:"ensureWorktree",phase:"running"});try{let X=await Y.orch.ensureWorktree(G);return Y.bus.publish("task.jobs",{taskId:G,kind:"ensureWorktree",phase:"done"}),{worktreePath:X}}catch(X){throw Y.bus.publish("task.jobs",{taskId:G,kind:"ensureWorktree",phase:"error",error:X instanceof Error?X.message:String(X)}),X}}},{name:"worktree.discoverAdoptable",async handle(z,Y){let G=A1(z,"repo");return{worktrees:await Y.orch.discoverAdoptableWorktrees(G)}}},{name:"worktree.adopt",async handle(z,Y){let G=await Y.orch.adoptWorktree({repo:A1(z,"repo"),worktreePath:A1(z,"worktreePath"),branch:oJ(z,"branch"),vendor:fB(z,"vendor"),title:oJ(z,"title"),ifExists:oJ(z,"ifExists")==="return"?"return":"error"});return{task:Xz(G)}}},{name:"worktree.reconcile",async handle(z,Y){let G=A1(z,"cwd"),X=A1(z,"worktreePath"),Z=QB(Y.orch.listTasks(),G)??QB(Y.orch.listTasks(),X);if(!Z)return{adopted:!1};try{return{adopted:!0,taskId:(await Y.orch.adoptWorktree({repo:Z,worktreePath:X,ifExists:"return"})).id}}catch(Q){return I1("worktree-created",Q),{adopted:!1}}}},{name:"task.setActive",async handle(z,Y){let G=oJ(z,"taskId")??null;return await Y.orch.setActiveTask(G),Y.bus.publish("active-task",{taskId:G}),{}}},{name:"issue.list",async handle(z,Y){return Y.issues.list(A1(z,"repoRoot"))}},{name:"issue.mutate",async handle(z,Y){let G=await Y.issues.mutate(A1(z,"repoRoot"),z.op);return Y.bus.publish("issue.snapshot",G),G}},{name:"session.deliver",async handle(z,Y){let G=A1(z,"taskId"),X=A1(z,"text"),Z=oJ(z,"source");if(Z!==void 0&&Z!=="note"&&Z!=="dispatcher")throw Error('source must be "note" or "dispatcher"');if(!Y.orch.getTask(G))throw Error(`task not found: ${G}`);return Y.bus.publish("session.deliver",{taskId:G,text:X,at:Date.now(),source:Z??"dispatcher"}),{ok:!0}}},{name:"note.file",async handle(z,Y){let G=A1(z,"taskId"),X=A1(z,"text"),Z=Y.orch.getTask(G);if(!Z)throw Error(`task not found: ${G}`);let Q=Y.orch.listTasks().find((H)=>(H.kind??"task")==="main"&&H.repo===Z.repo&&!H.archived);if(!Q||Q.id===Z.id)return{ok:!0,routed:!1};let f=Z.title||Z.branch||G;return Y.bus.publish("session.deliver",{taskId:Q.id,text:`[KOBE FIELD NOTE] from "${f}" (task ${G}): ${X}`,at:Date.now(),source:"note"}),{ok:!0,routed:!0}}},{name:"engine.reportEvent",async handle(z,Y){let G=A1(z,"kind");if(!Zq(G))throw Error(`unknown engine event kind: ${G}`);let X=oJ(z,"taskId"),Z=oJ(z,"cwd");if(!X&&Z&&G==="session-start"){let H=Z5(Y.orch.listTasks(),Z);if(H)try{await Y.orch.adoptWorktree({repo:H.repo,worktreePath:H.worktreePath,ifExists:"return"})}catch(B){I1("worktree-autosync",B)}}let Q=X??(Z?X5(Y.orch.listTasks(),Z):void 0);if(!Q)return{};let f=KR(z);if(Y.activity.report(Q,G,f),G==="turn-start")z5(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 BB(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 qB(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 fB(J,z){let Y=oJ(J,z);return Y&&Y.trim().length>0?Y:void 0}function KR(J){let z=J.detail;if(!z||typeof z!=="object"||Array.isArray(z))return;let Y=z,G={};if(Y.failure==="rate_limit"||Y.failure==="billing"||Y.failure==="other")G.failure=Y.failure;if(Y.waiting==="permission"||Y.waiting==="input")G.waiting=Y.waiting;if(typeof Y.note==="string")G.note=Y.note;return Object.keys(G).length>0?G:void 0}var Sq=k(()=>{Qq();Y5();pJ();FJ();Q5();GG()});import{execFile as UR}from"child_process";import{mkdir as DR,readFile as LR,realpath as q5,rename as MR,stat as FR,writeFile as OR}from"fs/promises";import{homedir as AR}from"os";import{dirname as RR,isAbsolute as gR,join as CR,resolve as f5}from"path";import{promisify as NR}from"util";function kR(J){return(J instanceof Error?J.message:String(J)).includes("not a git repository")}function yq(J=process.env.KOBE_HOME_DIR??AR()){return CR(J,".kobe","issues.json")}function B5(J){return typeof J==="string"&&H5.includes(J)}function bR(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:B5(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 SR(){return{version:1,repos:{}}}function IR(){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 yR(J){let{stdout:z}=await DB("git",["-C",J,"rev-parse","--git-common-dir"]),Y=z.trim();return q5(gR(Y)?Y:f5(J,Y))}async function TR(J){let{stdout:z}=await DB("git",["-C",J,"rev-parse","--show-toplevel"]);return z.trim()}async function uR(J){let{stdout:z}=await DB("git",["-C",J,"worktree","list","--porcelain"]),Y=z.split(/\r?\n/).find((G)=>G.startsWith("worktree "))?.slice(9).trim();return Y?q5(Y):TR(J)}async function jB(J){if(typeof J!=="string"||J.length===0)throw Error("repoRoot is required");let z=f5(J);if(!(await FR(z).catch(()=>null))?.isDirectory())throw Error("repoRoot does not exist");try{let[G,X]=await Promise.all([uR(z),yR(z)]);return{repoRoot:G,repoKey:X}}catch(G){if(kR(G))throw Error("repoRoot is not a git repository");throw G}}async function WB(J){try{let z=JSON.parse(await LR(J,"utf8")),Y={};if(z.repos&&typeof z.repos==="object")for(let[G,X]of Object.entries(z.repos)){if(!X||typeof X!=="object")continue;let Z=X;Y[G]={repoRoot:typeof Z.repoRoot==="string"?Z.repoRoot:"",nextId:typeof Z.nextId==="number"?Z.nextId:1,issues:Array.isArray(Z.issues)?Z.issues.map(bR).filter((Q)=>Q!==null):[]}}return{version:1,repos:Y}}catch(z){if(z.code==="ENOENT")return SR();throw z}}async function VB(J,z){await DR(RR(J),{recursive:!0});let Y=`${J}.tmp`;await OR(Y,`${JSON.stringify(z,null,2)}
|
|
44
|
+
`,"utf8"),await MR(Y,J)}function KB(J,z){return{repoRoot:J,exists:z!==null,nextId:z?.nextId??1,issues:z?.issues??[]}}async function UB(J,z){let G=(Iq.get(J)??Promise.resolve()).then(z),X=G.then(()=>{return},()=>{return});return Iq.set(J,X),X.then(()=>{if(Iq.get(J)===X)Iq.delete(J)}),G}class Tq{path;constructor(J=yq()){this.path=J}async list(J){let{repoRoot:z,repoKey:Y}=await jB(J);return UB(this.path,async()=>{let G=await WB(this.path),X=G.repos[Y]??null;if(X&&X.repoRoot!==z)X.repoRoot=z,await VB(this.path,G);return KB(z,X)})}async mirrorTaskDone(J,z){let{repoRoot:Y,repoKey:G}=await jB(J);if(!z)return null;return UB(this.path,async()=>{let X=await WB(this.path),Z=X.repos[G];if(!Z)return null;let Q=Z.issues.find((f)=>f.taskId===z);if(!Q||Q.status==="done")return null;return Q.status="done",Z.repoRoot=Y,await VB(this.path,X),KB(Y,Z)})}async mutate(J,z){let{repoRoot:Y,repoKey:G}=await jB(J);if(!z||typeof z!=="object"||Array.isArray(z)||typeof z.type!=="string")throw Error("missing op");return UB(this.path,async()=>{let X=await WB(this.path),Z=X.repos[G];if(!Z)Z={repoRoot:Y,nextId:1,issues:[]},X.repos[G]=Z;Z.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");Z.issues=[{id:Z.nextId,title:Q.title,status:"open",created:IR(),body:typeof Q.body==="string"?Q.body:""},...Z.issues],Z.nextId+=1}else if(Q.type==="setStatus"){if(typeof Q.id!=="number")throw Error("setStatus requires a numeric id");if(!B5(Q.status))throw Error(`invalid status: must be one of ${H5.join(", ")}`);let f=Z.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=Z.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=Z.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=Z.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=Z.issues.filter((H)=>H.id!==Q.id);if(f.length===Z.issues.length)throw Error(`no issue #${Q.id}`);Z.issues=f}else throw Error(`unknown op type: ${Q.type}`);return await VB(this.path,X),KB(Y,Z)})}}var DB,H5,Iq;var LB=k(()=>{DB=NR(UR),H5=["open","doing","hold","done"];Iq=new Map});import{lstat as j5,readdir as xR,realpath as ER,stat as wR}from"fs/promises";import{join as PR,relative as hR,resolve as W5,sep as vR}from"path";import{Readable as mR}from"stream";function L5(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&&!V5.includes(Y))throw Error(`readdirp: Invalid type passed. Use one of ${V5.join(", ")}`);return z.root=J,new FB(z)}var PJ,MB,D5="READDIRP_RECURSIVE_ERROR",cR,V5,dR,nR,iR=(J)=>cR.has(J.code),lR,K5=(J)=>!0,U5=(J)=>{if(J===void 0)return K5;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((G)=>Y.basename===G)}return K5},FB;var M5=k(()=>{PJ={FILE_TYPE:"files",DIR_TYPE:"directories",FILE_DIR_TYPE:"files_directories",EVERYTHING_TYPE:"all"},MB={root:".",fileFilter:(J)=>!0,directoryFilter:(J)=>!0,type:PJ.FILE_TYPE,lstat:!1,depth:2147483648,alwaysStat:!1,highWaterMark:4096};Object.freeze(MB);cR=new Set(["ENOENT","EPERM","EACCES","ELOOP",D5]),V5=[PJ.DIR_TYPE,PJ.EVERYTHING_TYPE,PJ.FILE_DIR_TYPE,PJ.FILE_TYPE],dR=new Set([PJ.DIR_TYPE,PJ.EVERYTHING_TYPE,PJ.FILE_DIR_TYPE]),nR=new Set([PJ.EVERYTHING_TYPE,PJ.FILE_DIR_TYPE,PJ.FILE_TYPE]),lR=process.platform==="win32";FB=class FB extends mR{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={...MB,...J},{root:Y,type:G}=z;this._fileFilter=U5(z.fileFilter),this._directoryFilter=U5(z.directoryFilter);let X=z.lstat?j5:wR;if(lR)this._stat=(Z)=>X(Z,{bigint:!0});else this._stat=X;this._maxDepth=z.depth!=null&&Number.isSafeInteger(z.depth)?z.depth:MB.depth,this._wantsDir=G?dR.has(G):!1,this._wantsFile=G?nR.has(G):!1,this._wantsEverything=G===PJ.EVERYTHING_TYPE,this._root=W5(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:G,depth:X}=z,Z=Y.splice(0,J).map((f)=>this._formatEntry(f,G)),Q=await Promise.all(Z);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(X<=this._maxDepth)this.parents.push(this._exploreDir(f.fullPath,X+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 G=this.parents.pop();if(!G){this.push(null);break}if(this.parent=await G,this.destroyed)return}}}catch(z){this.destroy(z)}finally{this.reading=!1}}async _exploreDir(J,z){let Y;try{Y=await xR(J,this._rdOptions)}catch(G){this._onError(G)}return{files:Y,depth:z,path:J}}async _formatEntry(J,z){let Y,G=this._isDirent?J.name:J;try{let X=W5(PR(z,G));Y={path:hR(this._root,X),fullPath:X,basename:G},Y[this._statsProp]=this._isDirent?J:await this._stat(X)}catch(X){this._onError(X);return}return Y}_onError(J){if(iR(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 G=await ER(Y),X=await j5(G);if(X.isFile())return"file";if(X.isDirectory()){let Z=G.length;if(Y.startsWith(G)&&Y.substr(Z,1)===vR){let Q=Error(`Circular symlink detected: "${Y}" points to "${G}"`);return Q.code=D5,this._onError(Q)}return"directory"}}catch(G){return this._onError(G),""}}}_includeAsFile(J){let z=J&&J[this._statsProp];return z&&this._wantsEverything&&!z.isDirectory()}}});import{watch as $R,unwatchFile as F5,watchFile as aR}from"fs";import{realpath as OB,lstat as _R,open as pR,stat as A5}from"fs/promises";import{type as rR}from"os";import*as x1 from"path";function O5(J,z,Y,G,X){let Z=(Q,f)=>{if(Y(J),X(Q,f,{watchedPath:J}),f&&J!==f)Eq(x1.resolve(J,f),OG,x1.join(J,f))};try{return $R(J,{persistent:z.persistent},Z)}catch(Q){G(Q);return}}class NB{fsw;_boundHandleError;constructor(J){this.fsw=J,this._boundHandleError=(z)=>J._handleError(z)}_watchWithNodeFs(J,z){let Y=this.fsw.options,G=x1.dirname(J),X=x1.basename(J);this.fsw._getWatchedDir(G).add(X);let Q=x1.resolve(J),f={persistent:Y.persistent};if(!z)z=wq;let H;if(Y.usePolling){let B=Y.interval!==Y.binaryInterval;f.interval=B&&Xg(X)?Y.binaryInterval:Y.interval,H=qg(J,Q,f,{listener:z,rawEmitter:this.fsw._emitRaw})}else H=Qg(J,Q,f,{listener:z,errHandler:this._boundHandleError,rawEmitter:this.fsw._emitRaw});return H}_handleFile(J,z,Y){if(this.fsw.closed)return;let G=x1.dirname(J),X=x1.basename(J),Z=this.fsw._getWatchedDir(G),Q=z;if(Z.has(X))return;let f=async(B,V)=>{if(!this.fsw._throttle(Jg,J,5))return;if(!V||V.mtimeMs===0)try{let j=await A5(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((sR||tR||eR)&&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(G,X)}else if(Z.has(X)){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,G){if(this.fsw.closed)return;let X=J.fullPath,Z=this.fsw._getWatchedDir(z);if(!this.fsw.options.followSymlinks){this.fsw._incrReadyCount();let Q;try{Q=await OB(Y)}catch(f){return this.fsw._emitReady(),!0}if(this.fsw.closed)return;if(Z.has(G)){if(this.fsw._symlinkPaths.get(X)!==Q)this.fsw._symlinkPaths.set(X,Q),this.fsw._emit(Kz.CHANGE,Y,J.stats)}else Z.add(G),this.fsw._symlinkPaths.set(X,Q),this.fsw._emit(Kz.ADD,Y,J.stats);return this.fsw._emitReady(),!0}if(this.fsw._symlinkPaths.has(X))return!0;this.fsw._symlinkPaths.set(X,!0)}_handleRead(J,z,Y,G,X,Z,Q){J=x1.join(J,"");let f=G?`${J}:${G}`: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(oR,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===G||!G&&!H.has(K))this.fsw._incrReadyCount(),L=x1.join(X,x1.relative(X,L)),this._addToNodeFs(L,z,Y,Z+1)}).on(Kz.ERROR,this._boundHandleError),new Promise((j,K)=>{if(!V)return K();V.once(gB,()=>{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,G,X,Z,Q)})})}async _handleDir(J,z,Y,G,X,Z,Q){let f=this.fsw._getWatchedDir(x1.dirname(J)),H=f.has(x1.basename(J));if(!(Y&&this.fsw.options.ignoreInitial)&&!X&&!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||G<=j)&&!this.fsw._symlinkPaths.has(Q)){if(!X){if(await this._handleRead(J,Y,Z,X,J,G,B),this.fsw.closed)return}V=this._watchWithNodeFs(J,(K,L)=>{if(L&&L.mtimeMs===0)return;this._handleRead(K,!1,Z,X,J,G,B)})}return V}async _addToNodeFs(J,z,Y,G,X){let Z=this.fsw._emitReady;if(this.fsw._isIgnored(J)||this.fsw.closed)return Z(),!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 zg[Q.statMethod](Q.watchPath);if(this.fsw.closed)return;if(this.fsw._isIgnored(Q.watchPath,f))return Z(),!1;let H=this.fsw.options.followSymlinks,B;if(f.isDirectory()){let V=x1.resolve(J),j=H?await OB(J):J;if(this.fsw.closed)return;if(B=await this._handleDir(Q.watchPath,f,z,G,X,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 OB(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,G,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(Z(),B)this.fsw._addPathCloser(J,B);return!1}catch(f){if(this.fsw._handleError(f))return Z(),J}}}var oR="data",gB="end",R5="close",wq=()=>{},Pq,CB,sR,tR,eR,g5,y1,Kz,Jg="watch",zg,OG="listeners",uq="errHandlers",BX="rawEmitters",Yg,Gg,Xg=(J)=>Gg.has(x1.extname(J).slice(1).toLowerCase()),RB=(J,z)=>{if(J instanceof Set)J.forEach(z);else z(J)},TZ=(J,z,Y)=>{let G=J[z];if(!(G instanceof Set))J[z]=G=new Set([G]);G.add(Y)},Zg=(J)=>(z)=>{let Y=J[z];if(Y instanceof Set)Y.clear();else delete J[z]},uZ=(J,z,Y)=>{let G=J[z];if(G instanceof Set)G.delete(Y);else if(G===Y)delete J[z]},C5=(J)=>J instanceof Set?J.size===0:!J,xq,Eq=(J,z,Y,G,X)=>{let Z=xq.get(J);if(!Z)return;RB(Z[z],(Q)=>{Q(Y,G,X)})},Qg=(J,z,Y,G)=>{let{listener:X,errHandler:Z,rawEmitter:Q}=G,f=xq.get(z),H;if(!Y.persistent){if(H=O5(J,Y,X,Z,Q),!H)return;return H.close.bind(H)}if(f)TZ(f,OG,X),TZ(f,uq,Z),TZ(f,BX,Q);else{if(H=O5(J,Y,Eq.bind(null,z,OG),Z,Eq.bind(null,z,BX)),!H)return;H.on(Kz.ERROR,async(B)=>{let V=Eq.bind(null,z,uq);if(f)f.watcherUnusable=!0;if(CB&&B.code==="EPERM")try{await(await pR(J,"r")).close(),V(B)}catch(j){}else V(B)}),f={listeners:X,errHandlers:Z,rawEmitters:Q,watcher:H},xq.set(z,f)}return()=>{if(uZ(f,OG,X),uZ(f,uq,Z),uZ(f,BX,Q),C5(f.listeners))f.watcher.close(),xq.delete(z),Yg.forEach(Zg(f)),f.watcher=void 0,Object.freeze(f)}},AB,qg=(J,z,Y,G)=>{let{listener:X,rawEmitter:Z}=G,Q=AB.get(z),f=Q&&Q.options;if(f&&(f.persistent<Y.persistent||f.interval>Y.interval))F5(z),Q=void 0;if(Q)TZ(Q,OG,X),TZ(Q,BX,Z);else Q={listeners:X,rawEmitters:Z,options:Y,watcher:aR(z,Y,(H,B)=>{RB(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)RB(Q.listeners,(j)=>j(J,H))})},AB.set(z,Q);return()=>{if(uZ(Q,OG,X),uZ(Q,BX,Z),C5(Q.listeners))AB.delete(z),F5(z),Q.options=Q.watcher=void 0,Object.freeze(Q)}};var N5=k(()=>{Pq=process.platform,CB=Pq==="win32",sR=Pq==="darwin",tR=Pq==="linux",eR=Pq==="freebsd",g5=rR()==="OS400",y1={ALL:"all",READY:"ready",ADD:"add",CHANGE:"change",ADD_DIR:"addDir",UNLINK:"unlink",UNLINK_DIR:"unlinkDir",RAW:"raw",ERROR:"error"},Kz=y1,zg={lstat:_R,stat:A5},Yg=[OG,uq,BX],Gg=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"]),xq=new Map;AB=new Map});import{EventEmitter as fg}from"events";import{stat as Hg,Stats as Mv}from"fs";import{readdir as Bg,stat as jg}from"fs/promises";import*as q1 from"path";function hq(J){return Array.isArray(J)?J:[J]}function Mg(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(T5,"/"),z)J="/"+J;return J}function k5(J,z,Y){let G=Fg(z);for(let X=0;X<J.length;X++){let Z=J[X];if(Z(G,Y))return!0}return!1}function Og(J,z){if(J==null)throw TypeError("anymatch: specify first argument");let G=hq(J).map((X)=>Mg(X));if(z==null)return(X,Z)=>{return k5(G,X,Z)};return k5(G,z)}class x5{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!==y5&&J!==Vg)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 Bg(Y)}catch(G){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=wq,this.items=Rg,Object.freeze(this)}}class E5{fsw;path;watchPath;fullWatchPath;dirParts;followSymlinks;statMethod;constructor(J,z,Y){this.fsw=Y;let G=J;this.path=J=J.replace(Lg,""),this.watchPath=G,this.fullWatchPath=q1.resolve(G),this.dirParts=[],this.dirParts.forEach((X)=>{if(X.length>1)X.pop()}),this.followSymlinks=z,this.statMethod=z?gg:Cg}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 P5(J,z={}){let Y=new w5(z);return Y.add(J),Y}var kB="/",Wg="//",y5=".",Vg="..",Kg="string",Ug,T5,Dg,Lg,bB=(J)=>typeof J==="object"&&J!==null&&!(J instanceof RegExp),b5=(J)=>{let z=hq(J).flat();if(!z.every((Y)=>typeof Y===Kg))throw TypeError(`Non-string provided as watch path: ${z}`);return z.map(u5)},S5=(J)=>{let z=J.replace(Ug,kB),Y=!1;if(z.startsWith(Wg))Y=!0;if(z=z.replace(T5,kB),Y)z=kB+z;return z},u5=(J)=>S5(q1.normalize(S5(J))),I5=(J="")=>(z)=>{if(typeof z==="string")return u5(q1.isAbsolute(z)?z:q1.join(J,z));else return z},Ag=(J,z)=>{if(q1.isAbsolute(J))return J;return q1.join(z,J)},Rg,gg="stat",Cg="lstat",w5;var h5=k(()=>{M5();N5();/*! chokidar - MIT License (c) 2012 Paul Miller (paulmillr.com) */Ug=/\\/g,T5=/\/\//g,Dg=/\..*\.(sw[px])$|~$|\.subl.*\.tmp/,Lg=/^\.[/\\]/;Rg=Object.freeze(new Set);w5=class w5 extends fg{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},G={persistent:!0,ignoreInitial:!1,ignorePermissionErrors:!1,interval:100,binaryInterval:300,followSymlinks:!0,usePolling:!1,atomic:!0,...J,ignored:J.ignored?hq(J.ignored):hq([]),awaitWriteFinish:z===!0?Y:typeof z==="object"?{...Y,...z}:!1};if(g5)G.usePolling=!0;if(G.atomic===void 0)G.atomic=!G.usePolling;let X=process.env.CHOKIDAR_USEPOLLING;if(X!==void 0){let f=X.toLowerCase();if(f==="false"||f==="0")G.usePolling=!1;else if(f==="true"||f==="1")G.usePolling=!0;else G.usePolling=!!f}let Z=process.env.CHOKIDAR_INTERVAL;if(Z)G.interval=Number.parseInt(Z,10);let Q=0;this._emitReady=()=>{if(Q++,Q>=this._readyCount)this._emitReady=wq,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=G,this._nodeFsHandler=new NB(this),Object.freeze(G)}_addIgnoredPath(J){if(bB(J)){for(let z of this._ignoredPaths)if(bB(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(bB(z)&&z.path===J)this._ignoredPaths.delete(z)}}add(J,z,Y){let{cwd:G}=this.options;this.closed=!1,this._closePromise=void 0;let X=b5(J);if(G)X=X.map((Z)=>{return Ag(Z,G)});if(X.forEach((Z)=>{this._removeIgnoredPath(Z)}),this._userIgnored=void 0,!this._readyCount)this._readyCount=0;return this._readyCount+=X.length,Promise.all(X.map(async(Z)=>{let Q=await this._nodeFsHandler._addToNodeFs(Z,!Y,void 0,0,z);if(Q)this._emitReady();return Q})).then((Z)=>{if(this.closed)return;Z.forEach((Q)=>{if(Q)this.add(q1.dirname(Q),q1.basename(z||Q))})}),this}unwatch(J){if(this.closed)return this;let z=b5(J),{cwd:Y}=this.options;return z.forEach((G)=>{if(!q1.isAbsolute(G)&&!this._closers.has(G)){if(Y)G=q1.join(Y,G);G=q1.resolve(G)}if(this._closePath(G),this._addIgnoredPath(G),this._watched.has(G))this._addIgnoredPath({path:G,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 G=Y();if(G instanceof Promise)J.push(G)})),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 X=(this.options.cwd?q1.relative(this.options.cwd,Y):Y)||y5;J[X]=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 G=this.options;if(CB)z=q1.normalize(z);if(G.cwd)z=q1.relative(G.cwd,z);let X=[z];if(Y!=null)X.push(Y);let Z=G.awaitWriteFinish,Q;if(Z&&(Q=this._pendingWrites.get(z)))return Q.lastChange=new Date,this;if(G.atomic){if(J===y1.UNLINK)return this._pendingUnlinks.set(z,[J,...X]),setTimeout(()=>{this._pendingUnlinks.forEach((f,H)=>{this.emit(...f),this.emit(y1.ALL,...f),this._pendingUnlinks.delete(H)})},typeof G.atomic==="number"?G.atomic:100),this;if(J===y1.ADD&&this._pendingUnlinks.has(z))J=y1.CHANGE,this._pendingUnlinks.delete(z)}if(Z&&(J===y1.ADD||J===y1.CHANGE)&&this._readyEmitted){let f=(H,B)=>{if(H)J=y1.ERROR,X[0]=H,this.emitWithAll(J,X);else if(B){if(X.length>1)X[1]=B;else X.push(B);this.emitWithAll(J,X)}};return this._awaitWriteFinish(z,Z.stabilityThreshold,J,f),this}if(J===y1.CHANGE){if(!this._throttle(y1.CHANGE,z,50))return this}if(G.alwaysStat&&Y===void 0&&(J===y1.ADD||J===y1.ADD_DIR||J===y1.CHANGE)){let f=G.cwd?q1.join(G.cwd,z):z,H;try{H=await jg(f)}catch(B){}if(!H||this.closed)return;X.push(H)}return this.emitWithAll(J,X),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 G=this._throttled.get(J);if(!G)throw Error("invalid throttle");let X=G.get(z);if(X)return X.count++,!1;let Z,Q=()=>{let H=G.get(z),B=H?H.count:0;if(G.delete(z),clearTimeout(Z),H)clearTimeout(H.timeoutObject);return B};Z=setTimeout(Q,Y);let f={timeoutObject:Z,clear:Q,count:0};return G.set(z,f),f}_incrReadyCount(){return this._readyCount++}_awaitWriteFinish(J,z,Y,G){let X=this.options.awaitWriteFinish;if(typeof X!=="object")return;let Z=X.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){Hg(f,(K,L)=>{if(K||!B.has(J)){if(K&&K.code!=="ENOENT")G(K);return}let A=Number(new Date);if(j&&L.size!==j.size)B.get(J).lastChange=A;let O=B.get(J);if(A-O.lastChange>=z)B.delete(J),G(void 0,L);else Q=setTimeout(V,Z,L)})}if(!B.has(J))B.set(J,{lastChange:H,cancelWait:()=>{return B.delete(J),clearTimeout(Q),Y}}),Q=setTimeout(V,Z)}_isIgnored(J,z){if(this.options.atomic&&Dg.test(J))return!0;if(!this._userIgnored){let{cwd:Y}=this.options,X=(this.options.ignored||[]).map(I5(Y)),Q=[...[...this._ignoredPaths].map(I5(Y)),...X];this._userIgnored=Og(Q,void 0)}return this._userIgnored(J,z)}_isntIgnored(J,z){return!this._isIgnored(J,z)}_getWatchHelpers(J){return new E5(J,this.options.followSymlinks,this)}_getWatchedDir(J){let z=q1.resolve(J);if(!this._watched.has(z))this._watched.set(z,new x5(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 G=q1.join(J,z),X=q1.resolve(G);if(Y=Y!=null?Y:this._watched.has(G)||this._watched.has(X),!this._throttle("remove",G,100))return;if(!Y&&this._watched.size===1)this.add(J,z,!0);this._getWatchedDir(G).getChildren().forEach((j)=>this._remove(G,j));let f=this._getWatchedDir(J),H=f.has(z);if(f.remove(z),this._symlinkPaths.has(X))this._symlinkPaths.delete(X);let B=G;if(this.options.cwd)B=q1.relative(this.options.cwd,G);if(this.options.awaitWriteFinish&&this._pendingWrites.has(B)){if(this._pendingWrites.get(B).cancelWait()===y1.ADD)return}this._watched.delete(G),this._watched.delete(X);let V=Y?y1.UNLINK_DIR:y1.UNLINK;if(H&&!this._isIgnored(G))this._emit(V,G);this._closePath(G)}_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},G=L5(J,Y);return this._streams.add(G),G.once(R5,()=>{G=void 0}),G.once(gB,()=>{if(G)this._streams.delete(G),G=void 0}),G}}});import{mkdirSync as Ng,statSync as kg}from"fs";import{basename as v5,dirname as bg,join as Sg}from"path";function vq(J){if(J.debounceMs<=0)return()=>{};let z=bg(J.filePath),Y=new Set([v5(J.filePath),...J.matchBasenames??[]]),G=null,X=null,Z=!1,Q=()=>{try{J.onTrigger()}catch(V){J.onError(V)}},f=()=>{if(G)clearTimeout(G);G=setTimeout(()=>{G=null,Q()},J.debounceMs),G.unref?.()},H=(V)=>{if(!Y.has(v5(V)))return;f()},B=(V)=>{try{let j=kg(Sg(z,V));return`${j.mtimeMs}:${j.size}`}catch{return null}};try{Ng(z,{recursive:!0});let V=new Map;for(let j of Y)V.set(j,B(j));X=P5(z,{depth:0,ignoreInitial:!0}),X.on("add",H),X.on("change",H),X.on("unlink",H),X.on("error",J.onError),X.once("ready",()=>{for(let j of Y)if(B(j)!==V.get(j)){f();break}})}catch(V){J.onError(V)}return()=>{if(Z)return;if(Z=!0,G)clearTimeout(G),G=null;let V=X;X=null,V?.close().catch(J.onError)}}var SB=k(()=>{h5()});import{homedir as Ig}from"os";import{basename as yg,join as Tg}from"path";function yB(J=process.env.KOBE_HOME_DIR??Ig()){return Tg(J,".kobe","settings","keybindings.yaml")}function m5(J,z={}){let Y=z.debounceMs??IB;if(Y<=0)return()=>{};let G=z.path??yB(),X=yg(G),Z=X.replace(/\.yaml$/,".yml"),Q=0;return J.publish("keybindings",{rev:Q}),vq({filePath:G,matchBasenames:[X,Z],debounceMs:Y,onTrigger:()=>{try{Q+=1,J.publish("keybindings",{rev:Q})}catch(H){I1("keybindings-watcher",H)}},onError:(H)=>I1("keybindings-watcher",H)})}var IB=200;var c5=k(()=>{SB()});class TB{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??ug,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 ug=(J,z)=>{let Y=setTimeout(J,z);return Y.unref?.(),()=>clearTimeout(Y)};var d5=()=>{};import{spawn as xg}from"child_process";function dg(J,z,Y){return new Promise((G)=>{let X="",Z="",Q=!1,f=(B,V)=>{if(Q)return;Q=!0,G({status:B,stdout:X,stderr:Z,spawnError:V})},H=xg("gh",J.slice(),{cwd:z,stdio:["ignore","pipe","pipe"],signal:Y,killSignal:"SIGKILL"});H.stdout?.on("data",(B)=>{X+=String(B)}),H.stderr?.on("data",(B)=>{Z+=String(B)}),H.on("error",()=>f(null,!Y.aborted)),H.on("close",(B)=>f(B,!1))})}function ig(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 lg(J,z){let Y=z.tickMs??xZ,G=z.rand,X={tickMs:Y,settledMs:wg,noPrMs:Eg,noRemoteMs:vg,failureBaseMs:Pg,failureCapMs:hg,jitterRatio:mg},Z=[];for(let Q of J.listTasks()){if(!ig(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,OZ({kind:"error",error:B.error},H,z.now,X,G));continue}if(B.kind==="empty"){z.schedule.set(Q.id,OZ({kind:"empty"},H,z.now,X,G));continue}let V=kV(B.view,z.at),j=J.getTask(Q.id);if(!j){z.schedule.delete(Q.id);continue}if(!Aq(j.prStatus,V??void 0))await J.setPRStatus(Q.id,V),Z.push(Q.id);let K=V?.lifecycle==="merged"||V?.lifecycle==="closed";z.schedule.set(Q.id,OZ({kind:"pr",settled:K},H,z.now,X,G))}catch(B){I1("pr-status-poller",B),z.schedule.set(Q.id,OZ({kind:"error",error:"network"},H,z.now,X,G))}}return Z}function n5(J,z=xZ,Y,G=ng){if(z<=0)return()=>{};let X=new Map,Z=!1,f=setInterval(()=>{if(Y&&!Y())return;if(Z)return;Z=!0,lg(J,{run:G,now:Date.now(),at:new Date().toISOString(),schedule:X,tickMs:z}).catch((H)=>I1("pr-status-poller",H)).finally(()=>{Z=!1})},z);return f.unref?.(),()=>clearInterval(f)}var xZ=30000,Eg=300000,wg=600000,Pg,hg=900000,vg=1800000,mg=0.2,cg=1e4,ng=async(J,z)=>{let Y=new AbortController,G=!1,X=setTimeout(()=>{G=!0,Y.abort()},cg);try{let Z=await dg(["pr","view",z,"--json",NV],J,Y.signal);if(Z.status===0&&!G)try{let Q=JSON.parse(Z.stdout);return typeof Q.number==="number"?{kind:"pr",view:Q}:{kind:"empty"}}catch{return h8({parseError:!0})}return h8({spawnError:Z.spawnError,timedOut:G,exitCode:Z.status,stderr:Z.stderr})}finally{clearTimeout(X)}};var i5=k(()=>{v8();O1();Pg=xZ});function pg(J,z){return J.mtimeMs===z.mtimeMs&&J.completionId===z.completionId&&J.completionAt===z.completionAt}async function rg(J,z,Y,G){let X=await oG(z,J),Z=await Y.latestCompletion(J);return{mtimeMs:X,completionId:Z?.id??null,completionAt:Z?.timestampMs??0}}function og(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??n1)}return z}class l5{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=og(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,G]of J)this.maybeCollect(Y,G)}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:VZ(z)},this.entries.set(J,Y);else if(Y.vendor!==z)Y.vendor=z,Y.detector=VZ(z);let G=this.options.cadence??{timeoutMs:$g,slowRetryMs:ag,minIntervalMs:_g},X=this.options.run??rg,Z=Y;zX(Z,G,(Q)=>X(J,Z.vendor,Z.detector,Q),(Q)=>{if(this.stopped)return;if(this.entries.get(J)!==Z)return;if(Z.value&&pg(Z.value,Q))return;Z.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 $5(J,z,Y=uB,G){if(Y<=0)return()=>{};let X=new l5(J,z,{hasSubscribers:G});X.tick();let Z=setInterval(()=>X.tick(),Y);return Z.unref?.(),()=>{clearInterval(Z),X.stop()}}var uB=1500,$g=4000,ag=60000,_g=1500;var a5=k(()=>{Gq();YX();Xq();O1();pJ()});import{readFileSync as sg}from"fs";import{homedir as tg}from"os";import{basename as eg,join as JC}from"path";function EB(J=process.env.KOBE_HOME_DIR??tg()){return JC(J,".config","kobe","state.json")}function _5(J){let z={};try{let B=JSON.parse(sg(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",G=z.transparentBackground===!0,X=typeof z.focusAccent==="string"&&YC.includes(z.focusAccent)?z.focusAccent:null,Z=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:G,focusAccent:X,locale:H,sortMode:Z,keysCollapsed:Q,projectFilter:f}}function GC(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 p5(J,z={}){let Y=z.debounceMs??xB;if(Y<=0)return()=>{};let G=z.pollMs??zC,X=z.statePath??EB(),Z=eg(X),Q=_5(X);return J.publish("ui-prefs",Q),vq({filePath:X,matchBasenames:[Z],debounceMs:Y,pollMs:G,onTrigger:()=>{try{let H=_5(X);if(GC(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 xB=200,zC=250,YC;var r5=k(()=>{SB();YC=["primary","success","info"]});function wB(){return d1()[AG]===!0}var AG="experimental.dispatcher";var mq=k(()=>{YG()});import{randomUUID as XC}from"crypto";function Uz(J){return`engineCommand.${J}`}function Dz(J){return`engineName.${J}`}function RG(J){return S1(Dz(J))?.trim()||PB[J]||J}function EZ(J){return e1(J??"claude").defaultCommand}function ZC(J){let z=[],Y=/"([^"]*)"|'([^']*)'|(\S+)/g;for(let G=Y.exec(J);G!==null;G=Y.exec(J))z.push(G[1]??G[2]??G[3]??"");return z}function TJ(J,z){let Y=J??"claude",G=S1(Uz(Y))?.trim(),X=(()=>{if(G){let Z=ZC(G);if(Z.length>0)return Z}return EZ(Y)})();return QC(X,Y,z)}function QC(J,z,Y){let G=Y?.trim();if(!G)return J;let X=z??"claude";if(!e1(X).effortLevels?.includes(G))return J;if(X==="codex")return[...J,"-c",`model_reasoning_effort=${G}`];return J}function jX(J,z){if((z??"claude")!=="claude")return{argv:J,sessionId:null};if(J.some((G)=>qC.has(G)))return{argv:J,sessionId:null};let Y=XC();return{argv:[...J,"--session-id",Y],sessionId:Y}}function gG(){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 fC(J,z=gG()){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 HC(J,z=gG()){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 BC(J,z=gG(),Y={}){let G=[];if((Y.status??bq)())G.push(fC(J,z));if((Y.notes??wB)())G.push(HC(J,z));return G.length>0?G.join(`
|
|
47
|
+
|
|
48
|
+
`):null}function cq(J,z,Y,G={}){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 X=BC(Y,gG(),G);if(!X)return J;return[...J,"--append-system-prompt",X]}function jC(J,z=gG()){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 dq(J,z,Y,G=wB){if(!Y||!G())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 PB,qC;var hJ=k(()=>{ez();SY();SZ();mq();O1();t1();PB=Object.fromEntries(sY.map((J)=>[J,e1(J).displayName]));qC=new Set(["--session-id","--resume","-r","--continue","-c","--from-pr"])});function WX(J){return CG.includes(J)?J:"auto"}var CG,o5,QY="editor.kind",EY="editor.customCommand",nq="auto";var iq=k(()=>{CG=["auto","vim","nvim","nano","emacs","custom"],o5=["nvim","vim","emacs","nano"]});function kG(J){return J==="taskpanel"?"taskpanel":"chattab"}var qY="settings.surface",NG="chattab";function vJ(J=process.env){return{...J,...hB}}var hB;var wY=k(()=>{hB={GIT_OPTIONAL_LOCKS:"0"}});async function VX(J,z,Y={}){if(!J)return{stdout:"",stderr:"worktreePath is required",status:-1};let G=(Y.execForPath??XY)(J),X=Y.timeoutMs&&Y.timeoutMs>0?new AbortController:null,Z=!1,Q=X?setTimeout(()=>{Z=!0,X.abort()},Y.timeoutMs):null,f=X&&Y.signal?AbortSignal.any([X.signal,Y.signal]):X?.signal??Y.signal,H;try{H=await G.run(["git",...z],{cwd:J,env:hB,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(Z&&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 WC(J,z){if(!J||!z||z.startsWith("/"))return null;let Y=z.split("/");if(Y.some((G)=>G===".."))return null;return`${J.replace(/\/+$/,"")}/${Y.filter(Boolean).join("/")}`}async function s5(J,z,Y={}){let G=WC(J,z);if(!G)return null;let X=(Y.execForPath??XY)(J);try{return await X.readFile(G)}catch{return null}}var lq=k(()=>{jz();wY()});import{statSync as VC}from"fs";async function wZ(J,z){let Y=await VX(J,z,{timeoutMs:KC}),G=Y.status??-1;return{ok:G===0,stdout:Y.stdout,stderr:Y.stderr,code:G}}function DC(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 t5(J){let z=new Map;if(!J)return z;let Y=J.split(/(?=^diff --git )/m);for(let G of Y){if(!G.startsWith("diff --git"))continue;let X=null,Z=G.match(/^\+\+\+ b\/(.*)$/m);if(Z&&Z[1]!=="/dev/null")X=Z[1];else{let Q=G.match(/^diff --git a\/.* b\/(.*)$/m);if(Q)X=Q[1]}if(!X)continue;z.set(LC(X),G.endsWith(`
|
|
50
|
+
`)?G:`${G}
|
|
51
|
+
`)}return z}function LC(J){if(!(J.startsWith('"')&&J.endsWith('"')))return J;return J.slice(1,-1).replace(/\\([\\"nt])/g,(Y,G)=>G==="n"?`
|
|
52
|
+
`:G==="t"?"\t":G)}async function MC(J,z,Y){let G=Array(J.length),X=Math.max(1,Math.min(z,J.length)),Z=0;async function Q(){while(Z<J.length){let f=Z++;G[f]=await Y(J[f],f)}}return await Promise.all(Array.from({length:X},()=>Q())),G}async function FC(J,z){let Y=await wZ(J,["diff","--no-color","--no-index","--","/dev/null",z]);if(Y.stdout.trim())return Y.stdout.endsWith(`
|
|
53
53
|
`)?Y.stdout:`${Y.stdout}
|
|
54
|
-
`;return""}async function
|
|
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}`),
|
|
57
|
-
`)[1]?.trim()===Y}catch{return!0}}function
|
|
58
|
-
`)[0]??"",10);return Number.isFinite(
|
|
59
|
-
`)){let
|
|
60
|
-
`).map((B)=>B.split("\t")).filter((B)=>(B[0]?.trim()??"")!=="");if(
|
|
61
|
-
`).map((
|
|
62
|
-
`)){let
|
|
63
|
-
`)){let[
|
|
64
|
-
`).map((
|
|
65
|
-
`).some((
|
|
66
|
-
`).map((
|
|
67
|
-
`).filter((
|
|
68
|
-
`).map((f)=>f.trim()).filter(Boolean).map((f)=>f.split("=",2)));if(await
|
|
69
|
-
`)){let[
|
|
70
|
-
`)){let[Q,f,H,B,V]=
|
|
71
|
-
`)){let[f,H]=Q.split("\t");if(f?.trim()&&H?.trim()===z)return f.trim()}return""}async function
|
|
72
|
-
${H}`:H,V=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:
|
|
54
|
+
`;return""}async function e5(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 G;try{G=decodeURIComponent(Y)}catch{return Response.json({error:"invalid worktreePath encoding"},{status:400})}if(!G.startsWith("/"))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!Rq(G))return Response.json({error:"worktreePath does not exist"},{status:400});if(!XY(G).isRemote)try{if(!VC(G).isDirectory())return Response.json({error:"worktreePath is not a directory"},{status:400})}catch{return Response.json({error:"worktreePath does not exist"},{status:400})}let Z=await wZ(G,["rev-parse","--is-inside-work-tree"]);if(!Z.ok||Z.stdout.trim()!=="true")return Response.json({error:`not a git work tree: ${Z.stderr.trim()||G}`},{status:500});let[Q,f,H]=await Promise.all([wZ(G,["status","--porcelain=v1","-z","--untracked-files=all"]),wZ(G,["diff","--no-color"]),wZ(G,["diff","--no-color","--staged"])]);if(!Q.ok)return Response.json({error:`git status failed: ${Q.stderr.trim()}`},{status:500});let B=t5(f.stdout),V=t5(H.stdout),j=Q.stdout.split("\x00"),K=[],L=[];for(let g=0;g<j.length;g++){let x=j[g];if(!x)continue;let _=x[0]??" ",S=x[1]??" ",N=x.slice(3);if(!N)continue;if(_==="R"||_==="C"||S==="R"||S==="C")g++;let M=_==="?"&&S==="?",I=_!==" "&&_!=="?"?_:S,r=_!==" "&&_!=="?",l="";if(M)L.push({fileIndex:K.length,path:N});else if(l=V.get(N)??B.get(N)??"",V.has(N)&&B.has(N))l=`${V.get(N)}${B.get(N)}`;K.push({path:N,status:M?"untracked":DC(I),staged:r,patch:l})}if(L.length>0){let g=await MC(L,UC,(x)=>FC(G,x.path));for(let x=0;x<L.length;x++)K[L[x].fileIndex].patch=g[x]}K.sort((g,x)=>g.path.localeCompare(x.path));let A=[H.stdout,f.stdout].filter(Boolean).join(`
|
|
55
|
+
`),O={files:K,raw:A};return Response.json(O)}var KC=15000,UC=8;var J6=k(()=>{jz();lq()});import{isAbsolute as OC}from"path";function Y6(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9_-]+$/.test(J)}function RC(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9._-]+$/.test(J)&&!J.includes("..")}async function gC(J){let z=J.searchParams.get("worktreePath"),Y=J.searchParams.get("vendor")??"claude";if(!z||!OC(z))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!Y6(Y))return Response.json({error:"invalid vendor"},{status:400});try{let G=e1(Y).history,[X,Z]=await Promise.all([G.listSessionIdsForWorktree(z),G.latestTranscriptMtimeForWorktree(z)]);return Response.json({sessions:X,latestMtime:Z})}catch(G){return Response.json({error:G instanceof Error?G.message:String(G)},{status:500})}}async function CC(J){let z=J.searchParams.get("vendor")??"claude",Y=J.searchParams.get("sessionId");if(!Y6(z))return Response.json({error:"invalid vendor"},{status:400});if(!RC(Y))return Response.json({error:"invalid sessionId"},{status:400});try{let G=await e1(z).history.readHistory(Y);return Response.json({messages:G})}catch(G){return Response.json({error:G instanceof Error?G.message:String(G)},{status:500})}}async function G6(J,z){if(z.pathname!==z6&&z.pathname!==AC)return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return z.pathname===z6?gC(z):CC(z)}var z6="/api/history/sessions",AC="/api/history/messages";var X6=k(()=>{SY()});import{mkdir as NC,readFile as kC,writeFile as bC}from"fs/promises";import{join as Z6}from"path";function Q6(){return Z6(qJ(),"notes")}function q6(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9_-]+$/.test(J)}function f6(J){return Z6(Q6(),`${J}.md`)}async function IC(J){let z=J.searchParams.get("taskId");if(!q6(z))return Response.json({error:"invalid taskId"},{status:400});try{let Y="";try{Y=await kC(f6(z),"utf8")}catch(G){if(G.code!=="ENOENT")throw G}return Response.json({markdown:Y})}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function yC(J){let z;try{z=await J.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(!q6(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 NC(Q6(),{recursive:!0}),await bC(f6(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 H6(J,z){if(z.pathname!==SC)return null;if(J.method==="GET")return IC(z);if(J.method==="PUT")return yC(J);return Response.json({error:"method not allowed"},{status:405})}var SC="/api/notes";var B6=k(()=>{p1()});var KX;var $q=k(()=>{KX={$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 UX;var aq=k(()=>{UX={$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 DX;var _q=k(()=>{DX={$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 LX;var pq=k(()=>{LX={$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 MX;var rq=k(()=>{MX={$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 FX;var oq=k(()=>{FX={$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 OX;var sq=k(()=>{OX={$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 mB(J,z,Y=[]){if(z===void 0)return null;if(typeof z!=="string")return mB(J,z.dark,Y);if(z==="transparent"||z==="none")return null;if(z.startsWith("#"))return z;if(Y.includes(z))return null;let G=J.defs?.[z]??J.theme[z];return mB(J,G,[...Y,z])}function vB(J){return Math.max(0,Math.min(255,Math.round(J)))}function PZ(J,z,Y){let G=Number.parseInt(J.slice(1),16),X=Number.parseInt(z.slice(1),16),Z=(f,H)=>f>>H&255;return`#${(vB(Z(G,16)+(Z(X,16)-Z(G,16))*Y)<<16|vB(Z(G,8)+(Z(X,8)-Z(G,8))*Y)<<8|vB(Z(G,0)+(Z(X,0)-Z(G,0))*Y)).toString(16).padStart(6,"0")}`}function mC(J){let z=(f)=>mB(J,J.theme[f]),Y=z("background"),G=z("text");if(!Y||!G)return null;let X=z("textMuted")??PZ(G,Y,0.35),Z=z("primary")??G,Q=z("border")??PZ(G,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")??PZ(Q,G,0.3),fg:G,muted:X,subtle:PZ(X,Y,0.35),primary:Z,"primary-hover":PZ(Z,G,0.35),"kobe-orange":Z,"kobe-green":z("success")??G,"kobe-blue":z("info")??G,"kobe-red":z("error")??G,"kobe-yellow":z("warning")??G,"kobe-violet":z("secondary")??Z}}function j6(J,z){if(z.pathname!==dC)return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Response.json({themes:cC})}var vC,cC,dC="/api/themes";var W6=k(()=>{$q();aq();_q();pq();rq();oq();sq();vC={claude:KX,conductor:UX,dracula:DX,nord:LX,opencode:MX,"osaka-jade":FX,tokyonight:OX};cC=Object.fromEntries(Object.entries(vC).map(([J,z])=>[J,mC(z)]).filter((J)=>J[1]!==null))});import{createHash as nC,randomUUID as iC}from"crypto";import{mkdir as lC}from"fs/promises";import{join as cB,resolve as $C}from"path";function pC(J){return nC("sha1").update(J).digest("hex").slice(0,16)}async function sC(J){let z=Number.parseInt(J.headers.get("content-length")??"",10);if(Number.isFinite(z)&&z>V6)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 G=Y.get("repoRoot");if(typeof G!=="string"||G.length===0)return Response.json({error:"missing repoRoot"},{status:400});let X=Y.get("file");if(!(X instanceof File))return Response.json({error:"file must be a File"},{status:400});if(X.size>V6)return Response.json({error:"asset too large"},{status:413});let Z=aC[X.type];if(!Z)return Response.json({error:`unsupported content-type: ${X.type||"unknown"}`},{status:415});try{let Q=pC(G),f=cB(xH(),Q);await lC(f,{recursive:!0});let B=`${iC()}.${Z}`;return await Bun.write(cB(f,B),X),Response.json({url:`${tq}/${Q}/${B}`})}catch(Q){return Response.json({error:Q instanceof Error?Q.message:String(Q)},{status:500})}}async function tC(J){let z=J.slice(tq.length+1),Y=z.indexOf("/");if(Y<0)return Response.json({error:"not found"},{status:404});let G=z.slice(0,Y),X=z.slice(Y+1);if(!rC.test(G)||!oC.test(X))return Response.json({error:"invalid asset path"},{status:400});let Z=xH(),Q=$C(Z,G,X);if(Q!==cB(Z,G,X)||!Q.startsWith(`${Z}/`))return Response.json({error:"invalid asset path"},{status:400});let f=X.slice(X.lastIndexOf(".")+1).toLowerCase(),H=_C[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 K6(J,z){if(z.pathname===tq){if(J.method==="POST")return sC(J);return Response.json({error:"method not allowed"},{status:405})}if(z.pathname.startsWith(`${tq}/`)){if(J.method==="GET")return tC(z.pathname);return Response.json({error:"method not allowed"},{status:405})}return null}var tq="/api/issue-assets",V6=10485760,aC,_C,rC,oC;var U6=k(()=>{p1();aC={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp"},_C={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"};rC=/^[a-f0-9]{16}$/,oC=/^[A-Za-z0-9_-]+\.[a-z0-9]+$/});function D6(J,z=500){return Response.json({error:J instanceof Error?J.message:String(J)},{status:z})}function L6(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 eC(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(G){return D6(G,L6(G))}}async function JN(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 G=Y;if(typeof G.repoRoot!=="string"||G.repoRoot.length===0)return Response.json({error:"missing repoRoot"},{status:400});try{return Response.json(await J.request("issue.mutate",{repoRoot:G.repoRoot,op:G.op}))}catch(X){return D6(X,L6(X))}}async function M6(J,z,Y){if(z.pathname!=="/api/issues")return null;if(J.method==="GET")return eC(Y,z);if(J.method==="POST")return JN(Y,J);return Response.json({error:"method not allowed"},{status:405})}function F6(J){return zN.has(String(J??"").trim().toLowerCase())}function O6(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 YN(J){let z=O6(J);return z!==null&&F6(z)}function A6(J,z={}){if(!J)return!0;if(YN(J))return!0;let Y=z.allowedHost?.trim();if(!Y)return!1;let G=O6(J);return G!==null&&G===Y}function R6(J){let z=String(J??"").trim();return z&&!F6(z)?z:void 0}var zN;var g6=k(()=>{zN=new Set(["localhost","127.0.0.1","::1","[::1]"])});var GN,C6;var N6=k(()=>{GN=["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"],C6=new Set(GN)});var dB={};j1(dB,{resolveRepoInit:()=>S6,resolveEngineLaunchInit:()=>fY});import{existsSync as b6,readFileSync as XN}from"fs";import{join as eq}from"path";function QN(J){return b6(eq(J,k6))?`sh ${k6}`:void 0}function qN(J){let z=eq(J,ZN);if(!b6(z))return;try{let Y=XN(z,"utf8");return Y.trim().length>0?Y:void 0}catch{return}}function S6(J,z){let Y=J?$H(J):{},G=QN(z)??Y.initScript,X=qN(z)??Y.initPrompt;return{initScript:G&&G.trim().length>0?G:void 0,initPrompt:X&&X.trim().length>0?X:void 0}}function fN(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 fY(J,z,Y={kind:"repo-init"}){let G=S6(J,z);return{initScript:G.initScript,firstMessage:fN(Y,G)}}var k6,ZN;var AX=k(()=>{O1();k6=eq(".kobe","init.sh"),ZN=eq(".kobe","init-prompt.md")});import{spawnSync as HN}from"child_process";function I6(J,z){if(J==="darwin")return"pbcopy";if(J==="linux"){for(let Y of BN)if(z(Y.binary))return Y.command;return null}return null}function T6(J){let z=[["set-option","-g","set-clipboard","on"]];if(J)for(let Y of jN)for(let G of WN)z.push(["bind-key","-T",Y,G,"send-keys","-X","copy-pipe-and-cancel",J]);return z}var BN,y6=(J)=>{try{let z=process.platform==="win32"?"where":"which";return HN(z,[J],{encoding:"utf8"}).status===0}catch{return!1}},jN,WN;var u6=k(()=>{BN=[{binary:"wl-copy",command:"wl-copy"},{binary:"xclip",command:"xclip -selection clipboard -in"},{binary:"xsel",command:"xsel --clipboard --input"}];jN=["copy-mode","copy-mode-vi"],WN=["MouseDragEnd1Pane","y","Enter"]});import{existsSync as x6,readFileSync as VN}from"fs";function E6(){bG=null}function KN(){let J=OW();if(x6(J))return{canonical:J,found:J};let z=J.replace(/\.yaml$/,".yml");if(x6(z))return{canonical:J,found:z};return{canonical:J,found:null}}function Jf(){if(bG)return bG;let{canonical:J,found:z}=KN();if(!z)return bG={path:J,exists:!1,doc:null,warnings:[]},bG;let Y=[],G=null;try{let X=VN(z,"utf8");G=Bun.YAML.parse(X)}catch(X){let Z=X instanceof Error?X.message:String(X);Y.push(`could not read/parse ${z}: ${Z}`)}return bG={path:J,exists:!0,doc:G,warnings:Y},bG}var bG=null;var nB=k(()=>{p1()});function RX(J,z){let Y=`alternating [${J}, ${z}] pairs`;return{layout:Y,validateCount:(G)=>G>=2&&G%2===0?null:`needs ${Y} (an even number of chords \u2014 got ${G})`}}function AN(J,z){let Y=J.trim().toLowerCase();if(!Y)return{error:"empty chord"};let G=Y.split("+"),X=G.pop()??"";if(X===""&&G.length>0){if(X="+",G[G.length-1]==="")G.pop()}if(!X)return{error:`"${J}": no key after the modifiers`};let Z=new Set;for(let H of G){let B=LN[H];if(!B)return{error:`"${J}": unknown modifier "${H}" (use ctrl / cmd / alt / shift)`};Z.add(B)}if(X=MN[X]??X,Z.has("shift")&&X.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=ON.filter((H)=>Z.has(H)).join("+"),f=Q?`${Q}+${X}`:X;if(X.length>1&&!FN.has(X))return{chord:f,warning:`"${J}": unrecognized key name "${X}" \u2014 the chord may never fire`};return{chord:f}}function zf(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function RN(J){if(J==="darwin")return["darwin","macos","mac"];if(J==="win32")return["win32","windows"];return[J]}function gN(J){if(!zf(J))return null;let z=J.bindings;if(zf(z))return z;return J}function Yf(J,z,Y){let G=[];if(J===null||J===void 0)return{entries:[],warnings:G};if(!zf(J))return{entries:[],warnings:["config root must be a YAML mapping (e.g. a top-level `bindings:` key)"]};let X=new Map,Z=[];if(J.bindings!==void 0)if(zf(J.bindings))Z.push(J.bindings);else G.push("`bindings:` must be a mapping of id \u2192 chord(s)");for(let Q of RN(z)){let f=J[Q];if(f===void 0)continue;let H=gN(f);if(H)Z.push(H);else G.push(`\`${Q}:\` must be a mapping (or contain a \`bindings:\` mapping)`)}for(let Q of Z)for(let[f,H]of Object.entries(Q)){if(H===null||H===!1||Array.isArray(H)&&H.length===0){X.set(f,[]);continue}let B=typeof H==="string"?[H]:Array.isArray(H)?H:null;if(!B){G.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"){G.push(`${f}: chord entries must be strings`),j=!0;continue}let L=AN(K,Y?.chordOptsFor?.(f));if("error"in L){G.push(`${f}: ${L.error}`),j=!0;continue}if(L.warning)G.push(`${f}: ${L.warning}`);if(!V.includes(L.chord))V.push(L.chord)}if(V.length===0&&j){G.push(`${f}: no valid chords \u2014 keeping the default`);continue}X.set(f,V)}return{entries:Array.from(X,([Q,f])=>({id:Q,keys:f})),warnings:G}}function CN(J,z){return J===z||J==="global"||z==="global"}function w6(J,z){let Y=[],G=[];for(let X of z){let Z=J.find((j)=>j.id===X.id);if(!Z){Y.push(`${X.id}: unknown binding id (press F1 in kobe for the full list)`);continue}let Q=iB[X.id];if(Q){Y.push(`${X.id}: not customizable \u2014 ${Q}`);continue}if(Z.keys.length===0){Y.push(`${X.id}: not customizable \u2014 the key is handled outside the keymap (doc-only row)`);continue}let f=UN[X.id];if(f&&X.keys.length>0){let j=f.validateCount(X.keys.length);if(j){Y.push(`${X.id}: ${j} \u2014 keeping the default`);continue}}let H=X.keys.filter((j)=>{if(j.length===1&&DN.has(Z.scope))return Y.push(`${X.id}: "${j}" dropped \u2014 a bare character on a ${Z.scope}-scope binding would steal typed input (add a modifier)`),!1;return!0});if(H.length===0&&X.keys.length>0){Y.push(`${X.id}: no chords survived validation \u2014 keeping the default`);continue}if(f&&H.length!==X.keys.length){Y.push(`${X.id}: a dropped chord would shift the slot layout (${f.layout}) \u2014 keeping the default`);continue}let B=Z.keys,V=Z;if(V.keys=H,Z.hint)if(H.length===0)V.hint=void 0;else Z.hint.keys=H.join("/");G.push({id:X.id,keys:H,defaultKeys:B})}for(let X of G)for(let Z of X.keys){let Q=J.find((f)=>f.id===X.id);if(!Q)continue;for(let f of J){if(f.id===X.id)continue;if(!f.keys.includes(Z))continue;if(!CN(Q.scope,f.scope))continue;Y.push(`${X.id}: "${Z}" also fires ${f.id} (${f.scope} scope) \u2014 last registration wins; consider a different chord`)}}return{applied:G,warnings:Y}}var iB,UN,DN,LN,MN,FN,ON;var Gf=k(()=>{iB={"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)"};UN={"sidebar.nav":RX("down","up"),"files.nav":RX("down","up"),"sidebar.search.nav":RX("down","up"),"files.hierarchy":RX("collapse","expand"),"sidebar.view":RX("previous view","next view"),"files.tab":RX("previous tab","next tab")},DN=new Set(["global","workspace","terminal"]),LN={ctrl:"ctrl",control:"ctrl",ctl:"ctrl",cmd:"cmd",command:"cmd",meta:"cmd",super:"cmd",win:"cmd",alt:"alt",option:"alt",opt:"alt",shift:"shift"},MN={esc:"escape",spacebar:"space",pgup:"pageup",pgdn:"pagedown",pgdown:"pagedown"},FN=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}`)]),ON=["ctrl","cmd","alt","shift"]});function gX(J){return J in P6}function yG(J,z){let Y=J.split("+"),G=Y.pop()??"";if(G===""&&Y.length>0){if(G="+",Y[Y.length-1]==="")Y.pop()}let X=new Set(Y);if(X.has("cmd"))return{error:`"${J}": the Command key never reaches tmux \u2014 use ctrl/alt/shift`};let Z;if(G.length===1)Z=X.has("shift")?G.toUpperCase():G;else{let H=kN[G];if(!H)return{error:`"${J}": tmux can't bind the key "${G}"`};Z=H}let Q=/^f\d+$/.test(G);if(X.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(X.has("ctrl"))f+="C-";if(X.has("alt"))f+="M-";if(X.has("shift"))f+="S-";return{key:f+Z}}function v6(){let J={};for(let[Y,G]of Object.entries(IG)){let X=yG(G,{allowBare:gX(Y)});if("error"in X)throw Error(`default tmux chord for ${Y} failed to translate: ${X.error}`);J[Y]={chord:G,key:X.key}}let z=PY.map((Y)=>{let G=yG(Y);if("error"in G)throw Error(`default tmux focus chord ${Y} failed to translate`);return{chord:Y,key:G.key}});return{binds:J,focus:z,overridden:new Set,warnings:[]}}function lB(J){let z=v6(),Y=new Set;for(let G of J){if(!G.id.startsWith("tmux."))continue;if(G.id===Ez){if(G.keys.length===0){z.focus=[null,null,null,null],Y.add(Ez);continue}if(G.keys.length!==PY.length){z.warnings.push(`${Ez}: needs exactly 4 chords in order left/down/up/right (got ${G.keys.length}) \u2014 keeping the default`);continue}let f=[],H=!0;for(let B of G.keys){let V=yG(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(!(G.id in IG)){z.warnings.push(`${G.id}: unknown tmux binding id`);continue}let X=G.id;if(G.keys.length===0){z.binds[X]=null,Y.add(X);continue}if(G.keys.length>1)z.warnings.push(`${X}: tmux bindings take ONE chord \u2014 using "${G.keys[0]}", ignoring the rest`);let Z=G.keys[0],Q=yG(Z,{allowBare:gX(X)});if("error"in Q){z.warnings.push(`${X}: ${Q.error} \u2014 keeping the default`);continue}if(Z!==IG[X])Y.add(X);z.binds[X]={chord:Z,key:Q.key}}return z.overridden=Y,z}function $B(J){return J.startsWith("tmux.")?{allowShiftCharacter:!0}:{}}function m6(){SG=null}function Xf(){if(SG)return SG;let J=Jf();if(!J.exists||J.doc===null)return SG=v6(),SG;let z=Yf(J.doc,process.platform,{chordOptsFor:$B}),Y=z.warnings.filter((X)=>X.startsWith("tmux.")),G=lB(z.entries);G.warnings=[...Y,...G.warnings];for(let X of G.warnings)console.warn(`[kobe/keybindings] ${X}`);return SG=G,SG}var NN,P6,h6,IG,Ez="tmux.focus",PY,kN,SG=null;var Zf=k(()=>{nB();Gf();NN={"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"},P6={"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"},h6=["F6","F7","F8","F9","F10","F11"],IG={...NN,...P6};PY=["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],kN={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 hZ(J,z){let Y=null;for(let X=0;X<24;X++){let Z=await fX(J);if(Z){if(!z)return{pane:Z,ready:!0};let Q=(await HX(Z)).trim();if(Q.length>0&&Q===Y)return{pane:Z,ready:!0};Y=Q}await c6(250)}return{pane:await fX(J)||await e8(J),ready:!1}}async function vZ(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 c6(bN),await kZ(J,"Enter")}async function d6(J,z){let{pane:Y}=await hZ(J,!0);if(!Y)return;await vZ(Y,z.text)}var c6=(J)=>new Promise((z)=>setTimeout(z,J)),bN=150;var Qf=k(()=>{P1()});function n6(J,z){if(J===null)return{kind:"create",reason:"no session with this name \u2014 build fresh"};let Y=J.worktree===z.cwd,G=!z.vendor||J.vendor===z.vendor;if(J.claudePaneAlive&&Y&&G)return{kind:"reuse",reason:"healthy: engine pane alive, worktree + vendor match"};if(Y&&!G&&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&&G&&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(!G)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 i6;var l6=k(()=>{$q();aq();_q();pq();rq();oq();sq();i6={claude:KX,conductor:UX,nord:LX,opencode:MX,dracula:DX,tokyonight:OX,"osaka-jade":FX}});function SN(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[G,X,Z]=Y;return`#${G}${G}${X}${X}${Z}${Z}`.toLowerCase()}return`#${Y.slice(0,6)}`.toLowerCase()}function $6(J,z,Y="dark"){let G=J.defs??{};function X(Q,f){if(typeof Q==="string"){if(Q==="transparent"||Q==="none")return null;if(Q.startsWith("#"))return SN(Q);if(f.includes(Q))return null;let B=G[Q]??J.theme[Q];if(B===void 0)return null;return X(B,[...f,Q])}if(!Q||typeof Q!=="object")return null;let H=Q[Y];return typeof H==="string"?X(H,f):null}let Z=J.theme[z];if(Z===void 0)return null;return X(Z,[z])}function qf(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function ff(J){if(!qf(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(!qf(Y))return{ok:!1,reason:"`theme` must be an object map"};if("defs"in z&&z.defs!==void 0){if(!qf(z.defs))return{ok:!1,reason:"`defs` must be an object map"};for(let[G,X]of Object.entries(z.defs))if(typeof X!=="string")return{ok:!1,reason:`defs.${G} must be a string (hex like "#abc" or a ref name)`}}for(let[G,X]of Object.entries(Y)){if(typeof X==="string")continue;if(!qf(X))return{ok:!1,reason:`theme.${G} must be a string or a { dark, light } object (got ${X===null?"null":Array.isArray(X)?"array":typeof X})`};let Z=X;if(typeof Z.dark!=="string")return{ok:!1,reason:`theme.${G}.dark must be a string`};if(typeof Z.light!=="string")return{ok:!1,reason:`theme.${G}.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 aB=()=>{};import{readFileSync as IN,readdirSync as yN}from"fs";import{join as a6}from"path";function CX(){return a6(qJ(),"themes")}function mZ(){let J=CX(),z;try{z=yN(J)}catch{return[]}let Y=[];for(let G of z){if(!G.endsWith(".json"))continue;let X=a6(J,G),Z;try{let H=IN(X,"utf8");Z=JSON.parse(H)}catch(H){let B=H instanceof Error?H.message:String(H);console.warn(`[kobe] skipping user theme ${X}: invalid JSON \u2014 ${B}`);continue}let Q=ff(Z);if(!Q.ok){console.warn(`[kobe] skipping user theme ${X}: ${Q.reason}`);continue}let f=G.slice(0,-5);Y.push({name:f,theme:Q.theme})}return Y}var Hf=k(()=>{p1();aB()});import{readFileSync as TN}from"fs";function xN(){try{let J=JSON.parse(TN(iJ(),"utf8")),z=typeof J.activeTheme==="string"&&J.activeTheme?J.activeTheme:"claude",Y=typeof J.focusAccent==="string"&&uN.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 EN(J){return mZ().find((Y)=>Y.name===J)?.theme??i6[J]??null}function Lz(J,...z){for(let Y of z){let G=$6(J,Y);if(G)return G}return null}function _6(J,z){let Y=Lz(J,"text"),G=Lz(J,"background"),X=Lz(J,"textMuted","text"),Z=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:Z,statusFg:X,statusMutedFg:X,windowFg:X,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??G}}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 r6(J){let z=sJ({bg:J.statusBg,fg:J.statusFg}),Y=sJ({bg:J.statusBg,fg:J.statusMutedFg}),G=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:G},{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 wN(J){let z=new Set(J.marker.split(",").map((Z)=>Z.trim()).filter(Boolean)),Y=[],G=[];for(let Z of r6(J.hexes))if(Z.value){if((J.current[Z.key]??"")!==Z.value)Y.push(["set-option",Z.setFlag,Z.option,Z.value]);G.push(Z.key)}else if(z.has(Z.key))Y.push(["set-option",Z.unsetFlag,Z.option]);let X=G.join(",");if(X!==J.marker)Y.push(X?["set-option","-g",_B,X]:["set-option","-gu",_B]);return Y}async function p6(J){let{code:z,stdout:Y}=await a0(J);return z===0?Y.trim():""}async function TG(){try{let J=xN(),z=J.enabled?EN(J.themeName):null,Y=z?_6(z,J.focusAccentSlot):_6({theme:{}},J.focusAccentSlot),G=r6(Y),[X,...Z]=await Promise.all([p6(["show-options","-gqv",_B]),...G.map((H)=>p6(["show-options",H.showFlag,H.option]))]),Q=Object.fromEntries(G.map((H,B)=>[H.key,Z[B]??""])),f=wN({marker:X,current:Q,hexes:Y});if(f.length>0)await i1(f)}catch{}}var _B="@kobe_border_theme",uN;var Bf=k(()=>{p1();P1();l6();Hf();uN=["primary","success","info"]});function o6(){return d1()[jf]!==!1}function Wf(){return d1()[s6]===!0}function t6(J){lz({[s6]:J})}var jf="zen.keepTasks",s6="zen.active";var pB=k(()=>{YG()});var Vf={};j1(Vf,{recordGen:()=>hY,isLatestGen:()=>GK,genAgeMs:()=>nN,coalesceLayoutWork:()=>iN,RESIZE_GUARD_MS:()=>dN,LAYOUT_COALESCE_MS:()=>zK});import{createHash as PN,randomUUID as hN}from"crypto";import{mkdirSync as vN,readFileSync as e6,renameSync as mN,writeFileSync as cN}from"fs";import{join as JK}from"path";function YK(){return JK(qJ(),"layout-coord")}function rB(J,z){let Y=PN("sha1").update(J).digest("hex").slice(0,16);return JK(YK(),`${Y}.${z}`)}function hY(J,z){let Y=hN();try{vN(YK(),{recursive:!0});let G=rB(J,z),X=`${G}.${Y}.tmp`;cN(X,`${Date.now()}
|
|
56
|
+
${Y}`),mN(X,G)}catch{}return Y}function GK(J,z,Y){try{return e6(rB(J,z),"utf8").split(`
|
|
57
|
+
`)[1]?.trim()===Y}catch{return!0}}function nN(J,z,Y=Date.now()){try{let G=Number.parseInt(e6(rB(J,z),"utf8").split(`
|
|
58
|
+
`)[0]??"",10);return Number.isFinite(G)?Y-G:Number.POSITIVE_INFINITY}catch{return Number.POSITIVE_INFINITY}}async function iN(J,z,Y,G=zK){let X=hY(J,z);if(G>0)await new Promise((Z)=>setTimeout(Z,G));if(!GK(J,z,X))return;await Y()}var zK=120,dN=400;var NX=k(()=>{p1()});function $N(J){let z=[];for(let Y of J.split(`
|
|
59
|
+
`)){let G=Y.trim();if(!G)continue;let[X,Z,Q,f,H]=G.split("\t");if(!X||!Z||!Q)continue;let B=Number.parseInt(H?.trim()??"",10);z.push({windowId:X.trim(),paneId:Z.trim(),role:Q.trim(),version:f?.trim()??"",...Number.isFinite(B)?{paneWidth:B}:{}})}return z}function aN(J){let z=J.indexOf("-t");return z>=0&&z+1<J.length?J[z+1]??null:null}function _N(J,z){return J.filter((Y)=>{let G=aN(Y);return G===null||z.has(G)})}function XK(J,z){let Y=new Map;for(let X of J){let Z=Y.get(X.windowId)??[];Z.push(X),Y.set(X.windowId,Z)}let G=[];for(let X of Y.values()){let Z=X.find((B)=>B.role==="claude")?.paneId,Q=X.find((B)=>B.role==="tasks"),f=X.find((B)=>B.role==="ops");if(Q&&(z.force||Q.version!==z.currentVersion))G.push({role:"tasks",paneId:Q.paneId});let H=z.force?!0:Z&&(z.vendorChanged||f?.version!==z.currentVersion);if(f&&H)G.push({role:"ops",paneId:f.paneId,claudePaneId:Z??null})}return G}async function Kf(J){let{code:z,stdout:Y}=await a0(["list-panes","-s","-t",`=${J}`,"-F",lN]);if(z!==0)return null;return $N(Y)}async function ZK(J,z){if(z.length===0)return;let Y=await Kf(J),G=Y?_N(z,new Set(Y.map((X)=>X.paneId))):z;if(G.length>0)await i1(G)}function QK(J,z){let Y=k1(),G=zJ(),X=[];for(let Z of J){let Q=Z.role==="tasks"?kY(Y,{initialTaskId:z.taskId}):pG({cwd:z.cwd,taskId:z.taskId,claudePaneId:Z.claudePaneId,cliInvocation:Y,vendor:z.vendor});X.push(["respawn-pane","-k","-t",Z.paneId,"-c",w1(z.cwd),bJ(G+Q)],["set-option","-p","-t",Z.paneId,"@kobe_role",Z.role],["set-option","-p","-t",Z.paneId,Mz,o0])}return X}function pN(J,z){if(J===0)return"no-engine-pane";return z===0?"switched":"respawn-failed"}async function qK(J,z,Y,G,X){let Z=await Kf(J);if(!Z)return"no-engine-pane";let Q=Z.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=jX(Y,X),K=bJ(ZX(kJ(j.argv),G,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 i1(H);return pN(Q.length,B)}async function fK(){let J=await yY([JY,BG,zY]),z=Number.parseInt(J[JY]??"",10),Y=Number.isFinite(z)&&z>0?HG(z):qG,G=rN({widthPct:YY(Number.parseInt(J[BG]??"",10)),heightPct:YY(Number.parseInt(J[zY]??"",10))});return{tasksWidth:Y,rcArgs:G}}function rN(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 HK(){return(await fK()).rcArgs}async function oB(J,z={}){let{tasksWidth:Y,rcArgs:G}=await fK(),X=await Kf(J);if(!X)return{rows:null,commands:[]};let Z=[];for(let Q of X)if(Q.role==="tasks"&&(z.force||Q.paneWidth!==Y))Z.push(["resize-pane","-t",Q.paneId,"-x",`${Y}`]);if(G.length>0){for(let Q of X)if(Q.role==="ops")Z.push(["resize-pane","-t",Q.paneId,...G])}return{rows:X,commands:Z}}async function uG(J,z){hY(J,"resize");let{rows:Y,commands:G}=await oB(J);if(!Y)return;let X=[...G];if(z)X.push(...QK(XK(Y,{currentVersion:o0,force:!1,vendorChanged:z.vendorChanged}),z));await ZK(J,X)}async function BK(J){if(!await H1(J))return;await uG(J)}async function cZ(J){let{code:z,stdout:Y}=await a0(["list-panes","-t",`=${J}`,"-F",`#{@kobe_role} #{pane_width} #{pane_height} #{window_width} #{window_height} #{window_zoomed_flag} #{${qz}} #{${NJ}}`]);if(z!==0)return;let G=Y.split(`
|
|
60
|
+
`).map((B)=>B.split("\t")).filter((B)=>(B[0]?.trim()??"")!=="");if(G.length===0)return;if(G.some((B)=>B[5]?.trim()==="1"))return;if(G.some((B)=>(B[6]?.trim()??"")!==""))return;if(G.some((B)=>(B[7]?.trim()??"")!==""))return;let X=Number.parseInt(G[0][3]?.trim()??"",10),Z=Number.parseInt(G[0][4]?.trim()??"",10),Q=[],f=G.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",JY,`${HG(B)}`])}let H=G.find(([B])=>B?.trim()==="ops");if(H&&Number.isFinite(X)&&X>0&&Number.isFinite(Z)&&Z>0){let B=Number.parseInt(H[1]?.trim()??"",10),V=Number.parseInt(H[2]?.trim()??"",10),j=Number.isFinite(B)?YY(100*B/X):null,K=Number.isFinite(V)?YY(100*V/Z):null;if(j!==null)Q.push(["set-option","-s",BG,`${j}`]);if(K!==null)Q.push(["set-option","-s",zY,`${K}`])}if(Q.length>0)await i1(Q)}function oN(J){let z=J.split(`
|
|
61
|
+
`).map((G)=>G.split("\t")).filter((G)=>(G[0]?.trim()??"")!=="");if(z.length===0)return!1;if(z.some((G)=>G[1]?.trim()==="1"))return!1;if(z.some((G)=>(G[2]?.trim()??"")!==""))return!1;if(z.some((G)=>(G[3]?.trim()??"")!==""))return!1;let Y=new Set(z.map((G)=>G[0]?.trim()));return Y.has("tasks")&&Y.has("ops")}async function jK(J){let{code:z,stdout:Y}=await a0(["list-panes","-t",`=${J}`,"-F",`#{@kobe_role} #{window_zoomed_flag} #{${qz}} #{${NJ}}`]);if(z!==0||!oN(Y))return;await cZ(J)}async function kX(J){let z=await yJ(J,["@kobe_worktree","@kobe_task","@kobe_vendor"]),Y=z["@kobe_worktree"]||process.cwd(),G=z["@kobe_task"]||void 0,X=z["@kobe_vendor"]||void 0,Z=await Kf(J);if(!Z)return;let Q=QK(XK(Z,{currentVersion:o0,force:!0}),{cwd:Y,taskId:G,vendor:X});await ZK(J,Q),await TG()}var Mz="@kobe_pane_version",lN;var dZ=k(()=>{ez();hJ();jz();P1();fz();Bf();FJ();DG();NX();lN=`#{window_id} #{pane_id} #{@kobe_role} #{${Mz}} #{pane_width}`});function tN(J){let z=[];for(let Y of J.split(`
|
|
62
|
+
`)){let G=Y.trim();if(!G)continue;let[X,Z,Q,f,H,B,V]=G.split("\t");if(!X)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:X.trim(),role:Z?.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 eN(J){let z=J.find((G)=>G.role===fG);if(!z)return{kind:"missing-engine"};let Y=J.filter((G)=>G.role===fZ);if(Y.length+1>=f8)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 sB(J){return J.find((z)=>z.role===Qz)??J.find((z)=>z.role==="")}function Jk(J){return 100-(YY(J??Number.NaN)??BZ)}function zk(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:G,stdout:X}=await a0(["list-panes","-t",Y,"-F",sN]);return G===0?tN(X):null}async function Yk(J){let{code:z,stdout:Y}=await a0(["list-windows","-t",`=${J}`,"-F","#{window_active}\t#{window_id}"]);if(z!==0)return"";for(let G of Y.split(`
|
|
63
|
+
`)){let[X,Z]=G.split("\t");if(X?.trim()==="1"&&Z?.trim())return Z.trim()}return""}async function HY(J,z){let{code:Y,stdout:G}=await a0(["show-options","-wqv","-t",J,z]);return Y===0?G.trim():""}async function tB(J,z,Y){await P0(["set-window-option","-t",J,z,Y])}async function vY(J,z){await P0(["set-window-option","-u","-t",J,z])}async function eB(J){let{code:z,stdout:Y}=await a0(["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 Uf(J){let z=await yJ(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 Gk(J){let z=k1(),Y=zJ();return bJ(Y+pG({cwd:J.cwd,taskId:J.taskId,claudePaneId:J.enginePaneId,cliInvocation:z,vendor:J.vendor}))}async function Xk(J,z){return z?.trim()||await Yk(J)}async function Zk(J,z){let Y=await mJ(J,z);if(!Y)return;let G=eN(Y);if(G.kind==="missing-engine"){await T1(z,"kobe: no engine pane in this window");return}if(G.kind==="maxed"){await T1(z,`kobe: workspace split limit is ${f8} panes`);return}let{cwd:X}=await Uf(J),{code:Z,stdout:Q}=await a0(["split-window",G.direction,"-t",G.targetPane,"-l","50%","-c",w1(X),"-P","-F","#{pane_id}",bJ("true")]),f=Q.trim();if(Z!==0||!f)return;await i1([["set-option","-p","-t",f,"@kobe_role",fZ],["select-pane","-t",f]])}async function Qk(J,z){let Y=await mJ(J,z);if(!Y)return;let G=Y.filter((Q)=>Q.role===fZ);if(G.length===0){await T1(z,"kobe: no workspace split to close");return}let Z=G.find((Q)=>Q.active)??G[G.length-1];if(!Z)return;await P0(["kill-pane","-t",Z.paneId])}async function qk(J,z){let Y=await mJ(J,z);if(!Y)return;let G=Y.filter((X)=>X.role===fZ);if(G.length===0){await T1(z,"kobe: no workspace splits to reset");return}await i1(G.map((X)=>["kill-pane","-t",X.paneId]))}async function WK(){let J=await yY([JY]);return HG(zk(J[JY])??qG)}async function fk(J){let{cwd:z,taskId:Y}=await Uf(J),G=k1(),X=zJ();return{cwd:z,command:bJ(X+kY(G,{initialTaskId:Y}))}}async function VK(J,z){let Y=await mJ(J,z);if(!Y)return;let G=Y.find((O)=>O.role===Zz);if(G){await P0(["kill-pane","-t",G.paneId]);return}let X=sB(Y),Z=Y.find((O)=>O.role===fG);if(!Z){await T1(z,"kobe: cannot restore file pane in this layout");return}let{cwd:Q,taskId:f,vendor:H}=await Uf(J),B=Gk({cwd:Q,taskId:f,vendor:H,enginePaneId:Z.paneId}),V=X?["split-window","-v","-b","-t",X.paneId,"-l",`${await Hk()}%`,"-c",w1(Q),"-P","-F","#{pane_id}",B]:["split-window","-h","-t",Z.paneId,"-l",`${await Jj()}%`,"-c",w1(Q),"-P","-F","#{pane_id}",B],{code:j,stdout:K}=await a0(V),L=K.trim();if(j!==0||!L)return;let A=[["set-option","-p","-t",L,"@kobe_role",Zz],["set-option","-p","-t",L,Mz,o0]];if(X?.role==="")A.push(["set-option","-p","-t",X.paneId,"@kobe_role",Qz]);await i1(A)}async function Hk(){let J=await yY([zY]);return YY(Number.parseInt(J[zY]??"",10))??BZ}async function Jj(){let J=await yY([BG]);return YY(Number.parseInt(J[BG]??"",10))??100-pQ}async function KK(){let J=await yY([zY]);return Jk(Number.parseInt(J[zY]??"",10))}async function Bk(J){let{code:z,stdout:Y}=await a0(["list-windows","-t",`=${J}`,"-F","#{window_index}"]);if(z!==0)return new Set;return new Set(Y.split(`
|
|
64
|
+
`).map((G)=>Number.parseInt(G.trim(),10)).filter((G)=>Number.isFinite(G)))}async function UK(J,z){let Y=await Bk(J),G=L7(z);while(Y.has(G))G++;return G}async function DK(J){let z=HZ(J);if(await H1(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 zj(J){let z=HZ(J);if(!await H1(z))return;let{code:Y,stdout:G}=await a0(["list-panes","-s","-t",`=${z}`,"-F","#{@kobe_role}"]);if(Y!==0)return;if(!G.split(`
|
|
65
|
+
`).some((Z)=>{let Q=Z.trim();return Q===Qz||Q===aJ}))await P0(["kill-session","-t",`=${z}`])}async function jk(J,z){await LK(J,z,qz)}async function Wk(J,z){await LK(J,z,NJ)}async function LK(J,z,Y){let G=await HY(z,Y);if(!G)return;if(await eB(G))await P0(["kill-pane","-t",G]);await vY(z,Y)}async function Vk(J,z){await jk(J,z),await Wk(J,z),await zj(J)}function MK(J){return J.find((z)=>z.role===fG)??J[0]}async function Yj(J,z,Y){let G=MK(Y);if(!G)return await T1(z,"kobe: cannot restore Tasks pane in this layout"),!1;let X=await WK(),{cwd:Z,command:Q}=await fk(J),{code:f,stdout:H}=await a0(["split-window","-h","-b","-t",G.paneId,"-l",`${X}`,"-c",w1(Z),"-P","-F","#{pane_id}",Q]),B=H.trim();if(f!==0||!B)return!1;return await i1([["set-option","-p","-t",B,"@kobe_role",aJ],["set-option","-p","-t",B,Mz,o0],["select-pane","-t",B]]),await vY(z,NJ),await T1(z,"kobe: Tasks pane restored"),!0}async function FK(J,z,Y){let G=await DK(J),X=await UK(G,z),{code:Z,stdout:Q}=await a0(["break-pane","-d","-s",Y.paneId,"-t",`${G}:${X}`,"-P","-F","#{pane_id}"]),f=Q.trim()||Y.paneId;if(Z!==0||!f){await T1(z,"kobe: could not hide Tasks pane");return}await tB(z,NJ,f),await T1(z,"kobe: Tasks pane hidden")}async function Gj(J,z,Y){let G=await mJ(J,z);if(!G)return;if(!await eB(Y)){await vY(z,NJ);let Q=G.find((f)=>f.role===aJ);if(Q){await P0(["select-pane","-t",Q.paneId]);return}await Yj(J,z,G);return}let X=MK(G);if(!X){await T1(z,"kobe: cannot restore Tasks pane in this layout");return}if(await P0(["join-pane","-h","-b","-s",Y,"-t",X.paneId,"-l",`${await WK()}`])!==0){await T1(z,"kobe: could not restore Tasks pane");return}await i1([["set-option","-p","-t",Y,"@kobe_role",aJ],["set-option","-p","-t",Y,Mz,o0],["select-pane","-t",Y]]),await vY(z,NJ),await zj(J),await T1(z,"kobe: Tasks pane restored")}async function Kk(J,z){let Y=await HY(z,NJ);if(Y){await Gj(J,z,Y);return}let G=await mJ(J,z);if(!G)return;let X=G.find((Z)=>Z.role===aJ);if(X){await FK(J,z,X);return}await Yj(J,z,G)}async function Uk(J,z){let Y=await HY(z,NJ);if(Y){await Gj(J,z,Y);return}let G=await mJ(J,z);if(!G)return;let X=G.find((Z)=>Z.role===aJ);if(X){await P0(["select-pane","-t",X.paneId]);return}await Yj(J,z,G)}async function OK(J,z,Y){if(Y.role==="")await P0(["set-option","-p","-t",Y.paneId,"@kobe_role",Qz]);let G=await DK(J),X=await UK(G,z),{code:Z,stdout:Q}=await a0(["break-pane","-d","-s",Y.paneId,"-t",`${G}:${X}`,"-P","-F","#{pane_id}"]),f=Q.trim()||Y.paneId;if(Z!==0||!f){await T1(z,"kobe: could not hide terminal pane");return}await tB(z,qz,f),await T1(z,"kobe: Terminal pane hidden")}async function AK(J,z,Y){let G=Y.find((V)=>V.role===Zz),X=Y.find((V)=>V.role===fG);if(!G&&!X)return await T1(z,"kobe: cannot restore terminal pane in this layout"),!1;let{cwd:Z}=await Uf(J),Q=G?["split-window","-v","-t",G.paneId,"-l",`${await KK()}%`,"-c",w1(Z),"-P","-F","#{pane_id}"]:["split-window","-h","-t",X?.paneId??"","-l",`${await Jj()}%`,"-c",w1(Z),"-P","-F","#{pane_id}"],{code:f,stdout:H}=await a0(Q),B=H.trim();if(f!==0||!B)return!1;return await P0(["set-option","-p","-t",B,"@kobe_role",Qz]),await vY(z,qz),await T1(z,"kobe: Terminal pane restored"),!0}async function RK(J,z,Y){let G=await mJ(J,z);if(!G)return;if(!await eB(Y)){await vY(z,qz),await AK(J,z,G);return}let X=G.find((B)=>B.role===Zz),Z=G.find((B)=>B.role===fG);if(!X&&!Z){await T1(z,"kobe: cannot restore terminal pane in this layout");return}let Q=X?["join-pane","-v","-s",Y,"-t",X.paneId,"-l",`${await KK()}%`]:["join-pane","-h","-s",Y,"-t",Z?.paneId??"","-l",`${await Jj()}%`];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 vY(z,qz),await zj(J),G=await mJ(J,z);let H=G?.find((B)=>B.paneId===Y);if(H)await P0(["select-pane","-t",H.paneId]);await T1(z,"kobe: Terminal pane restored")}async function Dk(J,z){let Y=await HY(z,qz);if(Y){await RK(J,z,Y);return}let G=await mJ(J,z);if(!G)return;let X=sB(G);if(X){await OK(J,z,X);return}await AK(J,z,G)}async function Lk(J){let z=Wf();if(t6(!z),z){await kK(J);return}await NK(J)}async function bX(J){if(!await H1(J))return;let z=Wf(),Y=(await MG(J,_G)).length>0;if(z===Y)return;if(z)await NK(J);else await kK(J)}async function gK(J){let{code:z,stdout:Y}=await a0(["list-windows","-t",`=${J}`,"-F","#{window_id}"]);if(z!==0)return[];return Y.split(`
|
|
66
|
+
`).map((G)=>G.trim()).filter((G)=>G.length>0)}async function CK(J,z){return!!(await mJ(J,z))?.some((G)=>G.role===fG)}async function NK(J){let z=await gK(J);for(let Y of z){if(!await CK(J,Y))continue;if(await HY(Y,NY))continue;await SK(J,Y)}await ZY(J,_G,"1"),await T1(`=${J}`,"kobe: Zen mode on \u2014 all tabs")}async function kK(J){let z=await gK(J);for(let Y of z){let G=await HY(Y,NY);if(G)await Mk(J,Y,G)}await P0(["set-option","-u","-t",J,_G]),await T1(`=${J}`,"kobe: Zen mode off \u2014 all tabs")}async function bK(J,z){let Y=(await MG(J,_G)).length>0;if(!Y&&!Wf())return;if(!Y)await ZY(J,_G,"1");if(await HY(z,NY))return;if(!await CK(J,z))return;await SK(J,z)}async function SK(J,z){let Y=await mJ(J,z);if(!Y)return;let G=[],X=Y.find((Q)=>Q.role===Zz);if(X)await P0(["kill-pane","-t",X.paneId]),G.push(Zz);let Z=sB(Y);if(Z)await OK(J,z,Z),G.push(Qz);if(!o6()){let Q=Y.find((f)=>f.role===aJ);if(Q)await FK(J,z,Q),G.push(aJ)}if(G.length===0){await T1(z,"kobe: already focused \u2014 nothing to hide");return}await tB(z,NY,G.join(",")),await T1(z,"kobe: Zen mode on")}async function Mk(J,z,Y){let G=new Set(Y.split(",").map((X)=>X.trim()));if(G.has(aJ)){let X=await HY(z,NJ);if(X)await Gj(J,z,X)}if(G.has(Zz)){let X=await mJ(J,z);if(X&&!X.some((Z)=>Z.role===Zz))await VK(J,z)}if(G.has(Qz)){let X=await HY(z,qz);if(X)await RK(J,z,X)}await vY(z,NY),await T1(z,"kobe: Zen mode off")}async function Fk(J){let{code:z,stdout:Y}=await a0(["list-windows","-t",`=${J}`,"-F","#{window_id}"]);if(z!==0)return 0;return Y.split(`
|
|
67
|
+
`).filter((G)=>G.trim().length>0).length}async function Ok(J,z){if(await Fk(J)<=1){await T1(z,"Cannot close the only ChatTab");return}await Vk(J,z),await P0(["kill-window","-t",z])}async function SX(J,z,Y={}){if(!await H1(J))return;let G=await Xk(J,Y.windowId);if(!G)return;switch(z){case"workspace-split":await Zk(J,G);return;case"workspace-close":await Qk(J,G);return;case"workspace-reset":await qk(J,G);return;case"tasks-toggle":await Kk(J,G);return;case"tasks-restore":await Uk(J,G);return;case"ops-toggle":await VK(J,G);return;case"terminal-toggle":await Dk(J,G);return;case"zen-toggle":await Lk(J);return;case"chat-tab-close":await Ok(J,G);return}}var sN="#{pane_id}\t#{@kobe_role}\t#{pane_active}\t#{pane_width}\t#{pane_height}\t#{window_width}\t#{window_height}";var IX=k(()=>{ez();jz();pB();P1();fz();FJ();DG();dZ()});function Lf(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 Mf(J,z="kill-window"){return["bind-key","-n",J,"if-shell","-F","#{>:#{session_windows},1}",z,"display-message 'Cannot close the only ChatTab'"]}function Ff(J){return["bind-key","-n",J,"command-prompt","-I","#{window_name}","rename-window -- '%%'"]}function Of(J){return[["bind-key","-n",J,"command-prompt","-p",Df],["bind-key","T","command-prompt","-p",Df]]}function Xj(J){return J.startsWith("C-")&&J.length===3?`^${J.slice(2)}`:J}function Af(J){return`${[J.focusLeft?`${Xj(J.focusLeft)} tasks`:null,J.detach?`${Xj(J.detach)} detach`:null,J.newTab?`${Xj(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 Qj(J,z){let Y=zJ(),G=await Cq(),X=bJ(z.opsCommand??Y+pG({cwd:z.cwd,taskId:z.taskId,claudePaneId:J,cliInvocation:z.inv,vendor:z.vendor})),{stdout:Z}=await CZ([["set-option","-p","-t",J,"@kobe_role","claude"],["set-window-option","-t",J,Zj,"idle"],["split-window","-h","-b","-t",J,"-l",`${G}`,"-c",w1(z.cwd),"-P","-F","tasks=#{pane_id}",bJ(Y+kY(z.inv,{initialTaskId:z.taskId}))],["split-window","-h","-t",J,"-l",`${100-pQ}%`,"-c",w1(z.cwd),"-P","-F","ops=#{pane_id}",X],["split-window","-v","-l",`${100-BZ}%`,"-c",w1(z.cwd),"-P","-F","shell=#{pane_id}"],["select-pane","-t",J]]),Q=Object.fromEntries(Z.split(`
|
|
68
|
+
`).map((f)=>f.trim()).filter(Boolean).map((f)=>f.split("=",2)));if(await i1([...Q.tasks?[["set-option","-p","-t",Q.tasks,"@kobe_role",aJ]]:[],...Q.tasks?[["set-option","-p","-t",Q.tasks,Mz,o0]]:[],...Q.ops?[["set-option","-p","-t",Q.ops,"@kobe_role",Zz]]:[],...Q.ops?[["set-option","-p","-t",Q.ops,Mz,o0]]:[],...Q.shell?[["set-option","-p","-t",Q.shell,"@kobe_role",Qz]]:[]]),Q.ops){let f=await HK();if(f.length>0)await P0(["resize-pane","-t",Q.ops,...f])}}async function IK(J,z){if(!await H1(J))return;let Y=await yJ(J,["@kobe_worktree","@kobe_task","@kobe_vendor",gZ]),G=Y["@kobe_worktree"]||process.cwd(),X=Y["@kobe_task"]||void 0,Z=Y[gZ]||void 0,Q=z??Y["@kobe_vendor"];if(z)await Ak(J,X,z);let f=TJ(Q),H=jX(f,Q),B=k1(),j=(await a0(["new-window","-t",`=${J}`,"-c",w1(G),"-P","-F","#{pane_id}",bJ(ZX(kJ(H.argv),Z,G))])).stdout.trim();if(!j)return;if(H.sessionId)await TY(j,Tz,H.sessionId);await Qj(j,{cwd:G,taskId:X,inv:B,vendor:Q});let{stdout:K}=await a0(["display-message","-p","-t",j,"#{window_id}"]),L=K.trim();if(L)await bK(J,L)}async function gf(J){if(!await H1(J))return;let Y=(await yJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),G=k1(),Z=`${zJ()}${G.map(Z1).join(" ")} settings`;await Vz(J,{cwd:w1(Y),command:Z,name:"settings",surface:!0})}async function Cf(J){if(!await H1(J))return;let Y=(await yJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),G=k1(),Z=`${zJ()}${G.map(Z1).join(" ")} help-page`;await Vz(J,{cwd:w1(Y),command:Z,name:"help",surface:!0})}async function Nf(J,z){if(!await H1(J))return;let G=(await yJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),X=k1(),Z=zJ(),Q=z?` --repo ${Z1(z)}`:"",f=`${Z}${X.map(Z1).join(" ")} new-task${Q}`;await Vz(J,{cwd:w1(G),command:f,name:"new task",surface:!0})}async function kf(J){if(!await H1(J))return;let Y=(await yJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),G=k1(),Z=`${zJ()}${A7({cliInvocation:G})}`;await Vz(J,{cwd:w1(Y),command:Z,name:"update",surface:!0})}async function yK(J){if(!await H1(J))return;let Y=(await yJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),G=k1(),Z=`${zJ()}${G.map(Z1).join(" ")} quick-task --session ${Z1(J)}`;await Vz(J,{cwd:w1(Y),command:Z,name:"quick task",surface:!0})}async function Ak(J,z,Y){if(await ZY(J,"@kobe_vendor",Y),!z)return;try{let{connectOrStartDaemon:G}=await Promise.resolve().then(() => (AJ(),bf)),X=await G();try{await X.request("task.setVendor",{taskId:z,vendor:Y})}finally{X.close()}}catch(G){console.error("[kobe tmux] failed to persist selected engine vendor:",G)}}var Df,Zj="@kobe_tab_state",nZ="#{?#{==:#{@kobe_tab_state},running},\u25CF,#{?#{==:#{@kobe_tab_state},done},\u2713,#{?#{==:#{@kobe_tab_state},error},!,#{?#{==:#{@kobe_tab_state},unknown},?,\u25CB}}}} #I:#W",Rf;var qj=k(()=>{ez();hJ();jz();P1();fz();t1();FJ();DG();IX();dZ();Df=`engine (${l1.join("/")}/\u2026)`;Rf=nZ});var tJ={};j1(tJ,{tmuxWindowSizeArgsForClient:()=>Bj,tmuxSessionName:()=>M1,tmuxInitialSizeArgs:()=>uK,tmuxInitialClientSize:()=>Hj,tmuxAvailable:()=>yz,switchClientBeforeKill:()=>uz,sessionExists:()=>H1,selectTasksPane:()=>Ik,runLayoutAction:()=>SX,resyncWindowToClient:()=>Ck,refreshKobeWorkspacePanes:()=>kX,quickCreate:()=>yK,prepareWindowForSwitch:()=>If,prepareWindowForAttach:()=>Sf,parseTmuxClientRows:()=>xK,parseObservedSession:()=>PK,openUpdateTab:()=>kf,openSettingsTab:()=>gf,openNewTaskTab:()=>Nf,openHelpTab:()=>Cf,newChatTab:()=>IK,kobeStatusRight:()=>Af,killSession:()=>rJ,healSessionLayout:()=>BK,focusBindCommand:()=>wK,ensureSession:()=>cY,currentSessionName:()=>OJ,clientsWithConflictingSize:()=>EK,chatTabSwitchBindings:()=>Lf,chatTabRenameBinding:()=>Ff,chatTabCloseBinding:()=>Mf,chatTabChooseEngineBindings:()=>Of,captureGlobalLayoutOnDrag:()=>jK,captureGlobalLayout:()=>cZ,attachArgv:()=>qX,PANE_VERSION_OPTION:()=>Mz,CHAT_TAB_STATUS_FORMAT:()=>nZ,CHAT_TAB_STATUS_CURRENT_FORMAT:()=>Rf,CHAT_TAB_STATE_OPTION:()=>Zj,CHAT_TAB_ENGINE_PROMPT:()=>Df});function uK(J=process.stdout,z=process.env){let Y=Hj(J,z);return Y?["-x",`${Y.columns}`,"-y",`${Y.rows}`]:[]}function Hj(J=process.stdout,z=process.env){let Y=mY(J.columns)??mY(z.COLUMNS),G=mY(J.rows)??mY(z.LINES);return Y&&G?{columns:Y,rows:G}:null}function mY(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 xK(J){let z=[];for(let Y of J.split(`
|
|
69
|
+
`)){let[G,X,Z,Q,f]=Y.split("\t"),H=mY(Z?.trim()),B=mY(Q?.trim());if(!G?.trim()||!X?.trim()||!H||!B)continue;z.push({name:G.trim(),session:X.trim(),width:H,height:B,flags:f?.trim()??""})}return z}function EK(J,z,Y,G={}){return J.filter((X)=>X.session===z).filter((X)=>X.name!==G.currentClientName).filter((X)=>X.width!==Y.columns||X.height!==Y.rows).map((X)=>X.name)}function Bj(J,z){let Y=Math.max(1,J.rows-(z.status?.trim()==="on"?1:0));return["-x",`${J.columns}`,"-y",`${Y}`]}async function jj(J,z,Y={}){if(!z)return;let{code:G,stdout:X}=await a0(["list-clients","-t",`=${J}`,"-F",Rk]);if(G!==0)return;let Z=EK(xK(X),J,z,Y),Q=[];if(Y.currentClientName)Q.push(["refresh-client","-f","!ignore-size","-t",Y.currentClientName]);for(let f of Z)Q.push(["refresh-client","-f","ignore-size","-t",f]);if(Q.length>0)await i1(Q)}async function Sf(J){hY(J,"resize");let z=Hj();await jj(J,z);let Y=z?["-x",`${z.columns}`,"-y",`${z.rows}`]:[];if(Y.length>0)await P0(["resize-window","-t",`=${J}`,...Y]);await uG(J)}async function gk(){let{code:J,stdout:z}=await a0(["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,G,X,Z]=z.trim().split("\t"),Q=mY(G),f=mY(X),H=Q&&f?{columns:Q,rows:f}:null;return{sizeArgs:H?Bj(H,{status:Z}):[],clientSize:H,clientName:Y?.trim()||void 0}}async function If(J){hY(J,"resize");let z=await gk();await jj(J,z.clientSize,{currentClientName:z.clientName});let Y=z.sizeArgs;if(Y.length>0)await P0(["resize-window","-t",`=${J}`,...Y]);await uG(J)}async function Ck(J,z){if(!z.size)return;hY(J,"resize"),await jj(J,z.size,{currentClientName:z.clientName});let Y=Bj(z.size,{status:z.status}),{commands:G}=await oB(J,{force:!0});await i1([["resize-window","-t",`=${J}`,...Y],...G])}function wK(J,z,Y){let G=`#{?window_zoomed_flag,1,#{?${Nk[z]},,1}}`;if(Y)return["bind-key","-n",J,"if-shell","-F",G,`select-pane ${z}`,Y];return["bind-key","-n",J,"if-shell","-F",G,`select-pane ${z}`]}async function cY(J){let z=fj.get(J.name);if(z)return z;let Y=Sk(J);fj.set(J.name,Y);try{return await Y}finally{fj.delete(J.name)}}function PK(J){let z="",Y="",G=!1,X=new Set;for(let Z of J.split(`
|
|
70
|
+
`)){let[Q,f,H,B,V]=Z.split("\t");if(!Q?.trim())continue;if(X.add(Q.trim()),!z&&B?.trim())z=B.trim();if(!Y&&V?.trim())Y=V.trim();if(f?.trim()==="1"&&H?.trim()==="claude")G=!0}return{worktree:z,vendor:Y,claudePaneAlive:G,windowCount:X.size}}async function bk(J){if(!await H1(J))return null;let{code:z,stdout:Y}=await a0(["list-panes","-s","-t",`=${J}`,"-F",kk]);if(z!==0)return{worktree:"",vendor:"",claudePaneAlive:!1,windowCount:0};return PK(Y)}async function Sk(J){let z=J.launchInit,Y=await bk(J.name),G=n6(Y,{cwd:J.cwd,vendor:J.vendor,hasEngineCommand:J.command.length>0}),X=yV(J.repo);if(G.kind==="reuse")return await uG(J.name,{cwd:J.cwd,taskId:J.taskId,vendor:J.vendor}),!0;if(G.kind==="respawn-engine"){let k0=await qK(J.name,J.cwd,J.command,X,J.vendor);if(k0==="switched"){if(J.vendor)await ZY(J.name,"@kobe_vendor",J.vendor);return await uG(J.name,{cwd:J.cwd,taskId:J.taskId,vendor:J.vendor,vendorChanged:!0}),!0}if(k0==="respawn-failed")return await uG(J.name,{cwd:J.cwd,taskId:J.taskId,vendor:J.vendor}),!0}if(G.kind==="rebuild"||G.kind==="respawn-engine")await rJ(J.name);let Z=k1(),Q=jX(J.command,J.vendor),f=J.repo!==void 0&&J.cwd===J.repo,H=f||X?void 0:J.taskId,B=f&&!X?J.taskId:void 0,V=dq(cq(Q.argv,J.vendor,H),J.vendor,B),j=ZX(kJ(V),X,J.cwd),L=(await a0(["new-session","-d","-s",J.name,"-c",w1(J.cwd),...uK(),"-P","-F","#{pane_id}",F7(j,{initScript:X?void 0:z?.initScript,markerPath:!X&&z?.initScript?AW(J.cwd):void 0,timeoutSeconds:H8(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 TY(L,Tz,Q.sessionId);await i1([...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]]:[],...X?[["set-option","-t",J.name,gZ,X]]:[]]),await Qj(L,{cwd:J.cwd,taskId:J.taskId,opsCommand:J.opsCommand,inv:Z,vendor:J.vendor});let A=zJ(),O=Z.map(Z1).join(" "),g=`${A}${O} new-chattab --session '#{session_name}'`,x=`${g} --vendor '%%'`,_=`run-shell ${Z1(x)}`,S=`${A}${O} focus-tasks --session '#{session_name}' --window '#{window_id}'`,N=`run-shell ${Z1(S)}`,M=(k0)=>`${A}${O} layout --session '#{session_name}' --window '#{window_id}' --action ${k0}`,I=M("tasks-restore"),r=`run-shell ${Z1(I)}`,l=M("chat-tab-close"),e=`run-shell ${Z1(l)}`,J0=`${A}${O} heal-layout --session '#{session_name}'`,T=`run-shell -b ${Z1(J0)}`,q0=`${A}${O} resync-window --session '#{session_name}' --client '#{client_name}' --cols '#{client_width}' --rows '#{client_height}' --status '#{status}'`,p=`run-shell -b ${Z1(q0)}`,j0=`${A}${O} capture-layout --session '#{session_name}'`,F0=`run-shell -b ${Z1(j0)}`,V0=R7({tmuxSocket:Wz}),t=I6(process.platform,y6),h=T6(t),C=Xf(),o=h6.map((k0)=>["unbind-key","-n",k0]);if(C.overridden.has(Ez))for(let k0 of PY){let C0=yG(k0);if("key"in C0)o.push(["unbind-key","-n",C0.key])}for(let k0 of C.overridden){if(k0===Ez)continue;let C0=IG[k0],y=gX(k0),L0=yG(C0,{allowBare:y});if("key"in L0)o.push(y?["unbind-key",L0.key]:["unbind-key","-n",L0.key])}let E=["-L","-D","-U","-R"],c=C.focus.flatMap((k0,C0)=>{let y=E[C0],L0=y==="-L"?r:void 0;return k0&&y?[wK(k0.key,y,L0)]:[]}),s=C.binds,Z0=(k0,C0)=>{let y=s[k0];return y?[["bind-key",y.key,"run-shell",M(C0)]]:[]},A0=(...k0)=>{let C0=k0.map((y)=>s[y]?.chord).filter((y)=>!!y);return C0.length>0?C0.join("/"):null};await i1([["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",nZ],["set-option","-g","window-status-current-format",Rf],["set-option","-g","status-right",Af({focusLeft:C.focus[0]?.key??null,detach:s["tmux.detach"]?.key??null,newTab:s["tmux.tab.new"]?.key??null,layoutSplits:A0("tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"),layoutPanes:A0("tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle","tmux.layout.zenToggle")})],["set-option","-g","mouse","on"],...h,["set-hook","-g","window-resized",T],["set-hook","-g","client-resized",p],["set-hook","-g","window-layout-changed",F0],...o,...s["tmux.detach"]?[["bind-key","-n",s["tmux.detach"].key,"if-shell","-F",`#{?#{${NJ}},1,#{==:#{@kobe_role},tasks}}`,"detach-client",N]]:[],...c,...s["tmux.tab.new"]?[["bind-key","-n",s["tmux.tab.new"].key,"run-shell",g]]:[],...s["tmux.tab.chooseEngine"]?Of(s["tmux.tab.chooseEngine"].key).map((k0)=>[...k0,_]):[],...s["tmux.tab.prev"]&&s["tmux.tab.next"]?Lf(s["tmux.tab.prev"].key,s["tmux.tab.next"].key):s["tmux.tab.prev"]?[["bind-key","-n",s["tmux.tab.prev"].key,"previous-window"]]:s["tmux.tab.next"]?[["bind-key","-n",s["tmux.tab.next"].key,"next-window"]]:[],...s["tmux.tab.close"]?[Mf(s["tmux.tab.close"].key,e)]:[],...s["tmux.tab.rename"]?[Ff(s["tmux.tab.rename"].key)]:[],...Z0("tmux.layout.workspaceSplit","workspace-split"),...Z0("tmux.layout.workspaceClose","workspace-close"),...Z0("tmux.layout.workspaceReset","workspace-reset"),...Z0("tmux.layout.tasksToggle","tasks-toggle"),...Z0("tmux.layout.opsToggle","ops-toggle"),...Z0("tmux.layout.terminalToggle","terminal-toggle"),...Z0("tmux.layout.zenToggle","zen-toggle"),["bind-key","f","run-shell",`${A}${O} quick-create --session '#{session_name}'`],["bind-key","u","display-popup","-E",V0]]),await TG(),await P0(["select-pane","-t",L]);let h0=z?.firstMessage;if(h0)d6(J.name,h0).catch((k0)=>console.error("[kobe tmux] first message delivery failed:",k0));return!0}async function TK(J,z,Y){let G=Y?.trim()||`=${J}`,{code:X,stdout:Z}=await a0(["list-panes","-t",G,"-F","#{pane_id}\t#{@kobe_role}"]);if(X!==0)return"";for(let Q of Z.split(`
|
|
71
|
+
`)){let[f,H]=Q.split("\t");if(f?.trim()&&H?.trim()===z)return f.trim()}return""}async function Ik(J,z={}){if(!await H1(J))return"";let Y=await TK(J,"tasks",z.windowId);if(!Y)await SX(J,"tasks-restore",{windowId:z.windowId}),Y=await TK(J,"tasks",z.windowId);if(!Y)return"";return await P0(["select-pane","-t",Y]),Y}var Rk="#{client_name}\t#{client_session}\t#{client_width}\t#{client_height}\t#{client_flags}",Nk,fj,kk="#{window_id}\t#{window_active}\t#{@kobe_role}\t#{@kobe_worktree}\t#{@kobe_vendor}";var fJ=k(()=>{ez();hJ();p1();jz();P1();u6();Zf();Qf();fz();Bf();qj();DG();IX();NX();dZ();P1();qj();dZ();IX();Nk={"-L":"pane_at_left","-D":"pane_at_bottom","-U":"pane_at_top","-R":"pane_at_right"};fj=new Map});async function yk(J,z){let{task:Y}=await J.request("task.get",{taskId:z});return Y}async function Wj(J,z){let Y=await yk(J,z);if(Y.worktreePath)return{task:Y,worktreePath:Y.worktreePath};let{worktreePath:G}=await J.request("task.ensureWorktree",{taskId:z});if(!G)throw Error(`task ${z} has no worktree`);return{task:Y,worktreePath:G}}async function hK(J,z){let{task:Y,worktreePath:G}=await Wj(J,z),X=M1(z);if(!await H1(X)){let Z=fY(Y.repo??"",G,{kind:"repo-init"});if(!await cY({name:X,cwd:G,command:TJ(Y.vendor,Y.modelEffort),taskId:z,vendor:Y.vendor,launchInit:Z}))throw Error(`failed to start tmux session for ${z}`)}return{session:X,worktreePath:G}}function Tk(J){return _Q(J,{bareSafe:!0})}async function vK(J,z){let{task:Y,worktreePath:G}=await Wj(J,z),X=Y.kind==="main"?void 0:z,Z=Y.kind==="main"?z:void 0,Q=[...dq(cq(TJ(Y.vendor,Y.modelEffort),Y.vendor,X),Y.vendor,Z)],f=fY(Y.repo??"",G,{kind:"none"}),H=Tk(Q),B=f.initScript?.trim()?`${f.initScript}
|
|
72
|
+
${H}`:H,V=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:G,command:[V,"-ilc",B]}}async function mK(J,z){let{worktreePath:Y}=await Wj(J,z),G=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:Y,command:[G,"-il"]}}async function cK(J){let z=M1(J);await uz(z).catch(()=>{}),await rJ(z).catch(()=>{})}var dK=k(()=>{hJ();Q8();AX();P1();fJ()});import{existsSync as uk}from"fs";import{join as nK,normalize as $K}from"path";function xk(J){let z=null,Y=null,G=new TextEncoder,X=new ReadableStream({start(Z){z=J((f,H)=>{try{Z.enqueue(G.encode(`event: ${f}
|
|
73
73
|
data: ${JSON.stringify(H)}
|
|
74
74
|
|
|
75
|
-
`))}catch{}}),Y=setInterval(()=>{try{
|
|
76
|
-
|
|
77
|
-
`))}catch{}},15000)},cancel(){if(Y)clearInterval(Y);z?.()}});return new Response(
|
|
78
|
-
`).map((
|
|
79
|
-
`)){let
|
|
80
|
-
`)){let
|
|
81
|
-
`,"utf8");async function
|
|
82
|
-
`);while(
|
|
83
|
-
`)}}return T}async function
|
|
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
|
|
75
|
+
`))}catch{}}),Y=setInterval(()=>{try{Z.enqueue(G.encode(`: ping
|
|
76
|
+
|
|
77
|
+
`))}catch{}},15000)},cancel(){if(Y)clearInterval(Y);z?.()}});return new Response(X,{headers:{"content-type":"text/event-stream","cache-control":"no-cache, no-transform",connection:"keep-alive"}})}async function Ek(J,z,Y){try{let{name:G,payload:X}=await J.json();if(!G)return Response.json({error:"missing rpc name"},{status:400});if(!C6.has(G))return Response.json({error:`rpc ${G} is not exposed to the web UI`},{status:403});let Z=await z.request(G,X),Q=X?.taskId;if(typeof Q==="string"){let f=G==="task.archive"&&X.archived!==!1;if(G==="task.delete"||f)Y(Q)}return Response.json({result:Z})}catch(G){let X=G instanceof Error&&G.name!=="Error"?G.name:void 0;return Response.json({error:G instanceof Error?G.message:String(G),...X?{name:X}:{}},{status:500})}}async function wk(){try{let z=(await tz()).map((Y)=>({id:Y,label:RG(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 Pk(){return Response.json({api:gG()})}function hk(){return Response.json({projects:CJ()})}function dY(J,z=""){return typeof J==="string"?J:z}function vk(J,z){return typeof J==="boolean"?J:z}function oK(J){let z=J.customEngineIds;if(!Array.isArray(z))return[];return z.filter((Y)=>typeof Y==="string"&&rK.test(Y)&&!QJ(Y))}function mk(J){return J.split(/[-_]+/).filter(Boolean).map((z)=>`${z.slice(0,1).toUpperCase()}${z.slice(1)}`).join(" ")}function ck(J,z){return dY(J[Dz(z)]).trim()||RG(z)}function dk(J,z){return dY(J[Uz(z)]).trim()||EZ(z).join(" ")}function sK(){let J=d1(),z=oK(J),Y=[...sY,...z],G=dY(J.lastSelectedVendor,"claude"),X=dY(J.focusAccent,"primary");return Response.json({activeTheme:dY(J.activeTheme,"claude"),transparentBackground:vk(J.transparentBackground,!1),focusAccent:pK.includes(X)?X:"primary",notificationsToast:J["notifications.toast.enabled"]!==!1,notificationsSound:J["notifications.sound.enabled"]!==!1,settingsSurface:kG(J[qY]??NG),editorKind:WX(J[QY]??nq),editorCustomCommand:dY(J[EY]),remoteProjects:J["experimental.remoteProjects"]===!0,autoStatus:J[FG]===!0,dispatcher:J[AG]===!0,defaultEngine:G,engines:Y.map((Z)=>({id:Z,label:ck(J,Z),command:dk(J,Z),isBuiltin:QJ(Z),isCustom:!QJ(Z),isDefault:Z===G}))})}function iZ(J,z,Y){if(typeof Y==="string")J[z]=Y.trim()}function yX(J,z,Y){if(typeof Y==="boolean")J[z]=Y}async function nk(J){try{let z=await J.json(),Y={};if(iZ(Y,"activeTheme",z.activeTheme),yX(Y,"transparentBackground",z.transparentBackground),pK.includes(z.focusAccent))Y.focusAccent=z.focusAccent;if(yX(Y,"notifications.toast.enabled",z.notificationsToast),yX(Y,"notifications.sound.enabled",z.notificationsSound),z.settingsSurface==="chattab"||z.settingsSurface==="taskpanel")Y[qY]=z.settingsSurface;if(CG.includes(z.editorKind))Y[QY]=z.editorKind;iZ(Y,EY,z.editorCustomCommand),yX(Y,"experimental.remoteProjects",z.remoteProjects),yX(Y,FG,z.autoStatus),yX(Y,AG,z.dispatcher),iZ(Y,"lastSelectedVendor",z.defaultEngine);let G=d1(),X=oK(G),Z=new Set([...sY,...X]),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"||!Z.has(H.id))continue;iZ(Y,Uz(H.id),H.command),iZ(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(!rK.test(H)||QJ(H)||Z.has(H))return Response.json({error:"invalid or duplicate engine id"},{status:400});Y.customEngineIds=[...X,H],Y[Uz(H)]=dY(f.command).trim();let B=dY(f.label).trim();Y[Dz(H)]=B&&B!==H?B:mk(H)}if(typeof z.removeEngine==="string"){let f=z.removeEngine;if(!QJ(f)){if(Y.customEngineIds=X.filter((H)=>H!==f),Y[Uz(f)]=void 0,Y[Dz(f)]=void 0,G.lastSelectedVendor===f)Y.lastSelectedVendor="claude"}}if(Object.keys(Y).length>0)lz(Y);return sK()}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:400})}}async function ik(J,z){try{let{taskId:Y}=await J.json();if(!Y)return Response.json({error:"missing taskId"},{status:400});return Response.json(await hK(z,Y))}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function iK(J,z,Y){try{let G=J.searchParams.get("taskId");if(!G)return Response.json({error:"missing taskId"},{status:400});return Response.json(await Y(z,G))}catch(G){return Response.json({error:G instanceof Error?G.message:String(G)},{status:500})}}function tK(){return Response.json({review:S1(yf.review)??null,pr:S1(yf.pr)??null})}async function lk(J){try{let z=await J.json();if(typeof z.review==="string")r1(yf.review,z.review);if(typeof z.pr==="string")r1(yf.pr,z.pr);return tK()}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:400})}}async function $k(J,z){let G=$K(nK(z,J==="/"?"/index.html":J));if(!G.startsWith(z))return new Response("forbidden",{status:403});let X=Bun.file(uk(G)?G:nK(z,"index.html"));if(!await X.exists())return new Response("kobe web assets not built \u2014 run `bun --filter kobe-web build`",{status:503});return new Response(X)}function ak(J){let{link:z,sseSends:Y,staticDir:G}=J,X=J.tearDownSession??((Z)=>void cK(Z));return async function(Q){let f=new URL(Q.url);if(f.pathname===_K)return new Response(aK);if(!A6(Q.headers.get("origin"),{allowedHost:J.allowedHost}))return new Response("forbidden: cross-origin request rejected",{status:403});if(f.pathname==="/events")return xk((A)=>{let O=J.onSseOpen?.()??(()=>{});return A("snapshot",z.snapshot()),Y.add(A),()=>{Y.delete(A),O()}});if(f.pathname==="/api/rpc"&&Q.method==="POST")return Ek(Q,z,X);if(f.pathname==="/api/session"&&Q.method==="POST")return ik(Q,z);if(f.pathname==="/api/engine-spec"&&Q.method==="GET")return iK(f,z,vK);if(f.pathname==="/api/terminal-spec"&&Q.method==="GET")return iK(f,z,mK);if(f.pathname==="/api/engines"&&Q.method==="GET")return wk();if(f.pathname==="/api/cli-invocation"&&Q.method==="GET")return Pk();if(f.pathname==="/api/projects"&&Q.method==="GET")return hk();if(f.pathname==="/api/settings"&&Q.method==="GET")return sK();if(f.pathname==="/api/settings"&&Q.method==="PATCH")return nk(Q);if(f.pathname==="/api/quick-prompts"&&Q.method==="GET")return tK();if(f.pathname==="/api/quick-prompts"&&Q.method==="PUT")return lk(Q);let H=await H6(Q,f);if(H)return H;let B=await e5(Q,f);if(B)return B;let V=await G6(Q,f);if(V)return V;let j=await M6(Q,f,z);if(j)return j;let K=await K6(Q,f);if(K)return K;let L=j6(Q,f);if(L)return L;if(G)return $k(f.pathname,G);return new Response("not found",{status:404})}}function xG(J,z){let Y=J.snapshot().find((G)=>G.channel===z);return Y?Y.payload:null}function Vj(J){return J.length>1?J.replace(/\/+$/,""):J}function _k(J,z){let Y=Vj(z),G=new Set([z]);for(let X of J){let Z=Vj(X.repo),Q=Vj(X.worktreePath);if(Z===Y||Q===Y){if(X.repo)G.add(X.repo);if(X.worktreePath)G.add(X.worktreePath)}}return[...G]}function eK(J){let z=yZ();return{async request(Y,G){return await IZ(z,Y,G,J.ctx(0))},snapshot(){let Y=J.orch.listTasks().map(Xz),G={},X=xG(J.bus,"issue.snapshot");if(X)for(let f of _k(Y,X.repoRoot))G[f]={...X,repoRoot:f};let Z=xG(J.bus,"task.jobs"),Q=Z?.phase==="running"?{[Z.taskId]:Z}:{};return{tasks:Y,activeTaskId:xG(J.bus,"active-task")?.taskId??null,engineStates:J.activity.snapshotByTask(),update:xG(J.bus,"update")?.info??null,jobs:Q,worktreeChanges:xG(J.bus,"worktree.changes")?.changes??{},issueSnapshots:G,deliver:xG(J.bus,"session.deliver"),uiPrefs:xG(J.bus,"ui-prefs"),connected:!0}}}}async function lK(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((G)=>Number.parseInt(G.trim(),10)).filter((G)=>Number.isFinite(G)&&G!==process.pid)}catch{return[]}}async function pk(J,z=_K){let Y;try{Y=(await(await fetch(`http://localhost:${J}${z}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(Y!==aK)throw Error(`port ${J} is in use by a non-kobe service; refusing to replace it`);let G=await lK(J);for(let Z of G)try{process.kill(Z,"SIGTERM")}catch{}let X=Date.now()+2000;while(Date.now()<X){if((await lK(J)).length===0)return;await new Promise((Z)=>setTimeout(Z,100))}}async function JU(J){if(J.takeover!==!1)await pk(J.port);let z=new Set,Y=J.onEvent((f)=>{for(let H of z)H("channel",f)}),G=J.hostname?.trim()||process.env.KOBE_WEB_HOST?.trim()||"127.0.0.1",X=R6(G),Z=ak({link:J.link,sseSends:z,staticDir:J.staticDir?$K(J.staticDir):void 0,allowedHost:X,onSseOpen:J.onSseOpen}),Q=Bun.serve({port:J.port,hostname:G,idleTimeout:0,fetch:Z});return{port:Q.port??J.port,hostname:G,close(){Y(),Q.stop(!0)}}}var aK="kobe-web",_K="/__kobe_web",pK,rK,yf;var zU=k(()=>{QG();hJ();SY();SZ();mq();O1();YG();iq();t1();J6();X6();B6();W6();Sq();GG();U6();g6();N6();dK();pK=["primary","success","info"],rK=/^[a-z][a-z0-9_-]{0,47}$/;yf={review:"boardPrompt.review",pr:"boardPrompt.pr"}});function YU(J){return J>="0"&&J<="7"}function XU(J,z){let Y=[],G="",X=()=>{if(G.length>0){for(let Q of rk.encode(G))Y.push(Q);G=""}},Z=z+1;while(Z<J.length){let Q=J[Z];if(Q==='"'){Z++;break}if(Q==="\\"){let f=J[Z+1];if(f===void 0){G+="\\",Z++;continue}switch(f){case"a":X(),Y.push(7),Z+=2;break;case"b":X(),Y.push(8),Z+=2;break;case"t":X(),Y.push(9),Z+=2;break;case"n":X(),Y.push(10),Z+=2;break;case"v":X(),Y.push(11),Z+=2;break;case"f":X(),Y.push(12),Z+=2;break;case"r":X(),Y.push(13),Z+=2;break;case'"':G+='"',Z+=2;break;case"\\":G+="\\",Z+=2;break;default:if(YU(f)){let H="",B=Z+1;while(B<J.length&&H.length<3&&YU(J[B]))H+=J[B],B++;X(),Y.push(Number.parseInt(H,8)&255),Z=B}else G+=f,Z+=2;break}}else G+=Q,Z++}return X(),{value:ok.decode(new Uint8Array(Y)),end:Z}}function Tf(J){if(J.length===0||J[0]!=='"')return J;return XU(J,0).value}function ZU(J,z){if(J[0]==='"'){let G=XU(J,0);if(J.startsWith(z,G.end))return{orig:G.value,neu:Tf(J.slice(G.end+z.length))};return null}let Y=J.indexOf(z);if(Y<0)return null;return{orig:J.slice(0,Y),neu:Tf(J.slice(Y+z.length))}}function sk(J){let z=J.indexOf("{");if(z>=0){let G=J.indexOf("}",z),X=J.indexOf(" => ",z);if(G>z&&X>=0&&X<G){let Z=J.slice(0,z),Q=J.slice(z+1,X),f=J.slice(X+4,G),H=J.slice(G+1);return{path:Z+f+H,origPath:Z+Q+H}}}let Y=ZU(J," => ");if(Y)return{path:Y.neu,origPath:Y.orig};return{path:Tf(J)}}function uf(J){let z=[];for(let Y of J.split(`
|
|
79
|
+
`)){let G=Y.replace(/\r$/,"");if(G.length<4)continue;if(G.startsWith("##"))continue;let X=G[0],Z=G[1];if(G[2]!==" ")continue;let Q=G.slice(3);if(X==="R"||X==="C"||Z==="R"||Z==="C"){let f=ZU(Q," -> ");if(f){z.push({x:X,y:Z,path:f.neu,origPath:f.orig});continue}}z.push({x:X,y:Z,path:Tf(Q)})}return z}function GU(J){if(J==="-")return null;let z=Number.parseInt(J,10);return Number.isNaN(z)?null:z}function QU(J){let z=[];for(let Y of J.split(`
|
|
80
|
+
`)){let G=Y.replace(/\r$/,"");if(G.length===0)continue;let X=G.indexOf("\t");if(X<0)continue;let Z=G.indexOf("\t",X+1);if(Z<0)continue;let Q=G.slice(Z+1);if(Q.length===0)continue;let f=sk(Q);if(f.path.length===0)continue;z.push({path:f.path,...f.origPath!==void 0?{origPath:f.origPath}:{},added:GU(G.slice(0,X)),deleted:GU(G.slice(X+1,Z))})}return z}var rk,ok;var Kj=k(()=>{rk=new TextEncoder,ok=new TextDecoder});var qU={};j1(qU,{sameWorktreeChanges:()=>wz,readWorktreeChanges:()=>ek,pickPushedChanges:()=>Ef,parsePorcelain:()=>TX});import{spawnSync as tk}from"child_process";function wz(J,z){return J.added===z.added&&J.deleted===z.deleted}function Ef(J,z){if(!J)return null;return J.get(z)??xf}function ek(J){if(!J)return xf;try{let z=tk("git",["status","--porcelain=v1"],{cwd:J,encoding:"utf8",stdio:["ignore","pipe","pipe"],env:vJ()});if(z.status!==0||!z.stdout)return xf;return TX(z.stdout)}catch{return xf}}function TX(J){let z=0,Y=0;for(let{x:G,y:X}of uf(J))if(G==="D"||X==="D")Y+=1;else z+=1;return{added:z,deleted:Y}}var xf;var uX=k(()=>{wY();Kj();xf={added:0,deleted:0}});async function Gb(J,z){let Y=await GY("git",["status","--porcelain=v1"],{cwd:J,env:vJ(),signal:z});if(Y.status!==0)throw Error("git status failed");return TX(Y.stdout)}function Xb(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 fU{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=Xb(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:Jb,slowRetryMs:zb,minIntervalMs:Yb},G=this.options.run??Gb;zX(z,Y,(X)=>G(J,X),(X)=>{if(this.stopped)return;if(this.entries.get(J)!==z)return;if(z.value&&wz(z.value,X))return;z.value=X,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 HU(J,z,Y=Uj,G){if(Y<=0)return()=>{};let X=new fU(J,z,{hasSubscribers:G});X.tick();let Z=setInterval(()=>X.tick(),Y);return Z.unref?.(),()=>{clearInterval(Z),X.stop()}}var Uj=2000,Jb=4000,zb=60000,Yb=1500;var BU=k(()=>{wY();YX();O1();uX()});import{mkdir as jU,readFile as Zb,unlink as Dj,writeFile as Qb}from"fs/promises";import{createServer as qb}from"net";import{dirname as WU}from"path";import{StringDecoder as fb}from"string_decoder";function Bb(){let J=process.env.KOBE_DAEMON_IDLE_GRACE_MS;if(J===void 0)return VU;let z=Number(J);return Number.isFinite(z)&&z>=0?z:VU}async function UU(J,z={}){let Y=z.socketPath??kz(z.homeDir),G=z.pidPath??oz(z.homeDir),X=z.startedAt??new Date,Z=new Set,Q=new Set,f=1,H=new TB({clients:function*(){yield*Z,yield*Q},idleGraceMs:Bb(),onIdleStop:()=>void q0().catch((h)=>I1("daemon-idle-shutdown",h))}),B=new ZB;B.onPublish((h)=>{KU(Z,{type:"event",name:h.channel,payload:h.payload})});let j=new I8(B,void 0,void 0,async(h)=>{let C=J.getTask(h);if(!C?.worktreePath)return;return oG(C.vendor??n1,C.worktreePath)}),K=new Tq(yq(z.homeDir));await jU(WU(Y),{recursive:!0}),await jU(WU(G),{recursive:!0}),await Dj(Y).catch(()=>{});let L=qb((h)=>{let C={id:f++,connectedAt:new Date,socket:h,writer:new XB(h),buffer:"",subscribed:!1,holdsLifetime:!1,channels:null};Z.add(C);let o=new fb("utf8");h.on("data",(E)=>{C.buffer+=o.write(E),t(C)}),h.on("error",()=>{}),h.on("close",()=>{if(Z.delete(C),C.subscribed)xz("conn",`client #${C.id} (${C.holdsLifetime?"gui":"pane"}) disconnected \u2014 ${Z.size} client(s), ${H.guiCount()} gui left`);H.clientDisconnected(C.holdsLifetime)})}),A=J.subscribeTasks((h)=>{B.publish("task.snapshot",{tasks:h.map(Xz)})}),O=z.checkUpdate??zZ,g=z.updatePollMs??Hb,x=()=>{O().then((h)=>B.publish("update",{info:h})).catch((h)=>I1("update-poller",h))},_=null;if(g>0)x(),_=setInterval(x,g),_.unref?.();let S=z.autoTitlePollMs??GB,N=eV(J,S,()=>H.hasSubscribers()),M=p5(B,{statePath:EB(z.homeDir),debounceMs:z.uiPrefsDebounceMs??xB}),I=m5(B,{path:yB(z.homeDir),debounceMs:z.keybindingsDebounceMs??IB}),r=HU(J,B,z.worktreeChangesTickMs??Uj,()=>H.hasSubscribers()),l=$5(J,B,z.transcriptActivityTickMs??uB,()=>H.hasSubscribers()),e=n5(J,z.prStatusPollMs??xZ,()=>H.hasSubscribers()),J0=null,T={socketPath:Y,pidPath:G,startedAt:X,get webPort(){return J0?.port},clients:Z,async close(){if(H.markStopping(),A(),J0?.close(),J0=null,_)clearInterval(_);N(),e(),M(),I(),r(),l(),j.close(),KU(Z,{type:"event",name:"daemon.stopping",payload:{}});for(let h of Array.from(Z))h.socket.destroy();await new Promise((h)=>L.close(()=>h())),await Dj(Y).catch(()=>{}),await Dj(G).catch(()=>{})}};await new Promise((h,C)=>{let o=L;o.once("error",C),L.listen(Y,()=>{o.removeListener("error",C),h()})}),await Qb(G,`${process.pid}
|
|
81
|
+
`,"utf8");async function q0(){if(H.isStopping())return;H.markStopping(),await z.onStop?.(),setTimeout(()=>{T.close().catch((h)=>I1("daemon-shutdown",h))},0).unref()}let p=yZ();function j0(h){return{orch:J,bus:B,activity:j,issues:K,daemon:{startedAt:X,socketPath:Y,webPort:J0?.port,pid:process.pid,guiCount:()=>H.guiCount(),stopSoon:q0},clientId:h}}if(z.webPort!==void 0){let h=eK({orch:J,bus:B,activity:j,ctx:j0});J0=await JU({port:z.webPort,hostname:z.webHost,staticDir:z.webStaticDir,link:h,onEvent:(C)=>B.onPublish(C),onSseOpen:()=>{let C={subscribed:!0,holdsLifetime:!0};return Q.add(C),H.guiAttached(),xz("conn",`web client subscribed \u2014 ${Z.size+Q.size} client(s), ${H.guiCount()} gui`),()=>{Q.delete(C),xz("conn",`web client disconnected \u2014 ${Z.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 F0(h,C){if(h.name==="subscribe"){let o=BB(h.payload),E=C.subscribed;C.subscribed=!0;let c=o.role==="gui"?"gui":"pane";C.holdsLifetime=c==="gui",C.channels=nW(o.channels);let s=!E;if(C.holdsLifetime)H.guiAttached();xz("conn",`client #${C.id} subscribed as ${c}${C.channels?` [${[...C.channels].join(",")}]`:""} \u2014 ${Z.size} client(s), ${H.guiCount()} gui${s?" (collectors resume)":""}`);for(let Z0 of B.snapshot()){if(C.channels&&!C.channels.has(Z0.channel))continue;lZ(C,{type:"event",name:Z0.channel,payload:Z0.payload})}if(!C.channels||C.channels.has("engine-state"))for(let Z0 of j.currentNonIdle())lZ(C,{type:"event",name:"engine-state",payload:Z0});return{}}return IZ(p,h.name,h.payload,j0(C.id))}async function V0(h,C){try{let o=await F0(h,C);lZ(C,{type:"response",id:h.id,name:h.name,payload:o})}catch(o){lZ(C,{type:"response",id:h.id,name:h.name,error:HB(o)})}}function t(h){let C=h.buffer.indexOf(`
|
|
82
|
+
`);while(C!==-1){let o=h.buffer.slice(0,C);if(h.buffer=h.buffer.slice(C+1),o.trim().length>0)try{let E=JSON.parse(o);if(E.type!=="request")throw Error("daemon only accepts request frames from clients");V0(E,h)}catch(E){lZ(h,{type:"response",id:"parse-error",error:{message:E instanceof Error?E.message:String(E)}})}C=h.buffer.indexOf(`
|
|
83
|
+
`)}}return T}async function xX(J){try{let z=await Zb(J,"utf8"),Y=Number(z.trim());return Number.isFinite(Y)?Y:null}catch{return null}}function DU(J){if(J.type==="event")return J.name==="daemon.stopping";return!0}function lZ(J,z){J.writer.write(GZ(z),DU(z))}function KU(J,z){let Y=z.type==="event"&&z.name!=="daemon.stopping"?z.name:null,G=DU(z),X=null;for(let Z of J){if(!Z.subscribed&&z.type==="event")continue;if(Y&&Z.channels&&!Z.channels.has(Y))continue;X??=GZ(z),Z.writer.write(X,G)}}var Hb=21600000,VU=3000;var wf=k(()=>{Xq();pJ();FJ();GV();J5();Sq();LB();c5();d5();lG();i5();GG();a5();r5();zU();BU();Sq();LB()});import{unlink as LU}from"fs/promises";function jb(J){try{return process.kill(J,0),!0}catch(z){return z.code==="EPERM"}}async function EX(J,z){let Y=await xX(z),G=Y!==null&&Y!==process.pid?Y:null,X=G!==null&&jb(G),Z=X?"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(),X&&G!==null){let B=Date.now()+5000,V=!1;while(Date.now()<B){try{process.kill(G,0)}catch{break}if(!V&&Date.now()-(B-5000)>2000){try{process.kill(G,"SIGTERM")}catch{}Z="sigterm",V=!0}await new Promise((j)=>setTimeout(j,50))}try{process.kill(G,0),process.kill(G,"SIGKILL"),Z="sigkill",await new Promise((j)=>setTimeout(j,100))}catch{}}return await LU(J).catch(()=>{}),await LU(z).catch(()=>{}),{pid:Y,method:Z}}var Pf=k(()=>{XZ();wf()});var bf={};j1(bf,{testDaemonResponds:()=>hf,ensureDaemonReachable:()=>wX,connectOrStartDaemon:()=>Fz,connectIfRunning:()=>eJ});import{spawn as Wb}from"child_process";import{closeSync as Vb,existsSync as Kb,mkdirSync as Ub,openSync as Db}from"fs";import{dirname as MU,resolve as Lj}from"path";import{fileURLToPath as Lb}from"url";function Ob(J,z,Y,G){let X="ignore",Z;try{Ub(MU(G),{recursive:!0}),Z=Db(G,"a"),X=["ignore",Z,Z]}catch{X="ignore"}if(Wb(J,[...z],{detached:!0,stdio:X,env:Y}).unref(),Z!==void 0)try{Vb(Z)}catch{}}async function wX(){let J=kz();if(await hf(J))return J;await EX(J,oz()).catch(()=>{});let[z,...Y]=Ab(Mb);Ob(z,Y,process.env,PQ());let G=Date.now()+5000;while(Date.now()<G){if(await hf(J))return J;await new Promise((X)=>setTimeout(X,100))}throw Error(`kobe: daemon did not start (or stayed wedged) at ${J}`)}async function Fz(){let J=await wX(),z=new $J(J);return await z.connect(),z}async function eJ(){let J=kz();if(!await hf(J))return null;let z=new $J(J);return await z.connect(),z}async function hf(J,z=Fb){let Y=new $J(J);try{await Y.connect()}catch{return Y.close(),!1}let G=Y.request("hello",{protocolVersion:lJ}).then(()=>!0).catch(()=>!0),X,Z=new Promise((f)=>{X=setTimeout(()=>f(!1),z)}),Q=await Promise.race([G,Z]);if(X)clearTimeout(X);return Y.close(),Q}function Ab(J){let z=Lb(import.meta.url);if(z.startsWith("/$bunfs")||z.startsWith("B:\\~BUN"))return[process.execPath,...J];let Y=MU(z),G=[Lj(Y,"../cli/index.ts"),Lj(Y,"../../../kobe/src/cli/index.ts"),Lj(Y,"../cli/index.js")],X=G.find((Z)=>Kb(Z));if(X)return[process.execPath,X,...J];throw Error(`kobe: could not locate kobe entry near ${Y}; checked ${G.join(", ")}`)}var Mb,Fb=3000;var AJ=k(()=>{Pf();lG();GG();XZ();Mb=["daemon","start"]});import{mkdir as Rb,readFile as FU,unlink as AU,writeFile as OU}from"fs/promises";import{dirname as gb}from"path";function Cb(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 Mj(J,z={}){await Rb(gb(J),{recursive:!0});try{await OU(J,String(process.pid),{flag:"wx"});return}catch(X){if(X.code!=="EEXIST")throw X}let Y=-1;try{let X=(await FU(J,"utf8")).trim();if(Y=Number.parseInt(X,10),!Number.isFinite(Y))Y=-1}catch{return Mj(J,z)}let G=Y>0&&Cb(Y);if(G&&!z.forceTakeover)throw new $Z(`task index is locked by another kobe instance (pid ${Y})`,Y);console.warn(`[kobe] removing stale lockfile at ${J} (was held by pid ${Y}${G?", forced":", process gone"})`);try{await AU(J)}catch(X){if(X.code!=="ENOENT")throw X}try{await OU(J,String(process.pid),{flag:"wx"})}catch(X){if(X.code==="EEXIST"){let Z=-1;try{Z=Number.parseInt((await FU(J,"utf8")).trim(),10)}catch{Z=-1}throw new $Z(`task index lockfile contended during takeover (winner pid ${Z})`,Z)}throw X}}async function RU(J){try{await AU(J)}catch(z){if(z.code==="ENOENT")return;throw z}}var $Z;var gU=k(()=>{$Z=class $Z extends Error{heldByPid;constructor(J,z){super(J);this.name="LockfileError",this.heldByPid=z}}});function Nb(J,z){let Y="",G=J;for(let X=z-1;X>=0;X--){let Z=G%32;Y="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[Z]+Y,G=(G-Z)/32}return Y}function kU(J){let z=new Uint8Array(J);crypto.getRandomValues(z);let Y=Array(J);for(let G=0;G<J;G++)Y[G]=(z[G]??0)&31;return Y}function kb(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 bb(J){let z="";for(let Y of J)z+="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[Y]??"0";return z}function bU(J=Date.now()){let z;if(J===CU){let Y=NU.slice();if(!kb(Y))z=kU(16);else z=Y}else z=kU(16);return CU=J,NU=z,Nb(J,10)+bb(z)}var CU=-1,NU;var SU=k(()=>{NU=Array(16).fill(0)});var Fj={};j1(Fj,{TaskIndexStore:()=>PX});import{mkdir as Sb,open as Ib,readFile as IU,rename as yb,unlink as yU}from"fs/promises";import{homedir as Tb}from"os";import{dirname as ub,join as TU}from"path";async function Pb(J){let z=Date.now()+wb;for(;;)try{await Mj(J);return}catch(Y){if(!(Y instanceof $Z)||Date.now()>=z)throw Y;await xb(Eb)}}class PX{homeDir;kobeDir;path;tmpPath;lockPath;cache={version:BY,tasks:[]};loaded=!1;listeners=new Set;saveChain=Promise.resolve();dirtyIds=new Set;removedIds=new Set;constructor(J={}){this.homeDir=J.homeDir??Tb(),this.kobeDir=TU(this.homeDir,".kobe"),this.path=TU(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 IU(this.path,"utf8")}catch(Y){if(Y.code==="ENOENT")return this.cache={version:BY,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:BY,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot()}return this.cache=uU(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 Sb(ub(this.path),{recursive:!0});let J=new Set(this.dirtyIds),z=new Set(this.removedIds);await Pb(this.lockPath);try{let Y=await this.readDiskTasks(),G=this.mergeWithDisk(Y,J,z),Z=`${JSON.stringify({version:BY,tasks:G},null,2)}
|
|
84
|
+
`,Q=await Ib(this.tmpPath,"w",420);try{await Q.writeFile(Z,"utf8"),await Q.sync()}finally{await Q.close()}await yb(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 G)if(!f.has(H.id))this.cache.tasks.push(H)}finally{await RU(this.lockPath)}}async readDiskTasks(){let J;try{J=await IU(this.path,"utf8")}catch(Y){if(Y.code==="ENOENT")return[];throw Y}let z;try{z=JSON.parse(J)}catch{return[]}return uU(z,this.path).tasks}mergeWithDisk(J,z,Y){let G=new Map(J.map((Q)=>[Q.id,Q])),X=[],Z=new Set;for(let Q of this.cache.tasks){if(z.has(Q.id))X.push(Q);else{let f=G.get(Q.id);if(f===void 0)continue;X.push(f)}Z.add(Q.id)}for(let Q of J){if(Z.has(Q.id)||Y.has(Q.id))continue;X.push(Q),Z.add(Q.id)}return X}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??n1,...J,id:KZ(bU()),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 G=this.cache.tasks[Y];if(!G)throw Error(`task not found: ${J}`);let{id:X,createdAt:Z,...Q}=z,f={...G,...Q,id:G.id,createdAt:G.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 G=this.cache.tasks.find((L)=>L.id===J);if(!G)throw Error(`task not found: ${J}`);let X=Y?.length?Y:this.cache.tasks.map((L)=>L.id),Z=X.indexOf(String(J));if(Z<0)throw Error(`task not movable in current group: ${J}`);let Q=X[Z+z];if(!Q)return G;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 G;let[B]=this.cache.tasks.splice(f,1);if(!B)return G;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((Z)=>{let Q=this.cache.tasks.findIndex((H)=>H.id===Z.id);if(!(Q>=0?this.cache.tasks[Q]:void 0))throw Error(`task not found: ${Z.id}`);return{idx:Q,position:Z.position}}),Y=!1,G=new Map,X=[];for(let{idx:Z,position:Q}of z){let f=this.cache.tasks[Z];if(!f||f.position===Q)continue;if(!G.has(Z))G.set(Z,f);if(this.cache.tasks[Z]={...f,position:Q},!this.dirtyIds.has(f.id))this.dirtyIds.add(f.id),X.push(f.id);Y=!0}if(!Y)return;try{await this.save()}catch(Z){for(let[Q,f]of G)this.cache.tasks[Q]=f;for(let Q of X)this.dirtyIds.delete(Q);throw Z}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 yU(this.path)}catch(J){if(J.code!=="ENOENT")throw J}try{await yU(this.tmpPath)}catch(J){if(J.code!=="ENOENT")throw J}this.cache={version:BY,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:BY,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 uU(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:BY,tasks:[]};let Y=J,G=Y.version;if(G!==void 0&&G!==1&&G!==2&&G!==3)return console.warn(`[kobe] tasks.json at ${z} has unsupported version=${String(G)}; recovering with empty index.`),{version:BY,tasks:[]};let X=Array.isArray(Y.tasks)?Y.tasks:[],Z=[];for(let Q of X){let f=hb(Q);if(f)Z.push(f);else console.warn(`[kobe] dropping malformed task entry from ${z}: ${JSON.stringify(Q)}`)}return{version:BY,tasks:Z}}function hb(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(!nb(z.status))return null;let Y=typeof z.archived==="boolean"?z.archived:!1,G=z.kind==="main"?"main":"task",X=G==="main"?z.status==="in_progress"||z.status==="done"?"backlog":z.status:z.status==="done"&&!Y?"in_progress":z.status;return{id:KZ(z.id),title:z.title,repo:z.repo,branch:z.branch,worktreePath:z.worktreePath,status:X,archived:Y,pinned:typeof z.pinned==="boolean"?z.pinned:!1,kind:G,vendor:tY(typeof z.vendor==="string"?z.vendor:void 0),prStatus:vb(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 vb(J){if(!J||typeof J!=="object"||Array.isArray(J))return;let z=J;if(!mb(z.provider)||!cb(z.lifecycle)||!db(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 mb(J){return J==="github"||J==="gitlab"||J==="bitbucket"||J==="unknown"}function cb(J){return J==="creating"||J==="open"||J==="ready_to_merge"||J==="merged"||J==="closed"||J==="unknown"}function db(J){return J==="none"||J==="pending"||J==="passing"||J==="failing"||J==="unknown"}function nb(J){return J==="backlog"||J==="in_progress"||J==="in_review"||J==="done"||J==="canceled"||J==="error"}var xb=(J)=>new Promise((z)=>setTimeout(z,J)),Eb=25,wb=5000,BY=3;var aZ=k(()=>{pJ();t1();gU();SU()});var vf;var xU=k(()=>{vf=class vf 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 PU={};j1(PU,{GitWorktreeManager:()=>mf});import wU from"fs";import Oz from"path";class mf{execDeps;constructor(J=ib){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 G=await J.run(["git",...z],{cwd:Y.cwd,env:Y.env}),X={stdout:G.stdout,stderr:G.stderr,exitCode:G.exitCode};if(X.exitCode!==0&&!Y.allowFail)throw new vf(z,Y.cwd,X);return X}async create(J,z,Y,G){let X=this.ctxFor(J);if(nY("repo",X.dir),nY("path",Y),!z)throw Error("create(): branch must be a non-empty string");if(await X.exec.exists(Y)){let H=await this.tryDescribe(X,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 X.exec.mkdirp(Oz.dirname(Y));let Q=await this.branchExists(X,z)?["worktree","add",Y,z]:G?["worktree","add","-b",z,Y,G]:["worktree","add","-b",z,Y];await this.runGit(X.exec,Q,{cwd:X.dir});let f=await this.tryDescribe(X,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?mV(z,J.slug):wV(J.repo,J.slug);return this.create(J.repo,J.branch,Y,J.baseRef)}async remove(J,z){nY("path",J);let Y=this.execDeps.execForPath(J),G=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 X=await this.findRepoFor(Y,J);if(!X)throw Error(`remove(): ${J} is not a git worktree`);if(!G){if(await this.isDirty(J))throw Error(`remove(): refusing to remove dirty worktree at ${J} (pass { force: true } to override)`)}let Z=G?["worktree","remove","--force",J]:["worktree","remove",J];await this.runGit(Y,Z,{cwd:X}),await this.runGit(Y,["worktree","prune"],{cwd:X,allowFail:!0})}async list(J){let z=this.ctxFor(J);nY("repo",z.dir);let Y=await this.runGit(z.exec,["worktree","list","--porcelain"],{cwd:z.dir}),G=Oj(Y.stdout),X=[];for(let Z of G){if(!Z.path)continue;let Q=z.remote?EU(z.dir,Z.path):a8(J,Z.path);if(!Q)continue;if(!Z.branch||Z.detached)continue;let f=_Z(Q),H=_Z(Z.path),B=Oz.relative(f,H),V=Oz.join(Q,B),j=await this.isDirty(Z.path);X.push({path:V,branch:Z.branch,head:Z.head??"",dirty:j})}return X}async listAll(J){let z=this.ctxFor(J);nY("repo",z.dir);let Y=await this.runGit(z.exec,["worktree","list","--porcelain"],{cwd:z.dir}),G=Oj(Y.stdout),X=z.remote?z.dir:_Z(z.dir),Z=[];for(let Q of G){if(!Q.path)continue;if(Q.bare)continue;if(!Q.branch||Q.detached)continue;if((z.remote?Q.path:_Z(Q.path))===X)continue;let f=await this.isDirty(Q.path);Z.push({path:Q.path,branch:Q.branch,head:Q.head??"",dirty:f,kobeManaged:z.remote?EU(z.dir,Q.path)!==null:hV(J,Q.path),lastActivityMs:await this.lastActivityMs(z.exec,Q.path)})}return Z.sort((Q,f)=>f.lastActivityMs-Q.lastActivityMs),Z}async lastActivityMs(J,z){try{let Y=await this.runGit(J,["log","-1","--format=%ct"],{cwd:z}),G=Number.parseInt(Y.stdout.trim(),10);if(Number.isFinite(G)&&G>0)return G*1000}catch{}if(!J.isRemote)try{return wU.statSync(z).mtimeMs}catch{}return 0}async isDirty(J){nY("path",J);let z=this.execDeps.execForPath(J);return(await this.runGit(z,["status","--porcelain"],{cwd:J})).stdout.length>0}async currentBranch(J){nY("path",J);let z=this.execDeps.execForPath(J),G=(await this.runGit(z,["rev-parse","--abbrev-ref","HEAD"],{cwd:J})).stdout.trim();if(!G||G==="HEAD")throw Error(`currentBranch(): ${J} is in detached-HEAD state`);return G}async renameBranch(J,z,Y){if(nY("path",J),z===Y)return;let G=this.execDeps.execForPath(J),X=await this.findRepoFor(G,J);if(!X)throw Error(`renameBranch(): ${J} is not a git worktree`);await this.runGit(G,["branch","-m",z,Y],{cwd:X})}async tryDescribe(J,z){let Y=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),G=Oj(Y.stdout),X=(f)=>J.remote?f:_Z(f),Z=X(z),Q=G.find((f)=>f.path&&X(f.path)===Z);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 G=Y.stdout.trim();if(!G)return null;let X=Oz.isAbsolute(G)?G:Oz.resolve(z,G);return Oz.basename(X)===".git"?Oz.dirname(X):X}catch(Y){if(Y instanceof vf)return null;throw Y}}}function Oj(J){let z=[],Y=null;for(let G of J.split(`
|
|
85
|
+
`)){let X=G.replace(/\r$/,"");if(X===""){if(Y)z.push(Y);Y=null;continue}if(!Y)Y={};if(X.startsWith("worktree "))Y.path=X.slice(9);else if(X.startsWith("HEAD "))Y.head=X.slice(5);else if(X.startsWith("branch ")){let Z=X.slice(7);Y.branch=Z.startsWith("refs/heads/")?Z.slice(11):Z}else if(X==="detached")Y.detached=!0;else if(X==="bare")Y.bare=!0}if(Y)z.push(Y);return z}function EU(J,z){let Y=`${J.replace(/\/+$/,"")}/.kobe/worktrees`;return z===Y||z.startsWith(`${Y}/`)?Y:null}function nY(J,z){if(!z||!Oz.isAbsolute(z))throw Error(`${J} must be an absolute path, got: ${JSON.stringify(z)}`)}function _Z(J){try{return wU.realpathSync(J)}catch{return Oz.resolve(J)}}var ib;var Aj=k(()=>{jz();O1();xU();_8();ib={execForRepo:GX,execForPath:XY,remoteBasePath(J){return pz(J)?.basePath??null}}});var cf;var hU=k(()=>{cf=["web","completions","add","remove","adopt","export","repo","api","daemon","theme","skill","feedback","update","doctor","reset","reload","kill-sessions"]});var mU={};j1(mU,{runCompletionsSubcommand:()=>_b});function lb(){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="${
|
|
93
|
+
opts="${cf.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
|
|
101
|
+
`}function $b(){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=(${
|
|
107
|
+
subcommands=(${cf.map((z)=>`"${z}"`).join(" ")})
|
|
108
108
|
|
|
109
109
|
_arguments "1:subcommand:(\${subcommands})"
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
_kobe "$@"
|
|
113
|
-
`}function
|
|
113
|
+
`}function ab(){return`# kobe fish completions
|
|
114
114
|
# Source: kobe completions fish
|
|
115
115
|
|
|
116
|
-
${
|
|
116
|
+
${cf.map((z)=>`complete -c kobe -f -a ${z}`).join(`
|
|
117
117
|
`)}
|
|
118
|
-
`}async function
|
|
118
|
+
`}async function _b(J){let z=J[0];if(z==="--help"||z==="-h"||z==="help"){process.stdout.write(vU);return}if(!z||z!=="bash"&&z!=="zsh"&&z!=="fish")process.stderr.write(`kobe completions: unknown shell "${z}"
|
|
119
119
|
|
|
120
|
-
${
|
|
120
|
+
${vU}`),process.exit(2);let Y;if(z==="bash")Y=lb();else if(z==="zsh")Y=$b();else Y=ab();process.stdout.write(Y)}var vU=`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
|
|
125
|
-
|
|
126
|
-
${
|
|
127
|
-
`),process.exit(2)}function
|
|
128
|
-
`)}function
|
|
129
|
-
`)}function
|
|
130
|
-
`);return}let z=
|
|
131
|
-
`);return}process.stdout.write(`${
|
|
132
|
-
`)}var
|
|
133
|
-
`)
|
|
134
|
-
|
|
135
|
-
${
|
|
136
|
-
`),process.exit(2)}function
|
|
137
|
-
`);return}let{getRepoInitOverride:
|
|
138
|
-
`)});import{spawnSync as
|
|
124
|
+
`;var cU=k(()=>{hU()});var lU={};j1(lU,{runExportSubcommand:()=>zS,renderExport:()=>iU,displayWidth:()=>df});function pb(J){return{id:J.id,title:J.title,status:J.status,archived:String(J.archived),vendor:J.vendor??n1,branch:J.branch,repo:J.repo,worktreePath:J.worktreePath}}function Rj(J){process.stderr.write(`kobe export: ${J}
|
|
125
|
+
|
|
126
|
+
${nU}
|
|
127
|
+
`),process.exit(2)}function rb(J){let z="json";for(let Y=0;Y<J.length;Y++){let G=J[Y];if(G==="--json")z="json";else if(G==="--csv")z="csv";else if(G==="--format"){let X=J[++Y];if(X===void 0)Rj("--format requires a value (json, csv, or table)");z=dU(X)}else if(G.startsWith("--format="))z=dU(G.slice(9));else Rj(`unexpected argument "${G}"`)}return z}function dU(J){if(J==="json"||J==="csv"||J==="table")return J;Rj(`unknown format "${J}" (expected json, csv, or table)`)}function ob(J){if(/[",\r\n]/.test(J))return`"${J.replace(/"/g,'""')}"`;return J}function sb(J){let z=[pZ.join(",")];for(let Y of J)z.push(pZ.map((G)=>ob(Y[G])).join(","));return z.join(`
|
|
128
|
+
`)}function df(J){let z=0;for(let Y of J)z+=tb(Y.codePointAt(0));return z}function tb(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 eb(J,z){return J+" ".repeat(Math.max(0,z-df(J)))}function JS(J){let z={};for(let X of pZ)z[X]=Math.max(df(X),...J.map((Z)=>df(Z[X])));let Y=(X)=>pZ.map((Z)=>eb(X[Z],z[Z])).join(" ").trimEnd(),G={};for(let X of pZ)G[X]=X;return[Y(G),...J.map(Y)].join(`
|
|
129
|
+
`)}function iU(J,z){let Y=J.map(pb);if(z==="json")return JSON.stringify(Y,null,2);if(z==="csv")return sb(Y);return JS(Y)}async function zS(J){if(J.includes("--help")||J.includes("-h")||J.includes("help")){process.stdout.write(`${nU}
|
|
130
|
+
`);return}let z=rb(J),{TaskIndexStore:Y}=await Promise.resolve().then(() => (aZ(),Fj)),G=new Y;await G.load();let X=G.list();if(X.length===0&&z==="table"){process.stdout.write(`no tasks
|
|
131
|
+
`);return}process.stdout.write(`${iU(X,z)}
|
|
132
|
+
`)}var nU,pZ;var $U=k(()=>{pJ();nU=["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
|
+
`),pZ=["id","title","status","archived","vendor","branch","repo","worktreePath"]});var pU={};j1(pU,{runRepoSubcommand:()=>ZS});import{readFileSync as YS}from"fs";import{resolve as nf}from"path";function iY(J){process.stderr.write(`kobe repo: ${J}
|
|
134
|
+
|
|
135
|
+
${_U}
|
|
136
|
+
`),process.exit(2)}function aU(J){try{return YS(nf(process.cwd(),J),"utf8")}catch(z){iY(`cannot read ${J}: ${z instanceof Error?z.message:String(z)}`)}}function GS(J){let z={};for(let Y=0;Y<J.length;Y++){let G=J[Y],X=()=>{let Z=J[++Y];if(Z===void 0)iY(`${G} requires a value`);return Z};if(G==="--init-script")z.initScript=X();else if(G==="--init-script-file")z.initScript=aU(X());else if(G==="--init-prompt")z.initPrompt=X();else if(G==="--init-prompt-file")z.initPrompt=aU(X());else if(G.startsWith("-"))iY(`unknown flag "${G}"`);else if(z.path===void 0)z.path=G;else iY(`unexpected argument "${G}"`)}return z}function XS(J){let z,Y=!1,G=!1;for(let X of J)if(X==="--init-script")Y=!0;else if(X==="--init-prompt")G=!0;else if(X.startsWith("-"))iY(`unknown flag "${X}"`);else if(z===void 0)z=X;else iY(`unexpected argument "${X}"`);if(!Y&&!G)Y=!0,G=!0;return{path:z,clearScript:Y,clearPrompt:G}}async function ZS(J){let[z,...Y]=J;if(z===void 0||z==="--help"||z==="-h"||z==="help"){process.stdout.write(`${_U}
|
|
137
|
+
`);return}let{getRepoInitOverride:G,setRepoInitOverride:X,resolveRepoRoot:Z}=await Promise.resolve().then(() => (O1(),rz)),{existsSync:Q}=await import("fs"),{join:f}=await import("path");if(z==="show"){let[H]=Y.filter((L)=>!L.startsWith("-")),B=Z(nf(process.cwd(),H??".")),V=G(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?hX(V.initScript):"(unset)"}`),console.log(` override initPrompt: ${V.initPrompt?hX(V.initPrompt):"(unset)"}`);return}if(z==="set"){let H=GS(Y);if(H.initScript===void 0&&H.initPrompt===void 0)iY("set needs at least one of --init-script(-file) / --init-prompt(-file)");let B=Z(nf(process.cwd(),H.path??".")),V=X(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?hX(V.initScript):"(unset)"}`),console.log(` initPrompt: ${V.initPrompt?hX(V.initPrompt):"(unset)"}`);return}if(z==="unset"){let{path:H,clearScript:B,clearPrompt:V}=XS(Y),j=Z(nf(process.cwd(),H??".")),K=X(j,{...B?{initScript:""}:{},...V?{initPrompt:""}:{}});console.log(`cleared override for ${j}`),console.log(` initScript: ${K.initScript?hX(K.initScript):"(unset)"}`),console.log(` initPrompt: ${K.initPrompt?hX(K.initPrompt):"(unset)"}`);return}iY(`unknown verb "${z}"`)}function hX(J){let z=J.replace(/\s+/g," ").trim();return z.length>60?`"${z.slice(0,57)}\u2026"`:`"${z}"`}var _U;var rU=k(()=>{_U=["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 QS}from"child_process";function HS(J){let[z,Y]=J.split("/");if(!z||!Y)throw Error(`invalid GitHub repository slug: ${J}`);return{owner:z,name:Y}}function oU(J,z){let Y=J.trim();if(!Y)throw Error(`${z} is required`);return Y}function sU(J,z){let Y=z?.map((G)=>typeof G.message==="string"?G.message:null).filter((G)=>!!G);if(Y&&Y.length>0)return Y.join("; ");return J.trim()||"GitHub CLI returned an empty response"}function tU(J,z,Y){let G=["api","graphql","-f",`query=${J}`];for(let[H,B]of Object.entries(z))G.push("-f",`${H}=${B}`);let X=Y.spawn("gh",G,{encoding:"utf8"});if(X.error)throw Error(`failed to run gh: ${X.error.message}`);let Z=typeof X.stdout==="string"?X.stdout:String(X.stdout??""),Q=typeof X.stderr==="string"?X.stderr:String(X.stderr??""),f;try{f=JSON.parse(Z)}catch{throw Error(`failed to parse gh response: ${sU(Q,void 0)}`)}if((X.status??0)!==0||f.errors?.length)throw Error(sU(Q,f.errors));if(!f.data)throw Error("GitHub CLI response did not include data");return f.data}function BS(J){return`${J}
|
|
139
139
|
|
|
140
140
|
---
|
|
141
|
-
Submitted from kobe ${
|
|
141
|
+
Submitted from kobe ${o0}.`}function vX(J,z={}){let Y=oU(J.title,"feedback title"),G=BS(oU(J.body,"feedback body")),X=(z.repoSlug??JG)();if(!X)throw Error("package repository is not a GitHub repository");let{owner:Z,name:Q}=HS(X),f=J.categorySlug?.trim()||gj,H={spawn:z.spawn??QS},V=tU(qS,{owner:Z,name:Q},H).repository,j=V?.id;if(!j)throw Error(`GitHub repository not found: ${X}`);let K=V.discussionCategories?.nodes?.find((O)=>O.slug===f);if(!K)throw Error(`GitHub Discussion category not found: ${f}`);let A=tU(fS,{repositoryId:j,categoryId:K.id,title:Y,body:G},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 gj="feedback",qS=`
|
|
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
|
-
`,
|
|
154
|
+
`,fS=`
|
|
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
|
|
169
|
-
`)}function
|
|
170
|
-
`)}function
|
|
171
|
-
`)}function
|
|
172
|
-
`),process.exit(Y)}async function
|
|
173
|
-
`);return}let
|
|
174
|
-
${
|
|
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
|
-
`),
|
|
178
|
-
`))}async function
|
|
179
|
-
`),Y.stdout.write(`running: ${
|
|
180
|
-
`),
|
|
181
|
-
`),Y.exit(1);Y.exit(
|
|
182
|
-
`),process.exit(1)}function
|
|
183
|
-
|
|
184
|
-
`),
|
|
168
|
+
`;var lf=k(()=>{FJ()});async function eU(J={}){let z=J.mode==="require-running"?await eJ():await Fz();if(!z)return null;return{client:z,close:()=>z.close()}}var J4=k(()=>{AJ()});var j4={};j1(j4,{verbSchema:()=>Sj,verbHelp:()=>f4,validateAgainstSpec:()=>kj,schemaIndex:()=>Q4,runApiSubcommand:()=>wS,parseFlags:()=>Nj,parseAgentsSpec:()=>X4,invokeVerb:()=>ES,fullSchema:()=>q4,findVerb:()=>rZ,deliverPrompt:()=>H4,defaultApiRuntime:()=>Ij,apiUsage:()=>$f,VerbArgs:()=>bj,VERB_GROUPS:()=>cX,VERBS:()=>dX,FANOUT_CAP:()=>mX,ApiError:()=>F1,API_VERBS:()=>VS,API_SCHEMA_VERSION:()=>Cj});import{resolve as z4}from"path";function G4(J){for(let[z,Y]of Object.entries(cX))if(Y.includes(J))return z;return"other"}async function WS(J){let z=J.args.str("verb");if(z){let G=rZ(z);if(!G)throw new F1(`unknown verb: ${z}`,"BAD_VERB");return Sj(G)}let Y=J.args.str("group");if(Y)return US(Y);if(J.args.bool("all"))return q4();return Q4()}function rZ(J){let z=af[J]??J;return dX.find((Y)=>Y.name===z)}function Nj(J,z=new Set){let Y=new Map,G=!1,X=!1;for(let Z=0;Z<J.length;Z++){let Q=J[Z];if(!Q.startsWith("--")&&Q!=="-h")throw new F1(`unexpected positional arg: ${Q}`,"BAD_FLAG");if(Q==="-h"){X=!0;continue}let f=Q.indexOf("=");if(f!==-1){let V=Q.slice(2,f),j=Q.slice(f+1);if(V==="pretty")G=j!=="false"&&j!=="0";else if(V==="help")X=j!=="false"&&j!=="0";else Y.set(V,j);continue}let H=Q.slice(2);if(H==="pretty"){G=!0;continue}if(H==="help"){X=!0;continue}if(z.has(H)){Y.set(H,"true");continue}let B=J[Z+1];if(B===void 0||B.startsWith("--"))throw new F1(`flag --${H} requires a value`,"BAD_FLAG");Y.set(H,B),Z+=1}return{flags:Y,pretty:G,help:X}}function kj(J,z){let Y=new Set(J.flags.map((G)=>G.name));for(let G of z.keys())if(!Y.has(G))throw new F1(`unknown flag --${G} for "${J.name}". Run \`kobe api ${J.name} --help\``,"BAD_FLAG");for(let G of J.flags){if(G.required&&!z.get(G.name))throw new F1(`--${G.name} is required for "${J.name}"`,"MISSING_FLAG");if(G.type==="enum"&&G.values){let X=z.get(G.name);if(X!==void 0&&!G.values.includes(X))throw new F1(`--${G.name} must be one of ${G.values.join(", ")}`,"BAD_FLAG")}if(G.type==="int"){let X=z.get(G.name);if(X!==void 0){let Z=Number.parseInt(X,10);if(!Number.isInteger(Z)||Z<=0)throw new F1(`--${G.name} must be a positive integer`,"BAD_FLAG")}}}}class bj{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:z4(process.cwd(),z)}requirePath(J){return z4(process.cwd(),this.require(J))}}function X4(J){let z=[];for(let Y of J.split(",")){let G=Y.trim();if(!G)continue;let X=G.indexOf(":");if(X===-1)throw new F1(`--agents entry "${G}" must be vendor:count`,"BAD_FLAG");let Z=G.slice(0,X);if(!l1.includes(Z))throw new F1(`--agents vendor "${Z}" must be one of ${l1.join(", ")}`,"BAD_FLAG");let Q=Number.parseInt(G.slice(X+1),10);if(!Number.isInteger(Q)||Q<=0)throw new F1(`--agents count for "${Z}" must be a positive integer`,"BAD_FLAG");if(z.length+Q>mX)throw new F1(`--agents requests ${z.length+Q} agents, exceeds the cap of ${mX}`,"BAD_FLAG");for(let f=0;f<Q;f++)z.push(Z)}if(z.length===0)throw new F1('--agents specified no agents (e.g. "claude:2,codex:1")',"BAD_FLAG");return z}function KS(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 Sj(J){return{name:J.name,group:G4(J.name),summary:J.summary,offline:J.offline??!1,flags:J.flags.map(KS)}}function Q4(){return{apiVersion:Cj,kobeVersion:o0,hint:"Compact index. Drill into ONE verb: `kobe api schema --verb <name>` (or `kobe api <verb> --help`). One group: `--group <g>`. Whole spec: `--all`.",groups:cX,verbs:dX.map((J)=>({name:J.name,group:G4(J.name),summary:J.summary})),globalFlags:Z4,aliases:af}}function US(J){let z=cX[J];if(!z)throw new F1(`unknown group: ${J}. Groups: ${Object.keys(cX).join(", ")}`,"BAD_FLAG");return{group:J,verbs:z.map((Y)=>{let G=rZ(Y);return{name:Y,summary:G?.summary??""}})}}function q4(){return{apiVersion:Cj,kobeVersion:o0,output:{success:"one JSON object on stdout, newline-terminated, exit 0",error:'{"error":{"message","code"}} on stderr, exit != 0',pretty:"--pretty indents stdout JSON"},globalFlags:Z4,aliases:af,groups:cX,verbs:dX.map(Sj)}}function DS(J){return J.flags.map((z)=>{let Y=z.type==="enum"&&z.values?z.values.join("|"):z.placeholder??(z.type==="bool"?"":"X"),G=Y?`--${z.name} ${Y}`:`--${z.name}`;return z.required?G:`[${G}]`}).join(" ")}function f4(J){let z=[`kobe api ${J.name} ${DS(J)}`.trimEnd(),"",J.summary,""],Y=Object.entries(af).find(([,G])=>G===J.name)?.[0];if(Y)z.push(`Alias: ${Y}`,"");if(J.flags.length>0){z.push("Flags:");for(let G of J.flags){let X=G.required?" (required)":"",Z=G.default!==void 0?` [default: ${G.default}]`:"",Q=G.type==="enum"&&G.values?` {${G.values.join("|")}}`:"";z.push(` --${G.name}${Q}${X}${Z} ${G.description}`)}z.push("")}return z.push("Global: [--pretty] [--help]"),z.join(`
|
|
169
|
+
`)}function $f(){return["usage: kobe api <verb> [flags] [--pretty] [--help]","","Explore the full surface (names, flags, types) with: kobe api schema","","verbs:",...dX.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 LS(J,z){let Y=z?JSON.stringify(J,null,2):JSON.stringify(J);process.stdout.write(`${Y}
|
|
171
|
+
`)}function jY(J,z,Y=1){process.stderr.write(`${JSON.stringify({error:{message:J,code:z}})}
|
|
172
|
+
`),process.exit(Y)}async function H4(J,z,Y,G=MS){let X=z.worktreePath;if(!X)X=(await J.request("task.ensureWorktree",{taskId:z.id})).worktreePath;if(!X)throw new F1(`task ${z.id} has no worktree`,"NO_WORKTREE");let Z=M1(z.id),Q=await G.sessionExists(Z);if(!Q){let B=await G.resolveEngineLaunchInit(z.repo??"",X,{kind:"none"});if(!await G.ensureSession({name:Z,cwd:X,command:G.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 G.waitForEnginePane(Z,!Q);if(!f)throw new F1(`no engine pane in session ${Z}`,"NO_ENGINE_PANE");return await G.pasteAndSubmit(f,Y),{session:Z,pane:f,started:!Q,engineReady:H}}async function FS(J){let z=null,Y=J.onChannel("active-task",(G)=>{z=G.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 OS(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 AS(J){let z=cJ(J),{args:Y,runtime:G}=J,Z={repo:await G.resolveRepoRoot(Y.requirePath("repo"))},Q=Y.str("title");if(Q)Z.title=Q;let f=Y.str("branch");if(f)Z.branch=f;let H=Y.str("base-branch");if(H)Z.baseRef=H;let B=Y.vendor()??await G.defaultVendor();if(B)Z.vendor=B;let V=await z.request("task.create",Z),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 O=Y.str("prompt");if(!O)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},O);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 RS(J){let z=cJ(J),Y=J.args.require("prompt"),G=J.args.str("task-id");if(!G){let Q=await FS(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");G=Q}let X=await z.request("task.get",{taskId:G}),Z=await J.runtime.deliverPrompt(z,{id:G,worktreePath:X.task.worktreePath,vendor:X.task.vendor,repo:X.task.repo},Y);return{ok:!0,taskId:G,session:Z.session,started:Z.started,engineReady:Z.engineReady}}async function gS(J){let z=cJ(J),Y=J.args.require("task-id"),G=J.args.require("prompt");return await z.request("session.deliver",{taskId:Y,text:G,source:"dispatcher"}),{ok:!0,taskId:Y,routed:"session.deliver"}}async function CS(J){let z=cJ(J),Y=J.args.require("task-id"),G=J.args.require("text");return await z.request("note.file",{taskId:Y,text:G})}async function NS(J){let z=cJ(J),Y=J.args.require("task-id"),G=await z.request("task.get",{taskId:Y}),X=await J.runtime.isTaskRunning(Y);return{task:G.task,running:X}}async function kS(J){return cJ(J).request("task.list")}async function bS(J){let z=cJ(J),G=J.args.bool("none")?null:J.args.require("task-id");return await z.request("task.setActive",{taskId:G}),{ok:!0,activeTaskId:G}}async function SS(J){let z=cJ(J),Y=J.args.require("task-id"),G=J.args.bool("archived")??!0,X=await z.request("task.archive",{taskId:Y,archived:G});if(G)await J.runtime.tearDownSession(Y);return X}async function IS(J){let z=cJ(J),Y=J.args.require("task-id"),G=J.args.bool("force")??!1,X=await z.request("task.delete",{taskId:Y,force:G});return await J.runtime.tearDownSession(Y),X}async function yS(J){let z=cJ(J),{args:Y}=J,G={repo:Y.requirePath("repo"),worktreePath:Y.requirePath("worktree")},X=Y.str("branch");if(X)G.branch=X;let Z=Y.vendor();if(Z)G.vendor=Z;let Q=Y.str("title");if(Q)G.title=Q;return z.request("worktree.adopt",G)}async function TS(J){let z=cJ(J),{args:Y,runtime:G}=J,X=await G.resolveRepoRoot(Y.requirePath("repo")),Z=Y.require("prompt"),Q=Y.str("title"),f=Y.str("base-branch"),H=Y.str("agents"),B=await G.defaultVendor(),V=H?X4(H):Array(Y.int("count")??1).fill(Y.vendor()??B??"claude");if(V.length>mX)throw new F1(`fan-out of ${V.length} exceeds the cap of ${mX} \u2014 spawn in batches`,"BAD_FLAG");let j=[];for(let K of V){let L={repo:X,vendor:K};if(Q)L.title=Q;if(f)L.baseRef=f;let A=await z.request("task.create",L),O=await J.runtime.deliverPrompt(z,{id:A.taskId,worktreePath:A.task.worktreePath,vendor:K,repo:A.task.repo},Z);j.push({taskId:A.taskId,vendor:K,started:O.started,engineReady:O.engineReady,session:O.session})}return{count:j.length,tasks:j}}async function uS(J){let z=cJ(J),{args:Y,runtime:G}=J,X=Y.str("task-ids"),Z=Y.path("repo"),Q;if(X)Q=X.split(",").map((H)=>H.trim()).filter(Boolean);else if(Z){let H=await G.resolveRepoRoot(Z),{tasks:B}=await z.request("task.list");Q=[];for(let V of B){if(V.archived)continue;if(await G.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 G.isTaskRunning(H),j=B.worktreePath?await G.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 xS(J){return{ok:!0,discussion:vX({title:J.args.require("title"),body:J.args.require("body"),categorySlug:J.args.str("category")})}}function B4(J,z,Y,G){return{args:new bj(J,z),client:Y,runtime:G}}async function ES(J,z,Y){let G=rZ(J);if(!G)throw new F1(`unknown verb: ${J}`,"BAD_VERB");let X=new Set(G.flags.filter((Q)=>Q.type==="bool").map((Q)=>Q.name)),Z=Nj(z,X);return kj(G,Z.flags),G.handler(B4(G,Z.flags,Y.client,Y.runtime??Ij))}async function wS(J){let[z,...Y]=J;if(!z||z==="--help"||z==="-h"||z==="help"){if(!z)jY($f(),"MISSING_VERB",2);process.stdout.write(`${$f()}
|
|
173
|
+
`);return}let G=rZ(z);if(!G)jY(`unknown verb: ${z}
|
|
174
|
+
${$f()}`,"BAD_VERB",2);let X=new Set(G.flags.filter((f)=>f.type==="bool").map((f)=>f.name)),Z;try{Z=Nj(Y,X)}catch(f){if(f instanceof F1)jY(f.message,f.code,2);jY(f instanceof Error?f.message:String(f),"BAD_FLAG",2)}if(Z.help){process.stdout.write(`${f4(G)}
|
|
175
|
+
`);return}try{kj(G,Z.flags)}catch(f){if(f instanceof F1)jY(f.message,f.code,2);jY(f instanceof Error?f.message:String(f),"BAD_FLAG",2)}let Q=null;if(!G.offline)try{Q=await eU()}catch(f){jY(`could not reach or start the kobe daemon: ${f instanceof Error?f.message:String(f)}`,"BAD_DAEMON",2)}try{let f=await G.handler(B4(G,Z.flags,Q?.client??null,Ij));LS(f,Z.pretty)}catch(f){if(f instanceof F1)jY(f.message,f.code,1);jY(f instanceof Error?f.message:String(f),"RPC_ERROR",1)}finally{Q?.close()}}var Cj=2,mX=10,Y4,jS,F1,K1,af,cX,dX,VS,Z4,MS,Ij;var W4=k(()=>{hJ();lf();P1();Qf();t1();FJ();J4();Y4=["backlog","in_progress","in_review","done","canceled","error"],jS=["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:l1,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})},af={"spawn-task":"add"},cX={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"]};dX=[{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:WS},{name:"list",summary:"List all tasks (incl. archived). Returns { tasks }.",flags:[],handler:kS},{name:"get-task",summary:"Read one task's metadata. `.running` = its tmux session is live.",flags:[K1.taskId()],handler:NS},{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:Y4,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:AS},{name:"fan-out",summary:`Spawn N tasks of ONE prompt in a single call (parallel attempts). Capped at ${mX}.`,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:TS},{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:RS},{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:gS},{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:CS},{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:gj,placeholder:"SLUG",description:"Discussion category slug."}],offline:!0,handler:xS},{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:jS,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:OS},{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:uS},{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:Y4,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:SS},{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:bS},{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:IS},{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:yS}],VS=dX.map((J)=>J.name);Z4=[{name:"pretty",type:"bool",description:"Pretty-print stdout JSON."},{name:"help",type:"bool",description:"Show usage for the verb and exit."}];MS={sessionExists:H1,ensureSession:async(J)=>(await Promise.resolve().then(() => (fJ(),tJ))).ensureSession(J),waitForEnginePane:hZ,pasteAndSubmit:vZ,resolveEngineLaunchInit:async(J,z,Y)=>(await Promise.resolve().then(() => (AX(),dB))).resolveEngineLaunchInit(J,z,Y),engineCommand:TJ};Ij={isTaskRunning:(J)=>H1(M1(J)),deliverPrompt:(J,z,Y)=>H4(J,z,Y),resolveRepoRoot:async(J)=>(await Promise.resolve().then(() => (O1(),rz))).resolveMainRepoRoot(J),defaultVendor:async()=>{let{getPersistedString:J}=await Promise.resolve().then(() => (O1(),rz)),z=J("lastSelectedVendor")?.trim();return z?z:void 0},readWorktreeChanges:async(J)=>(await Promise.resolve().then(() => (uX(),qU))).readWorktreeChanges(J),tearDownSession:async(J)=>{let z=M1(J);await uz(z).catch(()=>{}),await rJ(z).catch(()=>{})}}});var D4={};j1(D4,{updatePlan:()=>V4,runUpdateSubcommand:()=>hS,parseUpdateArgs:()=>K4});import{spawnSync as PS}from"child_process";function V4(){return{command:"sh",args:["-c",iz],display:iz}}function K4(J){let z=!1;for(let Y=0;Y<J.length;Y+=1){let G=J[Y];if(G==="--help"||G==="-h"||G==="help")return{help:!0,dryRun:z};if(G==="--dry-run"){z=!0;continue}process.stderr.write(`kobe update: unknown argument "${G}"
|
|
176
|
+
|
|
177
|
+
`),U4(process.stderr),process.exit(2)}return{help:!1,dryRun:z}}function U4(J){J.write(["Usage: kobe update [--dry-run]","","Runs kobe's GitHub-hosted update script.","","Default command:",` ${iz}`,"","Script URL:",` ${SQ}`,"","Manual fallback:",` ${PH()}`,"","Examples:"," kobe update"," kobe update --dry-run",""].join(`
|
|
178
|
+
`))}async function hS(J,z){let Y={spawn:z?.spawn??PS,stdout:z?.stdout??process.stdout,stderr:z?.stderr??process.stderr,exit:z?.exit??((Q)=>process.exit(Q))},G=K4(J);if(G.help){U4(Y.stdout);return}let X=V4();if(Y.stdout.write(`kobe ${o0} -> latest
|
|
179
|
+
`),Y.stdout.write(`running: ${X.display}
|
|
180
|
+
`),G.dryRun)return;let Z=Y.spawn(X.command,X.args,{stdio:"inherit"});if(Z.error)Y.stderr.write(`kobe update: failed to run ${X.command}: ${Z.error.message}
|
|
181
|
+
`),Y.exit(1);Y.exit(Z.status??1)}var L4=k(()=>{FJ()});var A4={};j1(A4,{runThemeSubcommand:()=>rS});import{existsSync as F4,mkdirSync as vS,readFileSync as mS,readdirSync as cS,unlinkSync as dS,writeFileSync as nS}from"fs";import{basename as M4,join as Tj,resolve as iS}from"path";function WY(J){process.stderr.write(`kobe theme: ${J}
|
|
182
|
+
`),process.exit(1)}function lY(J){process.stderr.write(`kobe theme: ${J}
|
|
183
|
+
|
|
184
|
+
`),O4(),process.exit(2)}function lS(){let J=[];J.push("bundled:");for(let G of[...yj].sort())J.push(` ${G} [built-in]`);let z=CX(),Y=[];try{Y=cS(z).filter((G)=>G.endsWith(".json")).sort()}catch{}if(J.push(""),J.push(`user (${z}):`),Y.length===0)J.push(" (none)");else for(let G of Y){let X=G.slice(0,-5),Z=Tj(z,G),Q=yj.includes(X)?" (overrides built-in)":"";J.push(` ${X}${Q} ${Z}`)}process.stdout.write(`${J.join(`
|
|
185
185
|
`)}
|
|
186
|
-
`)}async function
|
|
186
|
+
`)}async function $S(J){if(/^https?:\/\//i.test(J)){let Z;try{Z=await fetch(J)}catch(V){WY(`failed to fetch ${J}: ${V instanceof Error?V.message:String(V)}`)}if(!Z.ok)WY(`failed to fetch ${J}: HTTP ${Z.status} ${Z.statusText}`);let Q=await Z.text(),f=J.split(/[?#]/)[0]??J,H=M4(f)||"theme.json",B=H.endsWith(".json")?H.slice(0,-5):H;return{text:Q,defaultName:B}}let z=iS(process.cwd(),J),Y;try{Y=mS(z,"utf8")}catch(Z){WY(`failed to read ${z}: ${Z instanceof Error?Z.message:String(Z)}`)}let G=M4(z),X=G.endsWith(".json")?G.slice(0,-5):G;return{text:Y,defaultName:X}}function aS(J){let z=null,Y,G=!1;for(let X=0;X<J.length;X+=1){let Z=J[X];if(Z==="--force"||Z==="-f"){G=!0;continue}if(Z==="--name"||Z==="-n"){let Q=J[X+1];if(Q===void 0)lY("--name requires a value");Y=Q,X+=1;continue}if(Z.startsWith("--name=")){Y=Z.slice(7);continue}if(Z.startsWith("--"))lY(`unknown flag: ${Z}`);if(z===null){z=Z;continue}lY(`unexpected positional argument: ${Z}`)}if(z===null)lY("missing <source> (URL or path to theme JSON)");return{source:z,opts:{name:Y,force:G}}}async function _S(J){let{source:z,opts:Y}=aS(J),{text:G,defaultName:X}=await $S(z),Z;try{Z=JSON.parse(G)}catch(V){WY(`source is not valid JSON: ${V instanceof Error?V.message:String(V)}`)}let Q=ff(Z);if(!Q.ok)WY(`source is not a valid kobe theme: ${Q.reason}`);let f=Y.name??X;if(!f||!/^[a-zA-Z0-9._-]+$/.test(f))WY(`invalid theme name "${f}" (use letters, digits, '.', '_', '-')`);let H=CX();vS(H,{recursive:!0});let B=Tj(H,`${f}.json`);if(F4(B)&&!Y.force)WY(`${B} already exists (pass --force to overwrite)`);nS(B,`${JSON.stringify(Q.theme,null,2)}
|
|
187
187
|
`,"utf8"),process.stdout.write(`installed theme "${f}" -> ${B}
|
|
188
|
-
`)}function
|
|
189
|
-
`)}function
|
|
190
|
-
`))}async function
|
|
188
|
+
`)}function pS(J){let z=J[0];if(!z)lY("missing <name>");if(J.length>1)lY(`unexpected extra arguments after "${z}"`);if(yj.includes(z))WY(`"${z}" is a built-in theme and cannot be removed`);let Y=Tj(CX(),`${z}.json`);if(!F4(Y))WY(`no user theme named "${z}" (looked for ${Y})`);dS(Y),process.stdout.write(`removed theme "${z}" (${Y})
|
|
189
|
+
`)}function O4(){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: ${CX()}`,"Schema: https://raw.githubusercontent.com/sma1lboy/kobe/main/packages/kobe/src/tui/context/theme/theme.schema.json",""].join(`
|
|
190
|
+
`))}async function rS(J){let[z,...Y]=J;if(!z||z==="--help"||z==="-h"||z==="help"){if(O4(),!z)process.exit(2);return}if(z==="list"||z==="ls"){if(Y.length>0)lY(`"${z}" takes no arguments`);lS();return}if(z==="add"){await _S(Y);return}if(z==="remove"||z==="rm"){pS(Y);return}lY(`unknown action "${z}" (try "list", "add", or "remove")`)}var yj;var R4=k(()=>{p1();Hf();aB();yj=["claude","conductor","dracula","nord","opencode","osaka-jade","tokyonight"]});var k4={};j1(k4,{runFeedbackSubcommand:()=>sS,parseFeedbackArgs:()=>N4});import{readFileSync as g4}from"fs";function $Y(J){process.stderr.write(`kobe feedback: ${J}
|
|
191
191
|
|
|
192
|
-
${
|
|
193
|
-
`),process.exit(2)}function
|
|
194
|
-
`);return}if(!z.title)
|
|
195
|
-
`)});import{homedir as
|
|
196
|
-
`))}function
|
|
192
|
+
${C4}
|
|
193
|
+
`),process.exit(2)}function oS(J){if(J==="-")return g4(0,"utf8");return g4(J,"utf8")}function N4(J){let z={help:!1};for(let Y=0;Y<J.length;Y++){let G=J[Y];if(G==="--help"||G==="-h"||G==="help")return{...z,help:!0};if(G==="--title"){if(z.title=J[++Y],z.title===void 0)$Y("--title requires a value");continue}if(G==="--body"){if(z.body=J[++Y],z.body===void 0)$Y("--body requires a value");continue}if(G==="--body-file"){if(z.bodyFile=J[++Y],z.bodyFile===void 0)$Y("--body-file requires a value");continue}if(G==="--category"){if(z.category=J[++Y],z.category===void 0)$Y("--category requires a value");continue}$Y(`unexpected argument "${G}"`)}return z}async function sS(J){let z=N4(J);if(z.help){process.stdout.write(`${C4}
|
|
194
|
+
`);return}if(!z.title)$Y("--title is required");if(z.body&&z.bodyFile)$Y("pass either --body or --body-file, not both");let Y=z.bodyFile?oS(z.bodyFile):z.body;if(!Y)$Y("--body or --body-file is required");let G=vX({title:z.title,body:Y,categorySlug:z.category});console.log(`created Discussion #${G.number}: ${G.url}`)}var C4;var b4=k(()=>{lf();C4=["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 tS}from"os";async function S4(J={}){let z=J.homeDir??process.env.KOBE_HOME_DIR??tS(),Y=new PX({homeDir:z});await Y.load();let G=new mf,X=new gq({store:Y,worktrees:G});return{homeDir:z,orchestrator:X,store:Y,worktrees:G,async close(){X.dispose()}}}var I4=k(()=>{RZ();aZ();Aj()});var T4={};j1(T4,{runDaemonSubcommand:()=>JI});function y4(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 eS(){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 JI(J){let[z="status"]=J,Y=kz(),G=oz();if(z==="--help"||z==="-h"||z==="help"){y4(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 xX(G);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 EX(Y,G),(await Fz()).close(),console.log(`kobe daemon: restarted, listening on ${Y}`);return}if(z!=="start")process.stderr.write(`kobe daemon: unknown command "${z}"
|
|
197
197
|
|
|
198
|
-
`),
|
|
198
|
+
`),y4(process.stderr),process.exit(2);tV();let X=await S4(),Z=await UU(X.orchestrator,{socketPath:Y,pidPath:G,homeDir:X.homeDir,webPort:eS(),webHost:process.env.KOBE_WEB_HOST,webStaticDir:process.env.KOBE_DAEMON_WEB_STATIC_DIR,onStop:async()=>{await X.close()}});if(console.log(`kobe daemon: listening on ${Z.socketPath}`),Z.webPort)console.log(`kobe daemon: web transport listening on http://127.0.0.1:${Z.webPort}`);let Q=async()=>{await Z.close(),await X.close(),process.exit(0)};process.once("SIGINT",()=>void Q()),process.once("SIGTERM",()=>void Q())}var u4=k(()=>{XZ();AJ();Pf();lG();wf();I4()});import{existsSync as zI,readFileSync as YI}from"fs";import{homedir as GI}from"os";import{join as x4}from"path";function Ej(J={}){return["skills","add",XI,"--skill","kobe","--agent",J.agent??_f]}function pf(J={}){return`npx ${Ej(J).join(" ")}`}function wj(J={}){let z=J.home??GI(),Y=J.cwd??process.cwd();return[x4(z,E4),x4(Y,E4)]}function ZI(J){let z=J.match(/kobe-skill-version:\s*(\d+)/);return z?Number.parseInt(z[1],10):null}function sZ(J){let z=wj(J).find((X)=>zI(X));if(!z)return{installed:!1,installedVersion:null,currentVersion:uj,stale:!1};let Y=null;try{Y=ZI(YI(z,"utf8"))}catch{Y=null}let G=Y===null||Y<uj;return{installed:!0,installedVersion:Y,currentVersion:uj,stale:G}}function w4(){let J=sZ();if(!J.installed){if(S1(xj)==="1")return;r1(xj,"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
|
-
${
|
|
201
|
-
(wraps \`${
|
|
200
|
+
${oZ}
|
|
201
|
+
(wraps \`${pf()}\`; check anytime with \`kobe doctor\`)
|
|
202
202
|
|
|
203
|
-
`);return}if(J.stale){let z=`${
|
|
203
|
+
`);return}if(J.stale){let z=`${xj}: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
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
|
-
${
|
|
205
|
+
${oZ}
|
|
206
206
|
|
|
207
|
-
`)}}var
|
|
208
|
-
`).filter((
|
|
209
|
-
`)}catch{return""}}async function
|
|
210
|
-
`).filter((Y)=>Y.trim().length>0).length}async function
|
|
207
|
+
`)}}var uj=2,E4=".claude/skills/kobe/SKILL.md",oZ="kobe skill install",XI="Sma1lboy/kobe",_f="claude-code",xj="skillHintSeen";var rf=k(()=>{O1()});var of={};j1(of,{runResetSubcommand:()=>MI,runReloadSubcommand:()=>FI,runDoctorSubcommand:()=>DI});import{existsSync as QI,readFileSync as v4,statSync as qI}from"fs";import{unlink as fI}from"fs/promises";import{join as m4}from"path";import{createInterface as HI}from"readline";function BI(J){try{return process.kill(J,0),!0}catch(z){return z.code==="EPERM"}}async function jI(J){let z=new $J(J);try{return await z.request("daemon.status")}catch{return null}finally{z.close()}}function WI(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 VI(J){if(J<1024)return`${J} B`;if(J<1048576)return`${(J/1024).toFixed(1)} KB`;return`${(J/1048576).toFixed(1)} MB`}function Pj(J){try{let z=qI(J);return`present (${VI(z.size)}, modified ${z.mtime.toISOString()})`}catch{return"absent"}}function c4(J){try{let z=JSON.parse(v4(J,"utf8"));return Array.isArray(z.tasks)?z.tasks.length:null}catch{return null}}function KI(J,z){try{return v4(J,"utf8").split(`
|
|
208
|
+
`).filter((G)=>G.trim().length>0).slice(-z).join(`
|
|
209
|
+
`)}catch{return""}}async function hj(J){let z=Bun.spawn(LG(...J),{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),[Y,G]=await Promise.all([new Response(z.stdout).text().catch(()=>""),z.exited]);return{code:G,stdout:Y}}async function UI(){if(!await yz())return 0;let{code:J,stdout:z}=await hj(["list-sessions","-F","#{session_name}"]);if(J!==0)return 0;return z.split(`
|
|
210
|
+
`).filter((Y)=>Y.trim().length>0).length}async function DI(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
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(),
|
|
213
|
-
`))f.push(` \u2502 ${L}`)}}if(f.push(""),await yz())f.push(`tmux: ${await
|
|
214
|
-
`))}async function
|
|
215
|
-
`))}async function
|
|
212
|
+
`)),process.exit(2);let Y=kz(),G=oz(),X=PQ(),Z=m4(qJ(),"tasks.json"),Q=iJ(),f=["kobe doctor",` home: ${Nz()}`,` socket: ${Y}`,""],H=await jI(Y);if(H){let j=typeof H.daemonPid==="number"?H.daemonPid:"?",K=typeof H.uptimeMs==="number"?WI(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 O=typeof H.kobeVersion==="string"?H.kobeVersion:void 0;if(O&&O!==o0)f.push(` \u26A0 stale build: daemon is v${O}, you launched v${o0}`),f.push(" \u2192 run `kobe daemon restart`, then `kobe reload` in any open kobe sessions");else if(O)f.push(` build: v${O}`)}else{let j=await xX(G);if(j&&BI(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(QI(Y))f.push(` orphan socket file present: ${Y}`);let K=KI(X,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 UI()} kobe session(s) on \`${Wz}\` socket`);else f.push("tmux: \u2717 not found on PATH (task sessions need tmux)");f.push("");let B=sZ();if(!B.installed)f.push("skill: \u2717 kobe agent skill not installed (optional \u2014 lets a coding agent drive `kobe api`)"),f.push(` \u2192 ${oZ}`);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 ${oZ}`)}else f.push(`skill: \u2713 kobe agent skill installed (v${B.installedVersion})`);f.push("");let V=c4(Z);f.push(`tasks.json: ${Pj(Z)}${V===null?"":` \u2014 ${V} task(s)`}`),f.push(`state.json: ${Pj(Q)}`),f.push(`daemon.log: ${Pj(X)}`),console.log(f.join(`
|
|
214
|
+
`))}async function LI(J){let z=HI({input:process.stdin,output:process.stdout});try{let Y=await new Promise((G)=>z.question(J,G));return/^y(es)?$/i.test(Y.trim())}finally{z.close()}}async function P4(J,z){try{await fI(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 h4(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 MI(J){if(J.includes("--help")||J.includes("-h")||J.includes("help")){h4(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
216
|
|
|
217
|
-
`),
|
|
218
|
-
re-run with --yes to proceed (no interactive terminal for a y/N prompt)`);return}if(!await
|
|
217
|
+
`),h4(process.stderr),process.exit(2);let G=J.includes("--hard"),X=J.includes("--yes")||J.includes("-y"),Z=kz(),Q=oz(),f=m4(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 (${Z})`),console.log(` \u2022 kill all kobe tmux sessions on the \`${Wz}\` socket`),G){let j=c4(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"),!G)console.log(" (your task list & worktrees are kept \u2014 add --hard to also wipe the task index + UI state)");if(!X){if(!process.stdin.isTTY){console.log(`
|
|
218
|
+
re-run with --yes to proceed (no interactive terminal for a y/N prompt)`);return}if(!await LI(G?`
|
|
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
|
|
221
|
-
kobe: reset complete. Relaunch kobe to start fresh.`)}async function
|
|
220
|
+
Stop daemon and kill kobe sessions? [y/N] `)){console.log("aborted \u2014 nothing changed");return}}console.log("");let{pid:B,method:V}=await EX(Z,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 hj(["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(G)await P4(f,"task index"),await P4(H,"UI state");console.log(`
|
|
221
|
+
kobe: reset complete. Relaunch kobe to start fresh.`)}async function FI(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
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 yz()){console.log("kobe reload: tmux is not installed \u2014 no panes to reload");return}let{code:Y,stdout:
|
|
226
|
-
`).map((f)=>f.trim()).filter((f)=>f.length>0);if(
|
|
227
|
-
`).map((
|
|
228
|
-
`),process.exit(2);z=
|
|
229
|
-
`),process.stdout.write(` home: ${
|
|
230
|
-
`);else if(Q=await
|
|
231
|
-
`),process.stdout.write(` home: ${
|
|
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:G}=await hj(["list-sessions","-F","#{session_name}"]);if(Y!==0){console.log(`kobe reload: no kobe tmux sessions on the \`${Wz}\` socket`);return}let X=G.split(`
|
|
226
|
+
`).map((f)=>f.trim()).filter((f)=>f.length>0);if(X.length===0){console.log(`kobe reload: no kobe tmux sessions on the \`${Wz}\` socket`);return}let{refreshKobeWorkspacePanes:Z}=await Promise.resolve().then(() => (fJ(),tJ)),Q=0;for(let f of X)try{await Z(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}/${X.length} session(s) \u2014 engine panes untouched`)}var sf=k(()=>{XZ();Pf();lG();wf();p1();rf();P1();FJ()});var _4={};j1(_4,{runWebSubcommand:()=>bI});import{existsSync as i4}from"fs";import{homedir as OI}from"os";import{resolve as tf}from"path";import{fileURLToPath as l4}from"url";function d4(){let J=process.env.KOBE_HOME_DIR?.trim();return J?`sandbox: ${J}`:`${OI()}/.kobe (production)`}function RI(){let J=l4(import.meta.url),z=[tf(J,"../../../../kobe-web/dist"),tf(J,"../../web-ui")];for(let Y of z)if(i4(`${Y}/index.html`))return Y;return}function gI(){let J=l4(import.meta.url),z=[tf(J,"../../../../kobe-web/pty-server.mjs"),tf(J,"../../web-ui/pty-server.mjs")];for(let Y of z)if(i4(Y))return Y;return}async function n4(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((G)=>Number.parseInt(G.trim(),10)).filter((G)=>Number.isFinite(G)&&G!==process.pid)}catch{return[]}}async function CI(J){let z;try{z=(await(await fetch(`http://localhost:${J}${a4}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(z!==$4)throw Error(`PTY port ${J} is in use by a non-kobe service; refusing to replace it`);let Y=await n4(J);for(let X of Y)try{process.kill(X,"SIGTERM")}catch{}let G=Date.now()+2000;while(Date.now()<G){if((await n4(J)).length===0)return;await new Promise((X)=>setTimeout(X,100))}}async function NI(J){let z=gI();if(!z)return null;let Y=J.webPort+2;if(J.takeover)await CI(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 kI(J,z){if(process.env.KOBE_DAEMON_WEB_PORT=String(J),z)process.env.KOBE_DAEMON_WEB_STATIC_DIR=z;await wX();let Y;try{Y=(await(await fetch(`http://127.0.0.1:${J}${a4}`,{signal:AbortSignal.timeout(1500)})).text()).trim()}catch(G){throw Error(`daemon web transport is not reachable on :${J}; run \`kobe daemon restart\` so the daemon picks up this build (${G instanceof Error?G.message:String(G)})`)}if(Y!==$4)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 bI(J){if(J.includes("--help")||J.includes("-h")){process.stdout.write(AI);return}let z=5174,Y=J.indexOf("--port");if(Y!==-1){let G=Number.parseInt(J[Y+1]??"",10);if(!Number.isFinite(G))process.stderr.write(`kobe web: --port needs a number
|
|
228
|
+
`),process.exit(2);z=G}try{let G=J.includes("--routes-only")||J.includes("--bridge-only"),X=!J.includes("--no-takeover"),Z=G?void 0:RI();if(!G&&!Z)throw Error("web assets are missing from this kobe build; run `bun run build` in packages/kobe, or `bun run dev` in packages/kobe-web from a source checkout");await kI(z,Z);let Q=null,f=!1,H=()=>{if(f)return;f=!0,Q?.kill(),Q=null};if(G)process.stdout.write(`kobe daemon web transport listening on http://localhost:${z} (routes only)
|
|
229
|
+
`),process.stdout.write(` home: ${d4()}
|
|
230
|
+
`);else if(Q=await NI({webPort:z,takeover:X}),process.stdout.write(`kobe web \u2192 http://localhost:${z}
|
|
231
|
+
`),process.stdout.write(` home: ${d4()}
|
|
232
232
|
`),!Q)process.stderr.write(`kobe web: PTY server not found; terminal tabs will be unavailable
|
|
233
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(
|
|
235
|
-
`),process.exit(1)}}var
|
|
234
|
+
`),H(),process.exit(1)}),await new Promise(()=>{})}catch(G){process.stderr.write(`kobe web: ${G instanceof Error?G.message:String(G)}
|
|
235
|
+
`),process.exit(1)}}var $4="kobe-web",a4="/__kobe_web",AI=`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
|
|
245
|
-
`)}function
|
|
246
|
-
`),process.exit(2);z=
|
|
247
|
-
|
|
248
|
-
${
|
|
249
|
-
`),process.exit(2)}return z}async function
|
|
250
|
-
`),!z)process.exitCode=2;return}if(!
|
|
251
|
-
|
|
252
|
-
${
|
|
253
|
-
`),process.exit(2);if(z==="status"){let f=
|
|
254
|
-
`));return}if(z==="command"){process.stdout.write(`${
|
|
255
|
-
`);return}let
|
|
256
|
-
`);let Q=await Bun.spawn(["npx",...
|
|
244
|
+
`;var p4=k(()=>{AJ()});var o4={};j1(o4,{runSkillSubcommand:()=>II});function vj(){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: ${_f}.`].join(`
|
|
245
|
+
`)}function r4(J){let z=_f;for(let Y=0;Y<J.length;Y++){let G=J[Y];if(G==="--agent"){let X=J[Y+1];if(!X||X.startsWith("--"))process.stderr.write(`kobe skill: --agent requires a value
|
|
246
|
+
`),process.exit(2);z=X,Y++}else if(G.startsWith("--agent="))z=G.slice(8);else process.stderr.write(`kobe skill: unknown flag "${G}"
|
|
247
|
+
|
|
248
|
+
${vj()}
|
|
249
|
+
`),process.exit(2)}return z}async function II(J){let[z,...Y]=J;if(!z||z==="--help"||z==="-h"||z==="help"){if(process.stdout.write(`${vj()}
|
|
250
|
+
`),!z)process.exitCode=2;return}if(!SI.includes(z))process.stderr.write(`kobe skill: unknown verb "${z}"
|
|
251
|
+
|
|
252
|
+
${vj()}
|
|
253
|
+
`),process.exit(2);if(z==="status"){let f=sZ(),[H,B]=wj(),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(`${pf({agent:r4(Y)})}
|
|
255
|
+
`);return}let G=r4(Y),X=Ej({agent:G});process.stdout.write(`kobe skill: running \`npx ${X.join(" ")}\`
|
|
256
|
+
`);let Q=await Bun.spawn(["npx",...X],{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: ${
|
|
258
|
+
You can run it yourself: ${pf({agent:G})}
|
|
259
259
|
`),process.exit(Q||1);process.stdout.write(`kobe skill: installed.
|
|
260
|
-
`)}var
|
|
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
|
|
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,`
|
|
260
|
+
`)}var SI;var s4=k(()=>{rf();SI=["install","status","command"]});var mj={};j1(mj,{runHookSubcommand:()=>hI,readTextWithTimeout:()=>zD,parseWorktreeAddPath:()=>GD,ensureGlobalKobeHooks:()=>cI});import{homedir as yI}from"os";import{join as e4,resolve as JD}from"path";async function zD(J,z=TI){let Y;try{return await Promise.race([J(),new Promise((G)=>{Y=setTimeout(()=>G(""),z)})])}finally{if(Y!==void 0)clearTimeout(Y)}}async function YD(){try{let J=await zD(()=>Bun.stdin.text());if(!J.trim())return{};let z=JSON.parse(J);return z&&typeof z==="object"&&!Array.isArray(z)?z:{}}catch{return{}}}function uI(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 EI(J){return!!J&&typeof J==="object"&&!Array.isArray(J)}function wI(J){let z=[],Y=/"([^"]*)"|'([^']*)'|(\S+)/g,G;while((G=Y.exec(J))!==null)z.push(G[1]??G[2]??G[3]??"");return z}function GD(J){let z=wI(J),Y=new Set(["-b","-B","--reason"]);for(let G=0;G+1<z.length;G++){if(z[G]!=="worktree"||z[G+1]!=="add")continue;let X=G+2;while(X<z.length){let Z=z[X];if(Z==="&&"||Z==="||"||Z===";"||Z==="|"||Z===">"||Z===">>")break;if(Z.startsWith("-")){X+=Y.has(Z)?2:1;continue}return Z}}return}async function PI(){let J=await YD(),z=EI(J.tool_input)?J.tool_input:{},Y=typeof z.command==="string"?z.command:"";if(!Y.includes("worktree"))return;let G=GD(Y);if(!G)return;let X=typeof J.cwd==="string"&&J.cwd?J.cwd:process.cwd(),Z=JD(X,G),Q=await eJ();if(!Q)return;try{await Q.request("worktree.reconcile",{cwd:X,worktreePath:Z})}finally{Q.close()}}async function hI(J){let[z,...Y]=J;if(z==="setup"){await dI(Y);return}if(z===xI){try{await PI()}catch{}return}try{if(!z||!Zq(z))return;let G=await YD(),X=uI(Y,"--task-id"),Z=typeof G.cwd==="string"&&G.cwd?G.cwd:process.cwd(),Q;for(let H of XD())if(Q=H.activityDetailFromPayload(z,G),Q)break;let f=await eJ();if(!f)return;try{await f.request("engine.reportEvent",{...X?{taskId:X}:{cwd:Z},kind:z,...Q?{detail:Q}:{}})}finally{f.close()}}catch{}}function vI(){return l1.map((J)=>N8(J)).filter((J)=>J.supportsWorktreeSync())}function XD(){return l1.map((J)=>N8(J)).filter((J)=>J.supportsHooks())}function ZD(){return e4(yI(),".claude","settings.json")}function mI(J){if(!J||J==="off")return;if(J==="global")return ZD();if(J.startsWith("repo:"))return e4(JD(J.slice(5)),".claude","settings.json");return J}async function cI(){try{for(let J of XD()){let z=J.globalSettingsPath();if(!z)continue;await J.installActivityHooks(z),await J.installWorktreeWatchHook(z)}await QD()}catch{}}async function QD(){let J=vI();if(J.length===0)return;let z=S1(t4),Y=new Set([ZD()]),G=mI(z);if(G)Y.add(G);for(let X of J)for(let Z of Y)await X.removeWorktreeSyncHook(Z);if(z!=="off")r1(t4,"off")}async function dI(J){await QD(),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 TI=500,xI="worktree-created",t4="externalWorktreeSync";var cj=k(()=>{AJ();k8();Qq();O1();t1()});function fD(J){var z;if(J>=55296&&J<=57343||J>1114111)return 65533;return(z=nI.get(J))!==null&&z!==void 0?z:J}var dj,nI,qD;var HD=k(()=>{nI=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]]),qD=(dj=String.fromCodePoint)!==null&&dj!==void 0?dj:(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 BD(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,G=new Uint16Array(Y/2);for(let X=0,Z=0;X<Y;X+=2){let Q=z.charCodeAt(X),f=z.charCodeAt(X+1);G[Z++]=Q|f<<8}return G}var jD;var WD=k(()=>{jD=BD("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 KJ;var VD=k(()=>{(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"})(KJ||(KJ={}))});function nj(J){return J>=h1.ZERO&&J<=h1.NINE}function iI(J){return J>=h1.UPPER_A&&J<=h1.UPPER_F||J>=h1.LOWER_A&&J<=h1.LOWER_F}function lI(J){return J>=h1.UPPER_A&&J<=h1.UPPER_Z||J>=h1.LOWER_A&&J<=h1.LOWER_Z||nj(J)}function $I(J){return J===h1.EQUALS||lI(J)}class ij{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=VY.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)|KD)===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(nj(Y)||iI(Y)){let G=Y<=h1.NINE?Y-h1.ZERO:(Y|KD)-h1.LOWER_A+10;this.result=this.result*16+G,this.consumed++,z++}else return this.emitNumericEntity(Y,3)}return-1}stateNumericDecimal(J,z){while(z<J.length){let Y=J.charCodeAt(z);if(nj(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===VY.Strict)return 0;if(this.emitCodePoint(fD(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,G=Y[this.treeIndex],X=(G&KJ.VALUE_LENGTH)>>14;while(z<J.length){if(X===0&&(G&KJ.FLAG13)!==0){let Q=(G&KJ.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let f=G&KJ.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),G=Y[this.treeIndex],X=(G&KJ.VALUE_LENGTH)>>14}if(z>=J.length)break;let Z=J.charCodeAt(z);if(Z===h1.SEMI&&X!==0&&(G&KJ.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,X,this.consumed+this.excess);if(this.treeIndex=_I(Y,G,this.treeIndex+Math.max(1,X),Z),this.treeIndex<0)return this.result===0||this.decodeMode===VY.Attribute&&(X===0||$I(Z))?0:this.emitNotTerminatedNamedEntity();if(G=Y[this.treeIndex],X=(G&KJ.VALUE_LENGTH)>>14,X!==0){if(Z===h1.SEMI)return this.emitNamedEntityData(this.treeIndex,X,this.consumed+this.excess);if(this.decodeMode!==VY.Strict&&(G&KJ.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,G=(Y[z]&KJ.VALUE_LENGTH)>>14;return this.emitNamedEntityData(z,G,this.consumed),(J=this.errors)===null||J===void 0||J.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(J,z,Y){let{decodeTree:G}=this;if(this.emitCodePoint(z===1?G[J]&~(KJ.VALUE_LENGTH|KJ.FLAG13):G[J+1],Y),z===3)this.emitCodePoint(G[J+2],Y);return Y}end(){var J;switch(this.state){case YJ.NamedEntity:return this.result!==0&&(this.decodeMode!==VY.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 aI(J){let z="",Y=new ij(J,(G)=>z+=qD(G));return function(X,Z){let Q=0,f=0;while((f=X.indexOf("&",f))>=0){z+=X.slice(Q,f),Y.startEntity(Z);let B=Y.write(X,f+1);if(B<0){Q=f+Y.end();break}Q=f+B,f=B===0?Q+1:Q}let H=z+X.slice(Q);return z="",H}}function _I(J,z,Y,G){let X=(z&KJ.BRANCH_LENGTH)>>7,Z=z&KJ.JUMP_TABLE;if(X===0)return Z!==0&&G===Z?Y:-1;if(Z){let B=G-Z;return B<0||B>=X?-1:J[Y+B]-1}let Q=X+1>>1,f=0,H=X-1;while(f<=H){let B=f+H>>>1,V=B>>1,K=J[Y+V]>>(B&1)*8&255;if(K<G)f=B+1;else if(K>G)H=B-1;else return J[Y+Q+B]}return-1}function EG(J,z=VY.Legacy){return pI(J,z)}var h1,KD=32,YJ,VY,pI;var UD=k(()=>{HD();WD();VD();(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"})(VY||(VY={}));pI=aI(jD)});var DD,LD;var FD=k(()=>{UD();(function(J){J[J.XML=0]="XML",J[J.HTML=1]="HTML"})(DD||(DD={}));(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"})(LD||(LD={}))});import{CliRenderer as oI,createCliRenderer as sI,engine as tI}from"@opentui/core";import{createTestRenderer as el}from"@opentui/core/testing";import{ASCIIFontRenderable as eI,BoxRenderable as Jy,CodeRenderable as zy,DiffRenderable as Yy,InputRenderable as Gy,LineNumberRenderable as Xy,MarkdownRenderable as Zy,ScrollBoxRenderable as Qy,SelectRenderable as qy,TabSelectRenderable as fy,TextareaRenderable as Hy,TextAttributes as lj,TextNodeRenderable as By,TextRenderable as jy}from"@opentui/core";import{engine as Y$,Timeline as G$}from"@opentui/core";import{BaseRenderable as ND,createTextAttributes as Vy,InputRenderable as $j,InputRenderableEvents as tZ,isTextNodeRenderable as pj,parseColor as OD,Renderable as Ky,RootTextNodeRenderable as Uy,ScrollBoxRenderable as Dy,SelectRenderable as AD,SelectRenderableEvents as aj,TabSelectRenderable as RD,TabSelectRenderableEvents as _j,TextNodeRenderable as Ly,TextRenderable as kD}from"@opentui/core";import{BaseRenderable as ky,isTextNodeRenderable as by,TextNodeRenderable as Sy,TextRenderable as Iy,Yoga as CD}from"@opentui/core";import{BoxRenderable as V$,RootRenderable as K$}from"@opentui/core";import{TimeToFirstDrawRenderable as xy}from"@opentui/core";import{createSlotRegistry as L$}from"@opentui/core";function Fy({createElement:J,createTextNode:z,createSlotNode:Y,isTextNode:G,replaceText:X,insertNode:Z,removeNode:Q,setProperty:f,getParentNode:H,getFirstChild:B,getNextSibling:V}){function j(S,N,M,I){if(M!==void 0&&!I)I=[];if(typeof N!=="function")return K(S,N,I,M);bz((r)=>K(S,N(),r,M),I)}function K(S,N,M,I,r){while(typeof M==="function")M=M();if(N===M)return M;let l=typeof N,e=I!==void 0;if(l==="string"||l==="number"){if(l==="number")N=N.toString();if(e){let J0=M[0];if(J0&&G(J0))X(J0,N);else J0=z(N);M=O(S,M,I,J0)}else if(M!==""&&typeof M==="string")X(B(S),M=N);else O(S,M,I,z(N)),M=N}else if(N==null||l==="boolean")M=O(S,M,I);else if(l==="function")return bz(()=>{let J0=N();while(typeof J0==="function")J0=J0();M=K(S,J0,M,I)}),()=>M;else if(Array.isArray(N)){let J0=[];if(L(J0,N,r))return bz(()=>M=K(S,J0,M,I,!0)),()=>M;if(J0.length===0){let T=O(S,M,I);if(e)return M=T}else if(Array.isArray(M))if(M.length===0)g(S,J0,I);else A(S,M,J0);else if(M==null||M==="")g(S,J0);else A(S,e&&M||[B(S)],J0);M=J0}else{if(Array.isArray(M)){if(e)return M=O(S,M,I,N);O(S,M,null,N)}else if(M==null||M===""||!B(S))Z(S,N);else x(S,N,B(S));M=N}return M}function L(S,N,M){let I=!1;for(let r=0,l=N.length;r<l;r++){let e=N[r],J0;if(e==null||e===!0||e===!1);else if(Array.isArray(e))I=L(S,e)||I;else if((J0=typeof e)==="string"||J0==="number")S.push(z(e));else if(J0==="function")if(M){while(typeof e==="function")e=e();I=L(S,Array.isArray(e)?e:[e])||I}else S.push(e),I=!0;else S.push(e)}return I}function A(S,N,M){let I=M.length,r=N.length,l=I,e=0,J0=0,T=V(N[r-1]),q0=null;while(e<r||J0<l){if(N[e]===M[J0]){e++,J0++;continue}while(N[r-1]===M[l-1])r--,l--;if(r===e){let p=l<I?J0?V(M[J0-1]):M[l-J0]:T;while(J0<l)Z(S,M[J0++],p)}else if(l===J0)while(e<r){if(!q0||!q0.has(N[e]))Q(S,N[e]);e++}else if(N[e]===M[l-1]&&M[J0]===N[r-1]){let p=V(N[--r]);Z(S,M[J0++],V(N[e++])),Z(S,M[--l],p),N[r]=M[l]}else{if(!q0){q0=new Map;let j0=J0;while(j0<l)q0.set(M[j0],j0++)}let p=q0.get(N[e]);if(p!=null)if(J0<p&&p<l){let j0=e,F0=1,V0;while(++j0<r&&j0<l){if((V0=q0.get(N[j0]))==null||V0!==p+F0)break;F0++}if(F0>p-J0){let t=N[e];while(J0<p)Z(S,M[J0++],t)}else x(S,M[J0++],N[e++])}else e++;else Q(S,N[e++])}}}function O(S,N,M,I){if(M===void 0){let l;while(l=B(S))Q(S,l);return I&&Z(S,I),I??""}let r=I||Y();if(N.length){let l=!1;for(let e=N.length-1;e>=0;e--){let J0=N[e];if(r!==J0){let T=H(J0)===S;if(!l&&!e)T?x(S,r,J0):Z(S,r,M);else T&&Q(S,J0)}else l=!0}}else Z(S,r,M);return[r]}function g(S,N,M){for(let I=0,r=N.length;I<r;I++)Z(S,N[I],M)}function x(S,N,M){Z(S,N,M),Q(S,M)}function _(S,N,M={},I){if(N||(N={}),!I)bz(()=>M.children=K(S,N.children,M.children));return bz(()=>N.ref&&N.ref(S)),bz(()=>{for(let r in N){if(r==="children"||r==="ref")continue;let l=N[r];if(l===M[r])continue;f(S,r,l,M[r]),M[r]=l}}),M}return{render(S,N){let M;return KG((I)=>{M=I,j(N,S())}),M},insert:j,spread(S,N,M){if(typeof N==="function")bz((I)=>_(S,N(),I,M));else _(S,N,void 0,M)},createElement:J,createTextNode:z,insertNode:Z,setProp(S,N,M,I){return f(S,N,M,I),M},mergeProps:Fq,effect:bz,memo:My,createComponent:OV,use(S,N,M){return _1(()=>S(N,M))}}}function Oy(J){let z=Fy(J);return z.mergeProps=Fq,z}function ej(J){if(!ef.has(J))ef.set(J,0);let z=ef.get(J)+1;return ef.set(J,z),`${J}-${z}`}function Ay(J,z,Y){if(GJ("Inserting node:",s1(z),"into parent:",s1(J),"with anchor:",s1(Y),z instanceof nX),z instanceof eZ)z.parent=J,z=z.getSlotChild(J);if(Y&&Y instanceof eZ)Y=Y.getSlotChild(J);if(pj(z)){if(!(J instanceof kD)&&!pj(J))throw Error(`Orphan text error: "${z.toChunks().map((Z)=>Z.text).join("")}" must have a <text> as a parent: ${J.id} above ${z.id}`)}if(!(J instanceof ND))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 G=rj(J),X=G.findIndex((Z)=>Z.id===Y.id);if(X===-1)GJ("[INSERT]","Could not find anchor",s1(J),s1(Y),"[children]",...G.map((Z)=>Z.id));J.add(z,X)}function Ry(J,z){if(GJ("Removing node:",s1(z),"from parent:",s1(J)),z instanceof eZ)z.parent=null,z=z.getSlotChild(J);J.remove(z.id),process.nextTick(()=>{if(z instanceof ND&&!z.parent){z.destroyRecursively();return}})}function gy(J){GJ("Creating text node:",J);let z=ej("text-node");if(typeof J==="number")J=J.toString();return nX.fromString(EG(J),{id:z})}function Cy(){let J=ej("slot-node");return GJ("Creating slot node",J),new eZ(J)}function gD(J){GJ("Getting parent of node:",s1(J));let z=J.parent??void 0;if(z instanceof Uy)z=z.textParent??void 0;let Y=z?.parent?.parent?.parent;if(Y instanceof Dy&&Y.content===z)z=Y;return z}function Ty(J){Object.assign(xD,J)}function uy(){return xD}var tj,HJ=()=>{let J=EJ(tj);if(!J)throw Error("No renderer found");return J},Wy=(J)=>{let z=HJ();JJ(()=>{z.on("resize",J)}),N1(()=>{z.off("resize",J)})},Pz=()=>{let J=HJ(),[z,Y]=a({width:J.width,height:J.height});return Wy((X,Z)=>{Y({width:X,height:Z})}),z},My=(J)=>K0(()=>J()),ef,GJ=(...J)=>{if(process.env.DEBUG)console.log("[Reconciler]",...J)},nX,s1=(J)=>{if(!J)return;return J.id},rj=(J)=>{let z;if(J instanceof kD)z=J.getTextChildren();else z=J.getChildren();return z},Ny,u,u0,b,W,E0,D,U,B$,q,bD,hz,J9,SD,ID,eZ,JQ,JH,oj,sj,yD,TD,uD,yy,xD,Ey=(J,z)=>{let Y,G=!1,X=!1,Z=!0,Q=!1,f=J.destroy.bind(J),H=()=>{if(X)return;if(!Y){G=!0;return}X=!0,Y()};J.once("destroy",H),J.destroy=()=>{if(Z){Q=!0;return}f()};try{Y=Ny(()=>b(tj.Provider,{get value(){return J},get children(){return b(z,{})}}),J.root)}finally{Z=!1,J.destroy=f}if(G)H();if(Q)f()},ED=async(J,z={})=>{let Y=z instanceof oI?z:await sI({...z,onDestroy:()=>{z.onDestroy?.()}});tI.attach(Y),Ey(Y,J)};var P=k(()=>{W1();FD();W1();W1();W1();tj=Sz();ef=new Map;nX=class nX extends Ly{static fromString(J,z={}){let Y=new nX(z);return Y.add(J),Y}};({render:Ny,effect:u,memo:u0,createComponent:b,createElement:W,createTextNode:E0,insertNode:D,insert:U,spread:B$,setProp:q,mergeProps:bD,use:hz}=Oy({createElement(J){GJ("Creating element:",J);let z=ej(J),Y=EJ(tj);if(!Y)throw Error("No renderer found");let G=uy();if(!G[J])throw Error(`[Reconciler] Unknown component type: ${J}`);let X=new G[J](Y,{id:z});return GJ("Element created with id:",z),X},createTextNode:gy,createSlotNode:Cy,replaceText(J,z){if(GJ("Replacing text:",z,"in node:",s1(J)),!(J instanceof nX))return;J.replace(EG(z),0)},setProperty(J,z,Y,G){if(z.startsWith("on:")){let X=z.slice(3);if(Y)J.on(X,Y);if(G)J.off(X,G);return}if(pj(J)){if(z==="href"){J.link={url:Y};return}if(z==="style"){J.attributes|=Vy(Y),J.fg=Y.fg?OD(Y.fg):J.fg,J.bg=Y.bg?OD(Y.bg):J.bg;return}return}switch(z){case"id":GJ("Id mapped",J.id,"=",Y),J[z]=Y;break;case"focused":if(!(J instanceof Ky))return;if(Y)J.focus();else J.blur();break;case"onChange":let X=void 0;if(J instanceof AD)X=aj.SELECTION_CHANGED;else if(J instanceof RD)X=_j.SELECTION_CHANGED;else if(J instanceof $j)X=tZ.CHANGE;if(!X)break;if(Y)J.on(X,Y);if(G)J.off(X,G);break;case"onInput":if(J instanceof $j){if(Y)J.on(tZ.INPUT,Y);if(G)J.off(tZ.INPUT,G)}break;case"onSubmit":if(J instanceof $j){if(Y)J.on(tZ.ENTER,Y);if(G)J.off(tZ.ENTER,G)}else J[z]=Y;break;case"onSelect":if(J instanceof AD){if(Y)J.on(aj.ITEM_SELECTED,Y);if(G)J.off(aj.ITEM_SELECTED,G)}else if(J instanceof RD){if(Y)J.on(_j.ITEM_SELECTED,Y);if(G)J.off(_j.ITEM_SELECTED,G)}break;case"style":for(let Z in Y){let Q=Y[Z];if(G!==void 0&&Q===G[Z])continue;J[Z]=Q}break;case"text":case"content":{let Z=typeof Y==="string"?Y:Array.isArray(Y)?Y.join(""):`${Y}`;J[z]=EG(Z);break}default:J[z]=Y}},isTextNode(J){return J instanceof nX},insertNode:Ay,removeNode:Ry,getParentNode:gD,getFirstChild(J){GJ("Getting first child of node:",s1(J));let z=rj(J)[0];if(!z){GJ("No first child found for node:",s1(J));return}return GJ("First child found:",s1(z),"for node:",s1(J)),z},getNextSibling(J){GJ("Getting next sibling of node:",s1(J));let z=gD(J);if(!z){GJ("No parent found for node:",s1(J));return}let Y=rj(z),G=Y.indexOf(J);if(G===-1||G===Y.length-1){GJ("No next sibling found for node:",s1(J));return}let X=Y[G+1];if(!X){GJ("Next sibling is null for node:",s1(J));return}return GJ("Next sibling found:",s1(X),"for node:",s1(J)),X}}));J9=class J9 extends ky{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}};SD=class SD extends Sy{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()}};ID=class ID extends J9{yogaNode;slotParent;destroyed=!1;constructor(J,z){super(J);this._visible=!1,this.slotParent=z,this.yogaNode=CD.default.Node.create(),this.yogaNode.setDisplay(CD.Display.None)}getLayoutNode(){return this.yogaNode}updateFromLayout(){}updateLayout(){}onRemove(){}destroy(){if(this.destroyed)return;this.destroyed=!0,super.destroy(),this.slotParent?.destroy()}};eZ=class eZ extends J9{layoutNode;textNode;destroyed=!1;constructor(J){super(J);this._visible=!1}getSlotChild(J){if(by(J)||J instanceof Iy){if(!this.textNode)this.textNode=new SD(`slot-text-${this.id}`,this);return this.textNode}if(!this.layoutNode)this.layoutNode=new ID(`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()}};JQ=class JQ extends By{_ctx;constructor(J,z){super(z);this._ctx=J}};JH=class JH extends JQ{constructor(J,z){super(null,J);if(z==="b"||z==="strong")this.attributes=(this.attributes||0)|lj.BOLD;else if(z==="i"||z==="em")this.attributes=(this.attributes||0)|lj.ITALIC;else if(z==="u")this.attributes=(this.attributes||0)|lj.UNDERLINE}};oj=class oj extends JH{constructor(J){super(J,"b")}};sj=class sj extends JH{constructor(J){super(J,"i")}};yD=class yD extends JH{constructor(J){super(J,"u")}};TD=class TD extends JQ{constructor(J,z){super(null,z);this.add()}add(){return super.add(`
|
|
262
|
+
`)}};uD=class uD extends JQ{constructor(J,z){let Y={...z,link:{url:z.href}};super(null,Y)}};yy={box:Jy,text:jy,input:Gy,select:qy,textarea:Hy,ascii_font:eI,tab_select:fy,scrollbox:Qy,code:zy,diff:Yy,line_number:Xy,markdown:Zy,span:JQ,strong:oj,b:oj,em:sj,i:sj,u:yD,br:TD,a:uD},xD={...yy};Ty({time_to_first_draw:xy})});function KY(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 wy(J){let z=J?.changes;if(!z||typeof z!=="object"||Array.isArray(z))return null;let Y=new Map;for(let[G,X]of Object.entries(z)){let Z=X;if(typeof Z?.added!=="number"||typeof Z.deleted!=="number")return null;Y.set(G,{added:Z.added,deleted:Z.deleted})}return Y}function Py(J,z){if(J.size!==z.size)return!1;for(let[Y,G]of J){let X=z.get(Y);if(!X||!wz(G,X))return!1}return!0}function hy(J){let z=J?.activity;if(!z||typeof z!=="object"||Array.isArray(z))return null;let Y=new Map;for(let[G,X]of Object.entries(z)){let Z=X;if(typeof Z?.mtimeMs!=="number"||typeof Z.completionAt!=="number")return null;if(Z.completionId!==null&&typeof Z.completionId!=="string")return null;Y.set(G,{mtimeMs:Z.mtimeMs,completionId:Z.completionId,completionAt:Z.completionAt})}return Y}function vy(J,z){if(J.size!==z.size)return!1;for(let[Y,G]of J){let X=z.get(Y);if(!X||X.mtimeMs!==G.mtimeMs||X.completionId!==G.completionId||X.completionAt!==G.completionAt)return!1}return!0}class UJ{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,G]=a([]),[X,Z]=a(null),[Q,f]=a(null),[H,B]=a(null),[V,j]=a(new Map),[K,L]=a(new Map),[A,O]=a(null),[g,x]=a(null),[_,S]=a(null),[N,M]=a(null),[I,r]=a("online");this.tasksAcc=Y,this.setTasks=(l)=>G(()=>l),this.activeTaskAcc=X,this.setActiveTaskSig=(l)=>Z(()=>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)=>O(()=>l),this.transcriptActivityAcc=g,this.setTranscriptActivitySig=(l)=>x(()=>l),this.uiPrefsAcc=_,this.setUiPrefsSig=(l)=>S(()=>l),this.keybindingsRevAcc=N,this.setKeybindingsRevSig=(l)=>M(()=>l),this.connectionStateAcc=I,this.setConnectionState=(l)=>r(()=>l),this.ensureReachable=z.ensureReachable??wX,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")sz("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(),sz("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:AY}),z=typeof J.protocolVersion==="number"?J.protocolVersion:lJ,Y=typeof J.minProtocolVersion==="number"?J.minProtocolVersion:z;if(!EQ({localVersion:lJ,localMin:AY,remoteVersion:z,remoteMin:Y}))throw Error(`kobe daemon is protocol v${z} (min v${Y}); this client is v${lJ} (min v${AY}). 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(zQ));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"),sz("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()=>dW(this.daemonVersionAcc()??void 0,o0)}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 KG((Y)=>{return s0(()=>{let G=this.tasksAcc();if(z){z=!1;return}try{J(G)}catch(X){console.error("[kobe RemoteOrchestrator] task listener threw:",X)}}),Y})}async createTask(J){let{modelEffort:z,...Y}=J,G=await this.client.request("task.create",{...Y,effort:z});return zQ(G.task)}async ensureMainTask(J){let z=await this.client.request("task.ensureMain",{repo:J});return zQ(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 zQ(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(zQ)),this.pruneEngineState(Y),this.pruneTaskJobs(Y);else o1("orch",`dropped task.snapshot event: tasks is not an array (got ${KY(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=${KY(Y?.taskId)}, state=${KY(Y?.state)})`);return}let G=new Map(this.engineStateAcc());if(Y.state==="idle")G.delete(Y.taskId);else G.set(Y.taskId,{state:Y.state,detail:Y.detail,at:typeof Y.at==="number"?Y.at:0});this.setEngineStateSig(G);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=${KY(Y?.taskId)}, kind=${KY(Y?.kind)})`);return}let G=this.taskJobsAcc();if(Y.phase==="running"){let X=new Map(G);X.set(Y.taskId,{kind:Y.kind}),this.setTaskJobsSig(X);return}if((Y.phase==="done"||Y.phase==="error")&&G.has(Y.taskId)){let X=new Map(G);X.delete(Y.taskId),this.setTaskJobsSig(X)}return}if(J==="worktree.changes"){let Y=wy(z);if(!Y){o1("orch",`dropped worktree.changes event: malformed changes payload (${KY(z)})`);return}let G=this.worktreeChangesAcc();if(G&&Py(G,Y))return;this.setWorktreeChangesSig(Y);return}if(J==="transcript.activity"){let Y=hy(z);if(!Y){o1("orch",`dropped transcript.activity event: malformed activity payload (${KY(z)})`);return}let G=this.transcriptActivityAcc();if(G&&vy(G,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 ${KY(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 ${KY(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((X)=>X.id)),G=null;for(let X of z.keys()){if(Y.has(X))continue;if(!G)G=new Map(z);G.delete(X)}if(G)this.setEngineStateSig(G)}pruneTaskJobs(J){let z=this.taskJobsAcc();if(z.size===0)return;let Y=new Set(J.map((X)=>X.id)),G=null;for(let X of z.keys()){if(Y.has(X))continue;if(!G)G=new Map(z);G.delete(X)}if(G)this.setTaskJobsSig(G)}}function zQ(J){return{id:KZ(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 aY=k(()=>{ZG();AJ();GG();W1();uX();pJ();FJ()});function hD(J){let z=J[Hz];if(!z){if(Object.defineProperty(J,Hz,{value:z=new Proxy(J,dy)}),!Array.isArray(J)){let Y=Object.keys(J),G=Object.getOwnPropertyDescriptors(J),X=Object.getPrototypeOf(J),Z=X!==null&&J!==null&&typeof J==="object"&&!Array.isArray(J)&&X!==Object.prototype;if(Z){let Q=Object.getOwnPropertyDescriptors(X);Y.push(...Object.keys(Q)),Object.assign(G,Q)}for(let Q=0,f=Y.length;Q<f;Q++){let H=Y[Q];if(Z&&H==="constructor")continue;if(G[H].get)Object.defineProperty(J,H,{configurable:!0,enumerable:G[H].enumerable,get:G[H].get.bind(z)})}}}return z}function zH(J){let z;return J!=null&&typeof J==="object"&&(J[Hz]||!(z=Object.getPrototypeOf(J))||z===Object.prototype||Array.isArray(J))}function GQ(J,z=new Set){let Y,G,X,Z;if(Y=J!=null&&J[z9])return Y;if(!zH(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(X=J[Q],(G=GQ(X,z))!==X)J[Q]=G}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(Z=Q[H],f[Z].get)continue;if(X=J[Z],(G=GQ(X,z))!==X)J[Z]=G}}return J}function YH(J,z){let Y=J[z];if(!Y)Object.defineProperty(J,z,{value:Y=Object.create(null)});return Y}function XQ(J,z,Y){if(J[z])return J[z];let[G,X]=a(Y,{equals:!1,internal:!0});return G.$=X,J[z]=G}function my(J,z){let Y=Reflect.getOwnPropertyDescriptor(J,z);if(!Y||Y.get||!Y.configurable||z===Hz||z===iX)return Y;return delete Y.value,delete Y.writable,Y.get=()=>J[Hz][z],Y}function vD(J){Mq()&&XQ(YH(J,iX),PD)()}function cy(J){return vD(J),Reflect.ownKeys(J)}function GH(J,z,Y,G=!1){if(z==="__proto__"){console.warn('Refusing to set "__proto__" on a store.');return}if(!G&&J[z]===Y)return;let X=J[z],Z=J.length;if(wD.onStoreNodeUpdate&&wD.onStoreNodeUpdate(J,z,Y,X),Y===void 0){if(delete J[z],J[UY]&&J[UY][z]&&X!==void 0)J[UY][z].$()}else if(J[z]=Y,J[UY]&&J[UY][z]&&X===void 0)J[UY][z].$();let Q=YH(J,iX),f;if(f=XQ(Q,z,X))f.$(()=>Y);if(Array.isArray(J)&&J.length!==Z){for(let H=J.length;H<Z;H++)(f=Q[H])&&f.$();(f=XQ(Q,"length",Z))&&f.$(J.length)}(f=Q[PD])&&f.$()}function mD(J,z){let Y=Object.keys(z);for(let G=0;G<Y.length;G+=1){let X=Y[G];if(cD(X))continue;GH(J,X,z[X])}}function cD(J){return J==="__proto__"||J==="constructor"||J==="prototype"}function ny(J,z){if(typeof z==="function")z=z(J);if(z=GQ(z),Array.isArray(z)){if(J===z)return;let Y=0,G=z.length;for(;Y<G;Y++){let X=z[Y];if(J[Y]!==X)GH(J,Y,X)}GH(J,"length",G)}else mD(J,z)}function YQ(J,z,Y=[]){let G,X=J;if(z.length>1){G=z.shift();let Q=typeof G,f=Array.isArray(J);if(Q==="string"&&(G==="__proto__"||z.length>1&&cD(G))){console.warn(`Refusing to traverse unsafe key "${G}" on a store.`);return}if(Array.isArray(G)){for(let H=0;H<G.length;H++)YQ(J,[G[H]].concat(z),Y);return}else if(f&&Q==="function"){for(let H=0;H<J.length;H++)if(G(J[H],H))YQ(J,[H].concat(z),Y);return}else if(f&&Q==="object"){let{from:H=0,to:B=J.length-1,by:V=1}=G;for(let j=H;j<=B;j+=V)YQ(J,[j].concat(z),Y);return}else if(z.length>1){YQ(J[G],z,[G].concat(Y));return}X=J[G],Y=[G].concat(Y)}let Z=z[0];if(typeof Z==="function"){if(Z=Z(X,Y),Z===X)return}if(G===void 0&&Z==null)return;if(Z=GQ(Z),G===void 0||zH(X)&&zH(Z)&&!Array.isArray(Z))mD(X,Z);else GH(J,G,Z)}function vz(...[J,z]){let Y=GQ(J||{}),G=Array.isArray(Y);if(typeof Y!=="object"&&typeof Y!=="function")throw Error(`Unexpected type ${typeof Y} received when initializing 'createStore'. Expected an object.`);let X=hD(Y);RV.registerGraph({value:Y,name:z&&z.name});function Z(...Q){Lq(()=>{G&&Q.length===1?ny(Y,Q[0]):YQ(Y,Q)})}return[X,Z]}var z9,iX,UY,PD,wD,dy,S$;var lX=k(()=>{W1();z9=Symbol("store-raw"),iX=Symbol("store-node"),UY=Symbol("store-has"),PD=Symbol("store-self"),wD={onStoreNodeUpdate:null};dy={get(J,z,Y){if(z===z9)return J;if(z===Hz)return Y;if(z===Kq)return vD(J),Y;let G=YH(J,iX),X=G[z],Z=X?X():J[z];if(z===iX||z===UY||z==="__proto__")return Z;if(!X){let Q=Object.getOwnPropertyDescriptor(J,z);if(Mq()&&(typeof Z!=="function"||J.hasOwnProperty(z))&&!(Q&&Q.get))Z=XQ(G,z,Z)()}return zH(Z)?hD(Z):Z},has(J,z){if(z===z9||z===Hz||z===Kq||z===iX||z===UY||z==="__proto__")return!0;return Mq()&&XQ(YH(J,UY),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:cy,getOwnPropertyDescriptor:my};S$=Symbol("store-root")});function XH(J){let z=Sz();return{provider:(Y)=>{let G=J.init(Y);return b(X0,{get when(){return G.ready===void 0||G.ready===!0},get children(){return b(z.Provider,{value:G,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 Y9=k(()=>{P();P();W1()});import{RGBA as wG}from"@opentui/core";function ly(){return Object.keys(BJ.themes)}function ZQ(J){return Boolean(BJ.themes[J])}function X9(J,z){if(!J)return!1;if(!z||typeof z!=="object"||!z.theme)return!1;return PG("themes",{...BJ.themes,[J]:z}),!0}function G9(J,z="dark"){let Y=J.defs??{};function G(H,B=[]){if(typeof H==="string"){if(H==="transparent"||H==="none")return wG.fromInts(0,0,0,0);if(H.startsWith("#"))return wG.fromHex(H);if(B.includes(H))return wG.fromInts(0,0,0);let V=Y[H]??J.theme[H];if(V===void 0)return wG.fromInts(0,0,0);return G(V,[...B,H])}return G(H[z],B)}let X={};for(let[H,B]of Object.entries(J.theme))X[H]=G(B);let Z=X.text??wG.fromHex("#ffffff"),Q=X.background??wG.fromHex("#000000");return{...{primary:X.primary??Z,secondary:X.secondary??Z,accent:X.accent??X.primary??Z,error:X.error??Z,warning:X.warning??Z,success:X.success??Z,info:X.info??Z,text:Z,textMuted:X.textMuted??Z,background:Q,backgroundPanel:X.backgroundPanel??Q,backgroundElement:X.backgroundElement??Q,backgroundMenu:X.backgroundMenu??X.backgroundElement??Q,backgroundDialog:X.backgroundDialog??X.backgroundPanel??Q,border:X.border??Z,borderActive:X.borderActive??X.border??Z,borderSubtle:X.borderSubtle??X.border??Z,diffAdded:X.diffAdded??X.success??Z,diffRemoved:X.diffRemoved??X.error??Z,diffContext:X.diffContext??X.textMuted??Z,diffHunkHeader:X.diffHunkHeader??X.textMuted??Z,diffAddedBg:X.diffAddedBg??Q,diffRemovedBg:X.diffRemovedBg??Q,selectedListItemText:X.selectedListItemText??Q},...X}}var iy,hG,BJ,PG,i0,dD;var v1=k(()=>{P();W1();lX();Y9();$q();aq();_q();pq();rq();oq();sq();iy={claude:KX,conductor:UX,nord:LX,opencode:MX,dracula:DX,tokyonight:OX,"osaka-jade":FX},hG=["primary","success","info"],[BJ,PG]=vz({themes:{...iy},active:"claude",mode:"dark",transparentBackground:!1,focusAccent:"primary"});({use:i0,provider:dD}=XH({name:"Theme",init:(J)=>{if(J.mode)PG("mode",J.mode);if(J.theme&&ZQ(J.theme))PG("active",J.theme);let z=HJ(),Y=K0(()=>{let X=BJ.themes[BJ.active];if(X)return G9(X,BJ.mode);let Z=BJ.themes.claude??BJ.themes.opencode??Object.values(BJ.themes)[0];if(!Z)return G9({theme:{background:"#000000",text:"#ffffff"}},BJ.mode);return G9(Z,BJ.mode)}),G=K0(()=>{let X=Y(),Z=X[BJ.focusAccent]??X.primary,Q={...X,focusAccent:Z};if(!BJ.transparentBackground)return Q;let f=wG.fromInts(0,0,0,0);return{...Q,background:f,backgroundPanel:f}});return s0(()=>{z?.setBackgroundColor(G().background)}),{theme:new Proxy({},{get(X,Z){let Q=G();return Q[Z]??Q.text}}),get selected(){return BJ.active},get transparentBackground(){return BJ.transparentBackground},get focusAccent(){return BJ.focusAccent},mode(){return BJ.mode},set(X){if(!ZQ(X))return!1;return PG("active",X),!0},setMode(X){PG("mode",X)},setTransparentBackground(X){PG("transparentBackground",X)},setFocusAccent(X){PG("focusAccent",X)},all(){return ly()},has(X){return ZQ(X)}}}}))});var nD,iD;var lD=k(()=>{nD={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"}},iD={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 $D,aD;var _D=k(()=>{$D={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"}},aD={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 pD,rD;var oD=k(()=>{pD={title:"kobe \u2014 keybindings",esc:"esc"},rD={title:"kobe \u2014 \u5FEB\u6377\u952E",esc:"esc"}});var sD,tD;var eD=k(()=>{sD={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)"}},tD={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 JL,zL;var YL=k(()=>{JL={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"}},zL={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 GL,XL;var ZL=k(()=>{GL={badge:{newActivity:"\u25CF new"},preview:{diffVsHead:"diff vs HEAD",file:"file",closeHint:"\xB7 q to close",loading:"loading\u2026"}},XL={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 QL,qL;var fL=k(()=>{QL={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"},qL={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 HL,BL;var jL=k(()=>{HL={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 sends on 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 for a new line \xB7 tab to Send)",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)"}},BL={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 \u5728\u53D1\u9001\u9879\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 \u6362\u884C \xB7 tab \u8DF3\u5230\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 WL,VL;var KL=k(()=>{WL={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}"}},VL={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 UL,DL;var LL=k(()=>{UL={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`"}},DL={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 QQ(J){return typeof J==="string"&&vG.some((z)=>z.id===J)}var $y,ay,vG,$X,aX="en";var _X=k(()=>{lD();_D();oD();eD();YL();ZL();fL();jL();KL();LL();$y={settings:HL,tasks:WL,files:$D,newTask:JL,ops:GL,update:UL,quickTask:QL,help:pD,common:nD,keys:sD},ay={settings:BL,tasks:VL,files:aD,newTask:zL,ops:XL,update:DL,quickTask:qL,help:rD,common:iD,keys:tD},vG=[{id:"en",label:"English"},{id:"zh",label:"\u4E2D\u6587"}],$X={en:$y,zh:ay}});function qQ(J){if($X[J])_y("lang",J)}function Q9(){return Z9.lang}function ML(J,z){let Y=J;for(let G of z.split("."))if(Y&&typeof Y==="object"&&G in Y)Y=Y[G];else return;return typeof Y==="string"?Y:void 0}function py(J,z){if(!z)return J;return J.replace(/\{(\w+)\}/g,(Y,G)=>(G in z)?String(z[G]):Y)}function F(J,z){let Y=Z9.lang,G=ML($X[Y],J)??ML($X.en,J)??J;return py(G,z)}function q9(J,z){let Y=Z9.lang,G=(X)=>{return X.keys[J]?.[z]};return G($X[Y])??G($X.en)??z}var Z9,_y;var XJ=k(()=>{lX();_X();_X();[Z9,_y]=vz({lang:aX})});function ry(J){let z=[],Y=J.name;if(Y)z.push(Y);if(Y==="return")z.push("enter");if(Y==="enter")z.push("return");let G=[];if(J.ctrl)G.push("ctrl");if(J.meta)G.push("cmd");if(J.option)G.push("alt");if(J.shift&&Y&&Y.length>1)G.push("shift");if(G.length===0)return z;let X=`${G.join("+")}+`;return z.map((Z)=>X+Z)}function H9(J,z){if(z.defaultPrevented)return!1;if(f9)return!1;let Y=J.slice(),G=ry(z);f9=!0;try{for(let X=Y.length-1;X>=0;X--){let Z=Y[X];if(!Z)continue;let Q=Z.config();if(Q.enabled===!1)continue;let f=Q.bindings.find((H)=>G.includes(H.key));if(f)return f.cmd(z,f.slot),z.preventDefault(),!0}return!1}finally{f9=!1}}var f9=!1;function sy(){if(B9)return;let J=HJ();if(!J)throw Error("useBindings: no renderer in scope; call inside a component rendered by @opentui/solid.");B9=J.keyInput,FL=(z)=>{H9(ZH,z)},B9.on("keypress",FL)}function D1(J){sy();let z=oy++,Y={config:J,id:z};s0(()=>{J()}),ZH.push(Y),N1(()=>{let G=ZH.findIndex((X)=>X.id===z);if(G>=0)ZH.splice(G,1)})}var oy=1,ZH,B9=null,FL=null;var uJ=k(()=>{P();W1();ZH=[]});function QH(){let J=new Set;function z(G,X){let Z=setTimeout(()=>{J.delete(Z),G()},X);return J.add(Z),Z}function Y(G){if(J.delete(G))clearTimeout(G)}return N1(()=>{for(let G of J)clearTimeout(G);J.clear()}),{set:z,clear:Y}}var j9=k(()=>{W1()});import{RGBA as OL}from"@opentui/core";function JT(J){let z=Pz(),Y=i0(),{theme:G}=Y,X=HJ(),Z=!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",()=>{Z=!!X?.getSelection()}),q(B,"onMouseUp",()=>{if(Z){Z=!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)=>{Z=!1,j.stopPropagation()}),q(V,"flexShrink",1),q(V,"flexGrow",0),q(V,"paddingTop",1),U(V,()=>J.children),u((j)=>{var K=z().width,L=z().height,A=Y.transparentBackground?ey:ty,O=Q(),g=z().width-2,x=H(),_=G.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)),O!==j.o&&(j.o=q(V,"width",O,j.o)),g!==j.i&&(j.i=q(V,"maxWidth",g,j.i)),x!==j.n&&(j.n=q(V,"maxHeight",x,j.n)),_!==j.s&&(j.s=q(V,"backgroundColor",_,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 zT(){let[J,z]=vz({stack:[],size:"medium"}),Y=HJ(),G=null,X=QH();function Z(){X.set(()=>{if(!G)return;if(G.isDestroyed)return;function Q(H){for(let B of H.getChildren()){if(B===G)return!0;if(Q(B))return!0}return!1}let f=Y?.root;if(!f)return;if(!Q(f))return;G.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)),Z()}},{key:"ctrl+c",cmd:()=>{if(Y?.getSelection())Y.clearSelection();J.stack.at(-1)?.onClose?.(),z("stack",J.stack.slice(0,-1)),Z()}}]})),{clear(){for(let Q of J.stack)Q.onClose?.();Lq(()=>{z("size","medium"),z("stack",[])}),Z()},replace(Q,f){if(J.stack.length===0)G=Y?.currentFocusedRenderable??null,G?.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)G=Y?.currentFocusedRenderable??null,G?.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)Z()},get stack(){return J.stack},get size(){return J.size},setSize(Q){z("size",Q)}}}function RL(J){let z=zT();return b(AL.Provider,{value:z,get children(){return[u0(()=>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(JT,{onClose:()=>z.clear(),get size(){return z.size},get children(){return z.stack.at(-1).element()}})}})),Y})()]}})}function c1(){let J=EJ(AL);if(!J)throw Error("useDialog must be used within a DialogProvider");return J}var ty,ey,AL;var dJ=k(()=>{P();P();P();P();P();P();P();P();W1();lX();v1();uJ();j9();ty=OL.fromInts(0,0,0,128),ey=OL.fromInts(0,0,0,64);AL=Sz()});import{spawnSync as W9}from"child_process";import*as CL from"fs";function gL(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 NL(J){let z=J.trim();if(!z)return"repo path is required";let Y;try{Y=CL.statSync(z)}catch{return`path does not exist: ${z}`}if(!Y.isDirectory())return`not a directory: ${z}`;try{if(W9("git",["rev-parse","--git-dir"],{cwd:z,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]}).status!==0)return gL(z)}catch{return gL(z)}return null}function fQ(J){if(!J)return null;try{let z=W9("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 kL(J){if(!J)return[];try{let z=W9("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,G)=>{let X=(f)=>f==="main"?0:f==="master"?1:f==="develop"?2:3,Z=X(Y),Q=X(G);if(Z!==Q)return Z-Q;return Y.localeCompare(G)})}catch{return[]}}var Rz="main";var qH=()=>{};import*as bL from"fs";import*as fH from"os";function DJ(J){if(J==="~")return fH.homedir();if(J.startsWith("~/"))return fH.homedir()+J.slice(1);return J}function V9(J){if(!J)return{base:"",filter:""};let Y=DJ(J==="~"?"~/":J);if(Y.endsWith("/"))return{base:Y,filter:""};let G=Y.lastIndexOf("/");if(G===-1)return{base:"",filter:Y};return{base:Y.slice(0,G+1),filter:Y.slice(G+1)}}function K9(J){if(!J)return[];try{let z=bL.readdirSync(J,{withFileTypes:!0}),Y=[];for(let G of z)if(G.isDirectory())Y.push(G.name);return Y.sort((G,X)=>G.localeCompare(X))}catch{return[]}}function U9(J,z){let Y=z.toLowerCase(),X=Y.startsWith(".")?J:J.filter((Z)=>!Z.startsWith("."));if(!Y)return X;return X.filter((Z)=>Z.toLowerCase().startsWith(Y))}function HQ(J,z,Y){let G=z+Y;if(J.startsWith("~")){let X=fH.homedir();if(G===X)return"~";if(G.startsWith(`${X}/`))return`~${G.slice(X.length)}`}return G}var HH=()=>{};import{spawn as YT}from"child_process";import*as mG from"fs";import*as BQ from"path";function SL(J){let z=J.trim().replace(/\/+$/,"");if(!z)return"";let Y=z.lastIndexOf("/"),G=z.lastIndexOf(":"),X=Math.max(Y,G);return(X>=0?z.slice(X+1):z).replace(/\.git$/i,"")}function IL(J){let z=J.trim();if(!z)return F("newTask.error.gitUrlRequired");let Y=z.includes("://"),G=z.includes("@")&&z.includes(":"),X=z.includes("/");if(!Y&&!G&&!X)return F("newTask.error.gitUrlInvalid",{url:z});return null}function yL(J,z){let Y=z.trim();if(!Y)return F("newTask.error.folderRequired");if(Y.includes("/")||Y.includes("\\"))return F("newTask.error.folderHasSeparator");let G=J.trim();if(!G)return F("newTask.error.parentRequired");let X=DJ(G),Z;try{Z=mG.statSync(X)}catch{return F("newTask.error.parentNotFound",{path:X})}if(!Z.isDirectory())return F("newTask.error.parentNotDir",{path:X});let Q=BQ.join(X,Y);if(mG.existsSync(Q))return F("newTask.error.targetExists",{path:Q});return null}function TL(J,z){return BQ.join(DJ(J.trim()),z.trim())}function uL(J,z){let Y=z.trim();if(!Y)return z;let G=DJ(J.trim());if(!G)return z;try{if(!mG.statSync(G).isDirectory())return z}catch{return z}if(!mG.existsSync(BQ.join(G,Y)))return Y;for(let X=2;X<1000;X++){let Z=`${Y}-${X}`;if(!mG.existsSync(BQ.join(G,Z)))return Z}return Y}function xL(J,z,Y){return new Promise((G)=>{let X="";try{let Z=YT("git",["clone","--progress",J,z],{stdio:["ignore","ignore","pipe"]});Z.stderr?.setEncoding("utf-8"),Z.stderr?.on("data",(Q)=>{if(X+=Q,Y){let f=Q.split(/[\r\n]+/).filter((B)=>B.trim().length>0),H=f[f.length-1];if(H)Y(H)}}),Z.on("error",(Q)=>{G({ok:!1,error:Q.message})}),Z.on("close",(Q)=>{if(Q===0){G({ok:!0,path:z});return}let f=X.split(/[\r\n]+/).filter((H)=>H.trim().length>0).pop()??`git clone exited with ${Q}`;G({ok:!1,error:f})})}catch(Z){G({ok:!1,error:Z instanceof Error?Z.message:String(Z)})}})}var EL=k(()=>{XJ();HH()});function D9(J){if(J==="existing")return"clone";if(J==="clone")return"adopt";return"existing"}function L9(J){if(J==="existing")return"adopt";if(J==="clone")return"existing";return"clone"}function wL(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 LJ(J){return J.replace(/[\r\n]+/g,"")}function jQ(J){return!/\S/u.test(J)}function M9(J,z="existing"){if(J==="confirm")return"tabs";if(J==="tabs")return"engine";if(J==="engine")return F9(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 F9(J){if(J==="clone")return"cloneUrl";if(J==="adopt")return"adoptFilter";return"repo"}function PL(J,z){let Y=z.trim();if(!Y)return J;return J.filter((G)=>CQ(Y,G.path))}function hL(J,z){let Y=new Set,G=[];for(let X of[J,...z]){let Z=X.trim();if(!Z||Y.has(Z))continue;Y.add(Z),G.push(Z)}return G}function vL(J,z){let Y=z.trim().toLowerCase();if(!Y)return J;return J.filter((G)=>G.toLowerCase().includes(Y))}function mL(J,z){let Y=z.trim().toLowerCase();if(!Y)return J;return J.filter((G)=>G.toLowerCase().includes(Y))}function WQ(J,z,Y=GT){let G=J.length;if(G<=Y)return{items:J,start:0,total:G};let X=Math.floor(Y/2),Z=Math.max(0,z-X);if(Z+Y>G)Z=G-Y;return{items:J.slice(Z,Z+Y),start:Z,total:G}}function mz(J,z){if(z<=0)return 0;return Math.max(0,Math.min(z-1,J))}function cL(J,z,Y){let G=z[Y];if(G)return G;return J.trim()||Rz}var GT=8;var O9=k(()=>{TH();qH()});import{TextAttributes as Jz}from"@opentui/core";function dL(J){let z=c1(),{theme:Y}=i0(),[G,X]=a("existing"),Z=()=>{let d=J.availableVendors;return d&&d.length>0?d:l1},Q=(()=>{let d=Z(),Y0=J.defaultVendor??"claude";return d.includes(Y0)?Y0:d[0]??"claude"})(),[f,H]=a(Q),[B,V]=a("tabs"),[j,K]=a(J.defaultRepo),[L,A]=a(fQ(DJ(J.defaultRepo.trim()))??Rz),[O,g]=a(!1),[x,_]=a(""),[S,N]=a(J.defaultCloneParent?.trim()?J.defaultCloneParent:"~/"),[M,I]=a(""),[r,l]=a(!1),[e,J0]=a(Rz),[T,q0]=a(!1),[p,j0]=a(""),F0=K0(()=>hL(J.defaultRepo,J.savedRepos)),V0=K0(()=>wL(j(),F0())),t=K0(()=>V9(j())),h=K0(()=>K9(t().base)),C=K0(()=>U9(h(),t().filter)),o=K0(()=>vL(F0(),j())),E=K0(()=>V0()==="browse"?C():o()),[c,s]=a(0),Z0=K0(()=>WQ(E(),c())),[A0,h0]=a(!1),k0=K0(()=>kL(DJ(j().trim()))),C0=K0(()=>mL(k0(),L())),[y,L0]=a(0),Q0=K0(()=>WQ(C0(),y())),M0=K0(()=>V9(S())),T0=K0(()=>K9(M0().base)),X1=K0(()=>U9(T0(),M0().filter)),[z1,w0]=a(0),v0=K0(()=>WQ(X1(),z1())),[n,f0]=a(!1),[I0,r0]=a(""),[_0,p0]=a(0),[t0,C1]=a(new Set),[g1]=Dq(()=>G()==="adopt"?DJ(j().trim()):null,async(d)=>J.discoverAdoptable?await J.discoverAdoptable(d):[]),z0=K0(()=>PL(g1()??[],I0())),G0=K0(()=>WQ(z0().map((d)=>d.path),_0())),B0=K0(()=>{let d=G0();return z0().slice(d.start,d.start+d.items.length)});s0(()=>{z0(),p0((d)=>mz(d,z0().length))});function N0(d){C1((Y0)=>{let y0=new Set(Y0);if(y0.has(d))y0.delete(d);else y0.add(d);return y0})}function R(){let d=z0()[_0()];if(d)N0(d.path)}s0(()=>{C0(),L0(0)}),s0(()=>{let d=DJ(j().trim());if(!d)return;if(O())return;let Y0=fQ(d);if(Y0)A(Y0)}),s0(()=>{E(),s(0)}),s0(()=>{X1(),w0(0)}),s0(()=>{let d=x(),Y0=S();if(r())return;let y0=SL(d);I(uL(Y0,y0))});let[m0,U0]=a(null);s0(()=>{j(),x(),S(),M(),I0(),U0(null)});function x0(){let d=DJ(j().trim());if(!d)return;let Y0=NL(d);if(Y0){U0(Y0),V("repo");return}let y0=L().trim()||Rz;J.onSubmit({repo:d,baseRef:y0,vendor:f()}),z.clear()}async function W0(){if(T())return;let d=IL(x());if(d){U0(d),V("cloneUrl");return}let Y0=yL(S(),M());if(Y0){U0(Y0),V(M().trim()?"cloneParent":"cloneFolder");return}let y0=TL(S(),M());q0(!0),j0(F("newTask.clone.progressInto",{target:y0}));let S0=await xL(x().trim(),y0,(ZJ)=>{j0(ZJ)});if(q0(!1),!S0.ok){U0(F("newTask.error.cloneFailed",{error:S0.error})),V("cloneUrl");return}let jJ=e().trim()||Rz,MJ=DJ(S().trim());J.onSubmit({repo:S0.path,baseRef:jJ,vendor:f(),cloned:{parentDir:MJ}}),z.clear()}function D0(){let d=z0();if(d.length===0){U0(F("newTask.error.noAdoptable"));return}let Y0=t0(),y0=Y0.size>0?d.filter((S0)=>Y0.has(S0.path)):d.slice(_0(),_0()+1);if(y0.length===0)return;J.onSubmit({mode:"adopt",repo:DJ(j().trim()),vendor:f(),adopt:y0.map((S0)=>({worktreePath:S0.path,branch:S0.branch}))}),z.clear()}function g0(){if(G()==="clone"){W0();return}if(G()==="adopt"){D0();return}x0()}function J1(d){if(T())return;if(d===G())return;X(d),V(F9(d)),U0(null)}function Y1(d){if(T())return;let Y0=d===1?D9(G()):L9(G());if(Y0===G())return;X(Y0),U0(null),V("tabs")}function l0(d){H((Y0)=>d===1?OY(Z(),Y0):uH(Z(),Y0))}function u1(){if(!j().trim()&&V0()==="saved"){let Y0=E()[0];if(Y0){K(Y0),V("baseRef");return}}if(V0()==="browse"){let y0=C()[c()],S0=t();if(y0){K(HQ(j(),S0.base,y0)),s(0),h0(!0),V("baseRef");return}V("baseRef");return}let d=E()[c()];if(d){K(d),V("baseRef");return}V("baseRef")}function b0(d){let y0=E()[d];if(!y0)return;if(V0()==="browse"){let S0=t();K(HQ(j(),S0.base,y0)),s(d),h0(!0),V("baseRef");return}K(y0),s(d),V("baseRef")}function m1(){let Y0=X1()[z1()],y0=M0();if(Y0){N(HQ(S(),y0.base,Y0)),w0(0),f0(!0),V("cloneFolder");return}V("cloneFolder")}function v(d){let y0=X1()[d];if(!y0)return;let S0=M0();N(HQ(S(),S0.base,y0)),w0(d),f0(!0),V("cloneFolder")}let R0=()=>{let d=z0();if(d.length===0)return;let Y0=d.every((y0)=>t0().has(y0.path));C1(Y0?new Set:new Set(d.map((y0)=>y0.path)))};D1(()=>({bindings:[{key:"tab",cmd:()=>V((d)=>M9(d,G()))},{key:"ctrl+]",cmd:()=>J1(D9(G()))},{key:"ctrl+[",cmd:()=>J1(L9(G()))},{key:"ctrl+e",cmd:()=>H((d)=>OY(Z(),d))},{key:"up",cmd:()=>{if(T())return;if(G()==="existing"&&B()==="repo"){let d=E();if(d.length===0)return;s(mz(c()-1,d.length));return}if(G()==="existing"&&B()==="baseRef"){let d=C0();if(d.length===0)return;L0(mz(y()-1,d.length));return}if(G()==="clone"&&B()==="cloneParent"){let d=X1();if(d.length===0)return;w0(mz(z1()-1,d.length));return}if(G()==="adopt"){let d=z0();if(d.length===0)return;p0(mz(_0()-1,d.length))}}},{key:"down",cmd:()=>{if(T())return;if(G()==="existing"&&B()==="repo"){let d=E();if(d.length===0)return;s(mz(c()+1,d.length));return}if(G()==="existing"&&B()==="baseRef"){let d=C0();if(d.length===0)return;L0(mz(y()+1,d.length));return}if(G()==="clone"&&B()==="cloneParent"){let d=X1();if(d.length===0)return;w0(mz(z1()+1,d.length));return}if(G()==="adopt"){let d=z0();if(d.length===0)return;p0(mz(_0()+1,d.length))}}},...B()==="tabs"||B()==="engine"?[{key:"left",cmd:()=>B()==="tabs"?Y1(-1):l0(-1)},{key:"right",cmd:()=>B()==="tabs"?Y1(1):l0(1)},{key:"return",cmd:()=>V((d)=>M9(d,G()))}]:[],...G()==="adopt"?[{key:"ctrl+a",cmd:R0}]:[]]})),D1(()=>({enabled:B()==="confirm"&&!T(),bindings:[{key:"return",cmd:()=>g0()}]}));let V1=(d)=>B()===d?Y.primary:Y.textMuted,R1=(d)=>B()===d?Jz.BOLD|Jz.UNDERLINE:void 0,B1=(d,Y0)=>d?Y0?Jz.BOLD|Jz.UNDERLINE:Jz.BOLD:void 0;return(()=>{var d=W("box"),Y0=W("box"),y0=W("text"),S0=W("box"),jJ=W("box"),MJ=W("text"),ZJ=W("box"),nJ=W("box"),cz=W("text"),gJ=W("box"),dz=W("text"),MY=W("text");return D(d,Y0),D(d,S0),D(d,gJ),q(d,"paddingLeft",2),q(d,"paddingRight",2),q(d,"gap",0),D(Y0,y0),q(Y0,"flexDirection","row"),U(y0,()=>F("newTask.title")),D(S0,jJ),q(S0,"gap",1),q(S0,"paddingTop",1),q(S0,"paddingBottom",1),U(S0,()=>{let m=()=>B()==="tabs",i=($)=>$?Y.primary:Y.textMuted;return(()=>{var $=W("box"),w=W("text"),d0=W("text"),c0=W("text");return D($,w),D($,d0),D($,c0),q($,"flexDirection","row"),q($,"gap",2),q(w,"onMouseUp",()=>J1("existing")),U(w,(()=>{var O0=u0(()=>G()==="existing");return()=>O0()?`\u25B8 ${F("newTask.tabs.existing")}`:` ${F("newTask.tabs.existing")}`})()),q(d0,"onMouseUp",()=>J1("clone")),U(d0,(()=>{var O0=u0(()=>G()==="clone");return()=>O0()?`\u25B8 ${F("newTask.tabs.clone")}`:` ${F("newTask.tabs.clone")}`})()),q(c0,"onMouseUp",()=>J1("adopt")),U(c0,(()=>{var O0=u0(()=>G()==="adopt");return()=>O0()?`\u25B8 ${F("newTask.tabs.adopt")}`:` ${F("newTask.tabs.adopt")}`})()),u((O0)=>{var n0=i(G()==="existing"),f1=B1(G()==="existing",m()),L1=i(G()==="clone"),WJ=B1(G()==="clone",m()),Yz=i(G()==="adopt"),FY=B1(G()==="adopt",m());return n0!==O0.e&&(O0.e=q(w,"fg",n0,O0.e)),f1!==O0.t&&(O0.t=q(w,"attributes",f1,O0.t)),L1!==O0.a&&(O0.a=q(d0,"fg",L1,O0.a)),WJ!==O0.o&&(O0.o=q(d0,"attributes",WJ,O0.o)),Yz!==O0.i&&(O0.i=q(c0,"fg",Yz,O0.i)),FY!==O0.n&&(O0.n=q(c0,"attributes",FY,O0.n)),O0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),$})()},jJ),D(jJ,MJ),D(jJ,ZJ),q(jJ,"gap",0),U(MJ,()=>F("newTask.field.engine")),D(ZJ,nJ),D(ZJ,cz),q(ZJ,"flexDirection","row"),q(ZJ,"gap",2),U(ZJ,b(Q1,{get each(){return Z()},children:(m)=>{let i=()=>f()===m;return(()=>{var $=W("text");return q($,"onMouseUp",()=>H(m)),U($,()=>i()?"\u25B8 ":" ",null),U($,m,null),u((w)=>{var d0=i()?Y.primary:Y.textMuted,c0=i()?Jz.BOLD:void 0;return d0!==w.e&&(w.e=q($,"fg",d0,w.e)),c0!==w.t&&(w.t=q($,"attributes",c0,w.t)),w},{e:void 0,t:void 0}),$})()}}),nJ),q(nJ,"flexGrow",1),U(cz,()=>F("newTask.hint.engineCycle")),U(S0,b(X0,{get when(){return G()==="existing"},get children(){return[(()=>{var m=W("box"),i=W("text"),$=W("input");return D(m,i),D(m,$),q(m,"gap",0),U(i,()=>F("newTask.field.repo")),q($,"onInput",(w)=>{h0(!1),K(LJ(w))}),q($,"onSubmit",()=>{if(!j().trim())return;u1()}),u((w)=>{var d0=V1("repo"),c0=R1("repo"),O0=j(),n0=J.defaultRepo,f1=B()==="repo";return d0!==w.e&&(w.e=q(i,"fg",d0,w.e)),c0!==w.t&&(w.t=q(i,"attributes",c0,w.t)),O0!==w.a&&(w.a=q($,"value",O0,w.a)),n0!==w.o&&(w.o=q($,"placeholder",n0,w.o)),f1!==w.i&&(w.i=q($,"focused",f1,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),m})(),b(X0,{get when(){return u0(()=>B()==="repo"&&E().length>0)()&&!A0()},get children(){var m=W("box");return q(m,"gap",0),q(m,"paddingLeft",2),U(m,b(X0,{get when(){return Z0().start>0},get children(){var i=W("text");return q(i,"wrapMode","none"),U(i,()=>F("newTask.picker.moreAbove",{count:Z0().start})),u(($)=>q(i,"fg",Y.textMuted,$)),i}}),null),U(m,b(Q1,{get each(){return Z0().items},children:(i,$)=>{let w=()=>Z0().start+$(),d0=()=>w()===c(),c0=()=>V0()==="saved"&&i===J.defaultRepo,O0=()=>V0()==="saved"&&j().trim()===i,n0=()=>V0()==="browse"?"/":"",f1=()=>c0()?` ${F("newTask.hint.currentDir")}`:"";return(()=>{var L1=W("text");return q(L1,"wrapMode","none"),q(L1,"onMouseUp",()=>b0(w())),U(L1,()=>d0()?"\u25B8 ":" ",null),U(L1,i,null),U(L1,n0,null),U(L1,f1,null),u((WJ)=>{var Yz=d0()?Y.primary:O0()?Y.accent:Y.textMuted,FY=d0()?Jz.BOLD:void 0;return Yz!==WJ.e&&(WJ.e=q(L1,"fg",Yz,WJ.e)),FY!==WJ.t&&(WJ.t=q(L1,"attributes",FY,WJ.t)),WJ},{e:void 0,t:void 0}),L1})()}}),null),U(m,b(X0,{get when(){return Z0().start+Z0().items.length<Z0().total},get children(){var i=W("text");return q(i,"wrapMode","none"),U(i,()=>F("newTask.picker.moreBelow",{count:Z0().total-Z0().start-Z0().items.length})),u(($)=>q(i,"fg",Y.textMuted,$)),i}}),null),m}}),(()=>{var m=W("box"),i=W("text"),$=W("input");return D(m,i),D(m,$),q(m,"gap",0),U(i,()=>F("newTask.field.fromBranch")),q($,"placeholder",Rz),q($,"onInput",(w)=>{g(!0),A(LJ(w))}),q($,"onSubmit",()=>{A(cL(L(),C0(),y())),g(!0),x0()}),u((w)=>{var d0=V1("baseRef"),c0=R1("baseRef"),O0=L(),n0=B()==="baseRef";return d0!==w.e&&(w.e=q(i,"fg",d0,w.e)),c0!==w.t&&(w.t=q(i,"attributes",c0,w.t)),O0!==w.a&&(w.a=q($,"value",O0,w.a)),n0!==w.o&&(w.o=q($,"focused",n0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),b(X0,{get when(){return u0(()=>B()==="baseRef"&&C0().length===0)()&&m0()==null},get children(){var m=W("box"),i=W("text");return D(m,i),q(m,"gap",0),q(m,"paddingLeft",2),q(m,"paddingBottom",1),q(i,"wrapMode","none"),U(i,(()=>{var $=u0(()=>k0().length===0);return()=>$()?F("newTask.hint.noBranchesFound"):F("newTask.hint.noMatchBranch")})()),u(($)=>q(i,"fg",Y.textMuted,$)),m}}),b(X0,{get when(){return u0(()=>B()==="baseRef")()&&C0().length>0},get children(){var m=W("box");return q(m,"gap",0),q(m,"paddingLeft",2),q(m,"paddingBottom",1),U(m,b(X0,{get when(){return Q0().start>0},get children(){var i=W("text");return q(i,"wrapMode","none"),U(i,()=>F("newTask.picker.moreAbove",{count:Q0().start})),u(($)=>q(i,"fg",Y.textMuted,$)),i}}),null),U(m,b(Q1,{get each(){return Q0().items},children:(i,$)=>{let w=()=>Q0().start+$(),d0=()=>w()===y(),c0=()=>L().trim()===i;return(()=>{var O0=W("text");return q(O0,"wrapMode","none"),q(O0,"onMouseUp",()=>{A(i),g(!0),L0(w()),V("confirm")}),U(O0,()=>d0()?"\u25B8 ":" ",null),U(O0,i,null),u((n0)=>{var f1=d0()?Y.primary:c0()?Y.accent:Y.textMuted,L1=d0()?Jz.BOLD:void 0;return f1!==n0.e&&(n0.e=q(O0,"fg",f1,n0.e)),L1!==n0.t&&(n0.t=q(O0,"attributes",L1,n0.t)),n0},{e:void 0,t:void 0}),O0})()}}),null),U(m,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,()=>F("newTask.picker.moreBelow",{count:Q0().total-Q0().start-Q0().items.length})),u(($)=>q(i,"fg",Y.textMuted,$)),i}}),null),m}})]}}),null),U(S0,b(X0,{get when(){return G()==="clone"},get children(){return[(()=>{var m=W("box"),i=W("text"),$=W("input");return D(m,i),D(m,$),q(m,"gap",0),U(i,()=>F("newTask.field.gitUrl")),q($,"placeholder","https://github.com/user/repo.git"),q($,"onInput",(w)=>_(LJ(w))),q($,"onSubmit",()=>{if(!x().trim())return;V("cloneParent")}),u((w)=>{var d0=V1("cloneUrl"),c0=R1("cloneUrl"),O0=x(),n0=B()==="cloneUrl";return d0!==w.e&&(w.e=q(i,"fg",d0,w.e)),c0!==w.t&&(w.t=q(i,"attributes",c0,w.t)),O0!==w.a&&(w.a=q($,"value",O0,w.a)),n0!==w.o&&(w.o=q($,"focused",n0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),(()=>{var m=W("box"),i=W("text"),$=W("input");return D(m,i),D(m,$),q(m,"gap",0),U(i,()=>F("newTask.field.parentDir")),q($,"placeholder","~/"),q($,"onInput",(w)=>{f0(!1),N(LJ(w))}),q($,"onSubmit",()=>m1()),u((w)=>{var d0=V1("cloneParent"),c0=R1("cloneParent"),O0=S(),n0=B()==="cloneParent";return d0!==w.e&&(w.e=q(i,"fg",d0,w.e)),c0!==w.t&&(w.t=q(i,"attributes",c0,w.t)),O0!==w.a&&(w.a=q($,"value",O0,w.a)),n0!==w.o&&(w.o=q($,"focused",n0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),b(X0,{get when(){return B()==="cloneParent"},get children(){var m=W("box"),i=W("text");return D(m,i),q(m,"paddingLeft",2),q(i,"wrapMode","none"),U(i,()=>F("newTask.hint.remembered")),u(($)=>q(i,"fg",Y.textMuted,$)),m}}),b(X0,{get when(){return u0(()=>B()==="cloneParent"&&X1().length>0)()&&!n()},get children(){var m=W("box");return q(m,"gap",0),q(m,"paddingLeft",2),U(m,b(X0,{get when(){return v0().start>0},get children(){var i=W("text");return q(i,"wrapMode","none"),U(i,()=>F("newTask.picker.moreAbove",{count:v0().start})),u(($)=>q(i,"fg",Y.textMuted,$)),i}}),null),U(m,b(Q1,{get each(){return v0().items},children:(i,$)=>{let w=()=>v0().start+$(),d0=()=>w()===z1();return(()=>{var c0=W("text"),O0=E0("/");return D(c0,O0),q(c0,"wrapMode","none"),q(c0,"onMouseUp",()=>v(w())),U(c0,()=>d0()?"\u25B8 ":" ",O0),U(c0,i,O0),u((n0)=>{var f1=d0()?Y.primary:Y.textMuted,L1=d0()?Jz.BOLD:void 0;return f1!==n0.e&&(n0.e=q(c0,"fg",f1,n0.e)),L1!==n0.t&&(n0.t=q(c0,"attributes",L1,n0.t)),n0},{e:void 0,t:void 0}),c0})()}}),null),U(m,b(X0,{get when(){return v0().start+v0().items.length<v0().total},get children(){var i=W("text");return q(i,"wrapMode","none"),U(i,()=>F("newTask.picker.moreBelow",{count:v0().total-v0().start-v0().items.length})),u(($)=>q(i,"fg",Y.textMuted,$)),i}}),null),m}}),(()=>{var m=W("box"),i=W("text"),$=W("input");return D(m,i),D(m,$),q(m,"gap",0),U(i,()=>F("newTask.field.folderName")),q($,"onInput",(w)=>{l(!0),I(LJ(w))}),q($,"onSubmit",()=>V("cloneBaseRef")),u((w)=>{var d0=V1("cloneFolder"),c0=R1("cloneFolder"),O0=M(),n0=F("newTask.placeholder.folderName"),f1=B()==="cloneFolder";return d0!==w.e&&(w.e=q(i,"fg",d0,w.e)),c0!==w.t&&(w.t=q(i,"attributes",c0,w.t)),O0!==w.a&&(w.a=q($,"value",O0,w.a)),n0!==w.o&&(w.o=q($,"placeholder",n0,w.o)),f1!==w.i&&(w.i=q($,"focused",f1,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),m})(),(()=>{var m=W("box"),i=W("text"),$=W("input");return D(m,i),D(m,$),q(m,"gap",0),U(i,()=>F("newTask.field.baseBranch")),q($,"placeholder",Rz),q($,"onInput",(w)=>J0(LJ(w))),q($,"onSubmit",()=>void W0()),u((w)=>{var d0=V1("cloneBaseRef"),c0=R1("cloneBaseRef"),O0=e(),n0=B()==="cloneBaseRef";return d0!==w.e&&(w.e=q(i,"fg",d0,w.e)),c0!==w.t&&(w.t=q(i,"attributes",c0,w.t)),O0!==w.a&&(w.a=q($,"value",O0,w.a)),n0!==w.o&&(w.o=q($,"focused",n0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),b(X0,{get when(){return T()},get children(){var m=W("box"),i=W("text");return D(m,i),q(m,"gap",0),q(m,"paddingLeft",2),q(i,"wrapMode","none"),U(i,()=>p()||F("newTask.clone.progressFallback")),u(($)=>q(i,"fg",Y.textMuted,$)),m}})]}}),null),U(S0,b(X0,{get when(){return G()==="adopt"},get children(){return[(()=>{var m=W("box"),i=W("text"),$=W("input");return D(m,i),D(m,$),q(m,"gap",0),U(i,()=>F("newTask.field.adoptFilter")),q($,"onInput",(w)=>r0(LJ(w))),q($,"onSubmit",()=>R()),u((w)=>{var d0=V1("adoptFilter"),c0=R1("adoptFilter"),O0=I0(),n0=F("newTask.placeholder.adoptFilter"),f1=B()==="adoptFilter";return d0!==w.e&&(w.e=q(i,"fg",d0,w.e)),c0!==w.t&&(w.t=q(i,"attributes",c0,w.t)),O0!==w.a&&(w.a=q($,"value",O0,w.a)),n0!==w.o&&(w.o=q($,"placeholder",n0,w.o)),f1!==w.i&&(w.i=q($,"focused",f1,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),m})(),(()=>{var m=W("box"),i=W("text");return D(m,i),q(m,"paddingLeft",2),q(i,"wrapMode","none"),U(i,()=>F("newTask.adopt.repoLine",{path:DJ(j().trim())||F("newTask.adopt.repoNone")})),u(($)=>q(i,"fg",Y.textMuted,$)),m})(),b(X0,{get when(){return g1.loading},get children(){var m=W("box"),i=W("text");return D(m,i),q(m,"paddingLeft",2),q(i,"wrapMode","none"),U(i,()=>F("newTask.hint.scanningWorktrees")),u(($)=>q(i,"fg",Y.textMuted,$)),m}}),b(X0,{get when(){return u0(()=>!g1.loading)()&&z0().length===0},get children(){var m=W("box"),i=W("text");return D(m,i),q(m,"paddingLeft",2),q(i,"wrapMode","none"),U(i,(()=>{var $=u0(()=>(g1()??[]).length===0);return()=>$()?F("newTask.adopt.noUnlinked"):F("newTask.adopt.noMatch")})()),u(($)=>q(i,"fg",Y.textMuted,$)),m}}),b(X0,{get when(){return z0().length>0},get children(){var m=W("box"),i=W("text");return D(m,i),q(m,"gap",0),q(m,"paddingLeft",2),U(m,b(X0,{get when(){return G0().start>0},get children(){var $=W("text");return q($,"wrapMode","none"),U($,()=>F("newTask.picker.moreAbove",{count:G0().start})),u((w)=>q($,"fg",Y.textMuted,w)),$}}),i),U(m,b(Q1,{get each(){return B0()},children:($,w)=>{let d0=()=>G0().start+w(),c0=()=>d0()===_0(),O0=()=>t0().has($.path),n0=()=>[$.dirty?"dirty":"",$.kobeManaged?"":"external"].filter(Boolean).join(",");return(()=>{var f1=W("text");return q(f1,"wrapMode","none"),q(f1,"onMouseUp",()=>{p0(d0()),N0($.path)}),U(f1,()=>c0()?"\u25B8 ":" ",null),U(f1,()=>O0()?"[x] ":"[ ] ",null),U(f1,()=>$.branch,null),U(f1,(()=>{var L1=u0(()=>!!n0());return()=>L1()?` (${n0()})`:""})(),null),u((L1)=>{var WJ=c0()?Y.primary:O0()?Y.accent:Y.textMuted,Yz=c0()?Jz.BOLD:void 0;return WJ!==L1.e&&(L1.e=q(f1,"fg",WJ,L1.e)),Yz!==L1.t&&(L1.t=q(f1,"attributes",Yz,L1.t)),L1},{e:void 0,t:void 0}),f1})()}}),i),U(m,b(X0,{get when(){return G0().start+G0().items.length<G0().total},get children(){var $=W("text");return q($,"wrapMode","none"),U($,()=>F("newTask.picker.moreBelow",{count:G0().total-G0().start-G0().items.length})),u((w)=>q($,"fg",Y.textMuted,w)),$}}),i),q(i,"wrapMode","none"),U(i,(()=>{var $=u0(()=>t0().size>0);return()=>$()?F("newTask.adopt.hintSelected",{count:t0().size}):F("newTask.adopt.hintDefault")})()),u(($)=>q(i,"fg",Y.textMuted,$)),m}})]}}),null),U(S0,b(X0,{get when(){return m0()},get children(){var m=W("text"),i=E0("\u203B ");return D(m,i),q(m,"wrapMode","word"),U(m,m0,null),u(($)=>q(m,"fg",Y.error,$)),m}}),null),D(gJ,dz),D(gJ,MY),q(gJ,"flexDirection","row"),q(gJ,"justifyContent","space-between"),q(gJ,"alignItems","center"),q(gJ,"paddingTop",1),q(gJ,"paddingBottom",1),U(dz,()=>F("newTask.hint.legend")),q(MY,"onMouseUp",()=>g0()),U(MY,(()=>{var m=u0(()=>!!T());return()=>m()?F("newTask.button.cloning"):u0(()=>B()==="confirm")()?F("newTask.button.createFocused"):F("newTask.button.create")})()),u((m)=>{var i=Jz.BOLD,$=Y.text,w=V1("engine"),d0=R1("engine"),c0=Y.textMuted,O0=Y.textMuted,n0=B()==="confirm"?Y.primary:Y.text,f1=B()==="confirm"?Jz.BOLD:void 0;return i!==m.e&&(m.e=q(y0,"attributes",i,m.e)),$!==m.t&&(m.t=q(y0,"fg",$,m.t)),w!==m.a&&(m.a=q(MJ,"fg",w,m.a)),d0!==m.o&&(m.o=q(MJ,"attributes",d0,m.o)),c0!==m.i&&(m.i=q(cz,"fg",c0,m.i)),O0!==m.n&&(m.n=q(dz,"fg",O0,m.n)),n0!==m.s&&(m.s=q(MY,"fg",n0,m.s)),f1!==m.h&&(m.h=q(MY,"attributes",f1,m.h)),m},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),d})()}var nL=k(()=>{P();P();P();P();P();P();P();P();XJ();t1();W1();v1();qH();uJ();HH();dJ();EL();O9()});function XT(J,z,Y,G){return new Promise((X)=>{J.replace(()=>b(dL,{defaultRepo:z,savedRepos:Y,get defaultCloneParent(){return G?.defaultCloneParent},get defaultVendor(){return G?.defaultVendor},get availableVendors(){return G?.availableVendors},get discoverAdoptable(){return G?.discoverAdoptable},onSubmit:(Z)=>X(Z),onCancel:()=>X(void 0)}),()=>X(void 0)),J.setSize("medium")})}var BH;var pX=k(()=>{P();nL();O9();BH={show:XT}});function iL(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 lL}from"@opentui/core";function ZT(J){let z=c1(),{theme:Y}=i0(),[G,X]=a("prompt"),[Z,Q]=a(""),[f,H]=a(J.defaultVendor),[B,V]=a(J.defaultBaseRef);function j(O){let g=jH.indexOf(G());X(jH[(g+O+jH.length)%jH.length]??"prompt")}function K(O){let g=J.engines;if(g.length===0)return;if(O>0){H((_)=>OY(g,_));return}let x=Math.max(0,g.indexOf(f()));H(g[(x-1+g.length)%g.length]??f())}function L(){if(jQ(Z())){X("prompt");return}J.onSubmit({prompt:Z().trim(),vendor:f(),baseRef:B().trim()||J.defaultBaseRef}),z.clear()}D1(()=>({enabled:!0,bindings:iL(G(),{cycleField:j,stepEngine:K,commit:L})}));let A=(O)=>G()===O?Y.accent:Y.textMuted;return(()=>{var O=W("box"),g=W("box"),x=W("text"),_=W("text"),S=W("box"),N=W("text"),M=W("input"),I=W("box"),r=W("text"),l=W("box"),e=W("text"),J0=W("input"),T=W("box"),q0=W("text");return D(O,g),D(O,S),D(O,I),D(O,l),D(O,T),q(O,"paddingLeft",2),q(O,"paddingRight",2),q(O,"gap",1),D(g,x),D(g,_),q(g,"flexDirection","row"),q(g,"justifyContent","space-between"),U(x,()=>F("quickTask.title",{repoLabel:J.repoLabel})),q(_,"onMouseUp",()=>J.onCancel()),U(_,()=>F("quickTask.esc")),D(S,N),D(S,M),q(S,"gap",0),U(N,()=>F("quickTask.promptLabel")),q(M,"onInput",(p)=>Q(LJ(p))),q(M,"onSubmit",()=>L()),D(I,r),q(I,"flexDirection","row"),q(I,"gap",2),U(r,()=>F("quickTask.engineLabel")),U(I,b(Q1,{get each(){return J.engines},children:(p)=>(()=>{var j0=W("text");return q(j0,"onMouseUp",()=>{H(p),X("engine")}),U(j0,()=>J.engineLabel(p)),u((F0)=>{var V0=f()===p?Y.primary:Y.textMuted,t=f()===p?lL.BOLD:void 0;return V0!==F0.e&&(F0.e=q(j0,"fg",V0,F0.e)),t!==F0.t&&(F0.t=q(j0,"attributes",t,F0.t)),F0},{e:void 0,t:void 0}),j0})()}),null),D(l,e),D(l,J0),q(l,"gap",0),U(e,()=>F("quickTask.branchLabel")),q(J0,"onInput",(p)=>V(LJ(p))),q(J0,"onSubmit",()=>L()),D(T,q0),q(T,"paddingBottom",1),U(q0,()=>F("quickTask.legend")),u((p)=>{var j0=lL.BOLD,F0=Y.text,V0=Y.textMuted,t=A("prompt"),h=Z(),C=F("quickTask.promptPlaceholder"),o=G()==="prompt",E=A("engine"),c=A("branch"),s=B(),Z0=J.defaultBaseRef,A0=G()==="branch",h0=Y.textMuted;return j0!==p.e&&(p.e=q(x,"attributes",j0,p.e)),F0!==p.t&&(p.t=q(x,"fg",F0,p.t)),V0!==p.a&&(p.a=q(_,"fg",V0,p.a)),t!==p.o&&(p.o=q(N,"fg",t,p.o)),h!==p.i&&(p.i=q(M,"value",h,p.i)),C!==p.n&&(p.n=q(M,"placeholder",C,p.n)),o!==p.s&&(p.s=q(M,"focused",o,p.s)),E!==p.h&&(p.h=q(r,"fg",E,p.h)),c!==p.r&&(p.r=q(e,"fg",c,p.r)),s!==p.d&&(p.d=q(J0,"value",s,p.d)),Z0!==p.l&&(p.l=q(J0,"placeholder",Z0,p.l)),A0!==p.u&&(p.u=q(J0,"focused",A0,p.u)),h0!==p.c&&(p.c=q(q0,"fg",h0,p.c)),p},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0}),O})()}function QT(J,z){return new Promise((Y)=>{J.replace(()=>b(ZT,bD(z,{onSubmit:(G)=>Y(G),onCancel:()=>Y(void 0)})),()=>Y(void 0)),J.setSize("medium")})}var jH,$L;var aL=k(()=>{P();P();P();P();P();P();P();W1();t1();v1();XJ();uJ();dJ();pX();jH=["prompt","engine","branch"];$L={show:QT}});async function WH(J={}){let z=J.logTag??"orch-connect",Y=J.connect??eJ,G=null;try{let X=await Y();if(!X)return sz(z,"no daemon running \u2014 caller degrades"),null;return G=new UJ(X,{...J.orchestratorOptions,channels:J.channels}),await G.init(),G}catch(X){return o1(z,X),G?.dispose(),null}}var A9=k(()=>{ZG();AJ();aY()});function _L(J){let[z,Y]=a(J.initial??"sidebar"),[G,X]=a(0),Z=HJ();function Q(j){if(X((L)=>L+1),z()===j)return;let K=Z?.currentFocusedRenderable;if(K&&!K.isDestroyed)try{K.blur()}catch{}Y(j)}function f(j){let L=(VH.indexOf(z())+j+VH.length)%VH.length;Q(VH[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:G};return b(qT.Provider,{value:V,get children(){return J.children}})}var VH,qT;var pL=k(()=>{P();P();W1();VH=["sidebar","workspace","files","terminal"],qT=Sz(null)});function rL(){for(let J of _Y){let z=fT.get(J.id);if(!z)continue;let Y=J;Y.keys=[...z.keys],Y.hint=z.hint?{...z.hint}:void 0}}function oL(){HT((J)=>J+1)}function g9(J){return BT.get(J)}function jT(J){return g9(J)?.keys??[]}function pY(J){let z=[];for(let Y in J){let G=J[Y];if(!G)continue;let X=jT(Y);if(X.length===0){console.warn(`[kobe/keybindings] bindByIds: id="${Y}" has no chords (or doesn't exist in KobeKeymap)`);continue}X.forEach((Z,Q)=>z.push({key:Z,cmd:G,slot:Q}))}return z}var _Y,fT,R9,HT,BT;var rX=k(()=>{W1();_Y=[{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"}}],fT=new Map(_Y.map((J)=>[J.id,{keys:[...J.keys],hint:J.hint?{...J.hint}:void 0}]));[R9,HT]=a(0);BT=new Map(_Y.map((J)=>[J.id,J]))});function KH(){if(rY)return rY;let J=Jf();if(!J.exists)return rY={path:J.path,exists:!1,applied:[],warnings:[]},rY;let z=[...J.warnings],Y=Yf(J.doc,process.platform,{chordOptsFor:$B});z.push(...Y.warnings);let G=Y.entries.filter((f)=>f.id.startsWith("tmux.")),X=Y.entries.filter((f)=>!f.id.startsWith("tmux.")),Z=w6(_Y,X);z.push(...Z.warnings);let Q=[...Z.applied];if(G.length>0){let f=lB(G);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:PY});continue}let B=f.binds[H];Q.push({id:H,keys:B?[B.chord]:[],defaultKeys:[IG[H]]});let V=_Y.find((j)=>j.id===H);if(V?.hint)V.hint.keys=B?`${gX(H)?"prefix ":""}${B.chord}`:"\u2014"}}for(let f of z)console.warn(`[kobe/keybindings] ${f}`);return rY={path:J.path,exists:!0,applied:Q,warnings:z},rY}function sL(){return rY??KH()}function tL(){rY=null,E6(),m6(),rL();let J=KH();return oL(),J}var rY=null;var C9=k(()=>{nB();Zf();Gf();rX()});var WT=250,oX,eL;var VQ=k(()=>{lX();YG();Y9();({use:oX,provider:eL}=XH({name:"KV",init:()=>{let[J,z]=vz(d1()),Y=new Set,G=null;function X(f){if(Y.size===0)return!0;try{let H={};for(let B of Y)H[B]=J[B];return lz(H),Y.clear(),!0}catch(H){return console.error(`[kobe] kv ${f} failed:`,H),!1}}function Z(){if(G)clearTimeout(G);G=setTimeout(()=>{G=null,X("write")},WT)}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),Z()},flush(){if(G)clearTimeout(G),G=null;return X("flush")},clear(){for(let f of Object.keys(J))z(f,void 0);if(G)clearTimeout(G),G=null;Y.clear();try{uW({})}catch(f){console.error("[kobe] kv clear write failed:",f)}}};return Q}}))});var UH="../pulse-n3cq1btw.wav";var J3=()=>{};import{existsSync as KT,mkdirSync as UT}from"fs";import{tmpdir as DT}from"os";import{basename as LT,isAbsolute as MT,join as N9,resolve as FT}from"path";function AT(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 RT(){if(DH!==void 0)return DH;let z=(process.env.PATH??"").split(":").filter(Boolean);return DH=OT.find((Y)=>z.some((G)=>KT(N9(G,Y))))??null,DH}async function gT(){return G3??=(async()=>{UT(Y3,{recursive:!0});let J=N9(Y3,LT(z3)),z=Bun.file(J);if(await z.exists())return J;return await Bun.write(z,Bun.file(z3)),J})(),G3}function X3(J=0.4){let z=RT();if(!z)return;gT().then((Y)=>{try{Bun.spawn(AT(z,Y,J),{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).unref?.()}catch{}}).catch(()=>{return})}var z3,Y3,OT,DH,G3;var Z3=k(()=>{J3();z3=MT(UH)?UH:FT(import.meta.dir,UH),Y3=N9(DT(),"kobe-sfx"),OT=["ffplay","mpv","mpg123","mpg321","mplayer","afplay","play","omxplayer","aplay","cmdmp3","cvlc","powershell.exe"]});function Q3(J,z){return`${J}:${z}`}function f3(J){let z=oX(),[Y,G]=a([]),[X,Z]=a(new Map),Q=QH(),f=0;function H(K){if(Z((L)=>{let A=new Map(L),O=Q3(K.taskId,K.tabId),g=L.get(O);if(g==="needs_input"||g==="error")return L;return A.set(O,K.kind),A}),z.get("notifications.sound.enabled",!0)!==!1){try{process.stdout.write("\x07")}catch{}X3()}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};G((O)=>[...O,A]),Q.set(()=>B(L),CT)}}function B(K){G((L)=>L.filter((A)=>A.id!==K))}function V(K,L){Z((A)=>{let O=Q3(K,L);if(!A.has(O))return A;let g=new Map(A);return g.delete(O),g})}let j={toasts:Y,unread:X,notify:H,dismiss:B,markRead:V};return b(q3.Provider,{value:j,get children(){return J.children}})}function LH(){let J=EJ(q3);if(!J)throw Error("useNotifications must be used within a NotificationsProvider");return J}var CT=4500,q3;var MH=k(()=>{P();W1();j9();Z3();VQ();q3=Sz()});function k9(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=kT(z.focusAccent);if(Y&&Y!==J.focusAccent())J.setFocusAccent(Y)}}function kT(J){if(J===null)return"primary";return NT.includes(J)?J:null}var NT;var H3=k(()=>{NT=["primary","success","info"]});import{readFileSync as bT}from"fs";function B3(J){try{let z=JSON.parse(bT(iJ(),"utf8")),Y=typeof z.activeTheme==="string"&&ZQ(z.activeTheme)?z.activeTheme:J,G=z.transparentBackground===!0,X=typeof z.focusAccent==="string"&&hG.includes(z.focusAccent)?z.focusAccent:null,Z=QQ(z[FH])?z[FH]:aX;return{theme:Y,transparent:G,focusAccent:X,locale:Z}}catch{return{theme:J,transparent:!1,focusAccent:null,locale:aX}}}var FH="locale";var b9=k(()=>{p1();v1();_X()});function IT(J){if(J)hQ(J);oW(),KH();for(let{name:z,theme:Y}of mZ())X9(z,Y)}function yT(J){let z={backgroundColor:"transparent",externalOutputMode:"passthrough",exitOnCtrlC:!1,screenMode:"alternate-screen",useKittyKeyboard:{}};return J?{...z,onDestroy:J}:z}function TT(J){let z=()=>J.children,Y=()=>J.notifications?b(f3,{get children(){return z()}}):z(),G=()=>b(RL,{get children(){return Y()}}),X=()=>J.focus?b(_L,{initial:"sidebar",get children(){return G()}}):G(),Z=()=>J.kv?b(eL,{get children(){return X()}}):X();return b(dD,{mode:"dark",get theme(){return J.theme},get children(){return Z()}})}function uT(J){let{theme:z}=i0();return JJ(()=>o1("pane-crash",J.error)),(()=>{var Y=W("box"),G=W("text"),X=W("text");return D(Y,G),D(Y,X),q(Y,"flexDirection","column"),q(Y,"flexGrow",1),q(Y,"paddingLeft",1),q(Y,"paddingTop",1),q(Y,"gap",1),U(G,()=>F("common.paneCrash.title")),U(X,()=>F("common.paneCrash.hint")),u((Z)=>{var{background:Q,error:f,textMuted:H}=z;return Q!==Z.e&&(Z.e=q(Y,"backgroundColor",Q,Z.e)),f!==Z.t&&(Z.t=q(G,"fg",f,Z.t)),H!==Z.a&&(Z.a=q(X,"fg",H,Z.a)),Z},{e:void 0,t:void 0,a:void 0}),Y})()}function xT(J){let z=i0(),Y={selectedTheme:()=>z.selected,hasTheme:(f)=>z.has(f),setTheme:(f)=>z.set(f),reloadUserThemes:()=>{for(let{name:f,theme:H}of mZ())X9(f,H)},transparentBackground:()=>z.transparentBackground,setTransparentBackground:(f)=>z.setTransparentBackground(f),focusAccent:()=>z.focusAccent,setFocusAccent:(f)=>z.setFocusAccent(f)};k9(Y,{theme:J.boot.theme,transparentBackground:J.boot.transparent,focusAccent:J.boot.focusAccent}),qQ(J.boot.locale);let[G,X]=a(null),Z=!1;JJ(()=>{(async()=>{let f=await WH({logTag:"ui-prefs",channels:["ui-prefs","keybindings"]});if(!f)return;if(Z){f.dispose();return}X(f)})()}),s0(()=>{let f=G()?.uiPrefsSignal()();if(!f)return;if(k9(Y,f),QQ(f.locale))qQ(f.locale)});let Q=null;return s0(()=>{let f=G()?.keybindingsRevSignal()();if(f==null)return;if(Q===null||f===Q){Q=f;return}Q=f,tL()}),N1(()=>{Z=!0,G()?.dispose()}),null}async function RJ(J){IT(J.logContext);let z=B3(ST),Y=await J.setup(z),G=J.providers?.kv??!0,X=J.providers?.focus??!0,Z=J.providers?.notifications??!1;await ED(()=>b(TT,{get theme(){return z.theme},kv:G,focus:X,notifications:Z,get children(){return[b(xT,{boot:z}),b(AV,{fallback:(Q)=>b(uT,{error:Q}),get children(){return Y.root()}})]}}),yT(Y.onDestroy))}var ST="claude";var oY=k(()=>{P();P();P();P();P();P();P();ZG();W1();A9();pL();C9();VQ();MH();v1();Hf();XJ();dJ();H3();b9()});async function S9(J,z,Y,G,X={}){let Z=M1(z.id);if(await H1(Z))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(() => (AX(),dB)),B=H(Y,Q,{kind:X.includeInitPrompt?"repo-init":"none"});if(!await f({name:Z,cwd:Q,command:TJ(G),taskId:z.id,vendor:G,repo:Y,launchInit:B}))throw Error(`failed to start tmux session for ${z.id}`);return!1}async function OH(J,z,Y,G,X={}){await S9(J,z,Y,G,X),await J.setActiveTask(z.id).catch(()=>{});let{prepareWindowForSwitch:Z}=await Promise.resolve().then(() => (fJ(),tJ));await Z(M1(z.id)),await P0(["switch-client","-t",`=${M1(z.id)}`])}var I9=k(()=>{hJ();P1()});var j3={};j1(j3,{startNewTaskHost:()=>ET,NewTaskPage:()=>AH});function AH(J){let{theme:z}=i0(),Y=c1();JJ(()=>{G()});async function G(){let X=CJ(),Z=J.defaultRepo||X[0]||process.cwd(),Q=nz(S1("lastSelectedVendor"),az()),f=await tz(),H=J.orchestrator,B=await BH.show(Y,Z,X,{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 OH(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 X=W("box");return q(X,"flexDirection","column"),q(X,"flexGrow",1),u((Z)=>q(X,"backgroundColor",z.background,Z)),X})()}async function ET(J){await RJ({setup:async()=>{let z=null;try{let Y=await Fz(),G=new UJ(Y);await G.init(),z=G}catch(Y){console.error("[kobe new-task] daemon unavailable; cannot create task:",Y)}return{root:()=>b(AH,{get defaultRepo(){return J.defaultRepo},orchestrator:z}),onDestroy:()=>{z?.dispose()}}}})}var y9=k(()=>{P();P();P();P();AJ();W1();aY();QG();O1();t1();pX();v1();oY();I9();dJ()});function RH(J,z,Y,G,X={}){if(J.length===0)return z;let Z=new Map;for(let H of J)Z.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=Z.get(Y(B));if(V&&G(V,B)&&(!X.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 W3(J,z){if(!J)return!0;let Y=J.toLowerCase(),G=z.toLowerCase(),X=0;for(let Z=0;Z<G.length&&X<Y.length;Z++)if(G.charCodeAt(Z)===Y.charCodeAt(X))X++;return X===Y.length}function wT(J,z){let Y=z==="archived";return J.filter((G)=>G.archived===Y)}function T9(J,z,Y,G="default",X){let Z=wT(J,z),Q=Y?.trim()??"",f=X?zz(X):null,H=Q?Z.filter((O)=>W3(Q,`${O.title} ${gz(O.repo)}`)):Z,B=[],V=[],j=[],K=new Set;for(let O of H){if(O.kind==="main"){let g=zz(O.repo);if(K.has(g))continue;K.add(g),B.push(O);continue}if(f&&zz(O.repo)!==f)continue;if(O.pinned===!0)V.push(O);else j.push(O)}if(B.sort((O,g)=>gz(O.repo).localeCompare(gz(g.repo))),G==="recent")V.sort(V3),j.sort(V3);let L=[],A=0;for(let O of B)L.push({kind:"task",task:O,flatIndex:A}),A++;for(let O of V)L.push({kind:"task",task:O,flatIndex:A}),A++;for(let O of j)L.push({kind:"task",task:O,flatIndex:A}),A++;return L}function V3(J,z){let Y=K3(z)-K3(J);if(Y!==0)return Y;return String(z.id).localeCompare(String(J.id))}function K3(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 PT(J,z){let Y=gz(J);if(!z.some((X)=>X!==J&&gz(X)===Y))return Y;return J.replace(/[\\/]+$/,"").split(/[\\/]+/).slice(-2).join("/")}function U3(J,z){let Y=z==="archived",G=new Map;for(let Z of J){let Q=zz(Z.repo),f=G.get(Q)??{repo:Z.repo,count:0};if(Z.kind==="main")f.repo=Z.repo;else if(Z.archived===Y)f.count+=1;G.set(Q,f)}let X=[...G.values()].map((Z)=>Z.repo);return[...G.values()].map((Z)=>({repo:Z.repo,label:PT(Z.repo,X),count:Z.count})).sort((Z,Q)=>Z.label.localeCompare(Q.label))}function D3(J,z){if(J.length===0)return-1;if(!z)return J[0]?.flatIndex??-1;let Y=zz(z),G=J.find((Z)=>Z.task.kind!=="main"&&zz(Z.task.repo)===Y);if(G)return G.flatIndex;return J.find((Z)=>Z.task.kind==="main"&&zz(Z.task.repo)===Y)?.flatIndex??J[0]?.flatIndex??-1}function u9(J){return J.map((z)=>z.task.id)}function L3(J){let z=[],Y=[];for(let G of J)if(G.task.kind==="main")z.push(G);else Y.push(G);return{projectRows:z,taskRows:Y}}function hT(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 M3(J,z){return RH(J,z,(Y)=>Y.task.id,(Y,G)=>Y.flatIndex===G.flatIndex&&hT(Y.task,G.task),{samePosition:!0})}var gH=()=>{};var F3={};j1(F3,{startQuickTaskHost:()=>dT});async function vT(J,z){let Y,G;if(z){let j=await yJ(z,["@kobe_task","@kobe_worktree"]);Y=j["@kobe_task"]||void 0,G=j["@kobe_worktree"]||void 0}let X=(Y?J?.getTask(Y)?.repo:void 0)??CJ()[0],Z=X??G??process.cwd();if(!X)return{ctx:null,fallbackRepo:Z};let Q=await tz(),f=nz(S1("lastSelectedVendor"),az()),H=Q.length===0||Q.includes(f)?f:Q[0]??f,B=fQ(DJ(X))??Rz,V=Q.length>0?Q:[H];return{ctx:{repo:X,vendor:H,baseRef:B,engines:V},fallbackRepo:Z}}async function mT(J,z,Y,G,X){let Z=await S9(J,z,Y,G),Q=M1(z.id),{pane:f}=await hZ(Q,!Z);if(f)await vZ(f,X)}function cT(J){let{theme:z}=i0(),Y=c1();JJ(()=>{G()});async function G(){let X=J.ctx,Z=await $L.show(Y,{repoLabel:gz(X.repo),engines:X.engines,defaultVendor:X.vendor,defaultBaseRef:X.baseRef,engineLabel:RG});if(Z===void 0)process.exit(0);r1("lastSelectedVendor",Z.vendor),_z(X.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:X.repo,baseRef:Z.baseRef,vendor:Z.vendor});await mT(Q,f,X.repo,Z.vendor,Z.prompt),await OH(Q,f,X.repo,Z.vendor)}catch(f){console.error("[kobe quick-task] task.create/deliver failed:",f),process.exit(1)}process.exit(0)}return(()=>{var X=W("box");return q(X,"flexDirection","column"),q(X,"flexGrow",1),u((Z)=>q(X,"backgroundColor",z.background,Z)),X})()}async function dT(J){await RJ({setup:async()=>{let z=null;try{let X=await Fz(),Z=new UJ(X);await Z.init(),z=Z}catch(X){console.error("[kobe quick-task] daemon unavailable; cannot create task:",X)}let{ctx:Y,fallbackRepo:G}=await vT(z,J.session);return{root:()=>Y?b(cT,{ctx:Y,orchestrator:z}):b(AH,{defaultRepo:G,orchestrator:z}),onDestroy:()=>{z?.dispose()}}}})}var O3=k(()=>{P();P();P();P();AJ();W1();aY();QG();hJ();O1();P1();Qf();t1();aL();v1();qH();oY();HH();I9();y9();gH();dJ()});function NH(J){let z=J.trim().split(/\s+/).pop()??"",Y=/^([CM])-(.+)$/.exec(z);if(!Y)return null;let G=Y[1]==="C"?"\u2303":"\u2325",X=Y[2]??"";return`${G}${X.length===1?X.toUpperCase():X}`}function CH(J,z){if(J.includes("/"))return J.split("/").map((X)=>CH(X,z)).join("/");let Y=J.toLowerCase();if(Y==="tab")return"tab";let G=iT[Y];if(G)return G;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,(X)=>X.toUpperCase())}function sX(J,z="\u2303B"){let Y=J.trim();if(!Y)return Y;let G=/^prefix\s+(.+)$/i.exec(Y);if(G){let f=G[1]??"";return`${z} ${f.includes("+")?sX(f,z):CH(f,!0)}`}let X=Y.split("+");if(X.length===1)return CH(X[0]??"",!1);let Z=X[X.length-1]??"";return`${X.slice(0,-1).map((f)=>nT[f.toLowerCase().trim()]??f).join("")} ${CH(Z,!0)}`}var nT,iT;var x9=k(()=>{nT={ctrl:"\u2303",control:"\u2303",alt:"\u2325",opt:"\u2325",option:"\u2325",shift:"\u21E7",cmd:"\u2318",command:"\u2318",meta:"\u2318",super:"\u2318"},iT={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 A3}from"@opentui/core";function lT(J){let z=new Map,Y=[];for(let G of J){if(!z.has(G.category))z.set(G.category,[]),Y.push(G.category);z.get(G.category).push(G)}return Y.map((G)=>({category:G,rows:z.get(G)}))}function tX(J={}){let z=c1(),{theme:Y}=i0(),G=()=>lT(_Y),X=()=>J.onClose?J.onClose():z.clear(),[Z,Q]=a("\u2303B");return JJ(()=>{a0(["show-options","-g","prefix"]).then(({code:f,stdout:H})=>{if(f!==0)return;let B=NH(H);if(B)Q(B)})}),D1(()=>({bindings:[{key:"?",cmd:X}]})),(()=>{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,()=>F("help.title")),q(V,"onMouseUp",X),U(V,()=>F("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 G()},children:(L)=>(()=>{var A=W("box"),O=W("text");return D(A,O),q(A,"gap",0),U(O,()=>q9("category",L.category)),U(A,b(Q1,{get each(){return L.rows},children:(g)=>{let x=g.hint?.keys??g.keys[0]??"\u2014",_=()=>x==="\u2014"?"\u2014":sX(x,Z()),S=()=>(g.hint?g.keys:g.keys.slice(1)).map((N)=>sX(N,Z()));return(()=>{var N=W("box"),M=W("box"),I=W("text"),r=W("box"),l=W("text");return D(N,M),D(N,r),q(N,"flexDirection","row"),q(N,"gap",2),q(N,"paddingLeft",1),D(M,I),q(M,"width",14),U(I,_),D(r,l),q(r,"flexGrow",1),U(l,()=>q9("desc",g.id)),U(N,(()=>{var e=u0(()=>S().length>0);return()=>e()?(()=>{var J0=W("box"),T=W("text");return D(J0,T),U(T,()=>`(${S().join(", ")})`),u((q0)=>q(T,"fg",Y.textMuted,q0)),J0})():null})(),null),u((e)=>{var{primary:J0,text:T}=Y;return J0!==e.e&&(e.e=q(I,"fg",J0,e.e)),T!==e.t&&(e.t=q(l,"fg",T,e.t)),e},{e:void 0,t:void 0}),N})()}}),null),u((g)=>{var x=Y.accent,_=A3.BOLD;return x!==g.e&&(g.e=q(O,"fg",x,g.e)),_!==g.t&&(g.t=q(O,"attributes",_,g.t)),g},{e:void 0,t:void 0}),A})()})),u((L)=>{var A=A3.BOLD,O=Y.text,g=Y.textMuted,x={trackOptions:{backgroundColor:Y.backgroundDialog,foregroundColor:Y.borderActive}};return A!==L.e&&(L.e=q(B,"attributes",A,L.e)),O!==L.t&&(L.t=q(B,"fg",O,L.t)),g!==L.a&&(L.a=q(V,"fg",g,L.a)),x!==L.o&&(L.o=q(j,"verticalScrollbarOptions",x,L.o)),L},{e:void 0,t:void 0,a:void 0,o:void 0}),f})()}var E9=k(()=>{P();P();P();P();P();P();P();W1();P1();rX();v1();XJ();x9();uJ();dJ();tX.show=(J)=>{J.replace(()=>b(tX,{}))}});import{TextAttributes as $T}from"@opentui/core";function R3(J){let z=c1(),{theme:Y}=i0(),[G,X]=a(J.currentTitle);function Z(){let Q=G().trim();if(jQ(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??F("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??F("common.rename.defaultFieldLabel")),q(K,"focused",!0),q(K,"onInput",(O)=>X(LJ(O))),q(K,"onSubmit",()=>Z()),D(L,A),q(L,"paddingBottom",1),U(A,()=>F("common.rename.footerHint",{submitLabel:J.submitLabel??F("common.rename.defaultSubmitLabel")})),u((O)=>{var g=$T.BOLD,x=Y.text,_=Y.textMuted,S=Y.accent,N=G(),M=J.placeholder??J.currentTitle,I=Y.textMuted;return g!==O.e&&(O.e=q(H,"attributes",g,O.e)),x!==O.t&&(O.t=q(H,"fg",x,O.t)),_!==O.a&&(O.a=q(B,"fg",_,O.a)),S!==O.o&&(O.o=q(j,"fg",S,O.o)),N!==O.i&&(O.i=q(K,"value",N,O.i)),M!==O.n&&(O.n=q(K,"placeholder",M,O.n)),I!==O.s&&(O.s=q(A,"fg",I,O.s)),O},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),Q})()}var g3=k(()=>{P();P();P();P();P();P();P();XJ();W1();v1();dJ();pX()});function aT(J,z,Y={}){return new Promise((G)=>{J.replace(()=>b(R3,{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:(X)=>G(X),onCancel:()=>G(void 0)}),()=>G(void 0))})}var DY;var w9=k(()=>{P();g3();DY={show:aT}});import{TextAttributes as _T}from"@opentui/core";function pT(J){if(!J)return J;return J.charAt(0).toUpperCase()+J.slice(1)}function LY(J){let z=c1(),{theme:Y}=i0(),[G,X]=vz({active:J.initialActive??"confirm"});return D1(()=>({bindings:[{key:"return",cmd:()=>{if(G.active==="confirm")J.onConfirm?.();if(G.active==="cancel")J.onCancel?.();z.clear()}},{key:"left",cmd:()=>X("active",G.active==="confirm"?"cancel":"confirm")},{key:"right",cmd:()=>X("active",G.active==="confirm"?"cancel":"confirm")}]})),(()=>{var Z=W("box"),Q=W("box"),f=W("text"),H=W("text"),B=W("text"),V=W("box");return D(Z,Q),D(Z,B),D(Z,V),q(Z,"paddingLeft",2),q(Z,"paddingRight",2),q(Z,"paddingBottom",1),q(Z,"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,()=>pT(j==="cancel"?J.label??F("common.cancel"):J.confirmLabel??F("common.confirm"))),u((A)=>{var O=j===G.active?Y.primary:void 0,g=j===G.active?Y.selectedListItemText:Y.textMuted;return O!==A.e&&(A.e=q(K,"backgroundColor",O,A.e)),g!==A.t&&(A.t=q(L,"fg",g,A.t)),A},{e:void 0,t:void 0}),K})()})),u((j)=>{var K=_T.BOLD,L=Y.text,A=Y.textMuted,O=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)),O!==j.o&&(j.o=q(B,"fg",O,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),Z})()}var P9=k(()=>{P();P();P();P();P();P();P();XJ();W1();lX();v1();uJ();dJ();LY.show=(J,z,Y,G,X,Z)=>{return new Promise((Q)=>{J.replace(()=>b(LY,{title:z,message:Y,onConfirm:()=>Q(!0),onCancel:()=>Q(!1),label:G,confirmLabel:X,get initialActive(){return Z?.initialActive}}),()=>Q(void 0)),J.setSize("small")})}});import{unlinkSync as rT}from"fs";import{join as oT}from"path";function C3(J){return J instanceof UJ}function N3(J,z){try{J?.destroy()}catch(Y){console.error(`kobe: renderer.destroy() failed during ${z}:`,Y)}}async function h9(J,z,Y){if(await LY.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{rT(oT(Nz(),".kobe","tasks.json"))}catch(X){if(X.code!=="ENOENT")console.error("kobe: failed to delete tasks.json during reset:",X)}N3(Y,"reset"),process.stderr.write(`kobe: UI state reset. Relaunch kobe to start fresh.
|
|
264
|
+
`),process.exit(0)}async function v9(J,z,Y){if(!(z instanceof UJ))return;if(await LY.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;N3(Y,"daemon restart"),process.stderr.write(`kobe: window closed. Relaunch kobe to start fresh.
|
|
265
|
+
`),process.exit(0)}var k3=k(()=>{aY();p1();P9()});function sT(J){return`theme:${J}`}function m9(J){return`language:${J}`}function c9(J){return`accent:${J}`}function tT(J){return`engine:${J}`}function KQ(J){return`surface:${J}`}function d9(J){return[...J.themeNames.map((z)=>({id:sT(z),kind:"theme",name:z})),...vG.map((z)=>({id:m9(z.id),kind:"language",locale:z.id})),{id:"transparent",kind:"transparent"},...J.focusAccentSlots.map((z)=>({id:c9(z),kind:"focusAccent",slot:z})),{id:"toast",kind:"toast"},{id:"sound",kind:"sound"},{id:"zen-keep-tasks",kind:"zenKeepTasks"},{id:KQ("chattab"),kind:"surface",surface:"chattab"},{id:KQ("taskpanel"),kind:"surface",surface:"taskpanel"},{id:"editor-kind",kind:"editorKind"},{id:"editor-custom",kind:"editorCustom"}]}function eT(J){return[...J.map((z)=>({id:tT(z),kind:"engine",vendor:z})),{id:"add-engine",kind:"engineAdd"}]}function Ju(){return[{id:"feedback-title",kind:"feedbackTitle"},{id:"feedback-body",kind:"feedbackBody"},{id:"feedback-send",kind:"feedbackSend"}]}function UQ(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 b3(J,z){switch(J){case"general":return d9(z);case"engines":return eT(z.engineList);case"accounts":case"keys":return[];case"feedback":return Ju();case"dev":return UQ(z.hasDaemon)}}function DQ(J,z){return J.findIndex((Y)=>Y.id===z)}function kH(J,z){return J[z]}var cG;var n9=k(()=>{_X();cG=[{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 e0}from"@opentui/core";function S3(J){let{theme:z}=i0();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:cG,children:(G,X)=>{let Z=()=>X()===J.cursor(),Q=()=>Z()&&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(G.id)),q(H,"wrapMode","none"),U(H,()=>F(`settings.sections.${G.id}`)),u((B)=>{var V=Q()?z.primary:void 0,j=Q()?z.selectedListItemText:Z()?z.accent:z.textMuted,K=Z()?e0.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 I3(J){let z=i0(),{theme:Y}=z,G=()=>d9({themeNames:J.themeNames(),focusAccentSlots:hG}),X=(M)=>DQ(G(),M),Z=()=>X("transparent"),Q=()=>X("toast"),f=()=>X("sound"),H=()=>X("zen-keep-tasks"),B=()=>X(KQ("chattab")),V=()=>X(KQ("taskpanel")),j=()=>X("editor-kind"),K=()=>X("editor-custom"),L=()=>J.bodyRow()===Z(),A=()=>J.bodyRow()===Q(),O=()=>J.bodyRow()===f(),g=()=>J.bodyRow()===H(),x=()=>J.bodyRow()===B(),_=()=>J.bodyRow()===V(),S=()=>J.bodyRow()===j(),N=()=>J.bodyRow()===K();return(()=>{var M=W("box"),I=W("text"),r=W("text"),l=W("box"),e=W("box"),J0=W("text"),T=W("text"),q0=W("box"),p=W("text"),j0=W("text"),F0=W("box"),V0=W("text"),t=W("box"),h=W("text"),C=W("text"),o=W("box"),E=W("text"),c=W("text"),s=W("box"),Z0=W("text"),A0=E0(" "),h0=W("box"),k0=W("text"),C0=E0(" "),y=W("box"),L0=W("text"),Q0=W("text"),M0=W("box"),T0=W("text"),X1=E0(" "),z1=W("box"),w0=W("text"),v0=W("text"),n=W("box"),f0=W("text"),I0=E0(" "),r0=W("box"),_0=W("text"),p0=E0(" "),t0=W("box"),C1=W("text"),g1=W("text"),z0=W("box"),G0=W("text"),B0=W("box"),N0=W("text");return D(M,I),D(M,r),D(M,l),D(M,e),D(M,q0),D(M,t),D(M,o),D(M,y),D(M,z1),D(M,t0),q(M,"flexDirection","column"),q(M,"gap",1),U(I,()=>F("settings.general.theme")),U(r,()=>F("settings.general.themeHint")),q(l,"flexDirection","column"),q(l,"gap",0),U(l,b(Q1,{get each(){return J.themeNames()},children:(R,m0)=>{let U0=()=>J.level()==="body"&&J.bodyRow()===m0(),x0=()=>R===z.selected;return(()=>{var W0=W("box"),D0=W("text");return D(W0,D0),q(W0,"flexDirection","row"),q(W0,"gap",1),q(W0,"paddingLeft",1),q(W0,"paddingRight",1),q(W0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(m0()),J.setThemeCursor(m0()),J.selectTheme(R)}),q(D0,"wrapMode","none"),U(D0,()=>x0()?"\u25CF ":" ",null),U(D0,R,null),u((g0)=>{var J1=U0()?Y.primary:void 0,Y1=U0()?Y.selectedListItemText:x0()?Y.accent:Y.text,l0=U0()||x0()?e0.BOLD:void 0;return J1!==g0.e&&(g0.e=q(W0,"backgroundColor",J1,g0.e)),Y1!==g0.t&&(g0.t=q(D0,"fg",Y1,g0.t)),l0!==g0.a&&(g0.a=q(D0,"attributes",l0,g0.a)),g0},{e:void 0,t:void 0,a:void 0}),W0})()}})),D(e,J0),D(e,T),q(e,"flexDirection","column"),q(e,"gap",0),q(e,"paddingTop",1),U(J0,()=>F("settings.general.language")),q(T,"wrapMode","word"),U(T,()=>F("settings.general.languageHint")),U(e,b(Q1,{each:vG,children:(R)=>{let m0=()=>X(m9(R.id)),U0=()=>J.level()==="body"&&J.bodyRow()===m0(),x0=()=>J.currentLocale()===R.id;return(()=>{var W0=W("box"),D0=W("text");return D(W0,D0),q(W0,"flexDirection","row"),q(W0,"gap",1),q(W0,"paddingLeft",1),q(W0,"paddingRight",1),q(W0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(m0()),J.selectLanguage(R.id)}),q(D0,"wrapMode","none"),U(D0,()=>x0()?"\u25CF ":" ",null),U(D0,()=>R.label,null),u((g0)=>{var J1=U0()?Y.primary:void 0,Y1=U0()?Y.selectedListItemText:x0()?Y.accent:Y.text,l0=U0()||x0()?e0.BOLD:void 0;return J1!==g0.e&&(g0.e=q(W0,"backgroundColor",J1,g0.e)),Y1!==g0.t&&(g0.t=q(D0,"fg",Y1,g0.t)),l0!==g0.a&&(g0.a=q(D0,"attributes",l0,g0.a)),g0},{e:void 0,t:void 0,a:void 0}),W0})()}}),null),D(q0,p),D(q0,j0),D(q0,F0),q(q0,"flexDirection","column"),q(q0,"gap",0),q(q0,"paddingTop",1),U(p,()=>F("settings.general.transparent")),q(j0,"wrapMode","word"),U(j0,()=>F("settings.general.transparentHint")),D(F0,V0),q(F0,"flexDirection","row"),q(F0,"paddingLeft",1),q(F0,"paddingRight",1),q(F0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(Z()),J.toggleTransparent()}),q(V0,"wrapMode","none"),U(V0,(()=>{var R=u0(()=>!!z.transparentBackground);return()=>R()?F("settings.general.on"):F("settings.general.off")})()),D(t,h),D(t,C),q(t,"flexDirection","column"),q(t,"gap",0),q(t,"paddingTop",1),U(h,()=>F("settings.general.focusAccent")),q(C,"wrapMode","word"),U(C,()=>F("settings.general.focusAccentHint")),U(t,b(Q1,{each:hG,children:(R)=>{let m0=()=>X(c9(R)),U0=()=>J.level()==="body"&&J.bodyRow()===m0(),x0=()=>z.focusAccent===R;return(()=>{var W0=W("box"),D0=W("text");return D(W0,D0),q(W0,"flexDirection","row"),q(W0,"gap",1),q(W0,"paddingLeft",1),q(W0,"paddingRight",1),q(W0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(m0()),J.selectFocusAccent(R)}),q(D0,"wrapMode","none"),U(D0,()=>x0()?"\u25CF ":" ",null),U(D0,()=>F(`settings.general.accent${R.charAt(0).toUpperCase()}${R.slice(1)}`),null),u((g0)=>{var J1=U0()?Y.primary:void 0,Y1=U0()?Y.selectedListItemText:x0()?Y.focusAccent:Y.text,l0=U0()||x0()?e0.BOLD:void 0;return J1!==g0.e&&(g0.e=q(W0,"backgroundColor",J1,g0.e)),Y1!==g0.t&&(g0.t=q(D0,"fg",Y1,g0.t)),l0!==g0.a&&(g0.a=q(D0,"attributes",l0,g0.a)),g0},{e:void 0,t:void 0,a:void 0}),W0})()}}),null),D(o,E),D(o,c),D(o,s),D(o,h0),q(o,"flexDirection","column"),q(o,"gap",0),q(o,"paddingTop",1),U(E,()=>F("settings.general.notifications")),q(c,"wrapMode","word"),U(c,()=>F("settings.general.notificationsHint")),D(s,Z0),q(s,"flexDirection","row"),q(s,"gap",1),q(s,"paddingLeft",1),q(s,"paddingRight",1),q(s,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(Q()),J.toggleToast()}),D(Z0,A0),q(Z0,"wrapMode","none"),U(Z0,()=>J.toastEnabled()?"[x]":"[ ]",A0),U(Z0,()=>F("settings.general.toast"),null),D(h0,k0),q(h0,"flexDirection","row"),q(h0,"gap",1),q(h0,"paddingLeft",1),q(h0,"paddingRight",1),q(h0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(f()),J.toggleSound()}),D(k0,C0),q(k0,"wrapMode","none"),U(k0,()=>J.soundEnabled()?"[x]":"[ ]",C0),U(k0,()=>F("settings.general.sound"),null),D(y,L0),D(y,Q0),D(y,M0),q(y,"flexDirection","column"),q(y,"gap",0),q(y,"paddingTop",1),U(L0,()=>F("settings.general.zen")),q(Q0,"wrapMode","word"),U(Q0,()=>F("settings.general.zenHint")),D(M0,T0),q(M0,"flexDirection","row"),q(M0,"gap",1),q(M0,"paddingLeft",1),q(M0,"paddingRight",1),q(M0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(H()),J.toggleZenKeepsTasks()}),D(T0,X1),q(T0,"wrapMode","none"),U(T0,()=>J.zenKeepsTasks()?"[x]":"[ ]",X1),U(T0,()=>F("settings.general.zenKeepTasks"),null),D(z1,w0),D(z1,v0),D(z1,n),D(z1,r0),q(z1,"flexDirection","column"),q(z1,"gap",0),q(z1,"paddingTop",1),U(w0,()=>F("settings.general.surface")),q(v0,"wrapMode","word"),U(v0,()=>F("settings.general.surfaceHint")),D(n,f0),q(n,"flexDirection","row"),q(n,"gap",1),q(n,"paddingLeft",1),q(n,"paddingRight",1),q(n,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(B()),J.selectSurface("chattab")}),D(f0,I0),q(f0,"wrapMode","none"),U(f0,()=>J.settingsSurface()==="chattab"?"[x]":"[ ]",I0),U(f0,()=>F("settings.general.surfaceChattab"),null),D(r0,_0),q(r0,"flexDirection","row"),q(r0,"gap",1),q(r0,"paddingLeft",1),q(r0,"paddingRight",1),q(r0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(V()),J.selectSurface("taskpanel")}),D(_0,p0),q(_0,"wrapMode","none"),U(_0,()=>J.settingsSurface()==="taskpanel"?"[x]":"[ ]",p0),U(_0,()=>F("settings.general.surfaceTaskpanel"),null),D(t0,C1),D(t0,g1),D(t0,z0),D(t0,B0),q(t0,"flexDirection","column"),q(t0,"gap",0),q(t0,"paddingTop",1),U(C1,()=>F("settings.general.editor")),q(g1,"wrapMode","word"),U(g1,()=>F("settings.general.editorHint")),D(z0,G0),q(z0,"flexDirection","row"),q(z0,"gap",1),q(z0,"paddingLeft",1),q(z0,"paddingRight",1),q(z0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(j()),J.cycleEditorKind()}),q(G0,"wrapMode","none"),U(G0,()=>F("settings.general.editorRow",{kind:J.editorKind()})),D(B0,N0),q(B0,"flexDirection","row"),q(B0,"gap",1),q(B0,"paddingLeft",1),q(B0,"paddingRight",1),q(B0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(K()),J.editEditorCustom()}),q(N0,"wrapMode","none"),U(N0,()=>F("settings.general.editorCustom",{cmd:J.editorCustomCommand().trim()||F("settings.general.editorCustomUnset")})),u((R)=>{var m0=Y.text,U0=e0.BOLD,x0=Y.textMuted,W0=Y.text,D0=e0.BOLD,g0=Y.textMuted,J1=Y.text,Y1=e0.BOLD,l0=Y.textMuted,u1=L()?Y.primary:void 0,b0=L()?Y.selectedListItemText:z.transparentBackground?Y.accent:Y.textMuted,m1=e0.BOLD,v=Y.text,R0=e0.BOLD,V1=Y.textMuted,R1=Y.text,B1=e0.BOLD,d=Y.textMuted,Y0=A()?Y.primary:void 0,y0=A()?Y.selectedListItemText:J.toastEnabled()?Y.accent:Y.textMuted,S0=e0.BOLD,jJ=O()?Y.primary:void 0,MJ=O()?Y.selectedListItemText:J.soundEnabled()?Y.accent:Y.textMuted,ZJ=e0.BOLD,nJ=Y.text,cz=e0.BOLD,gJ=Y.textMuted,dz=g()?Y.primary:void 0,MY=g()?Y.selectedListItemText:J.zenKeepsTasks()?Y.accent:Y.textMuted,m=e0.BOLD,i=Y.text,$=e0.BOLD,w=Y.textMuted,d0=x()?Y.primary:void 0,c0=x()?Y.selectedListItemText:J.settingsSurface()==="chattab"?Y.accent:Y.textMuted,O0=e0.BOLD,n0=_()?Y.primary:void 0,f1=_()?Y.selectedListItemText:J.settingsSurface()==="taskpanel"?Y.accent:Y.textMuted,L1=e0.BOLD,WJ=Y.text,Yz=e0.BOLD,FY=Y.textMuted,jW=S()?Y.primary:void 0,WW=S()?Y.selectedListItemText:Y.accent,VW=e0.BOLD,KW=N()?Y.primary:void 0,UW=N()?Y.selectedListItemText:J.editorKind()==="custom"?Y.text:Y.textMuted;return m0!==R.e&&(R.e=q(I,"fg",m0,R.e)),U0!==R.t&&(R.t=q(I,"attributes",U0,R.t)),x0!==R.a&&(R.a=q(r,"fg",x0,R.a)),W0!==R.o&&(R.o=q(J0,"fg",W0,R.o)),D0!==R.i&&(R.i=q(J0,"attributes",D0,R.i)),g0!==R.n&&(R.n=q(T,"fg",g0,R.n)),J1!==R.s&&(R.s=q(p,"fg",J1,R.s)),Y1!==R.h&&(R.h=q(p,"attributes",Y1,R.h)),l0!==R.r&&(R.r=q(j0,"fg",l0,R.r)),u1!==R.d&&(R.d=q(F0,"backgroundColor",u1,R.d)),b0!==R.l&&(R.l=q(V0,"fg",b0,R.l)),m1!==R.u&&(R.u=q(V0,"attributes",m1,R.u)),v!==R.c&&(R.c=q(h,"fg",v,R.c)),R0!==R.w&&(R.w=q(h,"attributes",R0,R.w)),V1!==R.m&&(R.m=q(C,"fg",V1,R.m)),R1!==R.f&&(R.f=q(E,"fg",R1,R.f)),B1!==R.y&&(R.y=q(E,"attributes",B1,R.y)),d!==R.g&&(R.g=q(c,"fg",d,R.g)),Y0!==R.p&&(R.p=q(s,"backgroundColor",Y0,R.p)),y0!==R.b&&(R.b=q(Z0,"fg",y0,R.b)),S0!==R.T&&(R.T=q(Z0,"attributes",S0,R.T)),jJ!==R.A&&(R.A=q(h0,"backgroundColor",jJ,R.A)),MJ!==R.O&&(R.O=q(k0,"fg",MJ,R.O)),ZJ!==R.I&&(R.I=q(k0,"attributes",ZJ,R.I)),nJ!==R.S&&(R.S=q(L0,"fg",nJ,R.S)),cz!==R.W&&(R.W=q(L0,"attributes",cz,R.W)),gJ!==R.C&&(R.C=q(Q0,"fg",gJ,R.C)),dz!==R.B&&(R.B=q(M0,"backgroundColor",dz,R.B)),MY!==R.v&&(R.v=q(T0,"fg",MY,R.v)),m!==R.k&&(R.k=q(T0,"attributes",m,R.k)),i!==R.x&&(R.x=q(w0,"fg",i,R.x)),$!==R.j&&(R.j=q(w0,"attributes",$,R.j)),w!==R.q&&(R.q=q(v0,"fg",w,R.q)),d0!==R.z&&(R.z=q(n,"backgroundColor",d0,R.z)),c0!==R.P&&(R.P=q(f0,"fg",c0,R.P)),O0!==R.H&&(R.H=q(f0,"attributes",O0,R.H)),n0!==R.F&&(R.F=q(r0,"backgroundColor",n0,R.F)),f1!==R.M&&(R.M=q(_0,"fg",f1,R.M)),L1!==R.D&&(R.D=q(_0,"attributes",L1,R.D)),WJ!==R.R&&(R.R=q(C1,"fg",WJ,R.R)),Yz!==R.E&&(R.E=q(C1,"attributes",Yz,R.E)),FY!==R.L&&(R.L=q(g1,"fg",FY,R.L)),jW!==R.N&&(R.N=q(z0,"backgroundColor",jW,R.N)),WW!==R.G&&(R.G=q(G0,"fg",WW,R.G)),VW!==R.U&&(R.U=q(G0,"attributes",VW,R.U)),KW!==R.K&&(R.K=q(B0,"backgroundColor",KW,R.K)),UW!==R.V&&(R.V=q(N0,"fg",UW,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}),M})()}function y3(J){let{theme:z}=i0(),Y=()=>J.vendors.length;return(()=>{var G=W("box"),X=W("text"),Z=W("text"),Q=W("box"),f=W("box"),H=W("text");return D(G,X),D(G,Z),D(G,Q),q(G,"flexDirection","column"),q(G,"gap",1),U(X,()=>F("settings.engines.title")),q(Z,"wrapMode","word"),U(Z,()=>F("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"),O=W("text");return D(K,L),D(K,A),D(K,O),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(O,"wrapMode","none"),U(O,()=>J.commandText(B),null),U(O,(()=>{var g=u0(()=>!!J.isDefault(B));return()=>g()?F("settings.engines.defaultTag"):u0(()=>!!J.isCustom(B))()?F("settings.engines.customTag"):""})(),null),u((g)=>{var x=j()?z.primary:void 0,_=j()?z.selectedListItemText:z.accent,S=e0.BOLD,N=j()?z.selectedListItemText:z.text,M=e0.BOLD,I=j()?z.selectedListItemText:J.isDefault(B)?z.textMuted:z.accent;return x!==g.e&&(g.e=q(K,"backgroundColor",x,g.e)),_!==g.t&&(g.t=q(L,"fg",_,g.t)),S!==g.a&&(g.a=q(L,"attributes",S,g.a)),N!==g.o&&(g.o=q(A,"fg",N,g.o)),M!==g.i&&(g.i=q(A,"attributes",M,g.i)),I!==g.n&&(g.n=q(O,"fg",I,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,()=>F("settings.engines.addEngine")),u((B)=>{var V=z.text,j=e0.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(X,"fg",V,B.e)),j!==B.t&&(B.t=q(X,"attributes",j,B.t)),K!==B.a&&(B.a=q(Z,"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}),G})()}function T3(J){let{theme:z}=i0(),Y=(G)=>G.binary.found?`Binary: ${G.binary.path}`:`Binary: ${G.binary.error}`;return(()=>{var G=W("box"),X=W("text"),Z=W("text"),Q=W("box"),f=W("text"),H=W("box"),B=W("text"),V=W("box"),j=W("text");return D(G,X),D(G,Z),D(G,Q),D(G,H),D(G,V),q(G,"flexDirection","column"),q(G,"gap",1),U(X,()=>F("settings.accounts.title")),q(Z,"wrapMode","word"),U(Z,()=>F("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,()=>F("settings.accounts.checking")),u((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 O=K().account;if(O.kind==="oauth"){let g=[O.organization,O.billingType].filter((x)=>!!x).join(" \xB7 ");return(()=>{var x=W("text");return q(x,"wrapMode","word"),U(x,()=>F("settings.accounts.loggedIn",{email:O.email}),null),U(x,g?` (${g})`:"",null),u((_)=>q(x,"fg",z.success,_)),x})()}return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.notLoggedIn")),u((x)=>q(g,"fg",z.textMuted,x)),g})()},null),U(L,b(X0,{get when(){return K().accountError},children:(O)=>(()=>{var g=W("text");return q(g,"wrapMode","word"),U(g,()=>`! ${O()}`),u((x)=>q(g,"fg",z.warning,x)),g})()}),null),u((O)=>q(A,"fg",K().binary.found?z.textMuted:z.warning,O)),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,()=>F("settings.accounts.checking")),u((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 O=K().account;if(O.kind==="chatgpt")return(()=>{var g=W("text");return q(g,"wrapMode","word"),U(g,()=>F("settings.accounts.chatgptLogin",{email:O.email}),null),U(g,(()=>{var x=u0(()=>!!O.plan);return()=>x()?` (${O.plan})`:""})(),null),u((x)=>q(g,"fg",z.success,x)),g})();if(O.kind==="apikey")return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.apiKeyConfigured")),u((x)=>q(g,"fg",z.success,x)),g})();return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.notLoggedIn")),u((x)=>q(g,"fg",z.textMuted,x)),g})()},null),U(L,b(X0,{get when(){return K().accountError},children:(O)=>(()=>{var g=W("text");return q(g,"wrapMode","word"),U(g,()=>`! ${O()}`),u((x)=>q(g,"fg",z.warning,x)),g})()}),null),u((O)=>q(A,"fg",K().binary.found?z.textMuted:z.warning,O)),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,()=>F("settings.accounts.checking")),u((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 O=K().account;if(O.kind==="token")return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.tokenConfigured",{source:O.source})),u((x)=>q(g,"fg",z.success,x)),g})();if(O.kind==="oauth")return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.copilotDetected")),u((x)=>q(g,"fg",z.success,x)),g})();return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.notLoggedIn")),u((x)=>q(g,"fg",z.textMuted,x)),g})()},null),U(L,b(X0,{get when(){return K().accountError},children:(O)=>(()=>{var g=W("text");return q(g,"wrapMode","word"),U(g,()=>`! ${O()}`),u((x)=>q(g,"fg",z.warning,x)),g})()}),null),u((O)=>q(A,"fg",K().binary.found?z.textMuted:z.warning,O)),L})()}),null),u((K)=>{var L=z.text,A=e0.BOLD,O=z.textMuted,g=z.text,x=e0.BOLD,_=z.text,S=e0.BOLD,N=z.text,M=e0.BOLD;return L!==K.e&&(K.e=q(X,"fg",L,K.e)),A!==K.t&&(K.t=q(X,"attributes",A,K.t)),O!==K.a&&(K.a=q(Z,"fg",O,K.a)),g!==K.o&&(K.o=q(f,"fg",g,K.o)),x!==K.i&&(K.i=q(f,"attributes",x,K.i)),_!==K.n&&(K.n=q(B,"fg",_,K.n)),S!==K.s&&(K.s=q(B,"attributes",S,K.s)),N!==K.h&&(K.h=q(j,"fg",N,K.h)),M!==K.r&&(K.r=q(j,"attributes",M,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}),G})()}function u3(J){let{theme:z}=i0(),Y=()=>J.level()==="body",G=()=>Y()&&J.bodyRow()===0,X=()=>Y()&&J.bodyRow()===1,Z=()=>Y()&&J.bodyRow()===2,Q=(B)=>B?z.primary:z.textMuted,f=(B)=>B?e0.BOLD|e0.UNDERLINE:void 0,H;return s0(()=>{if(J.body()===""&&H&&H.plainText!=="")H.setText("")}),(()=>{var B=W("box"),V=W("text"),j=W("text"),K=W("box"),L=W("box"),A=W("text"),O=W("input"),g=W("box"),x=W("text"),_=W("textarea"),S=W("box"),N=W("text");return D(B,V),D(B,j),D(B,K),q(B,"flexDirection","column"),q(B,"gap",1),U(V,()=>F("settings.feedback.title")),q(j,"wrapMode","word"),U(j,()=>F("settings.feedback.hint")),D(K,L),D(K,g),D(K,S),q(K,"flexDirection","column"),q(K,"gap",1),D(L,A),D(L,O),q(L,"gap",0),U(A,()=>F("settings.feedback.titleLabel")),q(O,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(0)}),q(O,"onInput",(M)=>J.setTitle(LJ(M))),q(O,"onSubmit",()=>J.onTitleSubmit()),D(g,x),D(g,_),q(g,"gap",0),U(x,()=>F("settings.feedback.descriptionLabel")),hz((M)=>{H=M},_),q(_,"height",4),q(_,"wrapMode","word"),q(_,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(1)}),q(_,"onContentChange",()=>J.setBody(H?.plainText??"")),D(S,N),q(S,"flexDirection","row"),q(S,"paddingLeft",1),q(S,"paddingRight",1),q(S,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(2),J.submit()}),U(N,()=>F("settings.feedback.send")),U(B,b(X0,{get when(){return J.status()},get children(){var M=W("text");return q(M,"wrapMode","word"),U(M,()=>J.status()),u((I)=>q(M,"fg",J.status().startsWith("error:")?z.warning:z.success,I)),M}}),null),u((M)=>{var I=z.text,r=e0.BOLD,l=z.textMuted,e=Q(G()),J0=f(G()),T=J.title(),q0=F("settings.feedback.titlePlaceholder"),p=G(),j0=Q(X()),F0=f(X()),V0=J.body(),t=F("settings.feedback.descriptionPlaceholder"),h=X(),C=Z()?z.primary:z.backgroundElement,o=Z()?z.selectedListItemText:z.accent,E=e0.BOLD;return I!==M.e&&(M.e=q(V,"fg",I,M.e)),r!==M.t&&(M.t=q(V,"attributes",r,M.t)),l!==M.a&&(M.a=q(j,"fg",l,M.a)),e!==M.o&&(M.o=q(A,"fg",e,M.o)),J0!==M.i&&(M.i=q(A,"attributes",J0,M.i)),T!==M.n&&(M.n=q(O,"value",T,M.n)),q0!==M.s&&(M.s=q(O,"placeholder",q0,M.s)),p!==M.h&&(M.h=q(O,"focused",p,M.h)),j0!==M.r&&(M.r=q(x,"fg",j0,M.r)),F0!==M.d&&(M.d=q(x,"attributes",F0,M.d)),V0!==M.l&&(M.l=q(_,"initialValue",V0,M.l)),t!==M.u&&(M.u=q(_,"placeholder",t,M.u)),h!==M.c&&(M.c=q(_,"focused",h,M.c)),C!==M.w&&(M.w=q(S,"backgroundColor",C,M.w)),o!==M.m&&(M.m=q(N,"fg",o,M.m)),E!==M.f&&(M.f=q(N,"attributes",E,M.f)),M},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0}),B})()}function x3(J){let{theme:z}=i0(),Y=()=>J.level()==="body"&&J.bodyRow()===0,G=()=>J.level()==="body"&&J.bodyRow()===1,X=()=>DQ(UQ(J.hasDaemon),"remote-projects"),Z=()=>J.level()==="body"&&J.bodyRow()===X(),Q=()=>DQ(UQ(J.hasDaemon),"auto-status"),f=()=>J.level()==="body"&&J.bodyRow()===Q(),H=()=>DQ(UQ(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"),O=W("text"),g=W("box"),x=W("text"),_=W("text"),S=W("box"),N=W("text"),M=W("text"),I=W("box"),r=W("text"),l=W("text"),e=W("box"),J0=W("text");return D(V,j),D(V,K),D(V,L),D(V,O),D(V,g),q(V,"flexDirection","column"),q(V,"gap",1),U(j,()=>F("settings.dev.reset")),q(K,"wrapMode","word"),U(K,()=>F("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,()=>F("settings.dev.resetButton")),U(V,b(X0,{get when(){return J.hasDaemon},get children(){var T=W("box"),q0=W("text"),p=W("text"),j0=W("box"),F0=W("text");return D(T,q0),D(T,p),D(T,j0),q(T,"flexDirection","column"),q(T,"gap",0),q(T,"paddingTop",1),U(q0,()=>F("settings.dev.restart")),q(p,"wrapMode","word"),U(p,()=>F("settings.dev.restartHint")),D(j0,F0),q(j0,"flexDirection","row"),q(j0,"paddingLeft",1),q(j0,"paddingRight",1),q(j0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(1),J.confirmRestartDaemon()}),U(F0,()=>F("settings.dev.restartButton")),u((V0)=>{var t=z.text,h=e0.BOLD,C=z.textMuted,o=G()?z.primary:z.backgroundElement,E=G()?z.selectedListItemText:z.accent,c=e0.BOLD;return t!==V0.e&&(V0.e=q(q0,"fg",t,V0.e)),h!==V0.t&&(V0.t=q(q0,"attributes",h,V0.t)),C!==V0.a&&(V0.a=q(p,"fg",C,V0.a)),o!==V0.o&&(V0.o=q(j0,"backgroundColor",o,V0.o)),E!==V0.i&&(V0.i=q(F0,"fg",E,V0.i)),c!==V0.n&&(V0.n=q(F0,"attributes",c,V0.n)),V0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),T}}),O),q(O,"wrapMode","word"),U(O,()=>F("settings.dev.doctorHint")),D(g,x),D(g,_),D(g,S),D(g,M),D(g,I),D(g,l),D(g,e),q(g,"flexDirection","column"),q(g,"gap",0),q(g,"paddingTop",1),U(x,()=>F("settings.dev.experimental")),q(_,"wrapMode","word"),U(_,()=>F("settings.dev.remoteHint")),D(S,N),q(S,"flexDirection","row"),q(S,"paddingLeft",1),q(S,"paddingRight",1),q(S,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(X()),J.toggleRemoteProjects()}),U(N,(()=>{var T=u0(()=>!!J.remoteProjectsEnabled());return()=>T()?F("settings.dev.remoteOn"):F("settings.dev.remoteOff")})()),q(M,"wrapMode","word"),U(M,()=>F("settings.dev.autoStatusHint")),D(I,r),q(I,"flexDirection","row"),q(I,"paddingLeft",1),q(I,"paddingRight",1),q(I,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(Q()),J.toggleAutoStatus()}),U(r,(()=>{var T=u0(()=>!!J.autoStatusEnabled());return()=>T()?F("settings.dev.autoStatusOn"):F("settings.dev.autoStatusOff")})()),q(l,"wrapMode","word"),U(l,()=>F("settings.dev.dispatcherHint")),D(e,J0),q(e,"flexDirection","row"),q(e,"paddingLeft",1),q(e,"paddingRight",1),q(e,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(H()),J.toggleDispatcher()}),U(J0,(()=>{var T=u0(()=>!!J.dispatcherEnabled());return()=>T()?F("settings.dev.dispatcherOn"):F("settings.dev.dispatcherOff")})()),u((T)=>{var q0=z.text,p=e0.BOLD,j0=z.textMuted,F0=Y()?z.primary:z.backgroundElement,V0=Y()?z.selectedListItemText:z.warning,t=e0.BOLD,h=z.textMuted,C=z.text,o=e0.BOLD,E=z.textMuted,c=Z()?z.primary:z.backgroundElement,s=Z()?z.selectedListItemText:z.text,Z0=J.remoteProjectsEnabled()?e0.BOLD:void 0,A0=z.textMuted,h0=f()?z.primary:z.backgroundElement,k0=f()?z.selectedListItemText:z.text,C0=J.autoStatusEnabled()?e0.BOLD:void 0,y=z.textMuted,L0=B()?z.primary:z.backgroundElement,Q0=B()?z.selectedListItemText:z.text,M0=J.dispatcherEnabled()?e0.BOLD:void 0;return q0!==T.e&&(T.e=q(j,"fg",q0,T.e)),p!==T.t&&(T.t=q(j,"attributes",p,T.t)),j0!==T.a&&(T.a=q(K,"fg",j0,T.a)),F0!==T.o&&(T.o=q(L,"backgroundColor",F0,T.o)),V0!==T.i&&(T.i=q(A,"fg",V0,T.i)),t!==T.n&&(T.n=q(A,"attributes",t,T.n)),h!==T.s&&(T.s=q(O,"fg",h,T.s)),C!==T.h&&(T.h=q(x,"fg",C,T.h)),o!==T.r&&(T.r=q(x,"attributes",o,T.r)),E!==T.d&&(T.d=q(_,"fg",E,T.d)),c!==T.l&&(T.l=q(S,"backgroundColor",c,T.l)),s!==T.u&&(T.u=q(N,"fg",s,T.u)),Z0!==T.c&&(T.c=q(N,"attributes",Z0,T.c)),A0!==T.w&&(T.w=q(M,"fg",A0,T.w)),h0!==T.m&&(T.m=q(I,"backgroundColor",h0,T.m)),k0!==T.f&&(T.f=q(r,"fg",k0,T.f)),C0!==T.y&&(T.y=q(r,"attributes",C0,T.y)),y!==T.g&&(T.g=q(l,"fg",y,T.g)),L0!==T.p&&(T.p=q(e,"backgroundColor",L0,T.p)),Q0!==T.b&&(T.b=q(J0,"fg",Q0,T.b)),M0!==T.T&&(T.T=q(J0,"attributes",M0,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 E3(){let{theme:J}=i0(),z=sL(),Y=Object.keys(iB).sort();return(()=>{var G=W("box"),X=W("text"),Z=W("text"),Q=W("box"),f=W("text"),H=W("text"),B=W("text"),V=W("text");return D(G,X),D(G,Z),D(G,Q),D(G,B),D(G,V),q(G,"flexDirection","column"),q(G,"gap",1),U(X,()=>F("settings.keybindings.title")),q(Z,"wrapMode","word"),U(Z,()=>F("settings.keybindings.hint")),D(Q,f),D(Q,H),q(Q,"flexDirection","column"),q(Q,"gap",0),U(f,()=>F("settings.keybindings.configFile")),q(H,"wrapMode","word"),U(H,()=>z.path,null),U(H,(()=>{var j=u0(()=>!!z.exists);return()=>j()?"":F("settings.keybindings.notCreated")})(),null),U(G,b(X0,{get when(){return!z.exists},get children(){var j=W("box"),K=W("text"),L=W("text"),A=W("text"),O=W("text"),g=W("text"),x=W("text"),_=W("text"),S=W("text"),N=W("text"),M=W("text");return D(j,K),D(j,L),D(j,A),D(j,O),D(j,g),D(j,x),D(j,_),D(j,S),D(j,N),D(j,M),q(j,"flexDirection","column"),q(j,"gap",0),U(K,()=>F("settings.keybindings.example")),D(L,E0("bindings:")),D(A,E0(" chat.fork.new: ctrl+g # string = one chord")),D(O,E0(" sidebar.select: [enter] # list = several chords")),D(g,E0(" files.createPR: null # null = unbind")),D(x,E0(" tmux.tab.new: ctrl+y # tmux session key (see below)")),D(_,E0(" tmux.layout.workspaceSplit: g # prefix g")),D(S,E0("darwin: # platform overlay (also: linux)")),D(N,E0(" bindings:")),D(M,E0(" palette.open: [cmd+p, ctrl+p]")),u((I)=>{var r=J.text,l=e0.BOLD,e=J.textMuted,J0=J.textMuted,T=J.textMuted,q0=J.textMuted,p=J.textMuted,j0=J.textMuted,F0=J.textMuted,V0=J.textMuted,t=J.textMuted;return r!==I.e&&(I.e=q(K,"fg",r,I.e)),l!==I.t&&(I.t=q(K,"attributes",l,I.t)),e!==I.a&&(I.a=q(L,"fg",e,I.a)),J0!==I.o&&(I.o=q(A,"fg",J0,I.o)),T!==I.i&&(I.i=q(O,"fg",T,I.i)),q0!==I.n&&(I.n=q(g,"fg",q0,I.n)),p!==I.s&&(I.s=q(x,"fg",p,I.s)),j0!==I.h&&(I.h=q(_,"fg",j0,I.h)),F0!==I.r&&(I.r=q(S,"fg",F0,I.r)),V0!==I.d&&(I.d=q(N,"fg",V0,I.d)),t!==I.l&&(I.l=q(M,"fg",t,I.l)),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}),j}}),B),U(G,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,()=>F("settings.keybindings.overridesApplied")),U(j,b(X0,{get when(){return z.applied.length===0},get children(){var L=W("text");return U(L,()=>F("settings.keybindings.none")),u((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(" / ")})`),u((O)=>q(A,"fg",J.text,O)),A})()}),null),u((L)=>{var A=J.text,O=e0.BOLD;return A!==L.e&&(L.e=q(K,"fg",A,L.e)),O!==L.t&&(L.t=q(K,"attributes",O,L.t)),L},{e:void 0,t:void 0}),j}}),B),U(G,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,()=>F("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}`),u((O)=>q(A,"fg",J.warning,O)),A})()}),null),u((L)=>{var A=J.warning,O=e0.BOLD;return A!==L.e&&(L.e=q(K,"fg",A,L.e)),O!==L.t&&(L.t=q(K,"attributes",O,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(", ")}.`),u((j)=>{var K=J.text,L=e0.BOLD,A=J.textMuted,O=J.text,g=e0.BOLD,x=J.textMuted,_=J.textMuted,S=J.textMuted;return K!==j.e&&(j.e=q(X,"fg",K,j.e)),L!==j.t&&(j.t=q(X,"attributes",L,j.t)),A!==j.a&&(j.a=q(Z,"fg",A,j.a)),O!==j.o&&(j.o=q(f,"fg",O,j.o)),g!==j.i&&(j.i=q(f,"attributes",g,j.i)),x!==j.n&&(j.n=q(H,"fg",x,j.n)),_!==j.s&&(j.s=q(B,"fg",_,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}),G})()}var w3=k(()=>{P();P();P();P();P();P();P();P();P();W1();C9();v1();XJ();_X();Gf();pX();n9()});import{TextAttributes as zu}from"@opentui/core";function Yu(J){return J.split(/[-_]+/).filter((z)=>z.length>0).map((z)=>z.charAt(0).toUpperCase()+z.slice(1)).join(" ")}function dG(J){let z=c1(),Y=i0(),G=HJ(),{theme:X}=Y,[Z,Q]=a("sidebar"),[f,H]=a("general"),[B,V]=a(0),[j,K]=a(0),[L,A]=a(""),[O,g]=a(""),[x,_]=a(""),S=K0(()=>Y.all().slice().sort()),[,N]=a(Math.max(0,S().findIndex((v)=>v===Y.selected))),M=C3(J.orchestrator),[I,r]=a(null),[l,e]=a(null),[J0,T]=a(null),q0=!1;s0(()=>{if(f()!=="accounts"||q0)return;q0=!0,iQ().then(r),lQ().then(e),$Q().then(T)});function p(){return b3(f(),{themeNames:S(),focusAccentSlots:hG,engineList:w0(),hasDaemon:M})}function j0(){return p().length}function F0(){return kG(J.kv.get(qY,NG))}function V0(v){if(Y.selected===v)return;if(!Y.set(v))return;J.kv.set("activeTheme",v),J.onVisualPrefsChange?.()}function t(){return Q9()}function h(v){if(Q9()===v)return;qQ(v),J.kv.set(FH,v),J.onVisualPrefsChange?.()}function C(v){if(Y.transparentBackground===v)return;Y.setTransparentBackground(v),J.kv.set("transparentBackground",v),J.onVisualPrefsChange?.()}function o(){C(!Y.transparentBackground)}function E(v){if(Y.focusAccent===v)return;Y.setFocusAccent(v),J.kv.set("focusAccent",v),J.onVisualPrefsChange?.()}function c(v){J.kv.set(qY,v)}function s(){return J.kv.get("notifications.toast.enabled",!0)!==!1}function Z0(){return J.kv.get("notifications.sound.enabled",!0)!==!1}function A0(){J.kv.set("notifications.toast.enabled",!s())}function h0(){J.kv.set("notifications.sound.enabled",!Z0())}function k0(){return J.kv.get(jf,!0)!==!1}function C0(){J.kv.set(jf,!k0())}function y(){return J.kv.get("experimental.remoteProjects",!1)===!0}function L0(){J.kv.set("experimental.remoteProjects",!y())}function Q0(){return J.kv.get(FG,!1)===!0}function M0(){J.kv.set(FG,!Q0())}function T0(){return J.kv.get(AG,!1)===!0}function X1(){J.kv.set(AG,!T0())}function z1(){let v=J.kv.get("customEngineIds",[]);return Array.isArray(v)?v.filter((R0)=>typeof R0==="string"&&R0.trim().length>0):[]}function w0(){return[...l1,...z1()]}function v0(v){let R0=J.kv.get(Uz(v),"");return typeof R0==="string"?R0.trim():""}function n(v){return v0(v)||EZ(v).join(" ")}function f0(v){return QJ(v)&&v0(v).length===0&&!r0(v)}function I0(v){let R0=J.kv.get(Dz(v),"");return typeof R0==="string"?R0.trim():""}function r0(v){return I0(v).length>0}function _0(v){return I0(v)||PB[v]||v}let[p0,t0]=a(nz(S1("lastSelectedVendor"),z1()));function C1(v){return p0()===v}function g1(v){r1("lastSelectedVendor",v),J.kv.set("lastSelectedVendor",v),t0(v)}async function z0(v){let R0=await DY.show(z,n(v),{dialogTitle:`${_0(v)} launch command`,fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(R0===void 0)return;J.kv.set(Uz(v),R0.trim())}async function G0(v){let R0=await DY.show(z,_0(v),{dialogTitle:`${_0(v)} display name (blank = default)`,fieldLabel:"name",submitLabel:"save",allowEmpty:!0});if(R0===void 0)return;J.kv.set(Dz(v),R0.trim())}function B0(v){if(J.kv.set(Uz(v),""),J.kv.set(Dz(v),""),!QJ(v))J.kv.set("customEngineIds",z1().filter((R0)=>R0!==v)),K((R0)=>Math.max(0,Math.min(R0,w0().length)))}async function N0(){let v=await DY.show(z,"",{dialogTitle:"Add engine",fieldLabel:"id",submitLabel:"next",placeholder:"lowercase slug, e.g. aider"});if(v===void 0)return;let R0=v.trim().toLowerCase();if(!R0||QJ(R0)||z1().includes(R0))return;let V1=await DY.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 DY.show(z,R0,{dialogTitle:`Add engine \xB7 ${R0}`,fieldLabel:"name",submitLabel:"add",allowEmpty:!0});if(J.kv.set("customEngineIds",[...z1(),R0]),V1.trim())J.kv.set(Uz(R0),V1.trim());let B1=R1?.trim()??"";J.kv.set(Dz(R0),B1&&B1!==R0?B1:Yu(R0))}function R(){if(f()!=="engines"||Z()!=="body")return null;let v=kH(p(),j());return v?.kind==="engine"?v.vendor:null}function m0(){return WX(J.kv.get(QY,nq))}function U0(){let v=CG.indexOf(m0()),R0=CG[(v+1)%CG.length];if(R0)J.kv.set(QY,R0)}function x0(){let v=J.kv.get(EY,"");return typeof v==="string"?v:""}async function W0(){let v=await DY.show(z,x0(),{dialogTitle:"Custom editor command (use {file} for the path)",fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(v===void 0)return;let R0=v.trim();if(J.kv.set(EY,R0),R0)J.kv.set(QY,"custom")}async function D0(){_("submitting...");try{let v=vX({title:L(),body:O()});_(`sent: ${v.url}`),A(""),g(""),K(0)}catch(v){_(`error: ${v instanceof Error?v.message:String(v)}`)}}let g0=()=>f()==="feedback"&&Z()==="body";function J1(v){let R0=j()+v;if(R0<0||R0>2){Q("sidebar");return}K(R0)}function Y1(){if(Z()!=="sidebar"||j0()===0)return;if(Q("body"),K(0),f()==="general")N(0)}function l0(v){if(Z()==="sidebar"){let R1=(B()+v+cG.length)%cG.length;V(R1);let B1=cG[R1];if(B1)H(B1.id),K(0);return}let R0=j0();if(R0===0)return;let V1=(j()+v+R0)%R0;if(K(V1),kH(p(),V1)?.kind==="theme")N(V1)}function u1(v){H(v),V(cG.findIndex((R0)=>R0.id===v)),K(0),Q("sidebar")}let b0={theme:(v)=>V0(v.name),language:(v)=>h(v.locale),transparent:()=>o(),focusAccent:(v)=>E(v.slot),toast:()=>A0(),sound:()=>h0(),zenKeepTasks:()=>C0(),surface:(v)=>c(v.surface),editorKind:()=>U0(),editorCustom:()=>void W0(),engine:(v)=>void z0(v.vendor),engineAdd:()=>void N0(),feedbackTitle:()=>K(0),feedbackBody:()=>K(1),feedbackSend:()=>void D0(),devReset:()=>void h9(z,J.kv,G),devRestartDaemon:()=>void v9(z,J.orchestrator,G),devRemoteProjects:()=>L0(),devAutoStatus:()=>M0(),devDispatcher:()=>X1()};function m1(){let v=kH(p(),j());if(!v)return;b0[v.kind](v)}return D1(()=>({enabled:(!J.standalone||z.stack.length===0)&&!g0(),bindings:[{key:"down",cmd:()=>l0(1)},{key:"up",cmd:()=>l0(-1)},{key:"j",cmd:()=>l0(1)},{key:"k",cmd:()=>l0(-1)},{key:"tab",cmd:()=>l0(1)},{key:"right",cmd:Y1},{key:"l",cmd:Y1},{key:"left",cmd:()=>Q("sidebar")},{key:"h",cmd:()=>Q("sidebar")},{key:"return",cmd:()=>{if(Z()==="sidebar"){Y1();return}m1()}},{key:"t",cmd:o},{key:"r",cmd:()=>{let v=R();if(v)G0(v)}},{key:"x",cmd:()=>{let v=R();if(v)B0(v)}},{key:"d",cmd:()=>{let v=R();if(v)g1(v)}}]})),D1(()=>({enabled:g0(),bindings:[{key:"tab",cmd:()=>J1(1)},{key:"shift+tab",cmd:()=>J1(-1)}]})),D1(()=>({enabled:g0()&&j()===2,bindings:[{key:"return",cmd:()=>void D0()}]})),(()=>{var v=W("box"),R0=W("box"),V1=W("text"),R1=W("text"),B1=W("box"),d=W("box"),Y0=W("box"),y0=W("text");return D(v,R0),D(v,B1),D(v,Y0),q(v,"paddingLeft",2),q(v,"paddingRight",2),q(v,"paddingBottom",1),q(v,"gap",1),D(R0,V1),D(R0,R1),q(R0,"flexDirection","row"),q(R0,"justifyContent","space-between"),U(V1,()=>F("settings.title")),q(R1,"onMouseUp",()=>J.onClose()),U(R1,()=>F("settings.esc")),D(B1,d),q(B1,"flexDirection","row"),q(B1,"gap",2),U(B1,b(S3,{level:Z,cursor:B,switchSection:u1}),d),q(d,"flexGrow",1),q(d,"flexShrink",1),q(d,"flexDirection","column"),q(d,"gap",1),U(d,b(X0,{get when(){return f()==="general"},get children(){return b(I3,{level:Z,bodyRow:j,setLevel:Q,setBodyRow:K,themeNames:S,setThemeCursor:N,selectTheme:V0,currentLocale:t,selectLanguage:h,toggleTransparent:o,selectFocusAccent:E,toastEnabled:s,soundEnabled:Z0,toggleToast:A0,toggleSound:h0,zenKeepsTasks:k0,toggleZenKeepsTasks:C0,settingsSurface:F0,selectSurface:c,editorKind:m0,cycleEditorKind:U0,editorCustomCommand:x0,editEditorCustom:()=>void W0()})}}),null),U(d,b(X0,{get when(){return f()==="engines"},get children(){return b(y3,{level:Z,bodyRow:j,setLevel:Q,setBodyRow:K,get vendors(){return w0()},isCustom:(S0)=>!QJ(S0),displayName:_0,commandText:n,isDefault:f0,isDefaultEngine:C1,editEngine:(S0)=>void z0(S0),renameEngine:(S0)=>void G0(S0),resetEngine:B0,onAddEngine:()=>void N0()})}}),null),U(d,b(X0,{get when(){return f()==="accounts"},get children(){return b(T3,{claudeStatus:I,codexStatus:l,copilotStatus:J0})}}),null),U(d,b(X0,{get when(){return f()==="keys"},get children(){return b(E3,{})}}),null),U(d,b(X0,{get when(){return f()==="feedback"},get children(){return b(u3,{level:Z,bodyRow:j,setLevel:Q,setBodyRow:K,title:L,setTitle:(S0)=>{A(S0),_("")},body:O,setBody:(S0)=>{g(S0),_("")},status:x,onTitleSubmit:()=>K(1),submit:()=>void D0()})}}),null),U(d,b(X0,{get when(){return f()==="dev"},get children(){return b(x3,{level:Z,bodyRow:j,setLevel:Q,setBodyRow:K,hasDaemon:M,confirmReset:()=>void h9(z,J.kv,G),confirmRestartDaemon:()=>void v9(z,J.orchestrator,G),remoteProjectsEnabled:y,toggleRemoteProjects:L0,autoStatusEnabled:Q0,toggleAutoStatus:M0,dispatcherEnabled:T0,toggleDispatcher:X1})}}),null),D(Y0,y0),q(Y0,"paddingTop",0),U(y0,(()=>{var S0=u0(()=>!!g0());return()=>S0()?F("settings.nav.feedback"):F("settings.nav.default")})()),u((S0)=>{var jJ=zu.BOLD,MJ=X.text,ZJ=X.textMuted,nJ=X.textMuted;return jJ!==S0.e&&(S0.e=q(V1,"attributes",jJ,S0.e)),MJ!==S0.t&&(S0.t=q(V1,"fg",MJ,S0.t)),ZJ!==S0.a&&(S0.a=q(R1,"fg",ZJ,S0.a)),nJ!==S0.o&&(S0.o=q(y0,"fg",nJ,S0.o)),S0},{e:void 0,t:void 0,a:void 0,o:void 0}),v})()}var i9=k(()=>{P();P();P();P();P();P();P();P();W1();QG();hJ();lf();SZ();mq();O1();pB();t1();v1();XJ();iq();uJ();b9();dJ();w9();k3();n9();w3();dG.show=(J,z,Y)=>{let G=!1;return new Promise((X)=>{J.replace(()=>b(dG,{kv:z,orchestrator:Y,onVisualPrefsChange:()=>{G=!0},onClose:()=>X({visualPrefsChanged:G})}),()=>X({visualPrefsChanged:G}))})}});import{TextAttributes as Gu}from"@opentui/core";function h3(){let{theme:J}=i0(),z=Pz(),Y=LH(),G=()=>Y.toasts().slice(-P3),X=()=>Math.max(0,z().width-Xu-Zu),Z=()=>Math.max(0,z().height-Qu-P3-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 G()},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),u((A)=>{var O=H(),g=B(),x=Gu.BOLD,_=B();return O!==A.e&&(A.e=q(j,"backgroundColor",O,A.e)),g!==A.t&&(A.t=q(K,"fg",g,A.t)),x!==A.a&&(A.a=q(K,"attributes",x,A.a)),_!==A.o&&(A.o=q(L,"fg",_,A.o)),A},{e:void 0,t:void 0,a:void 0,o:void 0}),j})()}})),u((f)=>{var H=X(),B=Z();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 P3=4,Xu=40,Zu=2,Qu=2;var v3=k(()=>{P();P();P();P();P();P();P();W1();MH();v1()});import{TextAttributes as qu}from"@opentui/core";function fu(J,z){let Y=J?`v${J}`:F("update.skew.olderBuild");return F("update.skew.hint",{daemon:Y,clientVersion:z})}function m3(J){let{theme:z}=i0(),Y=()=>Math.max(4,J.width()-2);return b(X0,{get when(){return J.stale()},get children(){var G=W("box"),X=W("text"),Z=W("box"),Q=W("text"),f=W("box"),H=W("text");return D(G,X),D(G,Z),D(G,f),q(G,"flexDirection","column"),q(G,"flexShrink",0),q(G,"paddingLeft",1),q(G,"paddingRight",1),q(G,"paddingBottom",1),q(X,"wrapMode","none"),U(X,()=>"\u2594".repeat(Y())),D(Z,Q),q(Z,"flexDirection","row"),q(Z,"gap",1),q(Q,"wrapMode","none"),U(Q,()=>F("update.skew.title")),D(f,H),q(f,"flexDirection","row"),q(f,"gap",1),q(H,"wrapMode","word"),U(H,()=>fu(J.daemonVersion(),J.clientVersion)),u((B)=>{var{warning:V,warning:j}=z,K=qu.BOLD,L=z.text;return V!==B.e&&(B.e=q(X,"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}),G}})}var c3=k(()=>{P();P();P();P();P();P();W1();v1();XJ()});function d3(J,z){return J.find((Y)=>Y.id!==z&&!Y.archived)}async function Hu(J){let z=J.tasks.find((Z)=>Z.id===J.taskId);if(!z)return null;let Y=!z.archived;try{await J.orch.setArchived(J.taskId,Y)}catch(Z){return J.logger.error(`${J.logPrefix} archive failed:`,Z),null}if(!Y)return{archived:Y};let G=M1(J.taskId),X=d3(J.tasks,J.taskId);if(await uz(G,X?M1(X.id):void 0).catch((Z)=>{J.logger.error(`${J.logPrefix} switch-client failed:`,Z)}),J.updateActiveTask)await J.orch.setActiveTask(X?.id??null).catch(()=>{});return await rJ(G).catch((Z)=>{J.logger.error(`${J.logPrefix} kill tmux session failed:`,Z)}),{archived:Y,nextTask:X}}async function Bu(J){let z=d3(J.tasks,J.taskId),Y=M1(J.taskId);if(J.switchBeforeKill)await uz(Y,z?M1(z.id):void 0).catch((G)=>{J.logger.error(`${J.logPrefix} switch-client failed:`,G)});if(J.updateActiveTask)await J.orch?.setActiveTask(z?.id??null).catch(()=>{});return await rJ(Y).catch((G)=>{J.logger.error(`${J.logPrefix} kill tmux session failed:`,G)}),{nextTask:z}}async function n3(J,z){if(!J.orch)return;let Y=J.tasks().find((X)=>X.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 Hu({orch:J.orch,tasks:J.tasks(),taskId:z,logger:J.logger,logPrefix:J.logPrefix,updateActiveTask:J.updateActiveTask}))return;await J.reload?.()}async function i3(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 X=!1;try{await J.orch.deleteTask(z),X=!0}catch(Q){if((Q instanceof Error?Q.message:String(Q)).includes(n8)){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}),X=!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(!X)return;let{nextTask:Z}=await Bu({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,Z)}async function l3(J,z){let Y=J.tasks().find((X)=>X.id===z);if(!Y)return;let G=await J.promptText(Y.title);if(!G||!J.orch)return;try{await J.orch.setTitle(z,G)}catch(X){J.logger.error(`${J.logPrefix} task.rename failed:`,X),J.notifyError?.(`Couldn't rename task: ${X instanceof Error?X.message:String(X)}`);return}await J.reload?.()}async function $3(J,z){let Y=J.tasks().find((X)=>X.id===z);if(!Y||Y.kind==="main")return;let G=await J.promptText(Y.branch,{dialogTitle:"Rename branch",fieldLabel:"branch"});if(!G||!J.orch)return;try{await J.orch.setBranch(z,G)}catch(X){J.logger.error(`${J.logPrefix} task.setBranch failed:`,X),J.notifyError?.(`Couldn't rename branch: ${X instanceof Error?X.message:String(X)}`);return}await J.reload?.()}async function a3(J,z){let Y=J.tasks().find((Z)=>Z.id===z);if(!Y||!J.orch)return;let G=await tz(),X=OY(G,Y.vendor??n1);try{await J.orch.setVendor(z,X)}catch(Z){J.logger.error(`${J.logPrefix} task.setVendor failed:`,Z),J.notifyError?.(`Couldn't switch engine: ${Z instanceof Error?Z.message:String(Z)}`);return}J.notifyInfo?.(`Engine \u2192 ${RG(X)} (applies on reopen)`),await J.reload?.()}async function _3(J){let z=CJ(),Y=J.cursorRepo()??z[0]??process.cwd();if(J.openCreateSurface&&await J.openCreateSurface(Y))return;let G=J.lastVendor()??n1,X=await tz();if(X.length===0)J.notifyInfo?.("No engine CLI detected \u2014 install claude or codex, or add one in Settings \u2192 Engines");let Z=J.orch,Q=await J.promptNewTask(Y,z,{defaultVendor:G,availableVendors:X,discoverAdoptable:Z?(H)=>Z.discoverAdoptableWorktrees(H):void 0});if(!Q)return;if(J.rememberVendor(Q.vendor),_z(Q.repo),J.onRepoSaved?.(),!Z){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 Z.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?.(F("newTask.adopt.summaryNone",{error:V??""}));return}if(B<H)J.notifyInfo?.(F("newTask.adopt.summaryPartial",{done:B,total:H}));else J.notifyInfo?.(F("newTask.adopt.summaryAll",{count:B}))}else try{f=(await Z.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 p3=k(()=>{QG();hJ();$8();O1();XJ();pJ();t1();fJ()});import{spawn as ju}from"child_process";import{existsSync as Wu}from"fs";import{basename as Vu,delimiter as Ku,isAbsolute as Uu,join as Du}from"path";function l9(J,z,Y){if(Uu(J))return Y(J);let G=z.PATH??"";for(let X of G.split(Ku)){if(!X)continue;if(Y(Du(X,J)))return!0}return!1}function Fu(J){let z=Vu(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 r3(J={}){let z=J.env??process.env,Y=J.platform??process.platform,G=J.exists??Wu,X=z.KOBE_OPEN_EDITOR?.trim();if(X)return{id:"env",label:Fu(X),command:X,args:[]};for(let Z of Lu)if(l9(Z.command,z,G))return{id:Z.id,label:Z.label,command:Z.command,args:[]};if(Y==="darwin"&&l9("open",z,G)){for(let Z of Mu)if(Z.paths.some((Q)=>G(Q)))return{id:Z.id,label:Z.label,command:"open",args:["-a",Z.appName]};return{id:"mac-open",label:"Finder",command:"open",args:[]}}if(Y==="linux"&&l9("xdg-open",z,G))return{id:"xdg-open",label:"Open",command:"xdg-open",args:[]};return null}function Ou(J,z){return[z.command,[...z.args,J]]}function o3(J,z,Y={}){if(!J)return!1;let G=Y.spawn??ju,[X,Z]=Ou(J,z);try{let Q=G(X,Z,{detached:!0,stdio:"ignore"});if(Q.pid===void 0)return!1;return Q.unref(),!0}catch{return!1}}var Lu,Mu;var s3=k(()=>{Lu=[{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"}],Mu=[{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 bH(J){let z=new Map;function Y(G){let X=z.get(G);if(!X){let[Z,Q]=a(J.initial,J.equals?{equals:J.equals}:void 0);X={read:Z,write:(f)=>Q(()=>f),inFlight:!1,nextAllowedAt:0},z.set(G,X)}return X}return{read(G){if(!G)return J.initial;return Y(G).read()},poll(G){if(!G)return;let X=Y(G);zX(X,J,(Z)=>J.run(G,Z),(Z)=>X.write(Z))},reset(){z.clear()}}}var LQ=k(()=>{W1();YX();YX()});import{stat as Au}from"fs/promises";import{join as Ru}from"path";async function ku(J){try{let z=await Au(Ru(J,".git","HEAD"));return`${z.mtimeMs}:${z.size}`}catch{return null}}async function bu(J,z,Y=GY){let G=await ku(J);if(G!==null){let f=t3.get(J);if(f&&f.fingerprint===G)return f.value}let X="",Z=await Y("git",["symbolic-ref","--short","HEAD"],{cwd:J,env:vJ(),signal:z}),Q=Z.status===0?Z.stdout.trim():"";if(Q&&Q!=="HEAD")X=Q;else if((await Y("git",["rev-parse","--verify","HEAD"],{cwd:J,env:vJ(),signal:z})).status===0)X="(detached)";if(G!==null)t3.set(J,{fingerprint:G,value:X});return X}function JM(J){return e3.read(J)}function zM(J){e3.poll(J)}var gu=2000,Cu=30000,Nu=1500,t3,e3;var YM=k(()=>{wY();LQ();t3=new Map;e3=bH({initial:"",timeoutMs:gu,slowRetryMs:Cu,minIntervalMs:Nu,run:(J,z)=>bu(J,z)})});function $9(J){let z=J.scheduleTimeout??((H,B)=>{let V=setTimeout(H,B);return()=>clearTimeout(V)}),Y=!1,G=null,X=()=>{Y=!0,G?.(),G=z(()=>{Y=!1,G=null},700)},Z=()=>{Y=!1,G?.(),G=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(){Z(),Q(1)},moveUp(){Z(),Q(-1)},selectCurrent(){Z();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)Z(),f(0);else X()},pressShiftG(){Z(),f(J.getFlatIds().length-1)},isChordArmed(){return Y},disarmChord(){Z()}}}function GM(J){let z=$9({getCursor:()=>J.cursorIndex(),setCursor:(Z)=>J.setCursorIndex(Z),getFlatIds:()=>J.flatTaskIds(),onSelect:(Z)=>J.onSelect(Z)}),Y=()=>{let Z=J.flatTaskIds(),Q=J.cursorIndex();if(Q<0||Q>=Z.length)return;return Z[Q]},G=()=>J.searchMode?.()??!1,X=()=>J.moveMode?.()??!1;D1(()=>({enabled:J.focused()&&!G(),bindings:pY({"sidebar.nav":(Z,Q)=>{let f=(Q??0)%2===0;if(X()){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(X()){J.onMoveModeExit?.();return}z.selectCurrent()},"sidebar.goto":(Z)=>{if(X())return;if(Z.shift)z.pressShiftG();else z.pressG()},"sidebar.delete":()=>{if(X())return;let Z=Y();if(Z!==void 0)J.onDeleteRequest?.(Z)},"sidebar.archive":()=>{if(X())return;let Z=Y();if(Z!==void 0)J.onArchiveRequest?.(Z)},"sidebar.localMerge":(Z)=>{if(!Z.shift)return;let Q=Y();if(Q!==void 0)J.onLocalMergeRequest?.(Q)},"sidebar.rename":()=>{if(X())return;let Z=Y();if(Z!==void 0)J.onRenameRequest?.(Z)},"sidebar.pin":(Z)=>{if(X())return;if(!Z.shift)return;let Q=Y();if(Q!==void 0)J.onPinRequest?.(Q)},"sidebar.search.enter":()=>{if(X())return;J.onSearchEnter?.()},"sidebar.sort":()=>{if(X())return;J.onSortModeToggle?.()},"sidebar.projectFilter":()=>{if(X())return;J.onProjectFilterToggle?.()}})})),D1(()=>({enabled:J.focused()&&X(),bindings:[{key:"escape",cmd:()=>J.onMoveModeExit?.()}]})),D1(()=>({enabled:J.focused(),bindings:pY({"sidebar.view":(Z,Q)=>{J.onViewSwitch?.((Q??0)%2===0?-1:1)}})})),D1(()=>({enabled:J.focused()&&G(),bindings:pY({"sidebar.search.nav":(Z,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 XM=k(()=>{rX();uJ()});function a9(J,z){if(z<=0)return"";if(J.length<=z)return J;return`${J.slice(0,Math.max(0,z-1))}\u2026`}function _9(J,z){return` ${a9(J,Math.max(0,z))}`}function Iu(J){switch(J){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 yu(J){switch(J){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 qM(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 Tu(){return F("tasks.subtitle.noTracking")}function uu(){return F("tasks.subtitle.materializing")}function xu(J){if(J.kind==="main")return!1;return J.vendor!==void 0&&!QJ(J.vendor)}function p9(J){let{task:z}=J,Y=z.kind==="main",G=Y?J.mainBranch??"":z.branch,X=Su[z.status],Z=J.activity?.state,Q=Z!==void 0,f=Eu(Z),H=yu(Z),B=xu(z)&&!Q,V=J.job!==void 0,j=V||!B&&(Z==="running"||J.live||!Q&&!Y&&z.status==="in_progress"),K=eX[J.spinnerFrame]??eX[0],L=V?"primary":B?"textMuted":H?.tone??(j?"primary":f?.tone??X.tone),A=B?Tu():Iu(z.status),O=V?J.truncateBranch(uu(),J.subtitleBudget):H?J.truncateBranch(H.text,J.subtitleBudget):G.length>0?J.truncateBranch(G,J.subtitleBudget):J.truncateBranch(A,J.subtitleBudget),g=B?ZM:f?.glyph??X.glyph,x=B?ZM:f?.glyph??"\u2605";return{isMain:Y,titleText:Y?gz(z.repo):z.title,subtitleText:O,loading:j,stateGlyph:j?K:g,projectGlyph:j?K:x,tone:L}}function r9(J,z){if(!J.loading)return J;let Y=eX[z()%eX.length]??"\u280B";if(Y===J.stateGlyph&&Y===J.projectGlyph)return J;return{...J,stateGlyph:Y,projectGlyph:Y}}function Eu(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 Su,eX,QM=100,ZM="\xB7";var fM=k(()=>{XJ();t1();gH();Su={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"}};eX=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function o9(J){return HM.read(J)}function s9(J){HM.poll(J)}var wu=4000,Pu=60000,hu=1500,vu,HM;var BM=k(()=>{wY();LQ();uX();LQ();vu={added:0,deleted:0},HM=bH({initial:vu,equals:wz,timeoutMs:wu,slowRetryMs:Pu,minIntervalMs:hu,run:async(J,z)=>{let Y=await GY("git",["status","--porcelain=v1"],{cwd:J,env:vJ(),signal:z});if(Y.status!==0)throw Error("git status failed");return TX(Y.stdout)}})});import{TextAttributes as E1}from"@opentui/core";function mu(J){switch(J){case"active":return F("tasks.view.workspace");case"archived":return F("tasks.view.archives")}}function WM(J,z=du){if(J.length<=z)return J;return`${J.slice(0,Math.max(0,z-1))}\u2026`}function nu(J){let z=0;for(let Y of J)z+=(Y.codePointAt(0)??0)>=4352?2:1;return z}function iu(J,z){if(z<=0||J.length<=z)return J;return`\u2026${J.slice(J.length-Math.max(0,z-1))}`}function VM(J){let{theme:z}=i0(),Y=()=>J.focused?J.focused():!0,[G,X]=a("active"),[Z,Q]=a(!1),[f,H]=a(""),[B,V]=a(null),j=()=>J.projectFilter?.()??B(),K=(n)=>{if(J.onProjectFilterChange)J.onProjectFilterChange(n);else V(n)};function L(){H(""),Q(!0),J.onSearchActiveChange?.(!0)}function A(n){Q(!1),H(""),J.onSearchActiveChange?.(!1)}s0(()=>{if(!Z())return;let n=HJ();if(!n)return;let f0=(I0)=>{if(I0.defaultPrevented)return;if(!Y())return;if(I0.ctrl||I0.meta||I0.option)return;if(I0.name==="backspace"){H((p0)=>p0.slice(0,-1));return}let r0=I0.sequence;if(!r0||r0.length!==1)return;let _0=r0.charCodeAt(0);if(_0<32||_0===127)return;H((p0)=>p0+r0)};n.keyInput.on("keypress",f0),N1(()=>n.keyInput.off("keypress",f0))});let[O,g]=a(0),x=setInterval(()=>g((n)=>n+1),cu);N1(()=>clearInterval(x));let[_,S]=a(0),N=setInterval(()=>S((n)=>(n+1)%eX.length),QM);N1(()=>clearInterval(N));let M=()=>J.sortMode?.()??"default",I=K0(()=>U3(J.tasks(),G())),r=K0(()=>{let n=j();if(!n)return null;let f0=zz(n);return I().find((I0)=>zz(I0.repo)===f0)??null}),l=K0(()=>r()?.repo??null),e=K0(()=>r()?.label??"all"),J0=K0(()=>{let n=r();return n?n.count:I().reduce((f0,I0)=>f0+I0.count,0)}),T=K0(()=>{let n=J0();return`${n} ${n===1?F("tasks.project.taskSingular"):F("tasks.project.taskPlural")}`}),q0=K0((n)=>M3(n,T9(J.tasks(),G(),Z()?f():"",M(),l())),[]),p=K0(()=>u9(q0())),j0=K0(()=>L3(q0())),F0=K0(()=>j0().projectRows),V0=K0(()=>j0().taskRows),t=K0(()=>{let n=new Map;for(let f0 of q0())n.set(f0.flatIndex,f0);return n}),h=K0(()=>u9(T9(J.tasks(),G(),"",M(),l())).length),C=K0(()=>V0().length>0);s0(()=>{let n=j(),f0=I();if(n!==null&&f0.length>0&&(f0.length<=1||r()===null))K(null)});function o(){let n=I();if(n.length<=1){K(null);return}let f0=l(),I0=f0?zz(f0):null,r0=I0===null?-1:n.findIndex((p0)=>zz(p0.repo)===I0),_0=n[r0+1];K(_0?.repo??null)}let E=()=>J.width?J.width():jM,c=K0(()=>Math.max(6,E()-9)),s=K0(()=>Math.max(6,E()-16)),Z0=Pz(),A0=K0(()=>{let n=Math.max(2,Math.min(10,Math.floor(Z0().height*0.25))),f0=Math.max(2,F0().length*2);return Math.min(n,f0)}),[h0,k0]=a(null),[C0,y]=a(-1),L0,Q0,M0,T0=new Map;s0(()=>{let n=J.width?J.width():jM,f0=M0;if(!f0)return;f0.width=n,f0.flexShrink=1,f0.minHeight=0}),s0(IJ([C0,q0],([n])=>{let f0=t().get(n);if(!f0)return;let I0=f0.task.kind==="main"?L0:Q0;if(!I0)return;if(I0.viewport.height<=0)return;let r0=T0.get(n);if(!r0)return;I0.scrollChildIntoView(r0.id)})),s0(IJ(()=>[J.selectedId(),p()],([n,f0])=>{let I0=_1(C0);if(n===null){if(I0===-1&&f0.length>0)y(0);else if(I0>=f0.length)y(Math.max(0,f0.length-1));else if(f0.length===0)y(-1);return}let r0=f0.indexOf(n);if(r0>=0){if(r0!==I0)y(r0)}else if(f0.length===0)y(-1);else if(I0<0||I0>=f0.length)y(f0.length-1)})),s0(IJ(G,()=>{let n=p();y(n.length>0?0:-1)},{defer:!0})),s0(IJ(l,(n)=>y(D3(q0(),n)),{defer:!0})),s0(IJ([Z,f],()=>{if(!Z())return;let n=p();y(n.length>0?0:-1)}));function X1(n){let f0=G(),I0=MQ.findIndex((p0)=>p0.view===f0);if(I0<0)return;let r0=(I0+n+MQ.length)%MQ.length,_0=MQ[r0];if(_0)X(_0.view)}GM({focused:Y,cursorIndex:C0,setCursorIndex:y,flatTaskIds:p,onSelect:(n)=>{J.onSelect(n),J.onActivate?.(n)},onDeleteRequest:(n)=>J.onDeleteRequest?.(n),onArchiveRequest:(n)=>J.onArchiveRequest?.(n),onLocalMergeRequest:(n)=>J.onLocalMergeRequest?.(n),moveMode:J.moveMode,onMoveRequest:(n,f0)=>J.onMoveRequest?.(n,f0),onMoveModeExit:()=>J.onMoveModeExit?.(),onRenameRequest:(n)=>J.onRenameRequest?.(n),onPinRequest:(n)=>J.onPinRequest?.(n),onViewSwitch:(n)=>X1(n),onSortModeToggle:()=>J.onSortModeToggle?.(),onProjectFilterToggle:()=>o(),searchMode:Z,onSearchEnter:()=>L(),onSearchExit:(n)=>A(n)});let z1=(n)=>(()=>{var f0=W("box"),I0=W("box"),r0=W("text"),_0=W("text");return D(f0,I0),q(f0,"flexDirection","column"),q(f0,"flexShrink",0),U(f0,b(X0,{get when(){return n.topPad},get children(){var p0=W("box"),t0=W("text");return D(p0,t0),q(p0,"flexShrink",0),D(t0,E0(" ")),q(t0,"wrapMode","none"),p0}}),I0),D(I0,r0),D(I0,_0),q(I0,"flexDirection","row"),q(I0,"flexShrink",0),q(I0,"gap",1),q(I0,"paddingLeft",1),q(I0,"paddingRight",1),q(r0,"wrapMode","none"),U(r0,()=>n.label),q(_0,"wrapMode","none"),U(_0,()=>"\u2500".repeat(Math.max(2,E()-10-n.label.length-(n.suffix?.length??0)))),U(I0,b(X0,{get when(){return n.suffix},get children(){var p0=W("text");return q(p0,"wrapMode","none"),U(p0,()=>n.suffix),u((t0)=>{var C1=z.info,g1=E1.BOLD;return C1!==t0.e&&(t0.e=q(p0,"fg",C1,t0.e)),g1!==t0.t&&(t0.t=q(p0,"attributes",g1,t0.t)),t0},{e:void 0,t:void 0}),p0}}),null),u((p0)=>{var t0=z.textMuted,C1=E1.BOLD,g1=z.border;return t0!==p0.e&&(p0.e=q(r0,"fg",t0,p0.e)),C1!==p0.t&&(p0.t=q(r0,"attributes",C1,p0.t)),g1!==p0.a&&(p0.a=q(_0,"fg",g1,p0.a)),p0},{e:void 0,t:void 0,a:void 0}),f0})(),w0=(n)=>{switch(n){case"success":return z.success;case"warning":return z.warning;case"primary":return z.primary;case"error":return z.error;default:return z.textMuted}},v0=(n)=>{let f0=n.row.task,I0=n.row.flatIndex,r0=()=>I0===C0(),_0=()=>f0.id===J.selectedId(),p0=K0(()=>{let R=J.chatRunState?.();if(!R)return!1;let m0=`${f0.id}:`;for(let[U0,x0]of R)if(x0==="running"&&U0.startsWith(m0))return!0;return!1}),t0=K0(()=>{let R=Ef(J.worktreeChanges?.(),f0.worktreePath);if(R)return R;if(O(),!f0.archived)s9(f0.worktreePath);return o9(f0.worktreePath)},void 0,{equals:wz}),C1=K0(()=>{return O(),zM(f0.repo),JM(f0.repo)}),g1=K0(()=>p9({task:f0,activity:J.engineState?.().get(f0.id),job:J.taskJobs?.().get(f0.id),live:p0(),spinnerFrame:0,subtitleBudget:s(),truncateBranch:WM,mainBranch:C1()})),z0=K0(()=>r9(g1(),_)),G0=()=>!z0().loading?z.primary:w0(z0().tone),B0=()=>r0()?z.focusAccent:_0()?z.primary:void 0,N0=()=>r0()||_0()?"\u258C":" ";return(()=>{var R=W("box"),m0=W("box"),U0=W("box"),x0=W("text"),W0=W("box"),D0=W("text"),g0=W("text"),J1=W("box"),Y1=W("text"),l0=W("box"),u1=W("text");return D(R,m0),q(R,"flexDirection","column"),q(R,"gap",0),q(R,"paddingBottom",0),D(m0,U0),D(m0,J1),hz((b0)=>{T0.set(I0,b0),N1(()=>{if(T0.get(I0)===b0)T0.delete(I0)})},m0),q(m0,"flexDirection","column"),q(m0,"gap",0),q(m0,"onMouseUp",()=>{if(J.onSelect(f0.id),J.activateOnClick)J.onActivate?.(f0.id)}),q(m0,"onMouseOver",(b0)=>k0({task:f0,x:b0.x,y:b0.y})),q(m0,"onMouseOut",()=>k0((b0)=>b0?.task.id===f0.id?null:b0)),D(U0,x0),D(U0,W0),q(U0,"flexDirection","row"),q(U0,"gap",0),q(x0,"wrapMode","none"),U(x0,N0),D(W0,D0),D(W0,g0),q(W0,"flexDirection","row"),q(W0,"flexGrow",1),q(W0,"paddingRight",1),q(W0,"gap",0),q(D0,"wrapMode","none"),U(D0,()=>z0().projectGlyph),q(g0,"wrapMode","none"),q(g0,"flexGrow",1),U(g0,()=>_9(z0().titleText,c())),D(J1,Y1),D(J1,l0),q(J1,"flexDirection","row"),q(J1,"gap",0),q(Y1,"wrapMode","none"),U(Y1,N0),D(l0,u1),q(l0,"flexDirection","row"),q(l0,"flexGrow",1),q(l0,"paddingLeft",2),q(l0,"paddingRight",1),q(l0,"gap",1),q(u1,"wrapMode","none"),q(u1,"flexGrow",1),U(u1,()=>z0().subtitleText),U(l0,b(X0,{get when(){return t0().added>0},get children(){var b0=W("text"),m1=E0("+");return D(b0,m1),q(b0,"wrapMode","none"),U(b0,()=>t0().added,null),u((v)=>q(b0,"fg",z.success,v)),b0}}),null),U(l0,b(X0,{get when(){return t0().deleted>0},get children(){var b0=W("text"),m1=E0("\u2212");return D(b0,m1),q(b0,"wrapMode","none"),U(b0,()=>t0().deleted,null),u((v)=>q(b0,"fg",z.error,v)),b0}}),null),u((b0)=>{var m1=r0()?z.backgroundElement:void 0,v=B0(),R0=G0(),V1=E1.BOLD,R1=z.text,B1=E1.BOLD,d=B0(),Y0=z.textMuted,y0=E1.DIM;return m1!==b0.e&&(b0.e=q(m0,"backgroundColor",m1,b0.e)),v!==b0.t&&(b0.t=q(x0,"fg",v,b0.t)),R0!==b0.a&&(b0.a=q(D0,"fg",R0,b0.a)),V1!==b0.o&&(b0.o=q(D0,"attributes",V1,b0.o)),R1!==b0.i&&(b0.i=q(g0,"fg",R1,b0.i)),B1!==b0.n&&(b0.n=q(g0,"attributes",B1,b0.n)),d!==b0.s&&(b0.s=q(Y1,"fg",d,b0.s)),Y0!==b0.h&&(b0.h=q(u1,"fg",Y0,b0.h)),y0!==b0.r&&(b0.r=q(u1,"attributes",y0,b0.r)),b0},{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 n=W("box"),f0=W("box"),I0=W("box"),r0=W("text"),_0=W("box"),p0=W("box"),t0=W("text"),C1=W("scrollbox"),g1=W("box");return D(n,f0),D(n,_0),D(n,C1),hz((z0)=>{M0=z0},n),q(n,"flexGrow",1),q(n,"minHeight",0),q(n,"flexDirection","column"),q(n,"paddingTop",1),q(n,"paddingBottom",1),q(n,"paddingLeft",0),q(n,"paddingRight",0),D(f0,I0),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(I0,r0),q(I0,"flexDirection","row"),q(I0,"gap",1),D(r0,E0("KOBE")),q(r0,"wrapMode","none"),U(I0,b(X0,{get when(){return J.headerStatus?.()},children:(z0)=>(()=>{var G0=W("text");return q(G0,"wrapMode","none"),q(G0,"onMouseUp",()=>J.onHeaderStatusClick?.()),U(G0,()=>z0().label),u((B0)=>{var N0=z0().emphasize?z.warning:z.textMuted,R=z0().emphasize?E1.BOLD:E1.DIM;return N0!==B0.e&&(B0.e=q(G0,"fg",N0,B0.e)),R!==B0.t&&(B0.t=q(G0,"attributes",R,B0.t)),B0},{e:void 0,t:void 0}),G0})()}),null),U(f0,b(X0,{get when(){return J.onAddTask},get children(){var z0=W("text");return D(z0,E0("[+]")),q(z0,"wrapMode","none"),q(z0,"onMouseUp",()=>J.onAddTask?.()),u((G0)=>{var B0=z.primary,N0=E1.BOLD;return B0!==G0.e&&(G0.e=q(z0,"fg",B0,G0.e)),N0!==G0.t&&(G0.t=q(z0,"attributes",N0,G0.t)),G0},{e:void 0,t:void 0}),z0}}),null),U(n,b(X0,{get when(){return Z()},get children(){var z0=W("box"),G0=W("text"),B0=W("text"),N0=W("text");return D(z0,G0),D(z0,B0),D(z0,N0),q(z0,"flexDirection","row"),q(z0,"gap",0),q(z0,"paddingBottom",1),q(z0,"paddingLeft",1),D(G0,E0("/")),q(G0,"wrapMode","none"),q(B0,"wrapMode","none"),U(B0,f),D(N0,E0("\u2588")),q(N0,"wrapMode","none"),U(z0,b(X0,{get when(){return f().length===0},get children(){var R=W("text"),m0=E0(" ");return D(R,m0),q(R,"wrapMode","none"),U(R,()=>F("tasks.search.placeholder"),null),u((U0)=>q(R,"fg",z.textMuted,U0)),R}}),null),U(z0,b(X0,{get when(){return f().length>0},get children(){var R=W("text"),m0=E0(" "),U0=E0("/");return D(R,m0),D(R,U0),q(R,"wrapMode","none"),U(R,()=>p().length,U0),U(R,h,null),u((x0)=>q(R,"fg",z.textMuted,x0)),R}}),null),u((R)=>{var{info:m0,text:U0,info:x0}=z,W0=E1.BLINK;return m0!==R.e&&(R.e=q(G0,"fg",m0,R.e)),U0!==R.t&&(R.t=q(B0,"fg",U0,R.t)),x0!==R.a&&(R.a=q(N0,"fg",x0,R.a)),W0!==R.o&&(R.o=q(N0,"attributes",W0,R.o)),R},{e:void 0,t:void 0,a:void 0,o:void 0}),z0}}),_0),D(_0,p0),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(p0,t0),q(p0,"flexDirection","row"),q(p0,"gap",2),U(p0,b(Q1,{each:MQ,children:(z0)=>{let G0=()=>G()===z0.view;return(()=>{var B0=W("text");return q(B0,"wrapMode","none"),q(B0,"onMouseUp",()=>X(z0.view)),U(B0,()=>mu(z0.view)),u((N0)=>{var R=G0()?z.primary:z.textMuted,m0=G0()?E1.BOLD:void 0;return R!==N0.e&&(N0.e=q(B0,"fg",R,N0.e)),m0!==N0.t&&(N0.t=q(B0,"attributes",m0,N0.t)),N0},{e:void 0,t:void 0}),B0})()}}),t0),D(t0,E0("[/]")),q(t0,"wrapMode","none"),U(_0,b(X0,{get when(){return J.sortMode},get children(){var z0=W("text");return q(z0,"wrapMode","none"),q(z0,"onMouseUp",()=>J.onSortModeToggle?.()),U(z0,()=>F("tasks.sort")),u((G0)=>{var B0=z.textMuted,N0=E1.DIM;return B0!==G0.e&&(G0.e=q(z0,"fg",B0,G0.e)),N0!==G0.t&&(G0.t=q(z0,"attributes",N0,G0.t)),G0},{e:void 0,t:void 0}),z0}}),null),U(n,b(X0,{get when(){return F0().length>0},get children(){var z0=W("box"),G0=W("box"),B0=W("text"),N0=W("text"),R=W("scrollbox"),m0=W("box");return D(z0,G0),D(z0,R),q(z0,"flexDirection","column"),q(z0,"flexShrink",0),D(G0,B0),D(G0,N0),q(G0,"flexDirection","row"),q(G0,"flexShrink",0),q(G0,"gap",1),q(G0,"paddingLeft",1),q(G0,"paddingRight",1),q(G0,"onMouseUp",()=>o()),q(B0,"wrapMode","none"),U(B0,()=>F("tasks.header.projects")),U(G0,b(X0,{get when(){return I().length>1},get children(){var U0=W("text");return q(U0,"wrapMode","none"),U(U0,e),u((x0)=>{var W0=l()?z.primary:z.textMuted,D0=l()?E1.BOLD:void 0;return W0!==x0.e&&(x0.e=q(U0,"fg",W0,x0.e)),D0!==x0.t&&(x0.t=q(U0,"attributes",D0,x0.t)),x0},{e:void 0,t:void 0}),U0}}),N0),q(N0,"wrapMode","none"),U(N0,()=>"\u2500".repeat(Math.max(2,E()-10-F("tasks.header.projects").length-(I().length>1?e().length+1:0)-(I().length>1?T().length+1:0)))),U(G0,b(X0,{get when(){return I().length>1},get children(){var U0=W("text");return q(U0,"wrapMode","none"),U(U0,T),u((x0)=>{var W0=z.textMuted,D0=E1.DIM;return W0!==x0.e&&(x0.e=q(U0,"fg",W0,x0.e)),D0!==x0.t&&(x0.t=q(U0,"attributes",D0,x0.t)),x0},{e:void 0,t:void 0}),U0}}),null),D(R,m0),hz((U0)=>{L0=U0},R),q(R,"flexShrink",0),q(R,"flexGrow",0),q(R,"minHeight",0),q(R,"stickyScroll",!1),q(R,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),q(m0,"flexShrink",0),q(m0,"gap",0),q(m0,"paddingRight",1),U(m0,b(Q1,{get each(){return F0()},children:(U0)=>b(v0,{row:U0})})),u((U0)=>{var x0=z.textMuted,W0=E1.BOLD,D0=z.border,g0=A0();return x0!==U0.e&&(U0.e=q(B0,"fg",x0,U0.e)),W0!==U0.t&&(U0.t=q(B0,"attributes",W0,U0.t)),D0!==U0.a&&(U0.a=q(N0,"fg",D0,U0.a)),g0!==U0.o&&(U0.o=q(R,"maxHeight",g0,U0.o)),U0},{e:void 0,t:void 0,a:void 0,o:void 0}),z0}}),C1),U(n,b(z1,{get label(){return F("tasks.header.tasks")},get suffix(){return u0(()=>M()==="default")()?void 0:M()},get topPad(){return F0().length>0}}),C1),D(C1,g1),hz((z0)=>{Q0=z0},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 V0()},children:(z0)=>{let{task:G0,flatIndex:B0}=z0,N0=()=>B0===C0(),R=()=>G0.id===J.selectedId(),m0=K0(()=>{let Y1=J.chatRunState?.();if(!Y1)return!1;let l0=`${G0.id}:`;for(let[u1,b0]of Y1)if(b0==="running"&&u1.startsWith(l0))return!0;return!1}),U0=K0(()=>{let Y1=Ef(J.worktreeChanges?.(),G0.worktreePath);if(Y1)return Y1;if(O(),!G0.archived)s9(G0.worktreePath);return o9(G0.worktreePath)},void 0,{equals:wz}),x0=K0(()=>p9({task:G0,activity:J.engineState?.().get(G0.id),job:J.taskJobs?.().get(G0.id),live:m0(),spinnerFrame:0,subtitleBudget:s(),truncateBranch:WM,mainBranch:""})),W0=K0(()=>r9(x0(),_)),D0=()=>w0(W0().tone),g0=()=>N0()?z.focusAccent:R()?z.primary:void 0,J1=()=>N0()||R()?"\u258C":" ";return(()=>{var Y1=W("box"),l0=W("box"),u1=W("box"),b0=W("text"),m1=W("box"),v=W("text"),R0=W("text"),V1=W("box"),R1=W("text"),B1=W("box"),d=W("text");return D(Y1,l0),q(Y1,"flexDirection","column"),q(Y1,"gap",0),q(Y1,"paddingBottom",1),D(l0,u1),D(l0,V1),hz((Y0)=>{T0.set(B0,Y0),N1(()=>{if(T0.get(B0)===Y0)T0.delete(B0)})},l0),q(l0,"flexDirection","column"),q(l0,"gap",0),q(l0,"onMouseUp",()=>{if(J.onSelect(G0.id),J.activateOnClick)J.onActivate?.(G0.id)}),q(l0,"onMouseOver",(Y0)=>k0({task:G0,x:Y0.x,y:Y0.y})),q(l0,"onMouseOut",()=>k0((Y0)=>Y0?.task.id===G0.id?null:Y0)),D(u1,b0),D(u1,m1),q(u1,"flexDirection","row"),q(u1,"gap",0),q(b0,"wrapMode","none"),U(b0,J1),D(m1,v),D(m1,R0),q(m1,"flexDirection","row"),q(m1,"flexGrow",1),q(m1,"paddingRight",1),q(m1,"gap",0),q(v,"wrapMode","none"),U(v,()=>W0().stateGlyph),q(R0,"wrapMode","none"),q(R0,"flexGrow",1),U(R0,()=>_9(W0().titleText,c())),U(m1,b(X0,{get when(){return u0(()=>!!J.moveMode?.())()&&N0()},get children(){var Y0=W("text");return q(Y0,"wrapMode","none"),U(Y0,()=>F("tasks.moveChip")),u((y0)=>q(Y0,"fg",z.warning,y0)),Y0}}),null),D(V1,R1),D(V1,B1),q(V1,"flexDirection","row"),q(V1,"gap",0),q(R1,"wrapMode","none"),U(R1,J1),D(B1,d),q(B1,"flexDirection","row"),q(B1,"flexGrow",1),q(B1,"paddingLeft",2),q(B1,"paddingRight",1),q(B1,"gap",1),q(d,"wrapMode","none"),q(d,"flexGrow",1),U(d,()=>W0().subtitleText),U(B1,b(X0,{get when(){return G0.pinned===!0},get children(){var Y0=W("text");return D(Y0,E0("\u25B4")),q(Y0,"wrapMode","none"),u((y0)=>q(Y0,"fg",z.warning,y0)),Y0}}),null),U(B1,b(X0,{get when(){return qM(G0)},children:(Y0)=>(()=>{var y0=W("text");return q(y0,"wrapMode","none"),U(y0,()=>Y0().glyph),u((S0)=>q(y0,"fg",w0(Y0().tone),S0)),y0})()}),null),U(B1,b(X0,{get when(){return U0().added>0},get children(){var Y0=W("text"),y0=E0("+");return D(Y0,y0),q(Y0,"wrapMode","none"),U(Y0,()=>U0().added,null),u((S0)=>q(Y0,"fg",z.success,S0)),Y0}}),null),U(B1,b(X0,{get when(){return U0().deleted>0},get children(){var Y0=W("text"),y0=E0("\u2212");return D(Y0,y0),q(Y0,"wrapMode","none"),U(Y0,()=>U0().deleted,null),u((S0)=>q(Y0,"fg",z.error,S0)),Y0}}),null),u((Y0)=>{var y0=N0()?z.backgroundElement:void 0,S0=g0(),jJ=D0(),MJ=E1.BOLD,ZJ=z.text,nJ=R()||N0()?E1.BOLD:void 0,cz=g0(),gJ=z.textMuted,dz=E1.DIM;return y0!==Y0.e&&(Y0.e=q(l0,"backgroundColor",y0,Y0.e)),S0!==Y0.t&&(Y0.t=q(b0,"fg",S0,Y0.t)),jJ!==Y0.a&&(Y0.a=q(v,"fg",jJ,Y0.a)),MJ!==Y0.o&&(Y0.o=q(v,"attributes",MJ,Y0.o)),ZJ!==Y0.i&&(Y0.i=q(R0,"fg",ZJ,Y0.i)),nJ!==Y0.n&&(Y0.n=q(R0,"attributes",nJ,Y0.n)),cz!==Y0.s&&(Y0.s=q(R1,"fg",cz,Y0.s)),gJ!==Y0.h&&(Y0.h=q(d,"fg",gJ,Y0.h)),dz!==Y0.r&&(Y0.r=q(d,"attributes",dz,Y0.r)),Y0},{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}),Y1})()}}),null),U(g1,b(X0,{get when(){return p().length===0},get children(){var z0=W("box"),G0=W("text");return D(z0,G0),q(z0,"paddingTop",1),q(z0,"paddingLeft",1),U(G0,(()=>{var B0=u0(()=>!!(Z()&&f().trim().length>0));return()=>B0()?F("tasks.empty.noMatchSearch"):u0(()=>!!l())()?u0(()=>G()==="active")()?F("tasks.empty.noActiveProject"):F("tasks.empty.noArchivedProject"):u0(()=>G()==="active")()?F("tasks.empty.noActive"):F("tasks.empty.noArchived")})()),u((B0)=>q(G0,"fg",z.textMuted,B0)),z0}}),null),U(g1,b(X0,{get when(){return u0(()=>!!(l()&&p().length>0&&!C()))()&&!(Z()&&f().trim().length>0)},get children(){var z0=W("box"),G0=W("text");return D(z0,G0),q(z0,"paddingTop",1),q(z0,"paddingLeft",1),q(G0,"wrapMode","none"),U(G0,(()=>{var B0=u0(()=>G()==="active");return()=>B0()?F("tasks.empty.noActiveProject"):F("tasks.empty.noArchivedProject")})()),u((B0)=>{var N0=z.textMuted,R=E1.DIM;return N0!==B0.e&&(B0.e=q(G0,"fg",N0,B0.e)),R!==B0.t&&(B0.t=q(G0,"attributes",R,B0.t)),B0},{e:void 0,t:void 0}),z0}}),null),U(g1,b(X0,{get when(){return u0(()=>G()==="archived")()&&p().length>0},get children(){var z0=W("box"),G0=W("text");return D(z0,G0),q(z0,"paddingTop",1),q(z0,"paddingLeft",1),q(G0,"wrapMode","none"),U(G0,()=>F("tasks.archiveHint")),u((B0)=>{var N0=z.textMuted,R=E1.DIM;return N0!==B0.e&&(B0.e=q(G0,"fg",N0,B0.e)),R!==B0.t&&(B0.t=q(G0,"attributes",R,B0.t)),B0},{e:void 0,t:void 0}),z0}}),null),U(n,b(X0,{get when(){return J.zenActive?.()},get children(){var z0=W("box"),G0=W("text");return D(z0,G0),q(z0,"flexShrink",0),q(z0,"paddingLeft",1),q(z0,"paddingRight",1),q(z0,"paddingTop",1),D(G0,E0("\u262F ZEN")),q(G0,"wrapMode","none"),q(G0,"onMouseUp",()=>J.onZenClick?.()),u((B0)=>{var N0=z.accent,R=E1.BOLD;return N0!==B0.e&&(B0.e=q(G0,"fg",N0,B0.e)),R!==B0.t&&(B0.t=q(G0,"attributes",R,B0.t)),B0},{e:void 0,t:void 0}),z0}}),null),U(n,b(X0,{get when(){return h0()},children:(z0)=>{let G0=K0(()=>{let W0=z0().task,D0=[];if(D0.push({text:W0.kind==="main"?gz(W0.repo):W0.title,bold:!0}),W0.branch.length>0)D0.push({text:`\u2387 ${W0.branch}`});if(W0.worktreePath.length>0)D0.push({text:W0.worktreePath,dim:!0});return D0}),B0=72,N0=K0(()=>Math.min(68,Math.max(...G0().map((W0)=>nu(W0.text))))),R=K0(()=>N0()+4),m0=K0(()=>G0().length+2),U0=K0(()=>Math.max(0,Math.min(z0().x+2,Z0().width-R()-1))),x0=K0(()=>Math.max(0,Math.min(z0().y+1,Z0().height-m0()-1)));return(()=>{var W0=W("box");return q(W0,"position","absolute"),q(W0,"zIndex",2600),q(W0,"flexDirection","column"),q(W0,"border",!0),q(W0,"paddingLeft",1),q(W0,"paddingRight",1),U(W0,b(Q1,{get each(){return G0()},children:(D0)=>(()=>{var g0=W("text");return q(g0,"wrapMode","none"),U(g0,(()=>{var J1=u0(()=>!!D0.dim);return()=>J1()?iu(D0.text,N0()):a9(D0.text,N0())})()),u((J1)=>{var Y1=D0.dim?z.textMuted:z.text,l0=D0.bold?E1.BOLD:D0.dim?E1.DIM:void 0;return Y1!==J1.e&&(J1.e=q(g0,"fg",Y1,J1.e)),l0!==J1.t&&(J1.t=q(g0,"attributes",l0,J1.t)),J1},{e:void 0,t:void 0}),g0})()})),u((D0)=>{var g0=U0(),J1=x0(),Y1=R(),l0=z.focusAccent,u1=z.backgroundElement;return g0!==D0.e&&(D0.e=q(W0,"left",g0,D0.e)),J1!==D0.t&&(D0.t=q(W0,"top",J1,D0.t)),Y1!==D0.a&&(D0.a=q(W0,"width",Y1,D0.a)),l0!==D0.o&&(D0.o=q(W0,"borderColor",l0,D0.o)),u1!==D0.i&&(D0.i=q(W0,"backgroundColor",u1,D0.i)),D0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),W0})()}}),null),u((z0)=>{var G0=Y()?z.focusAccent:z.textMuted,B0=E1.BOLD,N0=z.textMuted,R=E1.DIM;return G0!==z0.e&&(z0.e=q(r0,"fg",G0,z0.e)),B0!==z0.t&&(z0.t=q(r0,"attributes",B0,z0.t)),N0!==z0.a&&(z0.a=q(t0,"fg",N0,z0.a)),R!==z0.o&&(z0.o=q(t0,"attributes",R,z0.o)),z0},{e:void 0,t:void 0,a:void 0,o:void 0}),n})()}var jM=32,MQ,cu=2000,du=16;var KM=k(()=>{P();P();P();P();P();P();P();P();P();XJ();P();W1();v1();v1();YM();gH();XM();fM();uX();BM();MQ=[{view:"active"},{view:"archived"}]});var FM={};j1(FM,{startTasksPane:()=>pu,legendRowCap:()=>MM,legendCap:()=>LM});import{existsSync as UM}from"fs";import{stat as lu}from"fs/promises";import{TextAttributes as SH}from"@opentui/core";function t9(J){return!!J&&Rq(J)}function DM(J){let z=J instanceof Error?J.message:String(J);if(/not a git repository/i.test(z))return F("tasks.toast.worktreeErrorNotGit");return F("tasks.toast.worktreeErrorGeneric",{message:z})}function au(J){let{theme:z}=i0(),Y=c1(),G=oX(),X=LH(),[Z,Q]=a(J.tasks().some((y)=>y.id===J.initialTaskId)?J.initialTaskId:J.tasks()[0]?.id??null);function f(y){X.notify({kind:"error",taskId:Z()??"",tabId:"",title:y})}function H(y){X.notify({kind:"done",taskId:Z()??"",tabId:"",title:y})}let[B,V]=a(!1),[j,K]=a(G.get("activeSortMode")==="recent"?"recent":"default"),L=G.get("tasksPane.projectFilter"),[A,O]=a(typeof L==="string"&&L.length>0?L:null),g=(y)=>{O(y),G.set("tasksPane.projectFilter",y)},[x,_]=a(null),[S,N]=a(!1);{let y=process.env.TMUX_PANE;if(y){let L0=()=>{a0(["show-options","-wqv","-t",y,NY]).then(({code:M0,stdout:T0})=>{N(M0===0&&T0.trim().length>0)})};L0();let Q0=setInterval(L0,1000);N1(()=>clearInterval(Q0))}}let M=Pz();s0(()=>{if(J.initialTaskId)return;let y=J.orch?.activeTaskSignal()();if(!y)return;Q(y)}),s0(IJ(()=>J.orch?.uiPrefsSignal()(),(y)=>{if(y&&y.sortMode!==_1(j))K(y.sortMode);if(y&&y.projectFilter!==_1(A))O(y.projectFilter)})),s0(()=>{let y=J.orch?.updateSignal()();if(y)_(y)});let I={orch:J.orch,tasks:()=>J.tasks(),confirm:async(y)=>await LY.show(Y,y.title,y.body,y.cancelLabel,y.confirmLabel)===!0,promptText:(y,L0)=>DY.show(Y,y,L0),logger:console,logPrefix:"[kobe tasks]",notifyError:f,notifyInfo:H,reload:()=>J.reload(),switchBeforeKill:!0,updateActiveTask:!0,onTaskDeleted:(y,L0)=>{if(Z()!==y)return;let Q0=J.tasks();Q(L0?.id??(Q0.find((M0)=>!M0.archived)??Q0[0])?.id??null)},promptNewTask:(y,L0,Q0)=>BH.show(Y,y,L0,Q0),cursorRepo:()=>{let y=J.tasks();return(y.find((L0)=>L0.id===Z())??y[0])?.repo},lastVendor:()=>nz(S1("lastSelectedVendor"),az()),rememberVendor:(y)=>r1("lastSelectedVendor",y),openCreateSurface:async(y)=>{if(kG(G.get(qY,NG))!=="chattab")return!1;let Q0=await OJ();if(!Q0)return!1;return await Nf(Q0,y),!0},selectTask:(y)=>Q(y),enterTask:(y)=>Z0(y)};async function r(){await _3(I)}async function l(){if(kG(G.get(qY,NG))==="chattab"){let Q0=await OJ();if(Q0){await gf(Q0);return}}if(!(await dG.show(Y,G,J.orch??void 0)).visualPrefsChanged)return;if(!G.flush())return;try{let Q0=await OJ();if(Q0)await kX(Q0)}catch(Q0){console.error("[kobe tasks] failed to refresh workspace panes:",Q0)}}async function e(){let y=await OJ();if(y){await Cf(y);return}tX.show(Y)}async function J0(){if(!x()?.hasUpdate){H(F("tasks.toast.alreadyLatest",{version:o0}));return}let L0=await OJ();if(!L0)return;await kf(L0)}async function T(y){await n3(I,y)}async function q0(y){await i3(I,y)}async function p(y){await l3(I,y)}async function j0(y){await $3(I,y)}async function F0(y){await a3(I,y)}async function V0(y){let Q0=J.tasks().find((T0)=>T0.id===y)?.worktreePath;if(!Q0||!UM(Q0)){if(!J.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),f(F("tasks.toast.noDaemonWorktree"));return}try{Q0=await J.orch.ensureWorktree(y)}catch(T0){console.error("[kobe tasks] task.ensureWorktree failed:",T0),f(DM(T0));return}await J.reload()}if(!Q0||!UM(Q0))return;let M0=r3();if(!M0){console.error("[kobe tasks] no editor/opener found; set KOBE_OPEN_EDITOR"),f(F("tasks.toast.noEditor"));return}if(!o3(Q0,M0))console.error(`[kobe tasks] failed to open worktree with ${M0.label}`),f(F("tasks.toast.openWorktreeFailed",{label:M0.label}))}async function t(){if(!process.env.TMUX_PANE)return;let y=await OJ();if(!y)return;let L0=await fX(y);if(!L0)return;await P0(["select-pane","-t",L0])}async function h(y,L0){let Q0=J.tasks().find((M0)=>M0.id===y);if(!Q0||Q0.kind==="main"||!J.orch)return;try{await J.orch.moveTask(y,L0)}catch(M0){console.error("[kobe tasks] task.move failed:",M0),f(F("tasks.toast.moveTaskFailed",{message:M0 instanceof Error?M0.message:String(M0)}));return}Q(y),await J.reload()}let[C,o]=a(G.get("tasksPane.keysCollapsed",!1)===!0),E=(y)=>{o(y),G.set("tasksPane.keysCollapsed",y)};s0(IJ(()=>J.orch?.uiPrefsSignal()(),(y)=>{if(y&&y.keysCollapsed!==_1(C))o(y.keysCollapsed)}));let[c,s]=a(!1);D1(()=>({enabled:Y.stack.length===0&&!c(),bindings:pY({"help.open":()=>void e(),"task.new":()=>void r(),"settings.open.sidebar":()=>void l(),"tasks.update":()=>void J0(),"tasks.openWorktree":()=>{let y=Z();if(y)V0(y)},"tasks.renameBranch":()=>{let y=Z();if(y)j0(y)},"tasks.cycleEngine":()=>{let y=Z();if(y)F0(y)},"tasks.toggleKeys":()=>E(!C()),"tasks.focusEngine":()=>void t().catch((y)=>console.error("[kobe tasks] focus engine pane failed:",y))})}));async function Z0(y){let L0=M1(y),Q0=J.tasks().find((v0)=>v0.id===y),M0=await OJ();if(M0&&M0!==L0)await cZ(M0);if(await H1(L0)){let v0=await MG(L0,"@kobe_worktree")||Q0?.worktreePath||"";if(t9(v0)){let n=Q0?.repo?fY(Q0.repo,v0,{kind:"repo-init"}):void 0;await cY({name:L0,cwd:v0,command:TJ(Q0?.vendor),taskId:y,vendor:Q0?.vendor,repo:Q0?.repo,launchInit:n})}await bX(L0),await If(L0),await P0(["switch-client","-t",`=${L0}`]),J.orch?.setActiveTask(y).catch(()=>{});return}let X1=Q0?.worktreePath;if(!t9(X1)){if(!J.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),f(F("tasks.toast.noDaemonOpen"));return}try{X1=await J.orch.ensureWorktree(y)}catch(v0){console.error("[kobe tasks] task.ensureWorktree failed:",v0),f(DM(v0));return}await J.reload()}if(!t9(X1))return;let z1=Q0?.repo?fY(Q0.repo,X1,{kind:"repo-init"}):void 0;if(!await cY({name:L0,cwd:X1,command:TJ(Q0?.vendor),taskId:y,vendor:Q0?.vendor,repo:Q0?.repo,launchInit:z1})){console.error(`[kobe tasks] failed to start session ${L0}`),f(F("tasks.toast.sessionStartFailed"));return}await bX(L0),await If(L0),await P0(["switch-client","-t",`=${L0}`]),J.orch?.setActiveTask(y).catch(()=>{})}let A0=K0(()=>{let y=x();if(y?.hasUpdate)return{label:`v${y.latest} \u2191`,emphasize:!0};return{label:`v${o0}`,emphasize:!1}}),h0=()=>J.orch?.daemonStaleSignal()()??!1,k0=()=>J.orch?.daemonVersionSignal()()??null,C0=K0(()=>J.tasks().find((y)=>y.id===Z())?.kind==="main");return(()=>{var y=W("box"),L0=W("box");return D(y,L0),q(y,"flexDirection","column"),q(y,"flexGrow",1),U(y,b(m3,{stale:h0,daemonVersion:k0,clientVersion:o0,width:()=>M().width}),L0),q(L0,"flexGrow",1),q(L0,"flexShrink",1),U(L0,b(VM,{get tasks(){return J.tasks},selectedId:Z,get onSelect(){return J.initialTaskId?()=>{}:Q},onActivate:(Q0)=>void Z0(Q0),activateOnClick:!0,headerStatus:A0,onHeaderStatusClick:()=>void J0(),onAddTask:()=>void r(),zenActive:S,onZenClick:()=>{(async()=>{let Q0=await OJ();if(Q0)await SX(Q0,"zen-toggle")})()},width:()=>M().width,get engineState(){return u0(()=>!!J.orch)()?J.orch.engineStateSignal():void 0},get taskJobs(){return u0(()=>!!J.orch)()?J.orch.taskJobsSignal():void 0},get worktreeChanges(){return J.orch?()=>{let Q0=J.orch;if(!Q0||Q0.connectionStateSignal()()!=="online")return null;return Q0.worktreeChangesSignal()()}:void 0},onRenameRequest:(Q0)=>void p(Q0),onDeleteRequest:(Q0)=>void q0(Q0),onArchiveRequest:(Q0)=>void T(Q0),onLocalMergeRequest:(Q0)=>{let M0=J.tasks().find((T0)=>T0.id===Q0);if(!M0||M0.kind==="main")return;Q(Q0),V((T0)=>!T0)},moveMode:B,onMoveRequest:(Q0,M0)=>void h(Q0,M0),onMoveModeExit:()=>V(!1),sortMode:j,projectFilter:A,onProjectFilterChange:g,onSortModeToggle:()=>{let Q0=j()==="default"?"recent":"default";K(Q0),G.set("activeSortMode",Q0)},focused:()=>Y.stack.length===0,onSearchActiveChange:s})),U(y,b(_u,{moveMode:B,selectedIsMain:C0,collapsed:C,onToggleCollapsed:()=>E(!C())}),null),u((Q0)=>q(y,"backgroundColor",z.background,Q0)),y})()}function LM(J){let z=g9(J);if(!z)return null;let Y=z.hint?.keys??z.keys[0];return Y&&Y.length>0?Y:null}function MM(J){let z=J.map(LM).filter((Y)=>Y!==null);return z.length>0?z.join("/"):null}function _u(J){let{theme:z}=i0(),[Y,G]=a("Prefix");JJ(()=>{a0(["show-options","-g","prefix"]).then(({code:K,stdout:L})=>{if(K!==0)return;let A=NH(L);if(A)G(A)})});let X=()=>{R9();let K=Xf(),L=K.binds,A=[],O=K.focus.filter((x)=>x!==null).map((x)=>x.chord);if(O.length===4&&O.every((x,_)=>x===PY[_]))A.push({k:"ctrl+hjkl",label:F("tasks.hints.movePanes")});else if(O.length>0)A.push({k:O[0],label:F("tasks.hints.movePanes")});let g=(x,_)=>{let S=_.map((N)=>L[N]?.chord).filter((N)=>!!N);if(S.length>0)A.push({k:`prefix ${S.join("/")}`,label:x})};if(L["tmux.detach"])A.push({k:L["tmux.detach"].chord,label:F("tasks.hints.detach")});return g(F("tasks.hints.splits"),["tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"]),g(F("tasks.hints.panes"),["tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle"]),A},Z=()=>{R9();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 A of K){let O=MM(A.ids);if(O===null)continue;L.push({k:O,label:A.label,dimWhenMain:A.dimWhenMain})}return L.push(...X()),L},Q=()=>[{k:"j/k",label:F("tasks.hints.reorder")},{k:"enter/esc",label:F("tasks.hints.done")}],f=()=>J.moveMode?.()?Q():Z(),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=u0(()=>!!j());return()=>A()?F("tasks.hints.headerFolded"):F("tasks.hints.headerUnfolded")})()),U(K,b(X0,{get when(){return!j()},get children(){return b(Q1,{get each(){return f()},children:(A)=>{let O=()=>A.dimWhenMain===!0&&(J.selectedIsMain?.()??!1);return(()=>{var g=W("box"),x=W("box"),_=W("text"),S=E0("["),N=E0("]"),M=W("box"),I=W("text");return D(g,x),D(g,M),q(g,"flexDirection","row"),q(g,"gap",1),q(g,"justifyContent","space-between"),D(x,_),q(x,"width",10),q(x,"flexShrink",0),D(_,S),D(_,N),q(_,"wrapMode","none"),U(_,()=>sX(A.k,Y()),N),D(M,I),q(M,"flexShrink",0),q(I,"wrapMode","none"),U(I,()=>V(A.label)),u((r)=>{var l=O()?z.textMuted:z.accent,e=O()?SH.DIM:SH.BOLD,J0=B(),T=z.textMuted,q0=O()?SH.DIM:void 0;return l!==r.e&&(r.e=q(_,"fg",l,r.e)),e!==r.t&&(r.t=q(_,"attributes",e,r.t)),J0!==r.a&&(r.a=q(M,"width",J0,r.a)),T!==r.o&&(r.o=q(I,"fg",T,r.o)),q0!==r.i&&(r.i=q(I,"attributes",q0,r.i)),r},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),g})()}})}}),null),u((A)=>{var O=z.textMuted,g=SH.DIM;return O!==A.e&&(A.e=q(L,"fg",O,A.e)),g!==A.t&&(A.t=q(L,"attributes",g,A.t)),A},{e:void 0,t:void 0}),K})()}async function pu(J={}){await RJ({logContext:"tasks",providers:{notifications:!0},setup:()=>ru(J)})}async function ru(J){let z=new PX({homeDir:Nz()});await z.load();let[Y,G]=a(z.list()),X=null;try{let B=await eJ();if(B){let V=new UJ(B);await V.init(),X=V}else sz("tasks-boot","no daemon running \u2014 polling tasks.json (a gui owns daemon lifecycle)")}catch(B){o1("tasks-boot",B),sz("tasks-boot","daemon subscribe failed \u2014 polling tasks.json")}let Z=()=>X&&X.connectionStateSignal()()==="online"?X.tasksSignal()():Y(),Q=async()=>{await z.load(),G(z.list())},f="",H=setInterval(()=>{if(X&&X.connectionStateSignal()()==="online")return;(async()=>{let B="missing";try{let V=await lu(z.filePath);B=`${V.mtimeMs}:${V.size}`}catch{}if(B===f)return;f=B,await Q()})().catch(()=>{})},$u);return{root:()=>[b(au,{tasks:Z,get initialTaskId(){return J.initialTaskId},orch:X,reload:Q}),b(h3,{})],onDestroy:()=>{if(H)clearInterval(H);X?.dispose()}}}var $u=1500;var OM=k(()=>{P();P();P();P();P();P();P();P();P1();fz();XJ();P();ZG();AJ();W1();aY();hJ();p1();jz();aZ();AX();O1();Zf();t1();FJ();E9();pX();w9();i9();v3();c3();rX();VQ();MH();v1();x9();oY();uJ();p3();s3();KM();IX();fJ();dJ();P9()});var AM={};j1(AM,{startSettingsHost:()=>su});function ou(J){let z=oX(),Y=c1(),{theme:G}=i0(),X=!1,Z=!1;async function Q(){if(Z)return;Z=!0;try{if(z.flush()&&X){let H=await OJ();if(H)await kX(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(dG,{kv:z,get orchestrator(){return J.orchestrator??void 0},standalone:!0,onVisualPrefsChange:()=>{X=!0},onClose:Q})),u((H)=>q(f,"backgroundColor",G.background,H)),f})()}async function su(){await RJ({setup:async()=>{let J=null;try{let z=await eJ();if(z){let Y=new UJ(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(ou,{orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var RM=k(()=>{P();P();P();P();P();P();AJ();aY();i9();VQ();v1();oY();uJ();fJ();dJ()});var gM={};j1(gM,{startHelpHost:()=>eu});function tu(){let J=c1(),{theme:z}=i0();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 G=W("box");return q(G,"flexGrow",1),q(G,"paddingTop",1),U(G,b(tX,{onClose:Y})),u((X)=>q(G,"backgroundColor",z.background,X)),G})()}async function eu(){await RJ({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(tu,{})})})}var CM=k(()=>{P();P();P();P();P();E9();v1();oY();uJ();dJ()});var NM={};j1(NM,{startUpdateHost:()=>Qx});import{spawn as Jx,spawnSync as zx}from"child_process";import{TextAttributes as JZ}from"@opentui/core";function Yx(J){if(!J)return!1;let z=process.platform,[Y,G]=z==="darwin"?["open",[J]]:z==="win32"?["cmd",["/c","start","",J]]:["xdg-open",[J]];try{return Jx(Y,G,{stdio:"ignore",detached:!0}).unref(),!0}catch{return!1}}function Gx(J){return J.replace(/\r\n/g,`
|
|
266
266
|
`).split(`
|
|
267
|
-
`).map((z)=>z.trim()).filter(Boolean)}function
|
|
268
|
-
kobe ${
|
|
269
|
-
`),process.stdout.write(`running: ${
|
|
267
|
+
`).map((z)=>z.trim()).filter(Boolean)}function Xx(){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 Zx(){let{theme:J}=i0(),z=HJ(),[Y,G]=a(null),[X,Z]=a([]),[Q,f]=a(!0),[H,B]=a("update"),[V,j]=a(null),K=K0(()=>Y()?.latest??o0),L=K0(()=>X()[0]?.url??vH(K())),A=K0(()=>[{id:"update",key:"U",label:F("update.actions.updateNow"),detail:iz},{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")}]);JJ(()=>{O()});async function O(){let S=await zZ({force:!0});G(S);let N=S?.latest??o0,M=await hH({current:o0,latest:N});Z(M),f(!1)}function g(S){let N=A().map((r)=>r.id),I=(N.indexOf(H())+S+N.length)%N.length;B(N[I]??"update")}function x(S=H()){if(S==="close")process.exit(0);if(S==="release"){j(Yx(L())?F("update.statusReleaseOpened"):F("update.statusReleaseError"));return}_()}async function _(){j(F("update.statusRunningUpdater")),await new Promise((M)=>setTimeout(M,30)),z?.destroy(),process.stdout.write(`
|
|
268
|
+
kobe ${o0} -> latest
|
|
269
|
+
`),process.stdout.write(`running: ${iz}
|
|
270
270
|
|
|
271
|
-
`);let S=
|
|
271
|
+
`);let S=zx("sh",["-c",iz],{stdio:"inherit"}),N=S.status??(S.error?1:0);if(S.error)process.stderr.write(`
|
|
272
272
|
kobe update: failed to start updater: ${S.error.message}
|
|
273
|
-
`);process.stdout.write(
|
|
274
|
-
${
|
|
273
|
+
`);process.stdout.write(N===0?`
|
|
274
|
+
${F("update.updateComplete")}
|
|
275
275
|
`:`
|
|
276
|
-
${
|
|
277
|
-
`),process.stdout.write(
|
|
278
|
-
`)}function
|
|
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
|
|
276
|
+
${F("update.updateFailed",{code:String(N)})}
|
|
277
|
+
`),process.stdout.write(F("update.pressAnyKey")),await Xx(),process.exit(N)}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:()=>x()},{key:"u",cmd:()=>x("update")},{key:"r",cmd:()=>x("release")},{key:"q",cmd:()=>x("close")},{key:"escape",cmd:()=>x("close")},{key:"ctrl+c",cmd:()=>x("close")}]})),(()=>{var S=W("box"),N=W("box"),M=W("text"),I=W("text"),r=W("box"),l=W("text"),e=W("text"),J0=E0("v"),T=W("text"),q0=W("text"),p=E0("v"),j0=W("box"),F0=W("box"),V0=W("text"),t=W("scrollbox"),h=W("box");return D(S,N),D(S,r),D(S,j0),D(S,F0),D(S,t),q(S,"flexDirection","column"),q(S,"flexGrow",1),q(S,"paddingTop",1),q(S,"paddingLeft",2),q(S,"paddingRight",2),D(N,M),D(N,I),q(N,"flexDirection","row"),q(N,"justifyContent","space-between"),q(N,"flexShrink",0),q(M,"wrapMode","none"),U(M,()=>F("update.pageTitle")),D(I,E0("q / esc")),q(I,"wrapMode","none"),q(I,"onMouseUp",()=>x("close")),D(r,l),D(r,e),D(r,T),D(r,q0),q(r,"flexDirection","row"),q(r,"gap",2),q(r,"flexShrink",0),q(r,"paddingTop",1),q(l,"wrapMode","none"),U(l,()=>F("update.current")),D(e,J0),q(e,"wrapMode","none"),U(e,o0,null),q(T,"wrapMode","none"),U(T,()=>F("update.latest")),D(q0,p),q(q0,"wrapMode","none"),U(q0,K,null),q(j0,"flexDirection","column"),q(j0,"flexShrink",0),q(j0,"paddingTop",1),q(j0,"gap",0),U(j0,b(Q1,{get each(){return A()},children:(C)=>(()=>{var o=W("box"),E=W("box"),c=W("text"),s=E0("["),Z0=E0("]"),A0=W("box"),h0=W("text"),k0=W("text");return D(o,E),D(o,A0),D(o,k0),q(o,"flexDirection","row"),q(o,"gap",1),q(o,"paddingLeft",1),q(o,"paddingRight",1),q(o,"onMouseUp",()=>x(C.id)),D(E,c),q(E,"width",4),q(E,"flexShrink",0),D(c,s),D(c,Z0),q(c,"wrapMode","none"),U(c,()=>C.key,Z0),D(A0,h0),q(A0,"width",14),q(A0,"flexShrink",0),q(h0,"wrapMode","none"),U(h0,()=>C.label),q(k0,"wrapMode","word"),U(k0,()=>C.detail),u((C0)=>{var y=H()===C.id?J.primary:void 0,L0=H()===C.id?J.selectedListItemText:J.accent,Q0=JZ.BOLD,M0=H()===C.id?J.selectedListItemText:J.text,T0=H()===C.id?J.selectedListItemText:J.textMuted;return y!==C0.e&&(C0.e=q(o,"backgroundColor",y,C0.e)),L0!==C0.t&&(C0.t=q(c,"fg",L0,C0.t)),Q0!==C0.a&&(C0.a=q(c,"attributes",Q0,C0.a)),M0!==C0.o&&(C0.o=q(h0,"fg",M0,C0.o)),T0!==C0.i&&(C0.i=q(k0,"fg",T0,C0.i)),C0},{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 C=W("text");return q(C,"wrapMode","word"),U(C,V),u((o)=>q(C,"fg",J.info,o)),C}}),F0),D(F0,V0),q(F0,"flexShrink",0),q(F0,"paddingTop",1),q(V0,"wrapMode","none"),U(V0,()=>F("update.changesSectionHeader",{from:o0,to:K()})),D(t,h),q(t,"flexGrow",1),q(t,"flexShrink",1),q(t,"stickyScroll",!1),q(h,"flexDirection","column"),q(h,"paddingRight",1),q(h,"paddingBottom",1),q(h,"gap",0),U(h,b(X0,{get when(){return Q()},get children(){var C=W("text");return U(C,()=>F("update.loadingNotes")),u((o)=>q(C,"fg",J.textMuted,o)),C}}),null),U(h,b(X0,{get when(){return u0(()=>!Q())()&&X().length===0},get children(){var C=W("text");return q(C,"wrapMode","word"),U(C,()=>F("update.notesUnavailable")),u((o)=>q(C,"fg",J.textMuted,o)),C}}),null),U(h,b(Q1,{get each(){return X()},children:(C)=>(()=>{var o=W("box"),E=W("text"),c=E0("v");return D(o,E),q(o,"flexDirection","column"),q(o,"paddingBottom",1),q(o,"gap",0),D(E,c),q(E,"wrapMode","none"),U(E,()=>C.version,null),U(o,b(Q1,{get each(){return Gx(C.body)},children:(s)=>(()=>{var Z0=W("text");return q(Z0,"wrapMode","word"),U(Z0,s),u((A0)=>q(Z0,"fg",J.textMuted,A0)),Z0})()}),null),u((s)=>{var Z0=J.text,A0=JZ.BOLD;return Z0!==s.e&&(s.e=q(E,"fg",Z0,s.e)),A0!==s.t&&(s.t=q(E,"attributes",A0,s.t)),s},{e:void 0,t:void 0}),o})()}),null),u((C)=>{var{background:o,text:E}=J,c=JZ.BOLD,s=J.textMuted,Z0=J.textMuted,A0=J.text,h0=JZ.BOLD,k0=J.textMuted,C0=Y()?.hasUpdate?J.warning:J.success,y=JZ.BOLD,L0=J.textMuted,Q0=JZ.DIM,M0={trackOptions:{backgroundColor:J.background,foregroundColor:J.borderActive}};return o!==C.e&&(C.e=q(S,"backgroundColor",o,C.e)),E!==C.t&&(C.t=q(M,"fg",E,C.t)),c!==C.a&&(C.a=q(M,"attributes",c,C.a)),s!==C.o&&(C.o=q(I,"fg",s,C.o)),Z0!==C.i&&(C.i=q(l,"fg",Z0,C.i)),A0!==C.n&&(C.n=q(e,"fg",A0,C.n)),h0!==C.s&&(C.s=q(e,"attributes",h0,C.s)),k0!==C.h&&(C.h=q(T,"fg",k0,C.h)),C0!==C.r&&(C.r=q(q0,"fg",C0,C.r)),y!==C.d&&(C.d=q(q0,"attributes",y,C.d)),L0!==C.l&&(C.l=q(V0,"fg",L0,C.l)),Q0!==C.u&&(C.u=q(V0,"attributes",Q0,C.u)),M0!==C.c&&(C.c=q(t,"verticalScrollbarOptions",M0,C.c)),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}),S})()}async function Qx(){await RJ({setup:()=>({root:()=>b(Zx,{})})})}var kM=k(()=>{P();P();P();P();P();P();P();P();P();W1();FJ();v1();XJ();oY();uJ()});function qx(J){return J.trim().split(/\s+/)[0]??""}function SM(J,z,Y,G){let X=Z1(Y);if(J==="vim")return{bin:"vim",command:`vim ${X}`};if(J==="nvim")return{bin:"nvim",command:`nvim ${X}`};if(J==="nano")return{bin:"nano",command:`nano ${X}`};if(J==="emacs")return{bin:"emacs",command:`emacs ${X}`};let Z=(z.trim()||(G??"").trim()).trim();if(!Z)return null;let Q=qx(Z);if(!Q)return null;let f=Z.includes(bM)?Z.split(bM).join(X):`${Z} ${X}`;return{bin:Q,command:f}}function fx(J,z,Y){let G=Z1(z);return["f=$(mktemp 2>/dev/null)",`if [ -n "$f" ] && git show ${Z1(`HEAD:./${Y}`)} > "$f" 2>/dev/null; then`,` ${J} -d "$f" ${G} -c 'setlocal nomodifiable' -c 'wincmd l'; r=$?`,"else",` ${J} ${G}; r=$?`,"fi",'rm -f "$f" 2>/dev/null; exit $r'].join(`
|
|
278
|
+
`)}function Hx(J,z){let Y=J.endsWith("/")?J:`${J}/`;return z.startsWith(Y)?z.slice(Y.length):null}async function Bx(J){let z=WX(S1(QY)),Y=S1(EY)??"",G=(process.env.VISUAL??process.env.EDITOR??"").trim();if(z!=="auto")return SM(z,Y,J,G);if(G)return SM("custom","",J,G);let X=Z1(J);for(let Z of o5)if(await IM(Z))return{bin:Z,command:`${Z} ${X}`};return null}async function IM(J){try{return await Bun.spawn(["sh","-c",`command -v ${Z1(J)} >/dev/null 2>&1`],{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function jx(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 yM(J,z,Y){let G=await Bx(Y);if(!G)return!1;if(!await IM(G.bin))return!1;let X=await Wx(G,z,Y);return await Vz(J,{cwd:z,command:X,name:Vx(Y)}),!0}async function Wx(J,z,Y){let{bin:G,command:X}=J;if(G!=="nvim"&&G!=="vim")return X;if(X!==`${G} ${Z1(Y)}`)return X;let Z=Hx(z,Y);if(!Z)return X;if(!await jx(z,Z))return X;return fx(G,Y,Z)}function Vx(J){let z=J.slice(J.lastIndexOf("/")+1).trim();return z.length>0?z:"edit"}var bM="{file}";var TM=k(()=>{wY();O1();iq();P1();fz()});async function IH(J,z,Y){if(!z)throw Error("git(): cwd is required");let G=await VX(z,J,{signal:Y}),X=G.status??-1;if(X!==0){let Z=(G.stderr??"").trim(),Q=(G.stdout??"").trim();throw Error(`git ${J.join(" ")} (cwd=${z}) exited with code ${X}: ${Z||Q||"(no output)"}`)}return G.stdout??""}async function e9(J,z){let G=(await IH(["ls-files","--cached","--others","--exclude-standard","--full-name"],J,z)).split(`
|
|
279
|
+
`).map((Z)=>Z.replace(/\r$/,"")),X=new Set;for(let Z of G)if(Z.length>0)X.add(Z);return Array.from(X).sort()}async function JW(J,z){let Y=await IH(["status","--porcelain","--untracked-files=all"],J,z),G=wM(Y),X=new Map;try{let Z=await IH(["diff","--no-color","--numstat","HEAD"],J,z);X=new Map(uM(Z).map((Q)=>[Q.path,{added:Q.added,deleted:Q.deleted}]))}catch{try{let Z=await IH(["diff","--no-color","--numstat","--cached"],J,z);X=new Map(uM(Z).map((Q)=>[Q.path,{added:Q.added,deleted:Q.deleted}]))}catch{X=new Map}}return G.map((Z)=>{let Q=X.get(Z.path);if(Q)return{...Z,added:Q.added,deleted:Q.deleted};return Z})}function uM(J){return QU(J).map((z)=>({path:z.path,added:z.added,deleted:z.deleted}))}function xM(J){let z={name:"",path:"",isDir:!0,children:[]};for(let Y of J){if(!Y)continue;let G=Y.split("/").filter((Z)=>Z.length>0);if(G.length===0)continue;let X=z;for(let Z=0;Z<G.length;Z++){let Q=G[Z],H=Z!==G.length-1,B=X.children.find((V)=>V.name===Q&&V.isDir===H);if(!B)B={name:Q,path:G.slice(0,Z+1).join("/"),isDir:H,children:[]},X.children.push(B);X=B}}return EM(z),z}function EM(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)EM(z)}function wM(J){let z=[];for(let Y of uf(J)){let G;if(Y.x==="?"&&Y.y==="?")G="?";else{let Z=Y.y!==" "?Y.y:Y.x;if(Z==="M"||Z==="A"||Z==="D"||Z==="R"||Z==="C"||Z==="U")G=Z;else continue}let X=Y.path;if(X.length===0)continue;if(X.endsWith("/"))continue;z.push({path:X,status:G})}return z}var zW=k(()=>{Kj();lq()});function YW(J){D1(()=>({enabled:J.focused(),bindings:pY({"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 G=J.currentTab(),X=FQ.indexOf(G);if(X<0)return;let Z=(Y??0)%2===0?-1:1,Q=FQ[(X+Z+FQ.length)%FQ.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 FQ;var GW=k(()=>{rX();uJ();FQ=["all","changes"]});import{spawn as PM}from"child_process";import{existsSync as Kx}from"fs";import{platform as Ux}from"os";function hM(J){if(!J)return;let z=Ux();if(z==="linux"){if(Kx("/proc/sys/fs/binfmt_misc/WSLInterop")||process.env.WSL_DISTRO_NAME){OQ("wslview",[J],()=>{let Y=PM("wslpath",["-w",J],{stdio:["ignore","pipe","ignore"]}),G="";Y.stdout?.on("data",(X)=>{G+=X.toString()}),Y.on("close",(X)=>{if(X===0)OQ("explorer.exe",[G.trim()])})});return}OQ("xdg-open",[J]);return}if(z==="darwin"){OQ("open",[J]);return}if(z==="win32"){OQ("cmd.exe",["/c","start","",J]);return}}function OQ(J,z,Y){try{let G=PM(J,z,{stdio:"ignore",detached:!0});G.on("error",()=>Y?.()),G.unref()}catch{Y?.()}}var vM=()=>{};function XW(J,z,Y,G){for(let X of J.children)if(X.isDir){let Z=z.has(X.path);if(G.push({kind:"dir",path:X.path,name:X.name,depth:Y,expanded:Z,hasChildren:X.children.length>0}),Z)XW(X,z,Y+1,G)}else G.push({kind:"file",path:X.path,name:X.name,depth:Y})}function mM(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 cM(J){return J.map((z)=>({kind:"status",path:z.path,status:z.status,added:z.added,deleted:z.deleted}))}function Dx(J){return`${J.kind}\x00${J.path}`}function Lx(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 dM(J,z){return RH(J,z,Dx,Lx)}function nM(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 iM(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 G=J[Y],X=z[Y];if(G.path!==X.path||G.status!==X.status||G.added!==X.added||G.deleted!==X.deleted)return!1}return!0}var lM=()=>{};import{watch as Mx}from"fs";import{TextAttributes as AQ}from"@opentui/core";function Fx(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 Ax(J){let z=J.toLowerCase();if(z.includes("not a git repository"))return F("files.error.notGitRepo");if(z.includes("does not exist")||z.includes("enoent"))return F("files.error.pathMissing");if(z.includes("permission denied")||z.includes("eacces"))return F("files.error.permissionDenied");if(z.includes("git: not found")||z.includes("command not found"))return F("files.error.gitNotInstalled");let Y=J.indexOf(": ");if(Y>=0&&J.startsWith("git "))return J.slice(Y+2).trim()||F("files.error.gitFailed");return J.trim()||F("files.error.gitFailed")}function Rx(J){switch(J){case"all":return F("files.tabs.all");case"changes":return F("files.tabs.changes")}}function ZW(J){let{theme:z}=i0(),Y=Pz(),G=()=>J.focused?J.focused():!0,[X,Z]=a("all"),[Q,f]=a(0),[H,B]=a(0),[V,j]=a(null,{equals:nM}),[K,L]=a(null,{equals:iM}),[A,O]=a(null),[g,x]=a(new Set),_=0;async function S(t,h,C){let o=++_;if(h==null){j(null),L(null),O(null);return}O(null);try{if(t==="all"){let E=await e9(h,C);if(C?.aborted||o!==_||J.worktreePath()!==h)return;j(E)}else if(t==="changes"){let E=await JW(h,C);if(C?.aborted||o!==_||J.worktreePath()!==h)return;L(E)}}catch(E){if(C?.aborted)return;let c=E instanceof Error?E.message:String(E);if(o===_&&J.worktreePath()===h)O(c)}}s0(IJ(J.worktreePath,async(t)=>{j(null),L(null),O(null),f(0),x(new Set);let h=new AbortController;N1(()=>h.abort()),await S(X(),t,h.signal)})),s0(IJ(J.worktreePath,(t)=>{if(t==null)return;if(process.env.KOBE_FILETREE_WATCH!=="1")return;let h=null,C=null;try{C=Mx(t,{recursive:!0},(o,E)=>{if(E==null)return;let c=E.toString();if(c===".git"||c.startsWith(".git/")||c.startsWith(".git\\"))return;if(c.startsWith("node_modules/")||c.startsWith("node_modules\\"))return;if(h!=null)clearTimeout(h);h=setTimeout(()=>{h=null,B((s)=>s+1)},500)}),C.on("error",()=>{})}catch{}N1(()=>{if(h!=null)clearTimeout(h);if(C!=null)C.close()})})),s0(IJ([X,H],async([t,h])=>{let C=J.worktreePath();if(C==null)return;f(0);let o=new AbortController;N1(()=>o.abort());let c=H()>0;if(t==="all"){if(V()==null||c)await S("all",C,o.signal)}else if(t==="changes"){if(K()==null||c)await S("changes",C,o.signal)}}));let N=K0(()=>{let t=V();if(t==null)return null;return xM(t)}),M=K0((t)=>{let h=[];if(X()==="all"){let C=N();if(C!=null)XW(C,g(),0,h)}else if(X()==="changes"){let C=K();if(C!=null)h.push(...cM(C))}return dM(t??[],h)},[]),I=K0(()=>{let t=0,h=0;for(let C of M()){if(C.kind!=="status")continue;if(C.added!=null)t=Math.max(t,String(C.added).length+1);if(C.deleted!=null)h=Math.max(h,String(C.deleted).length+1)}return{added:t,deleted:h}}),r=K0(()=>{let t=I(),h=(t.added>0?t.added+1:0)+(t.deleted>0?t.deleted+1:0);return Math.max(8,Y().width-6-h)});function l(){let t=M();if(t.length===0)return;f(Math.min(Q()+1,t.length-1))}function e(){if(M().length===0)return;f(Math.max(Q()-1,0))}function J0(){let t=M(),h=Q(),C=t[h];if(!C)return;if(C.kind!=="dir")return;if(!C.expanded&&C.hasChildren)x((o)=>{let E=new Set(o);return E.add(C.path),E});else if(C.expanded){if(h+1<t.length)f(h+1)}}function T(){if(X()!=="all")return;let t=M(),h=Q(),C=t[h];if(!C)return;if(C.kind==="dir"&&C.expanded){x((E)=>{let c=new Set(E);return c.delete(C.path),c});return}if(C.kind!=="dir"&&C.kind!=="file")return;let o=C.depth-1;if(o<0)return;for(let E=h-1;E>=0;E--){let c=t[E];if(!c)continue;if(c.kind==="dir"&&c.depth===o){f(E);return}}}function q0(){let t=M(),h=Q();if(h<0||h>=t.length)return;let C=t[h];if(!C)return;if(C.kind==="dir"){x((o)=>{let E=new Set(o);if(E.has(C.path))E.delete(C.path);else E.add(C.path);return E});return}J.onOpenFile(C.path)}function p(){let t=M(),h=Q();if(h<0||h>=t.length)return;let C=t[h];if(!C||C.kind==="dir")return;J.onMention?.(C.path)}function j0(){B((t)=>t+1),J.onRefresh?.()}function F0(){let t=M(),h=Q();if(h<0||h>=t.length)return;let C=t[h];if(!C||C.kind==="dir")return;let o=J.worktreePath();if(!o)return;let E=`${o}/${C.path}`;hM(E)}YW({focused:G,moveDown:l,moveUp:e,setTab:(t)=>Z(t),currentTab:X,openCurrent:q0,mentionCurrent:p,createPR:J.onCreatePR,openExternal:F0,refresh:j0,expandOrDescend:J0,collapseOrParent:T});let V0;return s0(IJ([Q,M],([t,h])=>{if(!V0)return;if(h.length===0)return;let C=V0.scrollTop,o=V0.viewport.height;if(o<=0)return;if(t<C)V0.scrollTo({x:0,y:t});else if(t>=C+o)V0.scrollTo({x:0,y:t-o+1})})),(()=>{var t=W("box"),h=W("box"),C=W("box"),o=W("scrollbox");return D(t,h),D(t,o),q(t,"flexDirection","column"),q(t,"flexGrow",1),q(t,"paddingTop",1),q(t,"paddingBottom",1),q(t,"paddingLeft",0),q(t,"paddingRight",0),U(t,b(X0,{get when(){return J.onZenToggle||J.onCreatePR},get children(){var E=W("box");return q(E,"flexDirection","row"),q(E,"justifyContent","flex-end"),q(E,"gap",2),q(E,"paddingBottom",1),q(E,"flexShrink",0),U(E,b(X0,{get when(){return J.onZenToggle},get children(){var c=W("box"),s=W("text"),Z0=W("text");return D(c,s),D(c,Z0),q(c,"flexDirection","row"),q(c,"gap",1),q(c,"onMouseUp",()=>J.onZenToggle?.()),D(s,E0("[~]")),q(s,"wrapMode","none"),q(Z0,"wrapMode","none"),U(Z0,()=>F("files.actions.zen")),u((A0)=>{var h0=z.accent,k0=AQ.BOLD,C0=z.text;return h0!==A0.e&&(A0.e=q(s,"fg",h0,A0.e)),k0!==A0.t&&(A0.t=q(s,"attributes",k0,A0.t)),C0!==A0.a&&(A0.a=q(Z0,"fg",C0,A0.a)),A0},{e:void 0,t:void 0,a:void 0}),c}}),null),U(E,b(X0,{get when(){return J.onCreatePR},get children(){var c=W("box"),s=W("text"),Z0=W("text");return D(c,s),D(c,Z0),q(c,"flexDirection","row"),q(c,"gap",1),q(c,"onMouseUp",()=>J.onCreatePR?.()),D(s,E0("[P]")),q(s,"wrapMode","none"),q(Z0,"wrapMode","none"),U(Z0,()=>F("files.actions.createPR")),u((A0)=>{var h0=z.accent,k0=AQ.BOLD,C0=z.text;return h0!==A0.e&&(A0.e=q(s,"fg",h0,A0.e)),k0!==A0.t&&(A0.t=q(s,"attributes",k0,A0.t)),C0!==A0.a&&(A0.a=q(Z0,"fg",C0,A0.a)),A0},{e:void 0,t:void 0,a:void 0}),c}}),null),E}}),h),D(h,C),q(h,"flexDirection","row"),q(h,"justifyContent","space-between"),q(h,"paddingBottom",0),q(h,"flexShrink",0),q(C,"flexDirection","row"),q(C,"gap",2),U(C,b(Q1,{each:Ox,children:(E)=>{let c=()=>X()===E;return(()=>{var s=W("text");return q(s,"wrapMode","none"),q(s,"onMouseUp",()=>Z(E)),U(s,()=>Rx(E)),u((Z0)=>{var A0=c()?z.primary:z.textMuted,h0=c()?AQ.BOLD:void 0;return A0!==Z0.e&&(Z0.e=q(s,"fg",A0,Z0.e)),h0!==Z0.t&&(Z0.t=q(s,"attributes",h0,Z0.t)),Z0},{e:void 0,t:void 0}),s})()}})),U(h,b(X0,{get when(){return J.cornerBadge?.()},children:(E)=>(()=>{var c=W("text");return q(c,"wrapMode","none"),U(c,()=>E().text),u((s)=>{var Z0=E().active?z.accent:z.textMuted,A0=E().active?AQ.BOLD:void 0;return Z0!==s.e&&(s.e=q(c,"fg",Z0,s.e)),A0!==s.t&&(s.t=q(c,"attributes",A0,s.t)),s},{e:void 0,t:void 0}),c})()}),null),U(t,b(X0,{get when(){return X()==="changes"},get children(){var E=W("box"),c=W("text");return D(E,c),q(E,"flexDirection","column"),q(E,"paddingBottom",1),q(E,"flexShrink",0),q(E,"gap",0),q(c,"wrapMode","none"),U(c,()=>F("files.legend.changes")),u((s)=>q(c,"fg",z.textMuted,s)),E}}),o),U(t,b(X0,{get when(){return X()!=="changes"},get children(){var E=W("box");return q(E,"flexDirection","row"),q(E,"paddingBottom",1),q(E,"flexShrink",0),E}}),o),hz((E)=>{V0=E},o),q(o,"flexGrow",1),q(o,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),U(o,b(X0,{get when(){return J.worktreePath()==null},get children(){var E=W("box"),c=W("text");return D(E,c),q(E,"paddingTop",1),q(E,"paddingLeft",1),U(c,()=>F("files.empty.noTask")),u((s)=>q(c,"fg",z.textMuted,s)),E}}),null),U(o,b(X0,{get when(){return u0(()=>J.worktreePath()!=null)()&&A()!=null},get children(){var E=W("box"),c=W("text"),s=W("text");return D(E,c),D(E,s),q(E,"paddingTop",1),q(E,"paddingLeft",1),q(E,"flexDirection","column"),q(E,"gap",0),q(c,"wrapMode","word"),U(c,()=>Ax(A()??"")),q(s,"wrapMode","word"),U(s,()=>F("files.error.retryHint")),u((Z0)=>{var{error:A0,textMuted:h0}=z;return A0!==Z0.e&&(Z0.e=q(c,"fg",A0,Z0.e)),h0!==Z0.t&&(Z0.t=q(s,"fg",h0,Z0.t)),Z0},{e:void 0,t:void 0}),E}}),null),U(o,b(X0,{get when(){return u0(()=>J.worktreePath()!=null&&A()==null&&M().length===0)()&&(X()==="all"&&V()!=null||X()==="changes"&&K()!=null)},get children(){var E=W("box"),c=W("text");return D(E,c),q(E,"paddingTop",1),q(E,"paddingLeft",1),U(c,(()=>{var s=u0(()=>X()==="all");return()=>s()?F("files.empty.noFiles"):F("files.empty.noChanges")})()),u((s)=>q(c,"fg",z.textMuted,s)),E}}),null),U(o,b(X0,{get when(){return u0(()=>J.worktreePath()!=null&&A()==null)()&&M().length>0},get children(){var E=W("box");return q(E,"flexShrink",0),q(E,"gap",0),q(E,"paddingRight",1),U(E,b(Q1,{get each(){return M()},children:(c,s)=>{let Z0=()=>s()===Q(),A0=(()=>{var M0=W("text");return q(M0,"wrapMode","none"),U(M0,()=>Z0()?"\u258C":" "),u((T0)=>q(M0,"fg",Z0()?z.focusAccent:void 0,T0)),M0})(),h0=()=>Z0()?z.backgroundElement:void 0;if(c.kind==="dir"){let M0=" ".repeat(c.depth),T0=c.expanded?"\u25BE":"\u25B8";return(()=>{var X1=W("box"),z1=W("box"),w0=W("text");return D(X1,z1),q(X1,"flexDirection","row"),q(X1,"gap",0),q(X1,"onMouseUp",()=>{f(s()),x((v0)=>{let n=new Set(v0);if(n.has(c.path))n.delete(c.path);else n.add(c.path);return n})}),U(X1,A0,z1),D(z1,w0),q(z1,"flexGrow",1),q(z1,"paddingRight",1),q(w0,"wrapMode","none"),U(w0,()=>`${M0}${T0} ${c.name}/`),u((v0)=>{var n=h0(),f0=z.textMuted,I0=AQ.BOLD;return n!==v0.e&&(v0.e=q(X1,"backgroundColor",n,v0.e)),f0!==v0.t&&(v0.t=q(w0,"fg",f0,v0.t)),I0!==v0.a&&(v0.a=q(w0,"attributes",I0,v0.a)),v0},{e:void 0,t:void 0,a:void 0}),X1})()}if(c.kind==="file"){let M0=" ".repeat(c.depth);return(()=>{var T0=W("box"),X1=W("box"),z1=W("text");return D(T0,X1),q(T0,"flexDirection","row"),q(T0,"gap",0),q(T0,"onMouseUp",()=>{f(s()),J.onOpenFile(c.path)}),U(T0,A0,X1),D(X1,z1),q(X1,"flexGrow",1),q(X1,"paddingRight",1),q(z1,"wrapMode","none"),U(z1,()=>`${M0} ${c.name}`),u((w0)=>{var v0=h0(),n=z.text;return v0!==w0.e&&(w0.e=q(T0,"backgroundColor",v0,w0.e)),n!==w0.t&&(w0.t=q(z1,"fg",n,w0.t)),w0},{e:void 0,t:void 0}),T0})()}let k0=Fx(c.status),C0=()=>{switch(k0){case"success":return z.success;case"warning":return z.warning;case"error":return z.error;case"info":return z.info;default:return z.textMuted}},y=I(),L0=c.added==null?" ".repeat(y.added):`+${c.added}`.padStart(y.added),Q0=c.deleted==null?" ".repeat(y.deleted):`-${c.deleted}`.padStart(y.deleted);return(()=>{var M0=W("box"),T0=W("box"),X1=W("text"),z1=W("text");return D(M0,T0),q(M0,"flexDirection","row"),q(M0,"gap",0),q(M0,"onMouseUp",()=>{f(s()),J.onOpenFile(c.path)}),U(M0,A0,T0),D(T0,X1),D(T0,z1),q(T0,"flexDirection","row"),q(T0,"flexGrow",1),q(T0,"gap",1),q(T0,"paddingRight",1),q(X1,"wrapMode","none"),U(X1,()=>c.status),q(z1,"wrapMode","none"),q(z1,"flexGrow",1),U(z1,()=>mM(c.path,r())),U(T0,b(X0,{get when(){return y.added>0},get children(){var w0=W("text");return q(w0,"wrapMode","none"),U(w0,L0),u((v0)=>q(w0,"fg",z.success,v0)),w0}}),null),U(T0,b(X0,{get when(){return y.deleted>0},get children(){var w0=W("text");return q(w0,"wrapMode","none"),U(w0,Q0),u((v0)=>q(w0,"fg",z.error,v0)),w0}}),null),u((w0)=>{var v0=h0(),n=C0(),f0=z.text;return v0!==w0.e&&(w0.e=q(M0,"backgroundColor",v0,w0.e)),n!==w0.t&&(w0.t=q(X1,"fg",n,w0.t)),f0!==w0.a&&(w0.a=q(z1,"fg",f0,w0.a)),w0},{e:void 0,t:void 0,a:void 0}),M0})()}})),E}}),null),U(t,b(X0,{get when(){return J.worktreePath()!=null},get children(){var E=W("box"),c=W("text");return D(E,c),q(E,"flexDirection","row"),q(E,"paddingTop",1),q(E,"flexShrink",0),q(c,"wrapMode","none"),U(c,()=>F("files.footer.openHint")),u((s)=>q(c,"fg",z.textMuted,s)),E}}),null),t})()}var Ox;var $M=k(()=>{P();P();P();P();P();P();P();P();P();XJ();P();W1();v1();zW();GW();vM();lM();Ox=["all","changes"]});var aM=k(()=>{$M();zW();GW()});function pM(J,z){if(z<3)return 2500;return Math.min(J*2,20000)}function rM(J,z,Y){if(z)return 1500;if(Y==="running")return 1500;return Math.min(J*2,6000)}var _M=2500,RQ=1500;import{promises as gx}from"fs";import Cx from"path";async function yH(J,z){let Y=new AbortController,G=setTimeout(()=>Y.abort(),Nx);try{let X=await GY("git",z,{cwd:J,env:vJ(),signal:Y.signal});if(Y.signal.aborted)return null;if(X.status!==0)return null;return X.stdout.trim()}finally{clearTimeout(G)}}async function kx(J){return await yH(J,["rev-parse","--abbrev-ref","HEAD"])||"HEAD"}async function bx(J){let z=await yH(J,["symbolic-ref","refs/remotes/origin/HEAD","--short"]);if(!z)return"main";return z.startsWith("origin/")?z.slice(7):z}async function Sx(J){let z=await yH(J,["rev-parse","--abbrev-ref","@{u}"]);return z!==null&&z.length>0}async function Ix(J){let z=await yH(J,["status","--porcelain"]);if(!z)return 0;return z.split(`
|
|
280
|
+
`).filter((Y)=>Y.length>0).length}async function yx(J){let[z,Y,G,X]=await Promise.all([kx(J),bx(J),Sx(J),Ix(J)]);return{branch:z,targetBranch:Y,hasUpstream:G,dirtyCount:X}}function Tx(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 ux(J){return J?"The current branch tracks an upstream.":"There is no upstream branch yet."}function xx(J,z){let Y={branch:z.branch,targetBranch:z.targetBranch,dirtyCountSentence:Tx(z.dirtyCount),upstreamSentence:ux(z.hasUpstream)};return J.replace(/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/g,(G,X)=>Object.hasOwn(Y,X)?Y[X]:G)}async function Ex(J){let z=Cx.join(J,".kobe","pr-instructions.md");try{let Y=await gx.readFile(z,"utf8");return Y.length>0?Y:oM}catch{return oM}}async function sM(J){let[z,Y]=await Promise.all([Ex(J),yx(J)]);return xx(z,Y)}var Nx=5000,oM=`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 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
|
|
297
|
+
If any of these steps fail, ask the user for help.`;var tM=k(()=>{wY();LQ()});var QW={};j1(QW,{startOpsPreview:()=>_x,startOpsHost:()=>dx});import{createHash as wx}from"crypto";import{SyntaxStyle as Px}from"@opentui/core";function mx(J){let{theme:z}=i0(),[Y,G]=a(null),X=!1;JJ(()=>{(async()=>{let N=await WH({logTag:"ops-activity",channels:["transcript.activity"]});if(!N)return;if(X){N.dispose();return}G(N)})()}),N1(()=>{X=!0,Y()?.dispose()});let Z=()=>Y()?.transcriptActivitySignal()()??null,Q=()=>Z()?.get(J.worktree)??null,[f,H]=a(0),[B,V]=a(0),j=!1;s0(()=>{let N=Z();if(!N)return;let M=N.get(J.worktree)?.mtimeMs??0;if(!j&&M>0)j=!0,H(M);V(M)}),s0(()=>{if(Z()!==null)return;let N=!1,M,I=_M,r=0,l=0;async function e(){try{let J0=await oG(J.vendor,J.worktree);if(N)return;if(!j)j=!0,H(J0),l=J0;if(J0>l)l=J0,r=0;else r++;V(J0)}catch{r++}finally{if(!N)I=pM(I,r),M=setTimeout(()=>void e(),I)}}e(),N1(()=>{if(N=!0,M)clearTimeout(M)})});let K=()=>j&&B()>f(),L=()=>K()?{text:F("ops.badge.newActivity"),active:!0}:null;function A(){H(B())}JJ(()=>{if(!J.targetPane)return;let N=VZ(J.vendor),M=!1,I=null,r=!1,l="",e=!1,J0=0,T=null,q0=RQ,p=0,j0,F0=()=>Z()!==null;async function V0(o){if(o===T)return;T=o,await TY(J.targetPane,vx,o)}async function t(){if(F0())return Q()?.completionId??null;return(await N.latestCompletion(J.worktree))?.id??null}async function h(){try{l=eM(await HX(J.targetPane,80)),I=await t(),r=!0,await V0(N.supportsCompletionMarkers()?"idle":"unknown")}catch{}}async function C(){let o=F0();try{let E=eM(await HX(J.targetPane,80));if(M)return;if(o&&!r)I=Q()?.completionId??null,r=!0;let c=o?Q()?.mtimeMs??0:0,s=c>p;if(c>p)p=c;if(E!==l)l=E,e=!0,J0=0,await V0(N.supportsCompletionMarkers()?"running":"unknown");else if(e)J0++;if(N.supportsCompletionMarkers()&&e&&J0>=hx){let Z0=await t();if(!M&&Z0!==null&&Z0!==I)I=Z0,e=!1,J0=0,await V0("done")}q0=o?rM(q0,s,T):RQ}catch{q0=RQ}finally{if(!M)j0=setTimeout(()=>void C(),q0)}}h(),j0=setTimeout(()=>void C(),RQ),N1(()=>{if(M=!0,j0)clearTimeout(j0)})});function O(N){if(!J.taskId)return;Vz(M1(J.taskId),{cwd:J.worktree,command:O7({worktree:J.worktree,relPath:N,cliInvocation:k1()}),name:cx(N)})}function g(N){if(!J.taskId){O(N);return}let M=`${J.worktree}/${N}`;yM(M1(J.taskId),J.worktree,M).then((I)=>{if(!I)O(N)})}function x(N){if(!J.targetPane)return;Nq(J.targetPane,`@${N} `)}async function _(){if(!J.targetPane)return;let N=await sM(J.worktree);await Nq(J.targetPane,N),await kZ(J.targetPane,"Enter")}function S(){if(!J.taskId)return;let N=M1(J.taskId),M=k1(),I=`${zJ()}${kJ(M)} layout --session ${Z1(N)} --action zen-toggle`;P0(["run-shell","-b",I])}return(()=>{var N=W("box");return q(N,"flexDirection","column"),q(N,"flexGrow",1),U(N,b(ZW,{worktreePath:()=>J.worktree,focused:()=>!0,onOpenFile:g,onMention:x,onCreatePR:()=>void _(),get onZenToggle(){return J.taskId?S:void 0},cornerBadge:L,onRefresh:A})),u((M)=>q(N,"backgroundColor",z.background,M)),N})()}function cx(J){let z=J.lastIndexOf("/");return z>=0?J.slice(z+1):J}function eM(J){return wx("sha1").update(J).digest("hex")}async function dx(J){await RJ({logContext:"ops",providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(mx,J)})})}function nx(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 ix(J,z){let Y=await VX(J,["diff","HEAD","--",z]);return Y.status===0?Y.stdout:""}async function lx(J,z){return await s5(J,z)??""}function $x(J){let z={fg:J.primary},Y={fg:J.success},G={fg:J.info},X={fg:J.warning},Z={fg:J.accent},Q={fg:J.textMuted,italic:!0},f={fg:J.textMuted},H={fg:J.text};return Px.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:G,"function.call":G,"function.method":G,"function.builtin":G,constructor:G,type:X,"type.builtin":X,constant:Z,"constant.builtin":Z,boolean:Z,number:Z,operator:f,"punctuation.bracket":f,"punctuation.delimiter":f,"punctuation.special":f,variable:H,"variable.member":H,"variable.parameter":H,"variable.builtin":Z,property:H,attribute:X,label:H,module:H})}function ax(J){let{theme:z}=i0(),Y=$x(z),G=nx(J.relPath),[X]=Dq(()=>J.relPath,async(Z)=>{let Q=await ix(J.worktree,Z);if(Q.trim().length>0)return{kind:"diff",text:Q};return{kind:"code",text:await lx(J.worktree,Z)}});return D1(()=>({bindings:[{key:"q",cmd:()=>process.exit(0)},{key:"escape",cmd:()=>process.exit(0)},{key:"ctrl+c",cmd:()=>process.exit(0)}]})),(()=>{var Z=W("box"),Q=W("box"),f=W("text"),H=W("text"),B=W("text"),V=W("box");return D(Z,Q),D(Z,V),q(Z,"flexDirection","column"),q(Z,"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=u0(()=>X()?.kind==="diff");return()=>j()?F("ops.preview.diffVsHead"):F("ops.preview.file")})()),U(B,()=>F("ops.preview.closeHint")),q(V,"flexGrow",1),U(V,b(X0,{get when(){return X()},get fallback(){return(()=>{var j=W("text");return U(j,()=>F("ops.preview.loading")),u((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",G),q(K,"syntaxStyle",Y),u((L)=>q(K,"content",j().text,L)),K})()},get children(){var K=W("diff");return q(K,"view","unified"),q(K,"filetype",G),q(K,"syntaxStyle",Y),q(K,"showLineNumbers",!0),u((L)=>q(K,"diff",j().text,L)),K}})})),u((j)=>{var{background:K,accent:L,textMuted:A,textMuted:O}=z;return K!==j.e&&(j.e=q(Z,"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)),O!==j.o&&(j.o=q(B,"fg",O,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),Z})()}async function _x(J){await RJ({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(ax,J)})})}var hx=2,vx="@kobe_tab_state";var qW=k(()=>{P();P();P();P();P();P();P();ez();Gq();Xq();P1();TM();fz();lq();W1();A9();v1();XJ();oY();uJ();aM();DG();tM()});var GF={};j1(GF,{startDirectTmux:()=>rx,chooseInitialTask:()=>YF});import{resolve as JF}from"path";function YF(J,z={}){let Y=(Q)=>Q?J.find((f)=>f.id===Q):void 0,G=Y(z.activeTaskId);if(G)return G;let X=Y(z.persistedTaskId);if(X)return X;if(z.cwdRepo){let Q=J.find((f)=>f.kind==="main"&&f.repo===z.cwdRepo);if(Q)return Q}let Z=J.filter((Q)=>!Q.archived);return Z.find((Q)=>Q.pinned)??Z[0]??J[0]}async function zF(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 px(J){lH();let z=[...CJ()];if(z.length===0)z=[_z(JF(process.cwd())).path];for(let Y of z)try{await J.ensureMainTask(Y)}catch(G){console.error(`[kobe] ensureMainTask failed for ${Y}:`,G)}return z[0]??JF(process.cwd())}async function rx(){if(hQ("gui"),Promise.resolve().then(() => (cj(),mj)).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 UJ(J,{role:"gui"});try{process.env.KOBE_DAEMON_SOCKET_PATH=J.socketPath,await z.init();let Y=await px(z),G=YF(z.listTasks(),{activeTaskId:z.activeTaskSignal()(),persistedTaskId:S1("lastSelectedTaskId"),cwdRepo:Y});if(!G){let V=await kq();if(await TG(),await bX(V),await Sf(V),await zF(qX(V))===null)console.error("kobe: failed to attach to the kobe-home session"),process.exitCode=1;return}let X=G.worktreePath||await z.ensureWorktree(G.id),Z=M1(G.id);await z.setActiveTask(G.id).catch(()=>{}),r1("lastSelectedTaskId",G.id);let Q=fY(G.repo,X,{kind:"repo-init"});if(!await cY({name:Z,cwd:X,command:TJ(G.vendor),taskId:G.id,vendor:G.vendor,repo:G.repo,launchInit:Q})){console.error(`kobe: tmux session ${Z} failed to start (check the daemon log)`),process.exitCode=1;return}await TG(),await bX(Z),await Sf(Z);let H=await zF(qX(Z));if(H===null){console.error(`kobe: failed to attach to tmux session ${Z}`),process.exitCode=1;return}if(H!==0&&!await H1(Z)){console.error(`kobe: tmux session ${Z} ended unexpectedly (attach exited ${H})`),process.exitCode=H;return}let B=z.getTask(G.id);if(B&&B.title===Iz&&B.worktreePath)try{let V=await sG(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 XF=k(()=>{ZG();AJ();aY();hJ();fq();RZ();AX();O1();P1();Bf();IX();fJ()});var ZF={};j1(ZF,{startTui:()=>ox});async function ox(){w4();let{startDirectTmux:J}=await Promise.resolve().then(() => (XF(),GF));await J()}var QF=k(()=>{rf()});TH();t1();import{resolve as HW}from"path";FJ();function CW(){return[`kobe ${o0}`,"","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 qF=`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
|
|
303
|
+
`;async function sx(J){let z=J[0];if(z==="--help"||z==="-h"||z==="help"){process.stdout.write(qF);return}if(z==="--remote"){let{runAddRemote:Q}=await Promise.resolve().then(() => (cW(),mW));await Q(J.slice(1));return}if(z?.startsWith("-"))process.stderr.write(`kobe add: unknown flag "${z}"
|
|
304
304
|
|
|
305
|
-
${
|
|
306
|
-
`),process.exit(1);let
|
|
305
|
+
${qF}`),process.exit(2);let Y=HW(process.cwd(),z&&z.length>0?z:"."),{addSavedRepo:G,isGitRepo:X}=await Promise.resolve().then(() => (O1(),rz));if(!X(Y))process.stderr.write(`kobe add: "${z&&z.length>0?z:"."}" is not a git repository (resolved to ${Y}).
|
|
306
|
+
`),process.exit(1);let Z=G(Y);if(Z.added)console.log(`added ${Z.path} (${Z.total} saved repo${Z.total===1?"":"s"} total)`);else console.log(`already saved: ${Z.path}`);await ex(Z.path)}var fF=`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
|
|
315
|
+
`;async function tx(J){let z=J[0];if(z==="--help"||z==="-h"||z==="help"){process.stdout.write(fF);return}if(z?.startsWith("-"))process.stderr.write(`kobe remove: unknown flag "${z}"
|
|
316
316
|
|
|
317
|
-
${
|
|
317
|
+
${fF}`),process.exit(2);let{getSavedRepos:Y,resolveRepoRoot:G}=await Promise.resolve().then(() => (O1(),rz)),X=Y();if(X.length===0){console.log("no saved projects to remove.");return}let Z=z&&z.length>0?z:".",Q=X.includes(Z)?Z:(()=>{let V=HW(process.cwd(),Z),j=G(V);if(X.includes(j))return j;if(X.includes(V))return V;return null})();if(Q===null){process.stderr.write(`kobe remove: "${Z}" is not a saved project.
|
|
318
318
|
|
|
319
319
|
Saved projects:
|
|
320
|
-
`);for(let V of
|
|
321
|
-
`);process.exit(1)}let{connectIfRunning:f}=await Promise.resolve().then(() => (
|
|
322
|
-
`);function
|
|
320
|
+
`);for(let V of X)process.stderr.write(` ${V}
|
|
321
|
+
`);process.exit(1)}let{connectIfRunning:f}=await Promise.resolve().then(() => (AJ(),bf)),H=await f();try{if(H)await H.request("project.forget",{repo:Q});else await(await BW()).forgetProject(Q)}finally{H?.close()}let B=Y().length;console.log(`removed ${Q} (${B} saved repo${B===1?"":"s"} left)`)}async function ex(J){let z=await BW(),Y;try{Y=await z.discoverAdoptableWorktrees(J)}catch(G){console.error(`(skipped worktree scan: ${G instanceof Error?G.message:String(G)})`);return}if(Y.length===0)return;console.log(`scanning ${J}: ${Y.length} unlinked worktree(s) \u2192 importing`),await BF(z,J,Y,tY(void 0))}async function BW(){let{TaskIndexStore:J}=await Promise.resolve().then(() => (aZ(),Fj)),{GitWorktreeManager:z}=await Promise.resolve().then(() => (Aj(),PU)),{Orchestrator:Y}=await Promise.resolve().then(() => (RZ(),nV)),G=new J;return await G.load(),new Y({store:G,worktrees:new z})}async function BF(J,z,Y,G){let{connectIfRunning:X}=await Promise.resolve().then(() => (AJ(),bf)),Z=await X();try{for(let Q of Y){let f=Z?(await Z.request("worktree.adopt",{repo:z,worktreePath:Q.path,branch:Q.branch,vendor:G})).task:await J.adoptWorktree({repo:z,worktreePath:Q.path,branch:Q.branch,vendor:G});console.log(` adopted ${Q.branch} \u2192 task ${f.id} (${f.title})`)}}finally{Z?.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 fW(J){process.stderr.write(`kobe adopt: ${J}
|
|
323
323
|
|
|
324
|
-
${
|
|
325
|
-
`),process.exit(2)}async function
|
|
326
|
-
`);return}if(L==="--repo"){if(Y=J[++K],Y===void 0)
|
|
324
|
+
${jF}
|
|
325
|
+
`),process.exit(2)}async function JE(J){let z,Y,G,X=!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)fW("--repo requires a value")}else if(L==="--vendor"){if(G=J[++K],G===void 0)fW("--vendor requires a value")}else if(L==="--yes"||L==="-y")X=!0;else if(L&&!L.startsWith("-")&&z===void 0)z=L;else fW(`unexpected argument "${L}"`)}let{resolveRepoRoot:Z}=await Promise.resolve().then(() => (O1(),rz)),Q=Z(HW(process.cwd(),Y&&Y.length>0?Y:".")),f=tY(G),H=await BW(),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||CQ(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(z)}`);return}if(!
|
|
329
|
-
${j.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await
|
|
330
|
-
`)}function Cz(J){let z={};for(let Y=0;Y<J.length;Y++){let
|
|
328
|
+
no worktrees match glob ${JSON.stringify(z)}`);return}if(!X){console.log(`
|
|
329
|
+
${j.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await BF(H,Q,j,f),console.log(`done \u2014 adopted ${j.length} worktree(s)`)}function HF(J){J.write(`${CW()}
|
|
330
|
+
`)}function Cz(J){let z={};for(let Y=0;Y<J.length;Y++){let G=J[Y],X=J[Y+1];if(X===void 0)continue;if(G==="--task-id")z.taskId=X,Y++;else if(G==="--worktree")z.worktree=X,Y++;else if(G==="--target-pane")z.targetPane=X,Y++;else if(G==="--vendor")z.vendor=X,Y++;else if(G==="--preview")z.preview=X,Y++;else if(G==="--session")z.session=X,Y++;else if(G==="--repo")z.repo=X,Y++;else if(G==="--initial-task-id")z.initialTaskId=X,Y++;else if(G==="--action")z.action=X,Y++;else if(G==="--window")z.windowId=X,Y++;else if(G==="--cols")z.cols=X,Y++;else if(G==="--rows")z.rows=X,Y++;else if(G==="--status")z.status=X,Y++;else if(G==="--client")z.client=X,Y++}return z}async function zE(){let[,,...J]=process.argv,[z,...Y]=J;if(z==="--version"||z==="-v"||z==="version"){let{CURRENT_VERSION:X}=await Promise.resolve().then(() => (FJ(),gW));console.log(`kobe ${X}`);return}if(z==="--help"||z==="-h"||z==="help"){HF(process.stdout);return}if(z==="add"){await sx(Y);return}if(z==="remove"){await tx(Y);return}if(z==="completions"){let{runCompletionsSubcommand:X}=await Promise.resolve().then(() => (cU(),mU));await X(Y);return}if(z==="adopt"){await JE(Y);return}if(z==="export"){let{runExportSubcommand:X}=await Promise.resolve().then(() => ($U(),lU));await X(Y);return}if(z==="repo"){let{runRepoSubcommand:X}=await Promise.resolve().then(() => (rU(),pU));await X(Y);return}if(z==="api"){let{runApiSubcommand:X}=await Promise.resolve().then(() => (W4(),j4));await X(Y);return}if(z==="update"){let{runUpdateSubcommand:X}=await Promise.resolve().then(() => (L4(),D4));await X(Y);return}if(z==="theme"){let{runThemeSubcommand:X}=await Promise.resolve().then(() => (R4(),A4));await X(Y);return}if(z==="feedback"){let{runFeedbackSubcommand:X}=await Promise.resolve().then(() => (b4(),k4));await X(Y);return}if(z==="daemon"){let{runDaemonSubcommand:X}=await Promise.resolve().then(() => (u4(),T4));await X(Y);return}if(z==="doctor"){let{runDoctorSubcommand:X}=await Promise.resolve().then(() => (sf(),of));await X(Y);return}if(z==="web"){let{runWebSubcommand:X}=await Promise.resolve().then(() => (p4(),_4));await X(Y);return}if(z==="reset"){let{runResetSubcommand:X}=await Promise.resolve().then(() => (sf(),of));await X(Y);return}if(z==="reload"){let{runReloadSubcommand:X}=await Promise.resolve().then(() => (sf(),of));await X(Y);return}if(z==="skill"){let{runSkillSubcommand:X}=await Promise.resolve().then(() => (s4(),o4));await X(Y);return}if(z==="hook"){let{runHookSubcommand:X}=await Promise.resolve().then(() => (cj(),mj));await X(Y);return}if(z==="new-chattab"){let X=Cz(Y),Z=X.session;if(!Z)console.error("kobe new-chattab: --session <name> is required"),process.exit(2);let{windowIsSurface:Q}=await Promise.resolve().then(() => (P1(),bZ));if(await Q(Z))return;let f;if(X.vendor!==void 0){let B=X.vendor.trim(),{getCustomEngineIds:V}=await Promise.resolve().then(() => (O1(),rz)),{isBuiltinVendor:j}=await Promise.resolve().then(() => (t1(),DW));if(!(j(B)||V().includes(B))){let A=[...l1,...V()].join(", "),O=`kobe: unknown engine '${B}' (known: ${A})`,{runTmux:g}=await Promise.resolve().then(() => (P1(),bZ));await g(["display-message","-t",Z,O]),console.error(O),process.exit(2)}f=B;let{setPersistedString:L}=await Promise.resolve().then(() => (O1(),rz));L("lastSelectedVendor",f)}let{newChatTab:H}=await Promise.resolve().then(() => (fJ(),tJ));await H(Z,f);return}if(z==="kill-sessions"){let{runTmux:X,KOBE_TMUX_SOCKET:Z}=await Promise.resolve().then(() => (P1(),bZ)),Q=await X(["kill-server"]);console.log(Q===0?`kobe: killed all tmux sessions on the \`${Z}\` socket`:`kobe: no tmux sessions to kill on the \`${Z}\` socket`);return}if(z==="quick-create"){let Z=Cz(Y).session;if(!Z)console.error("kobe quick-create: --session <name> is required"),process.exit(2);let{quickCreate:Q}=await Promise.resolve().then(() => (fJ(),tJ));await Q(Z);return}if(z==="focus-tasks"){let X=Cz(Y),Z=X.session;if(!Z)console.error("kobe focus-tasks: --session <name> is required"),process.exit(2);let{windowIsSurface:Q}=await Promise.resolve().then(() => (P1(),bZ));if(X.windowId&&await Q(X.windowId))return;let{selectTasksPane:f}=await Promise.resolve().then(() => (fJ(),tJ));await f(Z,{windowId:X.windowId});return}if(z==="heal-layout"){let Z=Cz(Y).session;if(!Z)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(() => (NX(),Vf));await f(Z,"heal",()=>Q(Z));return}if(z==="resync-window"){let X=Cz(Y),Z=X.session;if(!Z)console.error("kobe resync-window: --session <name> is required"),process.exit(2);let Q=Number.parseInt(X.cols??"",10),f=Number.parseInt(X.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(() => (NX(),Vf));await V(Z,"resync",()=>B(Z,{size:H,status:X.status,clientName:X.client}));return}if(z==="capture-layout"){let Z=Cz(Y).session;if(!Z)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(() => (NX(),Vf));await f(Z,"capture",async()=>{if(H(Z,"resize")<B)return;await Q(Z)});return}if(z==="layout"){let X=Cz(Y),Z=X.session;if(!Z)console.error("kobe layout: --session <name> is required"),process.exit(2);let Q=X.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(Z,Q,{windowId:X.windowId});return}if(z==="quick-task"){let X=Cz(Y),{startQuickTaskHost:Z}=await Promise.resolve().then(() => (O3(),F3));await Z({session:X.session});return}if(z==="tasks"){let X=Cz(Y),{startTasksPane:Z}=await Promise.resolve().then(() => (OM(),FM));await Z({initialTaskId:X.initialTaskId});return}if(z==="settings"){let{startSettingsHost:X}=await Promise.resolve().then(() => (RM(),AM));await X();return}if(z==="help-page"){let{startHelpHost:X}=await Promise.resolve().then(() => (CM(),gM));await X();return}if(z==="new-task"){let X=Cz(Y),{startNewTaskHost:Z}=await Promise.resolve().then(() => (y9(),j3));await Z({defaultRepo:X.repo});return}if(z==="update-page"){let{startUpdateHost:X}=await Promise.resolve().then(() => (kM(),NM));await X();return}if(z==="ops"){let X=Cz(Y);if(!X.worktree)console.error("kobe ops: --worktree <path> is required"),process.exit(2);if(X.preview){let{startOpsPreview:Q}=await Promise.resolve().then(() => (qW(),QW));await Q({worktree:X.worktree,relPath:X.preview});return}let{startOpsHost:Z}=await Promise.resolve().then(() => (qW(),QW));await Z({taskId:X.taskId??"",worktree:X.worktree,targetPane:X.targetPane??null,vendor:tY(X.vendor)});return}if(z!==void 0)console.error(`kobe: unknown command '${z}'`),HF(process.stderr),process.exit(2);let{startTui:G}=await Promise.resolve().then(() => (QF(),ZF));await G()}zE().catch((J)=>{console.error("kobe failed to start:",J),process.exit(1)});
|