@sma1lboy/kobe 0.7.50 → 0.7.51
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 +172 -172
- 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 CF=Object.defineProperty;var NF=(J)=>J;function kF(J,z){this[J]=NF.bind(null,z)}var f1=(J,z)=>{for(var Y in z)CF(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 FQ=import.meta.require;import{basename as bF}from"path";function SF(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 OQ(J,z){let Y;try{Y=SF(J)}catch{return!1}return Y.test(z)||Y.test(bF(z))}var yH=()=>{};var MW={};f1(MW,{resolvePersistedVendor:()=>xJ,prevVendorWithin:()=>xH,nextVendorWithin:()=>LY,nextVendor:()=>IF,isBuiltinVendor:()=>QJ,coerceVendorId:()=>pY,BUILTIN_VENDORS:()=>_Y,ALL_VENDORS:()=>n1});function QJ(J){return J==="claude"||J==="codex"||J==="copilot"}function IF(J){let z=n1.indexOf(J);return n1[(z+1)%n1.length]??n1[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 xH(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 pY(J){let z=J?.trim();return z&&z.length>0?z:"claude"}function xJ(J,z=[]){let Y=J?.trim();if(!Y)return"claude";if(QJ(Y))return Y;if(z.includes(Y))return Y;return"claude"}var _Y,n1;var i1=k(()=>{_Y=["claude","codex","copilot"],n1=[..._Y]});var AQ;var FW=k(()=>{AQ={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.50",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 OW}from"crypto";import{homedir as yF}from"os";import{join as rY}from"path";function AW(){return process.env.KOBE_DEV==="1"}function bz(){return process.env.KOBE_HOME_DIR??yF()}function qJ(){return rY(bz(),".kobe")}function lJ(){return rY(bz(),".config","kobe","state.json")}function xF(){return rY(qJ(),"settings")}function RW(){return rY(xF(),"keybindings.yaml")}function uH(){return rY(qJ(),"issue-assets")}function RQ(J,z,Y){let G=OW("sha1").update(`${z}@${J}:${Y??22}`).digest("hex").slice(0,16);return rY(qJ(),"ssh",`${G}.sock`)}function gW(J){let z=OW("sha1").update(J).digest("hex").slice(0,16);return rY(qJ(),"worktree-init",z)}var p1=()=>{};var NW={};f1(NW,{repoSlug:()=>oY,releasePageUrl:()=>vH,recommendedGlobalInstallCommand:()=>PH,isNewerSemver:()=>EH,fetchReleaseSummaries:()=>wF,fetchReleaseNotesRange:()=>hH,fetchReleaseNotes:()=>EF,compareSemver:()=>gQ,checkLatestVersion:()=>sZ,UPDATE_SCRIPT_URL:()=>CQ,UPDATE_COMMAND:()=>$z,PACKAGE_NAME:()=>wH,CURRENT_VERSION:()=>p0});function oY(){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 PH(){return`npm install -g ${wH}@latest`}async function uF(J){let z=new AbortController,Y=setTimeout(()=>z.abort(),NQ);try{let G=J.replace("/","%2F"),Z=await fetch(`https://registry.npmjs.org/${G}/latest`,{signal:z.signal,headers:{accept:"application/json"}});if(!Z.ok)return null;let X=await Z.json();if(typeof X.version!=="string")return null;return X.version}catch{return null}finally{clearTimeout(Y)}}function EH(J,z){return gQ(J,z)>0}function gQ(J,z){let Y=(X)=>X.split("-")[0]??X,G=Y(J).split(".").map((X)=>Number.parseInt(X,10)),Z=Y(z).split(".").map((X)=>Number.parseInt(X,10));for(let X=0;X<3;X++){let Q=G[X]??0,f=Z[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 sZ(J={}){let z=process.env.KOBE_FAKE_UPDATE;if(z)return{current:p0,latest:z,hasUpdate:EH(z,p0)};if(AW()&&!J.force)return null;let Y=await uF(wH);if(!Y)return null;return{current:p0,latest:Y,hasUpdate:EH(Y,p0)}}function CW(J){if(typeof J!=="string")return null;return J.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function EF(J){let z=oY();if(!z)return null;let Y=`v${J}`,G=new AbortController,Z=setTimeout(()=>G.abort(),NQ);try{let X=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(!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(Z)}}async function hH(J){let z=oY();if(!z)return[];let Y=J.limit??100,G=new AbortController,Z=setTimeout(()=>G.abort(),NQ);try{let X=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(!X.ok)return[];let Q=await X.json();if(!Array.isArray(Q))return[];return Q.map((f)=>{let H=CW(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(Z)}}async function wF(J=12){let z=oY();if(!z)return[];let Y=new AbortController,G=setTimeout(()=>Y.abort(),NQ);try{let Z=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(!Z.ok)return[];let X=await Z.json();if(!Array.isArray(X))return[];return X.map((Q)=>{let f=CW(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=oY();if(!z)return null;return`https://github.com/${z}/releases/tag/v${J}`}var p0,wH,CQ="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",$z,NQ=3000;var MJ=k(()=>{FW();p1();p0=AQ.version,wH=AQ.name;$z=`curl -fsSL ${CQ} | sh`});import{spawn as PF,spawnSync as hF}from"child_process";import{existsSync as bW}from"fs";import{mkdir as vF,readFile as mF,readdir as cF}from"fs/promises";function sY(J){return`'${J.replace(/'/g,"'\\''")}'`}function dF(J){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(J)?J:sY(J)}function IW(J){return J.map(sY).join(" ")}function nF(J,z){let Y=IW(J);return z?`cd ${sY(z)} && ${Y}`:Y}function iF(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}=${sY(G)}`).join(" ")} `}function tZ(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 TW(J,z={}){return new Promise((Y)=>{let[G,...Z]=J,X="",Q="",f=!1,H=(V)=>{if(f)return;f=!0,Y({stdout:X,stderr:Q,exitCode:V})},B;try{B=PF(G??"",Z,{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 TW(J,{cwd:z.cwd,env:z.env?{...process.env,...z.env}:process.env,signal:z.signal})}async exists(J){return bW(J)}existsSync(J){return bW(J)}async mkdirp(J){await vF(J,{recursive:!0})}async readFile(J){try{return await mF(J,"utf8")}catch{return null}}async readdir(J){try{return await cF(J)}catch{return[]}}wrapCommand(J){return J}ensureReady(){}}class mG{spec;spawn;isRemote=!0;masterUp=!1;spawnAsync;constructor(J,z=SW,Y){this.spec=J;this.spawn=z;this.spawnAsync=Y??(this.spawn===SW?lF:async(G,Z)=>this.spawn(G,Z))}ensureReady(){if(this.masterUp)return;if(this.spawn([...tZ(this.spec,{batch:!0}),"-O","check"]).exitCode===0){this.masterUp=!0;return}let z=[...tZ(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=`${iF(z.env)}${IW(J)}`,G=z.cwd?`cd ${sY(z.cwd)} && ${Y}`:Y;return this.spawnAsync([...tZ(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([...tZ(this.spec,{batch:!0}),nF(["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 ${sY(z.cwd)} && ${J}`:J;return`${
|
|
3
|
+
var bF=Object.defineProperty;var SF=(J)=>J;function IF(J,z){this[J]=SF.bind(null,z)}var f1=(J,z)=>{for(var Y in z)bF(J,Y,{get:z[Y],enumerable:!0,configurable:!0,set:IF.bind(z,Y)})};var k=(J,z)=>()=>(J&&(z=J(J=0)),z);var OQ=import.meta.require;import{basename as TF}from"path";function yF(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 AQ(J,z){let Y;try{Y=yF(J)}catch{return!1}return Y.test(z)||Y.test(TF(z))}var uH=()=>{};var OW={};f1(OW,{resolvePersistedVendor:()=>xJ,prevVendorWithin:()=>EH,nextVendorWithin:()=>LY,nextVendor:()=>xF,isBuiltinVendor:()=>QJ,coerceVendorId:()=>pY,BUILTIN_VENDORS:()=>_Y,ALL_VENDORS:()=>n1});function QJ(J){return J==="claude"||J==="codex"||J==="copilot"}function xF(J){let z=n1.indexOf(J);return n1[(z+1)%n1.length]??n1[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 EH(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 pY(J){let z=J?.trim();return z&&z.length>0?z:"claude"}function xJ(J,z=[]){let Y=J?.trim();if(!Y)return"claude";if(QJ(Y))return Y;if(z.includes(Y))return Y;return"claude"}var _Y,n1;var i1=k(()=>{_Y=["claude","codex","copilot"],n1=[..._Y]});var RQ;var AW=k(()=>{RQ={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.51",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 RW}from"crypto";import{homedir as EF}from"os";import{join as rY}from"path";function gW(){return process.env.KOBE_DEV==="1"}function bz(){return process.env.KOBE_HOME_DIR??EF()}function qJ(){return rY(bz(),".kobe")}function lJ(){return rY(bz(),".config","kobe","state.json")}function wF(){return rY(qJ(),"settings")}function CW(){return rY(wF(),"keybindings.yaml")}function wH(){return rY(qJ(),"issue-assets")}function gQ(J,z,Y){let G=RW("sha1").update(`${z}@${J}:${Y??22}`).digest("hex").slice(0,16);return rY(qJ(),"ssh",`${G}.sock`)}function NW(J){let z=RW("sha1").update(J).digest("hex").slice(0,16);return rY(qJ(),"worktree-init",z)}var p1=()=>{};var bW={};f1(bW,{repoSlug:()=>oY,releasePageUrl:()=>cH,recommendedGlobalInstallCommand:()=>vH,isNewerSemver:()=>PH,fetchReleaseSummaries:()=>vF,fetchReleaseNotesRange:()=>mH,fetchReleaseNotes:()=>hF,compareSemver:()=>CQ,checkLatestVersion:()=>tZ,UPDATE_SCRIPT_URL:()=>NQ,UPDATE_COMMAND:()=>$z,PACKAGE_NAME:()=>hH,CURRENT_VERSION:()=>p0});function oY(){let J=RQ.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 vH(){return`npm install -g ${hH}@latest`}async function PF(J){let z=new AbortController,Y=setTimeout(()=>z.abort(),kQ);try{let G=J.replace("/","%2F"),Z=await fetch(`https://registry.npmjs.org/${G}/latest`,{signal:z.signal,headers:{accept:"application/json"}});if(!Z.ok)return null;let X=await Z.json();if(typeof X.version!=="string")return null;return X.version}catch{return null}finally{clearTimeout(Y)}}function PH(J,z){return CQ(J,z)>0}function CQ(J,z){let Y=(X)=>X.split("-")[0]??X,G=Y(J).split(".").map((X)=>Number.parseInt(X,10)),Z=Y(z).split(".").map((X)=>Number.parseInt(X,10));for(let X=0;X<3;X++){let Q=G[X]??0,f=Z[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 tZ(J={}){let z=process.env.KOBE_FAKE_UPDATE;if(z)return{current:p0,latest:z,hasUpdate:PH(z,p0)};if(gW()&&!J.force)return null;let Y=await PF(hH);if(!Y)return null;return{current:p0,latest:Y,hasUpdate:PH(Y,p0)}}function kW(J){if(typeof J!=="string")return null;return J.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function hF(J){let z=oY();if(!z)return null;let Y=`v${J}`,G=new AbortController,Z=setTimeout(()=>G.abort(),kQ);try{let X=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(!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(Z)}}async function mH(J){let z=oY();if(!z)return[];let Y=J.limit??100,G=new AbortController,Z=setTimeout(()=>G.abort(),kQ);try{let X=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(!X.ok)return[];let Q=await X.json();if(!Array.isArray(Q))return[];return Q.map((f)=>{let H=kW(f.tag_name);if(!H||typeof f.html_url!=="string"||typeof f.body!=="string")return null;if(CQ(H,J.current)<=0)return null;if(CQ(H,J.latest)>0)return null;return{version:H,url:f.html_url,body:f.body}}).filter((f)=>f!==null)}catch{return[]}finally{clearTimeout(Z)}}async function vF(J=12){let z=oY();if(!z)return[];let Y=new AbortController,G=setTimeout(()=>Y.abort(),kQ);try{let Z=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(!Z.ok)return[];let X=await Z.json();if(!Array.isArray(X))return[];return X.map((Q)=>{let f=kW(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 cH(J){let z=oY();if(!z)return null;return`https://github.com/${z}/releases/tag/v${J}`}var p0,hH,NQ="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",$z,kQ=3000;var MJ=k(()=>{AW();p1();p0=RQ.version,hH=RQ.name;$z=`curl -fsSL ${NQ} | sh`});import{spawn as mF,spawnSync as cF}from"child_process";import{existsSync as IW}from"fs";import{mkdir as dF,readFile as nF,readdir as iF}from"fs/promises";function sY(J){return`'${J.replace(/'/g,"'\\''")}'`}function lF(J){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(J)?J:sY(J)}function yW(J){return J.map(sY).join(" ")}function $F(J,z){let Y=yW(J);return z?`cd ${sY(z)} && ${Y}`:Y}function aF(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}=${sY(G)}`).join(" ")} `}function eZ(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 xW(J,z={}){return new Promise((Y)=>{let[G,...Z]=J,X="",Q="",f=!1,H=(V)=>{if(f)return;f=!0,Y({stdout:X,stderr:Q,exitCode:V})},B;try{B=mF(G??"",Z,{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 bQ{isRemote=!1;run(J,z={}){return xW(J,{cwd:z.cwd,env:z.env?{...process.env,...z.env}:process.env,signal:z.signal})}async exists(J){return IW(J)}existsSync(J){return IW(J)}async mkdirp(J){await dF(J,{recursive:!0})}async readFile(J){try{return await nF(J,"utf8")}catch{return null}}async readdir(J){try{return await iF(J)}catch{return[]}}wrapCommand(J){return J}ensureReady(){}}class mG{spec;spawn;isRemote=!0;masterUp=!1;spawnAsync;constructor(J,z=TW,Y){this.spec=J;this.spawn=z;this.spawnAsync=Y??(this.spawn===TW?_F:async(G,Z)=>this.spawn(G,Z))}ensureReady(){if(this.masterUp)return;if(this.spawn([...eZ(this.spec,{batch:!0}),"-O","check"]).exitCode===0){this.masterUp=!0;return}let z=[...eZ(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=`${aF(z.env)}${yW(J)}`,G=z.cwd?`cd ${sY(z.cwd)} && ${Y}`:Y;return this.spawnAsync([...eZ(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([...eZ(this.spec,{batch:!0}),$F(["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 ${sY(z.cwd)} && ${J}`:J;return`${eZ(this.spec,{tty:z.tty}).map(lF).join(" ")} ${sY(Y)}`}}var TW=(J,z)=>{let[Y,...G]=J,Z=cF(Y??"",G,{env:z?{...process.env,...z}:process.env,encoding:"utf8",shell:!1});return{stdout:Z.stdout??"",stderr:Z.stderr??"",exitCode:Z.status??-1}},_F=(J,z,Y)=>xW(J,{env:z?{...process.env,...z}:process.env,signal:Y?.signal});var dH=()=>{};import{spawnSync as pF}from"child_process";import{platform as rF}from"os";function uW(J,z,Y){return{service:oF,account:Y?`${z}@${J}:${Y}`:`${z}@${J}`}}function iH(J=nH){return J.platform()==="darwin"}function EW(J,z,Y=nH){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 SQ(J,z=nH){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 nH,oF="kobe-remote-ssh";var lH=k(()=>{nH={run(J){let[z,...Y]=J,G=pF(z??"",Y,{encoding:"utf8",shell:!1});return{stdout:G.stdout??"",exitCode:G.status??-1}},platform(){return rF()}}});import{mkdirSync as sF,readFileSync as tF,renameSync as eF,writeFileSync as JO}from"fs";import{dirname as zO}from"path";function RJ(){try{let J=tF(lJ(),"utf8"),z=JSON.parse(J);if(z&&typeof z==="object"&&!Array.isArray(z))return z}catch{}return{}}function wW(J){let z=lJ();sF(zO(z),{recursive:!0});let Y=`${z}.tmp`;JO(Y,JSON.stringify(J,null,2),"utf8"),eF(Y,z)}function cG(J){let z=RJ();if(J(z)!==!1)wW(z);return z}function MY(J){return cG((z)=>{for(let[Y,G]of Object.entries(J))if(G===void 0)delete z[Y];else z[Y]=G;return})}function az(J,z){let Y=RJ()[J];return typeof Y==="boolean"?Y:z}function PW(J,z){MY({[J]:z})}function hW(J){wW(J)}var tY=k(()=>{p1()});var oz={};f1(oz,{statePath:()=>ZO,setRepoInitOverride:()=>XO,setPersistedString:()=>r1,resolveRepoRoot:()=>_z,resolveMainRepoRoot:()=>GO,removeSavedRepo:()=>pH,remoteRepoKey:()=>dW,normalizeSavedRepos:()=>aH,isRemoteRepoKey:()=>l1,isRemoteProjectsEnabled:()=>rH,isGitRepo:()=>YO,getSavedRepos:()=>gJ,getRepoInitOverride:()=>_H,getRemoteRepos:()=>oH,getRemoteRepoConfig:()=>rz,getPersistedString:()=>g1,getCustomEngineIds:()=>uJ,addSavedRepo:()=>pz,addRemoteRepo:()=>sH});import{spawnSync as $H}from"child_process";import{realpathSync as vW}from"fs";function _z(J){if(l1(J))return J;let z=$H("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(vW(J)===vW(Y))return J}catch{}return Y}function YO(J){if(l1(J))return!1;let z=$H("git",["rev-parse","--is-inside-work-tree"],{cwd:J,encoding:"utf8",shell:!1});return z.status===0&&(z.stdout??"").trim()==="true"}function GO(J){if(l1(J))return J;let z=$H("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 ZO(){return lJ()}function IQ(J){let z=J.savedRepos;if(!Array.isArray(z))return[];return z.filter((Y)=>typeof Y==="string")}function gJ(){return IQ(RJ())}function g1(J){let z=RJ()[J];return typeof z==="string"?z:void 0}function r1(J,z){MY({[J]:z})}function uJ(){let J=RJ().customEngineIds;if(!Array.isArray(J))return[];return J.filter((z)=>typeof z==="string"&&z.trim().length>0)}function pz(J){let z=_z(J),Y={added:!1,path:z,total:0};return cG((G)=>{let Z=IQ(G);if(Z.includes(z))return Y={added:!1,path:z,total:Z.length},!1;G.savedRepos=[...Z,z],Y={added:!0,path:z,total:Z.length+1};return}),Y}function aH(){let J=gJ(),z=new Set,Y=[],G=!1;for(let Z of J){let X=_z(Z);if(X!==Z)G=!0;if(z.has(X)){G=!0;continue}z.add(X),Y.push(X)}if(!G)return;MY({savedRepos:Y})}function mW(J){let z=J.repoConfigs;if(!z||typeof z!=="object"||Array.isArray(z))return{};return z}function cW(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 cW(mW(RJ())[_z(J)])}function XO(J,z){let Y=_z(J),G={};return cG((Z)=>{let X={...mW(Z)},Q=cW(X[Y]),f=z.initScript===void 0?Q.initScript:z.initScript||void 0,H=z.initPrompt===void 0?Q.initPrompt:z.initPrompt||void 0;if(G={...f?{initScript:f}:{},...H?{initPrompt:H}:{}},!G.initScript&&!G.initPrompt){let{[Y]:B,...V}=X;Z.repoConfigs=V}else X[Y]=G,Z.repoConfigs=X;return}),G}function pH(J){let z={removed:!1,path:J,total:0};return cG((Y)=>{let G=IQ(Y);if(!G.includes(J))return z={removed:!1,path:J,total:G.length},!1;if(Y.savedRepos=G.filter((Z)=>Z!==J),l1(J)){let Z=TQ(Y);if(J in Z){let X={...Z};delete X[J],Y.remoteRepos=X}}z={removed:!0,path:J,total:G.length-1};return}),z}function l1(J){return J.startsWith("ssh://")}function rH(){return az("experimental.remoteProjects",!1)}function dW(J,z,Y){return Y?`ssh://${z}@${J}:${Y}`:`ssh://${z}@${J}`}function TQ(J){let z=J.remoteRepos;if(!z||typeof z!=="object"||Array.isArray(z))return{};return z}function rz(J){return TQ(RJ())[J]??null}function oH(){return TQ(RJ())}function sH(J){let z=dW(J.host,J.user,J.port),Y=!1;return cG((G)=>{let Z={...TQ(G)};Z[z]=J,G.remoteRepos=Z;let X=IQ(G);if(Y=!X.includes(z),Y)G.savedRepos=[...X,z];return}),{key:z,added:Y}}var F1=k(()=>{p1();tY()});var lW={};f1(lW,{runAddRemote:()=>fO,parseRemoteFlags:()=>iW});import{createInterface as QO}from"readline";function iW(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 Z=Number(J[++Y]);if(!Number.isInteger(Z)||Z<=0)Xz(`invalid --port "${J[Y]}"`);z.port=Z;break}case"--key":{let Z=J[Y+1];if(Z&&!Z.startsWith("-"))z.key={present:!0,path:Z},Y++;else z.key={present:!0};break}case"--password":z.password=!0;break;case"--help":case"-h":process.stdout.write(nW),process.exit(0);break;default:Xz(`unknown flag "${G}"`)}}return z}function Xz(J){process.stderr.write(`kobe add --remote: ${J}
|
|
5
5
|
|
|
6
|
-
${
|
|
7
|
-
`),z.close(),X(Q)})})}async function
|
|
6
|
+
${nW}`),process.exit(2)}async function qO(J){let z=QO({input:process.stdin,output:process.stdout,terminal:!0}),Y=process.stdout,G=!1,Z=Y._writeToOutput?.bind(Y);return Y._writeToOutput=(X)=>{if(!G||!Z)process.stdout.write(X)},process.stdout.write(J),G=!0,new Promise((X)=>{z.question("",(Q)=>{if(G=!1,Z)Y._writeToOutput=Z;process.stdout.write(`
|
|
7
|
+
`),z.close(),X(Q)})})}async function fO(J){if(!rH())Xz("remote projects are experimental and disabled \u2014 enable Settings \u2192 Dev \u2192 Experimental \u2192 Remote projects first");let z=iW(J);if(!z.host)Xz("--host is required");if(!z.user)Xz("--user is required");if(!z.path)Xz("--path (remote base path) is required");if(z.key&&z.password)Xz("choose ONE of --key or --password, not both");if(!z.key&&!z.password)Xz("an auth method is required: --key [path] or --password");let Y;if(z.password){if(!iH())Xz("--password needs the macOS keychain (unsupported on this platform)");let X=uW(z.host,z.user,z.port),Q=await qO(`Password for ${z.user}@${z.host}: `);if(Q.length===0)Xz("empty password");if(!EW(X,Q))Xz("failed to store the password in the keychain");Y={kind:"password",keychainRef:X}}else Y={kind:"key",keyPath:z.key?.path};let{key:G,added:Z}=sH({host:z.host,user:z.user,port:z.port,basePath:z.path,auth:Y});console.log(Z?`added remote project ${G} (base ${z.path})`:`updated remote project ${G} (base ${z.path})`),await HO(z,Y)}async function HO(J,z){if(z.kind==="password"&&!iH())return;let Y=z.kind==="key"?{kind:"key",keyPath:z.keyPath}:{kind:"password",getPassword:()=>SQ(z.keychainRef)},G={host:J.host,user:J.user,port:J.port,auth:Y,controlPath:gQ(J.host,J.user,J.port)};process.stdout.write("checking connection\u2026 ");try{if((await new mG(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(Z){console.log(`could not connect (${Z instanceof Error?Z.message:String(Z)})`),console.log("the project is saved; fix the host/credentials and it will connect on first use.")}}var nW;var $W=k(()=>{p1();dH();lH();F1();nW=`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 $J=3,FY=2,
|
|
15
|
-
`}function
|
|
16
|
-
`)}catch{}}function
|
|
13
|
+
`});function yQ(J){return J.remoteVersion>=J.localMin&&J.localVersion>=J.remoteMin}function aW(J,z){if(!J)return!1;return J!==z}function jO(J){return typeof J==="string"&&BO.has(J)}function _W(J){if(!Array.isArray(J))return null;let z=new Set;for(let Y of J)if(jO(Y))z.add(Y);return z.size>0?z:null}function Qz(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 JX(J){return`${JSON.stringify(J)}
|
|
14
|
+
`}var $J=3,FY=2,tH,BO;var eY=k(()=>{tH=["task.snapshot","issue.snapshot","active-task","update","engine-state","ui-prefs","keybindings","task.jobs","worktree.changes","transcript.activity","session.deliver"],BO=new Set(tH)});import{createHash as WO}from"crypto";import{homedir as xQ,tmpdir as VO}from"os";import{join as JG}from"path";function KO(J){return WO("sha1").update(J).digest("hex").slice(0,8)}function J8(J,z,Y,G){if(Buffer.byteLength(J,"utf8")<=eH)return J;let Z=KO(z),X=G===void 0?"":`-${G}`,Q=JG(VO(),`kobe-${Z}-${Y}${X}.sock`);if(Buffer.byteLength(Q,"utf8")<=eH)return Q;throw Error(`kobe socket path exceeds ${eH} bytes even after fallback: ${Q}`)}function Sz(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 J8(JG(Y,".kobe","daemon.sock"),Y,"daemon");let G=process.env.XDG_RUNTIME_DIR;if(G&&G.length>0)return J8(JG(G,"kobe.sock"),G,"daemon");let Z=xQ();return J8(JG(Z,".kobe","daemon.sock"),Z,"daemon")}function sz(J=process.env.KOBE_HOME_DIR??xQ()){let z=process.env.KOBE_DAEMON_PID_PATH;if(z&&z.length>0)return z;return JG(J,".kobe","daemon.pid")}function uQ(J=process.env.KOBE_HOME_DIR??xQ()){return JG(J,".kobe","daemon.log")}function pW(J=process.env.KOBE_HOME_DIR??xQ()){return JG(J,".kobe","client.log")}var eH=100;var dG=()=>{};import{appendFile as rW,mkdir as UO}from"fs/promises";import{dirname as DO}from"path";function EQ(J){tW=J}function LO(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 eW(J,z,Y=new Date){return`[${Y.toISOString()}] client ${tW} [${J}] pid=${process.pid}: ${z}
|
|
15
|
+
`}function MO(){if(oW)return;oW=!0;try{process.stderr.write(`[kobe] client log write failed; continuing without it
|
|
16
|
+
`)}catch{}}function J7(J){let z=pW();sW=sW.then(async()=>{try{await rW(z,J)}catch(Y){if(Y?.code==="ENOENT")await UO(DO(z),{recursive:!0}),await rW(z,J);else throw Y}}).catch(()=>MO())}function tz(J,z){J7(eW(J,z))}function o1(J,z){let Y=LO(z);J7(eW(J,Y.stack??Y.message))}function z7(){if(z8||Y8)return;z8=(J)=>o1("crash-net",J),Y8=(J)=>o1("crash-net",J),process.on("unhandledRejection",z8),process.on("uncaughtException",Y8)}var tW="client",oW=!1,sW,z8,Y8;var zG=k(()=>{dG();sW=Promise.resolve()});import{connect as FO}from"net";import{StringDecoder as OO}from"string_decoder";class aJ{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++),Z=new Promise((X,Q)=>{this.pending.set(G,{resolve:(f)=>X(f),reject:Q})});return Y.write(JX({type:"request",id:G,name:J,payload:z})),Z}openSocket(){return new Promise((J,z)=>{let Y=FO(this.socketPath);this.socket=Y;let G=()=>{Y.off("error",Z),J()},Z=(Q)=>{if(Y.off("connect",G),this.socket===Y)this.socket=null;z(Q)};Y.once("connect",G),Y.once("error",Z);let X=new OO("utf8");this.buffer="",Y.on("data",(Q)=>this.onData(X.write(Q))),Y.on("close",()=>this.onSocketClose(Y))})}onSocketClose(J){if(this.socket!==J)return;this.socket=null,this.failPending(),this.emitLifecycle("close")}emitLifecycle(J){for(let z of this.lifecycleHandlers.get(J)??[])try{z()}catch(Y){console.error(`[kobe] lifecycle handler for "${J}" threw:`,Y)}}onData(J){this.buffer+=J;let z=this.buffer.indexOf(`
|
|
17
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(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
|
|
19
|
-
`).map((Z)=>Z.trim()).filter(Boolean)[0];if(!G)return;if(G.startsWith("claude:")&&G.includes("aliased to")){let Z=G.split("aliased to")[1]?.trim();return Z&&
|
|
20
|
-
`).map((Z)=>Z.trim()).filter(Boolean)[0];if(!G)return;if(G.startsWith("codex:")&&G.includes("aliased to")){let Z=G.split("aliased to")[1]?.trim();return Z&&
|
|
21
|
-
`).map((Z)=>Z.trim()).filter(Boolean)[0];if(!G)return;if(G.startsWith("copilot:")&&G.includes("aliased to")){let Z=G.split("aliased to")[1]?.trim();return Z&&
|
|
22
|
-
`)){let Z=G.trim();if(!Z)continue;if(!AY(Z))continue;let X;try{X=JSON.parse(Z)}catch{continue}if(!
|
|
23
|
-
`)}function
|
|
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 zX=k(()=>{eY();zG()});import{spawnSync as AO}from"child_process";import{existsSync as RO,statSync as gO}from"fs";import{homedir as CO}from"os";import YX from"path";async function Y7(J=NO){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 Z=J.home(),X=Y(YX.join(Z,".claude","local","claude"));if(X)return X;let Q=J.env("NVM_BIN");if(Q){let B=Y(YX.join(Q,"claude"));if(B)return B}let f=YX.join(Z,".nvm","versions","node"),H=J.readdir(f).sort().reverse();for(let B of H){let V=Y(YX.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(YX.join(Z,B));if(V)return V}throw new wQ(z)}var wQ,NO;var G7=k(()=>{wQ=class wQ 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}};NO={fileExists(J){try{return gO(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return CO()},which(J){let z=process.platform==="win32"?"where":"which",Y=AO(z,[J],{encoding:"utf8"});if(Y.status!==0)return;let G=Y.stdout.split(`
|
|
19
|
+
`).map((Z)=>Z.trim()).filter(Boolean)[0];if(!G)return;if(G.startsWith("claude:")&&G.includes("aliased to")){let Z=G.split("aliased to")[1]?.trim();return Z&&RO(Z)?Z:void 0}return G},readdir(J){try{return OQ("fs").readdirSync(J)}catch{return[]}}}});import{spawnSync as kO}from"child_process";import{existsSync as bO,statSync as SO}from"fs";import{homedir as IO}from"os";import Z7 from"path";async function X7(J=TO){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 Z=J.home();for(let Q of["/opt/homebrew/bin/codex","/usr/local/bin/codex","/usr/bin/codex","/bin/codex"]){let f=Y(Q);if(f)return f}let X=J.env("NVM_BIN");if(X){let Q=Y(Z7.join(X,"codex"));if(Q)return Q}for(let Q of[".local/bin/codex",".bun/bin/codex","bin/codex"]){let f=Y(Z7.join(Z,Q));if(f)return f}throw new PQ(z)}var PQ,TO;var Q7=k(()=>{PQ=class PQ 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}};TO={fileExists(J){try{return SO(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return IO()},which(J){let z=process.platform==="win32"?"where":"which",Y=kO(z,[J],{encoding:"utf8"});if(Y.status!==0)return;let G=Y.stdout.split(`
|
|
20
|
+
`).map((Z)=>Z.trim()).filter(Boolean)[0];if(!G)return;if(G.startsWith("codex:")&&G.includes("aliased to")){let Z=G.split("aliased to")[1]?.trim();return Z&&bO(Z)?Z:void 0}return G},readdir(J){try{return OQ("fs").readdirSync(J)}catch{return[]}}}});import{spawnSync as yO}from"child_process";import{existsSync as xO,statSync as uO}from"fs";import{homedir as EO}from"os";import OY from"path";async function q7(J=wO){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 Z=J.platform()==="win32"?["copilot.exe","copilot.cmd","copilot"]:["copilot"],X=(V)=>{if(!V)return;for(let j of Z){let K=Y(OY.join(V,j));if(K)return K}return};for(let V of["/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin"]){let j=X(V);if(j)return j}let Q=J.env("NVM_BIN"),f=X(Q);if(f)return f;let H=J.home(),B=[OY.join(H,".npm-global/bin"),OY.join(H,".local/bin"),OY.join(H,".bun/bin"),OY.join(H,"bin")];if(J.platform()==="win32"){let V=J.env("APPDATA"),j=J.env("LOCALAPPDATA");if(B.unshift(OY.join(H,"AppData/Roaming/npm")),V)B.unshift(OY.join(V,"npm"));if(j)B.unshift(OY.join(j,"npm"))}for(let V of B){let j=X(V);if(j)return j}throw new hQ(z)}var hQ,wO;var f7=k(()=>{hQ=class hQ 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}};wO={fileExists(J){try{return uO(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return EO()},which(J){let z=process.platform==="win32"?"where":"which",Y=yO(z,[J],{encoding:"utf8"});if(Y.status!==0)return;let G=Y.stdout.split(`
|
|
21
|
+
`).map((Z)=>Z.trim()).filter(Boolean)[0];if(!G)return;if(G.startsWith("copilot:")&&G.includes("aliased to")){let Z=G.split("aliased to")[1]?.trim();return Z&&xO(Z)?Z:void 0}return G},platform(){return process.platform}}});import{readFileSync as PO,statSync as hO}from"fs";import{readFile as vO,stat as mO}from"fs/promises";async function nG(J,z=H7){let{size:Y}=await mO(J);if(Y>z)return"";return vO(J,"utf8")}function B7(J,z=H7){let Y;try{Y=hO(J)}catch(G){if(G.code==="ENOENT")return null;throw G}if(Y.size>z)return null;return PO(J,"utf8")}function AY(J,z=cO){return J.length<=z}var H7=104857600,cO=8388608;var GX=()=>{};import{homedir as dO}from"os";import RY from"path";function nO(J,z){let Y=J("CLAUDE_CONFIG_DIR")?.trim();if(Y)return RY.join(Y,".claude.json");return RY.join(z,".claude.json")}function iO(J,z){let G=J("CODEX_HOME")?.trim()??RY.join(z,".codex");return RY.join(G,"auth.json")}function lO(J,z){let G=J("COPILOT_HOME")?.trim()??RY.join(z,".copilot");return RY.join(G,"config.json")}function $O(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,"/"),Z=G+"=".repeat((4-G.length%4)%4);try{let X=Buffer.from(Z,"base64").toString("utf8"),Q=JSON.parse(X);return typeof Q==="object"&&Q!==null?Q:null}catch{return null}}async function mQ(J){try{return{found:!0,path:await J()}}catch(z){if(z instanceof wQ||z instanceof PQ||z instanceof hQ)return{found:!1,error:"not found on PATH"};return{found:!1,error:z instanceof Error?z.message:String(z)}}}async function j7(J){return(await Promise.all([["claude",()=>J.findClaudeBinary()],["codex",()=>J.findCodexBinary()],["copilot",()=>J.findCopilotBinary()]].map(async([G,Z])=>(await mQ(Z)).found?G:null))).filter((G)=>G!==null)}function aO(J=iG){if(J!==iG)return j7(J);if(vQ)return vQ;let z=j7(J).catch((Y)=>{throw vQ=null,Y});return vQ=z,z}async function ez(J=iG){return[...await aO(J),...uJ()]}async function cQ(J=iG){let z=await mQ(()=>J.findClaudeBinary()),Y=nO(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 Z;try{Z=JSON.parse(G)}catch(H){return{binary:z,account:{kind:"none"},accountError:`parse ${Y}: ${H instanceof Error?H.message:String(H)}`}}let X=Z?.oauthAccount;if(!X||typeof X!=="object")return{binary:z,account:{kind:"none"}};let Q=X,f=typeof Q.emailAddress==="string"?Q.emailAddress:void 0;if(!f)return{binary:z,account:{kind:"none"}};return{binary:z,account:{kind:"oauth",email:f,organization:typeof Q.organizationName==="string"?Q.organizationName:void 0,displayName:typeof Q.displayName==="string"?Q.displayName:void 0,billingType:typeof Q.billingType==="string"?Q.billingType:void 0}}}async function dQ(J=iG){let z=await mQ(()=>J.findCodexBinary()),Y=iO(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 Z;try{Z=JSON.parse(G)}catch(B){return{binary:z,account:{kind:"none"},accountError:`parse ${Y}: ${B instanceof Error?B.message:String(B)}`}}let X=Z??{},Q=X.tokens,f=typeof Q?.id_token==="string"?Q.id_token:void 0;if(f){let B=$O(f);if(!B)return{binary:z,account:{kind:"none"},accountError:"codex id_token: malformed JWT"};let V=typeof B.email==="string"?B.email:void 0,j=B["https://api.openai.com/auth"],K=typeof j==="object"&&j!==null&&!Array.isArray(j)?j:void 0,L=typeof K?.chatgpt_plan_type==="string"?K.chatgpt_plan_type:void 0;if(V)return{binary:z,account:{kind:"chatgpt",email:V,plan:L}};return{binary:z,account:{kind:"none"},accountError:"codex id_token: no email claim"}}let H=X.OPENAI_API_KEY;if(typeof H==="string"&&H.length>0)return{binary:z,account:{kind:"apikey"}};return{binary:z,account:{kind:"none"}}}async function nQ(J=iG){let z=await mQ(()=>J.findCopilotBinary());for(let X of["COPILOT_GITHUB_TOKEN","GH_TOKEN","GITHUB_TOKEN"])if(J.env(X)?.trim())return{binary:z,account:{kind:"token",source:X}};let Y=lO(J.env,J.home()),G;try{G=J.readFile(Y)}catch(X){return{binary:z,account:{kind:"none"},accountError:`read ${Y}: ${X instanceof Error?X.message:String(X)}`}}if(G===null)return{binary:z,account:{kind:"none"}};let Z;try{Z=JSON.parse(G)}catch(X){return{binary:z,account:{kind:"none"},accountError:`parse ${Y}: ${X instanceof Error?X.message:String(X)}`}}if(!G8(Z))return{binary:z,account:{kind:"none"}};if(W7(Z,["github_token","oauth_token","access_token","token","selectedUser","currentUser","user"]))return{binary:z,account:{kind:"oauth"}};return{binary:z,account:{kind:"none"}}}function G8(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function W7(J,z,Y=0){if(Y>4||!G8(J))return!1;for(let[G,Z]of Object.entries(J)){if(z.includes(G)&&typeof Z==="string"&&Z.length>0)return!0;if(G8(Z)&&W7(Z,z,Y+1))return!0}return!1}var iG,vQ=null;var YG=k(()=>{F1();G7();Q7();f7();GX();iG={readFile(J){return B7(J)},env(J){return process.env[J]},home(){return dO()},findClaudeBinary(){return Y7()},findCodexBinary(){return X7()},findCopilotBinary(){return q7()}}});function V7(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 K7(J){return J.isMeta===!0||J.isCompactSummary===!0}function U7(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 Ew,mkdir as ww,readdir as Z8,stat as _O,unlink as Pw}from"fs/promises";import{homedir as D7}from"os";import iQ from"path";function rO(J){return J.replace(/[/.]/g,"-")}async function ZX(J){if(!J)return[];let z=iQ.join(D7(),".claude","projects",rO(J)),Y;try{Y=await Z8(z)}catch{return[]}let G=[];for(let Z of Y){if(!Z.endsWith(".jsonl"))continue;let X=iQ.join(z,Z),Q=0;try{Q=(await _O(X)).mtimeMs}catch{}G.push({sessionId:Z.slice(0,-6),path:X,mtimeMs:Q})}return G.sort((Z,X)=>X.mtimeMs-Z.mtimeMs),G}async function L7(J){return(await ZX(J))[0]?.mtimeMs??0}async function M7(J,z=pO){let Y=z.projectsDir(),G=await z.readdir(Y);for(let Z of G){let X=iQ.join(Y,Z,`${J}.jsonl`),Q;try{Q=await z.readFile(X)}catch{continue}return oO(sO(Q,J))}return[]}function oO(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 sO(J,z){let Y=[];for(let G of J.split(`
|
|
22
|
+
`)){let Z=G.trim();if(!Z)continue;if(!AY(Z))continue;let X;try{X=JSON.parse(Z)}catch{continue}if(!X8(X))continue;let Q=tO(X,z);if(Q)Y.push(Q)}return Y}function tO(J,z){if(K7(J))return null;let Y=X8(J.message)?J.message:J,G=Y.role;if(G!=="user"&&G!=="assistant"&&G!=="system")return null;if(!("content"in Y))return null;let Z=V7(Y.content);if(G==="user"&&U7(Z))return null;let X=typeof J.timestamp==="string"?J.timestamp:new Date().toISOString(),Q=typeof J.sessionId==="string"?J.sessionId:z,f=eO(Y.usage);return f?{role:G,blocks:Z,timestamp:X,sessionId:Q,usage:f}:{role:G,blocks:Z,timestamp:X,sessionId:Q}}function eO(J){if(!X8(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,Z=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}:{},...Z!==void 0?{cache_creation_input_tokens:Z}:{}}}function X8(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var pO;var Q8=k(()=>{GX();pO={projectsDir(){return iQ.join(D7(),".claude","projects")},async readdir(J){try{return await Z8(J)}catch{return[]}},async readFile(J){return await nG(J)},async pathExists(J){try{return await Z8(J),!0}catch{return!1}}}});import{fileURLToPath as O7}from"url";function b1(){if(import.meta.url.endsWith(".js"))return["kobe"];let z=O7(new URL("./index.ts",import.meta.url)),Y=O7(import.meta.resolve("@opentui/solid/preload"));return[process.execPath,"--preload",Y,"--conditions=browser",z]}var JY=()=>{};function q8(J,z={}){if(z.bareSafe&&J2.test(J))return J;return`'${J.replace(/'/g,"'\\''")}'`}function lQ(J,z={}){return J.map((Y)=>q8(Y,z)).join(" ")}var J2;var f8=k(()=>{J2=/^[A-Za-z0-9_/.:=-]+$/});function QX(J){return`kobe-hidden-${J.replace(/[^A-Za-z0-9_-]/g,"")||"session"}`}function g7(J){let z=Number.parseInt(J.replace(/^@/,""),10);return Number.isFinite(z)&&z>=0?1000+z:1000}function j8(J){if(!Number.isFinite(J))return R7;return Math.max(z2,Math.min(Y2,Math.round(J)))}function GG(J){if(!Number.isFinite(J))return null;return Math.max(G2,Math.min(Z2,Math.round(J)))}function N7(J){let z=Number.parseInt(J[$Q]??"",10),Y=Number.isFinite(z)&&z>0?j8(z):R7,G=GG(Number.parseInt(J[aQ]??"",10)),Z=GG(Number.parseInt(J[_Q]??"",10)),X=[];if(G!==null)X.push("-x",`${G}%`);if(Z!==null)X.push("-y",`${Z}%`);return{tasksWidth:Y,rightColumnWidthPct:G??100-W8,opsHeightPct:Z??qX,rightColumnResizeArgs:X}}function Z1(J){return q8(J)}function NJ(J){return lQ(J)}function kJ(J){return`${J}; __rc=$?; [ "$__rc" -ne 0 ] && printf '${"\\n \u26A0 Engine exited (code %s). Check Settings \u2192 Engines, fix the launch command, then press R to relaunch.\\n\\n"}' "$__rc"; exec "\${SHELL:-/bin/sh}"`}function H8(J){return`'${J.replace(/'/g,"'\\''")}'`}function k7(){return`clear; printf ${H8("\\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 V8(J){let z=typeof J==="number"?J:J==null?Number.NaN:Number.parseInt(J,10);if(!Number.isFinite(z))return X2;return Math.max(Q2,Math.min(q2,Math.round(z)))}function f2(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",Z="\\n \u26A0 Repo init (.kobe/init.sh) failed (code %s); continuing to the engine.\\n\\n";return['__kobe_init_env="${TMPDIR:-/tmp}/kobe-init-env.$$"','__kobe_init_to="${TMPDIR:-/tmp}/kobe-init-timeout.$$"','rm -f "$__kobe_init_env" "$__kobe_init_to" 2>/dev/null',"(",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 b7(J,z){let Y=kJ(J),G=z?.initScript?.trim();if(!G)return Y;let Z=V8(z?.timeoutSeconds),X=f2(G,Z);if(z?.markerPath){let Q=H8(z.markerPath),f=H8(H2(z.markerPath));return[`if [ ! -f ${Q} ]; then`,X,`if [ "$__kobe_init_rc" -eq 0 ]; then mkdir -p ${f} && : > ${Q}; fi`,"fi",Y].join(`
|
|
24
24
|
`)}return[X,Y].join(`
|
|
25
|
-
`)}function
|
|
26
|
-
`)}catch{}}class
|
|
25
|
+
`)}function H2(J){let z=J.lastIndexOf("/");return z<=0?".":J.slice(0,z)}function A7(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 S7(J){let z=Z1(J.worktree),Y=Z1(J.relPath),G=J.cliInvocation.map(Z1).join(" "),Z=`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} || { ${Z}; }`}function I7(J){return`${NJ([...J.cliInvocation,"update-page"])}`}function T7(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 CY(J,z={}){let Y=[...J,"tasks"];if(z.initialTaskId)Y.push("--initial-task-id",z.initialTaskId);return NJ(Y)}function $G(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} || { ${A7(J.cwd)}; }`}return A7(J.cwd)}var R7=32,_J="tasks",ZG="claude",qz="ops",fz="shell",XX="workspace_aux",B8=4,Hz="@kobe_hidden_shell_pane",CJ="@kobe_hidden_tasks_pane",gY="@kobe_zen_panes",lG="@kobe_zen",$Q="@kobe_tasks_width",z2=16,Y2=120,W8=60,qX=50,aQ="@kobe_right_width_pct",_Q="@kobe_ops_height_pct",G2=10,Z2=90,C7,X2=120,Q2=5,q2=3600;var Bz=k(()=>{f8();C7=[$Q,aQ,_Q]});function pJ(J){return!!J&&typeof J==="object"&&!Array.isArray(J)}function j2(J){return J.map((z)=>NJ(["hook",z.verb]))}function W2(J,z){if(!pJ(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((Y)=>pJ(Y)&&typeof Y.command==="string"&&z.some((G)=>Y.command.includes(G)))}function u7(J,z=b1()){let Y={};for(let{event:G,matcher:Z,verb:X}of J){let f={hooks:[{type:"command",command:NJ([...z,"hook",X])}]};if(Z)f.matcher=Z;Y[G]=[f]}return Y}function pQ(J,z,Y,G=b1()){let Z=j2(Y),{hooks:X,...Q}=J,f=pJ(X)?{...X}:{},H=z?u7(Y,G):{};for(let{event:B}of Y){let j=(Array.isArray(f[B])?f[B]:[]).filter((K)=>!W2(K,Z));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 E7(J=b1()){let z=NJ([...J,"hook",x7]);return{[y7]:[{matcher:B2,hooks:[{type:"command",command:z}]}]}}function V2(J){if(!pJ(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((z)=>pJ(z)&&typeof z.command==="string"&&z.command.includes(x7))}function rQ(J,z,Y=b1()){let{hooks:G,...Z}=J,X=pJ(G)?{...G}:{},Q=y7,H=(Array.isArray(X[Q])?X[Q]:[]).filter((B)=>!V2(B));if(z)H.push(...E7(Y)[Q]);if(H.length>0)X[Q]=H;else delete X[Q];return Object.keys(X).length>0?{...Z,hooks:X}:{...Z}}var y7="PostToolUse",B2="Bash",x7="worktree-created";var K8=k(()=>{JY();Bz()});import{mkdir as K2,readFile as U2,writeFile as D2}from"fs/promises";import{dirname as L2}from"path";async function M2(J){try{let z=JSON.parse(await U2(J,"utf8"));return pJ(z)?z:{}}catch{return{}}}async function aG(J,z){try{let Y=await M2(J),G=z(Y);if(JSON.stringify(G)===JSON.stringify(Y))return;await K2(L2(J),{recursive:!0}),await D2(J,`${JSON.stringify(G,null,2)}
|
|
26
|
+
`)}catch{}}class fX{supportsHooks(){return!0}activityDetailFromPayload(J,z){return}supportsWorktreeSync(){return!1}async removeWorktreeSyncHook(J){}async installActivityHooks(J){await aG(J,(z)=>pQ(z,!0,this.eventMap))}async removeActivityHooks(J){await aG(J,(z)=>pQ(z,!1,this.eventMap))}async installWorktreeWatchHook(J){await aG(J,(z)=>rQ(z,!0))}async removeWorktreeWatchHook(J){await aG(J,(z)=>rQ(z,!1))}}var U8=k(()=>{K8()});import{homedir as F2}from"os";import{join as O2}from"path";function A2(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 R2(){return O2(F2(),".claude","settings.json")}function C2(J){if(!pJ(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((z)=>pJ(z)&&typeof z.command==="string"&&z.command.includes(g2))}function N2(J,z){let{hooks:Y,...G}=J,{WorktreeCreate:Z,...X}=pJ(Y)?Y:{},f=(Array.isArray(Z)?Z:[]).filter((B)=>!C2(B));if(z!==null)f.push({hooks:[{type:"command",command:z}]});let H={...X};if(f.length>0)H.WorktreeCreate=f;return Object.keys(H).length>0?{...G,hooks:H}:{...G}}var w7,ZP,g2="worktree-created",D8;var P7=k(()=>{U8();K8();w7=[{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"}],ZP=w7.map((J)=>J.event);D8=class D8 extends fX{vendor="claude";eventMap=w7;globalSettingsPath(){return R2()}activityDetailFromPayload(J,z){if(J==="turn-failed")return{failure:A2(z.error_type)};if(J==="awaiting-input")return{waiting:"permission"};return}supportsWorktreeSync(){return!0}async removeWorktreeSyncHook(J){await aG(J,(z)=>N2(z,null))}}});function L8(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(!k2(Y))continue;let G=typeof Y.type==="string"?Y.type:void 0;if(G==="input_text"||G==="output_text"){let Z=typeof Y.text==="string"?Y.text:"";if(Z.length>0)z.push({type:"text",text:Z});continue}if(G)z.push({type:"text",text:`[codex: ${G}]`})}return z}function k2(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function h7(J){if(J.length===0)return!1;for(let z of J){if(z.type!=="text")return!1;let Y=(z.text??"").trim();if(!b2(Y)&&!S2(Y))return!1}return!0}function b2(J){return J.startsWith("<environment_context>")&&J.endsWith("</environment_context>")}function S2(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(!AY(Y))return"";try{let G=JSON.parse(Y);if(G.type==="session_meta")return G.payload?.cwd??""}catch{}return""}return""}async function
|
|
30
|
-
`)){let Z=G.trim();if(!Z)continue;if(!AY(Z))continue;let X;try{X=JSON.parse(Z)}catch{continue}if(!
|
|
31
|
-
`)){let Z=G.trim();if(!Z)continue;if(!AY(Z))continue;let X;try{X=JSON.parse(Z)}catch{continue}if(!
|
|
32
|
-
`)){let G=Y.match(/^([A-Za-z_]+):\s*(.*)$/);if(!G)continue;let Z=G[1],X=G[2]??"";if(X.startsWith('"')&&X.endsWith('"'))X=X.slice(1,-1).replace(/\\"/g,'"');z[Z]=X}return{id:z.id,cwd:z.cwd,name:z.name,updatedAt:z.updated_at,createdAt:z.created_at}}function
|
|
33
|
-
`)){let H=f.trim();if(!H)continue;if(!AY(H))continue;let B;try{B=JSON.parse(H)}catch{continue}if(!
|
|
34
|
-
`)){Z++;let Q=
|
|
35
|
-
`)){G++;let X=GV(Z);if(!X||X.type!=="turn.completed")continue;let Q=ZV(X,0),f={id:`codex:${z}:${Q}:${G}`,timestampMs:Q,source:"codex"};if(!Y||f.timestampMs>=Y.timestampMs)Y=f}return Y}function GV(J){let z=J.trim();if(!z)return null;try{let Y=JSON.parse(z);return XV(Y)?Y:null}catch{return null}}function ZV(J,z){let Y=typeof J.timestamp==="string"?Date.parse(J.timestamp):Number.NaN;return Number.isFinite(Y)?Y:z}function XV(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var YA,I8,GA,T8,Jq;var zq=k(()=>{Z8();R8();kY();YA={listSessionFiles:(J)=>GX(J),readFile:(J)=>YV(J,"utf8")};I8=class I8 extends eQ{deps;vendor="claude";cache=new Map;constructor(J=YA){super();this.deps=J}async latestCompletion(J){let z=await this.deps.listSessionFiles(J),Y=null,G=new Map;for(let Z of z.slice(0,4)){let X=this.cache.get(Z.path),Q;if(X&&Z.mtimeMs>0&&X.mtimeMs===Z.mtimeMs)Q=X.marker;else{let f=await this.deps.readFile(Z.path).catch(()=>"");Q=ZA(f,Z.path,Z.mtimeMs)}if(G.set(Z.path,{mtimeMs:Z.mtimeMs,marker:Q}),Q&&(!Y||Q.timestampMs>Y.timestampMs))Y=Q}return this.cache=G,Y}};GA={findLatestRollout:(J)=>A8(J),readFile:(J)=>YV(J,"utf8")};T8=class T8 extends eQ{deps;vendor="codex";cache=null;constructor(J=GA){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=XA(Y,z.path);return this.cache={path:z.path,mtimeMs:z.mtimeMs,marker:G},G}};Jq=class Jq extends eQ{vendor;constructor(J){super();this.vendor=J}supportsCompletionMarkers(){return!1}async latestCompletion(){return null}}});function jA(J){return{vendor:J,builtin:!1,displayName:J,defaultCommand:[J],history:QA,detectAccount:async()=>({binary:{found:!1,error:"custom engine: kobe has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new tQ(J),createTurnDetector:()=>new Jq(J)}}function t1(J){return QJ(J)?BA[J]:jA(J)}var QA,qA,fA,HA,BA;var kY=k(()=>{i1();YG();Z8();E7();R8();o7();zV();S8();zq();QA={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async latestTranscriptMtimeForWorktree(){return 0}},qA={async listSessionIdsForWorktree(J){return[...await GX(J)].sort((Y,G)=>Y.mtimeMs-G.mtimeMs).map((Y)=>Y.sessionId)},readHistory:(J)=>D7(J),latestTranscriptMtimeForWorktree:(J)=>U7(J)},fA={listSessionIdsForWorktree:(J)=>$7(J),readHistory:(J)=>_7(J),latestTranscriptMtimeForWorktree:(J)=>a7(J)},HA={listSessionIdsForWorktree:(J)=>t7(J),readHistory:(J)=>JV(J),latestTranscriptMtimeForWorktree:(J)=>e7(J)},BA={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:qA,detectAccount:(J)=>mQ(J),createHookAdapter:()=>new K8,createTurnDetector:()=>new I8},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:fA,detectAccount:(J)=>cQ(J),createHookAdapter:()=>new g8,createTurnDetector:()=>new T8},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:HA,detectAccount:(J)=>dQ(J),createHookAdapter:()=>new tQ("copilot"),createTurnDetector:()=>new Jq("copilot")}}});async function _G(J,z){if(!z)return 0;return t1(J).history.latestTranscriptMtimeForWorktree(z)}var Yq=k(()=>{kY()});function QV(J){return typeof J==="string"&&WA.includes(J)}var BX=(J)=>J,$1="claude",WA;var rJ=k(()=>{WA=["backlog","in_progress","in_review","done","canceled","error"]});function Gq(J){return VA.includes(J)}function qV(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 VA;var Zq=k(()=>{VA=["session-start","turn-start","turn-complete","turn-failed","awaiting-input","session-end"]});function KA(){let J=process.env.KOBE_ENGINE_STATE_TTL_MS;if(J===void 0)return fV;let z=Number(J);return Number.isFinite(z)&&z>0?z:fV}class y8{bus;staleMs;now;livenessAt;activity=new Map;constructor(J,z=KA(),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 Z=qV(G?.state,z,Y),X=this.now(),Q={state:Z,detail:Y,at:X};if(Z!=="idle"&&Z!=="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 G;try{G=await this.livenessAt(J)}catch{G=void 0}let Z=this.activity.get(J);if(!Z||Z.at!==z)return;if(G!==void 0&&G>this.now()-this.staleMs){Z.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 fV=600000;var HV=k(()=>{Zq()});function BV(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 Xq(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 jV(J){let z=J.find((Z)=>Z.role==="user");if(!z)return"";let Y=z.blocks.filter((Z)=>Z.type==="text").map((Z)=>Z.text).join(" "),G=BV(Y);return G.length>0?Buffer.from(G,"utf8").toString("utf8"):G}async function pG(J,z=$1){if(!J)return"";let{history:Y}=t1(z),G=await Y.listSessionIdsForWorktree(J);for(let Z of G.slice(0,UA)){let X=jV(await Y.readHistory(Z));if(X)return X}return""}async function WV(J,z){if(!z)return"";try{return jV(await t1(J).history.readHistory(z))}catch{return""}}var UA=8;var Qq=k(()=>{kY();rJ()});function VV(J){let z=String(J),Y=z.length-1;return S1.context.id+(Y?String.fromCharCode(96+Y):"")+z}function E8(J){S1.context=J}function DA(){return{...S1.context,id:S1.getNextContextId(),count:0}}function fG(J,z){let Y=U1,G=i0,Z=J.length===0,X=z===void 0?G:z,Q=Z?{owned:null,cleanups:null,context:null,owner:null}:{owned:null,cleanups:null,context:X?X.context:null,owner:X},f=Z?()=>J(()=>{throw Error("Dispose method must be an explicit argument to createRoot function")}):()=>J(()=>_1(()=>bY(Q)));Wz.afterCreateOwner&&Wz.afterCreateOwner(Q),i0=Q,U1=null;try{return bJ(f,!0)}finally{U1=Y,i0=G}}function a(J,z){z=z?Object.assign({},Bq,z):Bq;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(AV(Y),Wz.afterCreateSignal)Wz.afterCreateSignal(Y)}let G=(Z)=>{if(typeof Z==="function")if(f0&&f0.running&&f0.sources.has(Y))Z=Z(Y.tValue);else Z=Z(Y.value);return P8(Y,Z)};return[RV.bind(Y),G]}function KV(J,z,Y){let G=sG(J,z,!0,EJ,Y);if(oG&&f0&&f0.running)a1.push(G);else HG(G)}function Iz(J,z,Y){let G=sG(J,z,!1,EJ,Y);if(oG&&f0&&f0.running)a1.push(G);else HG(G)}function r0(J,z,Y){OV=IA;let G=sG(J,z,!1,EJ,Y),Z=VX&&wJ(VX);if(Z)G.suspense=Z;if(!Y||!Y.render)G.user=!0;WJ?WJ.push(G):HG(G)}function K0(J,z,Y){Y=Y?Object.assign({},Bq,Y):Bq;let G=sG(J,z,!0,0,Y);if(G.observers=null,G.observerSlots=null,G.comparator=Y.equals||void 0,oG&&f0&&f0.running)G.tState=EJ,a1.push(G);else HG(G);return RV.bind(G)}function RA(J){return J&&typeof J==="object"&&"then"in J}function Kq(J,z,Y){let G,Z,X;if(typeof z==="function")G=J,Z=z,X=Y||{};else G=!0,Z=J,X=z||{};let Q=null,f=x8,H=null,B=!1,V=!1,j="initialValue"in X,K=typeof G==="function"&&K0(G),L=new Set,[A,O]=(X.storage||a)(X.initialValue),[g,x]=a(void 0),[_,S]=a(void 0,{equals:!1}),[N,M]=a(j?"ready":"unresolved");if(S1.context){if(H=S1.getNextContextId(),X.ssrLoadFrom==="initial")f=X.initialValue;else if(S1.load&&S1.has(H))f=S1.load(H)}function I(T,q0,p,B0){if(Q===T){if(Q=null,B0!==void 0&&(j=!0),(T===f||q0===f)&&X.onHydrated)queueMicrotask(()=>X.onHydrated(B0,{value:q0}));if(f=x8,f0&&T&&B)f0.promises.delete(T),B=!1,bJ(()=>{f0.running=!0,r(q0,p)},!1);else r(q0,p)}return q0}function r(T,q0){bJ(()=>{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 i(){let T=VX&&wJ(VX),q0=A(),p=g();if(p!==void 0&&!Q)throw p;if(U1&&!U1.user&&T)KV(()=>{if(_(),Q){if(T.resolved&&f0&&B)f0.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=f0&&f0.running,q0==null||q0===!1){I(Q,_1(A));return}if(f0&&Q)f0.promises.delete(Q);let p,B0=f!==x8?f:_1(()=>{try{return Z(q0,{value:A(),refetching:T})}catch(L0){p=L0}});if(p!==void 0){I(Q,void 0,Hq(p),q0);return}else if(!RA(B0))return I(Q,B0,void 0,q0),B0;if(Q=B0,"v"in B0){if(B0.s===1)I(Q,B0.v,void 0,q0);else I(Q,void 0,Hq(B0.v),q0);return B0}return V=!0,queueMicrotask(()=>V=!1),bJ(()=>{M(j?"refreshing":"pending"),S()},!1),B0.then((L0)=>I(B0,L0,void 0,q0),(L0)=>I(B0,void 0,Hq(L0),q0))}Object.defineProperties(i,{state:{get:()=>N()},error:{get:()=>g()},loading:{get(){let T=N();return T==="pending"||T==="refreshing"}},latest:{get(){if(!j)return i();let T=g();if(T&&!Q)throw T;return A()}}});let J0=i0;if(K)KV(()=>(J0=i0,e(!1)));else e(!1);return[i,{refetch:(T)=>CA(J0,()=>e(T)),mutate:O}]}function Uq(J){return bJ(J,!1)}function _1(J){if(!rG&&U1===null)return J();let z=U1;U1=null;try{if(rG)return rG.untrack(J);return J()}finally{U1=z}}function SJ(J,z,Y){let G=Array.isArray(J),Z,X=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(X)return X=!1,Q;let H=_1(()=>z(f,Z,Q));return Z=f,H}}function e1(J){r0(()=>_1(J))}function k1(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 gA(J,z){if(jX||(jX=Symbol("error")),i0=sG(void 0,void 0,!0),i0.context={...i0.context,[jX]:[z]},f0&&f0.running)f0.sources.add(i0);try{return J()}catch(Y){UX(Y)}finally{i0=i0.owner}}function Dq(){return U1}function CA(J,z){let Y=i0,G=U1;i0=J,U1=null;try{return bJ(z,!0)}catch(Z){UX(Z)}finally{i0=Y,U1=G}}function NA(J){if(f0&&f0.running)return J(),f0.done;let z=U1,Y=i0;return Promise.resolve().then(()=>{U1=z,i0=Y;let G;if(oG||VX)G=f0||(f0={sources:new Set,effects:[],promises:new Set,disposed:new Set,queue:new Set,running:!0}),G.done||(G.done=new Promise((Z)=>G.resolve=Z)),G.running=!0;return bJ(J,!1),U1=i0=null,G?G.done:void 0})}function DV(J,z){let Y=sG(()=>_1(()=>{return Object.assign(J,{[OA]:!0}),J(z)}),void 0,!0,0);return Y.props=z,Y.observers=null,Y.observerSlots=null,Y.name=J.name,Y.component=J,HG(Y),Y.tValue!==void 0?Y.tValue:Y.value}function AV(J){if(i0){if(i0.sourceMap)i0.sourceMap.push(J);else i0.sourceMap=[J];J.graph=i0}if(Wz.afterRegisterGraph)Wz.afterRegisterGraph(J)}function Tz(J,z){let Y=Symbol("context");return{id:Y,Provider:TA(Y,z),defaultValue:J}}function wJ(J){let z;return i0&&i0.context&&(z=i0.context[J.id])!==void 0?z:J.defaultValue}function kA(J){let z=K0(J),Y=K0(()=>w8(z()),void 0,{name:"children"});return Y.toArray=()=>{let G=Y();return Array.isArray(G)?G:G!=null?[G]:[]},Y}function RV(){let J=f0&&f0.running;if(this.sources&&(J?this.tState:this.state))if((J?this.tState:this.state)===EJ)HG(this);else{let z=a1;a1=null,bJ(()=>jq(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&&f0.sources.has(this))return this.tValue;return this.value}function P8(J,z,Y){let G=f0&&f0.running&&f0.sources.has(J)?J.tValue:J.value;if(!J.comparator||!J.comparator(G,z)){if(f0){let Z=f0.running;if(Z||!Y&&f0.sources.has(J))f0.sources.add(J),J.tValue=z;if(!Z)J.value=z}else J.value=z;if(J.observers&&J.observers.length)bJ(()=>{for(let Z=0;Z<J.observers.length;Z+=1){let X=J.observers[Z],Q=f0&&f0.running;if(Q&&f0.disposed.has(X))continue;if(Q?!X.tState:!X.state){if(X.pure)a1.push(X);else WJ.push(X);if(X.observers)CV(X)}if(!Q)X.state=EJ;else X.tState=EJ}if(a1.length>1e6){if(a1=[],LA)throw Error("Potential Infinite Loop Detected.");throw Error()}},!1)}return z}function HG(J){if(!J.fn)return;bY(J);let z=Vq;if(LV(J,f0&&f0.running&&f0.sources.has(J)?J.tValue:J.value,z),f0&&!f0.running&&f0.sources.has(J))queueMicrotask(()=>{bJ(()=>{f0&&(f0.running=!0),U1=i0=J,LV(J,J.tValue,z),U1=i0=null},!1)})}function LV(J,z,Y){let G,Z=i0,X=U1;U1=i0=J;try{G=J.fn(z)}catch(Q){if(J.pure)if(f0&&f0.running)J.tState=EJ,J.tOwned&&J.tOwned.forEach(bY),J.tOwned=void 0;else J.state=EJ,J.owned&&J.owned.forEach(bY),J.owned=null;return J.updatedAt=Y+1,UX(Q)}finally{U1=X,i0=Z}if(!J.updatedAt||J.updatedAt<=Y){if(J.updatedAt!=null&&"observers"in J)P8(J,G,!0);else if(f0&&f0.running&&J.pure){if(!f0.sources.has(J))J.value=G;f0.sources.add(J),J.tValue=G}else J.value=G;J.updatedAt=Y}}function sG(J,z,Y,G=EJ,Z){let X={fn:J,state:G,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:z,owner:i0,context:i0?i0.context:null,pure:Y};if(f0&&f0.running)X.state=0,X.tState=G;if(i0===null)console.warn("computations created outside a `createRoot` or `render` will never be disposed");else if(i0!==AA)if(f0&&f0.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(Z&&Z.name)X.name=Z.name;if(rG&&X.fn){let Q=X.fn,[f,H]=a(void 0,{equals:!1}),B=rG.factory(Q,H);k1(()=>B.dispose());let V,j=()=>NA(H).then(()=>{if(V)V.dispose(),V=void 0});X.fn=(K)=>{if(f(),f0&&f0.running){if(!V)V=rG.factory(Q,j);return V.track(K)}return B.track(K)}}return Wz.afterCreateOwner&&Wz.afterCreateOwner(X),X}function KX(J){let z=f0&&f0.running;if((z?J.tState:J.state)===0)return;if((z?J.tState:J.state)===WX)return jq(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<Vq)){if(z&&f0.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 Z=J,X=Y[G+1];while((Z=Z.owner)&&Z!==X)if(f0.disposed.has(Z))return}if((z?J.tState:J.state)===EJ)HG(J);else if((z?J.tState:J.state)===WX){let Z=a1;a1=null,bJ(()=>jq(J,Y[0]),!1),a1=Z}}}function bJ(J,z){if(a1)return J();let Y=!1;if(!z)a1=[];if(WJ)Y=!0;else WJ=[];Vq++;try{let G=J();return bA(Y),G}catch(G){if(!Y)WJ=null;a1=null,UX(G)}}function bA(J){if(a1){if(oG&&f0&&f0.running)SA(a1);else gV(a1);a1=null}if(J)return;let z;if(f0){if(!f0.promises.size&&!f0.queue.size){let{sources:G,disposed:Z}=f0;WJ.push.apply(WJ,f0.effects),z=f0.resolve;for(let X of WJ)"tState"in X&&(X.state=X.tState),delete X.tState;f0=null,bJ(()=>{for(let X of Z)bY(X);for(let X of G){if(X.value=X.tValue,X.owned)for(let Q=0,f=X.owned.length;Q<f;Q++)bY(X.owned[Q]);if(X.tOwned)X.owned=X.tOwned;delete X.tValue,delete X.tOwned,X.tState=0}UV(!1)},!1)}else if(f0.running){f0.running=!1,f0.effects.push.apply(f0.effects,WJ),WJ=null,UV(!0);return}}let Y=WJ;if(WJ=null,Y.length)bJ(()=>OV(Y),!1);else Wz.afterUpdate&&Wz.afterUpdate();if(z)z()}function gV(J){for(let z=0;z<J.length;z++)KX(J[z])}function SA(J){for(let z=0;z<J.length;z++){let Y=J[z],G=f0.queue;if(!G.has(Y))G.add(Y),oG(()=>{G.delete(Y),bJ(()=>{f0.running=!0,KX(Y)},!1),f0&&(f0.running=!1)})}}function IA(J){let z,Y=0;for(z=0;z<J.length;z++){let G=J[z];if(!G.user)KX(G);else J[Y++]=G}if(S1.context){if(S1.count){S1.effects||(S1.effects=[]),S1.effects.push(...J.slice(0,Y));return}E8()}if(S1.effects&&(S1.done||!S1.count))J=[...S1.effects,...J],Y+=S1.effects.length,delete S1.effects;for(z=0;z<Y;z++)KX(J[z])}function jq(J,z){let Y=f0&&f0.running;if(Y)J.tState=0;else J.state=0;for(let G=0;G<J.sources.length;G+=1){let Z=J.sources[G];if(Z.sources){let X=Y?Z.tState:Z.state;if(X===EJ){if(Z!==z&&(!Z.updatedAt||Z.updatedAt<Vq))KX(Z)}else if(X===WX)jq(Z,z)}}}function CV(J){let z=f0&&f0.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=WX;else G.state=WX;if(G.pure)a1.push(G);else WJ.push(G);G.observers&&CV(G)}}}function bY(J){let z;if(J.sources)while(J.sources.length){let Y=J.sources.pop(),G=J.sourceSlots.pop(),Z=Y.observers;if(Z&&Z.length){let X=Z.pop(),Q=Y.observerSlots.pop();if(G<Z.length)X.sourceSlots[Q]=G,Z[G]=X,Y.observerSlots[G]=Q}}if(J.tOwned){for(z=J.tOwned.length-1;z>=0;z--)bY(J.tOwned[z]);delete J.tOwned}if(f0&&f0.running&&J.pure)NV(J,!0);else if(J.owned){for(z=J.owned.length-1;z>=0;z--)bY(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(f0&&f0.running)J.tState=0;else J.state=0;delete J.sourceMap}function NV(J,z){if(!z)J.tState=0,f0.disposed.add(J);if(J.owned)for(let Y=0;Y<J.owned.length;Y++)NV(J.owned[Y])}function Hq(J){if(J instanceof Error)return J;return Error(typeof J==="string"?J:"Unknown error",{cause:J})}function MV(J,z,Y){try{for(let G of z)G(J)}catch(G){UX(G,Y&&Y.owner||null)}}function UX(J,z=i0){let Y=jX&&z&&z.context&&z.context[jX],G=Hq(J);if(!Y)throw G;if(WJ)WJ.push({fn(){MV(G,Y,z)},state:EJ});else MV(G,Y,z)}function w8(J){if(typeof J==="function"&&!J.length)return w8(J());if(Array.isArray(J)){let z=[];for(let Y=0;Y<J.length;Y++){let G=w8(J[Y]);if(Array.isArray(G))if(G.length<32768)z.push.apply(z,G);else for(let Z=0;Z<G.length;Z++)z.push(G[Z]);else z.push(G)}return z}return J}function TA(J,z){return function(G){let Z;return Iz(()=>Z=_1(()=>{return i0.context={...i0.context,[J]:G.value},kA(()=>G.children)}),void 0,z),Z}}function FV(J){for(let z=0;z<J.length;z++)J[z]()}function xA(J,z,Y={}){let G=[],Z=[],X=[],Q=0,f=z.length>1?[]:null;return k1(()=>FV(X)),()=>{let H=J()||[],B=H.length,V,j;return H[Wq],_1(()=>{let L,A,O,g,x,_,S,N,M;if(B===0){if(Q!==0)FV(X),X=[],G=[],Z=[],Q=0,f&&(f=[]);if(Y.fallback)G=[yA],Z[0]=fG((I)=>{return X[0]=I,Y.fallback()}),Q=1}else if(Q===0){Z=Array(B);for(j=0;j<B;j++)G[j]=H[j],Z[j]=fG(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]=Z[S],g[N]=X[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]=Z[V],g[j]=X[V],f&&(x[j]=f[V]),j=A[j],L.set(M,j);else X[V]();for(j=_;j<B;j++)if(j in O){if(Z[j]=O[j],X[j]=g[j],f)f[j]=x[j],f[j](j)}else Z[j]=fG(K);Z=Z.slice(0,Q=B),G=H.slice(0)}return Z});function K(L){if(X[j]=L,f){let[A,O]=a(j,{name:"index"});return f[j]=O,z(H[j],A)}return z(H[j])}}}function kV(J,z){if(uA){if(S1.context){let Y=S1.context;E8(DA());let G=DV(J,z||{});return E8(Y),G}}return DV(J,z||{})}function qq(){return!0}function u8(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 Lq(...J){let z=!1;for(let Q=0;Q<J.length;Q++){let f=J[Q];z=z||!!f&&jz in f,J[Q]=typeof f==="function"?(z=!0,K0(f)):f}if(FA&&z)return new Proxy({get(Q){for(let f=J.length-1;f>=0;f--){let H=u8(J[f])[Q];if(H!==void 0)return H}},has(Q){for(let f=J.length-1;f>=0;f--)if(Q in u8(J[f]))return!0;return!1},keys(){let Q=[];for(let f=0;f<J.length;f++)Q.push(...Object.keys(u8(J[f])));return[...new Set(Q)]}},EA);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: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 Z={},X=Object.keys(G);for(let Q=X.length-1;Q>=0;Q--){let f=X[Q],H=G[f];if(H&&H.get)Object.defineProperty(Z,f,H);else Z[f]=H?H.value:void 0}return Z}function X1(J){let z="fallback"in J&&{fallback:()=>J.fallback};return K0(xA(()=>J.each,J.children,z||void 0),void 0,{name:"value"})}function Z0(J){let z=J.keyed,Y=K0(()=>J.when,void 0,{name:"condition value"}),G=z?Y:K0(Y,void 0,{equals:(Z,X)=>!Z===!X,name:"condition"});return K0(()=>{let Z=G();if(Z){let X=J.children;return typeof X==="function"&&X.length>0?_1(()=>X(z?Z:()=>{if(!_1(G))throw PA("Show");return Y()})):X}return J.fallback},void 0,{name:"value"})}function bV(J){let z;if(S1.context&&S1.load)z=S1.load(S1.getContextId());let[Y,G]=a(z,{name:"errored"});return fq||(fq=new Set),fq.add(G),k1(()=>fq.delete(G)),K0(()=>{let Z;if(Z=Y()){let X=J.fallback;if(typeof X!=="function"||X.length==0)console.error(Z);return typeof X==="function"&&X.length?_1(()=>X(Z,()=>G())):X}return gA(()=>J.children,G)},void 0,{name:"value"})}var S1,LA=!0,MA=(J,z)=>J===z,jz,FA,Wq,OA,Bq,jX=null,OV,EJ=1,WX=2,AA,x8,i0=null,f0=null,oG=null,rG=null,U1=null,a1=null,WJ=null,Vq=0,Wz,rP,UV,VX,yA,uA=!1,EA,PA=(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.`,fq,SV;var j1=k(()=>{S1={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return VV(this.context.count)},getNextContextId(){return VV(this.context.count++)}};jz=Symbol("solid-proxy"),FA=typeof Proxy==="function",Wq=Symbol("solid-track"),OA=Symbol("solid-dev-component"),Bq={equals:MA},OV=gV,AA={},x8={},Wz={afterUpdate:null,afterCreateOwner:null,afterCreateSignal:null,afterRegisterGraph:null};[rP,UV]=a(!1);yA=Symbol("fallback");EA={get(J,z,Y){if(z===jz)return Y;return J.get(z)},has(J,z){if(z===jz)return!0;return J.has(z)},set:qq,deleteProperty:qq,getOwnPropertyDescriptor(J,z){return{configurable:!0,enumerable:!0,get(){return J.get(z)},set:qq,deleteProperty:qq}},ownKeys(J){return J.keys()}};SV={hooks:Wz,writeSignal:P8,registerGraph:AV};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 hA}from"child_process";function h8(J,z,Y,G){if(Y)return J+G.slowRetryMs;return z+Math.max(G.minIntervalMs,(z-J)*5)}function v8(J,z){return!J.inFlight&&z>=J.nextAllowedAt}function IV(J,z,Y=Math.random){let G=Math.max(0,Math.min(1,z)),Z=(Y()*2-1)*J*G;return Math.max(0,J+Z)}function TV(J,z,Y){if(z<=0)return Math.min(J,Y);return Math.min(J*2**z,Y)}function tG(J,z,Y,G){let Z=Date.now();if(!v8(J,Z))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=h8(Z,Date.now(),B,z),J.inFlight=!1,H&&!B)G(f)})(),!0}function zY(J,z,Y){return new Promise((G)=>{let Z="",X=!1,Q=(H)=>{if(X)return;X=!0,G({status:H,stdout:Z})},f=hA(J,z.slice(),{cwd:Y.cwd,stdio:["ignore","pipe","ignore"],env:Y.env,signal:Y.signal,killSignal:"SIGKILL"});f.stdout?.on("data",(H)=>{Z+=String(H)}),f.on("error",()=>Q(null)),f.on("close",(H)=>Q(H))})}var eG=()=>{};function vA(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 mA(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 cA(J){if(!J||J.length===0)return"none";let z=!1,Y=!1;for(let G of J){let Z=mA(G);if(Z==="failing")return"failing";if(Z==="pending")z=!0;else if(Z==="passing")Y=!0}if(z)return"pending";if(Y)return"passing";return"unknown"}function xV(J,z){if(!J||typeof J.number!=="number")return null;return{provider:"github",lifecycle:vA(J.state,J.reviewDecision),checkState:cA(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 Fq(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 Mq(J,z){return z.some((Y)=>J.includes(Y))}function m8(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(Mq(z,lA))return{kind:"empty"};if(Mq(z,dA))return{kind:"error",error:"no-remote"};if(Mq(z,nA))return{kind:"error",error:"auth"};if(Mq(z,iA))return{kind:"error",error:"network"};return{kind:"empty"}}function DX(J,z,Y,G,Z=Math.random){let X=(f)=>Y+IV(f,G.jitterRatio,Z);if(J.kind==="pr")return{nextAllowedAt:X(J.settled?G.settledMs:G.tickMs),failures:0};if(J.kind==="empty")return{nextAllowedAt:X(G.noPrMs),failures:0};if(J.error==="no-remote")return{nextAllowedAt:X(G.noRemoteMs),failures:0};let Q=z+1;return{nextAllowedAt:X(TV(G.failureBaseMs,Q-1,G.failureCapMs)),failures:Q}}var yV="number,url,title,state,baseRefName,headRefName,reviewDecision,mergeable,statusCheckRollup",dA,nA,iA,lA;var c8=k(()=>{eG();dA=["none of the git remotes","no git remote","to use github cli in a github repository","not a github repository"],nA=["gh auth login","authentication required","not logged in","http 401","bad credentials","requires authentication"],iA=["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"],lA=["no pull requests found","no open pull requests","no pull request found"]});var d8,n8,i8,l8="DIRTY_WORKTREE",$8,a8;var _8=k(()=>{d8=class d8 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"}};n8=class n8 extends Error{constructor(J){super(`task not found: ${J}`);this.name="TaskNotFoundError"}};i8=class i8 extends Error{constructor(){super("cannot delete a main task; remove the repo from saved repos instead");this.name="CannotDeleteMainTaskError"}};$8=class $8 extends Error{taskId;constructor(J){super(`${l8}: task ${J} worktree has uncommitted or untracked changes`);this.taskId=J;this.name="DirtyWorktreeError"}};a8=class a8 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 uV;var EV=k(()=>{uV=["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 wV(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 JZ(J){let z=rz(J);if(!z)return new kQ;return new mG(wV(z))}function YY(J){for(let z of Object.values(pH()))if(J===z.basePath||J.startsWith(`${z.basePath}/`))return new mG(wV(z));return new kQ}function PV(J){return J&&l1(J)?J:void 0}function zZ(J){let z=YY(J);return z.isRemote||z.existsSync(J)}function w1(J){return YY(J).isRemote?bz():J}var Vz=k(()=>{p1();F1();mH();nH()});import{createHash as $A}from"crypto";import vV from"fs";import PJ from"path";function mV(J){if(!PJ.isAbsolute(J))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${J}`);return PJ.join(qJ(),aA,sA(J))}function cV(J){if(!PJ.isAbsolute(J))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${J}`);return[mV(J),...rA.map((z)=>PJ.join(J,z))]}function dV(J,z){if(!z||/[/\\\0]/.test(z))throw Error(`worktreePathFor: invalid slug: ${JSON.stringify(z)}`);return PJ.join(mV(J),z)}async function nV(J){if(l1(J)){let Y=rz(J)?.basePath;if(!Y)return[];return JZ(J).readdir(lV(Y))}let z=new Set;for(let Y of cV(J))try{for(let G of vV.readdirSync(Y,{withFileTypes:!0}))if(G.isDirectory())z.add(G.name)}catch{}return[...z]}function p8(J,z){if(!PJ.isAbsolute(J)||!PJ.isAbsolute(z))return null;let Y=hV(z);for(let G of cV(J)){let Z=hV(G),X=PJ.relative(Z,Y);if(X!==""&&!X.startsWith("..")&&!PJ.isAbsolute(X))return G}return null}function iV(J,z){return p8(J,z)!==null}function lV(J){return`${oA(J)}/.kobe/worktrees`}function $V(J,z){if(!z||/[/\\\0]/.test(z))throw Error(`remoteWorktreePathFor: invalid slug: ${JSON.stringify(z)}`);return`${lV(J)}/${z}`}function oA(J){return J.length>1&&J.endsWith("/")?J.replace(/\/+$/,""):J}function hV(J){try{return vV.realpathSync(J)}catch{return PJ.resolve(J)}}function sA(J){let Y=(PJ.basename(J)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",G=$A("sha1").update(PJ.resolve(J)).digest("hex").slice(0,12);return`${Y}-${G}`}var aA="worktrees",_A=".kobe/worktrees",pA=".claude/worktrees",rA;var r8=k(()=>{p1();Vz();F1();rA=[_A,pA]});class o8{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??uV,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((Z)=>!z.has(Z));if(Y.length>0){let Z=Y[Math.floor(this.random()*Y.length)];return this.addPending(J,Z),Z}let G=this.pool[Math.floor(this.random()*this.pool.length)];for(let Z=2;;Z++){let X=`${G}-v${Z}`;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 nV(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 aV=k(()=>{EV();r8()});var pV={};f1(pV,{PLACEHOLDER_TASK_TITLE:()=>yz,Orchestrator:()=>Oq});import{realpathSync as tA}from"fs";import{basename as eA,resolve as JR}from"path";function _V(J){return rz(J)?.basePath??J}class Oq{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 o8((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]=a(this.store.list());this.tasksAcc=z,this.setTasks=(X)=>Y(()=>X);let[G,Z]=a(null);this.activeTaskAcc=G,this.setActiveTaskSig=(X)=>Z(()=>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??yz).trim()||yz,Y=await this.store.create({repo:J.repo,title:z,branch:J.branch??"",worktreePath:"",status:"backlog",kind:"task",vendor:J.vendor??$1,...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}=LX(J),G=this.store.list().find((Q)=>Q.kind==="main"&&LX(Q.repo).key===Y);if(G)return G;let Z=this.mainTaskLocks.get(Y);if(Z)return Z;let X=(async()=>{let Q=xJ(g1("lastSelectedVendor"),uJ());return await this.store.create({repo:z,title:zR(z),branch:"",worktreePath:_V(z),status:"backlog",kind:"main",vendor:Q})})();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 _V(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||Xq(J.title,J.id),G=this.pendingBaseRefs.get(J.id),Z;try{Z=await this.worktrees.createForTask({repo:J.repo,slug:z,branch:Y,baseRef:G})}catch(X){throw this.slugs.cancel(J.repo,z),X}try{await this.store.update(J.id,{worktreePath:Z.path,branch:Y})}catch(X){throw await this.rollbackWorktree(Z.path),this.slugs.cancel(J.repo,z),X}return this.slugs.commit(J.repo,z),this.pendingBaseRefs.delete(J.id),Z.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!==Xq(yz,J.id))return;let Y=Xq(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((Z)=>(Z.kind??"task")!=="main"&&Z.archived===Y.archived&&(Z.pinned??!1)===(Y.pinned??!1)).map((Z)=>String(Z.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 d8(Y.status,z,Y.id);await this.store.update(Y.id,{status:z})}async setPRStatus(J,z){let Y=this.requireTask(J);if(Fq(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 i8;let G=z?.force===!0;if(Y.worktreePath){if(!G){let Z=!1;try{Z=await this.worktrees.isDirty(Y.worktreePath)}catch{}if(Z)throw new $8(Y.id)}try{await this.worktrees.remove(Y.worktreePath,{force:G})}catch(Z){throw new a8(Y.id,Z)}}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=LX(J).key;for(let Y of gJ())if(LX(Y).key===z)aH(Y);for(let Y of this.store.list()){if(Y.kind!=="main")continue;if(LX(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)=>YZ(G.worktreePath)));return z.filter((G)=>!Y.has(YZ(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=YZ(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&&YZ(f.worktreePath)===z);if(Y){if(J.ifExists==="return")return Y;throw Error(`adoptWorktree: ${J.worktreePath} is already adopted as a task`)}let Z=(await this.worktrees.listAll(J.repo)).find((f)=>YZ(f.path)===z);if(!Z)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()||Z.branch,Q=(J.title??eA(Z.path)).trim()||yz;return this.store.create({repo:J.repo,title:Q,branch:X,worktreePath:Z.path,status:"backlog",kind:"task",vendor:J.vendor??$1})}pendingBaseRefs=new Map;adoptLocks=new Map;requireTask(J){let z=this.store.get(J);if(!z)throw new n8(String(J));return z}}function zR(J){let z=J.split(/[/\\]/).filter(Boolean);return z.length>0?z[z.length-1]??J:J}function LX(J){let z=_z(J);return{repo:z,key:l1(z)?z:YZ(z)}}function YZ(J){try{return tA(J)}catch{return JR(J)}}var yz="(new task)";var MX=k(()=>{j1();c8();F1();rJ();i1();_8();aV()});function GZ(J,z,Y){if(!z)return J;let G=JZ(z);return G.ensureReady(),G.wrapCommand(J,{tty:!0,cwd:Y})}function JJ(){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 FX="@kobe_remote";var BG=k(()=>{Vz();Bz()});function Aq(){return az(jG,!1)}var jG="experimental.autoStatus";var OX=k(()=>{tY()});function s8(){return az(WG,!1)}var WG="experimental.dispatcher";var Rq=k(()=>{tY()});import{randomUUID as YR}from"crypto";function Kz(J){return`engineCommand.${J}`}function Uz(J){return`engineName.${J}`}function VG(J){return g1(Uz(J))?.trim()||t8[J]||J}function AX(J){return t1(J??"claude").defaultCommand}function GR(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 oJ(J,z){let Y=J??"claude",G=g1(Kz(Y))?.trim(),Z=(()=>{if(G){let X=GR(G);if(X.length>0)return X}return AX(Y)})();return ZR(Z,Y,z)}function ZR(J,z,Y){let G=Y?.trim();if(!G)return J;let Z=z??"claude";if(!t1(Z).effortLevels?.includes(G))return J;if(Z==="codex")return[...J,"-c",`model_reasoning_effort=${G}`];return J}function ZZ(J,z){if((z??"claude")!=="claude")return{argv:J,sessionId:null};if(J.some((G)=>XR.has(G)))return{argv:J,sessionId:null};let Y=YR();return{argv:[...J,"--session-id",Y],sessionId:Y}}function KG(){let J=(z)=>/^[A-Za-z0-9_/.:=-]+$/.test(z)?z:`'${z.replace(/'/g,"'\\''")}'`;try{return[...b1(),"api"].map(J).join(" ")}catch{return"kobe api"}}function QR(J,z=KG()){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(`
|
|
36
|
-
`)}function
|
|
37
|
-
`)}function
|
|
38
|
-
|
|
39
|
-
`):null}function
|
|
40
|
-
`)}function Cq(J,z,Y,G=s8){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",HR(Y)]}var t8,XR;var sJ=k(()=>{JY();kY();OX();Rq();F1();i1();t8=Object.fromEntries(_Y.map((J)=>[J,t1(J).displayName]));XR=new Set(["--session-id","--resume","-r","--continue","-c","--from-pr"])});import{spawnSync as BR}from"child_process";function rV(J,z){if(J==="darwin")return"pbcopy";if(J==="linux"){for(let Y of jR)if(z(Y.binary))return Y.command;return null}return null}function sV(J){let z=[["set-option","-g","set-clipboard","on"]];if(J)for(let Y of WR)for(let G of VR)z.push(["bind-key","-T",Y,G,"send-keys","-X","copy-pipe-and-cancel",J]);return z}var jR,oV=(J)=>{try{let z=process.platform==="win32"?"where":"which";return BR(z,[J],{encoding:"utf8"}).status===0}catch{return!1}},WR,VR;var tV=k(()=>{jR=[{binary:"wl-copy",command:"wl-copy"},{binary:"xclip",command:"xclip -selection clipboard -in"},{binary:"xsel",command:"xsel --clipboard --input"}];WR=["copy-mode","copy-mode-vi"],VR=["MouseDragEnd1Pane","y","Enter"]});import{existsSync as eV,readFileSync as KR}from"fs";function J5(){UG=null}function UR(){let J=RW();if(eV(J))return{canonical:J,found:J};let z=J.replace(/\.yaml$/,".yml");if(eV(z))return{canonical:J,found:z};return{canonical:J,found:null}}function Nq(){if(UG)return UG;let{canonical:J,found:z}=UR();if(!z)return UG={path:J,exists:!1,doc:null,warnings:[]},UG;let Y=[],G=null;try{let Z=KR(z,"utf8");G=Bun.YAML.parse(Z)}catch(Z){let X=Z instanceof Error?Z.message:String(Z);Y.push(`could not read/parse ${z}: ${X}`)}return UG={path:J,exists:!0,doc:G,warnings:Y},UG}var UG=null;var e8=k(()=>{p1()});function XZ(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 RR(J,z){let Y=J.trim().toLowerCase();if(!Y)return{error:"empty chord"};let G=Y.split("+"),Z=G.pop()??"";if(Z===""&&G.length>0){if(Z="+",G[G.length-1]==="")G.pop()}if(!Z)return{error:`"${J}": no key after the modifiers`};let X=new Set;for(let H of G){let B=MR[H];if(!B)return{error:`"${J}": unknown modifier "${H}" (use ctrl / cmd / alt / shift)`};X.add(B)}if(Z=FR[Z]??Z,X.has("shift")&&Z.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=AR.filter((H)=>X.has(H)).join("+"),f=Q?`${Q}+${Z}`:Z;if(Z.length>1&&!OR.has(Z))return{chord:f,warning:`"${J}": unrecognized key name "${Z}" \u2014 the chord may never fire`};return{chord:f}}function kq(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function gR(J){if(J==="darwin")return["darwin","macos","mac"];if(J==="win32")return["win32","windows"];return[J]}function CR(J){if(!kq(J))return null;let z=J.bindings;if(kq(z))return z;return J}function bq(J,z,Y){let G=[];if(J===null||J===void 0)return{entries:[],warnings:G};if(!kq(J))return{entries:[],warnings:["config root must be a YAML mapping (e.g. a top-level `bindings:` key)"]};let Z=new Map,X=[];if(J.bindings!==void 0)if(kq(J.bindings))X.push(J.bindings);else G.push("`bindings:` must be a mapping of id \u2192 chord(s)");for(let Q of gR(z)){let f=J[Q];if(f===void 0)continue;let H=CR(f);if(H)X.push(H);else G.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){Z.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=RR(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}Z.set(f,V)}return{entries:Array.from(Z,([Q,f])=>({id:Q,keys:f})),warnings:G}}function NR(J,z){return J===z||J==="global"||z==="global"}function z5(J,z){let Y=[],G=[];for(let Z of z){let X=J.find((j)=>j.id===Z.id);if(!X){Y.push(`${Z.id}: unknown binding id (press F1 in kobe for the full list)`);continue}let Q=JB[Z.id];if(Q){Y.push(`${Z.id}: not customizable \u2014 ${Q}`);continue}if(X.keys.length===0){Y.push(`${Z.id}: not customizable \u2014 the key is handled outside the keymap (doc-only row)`);continue}let f=DR[Z.id];if(f&&Z.keys.length>0){let j=f.validateCount(Z.keys.length);if(j){Y.push(`${Z.id}: ${j} \u2014 keeping the default`);continue}}let H=Z.keys.filter((j)=>{if(j.length===1&&LR.has(X.scope))return Y.push(`${Z.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&&Z.keys.length>0){Y.push(`${Z.id}: no chords survived validation \u2014 keeping the default`);continue}if(f&&H.length!==Z.keys.length){Y.push(`${Z.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("/");G.push({id:Z.id,keys:H,defaultKeys:B})}for(let Z of G)for(let X of Z.keys){let Q=J.find((f)=>f.id===Z.id);if(!Q)continue;for(let f of J){if(f.id===Z.id)continue;if(!f.keys.includes(X))continue;if(!NR(Q.scope,f.scope))continue;Y.push(`${Z.id}: "${X}" also fires ${f.id} (${f.scope} scope) \u2014 last registration wins; consider a different chord`)}}return{applied:G,warnings:Y}}var JB,DR,LR,MR,FR,OR,AR;var Sq=k(()=>{JB={"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)"};DR={"sidebar.nav":XZ("down","up"),"files.nav":XZ("down","up"),"sidebar.search.nav":XZ("down","up"),"files.hierarchy":XZ("collapse","expand"),"sidebar.view":XZ("previous view","next view"),"files.tab":XZ("previous tab","next tab")},LR=new Set(["global","workspace","terminal"]),MR={ctrl:"ctrl",control:"ctrl",ctl:"ctrl",cmd:"cmd",command:"cmd",meta:"cmd",super:"cmd",win:"cmd",alt:"alt",option:"alt",opt:"alt",shift:"shift"},FR={esc:"escape",spacebar:"space",pgup:"pageup",pgdn:"pagedown",pgdown:"pagedown"},OR=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}`)]),AR=["ctrl","cmd","alt","shift"]});function QZ(J){return J in Y5}function MG(J,z){let Y=J.split("+"),G=Y.pop()??"";if(G===""&&Y.length>0){if(G="+",Y[Y.length-1]==="")Y.pop()}let Z=new Set(Y);if(Z.has("cmd"))return{error:`"${J}": the Command key never reaches tmux \u2014 use ctrl/alt/shift`};let X;if(G.length===1)X=Z.has("shift")?G.toUpperCase():G;else{let H=bR[G];if(!H)return{error:`"${J}": tmux can't bind the key "${G}"`};X=H}let Q=/^f\d+$/.test(G);if(Z.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(Z.has("ctrl"))f+="C-";if(Z.has("alt"))f+="M-";if(Z.has("shift"))f+="S-";return{key:f+X}}function Z5(){let J={};for(let[Y,G]of Object.entries(LG)){let Z=MG(G,{allowBare:QZ(Y)});if("error"in Z)throw Error(`default tmux chord for ${Y} failed to translate: ${Z.error}`);J[Y]={chord:G,key:Z.key}}let z=SY.map((Y)=>{let G=MG(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 zB(J){let z=Z5(),Y=new Set;for(let G of J){if(!G.id.startsWith("tmux."))continue;if(G.id===xz){if(G.keys.length===0){z.focus=[null,null,null,null],Y.add(xz);continue}if(G.keys.length!==SY.length){z.warnings.push(`${xz}: 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=MG(B);if("error"in V){z.warnings.push(`${xz}: ${V.error} \u2014 keeping the default`),H=!1;break}f.push({chord:B,key:V.key})}if(!H)continue;z.focus=f,Y.add(xz);continue}if(!(G.id in LG)){z.warnings.push(`${G.id}: unknown tmux binding id`);continue}let Z=G.id;if(G.keys.length===0){z.binds[Z]=null,Y.add(Z);continue}if(G.keys.length>1)z.warnings.push(`${Z}: tmux bindings take ONE chord \u2014 using "${G.keys[0]}", ignoring the rest`);let X=G.keys[0],Q=MG(X,{allowBare:QZ(Z)});if("error"in Q){z.warnings.push(`${Z}: ${Q.error} \u2014 keeping the default`);continue}if(X!==LG[Z])Y.add(Z);z.binds[Z]={chord:X,key:Q.key}}return z.overridden=Y,z}function YB(J){return J.startsWith("tmux.")?{allowShiftCharacter:!0}:{}}function X5(){DG=null}function Iq(){if(DG)return DG;let J=Nq();if(!J.exists||J.doc===null)return DG=Z5(),DG;let z=bq(J.doc,process.platform,{chordOptsFor:YB}),Y=z.warnings.filter((Z)=>Z.startsWith("tmux.")),G=zB(z.entries);G.warnings=[...Y,...G.warnings];for(let Z of G.warnings)console.warn(`[kobe/keybindings] ${Z}`);return DG=G,DG}var kR,Y5,G5,LG,xz="tmux.focus",SY,bR,DG=null;var Tq=k(()=>{e8();Sq();kR={"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"},Y5={"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"},G5=["F6","F7","F8","F9","F10","F11"],LG={...kR,...Y5};SY=["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],bR={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 RX(J,z){let Y=null;for(let Z=0;Z<24;Z++){let X=await qZ(J);if(X){if(!z)return{pane:X,ready:!0};let Q=(await fZ(X)).trim();if(Q.length>0&&Q===Y)return{pane:X,ready:!0};Y=Q}await Q5(250)}return{pane:await qZ(J)||await GB(J),ready:!1}}async function gX(J,z){let Y=`kobe-api-${J.replace(/[^A-Za-z0-9]/g,"")}`;await l0(["set-buffer","-b",Y,"--",z]),await l0(["paste-buffer","-p","-d","-b",Y,"-t",J]),await Q5(SR),await CX(J,"Enter")}async function q5(J,z){let{pane:Y}=await RX(J,!0);if(!Y)return;await gX(Y,z.text)}var Q5=(J)=>new Promise((z)=>setTimeout(z,J)),SR=150;var yq=k(()=>{P1()});function f5(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 HZ;var xq=k(()=>{HZ={$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 BZ;var uq=k(()=>{BZ={$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 jZ;var Eq=k(()=>{jZ={$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 WZ;var wq=k(()=>{WZ={$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 VZ;var Pq=k(()=>{VZ={$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 KZ;var hq=k(()=>{KZ={$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 UZ;var vq=k(()=>{UZ={$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"}}}});var H5;var B5=k(()=>{xq();uq();Eq();wq();Pq();hq();vq();H5={claude:HZ,conductor:BZ,nord:WZ,opencode:VZ,dracula:jZ,tokyonight:UZ,"osaka-jade":KZ}});function PR(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,Z,X]=Y;return`#${G}${G}${Z}${Z}${X}${X}`.toLowerCase()}return`#${Y.slice(0,6)}`.toLowerCase()}function j5(J,z,Y="dark"){let G=J.defs??{};function Z(Q,f){if(typeof Q==="string"){if(Q==="transparent"||Q==="none")return null;if(Q.startsWith("#"))return PR(Q);if(f.includes(Q))return null;let B=G[Q]??J.theme[Q];if(B===void 0)return null;return Z(B,[...f,Q])}if(!Q||typeof Q!=="object")return null;let H=Q[Y];return typeof H==="string"?Z(H,f):null}let X=J.theme[z];if(X===void 0)return null;return Z(X,[z])}function mq(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function cq(J){if(!mq(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(!mq(Y))return{ok:!1,reason:"`theme` must be an object map"};if("defs"in z&&z.defs!==void 0){if(!mq(z.defs))return{ok:!1,reason:"`defs` must be an object map"};for(let[G,Z]of Object.entries(z.defs))if(typeof Z!=="string")return{ok:!1,reason:`defs.${G} must be a string (hex like "#abc" or a ref name)`}}for(let[G,Z]of Object.entries(Y)){if(typeof Z==="string")continue;if(!mq(Z))return{ok:!1,reason:`theme.${G} must be a string or a { dark, light } object (got ${Z===null?"null":Array.isArray(Z)?"array":typeof Z})`};let X=Z;if(typeof X.dark!=="string")return{ok:!1,reason:`theme.${G}.dark must be a string`};if(typeof X.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 ZB=()=>{};import{readFileSync as hR,readdirSync as vR}from"fs";import{join as W5}from"path";function DZ(){return W5(qJ(),"themes")}function NX(){let J=DZ(),z;try{z=vR(J)}catch{return[]}let Y=[];for(let G of z){if(!G.endsWith(".json"))continue;let Z=W5(J,G),X;try{let H=hR(Z,"utf8");X=JSON.parse(H)}catch(H){let B=H instanceof Error?H.message:String(H);console.warn(`[kobe] skipping user theme ${Z}: invalid JSON \u2014 ${B}`);continue}let Q=cq(X);if(!Q.ok){console.warn(`[kobe] skipping user theme ${Z}: ${Q.reason}`);continue}let f=G.slice(0,-5);Y.push({name:f,theme:Q.theme})}return Y}var dq=k(()=>{p1();ZB()});import{readFileSync as mR}from"fs";function dR(){try{let J=JSON.parse(mR(lJ(),"utf8")),z=typeof J.activeTheme==="string"&&J.activeTheme?J.activeTheme:"claude",Y=typeof J.focusAccent==="string"&&cR.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 nR(J){return NX().find((Y)=>Y.name===J)?.theme??H5[J]??null}function Dz(J,...z){for(let Y of z){let G=j5(J,Y);if(G)return G}return null}function V5(J,z){let Y=Dz(J,"text"),G=Dz(J,"background"),Z=Dz(J,"textMuted","text"),X=Dz(J,"backgroundPanel","background"),Q=Dz(J,"backgroundElement","backgroundPanel","background"),f=Dz(J,"backgroundMenu","backgroundElement","backgroundPanel","background"),H=Dz(J,"selectedListItemText","background"),B=Dz(J,z,"primary","borderActive","border","text");return{border:Dz(J,"border","text"),activeBorder:B,statusBg:X,statusFg:Z,statusMutedFg:Z,windowFg:Z,currentWindowBg:Q,currentWindowFg:B,activityFg:Dz(J,"info","primary","text"),bellFg:Dz(J,"warning","error","primary","text"),messageBg:f,messageFg:Y,messageCommandFg:B,modeBg:B,modeFg:H??G}}function tJ(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 U5(J){let z=tJ({bg:J.statusBg,fg:J.statusFg}),Y=tJ({bg:J.statusBg,fg:J.statusMutedFg}),G=tJ({bg:J.statusBg,fg:J.windowFg});return[{key:"border",option:"pane-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:tJ({fg:J.border})},{key:"active",option:"pane-active-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:tJ({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:tJ({bg:J.currentWindowBg,fg:J.currentWindowFg,attrs:["bold"]})},{key:"activity-window",option:"window-status-activity-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:tJ({bg:J.statusBg,fg:J.activityFg})},{key:"bell-window",option:"window-status-bell-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:tJ({bg:J.statusBg,fg:J.bellFg,attrs:["bold"]})},{key:"last-window",option:"window-status-last-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:tJ({bg:J.statusBg,fg:J.statusFg})},{key:"message",option:"message-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:tJ({bg:J.messageBg,fg:J.messageFg})},{key:"message-command",option:"message-command-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:tJ({bg:J.messageBg,fg:J.messageCommandFg,attrs:["bold"]})},{key:"mode",option:"mode-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:tJ({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 iR(J){let z=new Set(J.marker.split(",").map((X)=>X.trim()).filter(Boolean)),Y=[],G=[];for(let X of U5(J.hexes))if(X.value){if((J.current[X.key]??"")!==X.value)Y.push(["set-option",X.setFlag,X.option,X.value]);G.push(X.key)}else if(z.has(X.key))Y.push(["set-option",X.unsetFlag,X.option]);let Z=G.join(",");if(Z!==J.marker)Y.push(Z?["set-option","-g",XB,Z]:["set-option","-gu",XB]);return Y}async function K5(J){let{code:z,stdout:Y}=await $0(J);return z===0?Y.trim():""}async function FG(){try{let J=dR(),z=J.enabled?nR(J.themeName):null,Y=z?V5(z,J.focusAccentSlot):V5({theme:{}},J.focusAccentSlot),G=U5(Y),[Z,...X]=await Promise.all([K5(["show-options","-gqv",XB]),...G.map((H)=>K5(["show-options",H.showFlag,H.option]))]),Q=Object.fromEntries(G.map((H,B)=>[H.key,X[B]??""])),f=iR({marker:Z,current:Q,hexes:Y});if(f.length>0)await d1(f)}catch{}}var XB="@kobe_border_theme",cR;var nq=k(()=>{p1();P1();B5();dq();cR=["primary","success","info"]});function D5(){return az(iq,!0)}function lq(){return az(L5,!1)}function M5(J){EW(L5,J)}var iq="zen.keepTasks",L5="zen.active";var QB=k(()=>{tY()});var $q={};f1($q,{recordGen:()=>IY,isLatestGen:()=>g5,genAgeMs:()=>oR,coalesceLayoutWork:()=>sR,RESIZE_GUARD_MS:()=>rR,LAYOUT_COALESCE_MS:()=>A5});import{createHash as lR,randomUUID as $R}from"crypto";import{mkdirSync as aR,readFileSync as F5,renameSync as _R,writeFileSync as pR}from"fs";import{join as O5}from"path";function R5(){return O5(qJ(),"layout-coord")}function qB(J,z){let Y=lR("sha1").update(J).digest("hex").slice(0,16);return O5(R5(),`${Y}.${z}`)}function IY(J,z){let Y=$R();try{aR(R5(),{recursive:!0});let G=qB(J,z),Z=`${G}.${Y}.tmp`;pR(Z,`${Date.now()}
|
|
41
|
-
${Y}`),
|
|
42
|
-
`)[1]?.trim()===Y}catch{return!0}}function
|
|
43
|
-
`)[0]??"",10);return Number.isFinite(G)?Y-G:Number.POSITIVE_INFINITY}catch{return Number.POSITIVE_INFINITY}}async function
|
|
44
|
-
`)){let G=Y.trim();if(!G)continue;let[Z,X,Q,f,H]=G.split("\t");if(!Z||!X||!Q)continue;let B=Number.parseInt(H?.trim()??"",10);z.push({windowId:Z.trim(),paneId:X.trim(),role:Q.trim(),version:f?.trim()??"",...Number.isFinite(B)?{paneWidth:B}:{}})}return z}function
|
|
45
|
-
`).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 Z=Number.parseInt(G[0][3]?.trim()??"",10),X=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"
|
|
46
|
-
`).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
|
|
47
|
-
`)){let G=Y.trim();if(!G)continue;let[Z,X,Q,f,H,B,V]=G.split("\t");if(!Z)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:Z.trim(),role:X?.trim()??"",active:Q?.trim()==="1",paneWidth:Number.isFinite(j)?j:0,paneHeight:Number.isFinite(K)?K:0,windowWidth:Number.isFinite(L)?L:0,windowHeight:Number.isFinite(A)?A:0})}return z}function
|
|
48
|
-
`)){let[Z,X]=G.split("\t");if(Z?.trim()==="1"&&X?.trim())return X.trim()}return""}async function GY(J,z){let{code:Y,stdout:G}=await $0(["show-options","-wqv","-t",J,z]);return Y===0?G.trim():""}async function
|
|
49
|
-
`).map((G)=>Number.parseInt(G.trim(),10)).filter((G)=>Number.isFinite(G)))}async function
|
|
50
|
-
`).some((X)=>{let Q=X.trim();return Q===fz||Q===_J}))await l0(["kill-session","-t",`=${z}`])}async function
|
|
51
|
-
`).map((G)=>G.trim()).filter((G)=>G.length>0)}async function
|
|
52
|
-
`).filter((G)=>G.trim().length>0).length}async function
|
|
53
|
-
`).map((f)=>f.trim()).filter(Boolean).map((f)=>f.split("=",2)));if(await d1([...Q.tasks?[["set-option","-p","-t",Q.tasks,"@kobe_role",_J]]:[],...Q.tasks?[["set-option","-p","-t",Q.tasks,Lz,p0]]:[],...Q.ops?[["set-option","-p","-t",Q.ops,"@kobe_role",qz]]:[],...Q.ops?[["set-option","-p","-t",Q.ops,Lz,p0]]:[],...Q.shell?[["set-option","-p","-t",Q.shell,"@kobe_role",fz]]:[]]),Q.ops){let f=await
|
|
54
|
-
`)){let[G,Z,X,Q,f]=Y.split("\t"),H=xY(X?.trim()),B=xY(Q?.trim());if(!G?.trim()||!Z?.trim()||!H||!B)continue;z.push({name:G.trim(),session:Z.trim(),width:H,height:B,flags:f?.trim()??""})}return z}function
|
|
55
|
-
`)){let[Q,f,H,B,V]=X.split("\t");if(!Q?.trim())continue;if(Z.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:Z.size}}async function
|
|
56
|
-
`)){let[f,H]=Q.split("\t");if(f?.trim()&&H?.trim()===z)return f.trim()}return""}async function
|
|
57
|
-
`).filter((G)=>G.trim().length>0).length}async function ZY(J,z,Y){await l0(["set-option","-t",J,z,Y])}async function gG(J,z){let{code:Y,stdout:G}=await $0(["show-options","-v","-t",J,z]);return Y===0?G.trim():""}async function IJ(J,z){let Y=Object.fromEntries(z.map((X)=>[X,void 0])),{code:G,stdout:Z}=await
|
|
58
|
-
`)){let Q=X.indexOf(" ");if(Q<=0)continue;let f=X.slice(0,Q);if(f in Y)Y[f]=X.slice(Q+1).trim()}return Y}async function
|
|
59
|
-
`)){let X=Z.indexOf(" ");if(X<=0)continue;let Q=Z.slice(0,X);if(Q in z)z[Q]=Z.slice(X+1).trim()}return z}async function
|
|
60
|
-
`)){let[f,H]=Q.split("\t");if(!f)continue;if(!X)X=f.trim();if(H?.trim()===z)return f.trim()}return Y?X:""}async function
|
|
61
|
-
`)){let[Q,f,H]=X.split("\t"),B=Number.parseInt((Q??"").trim(),10);if(!Number.isInteger(B))continue;Z.push({index:B,sessionId:H?.trim()??"",autoRename:f?.trim()??""})}return Z}async function
|
|
62
|
-
`}function
|
|
63
|
-
`}function T1(J,z){process.stderr.write(
|
|
64
|
-
`}function hz(J,z){process.stderr.write($g(J,z))}function LK(J=(z)=>process.stderr.write(z)){if(yB||xB)return;yB=(z)=>J(UK("unhandledRejection",z)),xB=(z)=>J(UK("uncaughtException",z)),process.on("unhandledRejection",yB),process.on("uncaughtException",xB)}var yB,xB;async function ag(J,z=pG){let Y=[];for(let G of J.listTasks()){if(G.archived||G.title!==yz||!G.worktreePath)continue;try{let Z=await z(G.worktreePath,G.vendor??$1);if(!Z)continue;let X=J.getTask(G.id);if(!X||X.title!==yz)continue;await J.setTitle(G.id,Z),Y.push({id:G.id,title:Z})}catch(Z){T1("auto-title-poller",Z)}}return Y}function MK(J,z=uB,Y){if(z<=0)return()=>{};let G=!1,X=setInterval(()=>{if(Y&&!Y())return;if(G)return;G=!0,ag(J).then(()=>VK(J)).catch((Q)=>T1("auto-title-poller",Q)).finally(()=>{G=!1})},z);return X.unref?.(),()=>clearInterval(X)}var uB=4000;var FK=k(()=>{Qq();MX();KK();rJ()});class EB{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 wB{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)}}}async function OK(J,z,Y=Aq){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 AK=k(()=>{OX()});import{createHash as _g}from"crypto";import{homedir as pg}from"os";import EY from"path";function eg(){return EY.join(process.env.KOBE_HOME_DIR??pg(),".kobe")}function JC(J){let Y=(EY.basename(J)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",G=_g("sha1").update(EY.resolve(J)).digest("hex").slice(0,12);return`${Y}-${G}`}function zC(J){if(!EY.isAbsolute(J))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${J}`);return EY.join(eg(),rg,JC(J))}function YC(J){if(!EY.isAbsolute(J))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${J}`);return[zC(J),...tg.map((z)=>EY.join(J,z))]}function uY(J){return J.length>1&&J.endsWith("/")?J.slice(0,-1):J}function RK(J,z){return z===J||z.startsWith(`${J}/`)}function gK(J,z){let Y=uY(z),G,Z=-1;for(let X of J){if(!X.worktreePath)continue;let Q=uY(X.worktreePath);if(RK(Q,Y)&&Q.length>Z)Z=Q.length,G=X.id}return G}function PB(J,z){let Y=uY(z),G,Z=-1;for(let X of J){if(!X.repo)continue;let Q=uY(X.repo);if(RK(Q,Y)&&Q.length>Z)Z=Q.length,G=Q}return G}function CK(J,z){let Y=uY(z),G=new Set,Z=new Set;for(let X of J){if(X.repo)G.add(uY(X.repo));if(X.worktreePath)Z.add(uY(X.worktreePath))}for(let X of G)for(let Q of YC(X).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(Z.has(V))return;return{repo:X,worktreePath:V}}return}var rg="worktrees",og=".kobe/worktrees",sg=".claude/worktrees",tg;var NK=k(()=>{tg=[og,sg]});function mB(J){return{message:J instanceof Error?J.message:String(J),name:J instanceof Error?J.name:void 0}}async function xX(J,z,Y,G){let Z=J.get(z);if(!Z)throw Error(`unknown daemon request: ${z}`);return Z.handle(cB(Y),G)}function uX(){return new Map([{name:"hello",handle(z,Y){let G=typeof z.protocolVersion==="number"?z.protocolVersion:$J,Z=typeof z.minProtocolVersion==="number"?z.minProtocolVersion:G;if(!TQ({localVersion:$J,localMin:FY,remoteVersion:G,remoteMin:Z}))throw Error(`daemon is protocol v${$J} (min v${FY}); this client is v${G} (min v${Z}). Upgrade your kobe.`);return{protocolVersion:$J,minProtocolVersion:FY,kobeVersion:p0,capabilities:[...oH],daemonPid:Y.daemon.pid,clientId:Y.clientId,tasks:Y.orch.listTasks().map(Qz)}}},{name:"daemon.status",handle(z,Y){return{daemonPid:Y.daemon.pid,kobeVersion:p0,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(Qz)}}},{name:"task.get",handle(z,Y){let G=O1(z,"taskId"),Z=Y.orch.getTask(G);if(!Z)throw Error(`task not found: ${G}`);return{task:Qz(Z)}}},{name:"task.create",async handle(z,Y){let G=O1(z,"repo"),Z=await Y.orch.createTask({repo:G,title:Jz(z,"title"),branch:Jz(z,"branch"),baseRef:Jz(z,"baseRef"),vendor:vB(z,"vendor"),modelEffort:Jz(z,"effort")});return{taskId:Z.id,task:Qz(Z)}}},{name:"task.archive",async handle(z,Y){let G=O1(z,"taskId");return await Y.orch.setArchived(G,hB(z,"archived")),{}}},{name:"task.rename",async handle(z,Y){let G=O1(z,"taskId");return await Y.orch.setTitle(G,O1(z,"title")),{}}},{name:"task.setBranch",async handle(z,Y){let G=O1(z,"taskId");return await Y.orch.setBranch(G,O1(z,"branch")),{}}},{name:"task.setVendor",async handle(z,Y){let G=O1(z,"taskId"),Z=vB(z,"vendor");if(!Z)throw Error("task.setVendor: vendor is required");return await Y.orch.setVendor(G,Z),{}}},{name:"task.delete",async handle(z,Y){let G=O1(z,"taskId");return await Y.orch.deleteTask(G,{force:hB(z,"force")}),Y.activity.clearTask(G),{}}},{name:"task.pin",async handle(z,Y){let G=O1(z,"taskId");return await Y.orch.setPinned(G,hB(z,"pinned")),{}}},{name:"task.move",async handle(z,Y){let G=O1(z,"taskId"),Z=O1(z,"direction");if(Z!=="up"&&Z!=="down")throw Error("direction must be up or down");return await Y.orch.moveTask(G,Z==="up"?-1:1),{}}},{name:"task.status",async handle(z,Y){let G=O1(z,"taskId"),Z=O1(z,"status");if(!QV(Z))throw Error("status must be a TaskStatus");let X=Z==="done"?Y.orch.getTask(G):void 0,Q=X?.status;if(await Y.orch.setStatus(G,Z),Z==="done"&&Q!=="done"&&X)try{let f=await Y.issues.mirrorTaskDone(X.repo,G);if(f)Y.bus.publish("issue.snapshot",f)}catch(f){T1("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 Z=G.map((X)=>{if(typeof X!=="object"||X===null)throw Error("each move needs taskId and position");let Q=X,f=O1(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(Z),{}}},{name:"task.ensureMain",async handle(z,Y){let G=O1(z,"repo"),Z=await Y.orch.ensureMainTask(G);return{task:Qz(Z)}}},{name:"project.forget",async handle(z,Y){let G=O1(z,"repo");return await Y.orch.forgetProject(G),{}}},{name:"task.ensureWorktree",async handle(z,Y){let G=O1(z,"taskId");Y.bus.publish("task.jobs",{taskId:G,kind:"ensureWorktree",phase:"running"});try{let Z=await Y.orch.ensureWorktree(G);return Y.bus.publish("task.jobs",{taskId:G,kind:"ensureWorktree",phase:"done"}),{worktreePath:Z}}catch(Z){throw Y.bus.publish("task.jobs",{taskId:G,kind:"ensureWorktree",phase:"error",error:Z instanceof Error?Z.message:String(Z)}),Z}}},{name:"worktree.discoverAdoptable",async handle(z,Y){let G=O1(z,"repo");return{worktrees:await Y.orch.discoverAdoptableWorktrees(G)}}},{name:"worktree.adopt",async handle(z,Y){let G=await Y.orch.adoptWorktree({repo:O1(z,"repo"),worktreePath:O1(z,"worktreePath"),branch:Jz(z,"branch"),vendor:vB(z,"vendor"),title:Jz(z,"title"),ifExists:Jz(z,"ifExists")==="return"?"return":"error"});return{task:Qz(G)}}},{name:"worktree.reconcile",async handle(z,Y){let G=O1(z,"cwd"),Z=O1(z,"worktreePath"),X=PB(Y.orch.listTasks(),G)??PB(Y.orch.listTasks(),Z);if(!X)return{adopted:!1};try{return{adopted:!0,taskId:(await Y.orch.adoptWorktree({repo:X,worktreePath:Z,ifExists:"return"})).id}}catch(Q){return T1("worktree-created",Q),{adopted:!1}}}},{name:"task.setActive",async handle(z,Y){let G=Jz(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(O1(z,"repoRoot"))}},{name:"issue.mutate",async handle(z,Y){let G=await Y.issues.mutate(O1(z,"repoRoot"),z.op);return Y.bus.publish("issue.snapshot",G),G}},{name:"session.deliver",async handle(z,Y){let G=O1(z,"taskId"),Z=O1(z,"text"),X=Jz(z,"source");if(X!==void 0&&X!=="note"&&X!=="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:Z,at:Date.now(),source:X??"dispatcher"}),{ok:!0}}},{name:"note.file",async handle(z,Y){let G=O1(z,"taskId"),Z=O1(z,"text"),X=Y.orch.getTask(G);if(!X)throw Error(`task not found: ${G}`);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||G;return Y.bus.publish("session.deliver",{taskId:Q.id,text:`[KOBE FIELD NOTE] from "${f}" (task ${G}): ${Z}`,at:Date.now(),source:"note"}),{ok:!0,routed:!0}}},{name:"engine.reportEvent",async handle(z,Y){let G=O1(z,"kind");if(!Gq(G))throw Error(`unknown engine event kind: ${G}`);let Z=Jz(z,"taskId"),X=Jz(z,"cwd");if(!Z&&X&&G==="session-start"){let H=CK(Y.orch.listTasks(),X);if(H)try{await Y.orch.adoptWorktree({repo:H.repo,worktreePath:H.worktreePath,ifExists:"return"})}catch(B){T1("worktree-autosync",B)}}let Q=Z??(X?gK(Y.orch.listTasks(),X):void 0);if(!Q)return{};let f=GC(z);if(Y.activity.report(Q,G,f),G==="turn-start")OK(Y.orch,Q).then((H)=>{if(H==="moved")console.log(`[status-rules] task ${Q} auto-moved backlog \u2192 in_progress`)}).catch((H)=>T1("status-rules",H));return{}}}].map((z)=>[z.name,z]))}function cB(J){if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function O1(J,z){let Y=J[z];if(typeof Y!=="string"||Y.length===0)throw Error(`${z} is required`);return Y}function Jz(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 hB(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 vB(J,z){let Y=Jz(J,z);return Y&&Y.trim().length>0?Y:void 0}function GC(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 Wf=k(()=>{Zq();AK();rJ();MJ();NK();eY()});import{execFile as ZC}from"child_process";import{mkdir as XC,readFile as QC,realpath as kK,rename as qC,stat as fC,writeFile as HC}from"fs/promises";import{homedir as BC}from"os";import{dirname as jC,isAbsolute as WC,join as VC,resolve as bK}from"path";import{promisify as KC}from"util";function UC(J){return(J instanceof Error?J.message:String(J)).includes("not a git repository")}function Kf(J=process.env.KOBE_HOME_DIR??BC()){return VC(J,".kobe","issues.json")}function IK(J){return typeof J==="string"&&SK.includes(J)}function DC(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:IK(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 LC(){return{version:1,repos:{}}}function MC(){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 FC(J){let{stdout:z}=await aB("git",["-C",J,"rev-parse","--git-common-dir"]),Y=z.trim();return kK(WC(Y)?Y:bK(J,Y))}async function OC(J){let{stdout:z}=await aB("git",["-C",J,"rev-parse","--show-toplevel"]);return z.trim()}async function AC(J){let{stdout:z}=await aB("git",["-C",J,"worktree","list","--porcelain"]),Y=z.split(/\r?\n/).find((G)=>G.startsWith("worktree "))?.slice(9).trim();return Y?kK(Y):OC(J)}async function dB(J){if(typeof J!=="string"||J.length===0)throw Error("repoRoot is required");let z=bK(J);if(!(await fC(z).catch(()=>null))?.isDirectory())throw Error("repoRoot does not exist");try{let[G,Z]=await Promise.all([AC(z),FC(z)]);return{repoRoot:G,repoKey:Z}}catch(G){if(UC(G))throw Error("repoRoot is not a git repository");throw G}}async function nB(J){try{let z=JSON.parse(await QC(J,"utf8")),Y={};if(z.repos&&typeof z.repos==="object")for(let[G,Z]of Object.entries(z.repos)){if(!Z||typeof Z!=="object")continue;let X=Z;Y[G]={repoRoot:typeof X.repoRoot==="string"?X.repoRoot:"",nextId:typeof X.nextId==="number"?X.nextId:1,issues:Array.isArray(X.issues)?X.issues.map(DC).filter((Q)=>Q!==null):[]}}return{version:1,repos:Y}}catch(z){if(z.code==="ENOENT")return LC();throw z}}async function iB(J,z){await XC(jC(J),{recursive:!0});let Y=`${J}.tmp`;await HC(Y,`${JSON.stringify(z,null,2)}
|
|
65
|
-
`,"utf8"),await qC(Y,J)}function lB(J,z){return{repoRoot:J,exists:z!==null,nextId:z?.nextId??1,issues:z?.issues??[]}}async function $B(J,z){let G=(Vf.get(J)??Promise.resolve()).then(z),Z=G.then(()=>{return},()=>{return});return Vf.set(J,Z),Z.then(()=>{if(Vf.get(J)===Z)Vf.delete(J)}),G}class Uf{path;constructor(J=Kf()){this.path=J}async list(J){let{repoRoot:z,repoKey:Y}=await dB(J);return $B(this.path,async()=>{let G=await nB(this.path),Z=G.repos[Y]??null;if(Z&&Z.repoRoot!==z)Z.repoRoot=z,await iB(this.path,G);return lB(z,Z)})}async mirrorTaskDone(J,z){let{repoRoot:Y,repoKey:G}=await dB(J);if(!z)return null;return $B(this.path,async()=>{let Z=await nB(this.path),X=Z.repos[G];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 iB(this.path,Z),lB(Y,X)})}async mutate(J,z){let{repoRoot:Y,repoKey:G}=await dB(J);if(!z||typeof z!=="object"||Array.isArray(z)||typeof z.type!=="string")throw Error("missing op");return $B(this.path,async()=>{let Z=await nB(this.path),X=Z.repos[G];if(!X)X={repoRoot:Y,nextId:1,issues:[]},Z.repos[G]=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:MC(),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(!IK(Q.status))throw Error(`invalid status: must be one of ${SK.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 iB(this.path,Z),lB(Y,X)})}}var aB,SK,Vf;var _B=k(()=>{aB=KC(ZC),SK=["open","doing","hold","done"];Vf=new Map});import{lstat as TK,readdir as RC,realpath as gC,stat as CC}from"fs/promises";import{join as NC,relative as kC,resolve as yK,sep as bC}from"path";import{Readable as SC}from"stream";function PK(J,z={}){let Y=z.entryType||z.type;if(Y==="both")Y=mJ.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&&!xK.includes(Y))throw Error(`readdirp: Invalid type passed. Use one of ${xK.join(", ")}`);return z.root=J,new rB(z)}var mJ,pB,wK="READDIRP_RECURSIVE_ERROR",IC,xK,TC,yC,xC=(J)=>IC.has(J.code),uC,uK=(J)=>!0,EK=(J)=>{if(J===void 0)return uK;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 uK},rB;var hK=k(()=>{mJ={FILE_TYPE:"files",DIR_TYPE:"directories",FILE_DIR_TYPE:"files_directories",EVERYTHING_TYPE:"all"},pB={root:".",fileFilter:(J)=>!0,directoryFilter:(J)=>!0,type:mJ.FILE_TYPE,lstat:!1,depth:2147483648,alwaysStat:!1,highWaterMark:4096};Object.freeze(pB);IC=new Set(["ENOENT","EPERM","EACCES","ELOOP",wK]),xK=[mJ.DIR_TYPE,mJ.EVERYTHING_TYPE,mJ.FILE_DIR_TYPE,mJ.FILE_TYPE],TC=new Set([mJ.DIR_TYPE,mJ.EVERYTHING_TYPE,mJ.FILE_DIR_TYPE]),yC=new Set([mJ.EVERYTHING_TYPE,mJ.FILE_DIR_TYPE,mJ.FILE_TYPE]),uC=process.platform==="win32";rB=class rB extends SC{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={...pB,...J},{root:Y,type:G}=z;this._fileFilter=EK(z.fileFilter),this._directoryFilter=EK(z.directoryFilter);let Z=z.lstat?TK:CC;if(uC)this._stat=(X)=>Z(X,{bigint:!0});else this._stat=Z;this._maxDepth=z.depth!=null&&Number.isSafeInteger(z.depth)?z.depth:pB.depth,this._wantsDir=G?TC.has(G):!1,this._wantsFile=G?yC.has(G):!1,this._wantsEverything=G===mJ.EVERYTHING_TYPE,this._root=yK(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:Z}=z,X=Y.splice(0,J).map((f)=>this._formatEntry(f,G)),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(Z<=this._maxDepth)this.parents.push(this._exploreDir(f.fullPath,Z+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 RC(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 Z=yK(NC(z,G));Y={path:kC(this._root,Z),fullPath:Z,basename:G},Y[this._statsProp]=this._isDirent?J:await this._stat(Z)}catch(Z){this._onError(Z);return}return Y}_onError(J){if(xC(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 gC(Y),Z=await TK(G);if(Z.isFile())return"file";if(Z.isDirectory()){let X=G.length;if(Y.startsWith(G)&&Y.substr(X,1)===bC){let Q=Error(`Circular symlink detected: "${Y}" points to "${G}"`);return Q.code=wK,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 EC,unwatchFile as vK,watchFile as wC}from"fs";import{realpath as oB,lstat as PC,open as hC,stat as cK}from"fs/promises";import{type as vC}from"os";import*as u1 from"path";function mK(J,z,Y,G,Z){let X=(Q,f)=>{if(Y(J),Z(Q,f,{watchedPath:J}),f&&J!==f)Mf(u1.resolve(J,f),NG,u1.join(J,f))};try{return EC(J,{persistent:z.persistent},X)}catch(Q){G(Q);return}}class zj{fsw;_boundHandleError;constructor(J){this.fsw=J,this._boundHandleError=(z)=>J._handleError(z)}_watchWithNodeFs(J,z){let Y=this.fsw.options,G=u1.dirname(J),Z=u1.basename(J);this.fsw._getWatchedDir(G).add(Z);let Q=u1.resolve(J),f={persistent:Y.persistent};if(!z)z=Ff;let H;if(Y.usePolling){let B=Y.interval!==Y.binaryInterval;f.interval=B&&_C(Z)?Y.binaryInterval:Y.interval,H=oC(J,Q,f,{listener:z,rawEmitter:this.fsw._emitRaw})}else H=rC(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=u1.dirname(J),Z=u1.basename(J),X=this.fsw._getWatchedDir(G),Q=z;if(X.has(Z))return;let f=async(B,V)=>{if(!this.fsw._throttle(iC,J,5))return;if(!V||V.mtimeMs===0)try{let j=await cK(J);if(this.fsw.closed)return;let{atimeMs:K,mtimeMs:L}=j;if(!K||K<=L||L!==Q.mtimeMs)this.fsw._emit(Oz.CHANGE,J,j);if((cC||dC||nC)&&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,Z)}else if(X.has(Z)){let{atimeMs:j,mtimeMs:K}=V;if(!j||j<=K||K!==Q.mtimeMs)this.fsw._emit(Oz.CHANGE,J,V);Q=V}},H=this._watchWithNodeFs(J,f);if(!(Y&&this.fsw.options.ignoreInitial)&&this.fsw._isntIgnored(J)){if(!this.fsw._throttle(Oz.ADD,J,0))return;this.fsw._emit(Oz.ADD,J,z)}return H}async _handleSymlink(J,z,Y,G){if(this.fsw.closed)return;let Z=J.fullPath,X=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(X.has(G)){if(this.fsw._symlinkPaths.get(Z)!==Q)this.fsw._symlinkPaths.set(Z,Q),this.fsw._emit(Oz.CHANGE,Y,J.stats)}else X.add(G),this.fsw._symlinkPaths.set(Z,Q),this.fsw._emit(Oz.ADD,Y,J.stats);return this.fsw._emitReady(),!0}if(this.fsw._symlinkPaths.has(Z))return!0;this.fsw._symlinkPaths.set(Z,!0)}_handleRead(J,z,Y,G,Z,X,Q){J=u1.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(mC,async(j)=>{if(this.fsw.closed){V=void 0;return}let K=j.path,L=u1.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=u1.join(Z,u1.relative(Z,L)),this._addToNodeFs(L,z,Y,X+1)}).on(Oz.ERROR,this._boundHandleError),new Promise((j,K)=>{if(!V)return K();V.once(eB,()=>{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,Z,X,Q)})})}async _handleDir(J,z,Y,G,Z,X,Q){let f=this.fsw._getWatchedDir(u1.dirname(J)),H=f.has(u1.basename(J));if(!(Y&&this.fsw.options.ignoreInitial)&&!Z&&!H)this.fsw._emit(Oz.ADD_DIR,J,z);f.add(u1.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(!Z){if(await this._handleRead(J,Y,X,Z,J,G,B),this.fsw.closed)return}V=this._watchWithNodeFs(J,(K,L)=>{if(L&&L.mtimeMs===0)return;this._handleRead(K,!1,X,Z,J,G,B)})}return V}async _addToNodeFs(J,z,Y,G,Z){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 lC[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=u1.resolve(J),j=H?await oB(J):J;if(this.fsw.closed)return;if(B=await this._handleDir(Q.watchPath,f,z,G,Z,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=u1.dirname(Q.watchPath);if(this.fsw._getWatchedDir(j).add(Q.watchPath),this.fsw._emit(Oz.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(u1.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 mC="data",eB="end",dK="close",Ff=()=>{},Of,Jj,cC,dC,nC,nK,y1,Oz,iC="watch",lC,NG="listeners",Df="errHandlers",AZ="rawEmitters",$C,aC,_C=(J)=>aC.has(u1.extname(J).slice(1).toLowerCase()),tB=(J,z)=>{if(J instanceof Set)J.forEach(z);else z(J)},EX=(J,z,Y)=>{let G=J[z];if(!(G instanceof Set))J[z]=G=new Set([G]);G.add(Y)},pC=(J)=>(z)=>{let Y=J[z];if(Y instanceof Set)Y.clear();else delete J[z]},wX=(J,z,Y)=>{let G=J[z];if(G instanceof Set)G.delete(Y);else if(G===Y)delete J[z]},iK=(J)=>J instanceof Set?J.size===0:!J,Lf,Mf=(J,z,Y,G,Z)=>{let X=Lf.get(J);if(!X)return;tB(X[z],(Q)=>{Q(Y,G,Z)})},rC=(J,z,Y,G)=>{let{listener:Z,errHandler:X,rawEmitter:Q}=G,f=Lf.get(z),H;if(!Y.persistent){if(H=mK(J,Y,Z,X,Q),!H)return;return H.close.bind(H)}if(f)EX(f,NG,Z),EX(f,Df,X),EX(f,AZ,Q);else{if(H=mK(J,Y,Mf.bind(null,z,NG),X,Mf.bind(null,z,AZ)),!H)return;H.on(Oz.ERROR,async(B)=>{let V=Mf.bind(null,z,Df);if(f)f.watcherUnusable=!0;if(Jj&&B.code==="EPERM")try{await(await hC(J,"r")).close(),V(B)}catch(j){}else V(B)}),f={listeners:Z,errHandlers:X,rawEmitters:Q,watcher:H},Lf.set(z,f)}return()=>{if(wX(f,NG,Z),wX(f,Df,X),wX(f,AZ,Q),iK(f.listeners))f.watcher.close(),Lf.delete(z),$C.forEach(pC(f)),f.watcher=void 0,Object.freeze(f)}},sB,oC=(J,z,Y,G)=>{let{listener:Z,rawEmitter:X}=G,Q=sB.get(z),f=Q&&Q.options;if(f&&(f.persistent<Y.persistent||f.interval>Y.interval))vK(z),Q=void 0;if(Q)EX(Q,NG,Z),EX(Q,AZ,X);else Q={listeners:Z,rawEmitters:X,options:Y,watcher:wC(z,Y,(H,B)=>{tB(Q.rawEmitters,(j)=>{j(Oz.CHANGE,z,{curr:H,prev:B})});let V=H.mtimeMs;if(H.size!==B.size||V>B.mtimeMs||V===0)tB(Q.listeners,(j)=>j(J,H))})},sB.set(z,Q);return()=>{if(wX(Q,NG,Z),wX(Q,AZ,X),iK(Q.listeners))sB.delete(z),vK(z),Q.options=Q.watcher=void 0,Object.freeze(Q)}};var lK=k(()=>{Of=process.platform,Jj=Of==="win32",cC=Of==="darwin",dC=Of==="linux",nC=Of==="freebsd",nK=vC()==="OS400",y1={ALL:"all",READY:"ready",ADD:"add",CHANGE:"change",ADD_DIR:"addDir",UNLINK:"unlink",UNLINK_DIR:"unlinkDir",RAW:"raw",ERROR:"error"},Oz=y1,lC={lstat:PC,stat:cK},$C=[NG,Df,AZ],aC=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"]),Lf=new Map;sB=new Map});import{EventEmitter as sC}from"events";import{stat as tC,Stats as kc}from"fs";import{readdir as eC,stat as JN}from"fs/promises";import*as Q1 from"path";function Af(J){return Array.isArray(J)?J:[J]}function qN(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 fN(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(oK,"/"),z)J="/"+J;return J}function $K(J,z,Y){let G=fN(z);for(let Z=0;Z<J.length;Z++){let X=J[Z];if(X(G,Y))return!0}return!1}function HN(J,z){if(J==null)throw TypeError("anymatch: specify first argument");let G=Af(J).map((Z)=>qN(Z));if(z==null)return(Z,X)=>{return $K(G,Z,X)};return $K(G,z)}class tK{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!==rK&&J!==YN)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 eC(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=Ff,this.items=jN,Object.freeze(this)}}class eK{fsw;path;watchPath;fullWatchPath;dirParts;followSymlinks;statMethod;constructor(J,z,Y){this.fsw=Y;let G=J;this.path=J=J.replace(QN,""),this.watchPath=G,this.fullWatchPath=Q1.resolve(G),this.dirParts=[],this.dirParts.forEach((Z)=>{if(Z.length>1)Z.pop()}),this.followSymlinks=z,this.statMethod=z?WN:VN}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 z6(J,z={}){let Y=new J6(z);return Y.add(J),Y}var Yj="/",zN="//",rK=".",YN="..",GN="string",ZN,oK,XN,QN,Gj=(J)=>typeof J==="object"&&J!==null&&!(J instanceof RegExp),aK=(J)=>{let z=Af(J).flat();if(!z.every((Y)=>typeof Y===GN))throw TypeError(`Non-string provided as watch path: ${z}`);return z.map(sK)},_K=(J)=>{let z=J.replace(ZN,Yj),Y=!1;if(z.startsWith(zN))Y=!0;if(z=z.replace(oK,Yj),Y)z=Yj+z;return z},sK=(J)=>_K(Q1.normalize(_K(J))),pK=(J="")=>(z)=>{if(typeof z==="string")return sK(Q1.isAbsolute(z)?z:Q1.join(J,z));else return z},BN=(J,z)=>{if(Q1.isAbsolute(J))return J;return Q1.join(z,J)},jN,WN="stat",VN="lstat",J6;var Y6=k(()=>{hK();lK();/*! chokidar - MIT License (c) 2012 Paul Miller (paulmillr.com) */ZN=/\\/g,oK=/\/\//g,XN=/\..*\.(sw[px])$|~$|\.subl.*\.tmp/,QN=/^\.[/\\]/;jN=Object.freeze(new Set);J6=class J6 extends sC{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?Af(J.ignored):Af([]),awaitWriteFinish:z===!0?Y:typeof z==="object"?{...Y,...z}:!1};if(nK)G.usePolling=!0;if(G.atomic===void 0)G.atomic=!G.usePolling;let Z=process.env.CHOKIDAR_USEPOLLING;if(Z!==void 0){let f=Z.toLowerCase();if(f==="false"||f==="0")G.usePolling=!1;else if(f==="true"||f==="1")G.usePolling=!0;else G.usePolling=!!f}let X=process.env.CHOKIDAR_INTERVAL;if(X)G.interval=Number.parseInt(X,10);let Q=0;this._emitReady=()=>{if(Q++,Q>=this._readyCount)this._emitReady=Ff,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 zj(this),Object.freeze(G)}_addIgnoredPath(J){if(Gj(J)){for(let z of this._ignoredPaths)if(Gj(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(Gj(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 Z=aK(J);if(G)Z=Z.map((X)=>{return BN(X,G)});if(Z.forEach((X)=>{this._removeIgnoredPath(X)}),this._userIgnored=void 0,!this._readyCount)this._readyCount=0;return this._readyCount+=Z.length,Promise.all(Z.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=aK(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 Z=(this.options.cwd?Q1.relative(this.options.cwd,Y):Y)||rK;J[Z]=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(Jj)z=Q1.normalize(z);if(G.cwd)z=Q1.relative(G.cwd,z);let Z=[z];if(Y!=null)Z.push(Y);let X=G.awaitWriteFinish,Q;if(X&&(Q=this._pendingWrites.get(z)))return Q.lastChange=new Date,this;if(G.atomic){if(J===y1.UNLINK)return this._pendingUnlinks.set(z,[J,...Z]),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(X&&(J===y1.ADD||J===y1.CHANGE)&&this._readyEmitted){let f=(H,B)=>{if(H)J=y1.ERROR,Z[0]=H,this.emitWithAll(J,Z);else if(B){if(Z.length>1)Z[1]=B;else Z.push(B);this.emitWithAll(J,Z)}};return this._awaitWriteFinish(z,X.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 JN(f)}catch(B){}if(!H||this.closed)return;Z.push(H)}return this.emitWithAll(J,Z),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 Z=G.get(z);if(Z)return Z.count++,!1;let X,Q=()=>{let H=G.get(z),B=H?H.count:0;if(G.delete(z),clearTimeout(X),H)clearTimeout(H.timeoutObject);return B};X=setTimeout(Q,Y);let f={timeoutObject:X,clear:Q,count:0};return G.set(z,f),f}_incrReadyCount(){return this._readyCount++}_awaitWriteFinish(J,z,Y,G){let Z=this.options.awaitWriteFinish;if(typeof Z!=="object")return;let X=Z.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){tC(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,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&&XN.test(J))return!0;if(!this._userIgnored){let{cwd:Y}=this.options,Z=(this.options.ignored||[]).map(pK(Y)),Q=[...[...this._ignoredPaths].map(pK(Y)),...Z];this._userIgnored=HN(Q,void 0)}return this._userIgnored(J,z)}_isntIgnored(J,z){return!this._isIgnored(J,z)}_getWatchHelpers(J){return new eK(J,this.options.followSymlinks,this)}_getWatchedDir(J){let z=Q1.resolve(J);if(!this._watched.has(z))this._watched.set(z,new tK(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),Z=Q1.resolve(G);if(Y=Y!=null?Y:this._watched.has(G)||this._watched.has(Z),!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(Z))this._symlinkPaths.delete(Z);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(Z);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=PK(J,Y);return this._streams.add(G),G.once(dK,()=>{G=void 0}),G.once(eB,()=>{if(G)this._streams.delete(G),G=void 0}),G}}});import{mkdirSync as KN,statSync as UN}from"fs";import{basename as G6,dirname as DN,join as LN}from"path";function Rf(J){if(J.debounceMs<=0)return()=>{};let z=DN(J.filePath),Y=new Set([G6(J.filePath),...J.matchBasenames??[]]),G=null,Z=null,X=!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(G6(V)))return;f()},B=(V)=>{try{let j=UN(LN(z,V));return`${j.mtimeMs}:${j.size}`}catch{return null}};try{KN(z,{recursive:!0});let V=new Map;for(let j of Y)V.set(j,B(j));Z=z6(z,{depth:0,ignoreInitial:!0}),Z.on("add",H),Z.on("change",H),Z.on("unlink",H),Z.on("error",J.onError),Z.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,G)clearTimeout(G),G=null;let V=Z;Z=null,V?.close().catch(J.onError)}}var Zj=k(()=>{Y6()});import{homedir as MN}from"os";import{basename as FN,join as ON}from"path";function Qj(J=process.env.KOBE_HOME_DIR??MN()){return ON(J,".kobe","settings","keybindings.yaml")}function Z6(J,z={}){let Y=z.debounceMs??Xj;if(Y<=0)return()=>{};let G=z.path??Qj(),Z=FN(G),X=Z.replace(/\.yaml$/,".yml"),Q=0;return J.publish("keybindings",{rev:Q}),Rf({filePath:G,matchBasenames:[Z,X],debounceMs:Y,onTrigger:()=>{try{Q+=1,J.publish("keybindings",{rev:Q})}catch(H){T1("keybindings-watcher",H)}},onError:(H)=>T1("keybindings-watcher",H)})}var Xj=200;var X6=k(()=>{Zj()});class qj{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??AN,this.log=J.log??hz}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 AN=(J,z)=>{let Y=setTimeout(J,z);return Y.unref?.(),()=>clearTimeout(Y)};var Q6=()=>{};import{spawn as RN}from"child_process";function TN(J,z,Y){return new Promise((G)=>{let Z="",X="",Q=!1,f=(B,V)=>{if(Q)return;Q=!0,G({status:B,stdout:Z,stderr:X,spawnError:V})},H=RN("gh",J.slice(),{cwd:z,stdio:["ignore","pipe","pipe"],signal:Y,killSignal:"SIGKILL"});H.stdout?.on("data",(B)=>{Z+=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 xN(J){if(J.archived)return!1;if(J.kind==="main")return!1;if(!J.branch||!J.worktreePath)return!1;if(l1(J.repo)||l1(J.worktreePath))return!1;return!0}async function uN(J,z){let Y=z.tickMs??PX,G=z.rand,Z={tickMs:Y,settledMs:CN,noPrMs:gN,noRemoteMs:bN,failureBaseMs:NN,failureCapMs:kN,jitterRatio:SN},X=[];for(let Q of J.listTasks()){if(!xN(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"){hz("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,DX({kind:"error",error:B.error},H,z.now,Z,G));continue}if(B.kind==="empty"){z.schedule.set(Q.id,DX({kind:"empty"},H,z.now,Z,G));continue}let V=xV(B.view,z.at),j=J.getTask(Q.id);if(!j){z.schedule.delete(Q.id);continue}if(!Fq(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,DX({kind:"pr",settled:K},H,z.now,Z,G))}catch(B){T1("pr-status-poller",B),z.schedule.set(Q.id,DX({kind:"error",error:"network"},H,z.now,Z,G))}}return X}function q6(J,z=PX,Y,G=yN){if(z<=0)return()=>{};let Z=new Map,X=!1,f=setInterval(()=>{if(Y&&!Y())return;if(X)return;X=!0,uN(J,{run:G,now:Date.now(),at:new Date().toISOString(),schedule:Z,tickMs:z}).catch((H)=>T1("pr-status-poller",H)).finally(()=>{X=!1})},z);return f.unref?.(),()=>clearInterval(f)}var PX=30000,gN=300000,CN=600000,NN,kN=900000,bN=1800000,SN=0.2,IN=1e4,yN=async(J,z)=>{let Y=new AbortController,G=!1,Z=setTimeout(()=>{G=!0,Y.abort()},IN);try{let X=await TN(["pr","view",z,"--json",yV],J,Y.signal);if(X.status===0&&!G)try{let Q=JSON.parse(X.stdout);return typeof Q.number==="number"?{kind:"pr",view:Q}:{kind:"empty"}}catch{return m8({parseError:!0})}return m8({spawnError:X.spawnError,timedOut:G,exitCode:X.status,stderr:X.stderr})}finally{clearTimeout(Z)}};var f6=k(()=>{c8();F1();NN=PX});function hN(J,z){return J.mtimeMs===z.mtimeMs&&J.completionId===z.completionId&&J.completionAt===z.completionAt}async function vN(J,z,Y,G){let Z=await _G(z,J),X=await Y.latestCompletion(J);return{mtimeMs:Z,completionId:X?.id??null,completionAt:X?.timestampMs??0}}function mN(J){let z=new Map;for(let Y of J){if(Y.archived)continue;if(!Y.worktreePath)continue;if(l1(Y.repo)||l1(Y.worktreePath))continue;if(z.has(Y.worktreePath))continue;z.set(Y.worktreePath,Y.vendor??$1)}return z}class H6{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=mN(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){T1("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:HX(z)},this.entries.set(J,Y);else if(Y.vendor!==z)Y.vendor=z,Y.detector=HX(z);let G=this.options.cadence??{timeoutMs:EN,slowRetryMs:wN,minIntervalMs:PN},Z=this.options.run??vN,X=Y;tG(X,G,(Q)=>Z(J,X.vendor,X.detector,Q),(Q)=>{if(this.stopped)return;if(this.entries.get(J)!==X)return;if(X.value&&hN(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 B6(J,z,Y=fj,G){if(Y<=0)return()=>{};let Z=new H6(J,z,{hasSubscribers:G});Z.tick();let X=setInterval(()=>Z.tick(),Y);return X.unref?.(),()=>{clearInterval(X),Z.stop()}}var fj=1500,EN=4000,wN=60000,PN=1500;var j6=k(()=>{zq();eG();Yq();F1();rJ()});import{readFileSync as cN}from"fs";import{homedir as dN}from"os";import{basename as nN,join as iN}from"path";function Bj(J=process.env.KOBE_HOME_DIR??dN()){return iN(J,".config","kobe","state.json")}function W6(J){let z={};try{let B=JSON.parse(cN(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,Z=typeof z.focusAccent==="string"&&$N.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:G,focusAccent:Z,locale:H,sortMode:X,keysCollapsed:Q,projectFilter:f}}function aN(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 V6(J,z={}){let Y=z.debounceMs??Hj;if(Y<=0)return()=>{};let G=z.pollMs??lN,Z=z.statePath??Bj(),X=nN(Z),Q=W6(Z);return J.publish("ui-prefs",Q),Rf({filePath:Z,matchBasenames:[X],debounceMs:Y,pollMs:G,onTrigger:()=>{try{let H=W6(Z);if(aN(Q,H))return;Q=H,J.publish("ui-prefs",H)}catch(H){T1("ui-prefs-watcher",H)}},onError:(H)=>T1("ui-prefs-watcher",H)})}var Hj=200,lN=250,$N;var K6=k(()=>{Zj();$N=["primary","success","info"]});function RZ(J){return kG.includes(J)?J:"auto"}var kG,U6,XY="editor.kind",wY="editor.customCommand",gf="auto";var Cf=k(()=>{kG=["auto","vim","nvim","nano","emacs","custom"],U6=["nvim","vim","emacs","nano"]});function SG(J){return J==="taskpanel"?"taskpanel":"chattab"}var QY="settings.surface",bG="chattab";function cJ(J=process.env){return{...J,...jj}}var jj;var PY=k(()=>{jj={GIT_OPTIONAL_LOCKS:"0"}});async function gZ(J,z,Y={}){if(!J)return{stdout:"",stderr:"worktreePath is required",status:-1};let G=(Y.execForPath??YY)(J),Z=Y.timeoutMs&&Y.timeoutMs>0?new AbortController:null,X=!1,Q=Z?setTimeout(()=>{X=!0,Z.abort()},Y.timeoutMs):null,f=Z&&Y.signal?AbortSignal.any([Z.signal,Y.signal]):Z?.signal??Y.signal,H;try{H=await G.run(["git",...z],{cwd:J,env:jj,signal:f})}catch(B){if(Q)clearTimeout(Q);return{stdout:"",stderr:B instanceof Error?B.message:String(B),status:-1}}if(Q)clearTimeout(Q);if(X&&H.exitCode===-1&&!H.stderr)return{stdout:H.stdout,stderr:`git ${z.join(" ")} timed out after ${Y.timeoutMs}ms`,status:-1};return{stdout:H.stdout,stderr:H.stderr,status:H.exitCode}}function _N(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 D6(J,z,Y={}){let G=_N(J,z);if(!G)return null;let Z=(Y.execForPath??YY)(J);try{return await Z.readFile(G)}catch{return null}}var Nf=k(()=>{Vz();PY()});import{statSync as pN}from"fs";async function hX(J,z){let Y=await gZ(J,z,{timeoutMs:rN}),G=Y.status??-1;return{ok:G===0,stdout:Y.stdout,stderr:Y.stderr,code:G}}function sN(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 L6(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 Z=null,X=G.match(/^\+\+\+ b\/(.*)$/m);if(X&&X[1]!=="/dev/null")Z=X[1];else{let Q=G.match(/^diff --git a\/.* b\/(.*)$/m);if(Q)Z=Q[1]}if(!Z)continue;z.set(tN(Z),G.endsWith(`
|
|
28
|
+
`)&&J.endsWith("</INSTRUCTIONS>")}var v7=()=>{};function m7(J,z={}){let Y=M8(J.input_tokens,0),G=M8(J.cached_input_tokens,0),Z=M8(J.output_tokens,0),X=Math.max(0,Y-G);if(Y<=0&&Z<=0&&G<=0)return;return{input_tokens:X,output_tokens:Z,...G>0?{cache_read_input_tokens:G}:{},...I2(z.contextWindowTokens)?{context_window_tokens:z.contextWindowTokens}:{}}}function M8(J,z){return typeof J==="number"&&Number.isFinite(J)?J:z}function I2(J){return typeof J==="number"&&Number.isFinite(J)&&J>0}import{readdir as T2,stat as y2,unlink as jP}from"fs/promises";import{homedir as x2}from"os";import XG from"path";async function R8(J=QG){let z=J.sessionsDir(),Y=(await J.readdir(z)).sort().reverse(),G=[];for(let Z of Y){let X=XG.join(z,Z),Q=(await J.readdir(X)).sort().reverse();for(let f of Q){let H=XG.join(X,f),B=(await J.readdir(H)).sort().reverse();for(let V of B){let j=XG.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(XG.join(j,L)),G.length>=c7){if(!d7)d7=!0,console.warn(`[codex history] rollout scan truncated at ${c7} files; older sessions may be omitted`);return G}}}}return G}async function u2(J,z=QG){if(!J)return;let Y=J.toLowerCase(),G=await R8(z);for(let Z of G)if(XG.basename(Z).match($7)?.[1]?.toLowerCase()===Y)return Z;return}function E2(J){for(let z of J.split(`
|
|
29
|
+
`)){let Y=z.trim();if(!Y)continue;if(!AY(Y))return"";try{let G=JSON.parse(Y);if(G.type==="session_meta")return G.payload?.cwd??""}catch{}return""}return""}async function a7(J,z){let Y=n7.get(z);if(!Y)Y=new Map,n7.set(z,Y);let G=Y.get(J);if(G!==void 0)return G;let Z;try{Z=await z.readFile(J)}catch{return null}let X=E2(Z);if(X)Y.set(J,X);return X}async function _7(J,z=QG){if(!J)return[];let Y=await R8(z),G=[],Z=0;for(let X of Y){if(Z>=w2)break;if(Z++,await a7(X,z)!==J)continue;let Q=XG.basename(X).match($7)?.[1];if(Q)G.push(Q)}return G.reverse()}async function g8(J,z=QG){if(!J)return null;let Y=await R8(z),G=0;for(let Z of Y){if(G>=P2)break;if(G++,await a7(Z,z)!==J)continue;try{return{path:Z,mtimeMs:(await z.stat(Z)).mtimeMs}}catch{}}return null}async function p7(J,z=QG){return(await g8(J,z))?.mtimeMs??0}async function r7(J,z=QG){return(await h2(J,z)).messages}async function h2(J,z=QG){let Y=await u2(J,z);if(!Y)return{messages:[]};let G;try{G=await z.readFile(Y)}catch{return{messages:[]}}let Z=v2(m2(G,J)),X=l2(G);return{messages:Z,...X?{usageMetrics:X}:{}}}function v2(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 m2(J,z){let Y=[];for(let G of J.split(`
|
|
30
|
+
`)){let Z=G.trim();if(!Z)continue;if(!AY(Z))continue;let X;try{X=JSON.parse(Z)}catch{continue}if(!HX(X))continue;if(X.type!=="response_item")continue;let Q=HX(X.payload)?X.payload:void 0;if(!Q)continue;let f=typeof X.timestamp==="string"?X.timestamp:new Date().toISOString(),H=c2(Q,f,z);if(H)Y.push(H)}return Y}function c2(J,z,Y){if(J.type==="message"){let G=J.role;if(G!=="user"&&G!=="assistant"&&G!=="system")return;let Z=L8(J.content);if(G==="user"&&h7(Z))return;return{role:G,blocks:Z,timestamp:z,sessionId:Y}}if(J.type==="reasoning")return d2(J,z,Y);if(J.type==="function_call")return F8(J,z,Y,{name:A8(J.name,"function_call"),input:O8(J.arguments)});if(J.type==="custom_tool_call")return F8(J,z,Y,{name:A8(J.name,"custom_tool_call"),input:O8(J.input)});if(J.type==="tool_search_call")return F8(J,z,Y,{name:"tool_search_call",input:oQ(J,["type","call_id","status"])});if(J.type==="function_call_output"||J.type==="custom_tool_call_output")return i7(J,z,Y,O8(J.output));if(J.type==="tool_search_output")return i7(J,z,Y,oQ(J,["type","call_id"]));if(J.type==="web_search_call"||J.type==="image_generation_call"||J.type==="local_shell_call")return n2(J,z,Y);return}function d2(J,z,Y){let G=i2(J);if(G.length===0)return;return{role:"assistant",blocks:[{type:"thinking",text:G}],timestamp:z,sessionId:Y}}function F8(J,z,Y,G){let Z=typeof J.call_id==="string"?J.call_id:void 0;if(!Z)return;return{role:"assistant",blocks:[{type:"tool_call",callId:Z,name:G.name,input:G.input}],timestamp:z,sessionId:Y}}function i7(J,z,Y,G){let Z=typeof J.call_id==="string"?J.call_id:void 0;if(!Z)return;return{role:"user",blocks:[{type:"tool_result",callId:Z,output:G,isError:!1}],timestamp:z,sessionId:Y}}function n2(J,z,Y){let G=typeof J.type==="string"?J.type:"tool",Z=typeof J.call_id==="string"&&J.call_id.length>0?J.call_id:`${G}:${z}`,X=A8(J.name,G),Q=oQ(J,["type","call_id","status"]),f=oQ(J,["type","call_id"]);return{role:"assistant",timestamp:z,sessionId:Y,blocks:[{type:"tool_call",callId:Z,name:X,input:Q},{type:"tool_result",callId:Z,output:f,isError:!1}]}}function i2(J){let z=l7(J.content);if(z.length>0)return z;let Y=typeof J.text==="string"?J.text:"";if(Y.length>0)return Y;return l7(J.summary)}function l7(J){if(typeof J==="string")return J;if(!Array.isArray(J))return"";let z=[];for(let Y of J){if(typeof Y==="string"){z.push(Y);continue}if(!HX(Y))continue;let G=typeof Y.text==="string"?Y.text:"";if(G.length>0)z.push(G)}return z.join("")}function oQ(J,z){let Y={};for(let[G,Z]of Object.entries(J))if(!z.includes(G))Y[G]=Z;return Y}function A8(J,z){return typeof J==="string"&&J.length>0?J:z}function O8(J){if(typeof J!=="string")return J;try{return JSON.parse(J)}catch{return J}}function l2(J){let z,Y=null;for(let G of J.split(`
|
|
31
|
+
`)){let Z=G.trim();if(!Z)continue;if(!AY(Z))continue;let X;try{X=JSON.parse(Z)}catch{continue}if(!HX(X))continue;let Q=typeof X.timestamp==="string"?$2(X.timestamp):null;if(X.type==="response_item")continue;if(X.type!=="turn.completed")continue;let f=HX(X.usage)?X.usage:void 0;if(!f)continue;let H=m7(f);if(!H)continue;if(Q!==null&&(Y===null||Q>Y))Y=Q,z=H;else if(Y===null)z=H}return z}function $2(J){let z=new Date(J).getTime();return Number.isFinite(z)?z:null}function HX(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var QG,c7=5000,d7=!1,$7,n7,w2=200,P2=12;var C8=k(()=>{GX();v7();QG={sessionsDir(){return XG.join(x2(),".codex","sessions")},async readdir(J){try{return await T2(J)}catch{return[]}},async readFile(J){return await nG(J)},stat:y2};$7=/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/i;n7=new WeakMap});import{homedir as a2}from"os";import{join as _2}from"path";function p2(){return _2(a2(),".codex","hooks.json")}var s7,AP,N8;var t7=k(()=>{U8();s7=[{event:"SessionStart",verb:"session-start"},{event:"UserPromptSubmit",verb:"turn-start"},{event:"Stop",verb:"turn-complete"}],AP=s7.map((J)=>J.event);N8=class N8 extends fX{vendor="codex";eventMap=s7;globalSettingsPath(){return p2()}}});function e7(J){if(!sQ(J))return;let z=sQ(J.modelMetrics)?J.modelMetrics:void 0;if(!z)return;let Y=0,G=0,Z=0;for(let Q of Object.values(z)){if(!sQ(Q)||!sQ(Q.usage))continue;Y+=tQ(Q.usage.inputTokens,0),G+=tQ(Q.usage.outputTokens,0),Z+=tQ(Q.usage.cacheReadTokens,0)}let X=tQ(J.currentTokens,0);if(Y===0&&G===0&&Z===0&&X===0)return;return{input_tokens:Y,output_tokens:G,...Z>0?{cache_read_input_tokens:Z}:{},...X>0?{context_tokens:X}:{}}}function sQ(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function tQ(J,z){return typeof J==="number"&&Number.isFinite(J)?J:z}import{readdir as r2,rm as o2,stat as s2}from"fs/promises";import{homedir as t2}from"os";import NY from"path";async function b8(J=qG){let z=NY.join(J.copilotDir(),"session-state");return(await J.readdir(z)).map((G)=>NY.join(z,G))}async function JV(J,z=qG){let Y=[];for(let G of await b8(z)){let Z=await S8(G,z);if(Z.cwd!==J)continue;Y.push({id:Z.id??NY.basename(G),updatedAt:Z.updatedAt??""})}return Y.sort((G,Z)=>G.updatedAt.localeCompare(Z.updatedAt)).map((G)=>G.id)}async function zV(J,z=qG){if(!J)return 0;let Y=0;for(let G of await b8(z)){if((await S8(G,z)).cwd!==J)continue;try{let{mtimeMs:X}=await z.stat(NY.join(G,"events.jsonl"));if(X>Y)Y=X}catch{}}return Y}async function e2(J,z=qG){let Y=await JA(J,z);if(!Y)return{messages:[]};let G=await z.readFile(NY.join(Y,"events.jsonl")).catch(()=>""),Z=YA(G,J);return{messages:Z.messages,...Z.usageMetrics?{usageMetrics:Z.usageMetrics}:{}}}async function YV(J,z=qG){return(await e2(J,z)).messages}async function JA(J,z=qG){for(let Y of await b8(z)){if(NY.basename(Y)===J)return Y;let G=await S8(Y,z);if(G.id===J||G.name?.toLowerCase()===J.toLowerCase())return Y}return}async function S8(J,z=qG){let Y=await z.readFile(NY.join(J,"workspace.yaml")).catch(()=>"");return zA(Y)}function zA(J){let z={};for(let Y of J.split(`
|
|
32
|
+
`)){let G=Y.match(/^([A-Za-z_]+):\s*(.*)$/);if(!G)continue;let Z=G[1],X=G[2]??"";if(X.startsWith('"')&&X.endsWith('"'))X=X.slice(1,-1).replace(/\\"/g,'"');z[Z]=X}return{id:z.id,cwd:z.cwd,name:z.name,updatedAt:z.updated_at,createdAt:z.created_at}}function YA(J,z){let Y=[],G=new Map,Z=z,X,Q=null;for(let f of J.split(`
|
|
33
|
+
`)){let H=f.trim();if(!H)continue;if(!AY(H))continue;let B;try{B=JSON.parse(H)}catch{continue}if(!k8(B)||typeof B.type!=="string")continue;let V=typeof B.timestamp==="string"?B.timestamp:new Date().toISOString(),j=k8(B.data)?B.data:{};if(B.type==="session.start"){let K=typeof j.sessionId==="string"?j.sessionId:void 0;if(K)Z=K;continue}if(B.type==="user.message"){let K=typeof j.content==="string"?j.content:"";if(!K)continue;if(!Q)Q=Buffer.from(K.slice(0,GA),"utf8").toString("utf8");Y.push({role:"user",blocks:[{type:"text",text:K}],timestamp:V,sessionId:Z});continue}if(B.type==="assistant.message"){let K=[],L=typeof j.content==="string"?j.content:"";if(L)K.push({type:"text",text:L});let A=Array.isArray(j.toolRequests)?j.toolRequests:[];for(let O of A){if(!k8(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:Z});continue}if(B.type==="tool.execution_start"){let K=typeof j.toolCallId==="string"?j.toolCallId:void 0,L=typeof j.toolName==="string"?j.toolName:"tool";if(K)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:Z});continue}if(B.type==="session.shutdown")X=e7(j)}return{messages:Y,usageMetrics:X,firstUserMessage:Q}}function k8(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var qG,GA=200;var GV=k(()=>{GX();qG={copilotDir(){let J=process.env.COPILOT_HOME?.trim();if(J)return J;return NY.join(t2(),".copilot")},async readdir(J){try{return await r2(J)}catch{return[]}},async readFile(J){return await nG(J)},stat:s2,async rm(J){await o2(J,{recursive:!0,force:!0})}}});function I8(J){return t1(J).createHookAdapter()}class eQ{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 T8=k(()=>{kY()});import{readFile as ZV}from"fs/promises";class Jq{supportsCompletionMarkers(){return!0}}function BX(J){return t1(J).createTurnDetector()}function qA(J,z="claude",Y=0){let G=null,Z=0;for(let X of J.split(`
|
|
34
|
+
`)){Z++;let Q=XV(X);if(!Q)continue;let f=qV(Q.message)?Q.message:Q;if(f.role!=="assistant")continue;if(!("content"in f))continue;let H=QV(Q,Y),B={id:`claude:${z}:${H}:${Z}`,timestampMs:H,source:"claude"};if(!G||B.timestampMs>=G.timestampMs)G=B}return G}function fA(J,z="codex"){let Y=null,G=0;for(let Z of J.split(`
|
|
35
|
+
`)){G++;let X=XV(Z);if(!X||X.type!=="turn.completed")continue;let Q=QV(X,0),f={id:`codex:${z}:${Q}:${G}`,timestampMs:Q,source:"codex"};if(!Y||f.timestampMs>=Y.timestampMs)Y=f}return Y}function XV(J){let z=J.trim();if(!z)return null;try{let Y=JSON.parse(z);return qV(Y)?Y:null}catch{return null}}function QV(J,z){let Y=typeof J.timestamp==="string"?Date.parse(J.timestamp):Number.NaN;return Number.isFinite(Y)?Y:z}function qV(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var XA,y8,QA,x8,zq;var Yq=k(()=>{Q8();C8();kY();XA={listSessionFiles:(J)=>ZX(J),readFile:(J)=>ZV(J,"utf8")};y8=class y8 extends Jq{deps;vendor="claude";cache=new Map;constructor(J=XA){super();this.deps=J}async latestCompletion(J){let z=await this.deps.listSessionFiles(J),Y=null,G=new Map;for(let Z of z.slice(0,4)){let X=this.cache.get(Z.path),Q;if(X&&Z.mtimeMs>0&&X.mtimeMs===Z.mtimeMs)Q=X.marker;else{let f=await this.deps.readFile(Z.path).catch(()=>"");Q=qA(f,Z.path,Z.mtimeMs)}if(G.set(Z.path,{mtimeMs:Z.mtimeMs,marker:Q}),Q&&(!Y||Q.timestampMs>Y.timestampMs))Y=Q}return this.cache=G,Y}};QA={findLatestRollout:(J)=>g8(J),readFile:(J)=>ZV(J,"utf8")};x8=class x8 extends Jq{deps;vendor="codex";cache=null;constructor(J=QA){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=fA(Y,z.path);return this.cache={path:z.path,mtimeMs:z.mtimeMs,marker:G},G}};zq=class zq extends Jq{vendor;constructor(J){super();this.vendor=J}supportsCompletionMarkers(){return!1}async latestCompletion(){return null}}});function KA(J){return{vendor:J,builtin:!1,displayName:J,defaultCommand:[J],history:HA,detectAccount:async()=>({binary:{found:!1,error:"custom engine: kobe has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new eQ(J),createTurnDetector:()=>new zq(J)}}function t1(J){return QJ(J)?VA[J]:KA(J)}var HA,BA,jA,WA,VA;var kY=k(()=>{i1();YG();Q8();P7();C8();t7();GV();T8();Yq();HA={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async latestTranscriptMtimeForWorktree(){return 0}},BA={async listSessionIdsForWorktree(J){return[...await ZX(J)].sort((Y,G)=>Y.mtimeMs-G.mtimeMs).map((Y)=>Y.sessionId)},readHistory:(J)=>M7(J),latestTranscriptMtimeForWorktree:(J)=>L7(J)},jA={listSessionIdsForWorktree:(J)=>_7(J),readHistory:(J)=>r7(J),latestTranscriptMtimeForWorktree:(J)=>p7(J)},WA={listSessionIdsForWorktree:(J)=>JV(J),readHistory:(J)=>YV(J),latestTranscriptMtimeForWorktree:(J)=>zV(J)},VA={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:BA,detectAccount:(J)=>cQ(J),createHookAdapter:()=>new D8,createTurnDetector:()=>new y8},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:jA,detectAccount:(J)=>dQ(J),createHookAdapter:()=>new N8,createTurnDetector:()=>new x8},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:WA,detectAccount:(J)=>nQ(J),createHookAdapter:()=>new eQ("copilot"),createTurnDetector:()=>new zq("copilot")}}});async function _G(J,z){if(!z)return 0;return t1(J).history.latestTranscriptMtimeForWorktree(z)}var Gq=k(()=>{kY()});function fV(J){return typeof J==="string"&&UA.includes(J)}var jX=(J)=>J,$1="claude",UA;var rJ=k(()=>{UA=["backlog","in_progress","in_review","done","canceled","error"]});function Zq(J){return DA.includes(J)}function HV(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 DA;var Xq=k(()=>{DA=["session-start","turn-start","turn-complete","turn-failed","awaiting-input","session-end"]});function LA(){let J=process.env.KOBE_ENGINE_STATE_TTL_MS;if(J===void 0)return BV;let z=Number(J);return Number.isFinite(z)&&z>0?z:BV}class u8{bus;staleMs;now;livenessAt;activity=new Map;constructor(J,z=LA(),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 Z=HV(G?.state,z,Y),X=this.now(),Q={state:Z,detail:Y,at:X};if(Z!=="idle"&&Z!=="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 G;try{G=await this.livenessAt(J)}catch{G=void 0}let Z=this.activity.get(J);if(!Z||Z.at!==z)return;if(G!==void 0&&G>this.now()-this.staleMs){Z.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 BV=600000;var jV=k(()=>{Xq()});function WV(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 VV(J){let z=J.find((Z)=>Z.role==="user");if(!z)return"";let Y=z.blocks.filter((Z)=>Z.type==="text").map((Z)=>Z.text).join(" "),G=WV(Y);return G.length>0?Buffer.from(G,"utf8").toString("utf8"):G}async function pG(J,z=$1){if(!J)return"";let{history:Y}=t1(z),G=await Y.listSessionIdsForWorktree(J);for(let Z of G.slice(0,MA)){let X=VV(await Y.readHistory(Z));if(X)return X}return""}async function KV(J,z){if(!z)return"";try{return VV(await t1(J).history.readHistory(z))}catch{return""}}var MA=8;var qq=k(()=>{kY();rJ()});function UV(J){let z=String(J),Y=z.length-1;return S1.context.id+(Y?String.fromCharCode(96+Y):"")+z}function P8(J){S1.context=J}function FA(){return{...S1.context,id:S1.getNextContextId(),count:0}}function fG(J,z){let Y=U1,G=i0,Z=J.length===0,X=z===void 0?G:z,Q=Z?{owned:null,cleanups:null,context:null,owner:null}:{owned:null,cleanups:null,context:X?X.context:null,owner:X},f=Z?()=>J(()=>{throw Error("Dispose method must be an explicit argument to createRoot function")}):()=>J(()=>_1(()=>bY(Q)));Wz.afterCreateOwner&&Wz.afterCreateOwner(Q),i0=Q,U1=null;try{return bJ(f,!0)}finally{U1=Y,i0=G}}function a(J,z){z=z?Object.assign({},jq,z):jq;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(gV(Y),Wz.afterCreateSignal)Wz.afterCreateSignal(Y)}let G=(Z)=>{if(typeof Z==="function")if(f0&&f0.running&&f0.sources.has(Y))Z=Z(Y.tValue);else Z=Z(Y.value);return v8(Y,Z)};return[CV.bind(Y),G]}function DV(J,z,Y){let G=sG(J,z,!0,EJ,Y);if(oG&&f0&&f0.running)a1.push(G);else HG(G)}function Iz(J,z,Y){let G=sG(J,z,!1,EJ,Y);if(oG&&f0&&f0.running)a1.push(G);else HG(G)}function r0(J,z,Y){RV=xA;let G=sG(J,z,!1,EJ,Y),Z=KX&&wJ(KX);if(Z)G.suspense=Z;if(!Y||!Y.render)G.user=!0;WJ?WJ.push(G):HG(G)}function K0(J,z,Y){Y=Y?Object.assign({},jq,Y):jq;let G=sG(J,z,!0,0,Y);if(G.observers=null,G.observerSlots=null,G.comparator=Y.equals||void 0,oG&&f0&&f0.running)G.tState=EJ,a1.push(G);else HG(G);return CV.bind(G)}function NA(J){return J&&typeof J==="object"&&"then"in J}function Uq(J,z,Y){let G,Z,X;if(typeof z==="function")G=J,Z=z,X=Y||{};else G=!0,Z=J,X=z||{};let Q=null,f=E8,H=null,B=!1,V=!1,j="initialValue"in X,K=typeof G==="function"&&K0(G),L=new Set,[A,O]=(X.storage||a)(X.initialValue),[g,x]=a(void 0),[_,S]=a(void 0,{equals:!1}),[N,M]=a(j?"ready":"unresolved");if(S1.context){if(H=S1.getNextContextId(),X.ssrLoadFrom==="initial")f=X.initialValue;else if(S1.load&&S1.has(H))f=S1.load(H)}function I(T,q0,p,B0){if(Q===T){if(Q=null,B0!==void 0&&(j=!0),(T===f||q0===f)&&X.onHydrated)queueMicrotask(()=>X.onHydrated(B0,{value:q0}));if(f=E8,f0&&T&&B)f0.promises.delete(T),B=!1,bJ(()=>{f0.running=!0,r(q0,p)},!1);else r(q0,p)}return q0}function r(T,q0){bJ(()=>{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 i(){let T=KX&&wJ(KX),q0=A(),p=g();if(p!==void 0&&!Q)throw p;if(U1&&!U1.user&&T)DV(()=>{if(_(),Q){if(T.resolved&&f0&&B)f0.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=f0&&f0.running,q0==null||q0===!1){I(Q,_1(A));return}if(f0&&Q)f0.promises.delete(Q);let p,B0=f!==E8?f:_1(()=>{try{return Z(q0,{value:A(),refetching:T})}catch(L0){p=L0}});if(p!==void 0){I(Q,void 0,Bq(p),q0);return}else if(!NA(B0))return I(Q,B0,void 0,q0),B0;if(Q=B0,"v"in B0){if(B0.s===1)I(Q,B0.v,void 0,q0);else I(Q,void 0,Bq(B0.v),q0);return B0}return V=!0,queueMicrotask(()=>V=!1),bJ(()=>{M(j?"refreshing":"pending"),S()},!1),B0.then((L0)=>I(B0,L0,void 0,q0),(L0)=>I(B0,void 0,Bq(L0),q0))}Object.defineProperties(i,{state:{get:()=>N()},error:{get:()=>g()},loading:{get(){let T=N();return T==="pending"||T==="refreshing"}},latest:{get(){if(!j)return i();let T=g();if(T&&!Q)throw T;return A()}}});let J0=i0;if(K)DV(()=>(J0=i0,e(!1)));else e(!1);return[i,{refetch:(T)=>bA(J0,()=>e(T)),mutate:O}]}function Dq(J){return bJ(J,!1)}function _1(J){if(!rG&&U1===null)return J();let z=U1;U1=null;try{if(rG)return rG.untrack(J);return J()}finally{U1=z}}function SJ(J,z,Y){let G=Array.isArray(J),Z,X=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(X)return X=!1,Q;let H=_1(()=>z(f,Z,Q));return Z=f,H}}function e1(J){r0(()=>_1(J))}function k1(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 kA(J,z){if(WX||(WX=Symbol("error")),i0=sG(void 0,void 0,!0),i0.context={...i0.context,[WX]:[z]},f0&&f0.running)f0.sources.add(i0);try{return J()}catch(Y){DX(Y)}finally{i0=i0.owner}}function Lq(){return U1}function bA(J,z){let Y=i0,G=U1;i0=J,U1=null;try{return bJ(z,!0)}catch(Z){DX(Z)}finally{i0=Y,U1=G}}function SA(J){if(f0&&f0.running)return J(),f0.done;let z=U1,Y=i0;return Promise.resolve().then(()=>{U1=z,i0=Y;let G;if(oG||KX)G=f0||(f0={sources:new Set,effects:[],promises:new Set,disposed:new Set,queue:new Set,running:!0}),G.done||(G.done=new Promise((Z)=>G.resolve=Z)),G.running=!0;return bJ(J,!1),U1=i0=null,G?G.done:void 0})}function MV(J,z){let Y=sG(()=>_1(()=>{return Object.assign(J,{[gA]:!0}),J(z)}),void 0,!0,0);return Y.props=z,Y.observers=null,Y.observerSlots=null,Y.name=J.name,Y.component=J,HG(Y),Y.tValue!==void 0?Y.tValue:Y.value}function gV(J){if(i0){if(i0.sourceMap)i0.sourceMap.push(J);else i0.sourceMap=[J];J.graph=i0}if(Wz.afterRegisterGraph)Wz.afterRegisterGraph(J)}function Tz(J,z){let Y=Symbol("context");return{id:Y,Provider:uA(Y,z),defaultValue:J}}function wJ(J){let z;return i0&&i0.context&&(z=i0.context[J.id])!==void 0?z:J.defaultValue}function IA(J){let z=K0(J),Y=K0(()=>h8(z()),void 0,{name:"children"});return Y.toArray=()=>{let G=Y();return Array.isArray(G)?G:G!=null?[G]:[]},Y}function CV(){let J=f0&&f0.running;if(this.sources&&(J?this.tState:this.state))if((J?this.tState:this.state)===EJ)HG(this);else{let z=a1;a1=null,bJ(()=>Wq(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&&f0.sources.has(this))return this.tValue;return this.value}function v8(J,z,Y){let G=f0&&f0.running&&f0.sources.has(J)?J.tValue:J.value;if(!J.comparator||!J.comparator(G,z)){if(f0){let Z=f0.running;if(Z||!Y&&f0.sources.has(J))f0.sources.add(J),J.tValue=z;if(!Z)J.value=z}else J.value=z;if(J.observers&&J.observers.length)bJ(()=>{for(let Z=0;Z<J.observers.length;Z+=1){let X=J.observers[Z],Q=f0&&f0.running;if(Q&&f0.disposed.has(X))continue;if(Q?!X.tState:!X.state){if(X.pure)a1.push(X);else WJ.push(X);if(X.observers)kV(X)}if(!Q)X.state=EJ;else X.tState=EJ}if(a1.length>1e6){if(a1=[],OA)throw Error("Potential Infinite Loop Detected.");throw Error()}},!1)}return z}function HG(J){if(!J.fn)return;bY(J);let z=Kq;if(FV(J,f0&&f0.running&&f0.sources.has(J)?J.tValue:J.value,z),f0&&!f0.running&&f0.sources.has(J))queueMicrotask(()=>{bJ(()=>{f0&&(f0.running=!0),U1=i0=J,FV(J,J.tValue,z),U1=i0=null},!1)})}function FV(J,z,Y){let G,Z=i0,X=U1;U1=i0=J;try{G=J.fn(z)}catch(Q){if(J.pure)if(f0&&f0.running)J.tState=EJ,J.tOwned&&J.tOwned.forEach(bY),J.tOwned=void 0;else J.state=EJ,J.owned&&J.owned.forEach(bY),J.owned=null;return J.updatedAt=Y+1,DX(Q)}finally{U1=X,i0=Z}if(!J.updatedAt||J.updatedAt<=Y){if(J.updatedAt!=null&&"observers"in J)v8(J,G,!0);else if(f0&&f0.running&&J.pure){if(!f0.sources.has(J))J.value=G;f0.sources.add(J),J.tValue=G}else J.value=G;J.updatedAt=Y}}function sG(J,z,Y,G=EJ,Z){let X={fn:J,state:G,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:z,owner:i0,context:i0?i0.context:null,pure:Y};if(f0&&f0.running)X.state=0,X.tState=G;if(i0===null)console.warn("computations created outside a `createRoot` or `render` will never be disposed");else if(i0!==CA)if(f0&&f0.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(Z&&Z.name)X.name=Z.name;if(rG&&X.fn){let Q=X.fn,[f,H]=a(void 0,{equals:!1}),B=rG.factory(Q,H);k1(()=>B.dispose());let V,j=()=>SA(H).then(()=>{if(V)V.dispose(),V=void 0});X.fn=(K)=>{if(f(),f0&&f0.running){if(!V)V=rG.factory(Q,j);return V.track(K)}return B.track(K)}}return Wz.afterCreateOwner&&Wz.afterCreateOwner(X),X}function UX(J){let z=f0&&f0.running;if((z?J.tState:J.state)===0)return;if((z?J.tState:J.state)===VX)return Wq(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<Kq)){if(z&&f0.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 Z=J,X=Y[G+1];while((Z=Z.owner)&&Z!==X)if(f0.disposed.has(Z))return}if((z?J.tState:J.state)===EJ)HG(J);else if((z?J.tState:J.state)===VX){let Z=a1;a1=null,bJ(()=>Wq(J,Y[0]),!1),a1=Z}}}function bJ(J,z){if(a1)return J();let Y=!1;if(!z)a1=[];if(WJ)Y=!0;else WJ=[];Kq++;try{let G=J();return TA(Y),G}catch(G){if(!Y)WJ=null;a1=null,DX(G)}}function TA(J){if(a1){if(oG&&f0&&f0.running)yA(a1);else NV(a1);a1=null}if(J)return;let z;if(f0){if(!f0.promises.size&&!f0.queue.size){let{sources:G,disposed:Z}=f0;WJ.push.apply(WJ,f0.effects),z=f0.resolve;for(let X of WJ)"tState"in X&&(X.state=X.tState),delete X.tState;f0=null,bJ(()=>{for(let X of Z)bY(X);for(let X of G){if(X.value=X.tValue,X.owned)for(let Q=0,f=X.owned.length;Q<f;Q++)bY(X.owned[Q]);if(X.tOwned)X.owned=X.tOwned;delete X.tValue,delete X.tOwned,X.tState=0}LV(!1)},!1)}else if(f0.running){f0.running=!1,f0.effects.push.apply(f0.effects,WJ),WJ=null,LV(!0);return}}let Y=WJ;if(WJ=null,Y.length)bJ(()=>RV(Y),!1);else Wz.afterUpdate&&Wz.afterUpdate();if(z)z()}function NV(J){for(let z=0;z<J.length;z++)UX(J[z])}function yA(J){for(let z=0;z<J.length;z++){let Y=J[z],G=f0.queue;if(!G.has(Y))G.add(Y),oG(()=>{G.delete(Y),bJ(()=>{f0.running=!0,UX(Y)},!1),f0&&(f0.running=!1)})}}function xA(J){let z,Y=0;for(z=0;z<J.length;z++){let G=J[z];if(!G.user)UX(G);else J[Y++]=G}if(S1.context){if(S1.count){S1.effects||(S1.effects=[]),S1.effects.push(...J.slice(0,Y));return}P8()}if(S1.effects&&(S1.done||!S1.count))J=[...S1.effects,...J],Y+=S1.effects.length,delete S1.effects;for(z=0;z<Y;z++)UX(J[z])}function Wq(J,z){let Y=f0&&f0.running;if(Y)J.tState=0;else J.state=0;for(let G=0;G<J.sources.length;G+=1){let Z=J.sources[G];if(Z.sources){let X=Y?Z.tState:Z.state;if(X===EJ){if(Z!==z&&(!Z.updatedAt||Z.updatedAt<Kq))UX(Z)}else if(X===VX)Wq(Z,z)}}}function kV(J){let z=f0&&f0.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=VX;else G.state=VX;if(G.pure)a1.push(G);else WJ.push(G);G.observers&&kV(G)}}}function bY(J){let z;if(J.sources)while(J.sources.length){let Y=J.sources.pop(),G=J.sourceSlots.pop(),Z=Y.observers;if(Z&&Z.length){let X=Z.pop(),Q=Y.observerSlots.pop();if(G<Z.length)X.sourceSlots[Q]=G,Z[G]=X,Y.observerSlots[G]=Q}}if(J.tOwned){for(z=J.tOwned.length-1;z>=0;z--)bY(J.tOwned[z]);delete J.tOwned}if(f0&&f0.running&&J.pure)bV(J,!0);else if(J.owned){for(z=J.owned.length-1;z>=0;z--)bY(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(f0&&f0.running)J.tState=0;else J.state=0;delete J.sourceMap}function bV(J,z){if(!z)J.tState=0,f0.disposed.add(J);if(J.owned)for(let Y=0;Y<J.owned.length;Y++)bV(J.owned[Y])}function Bq(J){if(J instanceof Error)return J;return Error(typeof J==="string"?J:"Unknown error",{cause:J})}function OV(J,z,Y){try{for(let G of z)G(J)}catch(G){DX(G,Y&&Y.owner||null)}}function DX(J,z=i0){let Y=WX&&z&&z.context&&z.context[WX],G=Bq(J);if(!Y)throw G;if(WJ)WJ.push({fn(){OV(G,Y,z)},state:EJ});else OV(G,Y,z)}function h8(J){if(typeof J==="function"&&!J.length)return h8(J());if(Array.isArray(J)){let z=[];for(let Y=0;Y<J.length;Y++){let G=h8(J[Y]);if(Array.isArray(G))if(G.length<32768)z.push.apply(z,G);else for(let Z=0;Z<G.length;Z++)z.push(G[Z]);else z.push(G)}return z}return J}function uA(J,z){return function(G){let Z;return Iz(()=>Z=_1(()=>{return i0.context={...i0.context,[J]:G.value},IA(()=>G.children)}),void 0,z),Z}}function AV(J){for(let z=0;z<J.length;z++)J[z]()}function wA(J,z,Y={}){let G=[],Z=[],X=[],Q=0,f=z.length>1?[]:null;return k1(()=>AV(X)),()=>{let H=J()||[],B=H.length,V,j;return H[Vq],_1(()=>{let L,A,O,g,x,_,S,N,M;if(B===0){if(Q!==0)AV(X),X=[],G=[],Z=[],Q=0,f&&(f=[]);if(Y.fallback)G=[EA],Z[0]=fG((I)=>{return X[0]=I,Y.fallback()}),Q=1}else if(Q===0){Z=Array(B);for(j=0;j<B;j++)G[j]=H[j],Z[j]=fG(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]=Z[S],g[N]=X[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]=Z[V],g[j]=X[V],f&&(x[j]=f[V]),j=A[j],L.set(M,j);else X[V]();for(j=_;j<B;j++)if(j in O){if(Z[j]=O[j],X[j]=g[j],f)f[j]=x[j],f[j](j)}else Z[j]=fG(K);Z=Z.slice(0,Q=B),G=H.slice(0)}return Z});function K(L){if(X[j]=L,f){let[A,O]=a(j,{name:"index"});return f[j]=O,z(H[j],A)}return z(H[j])}}}function SV(J,z){if(PA){if(S1.context){let Y=S1.context;P8(FA());let G=MV(J,z||{});return P8(Y),G}}return MV(J,z||{})}function fq(){return!0}function w8(J){return!(J=typeof J==="function"?J():J)?{}:J}function vA(){for(let J=0,z=this.length;J<z;++J){let Y=this[J]();if(Y!==void 0)return Y}}function Mq(...J){let z=!1;for(let Q=0;Q<J.length;Q++){let f=J[Q];z=z||!!f&&jz in f,J[Q]=typeof f==="function"?(z=!0,K0(f)):f}if(RA&&z)return new Proxy({get(Q){for(let f=J.length-1;f>=0;f--){let H=w8(J[f])[Q];if(H!==void 0)return H}},has(Q){for(let f=J.length-1;f>=0;f--)if(Q in w8(J[f]))return!0;return!1},keys(){let Q=[];for(let f=0;f<J.length;f++)Q.push(...Object.keys(w8(J[f])));return[...new Set(Q)]}},hA);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:vA.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 Z={},X=Object.keys(G);for(let Q=X.length-1;Q>=0;Q--){let f=X[Q],H=G[f];if(H&&H.get)Object.defineProperty(Z,f,H);else Z[f]=H?H.value:void 0}return Z}function X1(J){let z="fallback"in J&&{fallback:()=>J.fallback};return K0(wA(()=>J.each,J.children,z||void 0),void 0,{name:"value"})}function Z0(J){let z=J.keyed,Y=K0(()=>J.when,void 0,{name:"condition value"}),G=z?Y:K0(Y,void 0,{equals:(Z,X)=>!Z===!X,name:"condition"});return K0(()=>{let Z=G();if(Z){let X=J.children;return typeof X==="function"&&X.length>0?_1(()=>X(z?Z:()=>{if(!_1(G))throw mA("Show");return Y()})):X}return J.fallback},void 0,{name:"value"})}function IV(J){let z;if(S1.context&&S1.load)z=S1.load(S1.getContextId());let[Y,G]=a(z,{name:"errored"});return Hq||(Hq=new Set),Hq.add(G),k1(()=>Hq.delete(G)),K0(()=>{let Z;if(Z=Y()){let X=J.fallback;if(typeof X!=="function"||X.length==0)console.error(Z);return typeof X==="function"&&X.length?_1(()=>X(Z,()=>G())):X}return kA(()=>J.children,G)},void 0,{name:"value"})}var S1,OA=!0,AA=(J,z)=>J===z,jz,RA,Vq,gA,jq,WX=null,RV,EJ=1,VX=2,CA,E8,i0=null,f0=null,oG=null,rG=null,U1=null,a1=null,WJ=null,Kq=0,Wz,tP,LV,KX,EA,PA=!1,hA,mA=(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.`,Hq,TV;var j1=k(()=>{S1={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return UV(this.context.count)},getNextContextId(){return UV(this.context.count++)}};jz=Symbol("solid-proxy"),RA=typeof Proxy==="function",Vq=Symbol("solid-track"),gA=Symbol("solid-dev-component"),jq={equals:AA},RV=NV,CA={},E8={},Wz={afterUpdate:null,afterCreateOwner:null,afterCreateSignal:null,afterRegisterGraph:null};[tP,LV]=a(!1);EA=Symbol("fallback");hA={get(J,z,Y){if(z===jz)return Y;return J.get(z)},has(J,z){if(z===jz)return!0;return J.has(z)},set:fq,deleteProperty:fq,getOwnPropertyDescriptor(J,z){return{configurable:!0,enumerable:!0,get(){return J.get(z)},set:fq,deleteProperty:fq}},ownKeys(J){return J.keys()}};TV={hooks:Wz,writeSignal:v8,registerGraph:gV};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 cA}from"child_process";function m8(J,z,Y,G){if(Y)return J+G.slowRetryMs;return z+Math.max(G.minIntervalMs,(z-J)*5)}function c8(J,z){return!J.inFlight&&z>=J.nextAllowedAt}function yV(J,z,Y=Math.random){let G=Math.max(0,Math.min(1,z)),Z=(Y()*2-1)*J*G;return Math.max(0,J+Z)}function xV(J,z,Y){if(z<=0)return Math.min(J,Y);return Math.min(J*2**z,Y)}function tG(J,z,Y,G){let Z=Date.now();if(!c8(J,Z))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=m8(Z,Date.now(),B,z),J.inFlight=!1,H&&!B)G(f)})(),!0}function zY(J,z,Y){return new Promise((G)=>{let Z="",X=!1,Q=(H)=>{if(X)return;X=!0,G({status:H,stdout:Z})},f=cA(J,z.slice(),{cwd:Y.cwd,stdio:["ignore","pipe","ignore"],env:Y.env,signal:Y.signal,killSignal:"SIGKILL"});f.stdout?.on("data",(H)=>{Z+=String(H)}),f.on("error",()=>Q(null)),f.on("close",(H)=>Q(H))})}var eG=()=>{};function dA(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 nA(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 iA(J){if(!J||J.length===0)return"none";let z=!1,Y=!1;for(let G of J){let Z=nA(G);if(Z==="failing")return"failing";if(Z==="pending")z=!0;else if(Z==="passing")Y=!0}if(z)return"pending";if(Y)return"passing";return"unknown"}function EV(J,z){if(!J||typeof J.number!=="number")return null;return{provider:"github",lifecycle:dA(J.state,J.reviewDecision),checkState:iA(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 Oq(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 Fq(J,z){return z.some((Y)=>J.includes(Y))}function d8(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(Fq(z,_A))return{kind:"empty"};if(Fq(z,lA))return{kind:"error",error:"no-remote"};if(Fq(z,$A))return{kind:"error",error:"auth"};if(Fq(z,aA))return{kind:"error",error:"network"};return{kind:"empty"}}function LX(J,z,Y,G,Z=Math.random){let X=(f)=>Y+yV(f,G.jitterRatio,Z);if(J.kind==="pr")return{nextAllowedAt:X(J.settled?G.settledMs:G.tickMs),failures:0};if(J.kind==="empty")return{nextAllowedAt:X(G.noPrMs),failures:0};if(J.error==="no-remote")return{nextAllowedAt:X(G.noRemoteMs),failures:0};let Q=z+1;return{nextAllowedAt:X(xV(G.failureBaseMs,Q-1,G.failureCapMs)),failures:Q}}var uV="number,url,title,state,baseRefName,headRefName,reviewDecision,mergeable,statusCheckRollup",lA,$A,aA,_A;var n8=k(()=>{eG();lA=["none of the git remotes","no git remote","to use github cli in a github repository","not a github repository"],$A=["gh auth login","authentication required","not logged in","http 401","bad credentials","requires authentication"],aA=["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"],_A=["no pull requests found","no open pull requests","no pull request found"]});var i8,l8,$8,a8="DIRTY_WORKTREE",_8,p8;var r8=k(()=>{i8=class i8 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"}};l8=class l8 extends Error{constructor(J){super(`task not found: ${J}`);this.name="TaskNotFoundError"}};$8=class $8 extends Error{constructor(){super("cannot delete a main task; remove the repo from saved repos instead");this.name="CannotDeleteMainTaskError"}};_8=class _8 extends Error{taskId;constructor(J){super(`${a8}: task ${J} worktree has uncommitted or untracked changes`);this.taskId=J;this.name="DirtyWorktreeError"}};p8=class p8 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 wV;var PV=k(()=>{wV=["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 hV(J){let z=J.auth,Y=z.kind==="key"?{kind:"key",keyPath:z.keyPath}:{kind:"password",getPassword:()=>SQ(z.keychainRef)};return{host:J.host,user:J.user,port:J.port,auth:Y,controlPath:gQ(J.host,J.user,J.port)}}function JZ(J){let z=rz(J);if(!z)return new bQ;return new mG(hV(z))}function YY(J){for(let z of Object.values(oH()))if(J===z.basePath||J.startsWith(`${z.basePath}/`))return new mG(hV(z));return new bQ}function vV(J){return J&&l1(J)?J:void 0}function zZ(J){let z=YY(J);return z.isRemote||z.existsSync(J)}function w1(J){return YY(J).isRemote?bz():J}var Vz=k(()=>{p1();F1();dH();lH()});import{createHash as pA}from"crypto";import cV from"fs";import PJ from"path";function dV(J){if(!PJ.isAbsolute(J))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${J}`);return PJ.join(qJ(),rA,JR(J))}function nV(J){if(!PJ.isAbsolute(J))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${J}`);return[dV(J),...tA.map((z)=>PJ.join(J,z))]}function iV(J,z){if(!z||/[/\\\0]/.test(z))throw Error(`worktreePathFor: invalid slug: ${JSON.stringify(z)}`);return PJ.join(dV(J),z)}async function lV(J){if(l1(J)){let Y=rz(J)?.basePath;if(!Y)return[];return JZ(J).readdir(aV(Y))}let z=new Set;for(let Y of nV(J))try{for(let G of cV.readdirSync(Y,{withFileTypes:!0}))if(G.isDirectory())z.add(G.name)}catch{}return[...z]}function o8(J,z){if(!PJ.isAbsolute(J)||!PJ.isAbsolute(z))return null;let Y=mV(z);for(let G of nV(J)){let Z=mV(G),X=PJ.relative(Z,Y);if(X!==""&&!X.startsWith("..")&&!PJ.isAbsolute(X))return G}return null}function $V(J,z){return o8(J,z)!==null}function aV(J){return`${eA(J)}/.kobe/worktrees`}function _V(J,z){if(!z||/[/\\\0]/.test(z))throw Error(`remoteWorktreePathFor: invalid slug: ${JSON.stringify(z)}`);return`${aV(J)}/${z}`}function eA(J){return J.length>1&&J.endsWith("/")?J.replace(/\/+$/,""):J}function mV(J){try{return cV.realpathSync(J)}catch{return PJ.resolve(J)}}function JR(J){let Y=(PJ.basename(J)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",G=pA("sha1").update(PJ.resolve(J)).digest("hex").slice(0,12);return`${Y}-${G}`}var rA="worktrees",oA=".kobe/worktrees",sA=".claude/worktrees",tA;var s8=k(()=>{p1();Vz();F1();tA=[oA,sA]});class t8{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??wV,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((Z)=>!z.has(Z));if(Y.length>0){let Z=Y[Math.floor(this.random()*Y.length)];return this.addPending(J,Z),Z}let G=this.pool[Math.floor(this.random()*this.pool.length)];for(let Z=2;;Z++){let X=`${G}-v${Z}`;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 lV(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 pV=k(()=>{PV();s8()});var oV={};f1(oV,{PLACEHOLDER_TASK_TITLE:()=>yz,Orchestrator:()=>Aq});import{realpathSync as zR}from"fs";import{basename as YR,resolve as GR}from"path";function rV(J){return rz(J)?.basePath??J}class Aq{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 t8((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]=a(this.store.list());this.tasksAcc=z,this.setTasks=(X)=>Y(()=>X);let[G,Z]=a(null);this.activeTaskAcc=G,this.setActiveTaskSig=(X)=>Z(()=>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??yz).trim()||yz,Y=await this.store.create({repo:J.repo,title:z,branch:J.branch??"",worktreePath:"",status:"backlog",kind:"task",vendor:J.vendor??$1,...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),G=this.store.list().find((Q)=>Q.kind==="main"&&MX(Q.repo).key===Y);if(G)return G;let Z=this.mainTaskLocks.get(Y);if(Z)return Z;let X=(async()=>{let Q=xJ(g1("lastSelectedVendor"),uJ());return await this.store.create({repo:z,title:ZR(z),branch:"",worktreePath:rV(z),status:"backlog",kind:"main",vendor:Q})})();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 rV(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),Z;try{Z=await this.worktrees.createForTask({repo:J.repo,slug:z,branch:Y,baseRef:G})}catch(X){throw this.slugs.cancel(J.repo,z),X}try{await this.store.update(J.id,{worktreePath:Z.path,branch:Y})}catch(X){throw await this.rollbackWorktree(Z.path),this.slugs.cancel(J.repo,z),X}return this.slugs.commit(J.repo,z),this.pendingBaseRefs.delete(J.id),Z.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(yz,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((Z)=>(Z.kind??"task")!=="main"&&Z.archived===Y.archived&&(Z.pinned??!1)===(Y.pinned??!1)).map((Z)=>String(Z.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 i8(Y.status,z,Y.id);await this.store.update(Y.id,{status:z})}async setPRStatus(J,z){let Y=this.requireTask(J);if(Oq(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 $8;let G=z?.force===!0;if(Y.worktreePath){if(!G){let Z=!1;try{Z=await this.worktrees.isDirty(Y.worktreePath)}catch{}if(Z)throw new _8(Y.id)}try{await this.worktrees.remove(Y.worktreePath,{force:G})}catch(Z){throw new p8(Y.id,Z)}}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)pH(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((G)=>G.worktreePath).map((G)=>YZ(G.worktreePath)));return z.filter((G)=>!Y.has(YZ(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=YZ(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&&YZ(f.worktreePath)===z);if(Y){if(J.ifExists==="return")return Y;throw Error(`adoptWorktree: ${J.worktreePath} is already adopted as a task`)}let Z=(await this.worktrees.listAll(J.repo)).find((f)=>YZ(f.path)===z);if(!Z)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()||Z.branch,Q=(J.title??YR(Z.path)).trim()||yz;return this.store.create({repo:J.repo,title:Q,branch:X,worktreePath:Z.path,status:"backlog",kind:"task",vendor:J.vendor??$1})}pendingBaseRefs=new Map;adoptLocks=new Map;requireTask(J){let z=this.store.get(J);if(!z)throw new l8(String(J));return z}}function ZR(J){let z=J.split(/[/\\]/).filter(Boolean);return z.length>0?z[z.length-1]??J:J}function MX(J){let z=_z(J);return{repo:z,key:l1(z)?z:YZ(z)}}function YZ(J){try{return zR(J)}catch{return GR(J)}}var yz="(new task)";var FX=k(()=>{j1();n8();F1();rJ();i1();r8();pV()});function GZ(J,z,Y){if(!z)return J;let G=JZ(z);return G.ensureReady(),G.wrapCommand(J,{tty:!0,cwd:Y})}function JJ(){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 OX="@kobe_remote";var BG=k(()=>{Vz();Bz()});function Rq(){return az(jG,!1)}var jG="experimental.autoStatus";var AX=k(()=>{tY()});function e8(){return az(WG,!1)}var WG="experimental.dispatcher";var gq=k(()=>{tY()});import{randomUUID as XR}from"crypto";function Kz(J){return`engineCommand.${J}`}function Uz(J){return`engineName.${J}`}function VG(J){return g1(Uz(J))?.trim()||JB[J]||J}function RX(J){return t1(J??"claude").defaultCommand}function QR(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 oJ(J,z){let Y=J??"claude",G=g1(Kz(Y))?.trim(),Z=(()=>{if(G){let X=QR(G);if(X.length>0)return X}return RX(Y)})();return qR(Z,Y,z)}function qR(J,z,Y){let G=Y?.trim();if(!G)return J;let Z=z??"claude";if(!t1(Z).effortLevels?.includes(G))return J;if(Z==="codex")return[...J,"-c",`model_reasoning_effort=${G}`];return J}function ZZ(J,z){if((z??"claude")!=="claude")return{argv:J,sessionId:null};if(J.some((G)=>fR.has(G)))return{argv:J,sessionId:null};let Y=XR();return{argv:[...J,"--session-id",Y],sessionId:Y}}function KG(){let J=(z)=>/^[A-Za-z0-9_/.:=-]+$/.test(z)?z:`'${z.replace(/'/g,"'\\''")}'`;try{return[...b1(),"api"].map(J).join(" ")}catch{return"kobe api"}}function HR(J,z=KG()){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(`
|
|
36
|
+
`)}function BR(J,z=KG()){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(`
|
|
37
|
+
`)}function jR(J,z=KG(),Y={}){let G=[];if((Y.status??Rq)())G.push(HR(J,z));if((Y.notes??e8)())G.push(BR(J,z));return G.length>0?G.join(`
|
|
38
|
+
|
|
39
|
+
`):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 Z=jR(Y,KG(),G);if(!Z)return J;return[...J,"--append-system-prompt",Z]}function WR(J,z=KG()){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(`
|
|
40
|
+
`)}function Nq(J,z,Y,G=e8){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",WR(Y)]}var JB,fR;var sJ=k(()=>{JY();kY();AX();gq();F1();i1();JB=Object.fromEntries(_Y.map((J)=>[J,t1(J).displayName]));fR=new Set(["--session-id","--resume","-r","--continue","-c","--from-pr"])});import{spawnSync as VR}from"child_process";function sV(J,z){if(J==="darwin")return"pbcopy";if(J==="linux"){for(let Y of KR)if(z(Y.binary))return Y.command;return null}return null}function eV(J){let z=[["set-option","-g","set-clipboard","on"]];if(J)for(let Y of UR)for(let G of DR)z.push(["bind-key","-T",Y,G,"send-keys","-X","copy-pipe-and-cancel",J]);return z}var KR,tV=(J)=>{try{let z=process.platform==="win32"?"where":"which";return VR(z,[J],{encoding:"utf8"}).status===0}catch{return!1}},UR,DR;var J5=k(()=>{KR=[{binary:"wl-copy",command:"wl-copy"},{binary:"xclip",command:"xclip -selection clipboard -in"},{binary:"xsel",command:"xsel --clipboard --input"}];UR=["copy-mode","copy-mode-vi"],DR=["MouseDragEnd1Pane","y","Enter"]});import{existsSync as z5,readFileSync as LR}from"fs";function Y5(){UG=null}function MR(){let J=CW();if(z5(J))return{canonical:J,found:J};let z=J.replace(/\.yaml$/,".yml");if(z5(z))return{canonical:J,found:z};return{canonical:J,found:null}}function kq(){if(UG)return UG;let{canonical:J,found:z}=MR();if(!z)return UG={path:J,exists:!1,doc:null,warnings:[]},UG;let Y=[],G=null;try{let Z=LR(z,"utf8");G=Bun.YAML.parse(Z)}catch(Z){let X=Z instanceof Error?Z.message:String(Z);Y.push(`could not read/parse ${z}: ${X}`)}return UG={path:J,exists:!0,doc:G,warnings:Y},UG}var UG=null;var zB=k(()=>{p1()});function XZ(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 NR(J,z){let Y=J.trim().toLowerCase();if(!Y)return{error:"empty chord"};let G=Y.split("+"),Z=G.pop()??"";if(Z===""&&G.length>0){if(Z="+",G[G.length-1]==="")G.pop()}if(!Z)return{error:`"${J}": no key after the modifiers`};let X=new Set;for(let H of G){let B=AR[H];if(!B)return{error:`"${J}": unknown modifier "${H}" (use ctrl / cmd / alt / shift)`};X.add(B)}if(Z=RR[Z]??Z,X.has("shift")&&Z.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=CR.filter((H)=>X.has(H)).join("+"),f=Q?`${Q}+${Z}`:Z;if(Z.length>1&&!gR.has(Z))return{chord:f,warning:`"${J}": unrecognized key name "${Z}" \u2014 the chord may never fire`};return{chord:f}}function bq(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function kR(J){if(J==="darwin")return["darwin","macos","mac"];if(J==="win32")return["win32","windows"];return[J]}function bR(J){if(!bq(J))return null;let z=J.bindings;if(bq(z))return z;return J}function Sq(J,z,Y){let G=[];if(J===null||J===void 0)return{entries:[],warnings:G};if(!bq(J))return{entries:[],warnings:["config root must be a YAML mapping (e.g. a top-level `bindings:` key)"]};let Z=new Map,X=[];if(J.bindings!==void 0)if(bq(J.bindings))X.push(J.bindings);else G.push("`bindings:` must be a mapping of id \u2192 chord(s)");for(let Q of kR(z)){let f=J[Q];if(f===void 0)continue;let H=bR(f);if(H)X.push(H);else G.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){Z.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=NR(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}Z.set(f,V)}return{entries:Array.from(Z,([Q,f])=>({id:Q,keys:f})),warnings:G}}function SR(J,z){return J===z||J==="global"||z==="global"}function G5(J,z){let Y=[],G=[];for(let Z of z){let X=J.find((j)=>j.id===Z.id);if(!X){Y.push(`${Z.id}: unknown binding id (press F1 in kobe for the full list)`);continue}let Q=YB[Z.id];if(Q){Y.push(`${Z.id}: not customizable \u2014 ${Q}`);continue}if(X.keys.length===0){Y.push(`${Z.id}: not customizable \u2014 the key is handled outside the keymap (doc-only row)`);continue}let f=FR[Z.id];if(f&&Z.keys.length>0){let j=f.validateCount(Z.keys.length);if(j){Y.push(`${Z.id}: ${j} \u2014 keeping the default`);continue}}let H=Z.keys.filter((j)=>{if(j.length===1&&OR.has(X.scope))return Y.push(`${Z.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&&Z.keys.length>0){Y.push(`${Z.id}: no chords survived validation \u2014 keeping the default`);continue}if(f&&H.length!==Z.keys.length){Y.push(`${Z.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("/");G.push({id:Z.id,keys:H,defaultKeys:B})}for(let Z of G)for(let X of Z.keys){let Q=J.find((f)=>f.id===Z.id);if(!Q)continue;for(let f of J){if(f.id===Z.id)continue;if(!f.keys.includes(X))continue;if(!SR(Q.scope,f.scope))continue;Y.push(`${Z.id}: "${X}" also fires ${f.id} (${f.scope} scope) \u2014 last registration wins; consider a different chord`)}}return{applied:G,warnings:Y}}var YB,FR,OR,AR,RR,gR,CR;var Iq=k(()=>{YB={"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)"};FR={"sidebar.nav":XZ("down","up"),"files.nav":XZ("down","up"),"sidebar.search.nav":XZ("down","up"),"files.hierarchy":XZ("collapse","expand"),"sidebar.view":XZ("previous view","next view"),"files.tab":XZ("previous tab","next tab")},OR=new Set(["global","workspace","terminal"]),AR={ctrl:"ctrl",control:"ctrl",ctl:"ctrl",cmd:"cmd",command:"cmd",meta:"cmd",super:"cmd",win:"cmd",alt:"alt",option:"alt",opt:"alt",shift:"shift"},RR={esc:"escape",spacebar:"space",pgup:"pageup",pgdn:"pagedown",pgdown:"pagedown"},gR=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}`)]),CR=["ctrl","cmd","alt","shift"]});function QZ(J){return J in Z5}function MG(J,z){let Y=J.split("+"),G=Y.pop()??"";if(G===""&&Y.length>0){if(G="+",Y[Y.length-1]==="")Y.pop()}let Z=new Set(Y);if(Z.has("cmd"))return{error:`"${J}": the Command key never reaches tmux \u2014 use ctrl/alt/shift`};let X;if(G.length===1)X=Z.has("shift")?G.toUpperCase():G;else{let H=TR[G];if(!H)return{error:`"${J}": tmux can't bind the key "${G}"`};X=H}let Q=/^f\d+$/.test(G);if(Z.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(Z.has("ctrl"))f+="C-";if(Z.has("alt"))f+="M-";if(Z.has("shift"))f+="S-";return{key:f+X}}function Q5(){let J={};for(let[Y,G]of Object.entries(LG)){let Z=MG(G,{allowBare:QZ(Y)});if("error"in Z)throw Error(`default tmux chord for ${Y} failed to translate: ${Z.error}`);J[Y]={chord:G,key:Z.key}}let z=SY.map((Y)=>{let G=MG(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 GB(J){let z=Q5(),Y=new Set;for(let G of J){if(!G.id.startsWith("tmux."))continue;if(G.id===xz){if(G.keys.length===0){z.focus=[null,null,null,null],Y.add(xz);continue}if(G.keys.length!==SY.length){z.warnings.push(`${xz}: 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=MG(B);if("error"in V){z.warnings.push(`${xz}: ${V.error} \u2014 keeping the default`),H=!1;break}f.push({chord:B,key:V.key})}if(!H)continue;z.focus=f,Y.add(xz);continue}if(!(G.id in LG)){z.warnings.push(`${G.id}: unknown tmux binding id`);continue}let Z=G.id;if(G.keys.length===0){z.binds[Z]=null,Y.add(Z);continue}if(G.keys.length>1)z.warnings.push(`${Z}: tmux bindings take ONE chord \u2014 using "${G.keys[0]}", ignoring the rest`);let X=G.keys[0],Q=MG(X,{allowBare:QZ(Z)});if("error"in Q){z.warnings.push(`${Z}: ${Q.error} \u2014 keeping the default`);continue}if(X!==LG[Z])Y.add(Z);z.binds[Z]={chord:X,key:Q.key}}return z.overridden=Y,z}function ZB(J){return J.startsWith("tmux.")?{allowShiftCharacter:!0}:{}}function q5(){DG=null}function Tq(){if(DG)return DG;let J=kq();if(!J.exists||J.doc===null)return DG=Q5(),DG;let z=Sq(J.doc,process.platform,{chordOptsFor:ZB}),Y=z.warnings.filter((Z)=>Z.startsWith("tmux.")),G=GB(z.entries);G.warnings=[...Y,...G.warnings];for(let Z of G.warnings)console.warn(`[kobe/keybindings] ${Z}`);return DG=G,DG}var IR,Z5,X5,LG,xz="tmux.focus",SY,TR,DG=null;var yq=k(()=>{zB();Iq();IR={"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"},Z5={"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"},X5=["F6","F7","F8","F9","F10","F11"],LG={...IR,...Z5};SY=["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],TR={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 gX(J,z){let Y=null;for(let Z=0;Z<24;Z++){let X=await qZ(J);if(X){if(!z)return{pane:X,ready:!0};let Q=(await fZ(X)).trim();if(Q.length>0&&Q===Y)return{pane:X,ready:!0};Y=Q}await f5(250)}return{pane:await qZ(J)||await XB(J),ready:!1}}async function CX(J,z){let Y=`kobe-api-${J.replace(/[^A-Za-z0-9]/g,"")}`;await l0(["set-buffer","-b",Y,"--",z]),await l0(["paste-buffer","-p","-d","-b",Y,"-t",J]),await f5(yR),await NX(J,"Enter")}async function H5(J,z){let{pane:Y}=await gX(J,!0);if(!Y)return;await CX(Y,z.text)}var f5=(J)=>new Promise((z)=>setTimeout(z,J)),yR=150;var xq=k(()=>{P1()});function B5(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 HZ;var uq=k(()=>{HZ={$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 BZ;var Eq=k(()=>{BZ={$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 jZ;var wq=k(()=>{jZ={$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 WZ;var Pq=k(()=>{WZ={$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 VZ;var hq=k(()=>{VZ={$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 KZ;var vq=k(()=>{KZ={$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 UZ;var mq=k(()=>{UZ={$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"}}}});var j5;var W5=k(()=>{uq();Eq();wq();Pq();hq();vq();mq();j5={claude:HZ,conductor:BZ,nord:WZ,opencode:VZ,dracula:jZ,tokyonight:UZ,"osaka-jade":KZ}});function mR(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,Z,X]=Y;return`#${G}${G}${Z}${Z}${X}${X}`.toLowerCase()}return`#${Y.slice(0,6)}`.toLowerCase()}function V5(J,z,Y="dark"){let G=J.defs??{};function Z(Q,f){if(typeof Q==="string"){if(Q==="transparent"||Q==="none")return null;if(Q.startsWith("#"))return mR(Q);if(f.includes(Q))return null;let B=G[Q]??J.theme[Q];if(B===void 0)return null;return Z(B,[...f,Q])}if(!Q||typeof Q!=="object")return null;let H=Q[Y];return typeof H==="string"?Z(H,f):null}let X=J.theme[z];if(X===void 0)return null;return Z(X,[z])}function cq(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function dq(J){if(!cq(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(!cq(Y))return{ok:!1,reason:"`theme` must be an object map"};if("defs"in z&&z.defs!==void 0){if(!cq(z.defs))return{ok:!1,reason:"`defs` must be an object map"};for(let[G,Z]of Object.entries(z.defs))if(typeof Z!=="string")return{ok:!1,reason:`defs.${G} must be a string (hex like "#abc" or a ref name)`}}for(let[G,Z]of Object.entries(Y)){if(typeof Z==="string")continue;if(!cq(Z))return{ok:!1,reason:`theme.${G} must be a string or a { dark, light } object (got ${Z===null?"null":Array.isArray(Z)?"array":typeof Z})`};let X=Z;if(typeof X.dark!=="string")return{ok:!1,reason:`theme.${G}.dark must be a string`};if(typeof X.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 QB=()=>{};import{readFileSync as cR,readdirSync as dR}from"fs";import{join as K5}from"path";function DZ(){return K5(qJ(),"themes")}function kX(){let J=DZ(),z;try{z=dR(J)}catch{return[]}let Y=[];for(let G of z){if(!G.endsWith(".json"))continue;let Z=K5(J,G),X;try{let H=cR(Z,"utf8");X=JSON.parse(H)}catch(H){let B=H instanceof Error?H.message:String(H);console.warn(`[kobe] skipping user theme ${Z}: invalid JSON \u2014 ${B}`);continue}let Q=dq(X);if(!Q.ok){console.warn(`[kobe] skipping user theme ${Z}: ${Q.reason}`);continue}let f=G.slice(0,-5);Y.push({name:f,theme:Q.theme})}return Y}var nq=k(()=>{p1();QB()});import{readFileSync as nR}from"fs";function lR(){try{let J=JSON.parse(nR(lJ(),"utf8")),z=typeof J.activeTheme==="string"&&J.activeTheme?J.activeTheme:"claude",Y=typeof J.focusAccent==="string"&&iR.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 $R(J){return kX().find((Y)=>Y.name===J)?.theme??j5[J]??null}function Dz(J,...z){for(let Y of z){let G=V5(J,Y);if(G)return G}return null}function U5(J,z){let Y=Dz(J,"text"),G=Dz(J,"background"),Z=Dz(J,"textMuted","text"),X=Dz(J,"backgroundPanel","background"),Q=Dz(J,"backgroundElement","backgroundPanel","background"),f=Dz(J,"backgroundMenu","backgroundElement","backgroundPanel","background"),H=Dz(J,"selectedListItemText","background"),B=Dz(J,z,"primary","borderActive","border","text");return{border:Dz(J,"border","text"),activeBorder:B,statusBg:X,statusFg:Z,statusMutedFg:Z,windowFg:Z,currentWindowBg:Q,currentWindowFg:B,activityFg:Dz(J,"info","primary","text"),bellFg:Dz(J,"warning","error","primary","text"),messageBg:f,messageFg:Y,messageCommandFg:B,modeBg:B,modeFg:H??G}}function tJ(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 L5(J){let z=tJ({bg:J.statusBg,fg:J.statusFg}),Y=tJ({bg:J.statusBg,fg:J.statusMutedFg}),G=tJ({bg:J.statusBg,fg:J.windowFg});return[{key:"border",option:"pane-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:tJ({fg:J.border})},{key:"active",option:"pane-active-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:tJ({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:tJ({bg:J.currentWindowBg,fg:J.currentWindowFg,attrs:["bold"]})},{key:"activity-window",option:"window-status-activity-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:tJ({bg:J.statusBg,fg:J.activityFg})},{key:"bell-window",option:"window-status-bell-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:tJ({bg:J.statusBg,fg:J.bellFg,attrs:["bold"]})},{key:"last-window",option:"window-status-last-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:tJ({bg:J.statusBg,fg:J.statusFg})},{key:"message",option:"message-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:tJ({bg:J.messageBg,fg:J.messageFg})},{key:"message-command",option:"message-command-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:tJ({bg:J.messageBg,fg:J.messageCommandFg,attrs:["bold"]})},{key:"mode",option:"mode-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:tJ({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 aR(J){let z=new Set(J.marker.split(",").map((X)=>X.trim()).filter(Boolean)),Y=[],G=[];for(let X of L5(J.hexes))if(X.value){if((J.current[X.key]??"")!==X.value)Y.push(["set-option",X.setFlag,X.option,X.value]);G.push(X.key)}else if(z.has(X.key))Y.push(["set-option",X.unsetFlag,X.option]);let Z=G.join(",");if(Z!==J.marker)Y.push(Z?["set-option","-g",qB,Z]:["set-option","-gu",qB]);return Y}async function D5(J){let{code:z,stdout:Y}=await $0(J);return z===0?Y.trim():""}async function FG(){try{let J=lR(),z=J.enabled?$R(J.themeName):null,Y=z?U5(z,J.focusAccentSlot):U5({theme:{}},J.focusAccentSlot),G=L5(Y),[Z,...X]=await Promise.all([D5(["show-options","-gqv",qB]),...G.map((H)=>D5(["show-options",H.showFlag,H.option]))]),Q=Object.fromEntries(G.map((H,B)=>[H.key,X[B]??""])),f=aR({marker:Z,current:Q,hexes:Y});if(f.length>0)await d1(f)}catch{}}var qB="@kobe_border_theme",iR;var iq=k(()=>{p1();P1();W5();nq();iR=["primary","success","info"]});function M5(){return az(lq,!0)}function $q(){return az(F5,!1)}function O5(J){PW(F5,J)}var lq="zen.keepTasks",F5="zen.active";var fB=k(()=>{tY()});var aq={};f1(aq,{recordGen:()=>IY,isLatestGen:()=>N5,genAgeMs:()=>eR,coalesceLayoutWork:()=>Jg,RESIZE_GUARD_MS:()=>tR,LAYOUT_COALESCE_MS:()=>g5});import{createHash as _R,randomUUID as pR}from"crypto";import{mkdirSync as rR,readFileSync as A5,renameSync as oR,writeFileSync as sR}from"fs";import{join as R5}from"path";function C5(){return R5(qJ(),"layout-coord")}function HB(J,z){let Y=_R("sha1").update(J).digest("hex").slice(0,16);return R5(C5(),`${Y}.${z}`)}function IY(J,z){let Y=pR();try{rR(C5(),{recursive:!0});let G=HB(J,z),Z=`${G}.${Y}.tmp`;sR(Z,`${Date.now()}
|
|
41
|
+
${Y}`),oR(Z,G)}catch{}return Y}function N5(J,z,Y){try{return A5(HB(J,z),"utf8").split(`
|
|
42
|
+
`)[1]?.trim()===Y}catch{return!0}}function eR(J,z,Y=Date.now()){try{let G=Number.parseInt(A5(HB(J,z),"utf8").split(`
|
|
43
|
+
`)[0]??"",10);return Number.isFinite(G)?Y-G:Number.POSITIVE_INFINITY}catch{return Number.POSITIVE_INFINITY}}async function Jg(J,z,Y,G=g5){let Z=IY(J,z);if(G>0)await new Promise((X)=>setTimeout(X,G));if(!N5(J,z,Z))return;await Y()}var g5=120,tR=400;var LZ=k(()=>{p1()});function Yg(J){let z=[];for(let Y of J.split(`
|
|
44
|
+
`)){let G=Y.trim();if(!G)continue;let[Z,X,Q,f,H]=G.split("\t");if(!Z||!X||!Q)continue;let B=Number.parseInt(H?.trim()??"",10);z.push({windowId:Z.trim(),paneId:X.trim(),role:Q.trim(),version:f?.trim()??"",...Number.isFinite(B)?{paneWidth:B}:{}})}return z}function Gg(J){let z=J.indexOf("-t");return z>=0&&z+1<J.length?J[z+1]??null:null}function Zg(J,z){return J.filter((Y)=>{let G=Gg(Y);return G===null||z.has(G)})}function k5(J,z){let Y=new Map;for(let Z of J){let X=Y.get(Z.windowId)??[];X.push(Z),Y.set(Z.windowId,X)}let G=[];for(let Z of Y.values()){let X=Z.find((B)=>B.role==="claude")?.paneId,Q=Z.find((B)=>B.role==="tasks"),f=Z.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:X&&(z.vendorChanged||f?.version!==z.currentVersion);if(f&&H)G.push({role:"ops",paneId:f.paneId,claudePaneId:X??null})}return G}async function _q(J){let{code:z,stdout:Y}=await $0(["list-panes","-s","-t",`=${J}`,"-F",zg]);if(z!==0)return null;return Yg(Y)}async function b5(J,z){if(z.length===0)return;let Y=await _q(J),G=Y?Zg(z,new Set(Y.map((Z)=>Z.paneId))):z;if(G.length>0)await d1(G)}function S5(J,z){let Y=b1(),G=JJ(),Z=[];for(let X of J){let Q=X.role==="tasks"?CY(Y,{initialTaskId:z.taskId}):$G({cwd:z.cwd,taskId:z.taskId,claudePaneId:X.claudePaneId,cliInvocation:Y,vendor:z.vendor});Z.push(["respawn-pane","-k","-t",X.paneId,"-c",w1(z.cwd),kJ(G+Q)],["set-option","-p","-t",X.paneId,"@kobe_role",X.role],["set-option","-p","-t",X.paneId,Lz,p0])}return Z}function Xg(J,z){if(J===0)return"no-engine-pane";return z===0?"switched":"respawn-failed"}async function I5(J,z,Y,G,Z){let X=await _q(J);if(!X)return"no-engine-pane";let Q=X.filter((V)=>V.role==="claude");if(Q.length===0)return"no-engine-pane";let f=w1(z),H=[];for(let V of Q){let j=ZZ(Y,Z),K=kJ(GZ(NJ(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,uz,j.sessionId]:["set-window-option","-u","-t",V.paneId,uz])}let B=await d1(H);return Xg(Q.length,B)}async function T5(){return(await Ez()).rightColumnResizeArgs}async function BB(J,z={}){let{tasksWidth:Y,rightColumnResizeArgs:G}=await Ez(),Z=await _q(J);if(!Z)return{rows:null,commands:[]};let X=[];for(let Q of Z)if(Q.role==="tasks"&&(z.force||Q.paneWidth!==Y))X.push(["resize-pane","-t",Q.paneId,"-x",`${Y}`]);if(G.length>0){for(let Q of Z)if(Q.role==="ops")X.push(["resize-pane","-t",Q.paneId,...G])}return{rows:Z,commands:X}}async function OG(J,z){IY(J,"resize");let{rows:Y,commands:G}=await BB(J);if(!Y)return;let Z=[...G];if(z)Z.push(...S5(k5(Y,{currentVersion:p0,force:!1,vendorChanged:z.vendorChanged}),z));await b5(J,Z)}async function y5(J){if(!await V1(J))return;await OG(J)}async function jB(J){let{code:z,stdout:Y}=await $0(["list-panes","-t",`=${J}`,"-F",`#{@kobe_role} #{pane_width} #{pane_height} #{window_width} #{window_height} #{window_zoomed_flag} #{${Hz}} #{${CJ}}`]);if(z!==0)return;let G=Y.split(`
|
|
45
|
+
`).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 Z=Number.parseInt(G[0][3]?.trim()??"",10),X=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",$Q,`${j8(B)}`])}let H=G.find(([B])=>B?.trim()==="ops");if(H&&Number.isFinite(Z)&&Z>0&&Number.isFinite(X)&&X>0){let B=Number.parseInt(H[1]?.trim()??"",10),V=Number.parseInt(H[2]?.trim()??"",10),j=Number.isFinite(B)?GG(100*B/Z):null,K=Number.isFinite(V)?GG(100*V/X):null;if(j!==null)Q.push(["set-option","-s",aQ,`${j}`]);if(K!==null)Q.push(["set-option","-s",_Q,`${K}`])}if(Q.length>0)await d1(Q)}function Qg(J){let z=J.split(`
|
|
46
|
+
`).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 x5(J){let{code:z,stdout:Y}=await $0(["list-panes","-t",`=${J}`,"-F",`#{@kobe_role} #{window_zoomed_flag} #{${Hz}} #{${CJ}}`]);if(z!==0||!Qg(Y))return;await jB(J)}async function MZ(J){let z=await IJ(J,["@kobe_worktree","@kobe_task","@kobe_vendor"]),Y=z["@kobe_worktree"]||process.cwd(),G=z["@kobe_task"]||void 0,Z=z["@kobe_vendor"]||void 0,X=await _q(J);if(!X)return;let Q=S5(k5(X,{currentVersion:p0,force:!0}),{cwd:Y,taskId:G,vendor:Z});await b5(J,Q),await FG()}var Lz="@kobe_pane_version",zg;var bX=k(()=>{JY();sJ();Vz();P1();Bz();iq();MJ();BG();LZ();zg=`#{window_id} #{pane_id} #{@kobe_role} #{${Lz}} #{pane_width}`});var t5={};f1(t5,{syncSessionZen:()=>oq,runLayoutAction:()=>AG,resolveShellPane:()=>pq,planWorkspaceSplit:()=>E5,parseLayoutPaneRows:()=>u5,expandedTerminalHeightPercent:()=>w5,applyZenToNewWindow:()=>MB});function u5(J){let z=[];for(let Y of J.split(`
|
|
47
|
+
`)){let G=Y.trim();if(!G)continue;let[Z,X,Q,f,H,B,V]=G.split("\t");if(!Z)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:Z.trim(),role:X?.trim()??"",active:Q?.trim()==="1",paneWidth:Number.isFinite(j)?j:0,paneHeight:Number.isFinite(K)?K:0,windowWidth:Number.isFinite(L)?L:0,windowHeight:Number.isFinite(A)?A:0})}return z}function E5(J){let z=J.find((G)=>G.role===ZG);if(!z)return{kind:"missing-engine"};let Y=J.filter((G)=>G.role===XX);if(Y.length+1>=B8)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 pq(J){return J.find((z)=>z.role===fz)??J.find((z)=>z.role==="")}function w5(J){return 100-(GG(J??Number.NaN)??qX)}async function hJ(J,z){let Y=z?.trim()||`=${J}`,{code:G,stdout:Z}=await $0(["list-panes","-t",Y,"-F",qg]);return G===0?u5(Z):null}async function fg(J){let{code:z,stdout:Y}=await $0(["list-windows","-t",`=${J}`,"-F","#{window_active}\t#{window_id}"]);if(z!==0)return"";for(let G of Y.split(`
|
|
48
|
+
`)){let[Z,X]=G.split("\t");if(Z?.trim()==="1"&&X?.trim())return X.trim()}return""}async function GY(J,z){let{code:Y,stdout:G}=await $0(["show-options","-wqv","-t",J,z]);return Y===0?G.trim():""}async function WB(J,z,Y){await l0(["set-window-option","-t",J,z,Y])}async function TY(J,z){await l0(["set-window-option","-u","-t",J,z])}async function VB(J){let{code:z,stdout:Y}=await $0(["display-message","-p","-t",J,"#{pane_id}"]);return z===0&&Y.trim()===J}async function I1(J,z){await l0(["display-message","-t",J,z])}async function rq(J){let z=await IJ(J,["@kobe_worktree","@kobe_task","@kobe_vendor"]);return{cwd:z["@kobe_worktree"]||process.cwd(),taskId:z["@kobe_task"]||void 0,vendor:z["@kobe_vendor"]||void 0}}function Hg(J){let z=b1(),Y=JJ();return kJ(Y+$G({cwd:J.cwd,taskId:J.taskId,claudePaneId:J.enginePaneId,cliInvocation:z,vendor:J.vendor}))}async function Bg(J,z){return z?.trim()||await fg(J)}async function jg(J,z){let Y=await hJ(J,z);if(!Y)return;let G=E5(Y);if(G.kind==="missing-engine"){await I1(z,"kobe: no engine pane in this window");return}if(G.kind==="maxed"){await I1(z,`kobe: workspace split limit is ${B8} panes`);return}let{cwd:Z}=await rq(J),{code:X,stdout:Q}=await $0(["split-window",G.direction,"-t",G.targetPane,"-l","50%","-c",w1(Z),"-P","-F","#{pane_id}",kJ("true")]),f=Q.trim();if(X!==0||!f)return;await d1([["set-option","-p","-t",f,"@kobe_role",XX],["select-pane","-t",f]])}async function Wg(J,z){let Y=await hJ(J,z);if(!Y)return;let G=Y.filter((Q)=>Q.role===XX);if(G.length===0){await I1(z,"kobe: no workspace split to close");return}let X=G.find((Q)=>Q.active)??G[G.length-1];if(!X)return;await l0(["kill-pane","-t",X.paneId])}async function Vg(J,z){let Y=await hJ(J,z);if(!Y)return;let G=Y.filter((Z)=>Z.role===XX);if(G.length===0){await I1(z,"kobe: no workspace splits to reset");return}await d1(G.map((Z)=>["kill-pane","-t",Z.paneId]))}async function P5(){return(await Ez()).tasksWidth}async function Kg(J){let{cwd:z,taskId:Y}=await rq(J),G=b1(),Z=JJ();return{cwd:z,command:kJ(Z+CY(G,{initialTaskId:Y}))}}async function h5(J,z){let Y=await hJ(J,z);if(!Y)return;let G=Y.find((O)=>O.role===qz);if(G){await l0(["kill-pane","-t",G.paneId]);return}let Z=pq(Y),X=Y.find((O)=>O.role===ZG);if(!X){await I1(z,"kobe: cannot restore file pane in this layout");return}let{cwd:Q,taskId:f,vendor:H}=await rq(J),B=Hg({cwd:Q,taskId:f,vendor:H,enginePaneId:X.paneId}),V=Z?["split-window","-v","-b","-t",Z.paneId,"-l",`${await Ug()}%`,"-c",w1(Q),"-P","-F","#{pane_id}",B]:["split-window","-h","-t",X.paneId,"-l",`${await KB()}%`,"-c",w1(Q),"-P","-F","#{pane_id}",B],{code:j,stdout:K}=await $0(V),L=K.trim();if(j!==0||!L)return;let A=[["set-option","-p","-t",L,"@kobe_role",qz],["set-option","-p","-t",L,Lz,p0]];if(Z?.role==="")A.push(["set-option","-p","-t",Z.paneId,"@kobe_role",fz]);await d1(A)}async function Ug(){return(await Ez()).opsHeightPct}async function KB(){return(await Ez()).rightColumnWidthPct}async function v5(){return w5((await Ez()).opsHeightPct)}async function Dg(J){let{code:z,stdout:Y}=await $0(["list-windows","-t",`=${J}`,"-F","#{window_index}"]);if(z!==0)return new Set;return new Set(Y.split(`
|
|
49
|
+
`).map((G)=>Number.parseInt(G.trim(),10)).filter((G)=>Number.isFinite(G)))}async function m5(J,z){let Y=await Dg(J),G=g7(z);while(Y.has(G))G++;return G}async function c5(J){let z=QX(J);if(await V1(z))return z;return await l0(["new-session","-d","-s",z,"-n","hidden-panes","-c",w1(process.cwd()),"while :; do sleep 3600; done"]),z}async function UB(J){let z=QX(J);if(!await V1(z))return;let{code:Y,stdout:G}=await $0(["list-panes","-s","-t",`=${z}`,"-F","#{@kobe_role}"]);if(Y!==0)return;if(!G.split(`
|
|
50
|
+
`).some((X)=>{let Q=X.trim();return Q===fz||Q===_J}))await l0(["kill-session","-t",`=${z}`])}async function Lg(J,z){await d5(J,z,Hz)}async function Mg(J,z){await d5(J,z,CJ)}async function d5(J,z,Y){let G=await GY(z,Y);if(!G)return;if(await VB(G))await l0(["kill-pane","-t",G]);await TY(z,Y)}async function Fg(J,z){await Lg(J,z),await Mg(J,z),await UB(J)}function n5(J){return J.find((z)=>z.role===ZG)??J[0]}async function DB(J,z,Y){let G=n5(Y);if(!G)return await I1(z,"kobe: cannot restore Tasks pane in this layout"),!1;let Z=await P5(),{cwd:X,command:Q}=await Kg(J),{code:f,stdout:H}=await $0(["split-window","-h","-b","-t",G.paneId,"-l",`${Z}`,"-c",w1(X),"-P","-F","#{pane_id}",Q]),B=H.trim();if(f!==0||!B)return!1;return await d1([["set-option","-p","-t",B,"@kobe_role",_J],["set-option","-p","-t",B,Lz,p0],["select-pane","-t",B]]),await TY(z,CJ),await I1(z,"kobe: Tasks pane restored"),!0}async function i5(J,z,Y){let G=await c5(J),Z=await m5(G,z),{code:X,stdout:Q}=await $0(["break-pane","-d","-s",Y.paneId,"-t",`${G}:${Z}`,"-P","-F","#{pane_id}"]),f=Q.trim()||Y.paneId;if(X!==0||!f){await I1(z,"kobe: could not hide Tasks pane");return}await WB(z,CJ,f),await I1(z,"kobe: Tasks pane hidden")}async function LB(J,z,Y){let G=await hJ(J,z);if(!G)return;if(!await VB(Y)){await TY(z,CJ);let Q=G.find((f)=>f.role===_J);if(Q){await l0(["select-pane","-t",Q.paneId]);return}await DB(J,z,G);return}let Z=n5(G);if(!Z){await I1(z,"kobe: cannot restore Tasks pane in this layout");return}if(await l0(["join-pane","-h","-b","-s",Y,"-t",Z.paneId,"-l",`${await P5()}`])!==0){await I1(z,"kobe: could not restore Tasks pane");return}await d1([["set-option","-p","-t",Y,"@kobe_role",_J],["set-option","-p","-t",Y,Lz,p0],["select-pane","-t",Y]]),await TY(z,CJ),await UB(J),await I1(z,"kobe: Tasks pane restored")}async function Og(J,z){let Y=await GY(z,CJ);if(Y){await LB(J,z,Y);return}let G=await hJ(J,z);if(!G)return;let Z=G.find((X)=>X.role===_J);if(Z){await i5(J,z,Z);return}await DB(J,z,G)}async function Ag(J,z){let Y=await GY(z,CJ);if(Y){await LB(J,z,Y);return}let G=await hJ(J,z);if(!G)return;let Z=G.find((X)=>X.role===_J);if(Z){await l0(["select-pane","-t",Z.paneId]);return}await DB(J,z,G)}async function l5(J,z,Y){if(Y.role==="")await l0(["set-option","-p","-t",Y.paneId,"@kobe_role",fz]);let G=await c5(J),Z=await m5(G,z),{code:X,stdout:Q}=await $0(["break-pane","-d","-s",Y.paneId,"-t",`${G}:${Z}`,"-P","-F","#{pane_id}"]),f=Q.trim()||Y.paneId;if(X!==0||!f){await I1(z,"kobe: could not hide terminal pane");return}await WB(z,Hz,f),await I1(z,"kobe: Terminal pane hidden")}async function $5(J,z,Y){let G=Y.find((V)=>V.role===qz),Z=Y.find((V)=>V.role===ZG);if(!G&&!Z)return await I1(z,"kobe: cannot restore terminal pane in this layout"),!1;let{cwd:X}=await rq(J),Q=G?["split-window","-v","-t",G.paneId,"-l",`${await v5()}%`,"-c",w1(X),"-P","-F","#{pane_id}"]:["split-window","-h","-t",Z?.paneId??"","-l",`${await KB()}%`,"-c",w1(X),"-P","-F","#{pane_id}"],{code:f,stdout:H}=await $0(Q),B=H.trim();if(f!==0||!B)return!1;return await l0(["set-option","-p","-t",B,"@kobe_role",fz]),await TY(z,Hz),await I1(z,"kobe: Terminal pane restored"),!0}async function a5(J,z,Y){let G=await hJ(J,z);if(!G)return;if(!await VB(Y)){await TY(z,Hz),await $5(J,z,G);return}let Z=G.find((B)=>B.role===qz),X=G.find((B)=>B.role===ZG);if(!Z&&!X){await I1(z,"kobe: cannot restore terminal pane in this layout");return}let Q=Z?["join-pane","-v","-s",Y,"-t",Z.paneId,"-l",`${await v5()}%`]:["join-pane","-h","-s",Y,"-t",X?.paneId??"","-l",`${await KB()}%`];if(await l0(Q)!==0){await I1(z,"kobe: could not restore terminal pane");return}await l0(["set-option","-p","-t",Y,"@kobe_role",fz]),await TY(z,Hz),await UB(J),G=await hJ(J,z);let H=G?.find((B)=>B.paneId===Y);if(H)await l0(["select-pane","-t",H.paneId]);await I1(z,"kobe: Terminal pane restored")}async function Rg(J,z){let Y=await GY(z,Hz);if(Y){await a5(J,z,Y);return}let G=await hJ(J,z);if(!G)return;let Z=pq(G);if(Z){await l5(J,z,Z);return}await $5(J,z,G)}async function gg(J){let z=$q();if(O5(!z),z){await o5(J);return}await r5(J)}async function oq(J){if(!await V1(J))return;let z=$q(),Y=(await gG(J,lG)).length>0;if(z===Y)return;if(z)await r5(J);else await o5(J)}async function _5(J){let{code:z,stdout:Y}=await $0(["list-windows","-t",`=${J}`,"-F","#{window_id}"]);if(z!==0)return[];return Y.split(`
|
|
51
|
+
`).map((G)=>G.trim()).filter((G)=>G.length>0)}async function p5(J,z){return!!(await hJ(J,z))?.some((G)=>G.role===ZG)}async function r5(J){let z=await _5(J);for(let Y of z){if(!await p5(J,Y))continue;if(await GY(Y,gY))continue;await s5(J,Y)}await ZY(J,lG,"1"),await I1(`=${J}`,"kobe: Zen mode on \u2014 all tabs")}async function o5(J){let z=await _5(J);for(let Y of z){let G=await GY(Y,gY);if(G)await Cg(J,Y,G)}await l0(["set-option","-u","-t",J,lG]),await I1(`=${J}`,"kobe: Zen mode off \u2014 all tabs")}async function MB(J,z){let Y=(await gG(J,lG)).length>0;if(!Y&&!$q())return;if(!Y)await ZY(J,lG,"1");if(await GY(z,gY))return;if(!await p5(J,z))return;await s5(J,z)}async function s5(J,z){let Y=await hJ(J,z);if(!Y)return;let G=[],Z=Y.find((Q)=>Q.role===qz);if(Z)await l0(["kill-pane","-t",Z.paneId]),G.push(qz);let X=pq(Y);if(X)await l5(J,z,X),G.push(fz);if(!M5()){let Q=Y.find((f)=>f.role===_J);if(Q)await i5(J,z,Q),G.push(_J)}if(G.length===0){await I1(z,"kobe: already focused \u2014 nothing to hide");return}await WB(z,gY,G.join(",")),await I1(z,"kobe: Zen mode on")}async function Cg(J,z,Y){let G=new Set(Y.split(",").map((Z)=>Z.trim()));if(G.has(_J)){let Z=await GY(z,CJ);if(Z)await LB(J,z,Z)}if(G.has(qz)){let Z=await hJ(J,z);if(Z&&!Z.some((X)=>X.role===qz))await h5(J,z)}if(G.has(fz)){let Z=await GY(z,Hz);if(Z)await a5(J,z,Z)}await TY(z,gY),await I1(z,"kobe: Zen mode off")}async function Ng(J){let{code:z,stdout:Y}=await $0(["list-windows","-t",`=${J}`,"-F","#{window_id}"]);if(z!==0)return 0;return Y.split(`
|
|
52
|
+
`).filter((G)=>G.trim().length>0).length}async function kg(J,z){if(await Ng(J)<=1){await I1(z,"Cannot close the only ChatTab");return}await Fg(J,z),await l0(["kill-window","-t",z])}async function AG(J,z,Y={}){if(!await V1(J))return;let G=await Bg(J,Y.windowId);if(!G)return;switch(z){case"workspace-split":await jg(J,G);return;case"workspace-close":await Wg(J,G);return;case"workspace-reset":await Vg(J,G);return;case"tasks-toggle":await Og(J,G);return;case"tasks-restore":await Ag(J,G);return;case"ops-toggle":await h5(J,G);return;case"terminal-toggle":await Rg(J,G);return;case"zen-toggle":await gg(J);return;case"chat-tab-close":await kg(J,G);return}}var qg="#{pane_id}\t#{@kobe_role}\t#{pane_active}\t#{pane_width}\t#{pane_height}\t#{window_width}\t#{window_height}";var RG=k(()=>{JY();Vz();fB();P1();Bz();MJ();BG();bX()});function tq(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 eq(J,z="kill-window"){return["bind-key","-n",J,"if-shell","-F","#{>:#{session_windows},1}",z,"display-message 'Cannot close the only ChatTab'"]}function Jf(J){return["bind-key","-n",J,"command-prompt","-I","#{window_name}","rename-window -- '%%'"]}function zf(J){return[["bind-key","-n",J,"command-prompt","-p",sq],["bind-key","T","command-prompt","-p",sq]]}function FB(J){return J.startsWith("C-")&&J.length===3?`^${J.slice(2)}`:J}function Yf(J){return`${[J.focusLeft?`${FB(J.focusLeft)} tasks`:null,J.detach?`${FB(J.detach)} detach`:null,J.newTab?`${FB(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 AB(J,z){let Y=JJ(),G=await ff(),Z=kJ(z.opsCommand??Y+$G({cwd:z.cwd,taskId:z.taskId,claudePaneId:J,cliInvocation:z.inv,vendor:z.vendor})),{stdout:X}=await IX([["set-option","-p","-t",J,"@kobe_role","claude"],["set-window-option","-t",J,OB,"idle"],["split-window","-h","-b","-t",J,"-l",`${G}`,"-c",w1(z.cwd),"-P","-F","tasks=#{pane_id}",kJ(Y+CY(z.inv,{initialTaskId:z.taskId}))],["split-window","-h","-t",J,"-l",`${100-W8}%`,"-c",w1(z.cwd),"-P","-F","ops=#{pane_id}",Z],["split-window","-v","-l",`${100-qX}%`,"-c",w1(z.cwd),"-P","-F","shell=#{pane_id}"],["select-pane","-t",J]]),Q=Object.fromEntries(X.split(`
|
|
53
|
+
`).map((f)=>f.trim()).filter(Boolean).map((f)=>f.split("=",2)));if(await d1([...Q.tasks?[["set-option","-p","-t",Q.tasks,"@kobe_role",_J]]:[],...Q.tasks?[["set-option","-p","-t",Q.tasks,Lz,p0]]:[],...Q.ops?[["set-option","-p","-t",Q.ops,"@kobe_role",qz]]:[],...Q.ops?[["set-option","-p","-t",Q.ops,Lz,p0]]:[],...Q.shell?[["set-option","-p","-t",Q.shell,"@kobe_role",fz]]:[]]),Q.ops){let f=await T5();if(f.length>0)await l0(["resize-pane","-t",Q.ops,...f])}}async function e5(J,z){if(!await V1(J))return;let Y=await IJ(J,["@kobe_worktree","@kobe_task","@kobe_vendor",OX]),G=Y["@kobe_worktree"]||process.cwd(),Z=Y["@kobe_task"]||void 0,X=Y[OX]||void 0,Q=z??Y["@kobe_vendor"];if(z)await bg(J,Z,z);let f=oJ(Q),H=ZZ(f,Q),B=b1(),j=(await $0(["new-window","-t",`=${J}`,"-c",w1(G),"-P","-F","#{pane_id}",kJ(GZ(NJ(H.argv),X,G))])).stdout.trim();if(!j)return;if(H.sessionId)await yY(j,uz,H.sessionId);await AB(j,{cwd:G,taskId:Z,inv:B,vendor:Q});let{stdout:K}=await $0(["display-message","-p","-t",j,"#{window_id}"]),L=K.trim();if(L)await MB(J,L)}async function Zf(J){if(!await V1(J))return;let Y=(await IJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),G=b1(),X=`${JJ()}${G.map(Z1).join(" ")} settings`;await Mz(J,{cwd:w1(Y),command:X,name:"settings",surface:!0})}async function Xf(J){if(!await V1(J))return;let Y=(await IJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),G=b1(),X=`${JJ()}${G.map(Z1).join(" ")} help-page`;await Mz(J,{cwd:w1(Y),command:X,name:"help",surface:!0})}async function Qf(J,z){if(!await V1(J))return;let G=(await IJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),Z=b1(),X=JJ(),Q=z?` --repo ${Z1(z)}`:"",f=`${X}${Z.map(Z1).join(" ")} new-task${Q}`;await Mz(J,{cwd:w1(G),command:f,name:"new task",surface:!0})}async function qf(J){if(!await V1(J))return;let Y=(await IJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),G=b1(),X=`${JJ()}${I7({cliInvocation:G})}`;await Mz(J,{cwd:w1(Y),command:X,name:"update",surface:!0})}async function JK(J){if(!await V1(J))return;let Y=(await IJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),G=b1(),X=`${JJ()}${G.map(Z1).join(" ")} quick-task --session ${Z1(J)}`;await Mz(J,{cwd:w1(Y),command:X,name:"quick task",surface:!0})}async function bg(J,z,Y){if(await ZY(J,"@kobe_vendor",Y),!z)return;try{let{connectOrStartDaemon:G}=await Promise.resolve().then(() => (FJ(),Hf)),Z=await G();try{await Z.request("task.setVendor",{taskId:z,vendor:Y})}finally{Z.close()}}catch(G){console.error("[kobe tmux] failed to persist selected engine vendor:",G)}}var sq,OB="@kobe_tab_state",SX="#{?#{==:#{@kobe_tab_state},running},\u25CF,#{?#{==:#{@kobe_tab_state},done},\u2713,#{?#{==:#{@kobe_tab_state},error},!,#{?#{==:#{@kobe_tab_state},unknown},?,\u25CB}}}} #I:#W",Gf;var RB=k(()=>{JY();sJ();Vz();P1();Bz();i1();MJ();BG();RG();bX();sq=`engine (${n1.join("/")}/\u2026)`;Gf=SX});var vJ={};f1(vJ,{tmuxWindowSizeArgsForClient:()=>NB,tmuxSessionName:()=>C1,tmuxInitialSizeArgs:()=>YK,tmuxInitialClientSize:()=>CB,tmuxAvailable:()=>wz,switchClientBeforeKill:()=>Pz,sessionExists:()=>V1,selectTasksPane:()=>Eg,runLayoutAction:()=>AG,resyncWindowToClient:()=>Tg,refreshKobeWorkspacePanes:()=>MZ,quickCreate:()=>JK,prepareWindowForSwitch:()=>QK,prepareWindowForAttach:()=>Bf,parseTmuxClientRows:()=>GK,parseObservedSession:()=>fK,openUpdateTab:()=>qf,openSettingsTab:()=>Zf,openNewTaskTab:()=>Qf,openHelpTab:()=>Xf,observeSessionVendor:()=>bB,newChatTab:()=>e5,kobeStatusRight:()=>Yf,killSession:()=>eJ,healSessionLayout:()=>y5,focusBindCommand:()=>qK,enterWindow:()=>Ig,ensureSession:()=>TX,currentSessionName:()=>TJ,clientsWithConflictingSize:()=>ZK,chatTabSwitchBindings:()=>tq,chatTabRenameBinding:()=>Jf,chatTabCloseBinding:()=>eq,chatTabChooseEngineBindings:()=>zf,captureGlobalLayoutOnDrag:()=>x5,captureGlobalLayout:()=>jB,attachArgv:()=>FZ,PANE_VERSION_OPTION:()=>Lz,CHAT_TAB_STATUS_FORMAT:()=>SX,CHAT_TAB_STATUS_CURRENT_FORMAT:()=>Gf,CHAT_TAB_STATE_OPTION:()=>OB,CHAT_TAB_ENGINE_PROMPT:()=>sq});function YK(J=process.stdout,z=process.env){let Y=CB(J,z);return Y?["-x",`${Y.columns}`,"-y",`${Y.rows}`]:[]}function CB(J=process.stdout,z=process.env){let Y=xY(J.columns)??xY(z.COLUMNS),G=xY(J.rows)??xY(z.LINES);return Y&&G?{columns:Y,rows:G}:null}function xY(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 GK(J){let z=[];for(let Y of J.split(`
|
|
54
|
+
`)){let[G,Z,X,Q,f]=Y.split("\t"),H=xY(X?.trim()),B=xY(Q?.trim());if(!G?.trim()||!Z?.trim()||!H||!B)continue;z.push({name:G.trim(),session:Z.trim(),width:H,height:B,flags:f?.trim()??""})}return z}function ZK(J,z,Y,G={}){return J.filter((Z)=>Z.session===z).filter((Z)=>Z.name!==G.currentClientName).filter((Z)=>Z.width!==Y.columns||Z.height!==Y.rows).map((Z)=>Z.name)}function NB(J,z){let Y=Math.max(1,J.rows-(z.status?.trim()==="on"?1:0));return["-x",`${J.columns}`,"-y",`${Y}`]}async function kB(J,z,Y={}){if(!z)return;let{code:G,stdout:Z}=await $0(["list-clients","-t",`=${J}`,"-F",Sg]);if(G!==0)return;let X=ZK(GK(Z),J,z,Y),Q=[];if(Y.currentClientName)Q.push(["refresh-client","-f","!ignore-size","-t",Y.currentClientName]);for(let f of X)Q.push(["refresh-client","-f","ignore-size","-t",f]);if(Q.length>0)await d1(Q)}async function Bf(J){IY(J,"resize");let z=CB();await kB(J,z);let Y=z?["-x",`${z.columns}`,"-y",`${z.rows}`]:[];if(Y.length>0)await l0(["resize-window","-t",`=${J}`,...Y]);await OG(J)}async function XK(){let{code:J,stdout:z}=await $0(["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,Z,X]=z.trim().split("\t"),Q=xY(G),f=xY(Z),H=Q&&f?{columns:Q,rows:f}:null;return{sizeArgs:H?NB(H,{status:X}):[],clientSize:H,clientName:Y?.trim()||void 0}}async function QK(J){IY(J,"resize");let z=await XK();await kB(J,z.clientSize,{currentClientName:z.clientName});let Y=z.sizeArgs;if(Y.length>0)await l0(["resize-window","-t",`=${J}`,...Y]);await OG(J)}async function Ig(J){await QK(J),await l0(["switch-client","-t",`=${J}`])}async function Tg(J,z){if(!z.size)return;IY(J,"resize"),await kB(J,z.size,{currentClientName:z.clientName});let Y=NB(z.size,{status:z.status}),{commands:G}=await BB(J,{force:!0});await d1([["resize-window","-t",`=${J}`,...Y],...G])}function qK(J,z,Y){let G=`#{?window_zoomed_flag,1,#{?${yg[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 TX(J){let z=gB.get(J.name);if(z)return z;let Y=ug(J);gB.set(J.name,Y);try{return await Y}finally{gB.delete(J.name)}}function fK(J){let z="",Y="",G=!1,Z=new Set;for(let X of J.split(`
|
|
55
|
+
`)){let[Q,f,H,B,V]=X.split("\t");if(!Q?.trim())continue;if(Z.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:Z.size}}async function HK(J){if(!await V1(J))return null;let{code:z,stdout:Y}=await $0(["list-panes","-s","-t",`=${J}`,"-F",xg]);if(z!==0)return{worktree:"",vendor:"",claudePaneAlive:!1,windowCount:0};return fK(Y)}async function bB(J){let Y=(await HK(J))?.vendor.trim();return Y?Y:null}async function ug(J){let z=J.launchInit,Y=await HK(J.name),G=B5(Y,{cwd:J.cwd,vendor:J.vendor,hasEngineCommand:J.command.length>0}),Z=vV(J.repo);if(G.kind==="reuse")return await OG(J.name,{cwd:J.cwd,taskId:J.taskId,vendor:J.vendor}),!0;if(G.kind==="respawn-engine"){let A0=await I5(J.name,J.cwd,J.command,Z,J.vendor);if(A0==="switched"){if(J.vendor)await ZY(J.name,"@kobe_vendor",J.vendor);return await OG(J.name,{cwd:J.cwd,taskId:J.taskId,vendor:J.vendor,vendorChanged:!0}),!0}if(A0==="respawn-failed")return await OG(J.name,{cwd:J.cwd,taskId:J.taskId,vendor:J.vendor}),!0}if(G.kind==="rebuild"||G.kind==="respawn-engine")await eJ(J.name);let X=b1(),Q=ZZ(J.command,J.vendor),f=J.repo!==void 0&&J.cwd===J.repo,H=f||Z?void 0:J.taskId,B=f&&!Z?J.taskId:void 0,V=Nq(Cq(Q.argv,J.vendor,H),J.vendor,B),j=GZ(NJ(V),Z,J.cwd),L=(await $0(["new-session","-d","-s",J.name,"-c",w1(J.cwd),...YK(),"-P","-F","#{pane_id}",b7(j,{initScript:Z?void 0:z?.initScript,markerPath:!Z&&z?.initScript?NW(J.cwd):void 0,timeoutSeconds:V8(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 yY(L,uz,Q.sessionId);if(await d1([...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]]:[],...Z?[["set-option","-t",J.name,OX,Z]]:[]]),process.env.TMUX){let{sizeArgs:A0}=await XK();if(A0.length>0)await l0(["resize-window","-t",`=${J.name}`,...A0])}await AB(L,{cwd:J.cwd,taskId:J.taskId,opsCommand:J.opsCommand,inv:X,vendor:J.vendor});let A=JJ(),O=X.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=(A0)=>`${A}${O} layout --session '#{session_name}' --window '#{window_id}' --action ${A0}`,I=M("tasks-restore"),r=`run-shell ${Z1(I)}`,i=M("chat-tab-close"),e=`run-shell ${Z1(i)}`,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)}`,B0=`${A}${O} capture-layout --session '#{session_name}'`,L0=`run-shell -b ${Z1(B0)}`,V0=T7({tmuxSocket:Fz}),t=sV(process.platform,tV),h=eV(t),C=Tq(),o=X5.map((A0)=>["unbind-key","-n",A0]);if(C.overridden.has(xz))for(let A0 of SY){let N0=MG(A0);if("key"in N0)o.push(["unbind-key","-n",N0.key])}for(let A0 of C.overridden){if(A0===xz)continue;let N0=LG[A0],u=QZ(A0),g0=MG(N0,{allowBare:u});if("key"in g0)o.push(u?["unbind-key",g0.key]:["unbind-key","-n",g0.key])}let E=["-L","-D","-U","-R"],c=C.focus.flatMap((A0,N0)=>{let u=E[N0],g0=u==="-L"?r:void 0;return A0&&u?[qK(A0.key,u,g0)]:[]}),s=C.binds,X0=(A0,N0)=>{let u=s[A0];return u?[["bind-key",u.key,"run-shell",M(N0)]]:[]},F0=(...A0)=>{let N0=A0.map((u)=>s[u]?.chord).filter((u)=>!!u);return N0.length>0?N0.join("/"):null};await d1([["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",SX],["set-option","-g","window-status-current-format",Gf],["set-option","-g","status-right",Yf({focusLeft:C.focus[0]?.key??null,detach:s["tmux.detach"]?.key??null,newTab:s["tmux.tab.new"]?.key??null,layoutSplits:F0("tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"),layoutPanes:F0("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",L0],...o,...s["tmux.detach"]?[["bind-key","-n",s["tmux.detach"].key,"if-shell","-F",`#{?#{${CJ}},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"]?zf(s["tmux.tab.chooseEngine"].key).map((A0)=>[...A0,_]):[],...s["tmux.tab.prev"]&&s["tmux.tab.next"]?tq(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"]?[eq(s["tmux.tab.close"].key,e)]:[],...s["tmux.tab.rename"]?[Jf(s["tmux.tab.rename"].key)]:[],...X0("tmux.layout.workspaceSplit","workspace-split"),...X0("tmux.layout.workspaceClose","workspace-close"),...X0("tmux.layout.workspaceReset","workspace-reset"),...X0("tmux.layout.tasksToggle","tasks-toggle"),...X0("tmux.layout.opsToggle","ops-toggle"),...X0("tmux.layout.terminalToggle","terminal-toggle"),...X0("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 FG(),await l0(["select-pane","-t",L]);let P0=z?.firstMessage;if(P0)H5(J.name,P0).catch((A0)=>console.error("[kobe tmux] first message delivery failed:",A0));return!0}async function zK(J,z,Y){let G=Y?.trim()||`=${J}`,{code:Z,stdout:X}=await $0(["list-panes","-t",G,"-F","#{pane_id}\t#{@kobe_role}"]);if(Z!==0)return"";for(let Q of X.split(`
|
|
56
|
+
`)){let[f,H]=Q.split("\t");if(f?.trim()&&H?.trim()===z)return f.trim()}return""}async function Eg(J,z={}){if(!await V1(J))return"";let Y=await zK(J,"tasks",z.windowId);if(!Y)await AG(J,"tasks-restore",{windowId:z.windowId}),Y=await zK(J,"tasks",z.windowId);if(!Y)return"";return await l0(["select-pane","-t",Y]),Y}var Sg="#{client_name}\t#{client_session}\t#{client_width}\t#{client_height}\t#{client_flags}",yg,gB,xg="#{window_id}\t#{window_active}\t#{@kobe_role}\t#{@kobe_worktree}\t#{@kobe_vendor}";var zJ=k(()=>{JY();sJ();p1();Vz();P1();J5();yq();xq();Bz();iq();RB();BG();RG();LZ();bX();P1();RB();bX();RG();yg={"-L":"pane_at_left","-D":"pane_at_bottom","-U":"pane_at_top","-R":"pane_at_right"};gB=new Map});var xX={};f1(xX,{windowIsSurface:()=>dg,windowCount:()=>hg,tmuxSessionName:()=>C1,tmuxCommandSequence:()=>IB,tmuxAvailable:()=>wz,tmuxArgs:()=>CG,tagPaneRole:()=>WK,tagClaudePane:()=>cg,switchClientBeforeKill:()=>Pz,setWindowOption:()=>yY,setSessionOption:()=>ZY,sessionExists:()=>V1,sendKeys:()=>jf,sendKeyName:()=>NX,runTmuxSequenceCapturing:()=>IX,runTmuxSequence:()=>d1,runTmuxCapturing:()=>$0,runTmux:()=>l0,readLayoutGeometry:()=>Ez,paneIdByRole:()=>yB,newWindow:()=>Mz,killSession:()=>eJ,globalTasksPaneWidth:()=>ff,getSessionOptions:()=>IJ,getSessionOption:()=>gG,getServerOptions:()=>jK,getServerOption:()=>vg,ensureFallbackSession:()=>Wf,currentSessionName:()=>TJ,claudePaneIdStrict:()=>qZ,claudePaneId:()=>XB,capturePaneById:()=>fZ,attachArgv:()=>FZ,SURFACE_WINDOW_OPTION:()=>xB,PANE_ROLE_OPTION:()=>yX,KOBE_TMUX_SOCKET:()=>Fz,KOBE_HOME_SESSION:()=>VK,CLAUDE_ROLE_OPTION:()=>mg,CHAT_TAB_SESSION_ID_OPTION:()=>uz});import{homedir as wg}from"os";function CG(...J){return["tmux","-L",Fz,...J]}function C1(J){return`kobe-${J.replace(/[^A-Za-z0-9_-]/g,"")}`}function FZ(J){return CG("attach-session","-t",`=${J}`)}async function SB(J){if(!J)return"";try{return await new Response(J).text()}catch{return""}}async function l0(J){try{let z=Bun.spawn(CG(...J),{stdin:"ignore",cwd:OZ,stdout:"ignore",stderr:"pipe"}),[Y,G]=await Promise.all([SB(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 Pg(J){try{return await Bun.spawn(CG(...J),{stdin:"ignore",cwd:OZ,stdout:"ignore",stderr:"ignore"}).exited}catch{return 1}}function IB(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 d1(J){let z=IB(J);return z.length===0?0:l0(z)}async function $0(J){try{let z=Bun.spawn(CG(...J),{stdin:"ignore",cwd:OZ,stdout:"pipe",stderr:"pipe"}),[Y,G,Z]=await Promise.all([SB(z.stdout),SB(z.stderr),z.exited]);if(Z!==0&&G.trim().length>0)console.error(`[kobe tmux] ${J.join(" ")} (${Z}): ${G.trim()}`);return{code:Z,stdout:Y}}catch{return{code:1,stdout:""}}}async function IX(J){let z=IB(J);return z.length===0?{code:0,stdout:""}:$0(z)}async function wz(){try{return await Bun.spawn(["tmux","-V"],{stdin:"ignore",cwd:OZ,stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function V1(J){return await Pg(["has-session","-t",`=${J}`])===0}async function hg(J){let{code:z,stdout:Y}=await $0(["list-windows","-t",`=${J}`,"-F","#{window_id}"]);if(z!==0)return 0;return Y.split(`
|
|
57
|
+
`).filter((G)=>G.trim().length>0).length}async function ZY(J,z,Y){await l0(["set-option","-t",J,z,Y])}async function gG(J,z){let{code:Y,stdout:G}=await $0(["show-options","-v","-t",J,z]);return Y===0?G.trim():""}async function IJ(J,z){let Y=Object.fromEntries(z.map((X)=>[X,void 0])),{code:G,stdout:Z}=await IX(z.map((X)=>["show-options","-q","-t",J,X]));if(G!==0)return Y;for(let X of Z.split(`
|
|
58
|
+
`)){let Q=X.indexOf(" ");if(Q<=0)continue;let f=X.slice(0,Q);if(f in Y)Y[f]=X.slice(Q+1).trim()}return Y}async function vg(J){let{code:z,stdout:Y}=await $0(["show-options","-sqv",J]);return z===0?Y.trim():""}async function jK(J){let z=Object.fromEntries(J.map((Z)=>[Z,void 0])),{code:Y,stdout:G}=await IX(J.map((Z)=>["show-options","-sq",Z]));if(Y!==0)return z;for(let Z of G.split(`
|
|
59
|
+
`)){let X=Z.indexOf(" ");if(X<=0)continue;let Q=Z.slice(0,X);if(Q in z)z[Q]=Z.slice(X+1).trim()}return z}async function ff(){return(await Ez()).tasksWidth}async function Ez(){return N7(await jK(C7))}async function WK(J,z){await l0(["set-option","-p","-t",J,yX,z])}async function yY(J,z,Y){await l0(["set-window-option","-t",J,z,Y])}async function cg(J){await WK(J,TB)}async function yB(J,z,Y=!1){let{code:G,stdout:Z}=await $0(["list-panes","-t",`=${J}`,"-F",`#{pane_id} #{${yX}}`]);if(G!==0)return"";let X="";for(let Q of Z.split(`
|
|
60
|
+
`)){let[f,H]=Q.split("\t");if(!f)continue;if(!X)X=f.trim();if(H?.trim()===z)return f.trim()}return Y?X:""}async function XB(J){return yB(J,TB,!0)}async function qZ(J){return yB(J,TB,!1)}async function fZ(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:Z}=await $0(Y);return G===0?Z:""}async function jf(J,z){await l0(["send-keys","-t",J,"-l","--",z])}async function NX(J,z){await l0(["send-keys","-t",J,z])}async function Mz(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:Z}=await $0(Y),X=Z.trim();if(G===0&&X)await yY(X,xB,"1");return}Y.push(z.command),await l0(Y)}async function dg(J){let{code:z,stdout:Y}=await $0(["display-message","-t",J,"-p",`#{${xB}}`]);return z===0&&Y.trim()==="1"}async function TJ(){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 $0(J),Z=G.trim();return Y===0&&Z.length>0?Z:null}async function eJ(J){if(!J.startsWith("kobe-hidden-")){let z=QX(J);if(await V1(z))await l0(["kill-session","-t",`=${z}`])}if(await V1(J))await l0(["kill-session","-t",`=${J}`])}async function Wf(){let J=VK;if(await V1(J)){if(await gG(J,BK)==="tasks")return J;await l0(["kill-session","-t",`=${J}`])}let Y=(await $0(["new-session","-d","-s",J,"-c",OZ,"-x","220","-y","50","-P","-F","#{pane_id}",k7()])).stdout.trim();if(Y){let G=await ff(),X=(await $0(["split-window","-h","-b","-t",Y,"-l",`${G}`,"-c",OZ,"-P","-F","#{pane_id}",kJ(JJ()+CY(b1()))])).stdout.trim();if(X)await d1([["set-option","-p","-t",X,yX,"tasks"],["select-pane","-t",X]])}return await ZY(J,BK,"tasks"),J}async function Pz(J,z){if(await TJ()!==J)return;let{enterWindow:G}=await Promise.resolve().then(() => (zJ(),vJ));if(z&&z!==J&&await V1(z)){await G(z);return}await G(await Wf())}var Fz,OZ,yX="@kobe_role",mg,TB="claude",uz="@kobe_session_id",xB="@kobe_surface",VK="kobe-home",BK="@kobe_home";var P1=k(()=>{JY();BG();Bz();Fz=process.env.KOBE_TMUX_SOCKET?.trim()||"kobe";OZ=wg()||"/";mg=yX});async function ng(J,z=KK){let{code:Y,stdout:G}=await z.capture(["list-windows","-t",`=${J}`,"-F",`#{window_index} #{automatic-rename} #{${uz}}`]);if(Y!==0)return[];let Z=[];for(let X of G.split(`
|
|
61
|
+
`)){let[Q,f,H]=X.split("\t"),B=Number.parseInt((Q??"").trim(),10);if(!Number.isInteger(B))continue;Z.push({index:B,sessionId:H?.trim()??"",autoRename:f?.trim()??""})}return Z}async function ig(J,z,Y){let{code:G,stdout:Z}=await Y.capture(["show-window-options","-t",`=${J}:${z}`,"automatic-rename"]);return G===0&&/\boff\b/.test(Z)}async function lg(J){let{code:z,stdout:Y}=await J.capture(["show-window-options","-g","automatic-rename"]);return z===0&&/\boff\b/.test(Y)}async function $g(J,z,Y,G){return await G.run(["rename-window","-t",`=${J}:${z}`,"--",Y])===0}async function UK(J,z=ag){let Y=0,G=null,Z=async(X,Q)=>{if(Q.autoRename==="1")return!1;if(Q.autoRename==="0"){if(G===null)G=await lg(z.runner);if(!G)return!0}return ig(X,Q.index,z.runner)};for(let X of J.listTasks()){if(X.archived||X.kind==="main"||!X.worktreePath)continue;let Q=C1(X.id),f=await ng(Q,z.runner);if(f.length===0)continue;let H=f.reduce((V,j)=>Math.min(V,j.index),Number.POSITIVE_INFINITY),B=X.vendor??$1;for(let V of f)try{if(await Z(Q,V))continue;let j=V.sessionId?await z.titleFromSessionId(B,V.sessionId):V.index===H?await z.titleFromWorktree(X.worktreePath,B):"";if(j&&await $g(Q,V.index,j,z.runner))Y++}catch{}}return Y}var KK,ag;var DK=k(()=>{qq();P1();rJ();KK={capture:$0,run:l0};ag={runner:KK,titleFromSessionId:KV,titleFromWorktree:pG}});function MK(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 LK(J,z,Y=new Date){let G=MK(z);return`[${Y.toISOString()}] daemon ${J}: ${G.stack??`${G.name}: ${G.message}`}
|
|
62
|
+
`}function _g(J,z,Y=new Date){let G=MK(z);return`[${Y.toISOString()}] daemon error [${J}]: ${G.stack??`${G.name}: ${G.message}`}
|
|
63
|
+
`}function T1(J,z){process.stderr.write(_g(J,z))}function pg(J,z,Y=new Date){return`[${Y.toISOString()}] daemon [${J}]: ${z}
|
|
64
|
+
`}function hz(J,z){process.stderr.write(pg(J,z))}function FK(J=(z)=>process.stderr.write(z)){if(uB||EB)return;uB=(z)=>J(LK("unhandledRejection",z)),EB=(z)=>J(LK("uncaughtException",z)),process.on("unhandledRejection",uB),process.on("uncaughtException",EB)}var uB,EB;async function rg(J,z=pG){let Y=[];for(let G of J.listTasks()){if(G.archived||G.title!==yz||!G.worktreePath)continue;try{let Z=await z(G.worktreePath,G.vendor??$1);if(!Z)continue;let X=J.getTask(G.id);if(!X||X.title!==yz)continue;await J.setTitle(G.id,Z),Y.push({id:G.id,title:Z})}catch(Z){T1("auto-title-poller",Z)}}return Y}function OK(J,z=wB,Y){if(z<=0)return()=>{};let G=!1,X=setInterval(()=>{if(Y&&!Y())return;if(G)return;G=!0,rg(J).then(()=>UK(J)).catch((Q)=>T1("auto-title-poller",Q)).finally(()=>{G=!1})},z);return X.unref?.(),()=>clearInterval(X)}var wB=4000;var AK=k(()=>{qq();FX();DK();rJ()});class PB{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 hB{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)}}}async function RK(J,z,Y=Rq){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 gK=k(()=>{AX()});import{createHash as og}from"crypto";import{homedir as sg}from"os";import EY from"path";function YC(){return EY.join(process.env.KOBE_HOME_DIR??sg(),".kobe")}function GC(J){let Y=(EY.basename(J)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",G=og("sha1").update(EY.resolve(J)).digest("hex").slice(0,12);return`${Y}-${G}`}function ZC(J){if(!EY.isAbsolute(J))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${J}`);return EY.join(YC(),tg,GC(J))}function XC(J){if(!EY.isAbsolute(J))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${J}`);return[ZC(J),...zC.map((z)=>EY.join(J,z))]}function uY(J){return J.length>1&&J.endsWith("/")?J.slice(0,-1):J}function CK(J,z){return z===J||z.startsWith(`${J}/`)}function NK(J,z){let Y=uY(z),G,Z=-1;for(let X of J){if(!X.worktreePath)continue;let Q=uY(X.worktreePath);if(CK(Q,Y)&&Q.length>Z)Z=Q.length,G=X.id}return G}function vB(J,z){let Y=uY(z),G,Z=-1;for(let X of J){if(!X.repo)continue;let Q=uY(X.repo);if(CK(Q,Y)&&Q.length>Z)Z=Q.length,G=Q}return G}function kK(J,z){let Y=uY(z),G=new Set,Z=new Set;for(let X of J){if(X.repo)G.add(uY(X.repo));if(X.worktreePath)Z.add(uY(X.worktreePath))}for(let X of G)for(let Q of XC(X).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(Z.has(V))return;return{repo:X,worktreePath:V}}return}var tg="worktrees",eg=".kobe/worktrees",JC=".claude/worktrees",zC;var bK=k(()=>{zC=[eg,JC]});function dB(J){return{message:J instanceof Error?J.message:String(J),name:J instanceof Error?J.name:void 0}}async function uX(J,z,Y,G){let Z=J.get(z);if(!Z)throw Error(`unknown daemon request: ${z}`);return Z.handle(nB(Y),G)}function EX(){return new Map([{name:"hello",handle(z,Y){let G=typeof z.protocolVersion==="number"?z.protocolVersion:$J,Z=typeof z.minProtocolVersion==="number"?z.minProtocolVersion:G;if(!yQ({localVersion:$J,localMin:FY,remoteVersion:G,remoteMin:Z}))throw Error(`daemon is protocol v${$J} (min v${FY}); this client is v${G} (min v${Z}). Upgrade your kobe.`);return{protocolVersion:$J,minProtocolVersion:FY,kobeVersion:p0,capabilities:[...tH],daemonPid:Y.daemon.pid,clientId:Y.clientId,tasks:Y.orch.listTasks().map(Qz)}}},{name:"daemon.status",handle(z,Y){return{daemonPid:Y.daemon.pid,kobeVersion:p0,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(Qz)}}},{name:"task.get",handle(z,Y){let G=O1(z,"taskId"),Z=Y.orch.getTask(G);if(!Z)throw Error(`task not found: ${G}`);return{task:Qz(Z)}}},{name:"task.create",async handle(z,Y){let G=O1(z,"repo"),Z=await Y.orch.createTask({repo:G,title:Jz(z,"title"),branch:Jz(z,"branch"),baseRef:Jz(z,"baseRef"),vendor:cB(z,"vendor"),modelEffort:Jz(z,"effort")});return{taskId:Z.id,task:Qz(Z)}}},{name:"task.archive",async handle(z,Y){let G=O1(z,"taskId");return await Y.orch.setArchived(G,mB(z,"archived")),{}}},{name:"task.rename",async handle(z,Y){let G=O1(z,"taskId");return await Y.orch.setTitle(G,O1(z,"title")),{}}},{name:"task.setBranch",async handle(z,Y){let G=O1(z,"taskId");return await Y.orch.setBranch(G,O1(z,"branch")),{}}},{name:"task.setVendor",async handle(z,Y){let G=O1(z,"taskId"),Z=cB(z,"vendor");if(!Z)throw Error("task.setVendor: vendor is required");return await Y.orch.setVendor(G,Z),{}}},{name:"task.delete",async handle(z,Y){let G=O1(z,"taskId");return await Y.orch.deleteTask(G,{force:mB(z,"force")}),Y.activity.clearTask(G),{}}},{name:"task.pin",async handle(z,Y){let G=O1(z,"taskId");return await Y.orch.setPinned(G,mB(z,"pinned")),{}}},{name:"task.move",async handle(z,Y){let G=O1(z,"taskId"),Z=O1(z,"direction");if(Z!=="up"&&Z!=="down")throw Error("direction must be up or down");return await Y.orch.moveTask(G,Z==="up"?-1:1),{}}},{name:"task.status",async handle(z,Y){let G=O1(z,"taskId"),Z=O1(z,"status");if(!fV(Z))throw Error("status must be a TaskStatus");let X=Z==="done"?Y.orch.getTask(G):void 0,Q=X?.status;if(await Y.orch.setStatus(G,Z),Z==="done"&&Q!=="done"&&X)try{let f=await Y.issues.mirrorTaskDone(X.repo,G);if(f)Y.bus.publish("issue.snapshot",f)}catch(f){T1("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 Z=G.map((X)=>{if(typeof X!=="object"||X===null)throw Error("each move needs taskId and position");let Q=X,f=O1(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(Z),{}}},{name:"task.ensureMain",async handle(z,Y){let G=O1(z,"repo"),Z=await Y.orch.ensureMainTask(G);return{task:Qz(Z)}}},{name:"project.forget",async handle(z,Y){let G=O1(z,"repo");return await Y.orch.forgetProject(G),{}}},{name:"task.ensureWorktree",async handle(z,Y){let G=O1(z,"taskId");Y.bus.publish("task.jobs",{taskId:G,kind:"ensureWorktree",phase:"running"});try{let Z=await Y.orch.ensureWorktree(G);return Y.bus.publish("task.jobs",{taskId:G,kind:"ensureWorktree",phase:"done"}),{worktreePath:Z}}catch(Z){throw Y.bus.publish("task.jobs",{taskId:G,kind:"ensureWorktree",phase:"error",error:Z instanceof Error?Z.message:String(Z)}),Z}}},{name:"worktree.discoverAdoptable",async handle(z,Y){let G=O1(z,"repo");return{worktrees:await Y.orch.discoverAdoptableWorktrees(G)}}},{name:"worktree.adopt",async handle(z,Y){let G=await Y.orch.adoptWorktree({repo:O1(z,"repo"),worktreePath:O1(z,"worktreePath"),branch:Jz(z,"branch"),vendor:cB(z,"vendor"),title:Jz(z,"title"),ifExists:Jz(z,"ifExists")==="return"?"return":"error"});return{task:Qz(G)}}},{name:"worktree.reconcile",async handle(z,Y){let G=O1(z,"cwd"),Z=O1(z,"worktreePath"),X=vB(Y.orch.listTasks(),G)??vB(Y.orch.listTasks(),Z);if(!X)return{adopted:!1};try{return{adopted:!0,taskId:(await Y.orch.adoptWorktree({repo:X,worktreePath:Z,ifExists:"return"})).id}}catch(Q){return T1("worktree-created",Q),{adopted:!1}}}},{name:"task.setActive",async handle(z,Y){let G=Jz(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(O1(z,"repoRoot"))}},{name:"issue.mutate",async handle(z,Y){let G=await Y.issues.mutate(O1(z,"repoRoot"),z.op);return Y.bus.publish("issue.snapshot",G),G}},{name:"session.deliver",async handle(z,Y){let G=O1(z,"taskId"),Z=O1(z,"text"),X=Jz(z,"source");if(X!==void 0&&X!=="note"&&X!=="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:Z,at:Date.now(),source:X??"dispatcher"}),{ok:!0}}},{name:"note.file",async handle(z,Y){let G=O1(z,"taskId"),Z=O1(z,"text"),X=Y.orch.getTask(G);if(!X)throw Error(`task not found: ${G}`);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||G;return Y.bus.publish("session.deliver",{taskId:Q.id,text:`[KOBE FIELD NOTE] from "${f}" (task ${G}): ${Z}`,at:Date.now(),source:"note"}),{ok:!0,routed:!0}}},{name:"engine.reportEvent",async handle(z,Y){let G=O1(z,"kind");if(!Zq(G))throw Error(`unknown engine event kind: ${G}`);let Z=Jz(z,"taskId"),X=Jz(z,"cwd");if(!Z&&X&&G==="session-start"){let H=kK(Y.orch.listTasks(),X);if(H)try{await Y.orch.adoptWorktree({repo:H.repo,worktreePath:H.worktreePath,ifExists:"return"})}catch(B){T1("worktree-autosync",B)}}let Q=Z??(X?NK(Y.orch.listTasks(),X):void 0);if(!Q)return{};let f=QC(z);if(Y.activity.report(Q,G,f),G==="turn-start")RK(Y.orch,Q).then((H)=>{if(H==="moved")console.log(`[status-rules] task ${Q} auto-moved backlog \u2192 in_progress`)}).catch((H)=>T1("status-rules",H));return{}}}].map((z)=>[z.name,z]))}function nB(J){if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function O1(J,z){let Y=J[z];if(typeof Y!=="string"||Y.length===0)throw Error(`${z} is required`);return Y}function Jz(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 mB(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 cB(J,z){let Y=Jz(J,z);return Y&&Y.trim().length>0?Y:void 0}function QC(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 Vf=k(()=>{Xq();gK();rJ();MJ();bK();eY()});import{execFile as qC}from"child_process";import{mkdir as fC,readFile as HC,realpath as SK,rename as BC,stat as jC,writeFile as WC}from"fs/promises";import{homedir as VC}from"os";import{dirname as KC,isAbsolute as UC,join as DC,resolve as IK}from"path";import{promisify as LC}from"util";function MC(J){return(J instanceof Error?J.message:String(J)).includes("not a git repository")}function Uf(J=process.env.KOBE_HOME_DIR??VC()){return DC(J,".kobe","issues.json")}function yK(J){return typeof J==="string"&&TK.includes(J)}function FC(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:yK(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 OC(){return{version:1,repos:{}}}function AC(){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 RC(J){let{stdout:z}=await pB("git",["-C",J,"rev-parse","--git-common-dir"]),Y=z.trim();return SK(UC(Y)?Y:IK(J,Y))}async function gC(J){let{stdout:z}=await pB("git",["-C",J,"rev-parse","--show-toplevel"]);return z.trim()}async function CC(J){let{stdout:z}=await pB("git",["-C",J,"worktree","list","--porcelain"]),Y=z.split(/\r?\n/).find((G)=>G.startsWith("worktree "))?.slice(9).trim();return Y?SK(Y):gC(J)}async function iB(J){if(typeof J!=="string"||J.length===0)throw Error("repoRoot is required");let z=IK(J);if(!(await jC(z).catch(()=>null))?.isDirectory())throw Error("repoRoot does not exist");try{let[G,Z]=await Promise.all([CC(z),RC(z)]);return{repoRoot:G,repoKey:Z}}catch(G){if(MC(G))throw Error("repoRoot is not a git repository");throw G}}async function lB(J){try{let z=JSON.parse(await HC(J,"utf8")),Y={};if(z.repos&&typeof z.repos==="object")for(let[G,Z]of Object.entries(z.repos)){if(!Z||typeof Z!=="object")continue;let X=Z;Y[G]={repoRoot:typeof X.repoRoot==="string"?X.repoRoot:"",nextId:typeof X.nextId==="number"?X.nextId:1,issues:Array.isArray(X.issues)?X.issues.map(FC).filter((Q)=>Q!==null):[]}}return{version:1,repos:Y}}catch(z){if(z.code==="ENOENT")return OC();throw z}}async function $B(J,z){await fC(KC(J),{recursive:!0});let Y=`${J}.tmp`;await WC(Y,`${JSON.stringify(z,null,2)}
|
|
65
|
+
`,"utf8"),await BC(Y,J)}function aB(J,z){return{repoRoot:J,exists:z!==null,nextId:z?.nextId??1,issues:z?.issues??[]}}async function _B(J,z){let G=(Kf.get(J)??Promise.resolve()).then(z),Z=G.then(()=>{return},()=>{return});return Kf.set(J,Z),Z.then(()=>{if(Kf.get(J)===Z)Kf.delete(J)}),G}class Df{path;constructor(J=Uf()){this.path=J}async list(J){let{repoRoot:z,repoKey:Y}=await iB(J);return _B(this.path,async()=>{let G=await lB(this.path),Z=G.repos[Y]??null;if(Z&&Z.repoRoot!==z)Z.repoRoot=z,await $B(this.path,G);return aB(z,Z)})}async mirrorTaskDone(J,z){let{repoRoot:Y,repoKey:G}=await iB(J);if(!z)return null;return _B(this.path,async()=>{let Z=await lB(this.path),X=Z.repos[G];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 $B(this.path,Z),aB(Y,X)})}async mutate(J,z){let{repoRoot:Y,repoKey:G}=await iB(J);if(!z||typeof z!=="object"||Array.isArray(z)||typeof z.type!=="string")throw Error("missing op");return _B(this.path,async()=>{let Z=await lB(this.path),X=Z.repos[G];if(!X)X={repoRoot:Y,nextId:1,issues:[]},Z.repos[G]=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:AC(),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(!yK(Q.status))throw Error(`invalid status: must be one of ${TK.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 $B(this.path,Z),aB(Y,X)})}}var pB,TK,Kf;var rB=k(()=>{pB=LC(qC),TK=["open","doing","hold","done"];Kf=new Map});import{lstat as xK,readdir as NC,realpath as kC,stat as bC}from"fs/promises";import{join as SC,relative as IC,resolve as uK,sep as TC}from"path";import{Readable as yC}from"stream";function vK(J,z={}){let Y=z.entryType||z.type;if(Y==="both")Y=mJ.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&&!EK.includes(Y))throw Error(`readdirp: Invalid type passed. Use one of ${EK.join(", ")}`);return z.root=J,new sB(z)}var mJ,oB,hK="READDIRP_RECURSIVE_ERROR",xC,EK,uC,EC,wC=(J)=>xC.has(J.code),PC,wK=(J)=>!0,PK=(J)=>{if(J===void 0)return wK;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 wK},sB;var mK=k(()=>{mJ={FILE_TYPE:"files",DIR_TYPE:"directories",FILE_DIR_TYPE:"files_directories",EVERYTHING_TYPE:"all"},oB={root:".",fileFilter:(J)=>!0,directoryFilter:(J)=>!0,type:mJ.FILE_TYPE,lstat:!1,depth:2147483648,alwaysStat:!1,highWaterMark:4096};Object.freeze(oB);xC=new Set(["ENOENT","EPERM","EACCES","ELOOP",hK]),EK=[mJ.DIR_TYPE,mJ.EVERYTHING_TYPE,mJ.FILE_DIR_TYPE,mJ.FILE_TYPE],uC=new Set([mJ.DIR_TYPE,mJ.EVERYTHING_TYPE,mJ.FILE_DIR_TYPE]),EC=new Set([mJ.EVERYTHING_TYPE,mJ.FILE_DIR_TYPE,mJ.FILE_TYPE]),PC=process.platform==="win32";sB=class sB extends yC{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={...oB,...J},{root:Y,type:G}=z;this._fileFilter=PK(z.fileFilter),this._directoryFilter=PK(z.directoryFilter);let Z=z.lstat?xK:bC;if(PC)this._stat=(X)=>Z(X,{bigint:!0});else this._stat=Z;this._maxDepth=z.depth!=null&&Number.isSafeInteger(z.depth)?z.depth:oB.depth,this._wantsDir=G?uC.has(G):!1,this._wantsFile=G?EC.has(G):!1,this._wantsEverything=G===mJ.EVERYTHING_TYPE,this._root=uK(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:Z}=z,X=Y.splice(0,J).map((f)=>this._formatEntry(f,G)),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(Z<=this._maxDepth)this.parents.push(this._exploreDir(f.fullPath,Z+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 NC(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 Z=uK(SC(z,G));Y={path:IC(this._root,Z),fullPath:Z,basename:G},Y[this._statsProp]=this._isDirent?J:await this._stat(Z)}catch(Z){this._onError(Z);return}return Y}_onError(J){if(wC(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 kC(Y),Z=await xK(G);if(Z.isFile())return"file";if(Z.isDirectory()){let X=G.length;if(Y.startsWith(G)&&Y.substr(X,1)===TC){let Q=Error(`Circular symlink detected: "${Y}" points to "${G}"`);return Q.code=hK,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 hC,unwatchFile as cK,watchFile as vC}from"fs";import{realpath as tB,lstat as mC,open as cC,stat as nK}from"fs/promises";import{type as dC}from"os";import*as u1 from"path";function dK(J,z,Y,G,Z){let X=(Q,f)=>{if(Y(J),Z(Q,f,{watchedPath:J}),f&&J!==f)Ff(u1.resolve(J,f),NG,u1.join(J,f))};try{return hC(J,{persistent:z.persistent},X)}catch(Q){G(Q);return}}class Gj{fsw;_boundHandleError;constructor(J){this.fsw=J,this._boundHandleError=(z)=>J._handleError(z)}_watchWithNodeFs(J,z){let Y=this.fsw.options,G=u1.dirname(J),Z=u1.basename(J);this.fsw._getWatchedDir(G).add(Z);let Q=u1.resolve(J),f={persistent:Y.persistent};if(!z)z=Of;let H;if(Y.usePolling){let B=Y.interval!==Y.binaryInterval;f.interval=B&&oC(Z)?Y.binaryInterval:Y.interval,H=eC(J,Q,f,{listener:z,rawEmitter:this.fsw._emitRaw})}else H=tC(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=u1.dirname(J),Z=u1.basename(J),X=this.fsw._getWatchedDir(G),Q=z;if(X.has(Z))return;let f=async(B,V)=>{if(!this.fsw._throttle(aC,J,5))return;if(!V||V.mtimeMs===0)try{let j=await nK(J);if(this.fsw.closed)return;let{atimeMs:K,mtimeMs:L}=j;if(!K||K<=L||L!==Q.mtimeMs)this.fsw._emit(Oz.CHANGE,J,j);if((iC||lC||$C)&&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,Z)}else if(X.has(Z)){let{atimeMs:j,mtimeMs:K}=V;if(!j||j<=K||K!==Q.mtimeMs)this.fsw._emit(Oz.CHANGE,J,V);Q=V}},H=this._watchWithNodeFs(J,f);if(!(Y&&this.fsw.options.ignoreInitial)&&this.fsw._isntIgnored(J)){if(!this.fsw._throttle(Oz.ADD,J,0))return;this.fsw._emit(Oz.ADD,J,z)}return H}async _handleSymlink(J,z,Y,G){if(this.fsw.closed)return;let Z=J.fullPath,X=this.fsw._getWatchedDir(z);if(!this.fsw.options.followSymlinks){this.fsw._incrReadyCount();let Q;try{Q=await tB(Y)}catch(f){return this.fsw._emitReady(),!0}if(this.fsw.closed)return;if(X.has(G)){if(this.fsw._symlinkPaths.get(Z)!==Q)this.fsw._symlinkPaths.set(Z,Q),this.fsw._emit(Oz.CHANGE,Y,J.stats)}else X.add(G),this.fsw._symlinkPaths.set(Z,Q),this.fsw._emit(Oz.ADD,Y,J.stats);return this.fsw._emitReady(),!0}if(this.fsw._symlinkPaths.has(Z))return!0;this.fsw._symlinkPaths.set(Z,!0)}_handleRead(J,z,Y,G,Z,X,Q){J=u1.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(nC,async(j)=>{if(this.fsw.closed){V=void 0;return}let K=j.path,L=u1.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=u1.join(Z,u1.relative(Z,L)),this._addToNodeFs(L,z,Y,X+1)}).on(Oz.ERROR,this._boundHandleError),new Promise((j,K)=>{if(!V)return K();V.once(zj,()=>{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,Z,X,Q)})})}async _handleDir(J,z,Y,G,Z,X,Q){let f=this.fsw._getWatchedDir(u1.dirname(J)),H=f.has(u1.basename(J));if(!(Y&&this.fsw.options.ignoreInitial)&&!Z&&!H)this.fsw._emit(Oz.ADD_DIR,J,z);f.add(u1.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(!Z){if(await this._handleRead(J,Y,X,Z,J,G,B),this.fsw.closed)return}V=this._watchWithNodeFs(J,(K,L)=>{if(L&&L.mtimeMs===0)return;this._handleRead(K,!1,X,Z,J,G,B)})}return V}async _addToNodeFs(J,z,Y,G,Z){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 _C[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=u1.resolve(J),j=H?await tB(J):J;if(this.fsw.closed)return;if(B=await this._handleDir(Q.watchPath,f,z,G,Z,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 tB(J):J;if(this.fsw.closed)return;let j=u1.dirname(Q.watchPath);if(this.fsw._getWatchedDir(j).add(Q.watchPath),this.fsw._emit(Oz.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(u1.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 nC="data",zj="end",iK="close",Of=()=>{},Af,Yj,iC,lC,$C,lK,y1,Oz,aC="watch",_C,NG="listeners",Lf="errHandlers",AZ="rawEmitters",pC,rC,oC=(J)=>rC.has(u1.extname(J).slice(1).toLowerCase()),Jj=(J,z)=>{if(J instanceof Set)J.forEach(z);else z(J)},wX=(J,z,Y)=>{let G=J[z];if(!(G instanceof Set))J[z]=G=new Set([G]);G.add(Y)},sC=(J)=>(z)=>{let Y=J[z];if(Y instanceof Set)Y.clear();else delete J[z]},PX=(J,z,Y)=>{let G=J[z];if(G instanceof Set)G.delete(Y);else if(G===Y)delete J[z]},$K=(J)=>J instanceof Set?J.size===0:!J,Mf,Ff=(J,z,Y,G,Z)=>{let X=Mf.get(J);if(!X)return;Jj(X[z],(Q)=>{Q(Y,G,Z)})},tC=(J,z,Y,G)=>{let{listener:Z,errHandler:X,rawEmitter:Q}=G,f=Mf.get(z),H;if(!Y.persistent){if(H=dK(J,Y,Z,X,Q),!H)return;return H.close.bind(H)}if(f)wX(f,NG,Z),wX(f,Lf,X),wX(f,AZ,Q);else{if(H=dK(J,Y,Ff.bind(null,z,NG),X,Ff.bind(null,z,AZ)),!H)return;H.on(Oz.ERROR,async(B)=>{let V=Ff.bind(null,z,Lf);if(f)f.watcherUnusable=!0;if(Yj&&B.code==="EPERM")try{await(await cC(J,"r")).close(),V(B)}catch(j){}else V(B)}),f={listeners:Z,errHandlers:X,rawEmitters:Q,watcher:H},Mf.set(z,f)}return()=>{if(PX(f,NG,Z),PX(f,Lf,X),PX(f,AZ,Q),$K(f.listeners))f.watcher.close(),Mf.delete(z),pC.forEach(sC(f)),f.watcher=void 0,Object.freeze(f)}},eB,eC=(J,z,Y,G)=>{let{listener:Z,rawEmitter:X}=G,Q=eB.get(z),f=Q&&Q.options;if(f&&(f.persistent<Y.persistent||f.interval>Y.interval))cK(z),Q=void 0;if(Q)wX(Q,NG,Z),wX(Q,AZ,X);else Q={listeners:Z,rawEmitters:X,options:Y,watcher:vC(z,Y,(H,B)=>{Jj(Q.rawEmitters,(j)=>{j(Oz.CHANGE,z,{curr:H,prev:B})});let V=H.mtimeMs;if(H.size!==B.size||V>B.mtimeMs||V===0)Jj(Q.listeners,(j)=>j(J,H))})},eB.set(z,Q);return()=>{if(PX(Q,NG,Z),PX(Q,AZ,X),$K(Q.listeners))eB.delete(z),cK(z),Q.options=Q.watcher=void 0,Object.freeze(Q)}};var aK=k(()=>{Af=process.platform,Yj=Af==="win32",iC=Af==="darwin",lC=Af==="linux",$C=Af==="freebsd",lK=dC()==="OS400",y1={ALL:"all",READY:"ready",ADD:"add",CHANGE:"change",ADD_DIR:"addDir",UNLINK:"unlink",UNLINK_DIR:"unlinkDir",RAW:"raw",ERROR:"error"},Oz=y1,_C={lstat:mC,stat:nK},pC=[NG,Lf,AZ],rC=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"]),Mf=new Map;eB=new Map});import{EventEmitter as JN}from"events";import{stat as zN,Stats as Ic}from"fs";import{readdir as YN,stat as GN}from"fs/promises";import*as Q1 from"path";function Rf(J){return Array.isArray(J)?J:[J]}function BN(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 jN(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(tK,"/"),z)J="/"+J;return J}function _K(J,z,Y){let G=jN(z);for(let Z=0;Z<J.length;Z++){let X=J[Z];if(X(G,Y))return!0}return!1}function WN(J,z){if(J==null)throw TypeError("anymatch: specify first argument");let G=Rf(J).map((Z)=>BN(Z));if(z==null)return(Z,X)=>{return _K(G,Z,X)};return _K(G,z)}class J6{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!==sK&&J!==XN)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 YN(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=Of,this.items=KN,Object.freeze(this)}}class z6{fsw;path;watchPath;fullWatchPath;dirParts;followSymlinks;statMethod;constructor(J,z,Y){this.fsw=Y;let G=J;this.path=J=J.replace(HN,""),this.watchPath=G,this.fullWatchPath=Q1.resolve(G),this.dirParts=[],this.dirParts.forEach((Z)=>{if(Z.length>1)Z.pop()}),this.followSymlinks=z,this.statMethod=z?UN:DN}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 G6(J,z={}){let Y=new Y6(z);return Y.add(J),Y}var Zj="/",ZN="//",sK=".",XN="..",QN="string",qN,tK,fN,HN,Xj=(J)=>typeof J==="object"&&J!==null&&!(J instanceof RegExp),pK=(J)=>{let z=Rf(J).flat();if(!z.every((Y)=>typeof Y===QN))throw TypeError(`Non-string provided as watch path: ${z}`);return z.map(eK)},rK=(J)=>{let z=J.replace(qN,Zj),Y=!1;if(z.startsWith(ZN))Y=!0;if(z=z.replace(tK,Zj),Y)z=Zj+z;return z},eK=(J)=>rK(Q1.normalize(rK(J))),oK=(J="")=>(z)=>{if(typeof z==="string")return eK(Q1.isAbsolute(z)?z:Q1.join(J,z));else return z},VN=(J,z)=>{if(Q1.isAbsolute(J))return J;return Q1.join(z,J)},KN,UN="stat",DN="lstat",Y6;var Z6=k(()=>{mK();aK();/*! chokidar - MIT License (c) 2012 Paul Miller (paulmillr.com) */qN=/\\/g,tK=/\/\//g,fN=/\..*\.(sw[px])$|~$|\.subl.*\.tmp/,HN=/^\.[/\\]/;KN=Object.freeze(new Set);Y6=class Y6 extends JN{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?Rf(J.ignored):Rf([]),awaitWriteFinish:z===!0?Y:typeof z==="object"?{...Y,...z}:!1};if(lK)G.usePolling=!0;if(G.atomic===void 0)G.atomic=!G.usePolling;let Z=process.env.CHOKIDAR_USEPOLLING;if(Z!==void 0){let f=Z.toLowerCase();if(f==="false"||f==="0")G.usePolling=!1;else if(f==="true"||f==="1")G.usePolling=!0;else G.usePolling=!!f}let X=process.env.CHOKIDAR_INTERVAL;if(X)G.interval=Number.parseInt(X,10);let Q=0;this._emitReady=()=>{if(Q++,Q>=this._readyCount)this._emitReady=Of,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 Gj(this),Object.freeze(G)}_addIgnoredPath(J){if(Xj(J)){for(let z of this._ignoredPaths)if(Xj(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(Xj(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 Z=pK(J);if(G)Z=Z.map((X)=>{return VN(X,G)});if(Z.forEach((X)=>{this._removeIgnoredPath(X)}),this._userIgnored=void 0,!this._readyCount)this._readyCount=0;return this._readyCount+=Z.length,Promise.all(Z.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=pK(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 Z=(this.options.cwd?Q1.relative(this.options.cwd,Y):Y)||sK;J[Z]=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(Yj)z=Q1.normalize(z);if(G.cwd)z=Q1.relative(G.cwd,z);let Z=[z];if(Y!=null)Z.push(Y);let X=G.awaitWriteFinish,Q;if(X&&(Q=this._pendingWrites.get(z)))return Q.lastChange=new Date,this;if(G.atomic){if(J===y1.UNLINK)return this._pendingUnlinks.set(z,[J,...Z]),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(X&&(J===y1.ADD||J===y1.CHANGE)&&this._readyEmitted){let f=(H,B)=>{if(H)J=y1.ERROR,Z[0]=H,this.emitWithAll(J,Z);else if(B){if(Z.length>1)Z[1]=B;else Z.push(B);this.emitWithAll(J,Z)}};return this._awaitWriteFinish(z,X.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 GN(f)}catch(B){}if(!H||this.closed)return;Z.push(H)}return this.emitWithAll(J,Z),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 Z=G.get(z);if(Z)return Z.count++,!1;let X,Q=()=>{let H=G.get(z),B=H?H.count:0;if(G.delete(z),clearTimeout(X),H)clearTimeout(H.timeoutObject);return B};X=setTimeout(Q,Y);let f={timeoutObject:X,clear:Q,count:0};return G.set(z,f),f}_incrReadyCount(){return this._readyCount++}_awaitWriteFinish(J,z,Y,G){let Z=this.options.awaitWriteFinish;if(typeof Z!=="object")return;let X=Z.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){zN(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,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&&fN.test(J))return!0;if(!this._userIgnored){let{cwd:Y}=this.options,Z=(this.options.ignored||[]).map(oK(Y)),Q=[...[...this._ignoredPaths].map(oK(Y)),...Z];this._userIgnored=WN(Q,void 0)}return this._userIgnored(J,z)}_isntIgnored(J,z){return!this._isIgnored(J,z)}_getWatchHelpers(J){return new z6(J,this.options.followSymlinks,this)}_getWatchedDir(J){let z=Q1.resolve(J);if(!this._watched.has(z))this._watched.set(z,new J6(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),Z=Q1.resolve(G);if(Y=Y!=null?Y:this._watched.has(G)||this._watched.has(Z),!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(Z))this._symlinkPaths.delete(Z);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(Z);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=vK(J,Y);return this._streams.add(G),G.once(iK,()=>{G=void 0}),G.once(zj,()=>{if(G)this._streams.delete(G),G=void 0}),G}}});import{mkdirSync as LN,statSync as MN}from"fs";import{basename as X6,dirname as FN,join as ON}from"path";function gf(J){if(J.debounceMs<=0)return()=>{};let z=FN(J.filePath),Y=new Set([X6(J.filePath),...J.matchBasenames??[]]),G=null,Z=null,X=!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(X6(V)))return;f()},B=(V)=>{try{let j=MN(ON(z,V));return`${j.mtimeMs}:${j.size}`}catch{return null}};try{LN(z,{recursive:!0});let V=new Map;for(let j of Y)V.set(j,B(j));Z=G6(z,{depth:0,ignoreInitial:!0}),Z.on("add",H),Z.on("change",H),Z.on("unlink",H),Z.on("error",J.onError),Z.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,G)clearTimeout(G),G=null;let V=Z;Z=null,V?.close().catch(J.onError)}}var Qj=k(()=>{Z6()});import{homedir as AN}from"os";import{basename as RN,join as gN}from"path";function fj(J=process.env.KOBE_HOME_DIR??AN()){return gN(J,".kobe","settings","keybindings.yaml")}function Q6(J,z={}){let Y=z.debounceMs??qj;if(Y<=0)return()=>{};let G=z.path??fj(),Z=RN(G),X=Z.replace(/\.yaml$/,".yml"),Q=0;return J.publish("keybindings",{rev:Q}),gf({filePath:G,matchBasenames:[Z,X],debounceMs:Y,onTrigger:()=>{try{Q+=1,J.publish("keybindings",{rev:Q})}catch(H){T1("keybindings-watcher",H)}},onError:(H)=>T1("keybindings-watcher",H)})}var qj=200;var q6=k(()=>{Qj()});class Hj{clients;idleGraceMs;onIdleStop;schedule;log;cancelIdle=null;stopping=!1;constructor(J){this.clients=J.clients,this.idleGraceMs=J.idleGraceMs,this.onIdleStop=J.onIdleStop,this.schedule=J.schedule??CN,this.log=J.log??hz}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 CN=(J,z)=>{let Y=setTimeout(J,z);return Y.unref?.(),()=>clearTimeout(Y)};var f6=()=>{};import{spawn as NN}from"child_process";function uN(J,z,Y){return new Promise((G)=>{let Z="",X="",Q=!1,f=(B,V)=>{if(Q)return;Q=!0,G({status:B,stdout:Z,stderr:X,spawnError:V})},H=NN("gh",J.slice(),{cwd:z,stdio:["ignore","pipe","pipe"],signal:Y,killSignal:"SIGKILL"});H.stdout?.on("data",(B)=>{Z+=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 wN(J){if(J.archived)return!1;if(J.kind==="main")return!1;if(!J.branch||!J.worktreePath)return!1;if(l1(J.repo)||l1(J.worktreePath))return!1;return!0}async function PN(J,z){let Y=z.tickMs??hX,G=z.rand,Z={tickMs:Y,settledMs:bN,noPrMs:kN,noRemoteMs:TN,failureBaseMs:SN,failureCapMs:IN,jitterRatio:yN},X=[];for(let Q of J.listTasks()){if(!wN(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"){hz("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,Z,G));continue}if(B.kind==="empty"){z.schedule.set(Q.id,LX({kind:"empty"},H,z.now,Z,G));continue}let V=EV(B.view,z.at),j=J.getTask(Q.id);if(!j){z.schedule.delete(Q.id);continue}if(!Oq(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,Z,G))}catch(B){T1("pr-status-poller",B),z.schedule.set(Q.id,LX({kind:"error",error:"network"},H,z.now,Z,G))}}return X}function H6(J,z=hX,Y,G=EN){if(z<=0)return()=>{};let Z=new Map,X=!1,f=setInterval(()=>{if(Y&&!Y())return;if(X)return;X=!0,PN(J,{run:G,now:Date.now(),at:new Date().toISOString(),schedule:Z,tickMs:z}).catch((H)=>T1("pr-status-poller",H)).finally(()=>{X=!1})},z);return f.unref?.(),()=>clearInterval(f)}var hX=30000,kN=300000,bN=600000,SN,IN=900000,TN=1800000,yN=0.2,xN=1e4,EN=async(J,z)=>{let Y=new AbortController,G=!1,Z=setTimeout(()=>{G=!0,Y.abort()},xN);try{let X=await uN(["pr","view",z,"--json",uV],J,Y.signal);if(X.status===0&&!G)try{let Q=JSON.parse(X.stdout);return typeof Q.number==="number"?{kind:"pr",view:Q}:{kind:"empty"}}catch{return d8({parseError:!0})}return d8({spawnError:X.spawnError,timedOut:G,exitCode:X.status,stderr:X.stderr})}finally{clearTimeout(Z)}};var B6=k(()=>{n8();F1();SN=hX});function cN(J,z){return J.mtimeMs===z.mtimeMs&&J.completionId===z.completionId&&J.completionAt===z.completionAt}async function dN(J,z,Y,G){let Z=await _G(z,J),X=await Y.latestCompletion(J);return{mtimeMs:Z,completionId:X?.id??null,completionAt:X?.timestampMs??0}}function nN(J){let z=new Map;for(let Y of J){if(Y.archived)continue;if(!Y.worktreePath)continue;if(l1(Y.repo)||l1(Y.worktreePath))continue;if(z.has(Y.worktreePath))continue;z.set(Y.worktreePath,Y.vendor??$1)}return z}class j6{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=nN(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){T1("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 G=this.options.cadence??{timeoutMs:hN,slowRetryMs:vN,minIntervalMs:mN},Z=this.options.run??dN,X=Y;tG(X,G,(Q)=>Z(J,X.vendor,X.detector,Q),(Q)=>{if(this.stopped)return;if(this.entries.get(J)!==X)return;if(X.value&&cN(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 W6(J,z,Y=Bj,G){if(Y<=0)return()=>{};let Z=new j6(J,z,{hasSubscribers:G});Z.tick();let X=setInterval(()=>Z.tick(),Y);return X.unref?.(),()=>{clearInterval(X),Z.stop()}}var Bj=1500,hN=4000,vN=60000,mN=1500;var V6=k(()=>{Yq();eG();Gq();F1();rJ()});import{readFileSync as iN}from"fs";import{homedir as lN}from"os";import{basename as $N,join as aN}from"path";function Wj(J=process.env.KOBE_HOME_DIR??lN()){return aN(J,".config","kobe","state.json")}function K6(J){let z={};try{let B=JSON.parse(iN(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,Z=typeof z.focusAccent==="string"&&pN.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:G,focusAccent:Z,locale:H,sortMode:X,keysCollapsed:Q,projectFilter:f}}function rN(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 U6(J,z={}){let Y=z.debounceMs??jj;if(Y<=0)return()=>{};let G=z.pollMs??_N,Z=z.statePath??Wj(),X=$N(Z),Q=K6(Z);return J.publish("ui-prefs",Q),gf({filePath:Z,matchBasenames:[X],debounceMs:Y,pollMs:G,onTrigger:()=>{try{let H=K6(Z);if(rN(Q,H))return;Q=H,J.publish("ui-prefs",H)}catch(H){T1("ui-prefs-watcher",H)}},onError:(H)=>T1("ui-prefs-watcher",H)})}var jj=200,_N=250,pN;var D6=k(()=>{Qj();pN=["primary","success","info"]});function RZ(J){return kG.includes(J)?J:"auto"}var kG,L6,XY="editor.kind",wY="editor.customCommand",Cf="auto";var Nf=k(()=>{kG=["auto","vim","nvim","nano","emacs","custom"],L6=["nvim","vim","emacs","nano"]});function SG(J){return J==="taskpanel"?"taskpanel":"chattab"}var QY="settings.surface",bG="chattab";function cJ(J=process.env){return{...J,...Vj}}var Vj;var PY=k(()=>{Vj={GIT_OPTIONAL_LOCKS:"0"}});async function gZ(J,z,Y={}){if(!J)return{stdout:"",stderr:"worktreePath is required",status:-1};let G=(Y.execForPath??YY)(J),Z=Y.timeoutMs&&Y.timeoutMs>0?new AbortController:null,X=!1,Q=Z?setTimeout(()=>{X=!0,Z.abort()},Y.timeoutMs):null,f=Z&&Y.signal?AbortSignal.any([Z.signal,Y.signal]):Z?.signal??Y.signal,H;try{H=await G.run(["git",...z],{cwd:J,env:Vj,signal:f})}catch(B){if(Q)clearTimeout(Q);return{stdout:"",stderr:B instanceof Error?B.message:String(B),status:-1}}if(Q)clearTimeout(Q);if(X&&H.exitCode===-1&&!H.stderr)return{stdout:H.stdout,stderr:`git ${z.join(" ")} timed out after ${Y.timeoutMs}ms`,status:-1};return{stdout:H.stdout,stderr:H.stderr,status:H.exitCode}}function oN(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 M6(J,z,Y={}){let G=oN(J,z);if(!G)return null;let Z=(Y.execForPath??YY)(J);try{return await Z.readFile(G)}catch{return null}}var kf=k(()=>{Vz();PY()});import{statSync as sN}from"fs";async function vX(J,z){let Y=await gZ(J,z,{timeoutMs:tN}),G=Y.status??-1;return{ok:G===0,stdout:Y.stdout,stderr:Y.stderr,code:G}}function Jk(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 F6(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 Z=null,X=G.match(/^\+\+\+ b\/(.*)$/m);if(X&&X[1]!=="/dev/null")Z=X[1];else{let Q=G.match(/^diff --git a\/.* b\/(.*)$/m);if(Q)Z=Q[1]}if(!Z)continue;z.set(zk(Z),G.endsWith(`
|
|
66
66
|
`)?G:`${G}
|
|
67
|
-
`)}return z}function
|
|
68
|
-
`:G==="t"?"\t":G)}async function
|
|
67
|
+
`)}return z}function zk(J){if(!(J.startsWith('"')&&J.endsWith('"')))return J;return J.slice(1,-1).replace(/\\([\\"nt])/g,(Y,G)=>G==="n"?`
|
|
68
|
+
`:G==="t"?"\t":G)}async function Yk(J,z,Y){let G=Array(J.length),Z=Math.max(1,Math.min(z,J.length)),X=0;async function Q(){while(X<J.length){let f=X++;G[f]=await Y(J[f],f)}}return await Promise.all(Array.from({length:Z},()=>Q())),G}async function Gk(J,z){let Y=await vX(J,["diff","--no-color","--no-index","--","/dev/null",z]);if(Y.stdout.trim())return Y.stdout.endsWith(`
|
|
69
69
|
`)?Y.stdout:`${Y.stdout}
|
|
70
|
-
`;return""}async function
|
|
71
|
-
`),O={files:K,raw:A};return Response.json(O)}var rN=15000,oN=8;var F6=k(()=>{Vz();Nf()});import{isAbsolute as zk}from"path";function A6(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9_-]+$/.test(J)}function Gk(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9._-]+$/.test(J)&&!J.includes("..")}async function Zk(J){let z=J.searchParams.get("worktreePath"),Y=J.searchParams.get("vendor")??"claude";if(!z||!zk(z))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!A6(Y))return Response.json({error:"invalid vendor"},{status:400});try{let G=t1(Y).history,[Z,X]=await Promise.all([G.listSessionIdsForWorktree(z),G.latestTranscriptMtimeForWorktree(z)]);return Response.json({sessions:Z,latestMtime:X})}catch(G){return Response.json({error:G instanceof Error?G.message:String(G)},{status:500})}}async function Xk(J){let z=J.searchParams.get("vendor")??"claude",Y=J.searchParams.get("sessionId");if(!A6(z))return Response.json({error:"invalid vendor"},{status:400});if(!Gk(Y))return Response.json({error:"invalid sessionId"},{status:400});try{let G=await t1(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 R6(J,z){if(z.pathname!==O6&&z.pathname!==Yk)return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return z.pathname===O6?Zk(z):Xk(z)}var O6="/api/history/sessions",Yk="/api/history/messages";var g6=k(()=>{kY()});import{mkdir as Qk,readFile as qk,writeFile as fk}from"fs/promises";import{join as C6}from"path";function N6(){return C6(qJ(),"notes")}function k6(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9_-]+$/.test(J)}function b6(J){return C6(N6(),`${J}.md`)}async function Bk(J){let z=J.searchParams.get("taskId");if(!k6(z))return Response.json({error:"invalid taskId"},{status:400});try{let Y="";try{Y=await qk(b6(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 jk(J){let z;try{z=await J.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(!k6(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 Qk(N6(),{recursive:!0}),await fk(b6(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 S6(J,z){if(z.pathname!==Hk)return null;if(J.method==="GET")return Bk(z);if(J.method==="PUT")return jk(J);return Response.json({error:"method not allowed"},{status:405})}var Hk="/api/notes";var I6=k(()=>{p1()});function Vj(J,z,Y=[]){if(z===void 0)return null;if(typeof z!=="string")return Vj(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 Vj(J,G,[...Y,z])}function Wj(J){return Math.max(0,Math.min(255,Math.round(J)))}function vX(J,z,Y){let G=Number.parseInt(J.slice(1),16),Z=Number.parseInt(z.slice(1),16),X=(f,H)=>f>>H&255;return`#${(Wj(X(G,16)+(X(Z,16)-X(G,16))*Y)<<16|Wj(X(G,8)+(X(Z,8)-X(G,8))*Y)<<8|Wj(X(G,0)+(X(Z,0)-X(G,0))*Y)).toString(16).padStart(6,"0")}`}function Vk(J){let z=(f)=>Vj(J,J.theme[f]),Y=z("background"),G=z("text");if(!Y||!G)return null;let Z=z("textMuted")??vX(G,Y,0.35),X=z("primary")??G,Q=z("border")??vX(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")??vX(Q,G,0.3),fg:G,muted:Z,subtle:vX(Z,Y,0.35),primary:X,"primary-hover":vX(X,G,0.35),"kobe-orange":X,"kobe-green":z("success")??G,"kobe-blue":z("info")??G,"kobe-red":z("error")??G,"kobe-yellow":z("warning")??G,"kobe-violet":z("secondary")??X}}function T6(J,z){if(z.pathname!==Uk)return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Response.json({themes:Kk})}var Wk,Kk,Uk="/api/themes";var y6=k(()=>{xq();uq();Eq();wq();Pq();hq();vq();Wk={claude:HZ,conductor:BZ,dracula:jZ,nord:WZ,opencode:VZ,"osaka-jade":KZ,tokyonight:UZ};Kk=Object.fromEntries(Object.entries(Wk).map(([J,z])=>[J,Vk(z)]).filter((J)=>J[1]!==null))});import{createHash as Dk,randomUUID as Lk}from"crypto";import{mkdir as Mk}from"fs/promises";import{join as Kj,resolve as Fk}from"path";function Rk(J){return Dk("sha1").update(J).digest("hex").slice(0,16)}async function Nk(J){let z=Number.parseInt(J.headers.get("content-length")??"",10);if(Number.isFinite(z)&&z>x6)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 Z=Y.get("file");if(!(Z instanceof File))return Response.json({error:"file must be a File"},{status:400});if(Z.size>x6)return Response.json({error:"asset too large"},{status:413});let X=Ok[Z.type];if(!X)return Response.json({error:`unsupported content-type: ${Z.type||"unknown"}`},{status:415});try{let Q=Rk(G),f=Kj(uH(),Q);await Mk(f,{recursive:!0});let B=`${Lk()}.${X}`;return await Bun.write(Kj(f,B),Z),Response.json({url:`${kf}/${Q}/${B}`})}catch(Q){return Response.json({error:Q instanceof Error?Q.message:String(Q)},{status:500})}}async function kk(J){let z=J.slice(kf.length+1),Y=z.indexOf("/");if(Y<0)return Response.json({error:"not found"},{status:404});let G=z.slice(0,Y),Z=z.slice(Y+1);if(!gk.test(G)||!Ck.test(Z))return Response.json({error:"invalid asset path"},{status:400});let X=uH(),Q=Fk(X,G,Z);if(Q!==Kj(X,G,Z)||!Q.startsWith(`${X}/`))return Response.json({error:"invalid asset path"},{status:400});let f=Z.slice(Z.lastIndexOf(".")+1).toLowerCase(),H=Ak[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 u6(J,z){if(z.pathname===kf){if(J.method==="POST")return Nk(J);return Response.json({error:"method not allowed"},{status:405})}if(z.pathname.startsWith(`${kf}/`)){if(J.method==="GET")return kk(z.pathname);return Response.json({error:"method not allowed"},{status:405})}return null}var kf="/api/issue-assets",x6=10485760,Ok,Ak,gk,Ck;var E6=k(()=>{p1();Ok={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp"},Ak={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"};gk=/^[a-f0-9]{16}$/,Ck=/^[A-Za-z0-9_-]+\.[a-z0-9]+$/});function w6(J,z=500){return Response.json({error:J instanceof Error?J.message:String(J)},{status:z})}function P6(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 bk(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 w6(G,P6(G))}}async function Sk(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(Z){return w6(Z,P6(Z))}}async function h6(J,z,Y){if(z.pathname!=="/api/issues")return null;if(J.method==="GET")return bk(Y,z);if(J.method==="POST")return Sk(Y,J);return Response.json({error:"method not allowed"},{status:405})}function v6(J){return Ik.has(String(J??"").trim().toLowerCase())}function m6(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 Tk(J){let z=m6(J);return z!==null&&v6(z)}function c6(J,z={}){if(!J)return!0;if(Tk(J))return!0;let Y=z.allowedHost?.trim();if(!Y)return!1;let G=m6(J);return G!==null&&G===Y}function d6(J){let z=String(J??"").trim();return z&&!v6(z)?z:void 0}var Ik;var n6=k(()=>{Ik=new Set(["localhost","127.0.0.1","::1","[::1]"])});var yk,i6;var l6=k(()=>{yk=["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"],i6=new Set(yk)});var Sf={};f1(Sf,{resolveRepoInit:()=>_6,resolveEngineLaunchInit:()=>CZ});import{existsSync as a6,readFileSync as xk}from"fs";import{join as bf}from"path";function Ek(J){return a6(bf(J,$6))?`sh ${$6}`:void 0}function wk(J){let z=bf(J,uk);if(!a6(z))return;try{let Y=xk(z,"utf8");return Y.trim().length>0?Y:void 0}catch{return}}function _6(J,z){let Y=J?$H(J):{},G=Ek(z)??Y.initScript,Z=wk(z)??Y.initPrompt;return{initScript:G&&G.trim().length>0?G:void 0,initPrompt:Z&&Z.trim().length>0?Z:void 0}}function Pk(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 CZ(J,z,Y={kind:"repo-init"}){let G=_6(J,z);return{initScript:G.initScript,firstMessage:Pk(Y,G)}}var $6,uk;var NZ=k(()=>{F1();$6=bf(".kobe","init.sh"),uk=bf(".kobe","init-prompt.md")});async function hk(J,z){let{task:Y}=await J.request("task.get",{taskId:z});return Y}async function Uj(J,z){let Y=await hk(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 p6(J,z){let{task:Y,worktreePath:G}=await Uj(J,z),Z=C1(z);if(!await V1(Z)){let X=CZ(Y.repo??"",G,{kind:"repo-init"});if(!await IX({name:Z,cwd:G,command:oJ(Y.vendor,Y.modelEffort),taskId:z,vendor:Y.vendor,launchInit:X}))throw Error(`failed to start tmux session for ${z}`)}return{session:Z,worktreePath:G}}function vk(J){return iQ(J,{bareSafe:!0})}async function r6(J,z){let{task:Y,worktreePath:G}=await Uj(J,z),Z=Y.kind==="main"?void 0:z,X=Y.kind==="main"?z:void 0,Q=[...Cq(gq(oJ(Y.vendor,Y.modelEffort),Y.vendor,Z),Y.vendor,X)],f=CZ(Y.repo??"",G,{kind:"none"}),H=vk(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
|
|
70
|
+
`;return""}async function O6(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(!zZ(G))return Response.json({error:"worktreePath does not exist"},{status:400});if(!YY(G).isRemote)try{if(!sN(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 X=await vX(G,["rev-parse","--is-inside-work-tree"]);if(!X.ok||X.stdout.trim()!=="true")return Response.json({error:`not a git work tree: ${X.stderr.trim()||G}`},{status:500});let[Q,f,H]=await Promise.all([vX(G,["status","--porcelain=v1","-z","--untracked-files=all"]),vX(G,["diff","--no-color"]),vX(G,["diff","--no-color","--staged"])]);if(!Q.ok)return Response.json({error:`git status failed: ${Q.stderr.trim()}`},{status:500});let B=F6(f.stdout),V=F6(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=_!==" "&&_!=="?",i="";if(M)L.push({fileIndex:K.length,path:N});else if(i=V.get(N)??B.get(N)??"",V.has(N)&&B.has(N))i=`${V.get(N)}${B.get(N)}`;K.push({path:N,status:M?"untracked":Jk(I),staged:r,patch:i})}if(L.length>0){let g=await Yk(L,eN,(x)=>Gk(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(`
|
|
71
|
+
`),O={files:K,raw:A};return Response.json(O)}var tN=15000,eN=8;var A6=k(()=>{Vz();kf()});import{isAbsolute as Zk}from"path";function g6(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9_-]+$/.test(J)}function Qk(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9._-]+$/.test(J)&&!J.includes("..")}async function qk(J){let z=J.searchParams.get("worktreePath"),Y=J.searchParams.get("vendor")??"claude";if(!z||!Zk(z))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!g6(Y))return Response.json({error:"invalid vendor"},{status:400});try{let G=t1(Y).history,[Z,X]=await Promise.all([G.listSessionIdsForWorktree(z),G.latestTranscriptMtimeForWorktree(z)]);return Response.json({sessions:Z,latestMtime:X})}catch(G){return Response.json({error:G instanceof Error?G.message:String(G)},{status:500})}}async function fk(J){let z=J.searchParams.get("vendor")??"claude",Y=J.searchParams.get("sessionId");if(!g6(z))return Response.json({error:"invalid vendor"},{status:400});if(!Qk(Y))return Response.json({error:"invalid sessionId"},{status:400});try{let G=await t1(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 C6(J,z){if(z.pathname!==R6&&z.pathname!==Xk)return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return z.pathname===R6?qk(z):fk(z)}var R6="/api/history/sessions",Xk="/api/history/messages";var N6=k(()=>{kY()});import{mkdir as Hk,readFile as Bk,writeFile as jk}from"fs/promises";import{join as k6}from"path";function b6(){return k6(qJ(),"notes")}function S6(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9_-]+$/.test(J)}function I6(J){return k6(b6(),`${J}.md`)}async function Vk(J){let z=J.searchParams.get("taskId");if(!S6(z))return Response.json({error:"invalid taskId"},{status:400});try{let Y="";try{Y=await Bk(I6(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 Kk(J){let z;try{z=await J.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(!S6(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 Hk(b6(),{recursive:!0}),await jk(I6(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 T6(J,z){if(z.pathname!==Wk)return null;if(J.method==="GET")return Vk(z);if(J.method==="PUT")return Kk(J);return Response.json({error:"method not allowed"},{status:405})}var Wk="/api/notes";var y6=k(()=>{p1()});function Uj(J,z,Y=[]){if(z===void 0)return null;if(typeof z!=="string")return Uj(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 Uj(J,G,[...Y,z])}function Kj(J){return Math.max(0,Math.min(255,Math.round(J)))}function mX(J,z,Y){let G=Number.parseInt(J.slice(1),16),Z=Number.parseInt(z.slice(1),16),X=(f,H)=>f>>H&255;return`#${(Kj(X(G,16)+(X(Z,16)-X(G,16))*Y)<<16|Kj(X(G,8)+(X(Z,8)-X(G,8))*Y)<<8|Kj(X(G,0)+(X(Z,0)-X(G,0))*Y)).toString(16).padStart(6,"0")}`}function Dk(J){let z=(f)=>Uj(J,J.theme[f]),Y=z("background"),G=z("text");if(!Y||!G)return null;let Z=z("textMuted")??mX(G,Y,0.35),X=z("primary")??G,Q=z("border")??mX(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")??mX(Q,G,0.3),fg:G,muted:Z,subtle:mX(Z,Y,0.35),primary:X,"primary-hover":mX(X,G,0.35),"kobe-orange":X,"kobe-green":z("success")??G,"kobe-blue":z("info")??G,"kobe-red":z("error")??G,"kobe-yellow":z("warning")??G,"kobe-violet":z("secondary")??X}}function x6(J,z){if(z.pathname!==Mk)return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Response.json({themes:Lk})}var Uk,Lk,Mk="/api/themes";var u6=k(()=>{uq();Eq();wq();Pq();hq();vq();mq();Uk={claude:HZ,conductor:BZ,dracula:jZ,nord:WZ,opencode:VZ,"osaka-jade":KZ,tokyonight:UZ};Lk=Object.fromEntries(Object.entries(Uk).map(([J,z])=>[J,Dk(z)]).filter((J)=>J[1]!==null))});import{createHash as Fk,randomUUID as Ok}from"crypto";import{mkdir as Ak}from"fs/promises";import{join as Dj,resolve as Rk}from"path";function Nk(J){return Fk("sha1").update(J).digest("hex").slice(0,16)}async function Sk(J){let z=Number.parseInt(J.headers.get("content-length")??"",10);if(Number.isFinite(z)&&z>E6)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 Z=Y.get("file");if(!(Z instanceof File))return Response.json({error:"file must be a File"},{status:400});if(Z.size>E6)return Response.json({error:"asset too large"},{status:413});let X=gk[Z.type];if(!X)return Response.json({error:`unsupported content-type: ${Z.type||"unknown"}`},{status:415});try{let Q=Nk(G),f=Dj(wH(),Q);await Ak(f,{recursive:!0});let B=`${Ok()}.${X}`;return await Bun.write(Dj(f,B),Z),Response.json({url:`${bf}/${Q}/${B}`})}catch(Q){return Response.json({error:Q instanceof Error?Q.message:String(Q)},{status:500})}}async function Ik(J){let z=J.slice(bf.length+1),Y=z.indexOf("/");if(Y<0)return Response.json({error:"not found"},{status:404});let G=z.slice(0,Y),Z=z.slice(Y+1);if(!kk.test(G)||!bk.test(Z))return Response.json({error:"invalid asset path"},{status:400});let X=wH(),Q=Rk(X,G,Z);if(Q!==Dj(X,G,Z)||!Q.startsWith(`${X}/`))return Response.json({error:"invalid asset path"},{status:400});let f=Z.slice(Z.lastIndexOf(".")+1).toLowerCase(),H=Ck[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 w6(J,z){if(z.pathname===bf){if(J.method==="POST")return Sk(J);return Response.json({error:"method not allowed"},{status:405})}if(z.pathname.startsWith(`${bf}/`)){if(J.method==="GET")return Ik(z.pathname);return Response.json({error:"method not allowed"},{status:405})}return null}var bf="/api/issue-assets",E6=10485760,gk,Ck,kk,bk;var P6=k(()=>{p1();gk={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp"},Ck={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"};kk=/^[a-f0-9]{16}$/,bk=/^[A-Za-z0-9_-]+\.[a-z0-9]+$/});function h6(J,z=500){return Response.json({error:J instanceof Error?J.message:String(J)},{status:z})}function v6(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 Tk(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 h6(G,v6(G))}}async function yk(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(Z){return h6(Z,v6(Z))}}async function m6(J,z,Y){if(z.pathname!=="/api/issues")return null;if(J.method==="GET")return Tk(Y,z);if(J.method==="POST")return yk(Y,J);return Response.json({error:"method not allowed"},{status:405})}function c6(J){return xk.has(String(J??"").trim().toLowerCase())}function d6(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 uk(J){let z=d6(J);return z!==null&&c6(z)}function n6(J,z={}){if(!J)return!0;if(uk(J))return!0;let Y=z.allowedHost?.trim();if(!Y)return!1;let G=d6(J);return G!==null&&G===Y}function i6(J){let z=String(J??"").trim();return z&&!c6(z)?z:void 0}var xk;var l6=k(()=>{xk=new Set(["localhost","127.0.0.1","::1","[::1]"])});var Ek,$6;var a6=k(()=>{Ek=["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"],$6=new Set(Ek)});var If={};f1(If,{resolveRepoInit:()=>r6,resolveEngineLaunchInit:()=>CZ});import{existsSync as p6,readFileSync as wk}from"fs";import{join as Sf}from"path";function hk(J){return p6(Sf(J,_6))?`sh ${_6}`:void 0}function vk(J){let z=Sf(J,Pk);if(!p6(z))return;try{let Y=wk(z,"utf8");return Y.trim().length>0?Y:void 0}catch{return}}function r6(J,z){let Y=J?_H(J):{},G=hk(z)??Y.initScript,Z=vk(z)??Y.initPrompt;return{initScript:G&&G.trim().length>0?G:void 0,initPrompt:Z&&Z.trim().length>0?Z:void 0}}function mk(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 CZ(J,z,Y={kind:"repo-init"}){let G=r6(J,z);return{initScript:G.initScript,firstMessage:mk(Y,G)}}var _6,Pk;var NZ=k(()=>{F1();_6=Sf(".kobe","init.sh"),Pk=Sf(".kobe","init-prompt.md")});async function ck(J,z){let{task:Y}=await J.request("task.get",{taskId:z});return Y}async function Lj(J,z){let Y=await ck(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 o6(J,z){let{task:Y,worktreePath:G}=await Lj(J,z),Z=C1(z);if(!await V1(Z)){let X=CZ(Y.repo??"",G,{kind:"repo-init"});if(!await TX({name:Z,cwd:G,command:oJ(Y.vendor,Y.modelEffort),taskId:z,vendor:Y.vendor,launchInit:X}))throw Error(`failed to start tmux session for ${z}`)}return{session:Z,worktreePath:G}}function dk(J){return lQ(J,{bareSafe:!0})}async function s6(J,z){let{task:Y,worktreePath:G}=await Lj(J,z),Z=Y.kind==="main"?void 0:z,X=Y.kind==="main"?z:void 0,Q=[...Nq(Cq(oJ(Y.vendor,Y.modelEffort),Y.vendor,Z),Y.vendor,X)],f=CZ(Y.repo??"",G,{kind:"none"}),H=dk(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 t6(J,z){let{worktreePath:Y}=await Lj(J,z),G=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:Y,command:[G,"-il"]}}async function e6(J){let z=C1(J);await Pz(z).catch(()=>{}),await eJ(z).catch(()=>{})}var JU=k(()=>{sJ();f8();NZ();P1();zJ()});import{existsSync as nk}from"fs";import{join as zU,normalize as ZU}from"path";function ik(J){let z=null,Y=null,G=new TextEncoder,Z=new ReadableStream({start(X){z=J((f,H)=>{try{X.enqueue(G.encode(`event: ${f}
|
|
73
73
|
data: ${JSON.stringify(H)}
|
|
74
74
|
|
|
75
75
|
`))}catch{}}),Y=setInterval(()=>{try{X.enqueue(G.encode(`: ping
|
|
76
76
|
|
|
77
|
-
`))}catch{}},15000)},cancel(){if(Y)clearInterval(Y);z?.()}});return new Response(Z,{headers:{"content-type":"text/event-stream","cache-control":"no-cache, no-transform",connection:"keep-alive"}})}async function
|
|
78
|
-
`).map((G)=>Number.parseInt(G.trim(),10)).filter((G)=>Number.isFinite(G)&&G!==process.pid)}catch{return[]}}async function
|
|
79
|
-
`)){let G=Y.replace(/\r$/,"");if(G.length<4)continue;if(G.startsWith("##"))continue;let Z=G[0],X=G[1];if(G[2]!==" ")continue;let Q=G.slice(3);if(Z==="R"||Z==="C"||X==="R"||X==="C"){let f=
|
|
80
|
-
`)){let G=Y.replace(/\r$/,"");if(G.length===0)continue;let Z=G.indexOf("\t");if(Z<0)continue;let X=G.indexOf("\t",Z+1);if(X<0)continue;let Q=G.slice(X+1);if(Q.length===0)continue;let f=
|
|
81
|
-
`,"utf8");async function q0(){if(H.isStopping())return;H.markStopping(),await z.onStop?.(),setTimeout(()=>{T.close().catch((h)=>T1("daemon-shutdown",h))},0).unref()}let p=
|
|
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){
|
|
83
|
-
`)}}return T}async function IZ(J){try{let z=await
|
|
84
|
-
`,Q=await Pb(this.tmpPath,"w",420);try{await Q.writeFile(X,"utf8"),await Q.sync()}finally{await Q.close()}await hb(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 uU(this.lockPath)}}async readDiskTasks(){let J;try{J=await cU(this.path,"utf8")}catch(Y){if(Y.code==="ENOENT")return[];throw Y}let z;try{z=JSON.parse(J)}catch{return[]}return iU(z,this.path).tasks}mergeWithDisk(J,z,Y){let G=new Map(J.map((Q)=>[Q.id,Q])),Z=[],X=new Set;for(let Q of this.cache.tasks){if(z.has(Q.id))Z.push(Q);else{let f=G.get(Q.id);if(f===void 0)continue;Z.push(f)}X.add(Q.id)}for(let Q of J){if(X.has(Q.id)||Y.has(Q.id))continue;Z.push(Q),X.add(Q.id)}return Z}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??$1,...J,id:BX(vU()),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:Z,createdAt:X,...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 Z=Y?.length?Y:this.cache.tasks.map((L)=>L.id),X=Z.indexOf(String(J));if(X<0)throw Error(`task not movable in current group: ${J}`);let Q=Z[X+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((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,G=new Map,Z=[];for(let{idx:X,position:Q}of z){let f=this.cache.tasks[X];if(!f||f.position===Q)continue;if(!G.has(X))G.set(X,f);if(this.cache.tasks[X]={...f,position:Q},!this.dirtyIds.has(f.id))this.dirtyIds.add(f.id),Z.push(f.id);Y=!0}if(!Y)return;try{await this.save()}catch(X){for(let[Q,f]of G)this.cache.tasks[Q]=f;for(let Q of Z)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 dU(this.path)}catch(J){if(J.code!=="ENOENT")throw J}try{await dU(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 iU(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,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:qY,tasks:[]};let Z=Array.isArray(Y.tasks)?Y.tasks:[],X=[];for(let Q of Z){let f=lb(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 lb(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(!rb(z.status))return null;let Y=typeof z.archived==="boolean"?z.archived:!1,G=z.kind==="main"?"main":"task",Z=G==="main"?z.status==="in_progress"||z.status==="done"?"backlog":z.status:z.status==="done"&&!Y?"in_progress":z.status;return{id:BX(z.id),title:z.title,repo:z.repo,branch:z.branch,worktreePath:z.worktreePath,status:Z,archived:Y,pinned:typeof z.pinned==="boolean"?z.pinned:!1,kind:G,vendor:pY(typeof z.vendor==="string"?z.vendor:void 0),prStatus:$b(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 $b(J){if(!J||typeof J!=="object"||Array.isArray(J))return;let z=J;if(!ab(z.provider)||!_b(z.lifecycle)||!pb(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 ab(J){return J==="github"||J==="gitlab"||J==="bitbucket"||J==="unknown"}function _b(J){return J==="creating"||J==="open"||J==="ready_to_merge"||J==="merged"||J==="closed"||J==="unknown"}function pb(J){return J==="none"||J==="pending"||J==="passing"||J==="failing"||J==="unknown"}function rb(J){return J==="backlog"||J==="in_progress"||J==="in_review"||J==="done"||J==="canceled"||J==="error"}var cb=(J)=>new Promise((z)=>setTimeout(z,J)),db=25,nb=5000,qY=3;var nX=k(()=>{rJ();i1();EU();mU()});var hf;var lU=k(()=>{hf=class hf 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 _U={};f1(_U,{GitWorktreeManager:()=>vf});import aU from"fs";import Rz from"path";class vf{execDeps;constructor(J=ob){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}),Z={stdout:G.stdout,stderr:G.stderr,exitCode:G.exitCode};if(Z.exitCode!==0&&!Y.allowFail)throw new hf(z,Y.cwd,Z);return Z}async create(J,z,Y,G){let Z=this.ctxFor(J);if(vY("repo",Z.dir),vY("path",Y),!z)throw Error("create(): branch must be a non-empty string");if(await Z.exec.exists(Y)){let H=await this.tryDescribe(Z,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 Z.exec.mkdirp(Rz.dirname(Y));let Q=await this.branchExists(Z,z)?["worktree","add",Y,z]:G?["worktree","add","-b",z,Y,G]:["worktree","add","-b",z,Y];await this.runGit(Z.exec,Q,{cwd:Z.dir});let f=await this.tryDescribe(Z,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?$V(z,J.slug):dV(J.repo,J.slug);return this.create(J.repo,J.branch,Y,J.baseRef)}async remove(J,z){vY("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 Z=await this.findRepoFor(Y,J);if(!Z)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 X=G?["worktree","remove","--force",J]:["worktree","remove",J];await this.runGit(Y,X,{cwd:Z}),await this.runGit(Y,["worktree","prune"],{cwd:Z,allowFail:!0})}async list(J){let z=this.ctxFor(J);vY("repo",z.dir);let Y=await this.runGit(z.exec,["worktree","list","--porcelain"],{cwd:z.dir}),G=gj(Y.stdout),Z=[];for(let X of G){if(!X.path)continue;let Q=z.remote?$U(z.dir,X.path):p8(J,X.path);if(!Q)continue;if(!X.branch||X.detached)continue;let f=iX(Q),H=iX(X.path),B=Rz.relative(f,H),V=Rz.join(Q,B),j=await this.isDirty(X.path);Z.push({path:V,branch:X.branch,head:X.head??"",dirty:j})}return Z}async listAll(J){let z=this.ctxFor(J);vY("repo",z.dir);let Y=await this.runGit(z.exec,["worktree","list","--porcelain"],{cwd:z.dir}),G=gj(Y.stdout),Z=z.remote?z.dir:iX(z.dir),X=[];for(let Q of G){if(!Q.path)continue;if(Q.bare)continue;if(!Q.branch||Q.detached)continue;if((z.remote?Q.path:iX(Q.path))===Z)continue;let f=await this.isDirty(Q.path);X.push({path:Q.path,branch:Q.branch,head:Q.head??"",dirty:f,kobeManaged:z.remote?$U(z.dir,Q.path)!==null:iV(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}),G=Number.parseInt(Y.stdout.trim(),10);if(Number.isFinite(G)&&G>0)return G*1000}catch{}if(!J.isRemote)try{return aU.statSync(z).mtimeMs}catch{}return 0}async isDirty(J){vY("path",J);let z=this.execDeps.execForPath(J);return(await this.runGit(z,["status","--porcelain"],{cwd:J})).stdout.length>0}async currentBranch(J){vY("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(vY("path",J),z===Y)return;let G=this.execDeps.execForPath(J),Z=await this.findRepoFor(G,J);if(!Z)throw Error(`renameBranch(): ${J} is not a git worktree`);await this.runGit(G,["branch","-m",z,Y],{cwd:Z})}async tryDescribe(J,z){let Y=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),G=gj(Y.stdout),Z=(f)=>J.remote?f:iX(f),X=Z(z),Q=G.find((f)=>f.path&&Z(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 G=Y.stdout.trim();if(!G)return null;let Z=Rz.isAbsolute(G)?G:Rz.resolve(z,G);return Rz.basename(Z)===".git"?Rz.dirname(Z):Z}catch(Y){if(Y instanceof hf)return null;throw Y}}}function gj(J){let z=[],Y=null;for(let G of J.split(`
|
|
85
|
-
`)){let Z=G.replace(/\r$/,"");if(Z===""){if(Y)z.push(Y);Y=null;continue}if(!Y)Y={};if(Z.startsWith("worktree "))Y.path=Z.slice(9);else if(Z.startsWith("HEAD "))Y.head=Z.slice(5);else if(Z.startsWith("branch ")){let X=Z.slice(7);Y.branch=X.startsWith("refs/heads/")?X.slice(11):X}else if(Z==="detached")Y.detached=!0;else if(Z==="bare")Y.bare=!0}if(Y)z.push(Y);return z}function
|
|
77
|
+
`))}catch{}},15000)},cancel(){if(Y)clearInterval(Y);z?.()}});return new Response(Z,{headers:{"content-type":"text/event-stream","cache-control":"no-cache, no-transform",connection:"keep-alive"}})}async function lk(J,z,Y){try{let{name:G,payload:Z}=await J.json();if(!G)return Response.json({error:"missing rpc name"},{status:400});if(!$6.has(G))return Response.json({error:`rpc ${G} is not exposed to the web UI`},{status:403});let X=await z.request(G,Z),Q=Z?.taskId;if(typeof Q==="string"){let f=G==="task.archive"&&Z.archived!==!1;if(G==="task.delete"||f)Y(Q)}return Response.json({result:X})}catch(G){let Z=G instanceof Error&&G.name!=="Error"?G.name:void 0;return Response.json({error:G instanceof Error?G.message:String(G),...Z?{name:Z}:{}},{status:500})}}async function $k(){try{let z=(await ez()).map((Y)=>({id:Y,label:VG(Y),effortLevels:t1(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 ak(){return Response.json({api:KG()})}function _k(){return Response.json({projects:gJ()})}function hY(J,z=""){return typeof J==="string"?J:z}function pk(J,z){return typeof J==="boolean"?J:z}function HU(J){let z=J.customEngineIds;if(!Array.isArray(z))return[];return z.filter((Y)=>typeof Y==="string"&&fU.test(Y)&&!QJ(Y))}function rk(J){return J.split(/[-_]+/).filter(Boolean).map((z)=>`${z.slice(0,1).toUpperCase()}${z.slice(1)}`).join(" ")}function ok(J,z){return hY(J[Uz(z)]).trim()||VG(z)}function sk(J,z){return hY(J[Kz(z)]).trim()||RX(z).join(" ")}function BU(){let J=RJ(),z=HU(J),Y=[..._Y,...z],G=hY(J.lastSelectedVendor,"claude"),Z=hY(J.focusAccent,"primary");return Response.json({activeTheme:hY(J.activeTheme,"claude"),transparentBackground:pk(J.transparentBackground,!1),focusAccent:qU.includes(Z)?Z:"primary",notificationsToast:J["notifications.toast.enabled"]!==!1,notificationsSound:J["notifications.sound.enabled"]!==!1,settingsSurface:SG(J[QY]??bG),editorKind:RZ(J[XY]??Cf),editorCustomCommand:hY(J[wY]),remoteProjects:J["experimental.remoteProjects"]===!0,autoStatus:J[jG]===!0,dispatcher:J[WG]===!0,defaultEngine:G,engines:Y.map((X)=>({id:X,label:ok(J,X),command:sk(J,X),isBuiltin:QJ(X),isCustom:!QJ(X),isDefault:X===G}))})}function cX(J,z,Y){if(typeof Y==="string")J[z]=Y.trim()}function kZ(J,z,Y){if(typeof Y==="boolean")J[z]=Y}async function tk(J){try{let z=await J.json(),Y={};if(cX(Y,"activeTheme",z.activeTheme),kZ(Y,"transparentBackground",z.transparentBackground),qU.includes(z.focusAccent))Y.focusAccent=z.focusAccent;if(kZ(Y,"notifications.toast.enabled",z.notificationsToast),kZ(Y,"notifications.sound.enabled",z.notificationsSound),z.settingsSurface==="chattab"||z.settingsSurface==="taskpanel")Y[QY]=z.settingsSurface;if(kG.includes(z.editorKind))Y[XY]=z.editorKind;cX(Y,wY,z.editorCustomCommand),kZ(Y,"experimental.remoteProjects",z.remoteProjects),kZ(Y,jG,z.autoStatus),kZ(Y,WG,z.dispatcher),cX(Y,"lastSelectedVendor",z.defaultEngine);let G=RJ(),Z=HU(G),X=new Set([..._Y,...Z]),Q=Array.isArray(z.engineUpdates)?z.engineUpdates:[];for(let f of Q){if(!f||typeof f!=="object")continue;let H=f;if(typeof H.id!=="string"||!X.has(H.id))continue;cX(Y,Kz(H.id),H.command),cX(Y,Uz(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(!fU.test(H)||QJ(H)||X.has(H))return Response.json({error:"invalid or duplicate engine id"},{status:400});Y.customEngineIds=[...Z,H],Y[Kz(H)]=hY(f.command).trim();let B=hY(f.label).trim();Y[Uz(H)]=B&&B!==H?B:rk(H)}if(typeof z.removeEngine==="string"){let f=z.removeEngine;if(!QJ(f)){if(Y.customEngineIds=Z.filter((H)=>H!==f),Y[Kz(f)]=void 0,Y[Uz(f)]=void 0,G.lastSelectedVendor===f)Y.lastSelectedVendor="claude"}}if(Object.keys(Y).length>0)MY(Y);return BU()}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:400})}}async function ek(J,z){try{let{taskId:Y}=await J.json();if(!Y)return Response.json({error:"missing taskId"},{status:400});return Response.json(await o6(z,Y))}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function YU(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 jU(){return Response.json({review:g1(Tf.review)??null,pr:g1(Tf.pr)??null})}async function Jb(J){try{let z=await J.json();if(typeof z.review==="string")r1(Tf.review,z.review);if(typeof z.pr==="string")r1(Tf.pr,z.pr);return jU()}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:400})}}async function zb(J,z){let G=ZU(zU(z,J==="/"?"/index.html":J));if(!G.startsWith(z))return new Response("forbidden",{status:403});let Z=Bun.file(nk(G)?G:zU(z,"index.html"));if(!await Z.exists())return new Response("kobe web assets not built \u2014 run `bun --filter kobe-web build`",{status:503});return new Response(Z)}function Yb(J){let{link:z,sseSends:Y,staticDir:G}=J,Z=J.tearDownSession??((X)=>void e6(X));return async function(Q){let f=new URL(Q.url);if(f.pathname===QU)return new Response(XU);if(!n6(Q.headers.get("origin"),{allowedHost:J.allowedHost}))return new Response("forbidden: cross-origin request rejected",{status:403});if(f.pathname==="/events")return ik((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 lk(Q,z,Z);if(f.pathname==="/api/session"&&Q.method==="POST")return ek(Q,z);if(f.pathname==="/api/engine-spec"&&Q.method==="GET")return YU(f,z,s6);if(f.pathname==="/api/terminal-spec"&&Q.method==="GET")return YU(f,z,t6);if(f.pathname==="/api/engines"&&Q.method==="GET")return $k();if(f.pathname==="/api/cli-invocation"&&Q.method==="GET")return ak();if(f.pathname==="/api/projects"&&Q.method==="GET")return _k();if(f.pathname==="/api/settings"&&Q.method==="GET")return BU();if(f.pathname==="/api/settings"&&Q.method==="PATCH")return tk(Q);if(f.pathname==="/api/quick-prompts"&&Q.method==="GET")return jU();if(f.pathname==="/api/quick-prompts"&&Q.method==="PUT")return Jb(Q);let H=await T6(Q,f);if(H)return H;let B=await O6(Q,f);if(B)return B;let V=await C6(Q,f);if(V)return V;let j=await m6(Q,f,z);if(j)return j;let K=await w6(Q,f);if(K)return K;let L=x6(Q,f);if(L)return L;if(G)return zb(f.pathname,G);return new Response("not found",{status:404})}}function IG(J,z){let Y=J.snapshot().find((G)=>G.channel===z);return Y?Y.payload:null}function Mj(J){return J.length>1?J.replace(/\/+$/,""):J}function Gb(J,z){let Y=Mj(z),G=new Set([z]);for(let Z of J){let X=Mj(Z.repo),Q=Mj(Z.worktreePath);if(X===Y||Q===Y){if(Z.repo)G.add(Z.repo);if(Z.worktreePath)G.add(Z.worktreePath)}}return[...G]}function WU(J){let z=EX();return{async request(Y,G){return await uX(z,Y,G,J.ctx(0))},snapshot(){let Y=J.orch.listTasks().map(Qz),G={},Z=IG(J.bus,"issue.snapshot");if(Z)for(let f of Gb(Y,Z.repoRoot))G[f]={...Z,repoRoot:f};let X=IG(J.bus,"task.jobs"),Q=X?.phase==="running"?{[X.taskId]:X}:{};return{tasks:Y,activeTaskId:IG(J.bus,"active-task")?.taskId??null,engineStates:J.activity.snapshotByTask(),update:IG(J.bus,"update")?.info??null,jobs:Q,worktreeChanges:IG(J.bus,"worktree.changes")?.changes??{},issueSnapshots:G,deliver:IG(J.bus,"session.deliver"),uiPrefs:IG(J.bus,"ui-prefs"),connected:!0}}}}async function GU(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 Zb(J,z=QU){let Y;try{Y=(await(await fetch(`http://localhost:${J}${z}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(Y!==XU)throw Error(`port ${J} is in use by a non-kobe service; refusing to replace it`);let G=await GU(J);for(let X of G)try{process.kill(X,"SIGTERM")}catch{}let Z=Date.now()+2000;while(Date.now()<Z){if((await GU(J)).length===0)return;await new Promise((X)=>setTimeout(X,100))}}async function VU(J){if(J.takeover!==!1)await Zb(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",Z=i6(G),X=Yb({link:J.link,sseSends:z,staticDir:J.staticDir?ZU(J.staticDir):void 0,allowedHost:Z,onSseOpen:J.onSseOpen}),Q=Bun.serve({port:J.port,hostname:G,idleTimeout:0,fetch:X});return{port:Q.port??J.port,hostname:G,close(){Y(),Q.stop(!0)}}}var XU="kobe-web",QU="/__kobe_web",qU,fU,Tf;var KU=k(()=>{YG();sJ();kY();AX();gq();F1();tY();Nf();i1();A6();N6();y6();u6();Vf();eY();P6();l6();a6();JU();qU=["primary","success","info"],fU=/^[a-z][a-z0-9_-]{0,47}$/;Tf={review:"boardPrompt.review",pr:"boardPrompt.pr"}});function UU(J){return J>="0"&&J<="7"}function LU(J,z){let Y=[],G="",Z=()=>{if(G.length>0){for(let Q of Xb.encode(G))Y.push(Q);G=""}},X=z+1;while(X<J.length){let Q=J[X];if(Q==='"'){X++;break}if(Q==="\\"){let f=J[X+1];if(f===void 0){G+="\\",X++;continue}switch(f){case"a":Z(),Y.push(7),X+=2;break;case"b":Z(),Y.push(8),X+=2;break;case"t":Z(),Y.push(9),X+=2;break;case"n":Z(),Y.push(10),X+=2;break;case"v":Z(),Y.push(11),X+=2;break;case"f":Z(),Y.push(12),X+=2;break;case"r":Z(),Y.push(13),X+=2;break;case'"':G+='"',X+=2;break;case"\\":G+="\\",X+=2;break;default:if(UU(f)){let H="",B=X+1;while(B<J.length&&H.length<3&&UU(J[B]))H+=J[B],B++;Z(),Y.push(Number.parseInt(H,8)&255),X=B}else G+=f,X+=2;break}}else G+=Q,X++}return Z(),{value:Qb.decode(new Uint8Array(Y)),end:X}}function yf(J){if(J.length===0||J[0]!=='"')return J;return LU(J,0).value}function MU(J,z){if(J[0]==='"'){let G=LU(J,0);if(J.startsWith(z,G.end))return{orig:G.value,neu:yf(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:yf(J.slice(Y+z.length))}}function qb(J){let z=J.indexOf("{");if(z>=0){let G=J.indexOf("}",z),Z=J.indexOf(" => ",z);if(G>z&&Z>=0&&Z<G){let X=J.slice(0,z),Q=J.slice(z+1,Z),f=J.slice(Z+4,G),H=J.slice(G+1);return{path:X+f+H,origPath:X+Q+H}}}let Y=MU(J," => ");if(Y)return{path:Y.neu,origPath:Y.orig};return{path:yf(J)}}function xf(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 Z=G[0],X=G[1];if(G[2]!==" ")continue;let Q=G.slice(3);if(Z==="R"||Z==="C"||X==="R"||X==="C"){let f=MU(Q," -> ");if(f){z.push({x:Z,y:X,path:f.neu,origPath:f.orig});continue}}z.push({x:Z,y:X,path:yf(Q)})}return z}function DU(J){if(J==="-")return null;let z=Number.parseInt(J,10);return Number.isNaN(z)?null:z}function FU(J){let z=[];for(let Y of J.split(`
|
|
80
|
+
`)){let G=Y.replace(/\r$/,"");if(G.length===0)continue;let Z=G.indexOf("\t");if(Z<0)continue;let X=G.indexOf("\t",Z+1);if(X<0)continue;let Q=G.slice(X+1);if(Q.length===0)continue;let f=qb(Q);if(f.path.length===0)continue;z.push({path:f.path,...f.origPath!==void 0?{origPath:f.origPath}:{},added:DU(G.slice(0,Z)),deleted:DU(G.slice(Z+1,X))})}return z}var Xb,Qb;var Fj=k(()=>{Xb=new TextEncoder,Qb=new TextDecoder});var OU={};f1(OU,{sameWorktreeChanges:()=>vz,readWorktreeChanges:()=>Hb,pickPushedChanges:()=>Ef,parsePorcelain:()=>bZ});import{spawnSync as fb}from"child_process";function vz(J,z){return J.added===z.added&&J.deleted===z.deleted}function Ef(J,z){if(!J)return null;return J.get(z)??uf}function Hb(J){if(!J)return uf;try{let z=fb("git",["status","--porcelain=v1"],{cwd:J,encoding:"utf8",stdio:["ignore","pipe","pipe"],env:cJ()});if(z.status!==0||!z.stdout)return uf;return bZ(z.stdout)}catch{return uf}}function bZ(J){let z=0,Y=0;for(let{x:G,y:Z}of xf(J))if(G==="D"||Z==="D")Y+=1;else z+=1;return{added:z,deleted:Y}}var uf;var SZ=k(()=>{PY();Fj();uf={added:0,deleted:0}});async function Vb(J,z){let Y=await zY("git",["status","--porcelain=v1"],{cwd:J,env:cJ(),signal:z});if(Y.status!==0)throw Error("git status failed");return bZ(Y.stdout)}function Kb(J){let z=new Set;for(let Y of J){if(Y.archived)continue;if(!Y.worktreePath)continue;if(l1(Y.repo)||l1(Y.worktreePath))continue;z.add(Y.worktreePath)}return z}class AU{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=Kb(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){T1("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:Bb,slowRetryMs:jb,minIntervalMs:Wb},G=this.options.run??Vb;tG(z,Y,(Z)=>G(J,Z),(Z)=>{if(this.stopped)return;if(this.entries.get(J)!==z)return;if(z.value&&vz(z.value,Z))return;z.value=Z,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 RU(J,z,Y=Oj,G){if(Y<=0)return()=>{};let Z=new AU(J,z,{hasSubscribers:G});Z.tick();let X=setInterval(()=>Z.tick(),Y);return X.unref?.(),()=>{clearInterval(X),Z.stop()}}var Oj=2000,Bb=4000,jb=60000,Wb=1500;var gU=k(()=>{PY();eG();F1();SZ()});import{mkdir as CU,readFile as Ub,unlink as Aj,writeFile as Db}from"fs/promises";import{createServer as Lb}from"net";import{dirname as NU}from"path";import{StringDecoder as Mb}from"string_decoder";function Ob(){let J=process.env.KOBE_DAEMON_IDLE_GRACE_MS;if(J===void 0)return kU;let z=Number(J);return Number.isFinite(z)&&z>=0?z:kU}async function SU(J,z={}){let Y=z.socketPath??Sz(z.homeDir),G=z.pidPath??sz(z.homeDir),Z=z.startedAt??new Date,X=new Set,Q=new Set,f=1,H=new Hj({clients:function*(){yield*X,yield*Q},idleGraceMs:Ob(),onIdleStop:()=>void q0().catch((h)=>T1("daemon-idle-shutdown",h))}),B=new hB;B.onPublish((h)=>{bU(X,{type:"event",name:h.channel,payload:h.payload})});let j=new u8(B,void 0,void 0,async(h)=>{let C=J.getTask(h);if(!C?.worktreePath)return;return _G(C.vendor??$1,C.worktreePath)}),K=new Df(Uf(z.homeDir));await CU(NU(Y),{recursive:!0}),await CU(NU(G),{recursive:!0}),await Aj(Y).catch(()=>{});let L=Lb((h)=>{let C={id:f++,connectedAt:new Date,socket:h,writer:new PB(h),buffer:"",subscribed:!1,holdsLifetime:!1,channels:null};X.add(C);let o=new Mb("utf8");h.on("data",(E)=>{C.buffer+=o.write(E),t(C)}),h.on("error",()=>{}),h.on("close",()=>{if(X.delete(C),C.subscribed)hz("conn",`client #${C.id} (${C.holdsLifetime?"gui":"pane"}) disconnected \u2014 ${X.size} client(s), ${H.guiCount()} gui left`);H.clientDisconnected(C.holdsLifetime)})}),A=J.subscribeTasks((h)=>{B.publish("task.snapshot",{tasks:h.map(Qz)})}),O=z.checkUpdate??tZ,g=z.updatePollMs??Fb,x=()=>{O().then((h)=>B.publish("update",{info:h})).catch((h)=>T1("update-poller",h))},_=null;if(g>0)x(),_=setInterval(x,g),_.unref?.();let S=z.autoTitlePollMs??wB,N=OK(J,S,()=>H.hasSubscribers()),M=U6(B,{statePath:Wj(z.homeDir),debounceMs:z.uiPrefsDebounceMs??jj}),I=Q6(B,{path:fj(z.homeDir),debounceMs:z.keybindingsDebounceMs??qj}),r=RU(J,B,z.worktreeChangesTickMs??Oj,()=>H.hasSubscribers()),i=W6(J,B,z.transcriptActivityTickMs??Bj,()=>H.hasSubscribers()),e=H6(J,z.prStatusPollMs??hX,()=>H.hasSubscribers()),J0=null,T={socketPath:Y,pidPath:G,startedAt:Z,get webPort(){return J0?.port},clients:X,async close(){if(H.markStopping(),A(),J0?.close(),J0=null,_)clearInterval(_);N(),e(),M(),I(),r(),i(),j.close(),bU(X,{type:"event",name:"daemon.stopping",payload:{}});for(let h of Array.from(X))h.socket.destroy();await new Promise((h)=>L.close(()=>h())),await Aj(Y).catch(()=>{}),await Aj(G).catch(()=>{})}};await new Promise((h,C)=>{let o=L;o.once("error",C),L.listen(Y,()=>{o.removeListener("error",C),h()})}),await Db(G,`${process.pid}
|
|
81
|
+
`,"utf8");async function q0(){if(H.isStopping())return;H.markStopping(),await z.onStop?.(),setTimeout(()=>{T.close().catch((h)=>T1("daemon-shutdown",h))},0).unref()}let p=EX();function B0(h){return{orch:J,bus:B,activity:j,issues:K,daemon:{startedAt:Z,socketPath:Y,webPort:J0?.port,pid:process.pid,guiCount:()=>H.guiCount(),stopSoon:q0},clientId:h}}if(z.webPort!==void 0){let h=WU({orch:J,bus:B,activity:j,ctx:B0});J0=await VU({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(),hz("conn",`web client subscribed \u2014 ${X.size+Q.size} client(s), ${H.guiCount()} gui`),()=>{Q.delete(C),hz("conn",`web client disconnected \u2014 ${X.size+Q.size} client(s), ${H.guiCount()} gui left`),H.clientDisconnected(!0)}}}),hz("web",`daemon web transport listening on http://${J0.hostname}:${J0.port}`)}async function L0(h,C){if(h.name==="subscribe"){let o=nB(h.payload),E=C.subscribed;C.subscribed=!0;let c=o.role==="gui"?"gui":"pane";C.holdsLifetime=c==="gui",C.channels=_W(o.channels);let s=!E;if(C.holdsLifetime)H.guiAttached();hz("conn",`client #${C.id} subscribed as ${c}${C.channels?` [${[...C.channels].join(",")}]`:""} \u2014 ${X.size} client(s), ${H.guiCount()} gui${s?" (collectors resume)":""}`);for(let X0 of B.snapshot()){if(C.channels&&!C.channels.has(X0.channel))continue;dX(C,{type:"event",name:X0.channel,payload:X0.payload})}if(!C.channels||C.channels.has("engine-state"))for(let X0 of j.currentNonIdle())dX(C,{type:"event",name:"engine-state",payload:X0});return{}}return uX(p,h.name,h.payload,B0(C.id))}async function V0(h,C){try{let o=await L0(h,C);dX(C,{type:"response",id:h.id,name:h.name,payload:o})}catch(o){dX(C,{type:"response",id:h.id,name:h.name,error:dB(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){dX(h,{type:"response",id:"parse-error",error:{message:E instanceof Error?E.message:String(E)}})}C=h.buffer.indexOf(`
|
|
83
|
+
`)}}return T}async function IZ(J){try{let z=await Ub(J,"utf8"),Y=Number(z.trim());return Number.isFinite(Y)?Y:null}catch{return null}}function IU(J){if(J.type==="event")return J.name==="daemon.stopping";return!0}function dX(J,z){J.writer.write(JX(z),IU(z))}function bU(J,z){let Y=z.type==="event"&&z.name!=="daemon.stopping"?z.name:null,G=IU(z),Z=null;for(let X of J){if(!X.subscribed&&z.type==="event")continue;if(Y&&X.channels&&!X.channels.has(Y))continue;Z??=JX(z),X.writer.write(Z,G)}}var Fb=21600000,kU=3000;var wf=k(()=>{Gq();rJ();MJ();jV();AK();Vf();rB();q6();f6();dG();B6();eY();V6();D6();KU();gU();Vf();rB()});import{unlink as TU}from"fs/promises";function Ab(J){try{return process.kill(J,0),!0}catch(z){return z.code==="EPERM"}}async function TZ(J,z){let Y=await IZ(z),G=Y!==null&&Y!==process.pid?Y:null,Z=G!==null&&Ab(G),X=Z?"graceful":"absent",Q=new aJ(J),f=Q.request("daemon.stop").catch(()=>{return}),H=new Promise((B)=>setTimeout(B,2000));if(await Promise.race([f,H]),Q.close(),Z&&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{}X="sigterm",V=!0}await new Promise((j)=>setTimeout(j,50))}try{process.kill(G,0),process.kill(G,"SIGKILL"),X="sigkill",await new Promise((j)=>setTimeout(j,100))}catch{}}return await TU(J).catch(()=>{}),await TU(z).catch(()=>{}),{pid:Y,method:X}}var Pf=k(()=>{zX();wf()});var Hf={};f1(Hf,{testDaemonResponds:()=>hf,ensureDaemonReachable:()=>yZ,connectOrStartDaemon:()=>Az,connectIfRunning:()=>zz});import{spawn as Rb}from"child_process";import{closeSync as gb,existsSync as Cb,mkdirSync as Nb,openSync as kb}from"fs";import{dirname as yU,resolve as Rj}from"path";import{fileURLToPath as bb}from"url";function Tb(J,z,Y,G){let Z="ignore",X;try{Nb(yU(G),{recursive:!0}),X=kb(G,"a"),Z=["ignore",X,X]}catch{Z="ignore"}if(Rb(J,[...z],{detached:!0,stdio:Z,env:Y}).unref(),X!==void 0)try{gb(X)}catch{}}async function yZ(){let J=Sz();if(await hf(J))return J;await TZ(J,sz()).catch(()=>{});let[z,...Y]=yb(Sb);Tb(z,Y,process.env,uQ());let G=Date.now()+5000;while(Date.now()<G){if(await hf(J))return J;await new Promise((Z)=>setTimeout(Z,100))}throw Error(`kobe: daemon did not start (or stayed wedged) at ${J}`)}async function Az(){let J=await yZ(),z=new aJ(J);return await z.connect(),z}async function zz(){let J=Sz();if(!await hf(J))return null;let z=new aJ(J);return await z.connect(),z}async function hf(J,z=Ib){let Y=new aJ(J);try{await Y.connect()}catch{return Y.close(),!1}let G=Y.request("hello",{protocolVersion:$J}).then(()=>!0).catch(()=>!0),Z,X=new Promise((f)=>{Z=setTimeout(()=>f(!1),z)}),Q=await Promise.race([G,X]);if(Z)clearTimeout(Z);return Y.close(),Q}function yb(J){let z=bb(import.meta.url);if(z.startsWith("/$bunfs")||z.startsWith("B:\\~BUN"))return[process.execPath,...J];let Y=yU(z),G=[Rj(Y,"../cli/index.ts"),Rj(Y,"../../../kobe/src/cli/index.ts"),Rj(Y,"../cli/index.js")],Z=G.find((X)=>Cb(X));if(Z)return[process.execPath,Z,...J];throw Error(`kobe: could not locate kobe entry near ${Y}; checked ${G.join(", ")}`)}var Sb,Ib=3000;var FJ=k(()=>{Pf();dG();eY();zX();Sb=["daemon","start"]});import{mkdir as xb,readFile as xU,unlink as EU,writeFile as uU}from"fs/promises";import{dirname as ub}from"path";function Eb(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 gj(J,z={}){await xb(ub(J),{recursive:!0});try{await uU(J,String(process.pid),{flag:"wx"});return}catch(Z){if(Z.code!=="EEXIST")throw Z}let Y=-1;try{let Z=(await xU(J,"utf8")).trim();if(Y=Number.parseInt(Z,10),!Number.isFinite(Y))Y=-1}catch{return gj(J,z)}let G=Y>0&&Eb(Y);if(G&&!z.forceTakeover)throw new nX(`task index is locked by another kobe instance (pid ${Y})`,Y);console.warn(`[kobe] removing stale lockfile at ${J} (was held by pid ${Y}${G?", forced":", process gone"})`);try{await EU(J)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{await uU(J,String(process.pid),{flag:"wx"})}catch(Z){if(Z.code==="EEXIST"){let X=-1;try{X=Number.parseInt((await xU(J,"utf8")).trim(),10)}catch{X=-1}throw new nX(`task index lockfile contended during takeover (winner pid ${X})`,X)}throw Z}}async function wU(J){try{await EU(J)}catch(z){if(z.code==="ENOENT")return;throw z}}var nX;var PU=k(()=>{nX=class nX extends Error{heldByPid;constructor(J,z){super(J);this.name="LockfileError",this.heldByPid=z}}});function wb(J,z){let Y="",G=J;for(let Z=z-1;Z>=0;Z--){let X=G%32;Y="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[X]+Y,G=(G-X)/32}return Y}function mU(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 Pb(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 hb(J){let z="";for(let Y of J)z+="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[Y]??"0";return z}function cU(J=Date.now()){let z;if(J===hU){let Y=vU.slice();if(!Pb(Y))z=mU(16);else z=Y}else z=mU(16);return hU=J,vU=z,wb(J,10)+hb(z)}var hU=-1,vU;var dU=k(()=>{vU=Array(16).fill(0)});var Cj={};f1(Cj,{TaskIndexStore:()=>xZ});import{mkdir as vb,open as mb,readFile as nU,rename as cb,unlink as iU}from"fs/promises";import{homedir as db}from"os";import{dirname as nb,join as lU}from"path";async function ab(J){let z=Date.now()+$b;for(;;)try{await gj(J);return}catch(Y){if(!(Y instanceof nX)||Date.now()>=z)throw Y;await ib(lb)}}class xZ{homeDir;kobeDir;path;tmpPath;lockPath;cache={version:qY,tasks:[]};loaded=!1;listeners=new Set;saveChain=Promise.resolve();dirtyIds=new Set;removedIds=new Set;constructor(J={}){this.homeDir=J.homeDir??db(),this.kobeDir=lU(this.homeDir,".kobe"),this.path=lU(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 nU(this.path,"utf8")}catch(Y){if(Y.code==="ENOENT")return this.cache={version:qY,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot();throw Y}let z;try{z=JSON.parse(J)}catch(Y){return console.warn(`[kobe] tasks.json at ${this.path} is corrupted (${Y.message}); recovering with empty index. The stale file is left in place.`),this.cache={version:qY,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot()}return this.cache=$U(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 vb(nb(this.path),{recursive:!0});let J=new Set(this.dirtyIds),z=new Set(this.removedIds);await ab(this.lockPath);try{let Y=await this.readDiskTasks(),G=this.mergeWithDisk(Y,J,z),X=`${JSON.stringify({version:qY,tasks:G},null,2)}
|
|
84
|
+
`,Q=await mb(this.tmpPath,"w",420);try{await Q.writeFile(X,"utf8"),await Q.sync()}finally{await Q.close()}await cb(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 wU(this.lockPath)}}async readDiskTasks(){let J;try{J=await nU(this.path,"utf8")}catch(Y){if(Y.code==="ENOENT")return[];throw Y}let z;try{z=JSON.parse(J)}catch{return[]}return $U(z,this.path).tasks}mergeWithDisk(J,z,Y){let G=new Map(J.map((Q)=>[Q.id,Q])),Z=[],X=new Set;for(let Q of this.cache.tasks){if(z.has(Q.id))Z.push(Q);else{let f=G.get(Q.id);if(f===void 0)continue;Z.push(f)}X.add(Q.id)}for(let Q of J){if(X.has(Q.id)||Y.has(Q.id))continue;Z.push(Q),X.add(Q.id)}return Z}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??$1,...J,id:jX(cU()),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:Z,createdAt:X,...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 Z=Y?.length?Y:this.cache.tasks.map((L)=>L.id),X=Z.indexOf(String(J));if(X<0)throw Error(`task not movable in current group: ${J}`);let Q=Z[X+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((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,G=new Map,Z=[];for(let{idx:X,position:Q}of z){let f=this.cache.tasks[X];if(!f||f.position===Q)continue;if(!G.has(X))G.set(X,f);if(this.cache.tasks[X]={...f,position:Q},!this.dirtyIds.has(f.id))this.dirtyIds.add(f.id),Z.push(f.id);Y=!0}if(!Y)return;try{await this.save()}catch(X){for(let[Q,f]of G)this.cache.tasks[Q]=f;for(let Q of Z)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 iU(this.path)}catch(J){if(J.code!=="ENOENT")throw J}try{await iU(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 $U(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,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:qY,tasks:[]};let Z=Array.isArray(Y.tasks)?Y.tasks:[],X=[];for(let Q of Z){let f=_b(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 _b(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(!tb(z.status))return null;let Y=typeof z.archived==="boolean"?z.archived:!1,G=z.kind==="main"?"main":"task",Z=G==="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:Z,archived:Y,pinned:typeof z.pinned==="boolean"?z.pinned:!1,kind:G,vendor:pY(typeof z.vendor==="string"?z.vendor:void 0),prStatus:pb(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 pb(J){if(!J||typeof J!=="object"||Array.isArray(J))return;let z=J;if(!rb(z.provider)||!ob(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 rb(J){return J==="github"||J==="gitlab"||J==="bitbucket"||J==="unknown"}function ob(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 tb(J){return J==="backlog"||J==="in_progress"||J==="in_review"||J==="done"||J==="canceled"||J==="error"}var ib=(J)=>new Promise((z)=>setTimeout(z,J)),lb=25,$b=5000,qY=3;var iX=k(()=>{rJ();i1();PU();dU()});var vf;var aU=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 rU={};f1(rU,{GitWorktreeManager:()=>mf});import pU from"fs";import Rz from"path";class mf{execDeps;constructor(J=eb){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}),Z={stdout:G.stdout,stderr:G.stderr,exitCode:G.exitCode};if(Z.exitCode!==0&&!Y.allowFail)throw new vf(z,Y.cwd,Z);return Z}async create(J,z,Y,G){let Z=this.ctxFor(J);if(vY("repo",Z.dir),vY("path",Y),!z)throw Error("create(): branch must be a non-empty string");if(await Z.exec.exists(Y)){let H=await this.tryDescribe(Z,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 Z.exec.mkdirp(Rz.dirname(Y));let Q=await this.branchExists(Z,z)?["worktree","add",Y,z]:G?["worktree","add","-b",z,Y,G]:["worktree","add","-b",z,Y];await this.runGit(Z.exec,Q,{cwd:Z.dir});let f=await this.tryDescribe(Z,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?_V(z,J.slug):iV(J.repo,J.slug);return this.create(J.repo,J.branch,Y,J.baseRef)}async remove(J,z){vY("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 Z=await this.findRepoFor(Y,J);if(!Z)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 X=G?["worktree","remove","--force",J]:["worktree","remove",J];await this.runGit(Y,X,{cwd:Z}),await this.runGit(Y,["worktree","prune"],{cwd:Z,allowFail:!0})}async list(J){let z=this.ctxFor(J);vY("repo",z.dir);let Y=await this.runGit(z.exec,["worktree","list","--porcelain"],{cwd:z.dir}),G=Nj(Y.stdout),Z=[];for(let X of G){if(!X.path)continue;let Q=z.remote?_U(z.dir,X.path):o8(J,X.path);if(!Q)continue;if(!X.branch||X.detached)continue;let f=lX(Q),H=lX(X.path),B=Rz.relative(f,H),V=Rz.join(Q,B),j=await this.isDirty(X.path);Z.push({path:V,branch:X.branch,head:X.head??"",dirty:j})}return Z}async listAll(J){let z=this.ctxFor(J);vY("repo",z.dir);let Y=await this.runGit(z.exec,["worktree","list","--porcelain"],{cwd:z.dir}),G=Nj(Y.stdout),Z=z.remote?z.dir:lX(z.dir),X=[];for(let Q of G){if(!Q.path)continue;if(Q.bare)continue;if(!Q.branch||Q.detached)continue;if((z.remote?Q.path:lX(Q.path))===Z)continue;let f=await this.isDirty(Q.path);X.push({path:Q.path,branch:Q.branch,head:Q.head??"",dirty:f,kobeManaged:z.remote?_U(z.dir,Q.path)!==null:$V(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}),G=Number.parseInt(Y.stdout.trim(),10);if(Number.isFinite(G)&&G>0)return G*1000}catch{}if(!J.isRemote)try{return pU.statSync(z).mtimeMs}catch{}return 0}async isDirty(J){vY("path",J);let z=this.execDeps.execForPath(J);return(await this.runGit(z,["status","--porcelain"],{cwd:J})).stdout.length>0}async currentBranch(J){vY("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(vY("path",J),z===Y)return;let G=this.execDeps.execForPath(J),Z=await this.findRepoFor(G,J);if(!Z)throw Error(`renameBranch(): ${J} is not a git worktree`);await this.runGit(G,["branch","-m",z,Y],{cwd:Z})}async tryDescribe(J,z){let Y=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),G=Nj(Y.stdout),Z=(f)=>J.remote?f:lX(f),X=Z(z),Q=G.find((f)=>f.path&&Z(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 G=Y.stdout.trim();if(!G)return null;let Z=Rz.isAbsolute(G)?G:Rz.resolve(z,G);return Rz.basename(Z)===".git"?Rz.dirname(Z):Z}catch(Y){if(Y instanceof vf)return null;throw Y}}}function Nj(J){let z=[],Y=null;for(let G of J.split(`
|
|
85
|
+
`)){let Z=G.replace(/\r$/,"");if(Z===""){if(Y)z.push(Y);Y=null;continue}if(!Y)Y={};if(Z.startsWith("worktree "))Y.path=Z.slice(9);else if(Z.startsWith("HEAD "))Y.head=Z.slice(5);else if(Z.startsWith("branch ")){let X=Z.slice(7);Y.branch=X.startsWith("refs/heads/")?X.slice(11):X}else if(Z==="detached")Y.detached=!0;else if(Z==="bare")Y.bare=!0}if(Y)z.push(Y);return z}function _U(J,z){let Y=`${J.replace(/\/+$/,"")}/.kobe/worktrees`;return z===Y||z.startsWith(`${Y}/`)?Y:null}function vY(J,z){if(!z||!Rz.isAbsolute(z))throw Error(`${J} must be an absolute path, got: ${JSON.stringify(z)}`)}function lX(J){try{return pU.realpathSync(J)}catch{return Rz.resolve(J)}}var eb;var kj=k(()=>{Vz();F1();aU();s8();eb={execForRepo:JZ,execForPath:YY,remoteBasePath(J){return rz(J)?.basePath??null}}});var cf;var oU=k(()=>{cf=["web","completions","add","remove","adopt","export","repo","api","daemon","theme","skill","feedback","update","doctor","reset","reload","kill-sessions"]});var tU={};f1(tU,{runCompletionsSubcommand:()=>GS});function JS(){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 zS(){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 YS(){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 GS(J){let z=J[0];if(z==="--help"||z==="-h"||z==="help"){process.stdout.write(sU);return}if(!z||z!=="bash"&&z!=="zsh"&&z!=="fish")process.stderr.write(`kobe completions: unknown shell "${z}"
|
|
119
119
|
|
|
120
|
-
${
|
|
120
|
+
${sU}`),process.exit(2);let Y;if(z==="bash")Y=JS();else if(z==="zsh")Y=zS();else Y=YS();process.stdout.write(Y)}var sU=`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:G,setRepoInitOverride:Z,resolveRepoRoot:X}=await Promise.resolve().then(() => (F1(),oz)),{existsSync:Q}=await import("fs"),{join:f}=await import("path");if(z==="show"){let[H]=Y.filter((L)=>!L.startsWith("-")),B=X(
|
|
138
|
-
`)});import{spawnSync as
|
|
124
|
+
`;var eU=k(()=>{oU()});var G4={};f1(G4,{runExportSubcommand:()=>jS,renderExport:()=>Y4,displayWidth:()=>df});function ZS(J){return{id:J.id,title:J.title,status:J.status,archived:String(J.archived),vendor:J.vendor??$1,branch:J.branch,repo:J.repo,worktreePath:J.worktreePath}}function bj(J){process.stderr.write(`kobe export: ${J}
|
|
125
|
+
|
|
126
|
+
${z4}
|
|
127
|
+
`),process.exit(2)}function XS(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 Z=J[++Y];if(Z===void 0)bj("--format requires a value (json, csv, or table)");z=J4(Z)}else if(G.startsWith("--format="))z=J4(G.slice(9));else bj(`unexpected argument "${G}"`)}return z}function J4(J){if(J==="json"||J==="csv"||J==="table")return J;bj(`unknown format "${J}" (expected json, csv, or table)`)}function QS(J){if(/[",\r\n]/.test(J))return`"${J.replace(/"/g,'""')}"`;return J}function qS(J){let z=[$X.join(",")];for(let Y of J)z.push($X.map((G)=>QS(Y[G])).join(","));return z.join(`
|
|
128
|
+
`)}function df(J){let z=0;for(let Y of J)z+=fS(Y.codePointAt(0));return z}function fS(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 HS(J,z){return J+" ".repeat(Math.max(0,z-df(J)))}function BS(J){let z={};for(let Z of $X)z[Z]=Math.max(df(Z),...J.map((X)=>df(X[Z])));let Y=(Z)=>$X.map((X)=>HS(Z[X],z[X])).join(" ").trimEnd(),G={};for(let Z of $X)G[Z]=Z;return[Y(G),...J.map(Y)].join(`
|
|
129
|
+
`)}function Y4(J,z){let Y=J.map(ZS);if(z==="json")return JSON.stringify(Y,null,2);if(z==="csv")return qS(Y);return BS(Y)}async function jS(J){if(J.includes("--help")||J.includes("-h")||J.includes("help")){process.stdout.write(`${z4}
|
|
130
|
+
`);return}let z=XS(J),{TaskIndexStore:Y}=await Promise.resolve().then(() => (iX(),Cj)),G=new Y;await G.load();let Z=G.list();if(Z.length===0&&z==="table"){process.stdout.write(`no tasks
|
|
131
|
+
`);return}process.stdout.write(`${Y4(Z,z)}
|
|
132
|
+
`)}var z4,$X;var Z4=k(()=>{rJ();z4=["Usage: kobe export [--json | --csv | --format <json|csv|table>]","","Print the task list (from ~/.kobe/tasks.json) to stdout. Read-only and","daemon-free \u2014 works with the kobe daemon down.","","Options:"," --json JSON array of tasks (default)"," --csv CSV with a header row"," --format <fmt> One of: json, csv, table"," -h, --help Print this help",""].join(`
|
|
133
|
+
`),$X=["id","title","status","archived","vendor","branch","repo","worktreePath"]});var q4={};f1(q4,{runRepoSubcommand:()=>US});import{readFileSync as WS}from"fs";import{resolve as nf}from"path";function mY(J){process.stderr.write(`kobe repo: ${J}
|
|
134
|
+
|
|
135
|
+
${Q4}
|
|
136
|
+
`),process.exit(2)}function X4(J){try{return WS(nf(process.cwd(),J),"utf8")}catch(z){mY(`cannot read ${J}: ${z instanceof Error?z.message:String(z)}`)}}function VS(J){let z={};for(let Y=0;Y<J.length;Y++){let G=J[Y],Z=()=>{let X=J[++Y];if(X===void 0)mY(`${G} requires a value`);return X};if(G==="--init-script")z.initScript=Z();else if(G==="--init-script-file")z.initScript=X4(Z());else if(G==="--init-prompt")z.initPrompt=Z();else if(G==="--init-prompt-file")z.initPrompt=X4(Z());else if(G.startsWith("-"))mY(`unknown flag "${G}"`);else if(z.path===void 0)z.path=G;else mY(`unexpected argument "${G}"`)}return z}function KS(J){let z,Y=!1,G=!1;for(let Z of J)if(Z==="--init-script")Y=!0;else if(Z==="--init-prompt")G=!0;else if(Z.startsWith("-"))mY(`unknown flag "${Z}"`);else if(z===void 0)z=Z;else mY(`unexpected argument "${Z}"`);if(!Y&&!G)Y=!0,G=!0;return{path:z,clearScript:Y,clearPrompt:G}}async function US(J){let[z,...Y]=J;if(z===void 0||z==="--help"||z==="-h"||z==="help"){process.stdout.write(`${Q4}
|
|
137
|
+
`);return}let{getRepoInitOverride:G,setRepoInitOverride:Z,resolveRepoRoot:X}=await Promise.resolve().then(() => (F1(),oz)),{existsSync:Q}=await import("fs"),{join:f}=await import("path");if(z==="show"){let[H]=Y.filter((L)=>!L.startsWith("-")),B=X(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?uZ(V.initScript):"(unset)"}`),console.log(` override initPrompt: ${V.initPrompt?uZ(V.initPrompt):"(unset)"}`);return}if(z==="set"){let H=VS(Y);if(H.initScript===void 0&&H.initPrompt===void 0)mY("set needs at least one of --init-script(-file) / --init-prompt(-file)");let B=X(nf(process.cwd(),H.path??".")),V=Z(B,{...H.initScript!==void 0?{initScript:H.initScript}:{},...H.initPrompt!==void 0?{initPrompt:H.initPrompt}:{}});console.log(`updated override for ${B}`),console.log(` initScript: ${V.initScript?uZ(V.initScript):"(unset)"}`),console.log(` initPrompt: ${V.initPrompt?uZ(V.initPrompt):"(unset)"}`);return}if(z==="unset"){let{path:H,clearScript:B,clearPrompt:V}=KS(Y),j=X(nf(process.cwd(),H??".")),K=Z(j,{...B?{initScript:""}:{},...V?{initPrompt:""}:{}});console.log(`cleared override for ${j}`),console.log(` initScript: ${K.initScript?uZ(K.initScript):"(unset)"}`),console.log(` initPrompt: ${K.initPrompt?uZ(K.initPrompt):"(unset)"}`);return}mY(`unknown verb "${z}"`)}function uZ(J){let z=J.replace(/\s+/g," ").trim();return z.length>60?`"${z.slice(0,57)}\u2026"`:`"${z}"`}var Q4;var f4=k(()=>{Q4=["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 DS}from"child_process";function FS(J){let[z,Y]=J.split("/");if(!z||!Y)throw Error(`invalid GitHub repository slug: ${J}`);return{owner:z,name:Y}}function H4(J,z){let Y=J.trim();if(!Y)throw Error(`${z} is required`);return Y}function B4(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 j4(J,z,Y){let G=["api","graphql","-f",`query=${J}`];for(let[H,B]of Object.entries(z))G.push("-f",`${H}=${B}`);let Z=Y.spawn("gh",G,{encoding:"utf8"});if(Z.error)throw Error(`failed to run gh: ${Z.error.message}`);let X=typeof Z.stdout==="string"?Z.stdout:String(Z.stdout??""),Q=typeof Z.stderr==="string"?Z.stderr:String(Z.stderr??""),f;try{f=JSON.parse(X)}catch{throw Error(`failed to parse gh response: ${B4(Q,void 0)}`)}if((Z.status??0)!==0||f.errors?.length)throw Error(B4(Q,f.errors));if(!f.data)throw Error("GitHub CLI response did not include data");return f.data}function OS(J){return`${J}
|
|
139
139
|
|
|
140
140
|
---
|
|
141
|
-
Submitted from kobe ${p0}.`}function EZ(J,z={}){let Y=
|
|
141
|
+
Submitted from kobe ${p0}.`}function EZ(J,z={}){let Y=H4(J.title,"feedback title"),G=OS(H4(J.body,"feedback body")),Z=(z.repoSlug??oY)();if(!Z)throw Error("package repository is not a GitHub repository");let{owner:X,name:Q}=FS(Z),f=J.categorySlug?.trim()||Sj,H={spawn:z.spawn??DS},V=j4(LS,{owner:X,name:Q},H).repository,j=V?.id;if(!j)throw Error(`GitHub repository not found: ${Z}`);let K=V.discussionCategories?.nodes?.find((O)=>O.slug===f);if(!K)throw Error(`GitHub Discussion category not found: ${f}`);let A=j4(MS,{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 Sj="feedback",LS=`
|
|
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
|
+
`,MS=`
|
|
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
|
|
168
|
+
`;var lf=k(()=>{MJ()});async function W4(J={}){let z=J.mode==="require-running"?await zz():await Az();if(!z)return null;return{client:z,close:()=>z.close()}}var V4=k(()=>{FJ()});var C4={};f1(C4,{verbSchema:()=>uj,verbHelp:()=>A4,validateAgainstSpec:()=>yj,schemaIndex:()=>F4,runApiSubcommand:()=>$S,parseFlags:()=>Tj,parseAgentsSpec:()=>L4,invokeVerb:()=>lS,fullSchema:()=>O4,findVerb:()=>aX,deliverPrompt:()=>R4,defaultApiRuntime:()=>Ej,apiUsage:()=>$f,VerbArgs:()=>xj,VERB_GROUPS:()=>PZ,VERBS:()=>hZ,FANOUT_CAP:()=>wZ,ApiError:()=>M1,API_VERBS:()=>gS,API_SCHEMA_VERSION:()=>Ij});import{resolve as K4}from"path";function D4(J){for(let[z,Y]of Object.entries(PZ))if(Y.includes(J))return z;return"other"}async function RS(J){let z=J.args.str("verb");if(z){let G=aX(z);if(!G)throw new M1(`unknown verb: ${z}`,"BAD_VERB");return uj(G)}let Y=J.args.str("group");if(Y)return NS(Y);if(J.args.bool("all"))return O4();return F4()}function aX(J){let z=af[J]??J;return hZ.find((Y)=>Y.name===z)}function Tj(J,z=new Set){let Y=new Map,G=!1,Z=!1;for(let X=0;X<J.length;X++){let Q=J[X];if(!Q.startsWith("--")&&Q!=="-h")throw new M1(`unexpected positional arg: ${Q}`,"BAD_FLAG");if(Q==="-h"){Z=!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")Z=j!=="false"&&j!=="0";else Y.set(V,j);continue}let H=Q.slice(2);if(H==="pretty"){G=!0;continue}if(H==="help"){Z=!0;continue}if(z.has(H)){Y.set(H,"true");continue}let B=J[X+1];if(B===void 0||B.startsWith("--"))throw new M1(`flag --${H} requires a value`,"BAD_FLAG");Y.set(H,B),X+=1}return{flags:Y,pretty:G,help:Z}}function yj(J,z){let Y=new Set(J.flags.map((G)=>G.name));for(let G of z.keys())if(!Y.has(G))throw new M1(`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 M1(`--${G.name} is required for "${J.name}"`,"MISSING_FLAG");if(G.type==="enum"&&G.values){let Z=z.get(G.name);if(Z!==void 0&&!G.values.includes(Z))throw new M1(`--${G.name} must be one of ${G.values.join(", ")}`,"BAD_FLAG")}if(G.type==="int"){let Z=z.get(G.name);if(Z!==void 0){let X=Number.parseInt(Z,10);if(!Number.isInteger(X)||X<=0)throw new M1(`--${G.name} must be a positive integer`,"BAD_FLAG")}}}}class xj{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 M1(`--${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 M1(`--${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 M1(`--${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 M1(`--${J} must be a positive integer`,"BAD_FLAG");return Y}path(J){let z=this.str(J);return z===void 0?void 0:K4(process.cwd(),z)}requirePath(J){return K4(process.cwd(),this.require(J))}}function L4(J){let z=[];for(let Y of J.split(",")){let G=Y.trim();if(!G)continue;let Z=G.indexOf(":");if(Z===-1)throw new M1(`--agents entry "${G}" must be vendor:count`,"BAD_FLAG");let X=G.slice(0,Z);if(!n1.includes(X))throw new M1(`--agents vendor "${X}" must be one of ${n1.join(", ")}`,"BAD_FLAG");let Q=Number.parseInt(G.slice(Z+1),10);if(!Number.isInteger(Q)||Q<=0)throw new M1(`--agents count for "${X}" must be a positive integer`,"BAD_FLAG");if(z.length+Q>wZ)throw new M1(`--agents requests ${z.length+Q} agents, exceeds the cap of ${wZ}`,"BAD_FLAG");for(let f=0;f<Q;f++)z.push(X)}if(z.length===0)throw new M1('--agents specified no agents (e.g. "claude:2,codex:1")',"BAD_FLAG");return z}function CS(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 uj(J){return{name:J.name,group:D4(J.name),summary:J.summary,offline:J.offline??!1,flags:J.flags.map(CS)}}function F4(){return{apiVersion:Ij,kobeVersion:p0,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:PZ,verbs:hZ.map((J)=>({name:J.name,group:D4(J.name),summary:J.summary})),globalFlags:M4,aliases:af}}function NS(J){let z=PZ[J];if(!z)throw new M1(`unknown group: ${J}. Groups: ${Object.keys(PZ).join(", ")}`,"BAD_FLAG");return{group:J,verbs:z.map((Y)=>{let G=aX(Y);return{name:Y,summary:G?.summary??""}})}}function O4(){return{apiVersion:Ij,kobeVersion:p0,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:M4,aliases:af,groups:PZ,verbs:hZ.map(uj)}}function kS(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 A4(J){let z=[`kobe api ${J.name} ${kS(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 Z=G.required?" (required)":"",X=G.default!==void 0?` [default: ${G.default}]`:"",Q=G.type==="enum"&&G.values?` {${G.values.join("|")}}`:"";z.push(` --${G.name}${Q}${Z}${X} ${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:",...hZ.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 bS(J,z){let Y=z?JSON.stringify(J,null,2):JSON.stringify(J);process.stdout.write(`${Y}
|
|
171
171
|
`)}function fY(J,z,Y=1){process.stderr.write(`${JSON.stringify({error:{message:J,code:z}})}
|
|
172
|
-
`),process.exit(Y)}async function
|
|
173
|
-
`);return}let G
|
|
174
|
-
${
|
|
175
|
-
`);return}try{Ij(G,X.flags)}catch(f){if(f instanceof M1)fY(f.message,f.code,2);fY(f instanceof Error?f.message:String(f),"BAD_FLAG",2)}let Q=null;if(!G.offline)try{Q=await B4()}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 G.handler(A4(G,X.flags,Q?.client??null,xj));CS(f,X.pretty)}catch(f){if(f instanceof M1)fY(f.message,f.code,1);fY(f instanceof Error?f.message:String(f),"RPC_ERROR",1)}finally{Q?.close()}}var bj=2,wZ=10,V4,MS,M1,K1,$f,PZ,hZ,OS,D4,NS,xj;var g4=k(()=>{sJ();nf();P1();yq();i1();MJ();j4();V4=["backlog","in_progress","in_review","done","canceled","error"],MS=["open","doing","hold","done"];M1=class M1 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:n1,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})},$f={"spawn-task":"add"},PZ={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"]};hZ=[{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:FS},{name:"list",summary:"List all tasks (incl. archived). Returns { tasks }.",flags:[],handler:uS},{name:"get-task",summary:"Read one task's metadata. `.running` = its tmux session is live.",flags:[K1.taskId()],handler:xS},{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:V4,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:SS},{name:"fan-out",summary:`Spawn N tasks of ONE prompt in a single call (parallel attempts). Capped at ${wZ}.`,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:vS},{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:IS},{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:TS},{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:yS},{name:"feedback",summary:"Create a GitHub Discussion in the kobe repo's Feedback category through `gh`.",flags:[{name:"title",type:"string",required:!0,placeholder:"T",description:"Discussion title."},{name:"body",type:"string",required:!0,placeholder:"TEXT",description:"Discussion body."},{name:"category",type:"string",default:kj,placeholder:"SLUG",description:"Discussion category slug."}],offline:!0,handler:cS},{name:"issue-list",summary:"List daemon-owned issues for a repo.",flags:[K1.repo()],handler:(J)=>gz(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)=>gz(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:MS,description:"New issue status."}],handler:(J)=>gz(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:bS},{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:mS},{name:"rename",summary:"Set a task's title.",flags:[K1.taskId(),{name:"title",type:"string",required:!0,placeholder:"T",description:"New title."}],handler:(J)=>gz(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)=>gz(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)=>gz(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:V4,description:"New status."}],handler:(J)=>gz(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:wS},{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)=>gz(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:ES},{name:"ensure-worktree",summary:"Materialize a task's git worktree on disk now (without starting an engine). Returns { worktreePath }.",flags:[K1.taskId()],handler:(J)=>gz(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:PS},{name:"discover-adoptable",summary:"List existing git worktrees in a repo not yet tracked as kobe tasks. Returns { worktrees }.",flags:[K1.repo()],handler:(J)=>gz(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:hS}],OS=hZ.map((J)=>J.name);D4=[{name:"pretty",type:"bool",description:"Pretty-print stdout JSON."},{name:"help",type:"bool",description:"Show usage for the verb and exit."}];NS={sessionExists:V1,ensureSession:async(J)=>(await Promise.resolve().then(() => (zJ(),vJ))).ensureSession(J),waitForEnginePane:RX,pasteAndSubmit:gX,resolveEngineLaunchInit:async(J,z,Y)=>(await Promise.resolve().then(() => (NZ(),Sf))).resolveEngineLaunchInit(J,z,Y),engineCommand:oJ};xj={isTaskRunning:(J)=>V1(C1(J)),deliverPrompt:(J,z,Y)=>O4(J,z,Y),resolveRepoRoot:async(J)=>(await Promise.resolve().then(() => (F1(),oz))).resolveMainRepoRoot(J),defaultVendor:async()=>{let{getPersistedString:J}=await Promise.resolve().then(() => (F1(),oz)),z=J("lastSelectedVendor")?.trim();return z?z:void 0},readWorktreeChanges:async(J)=>(await Promise.resolve().then(() => (SZ(),MU))).readWorktreeChanges(J),tearDownSession:async(J)=>{let z=C1(J);await Pz(z).catch(()=>{}),await eJ(z).catch(()=>{})}}});var b4={};f1(b4,{updatePlan:()=>C4,runUpdateSubcommand:()=>lS,parseUpdateArgs:()=>N4});import{spawnSync as iS}from"child_process";function C4(){return{command:"sh",args:["-c",$z],display:$z}}function N4(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}"
|
|
172
|
+
`),process.exit(Y)}async function R4(J,z,Y,G=SS){let Z=z.worktreePath;if(!Z)Z=(await J.request("task.ensureWorktree",{taskId:z.id})).worktreePath;if(!Z)throw new M1(`task ${z.id} has no worktree`,"NO_WORKTREE");let X=C1(z.id),Q=await G.sessionExists(X);if(!Q){let B=await G.resolveEngineLaunchInit(z.repo??"",Z,{kind:"none"});if(!await G.ensureSession({name:X,cwd:Z,command:G.engineCommand(z.vendor),taskId:z.id,vendor:z.vendor,repo:z.repo,launchInit:B}))throw new M1(`failed to start tmux session for ${z.id}`,"SESSION_FAILED")}let{pane:f,ready:H}=await G.waitForEnginePane(X,!Q);if(!f)throw new M1(`no engine pane in session ${X}`,"NO_ENGINE_PANE");return await G.pasteAndSubmit(f,Y),{session:X,pane:f,started:!Q,engineReady:H}}async function IS(J){let z=null,Y=J.onChannel("active-task",(G)=>{z=G.taskId});try{await J.subscribe()}finally{Y()}return z}function dJ(J){if(!J.client)throw new M1("daemon required","BAD_DAEMON");return J.client}async function gz(J,z,Y){return dJ(J).request(z,Y)}async function TS(J){let z=J.args.str("title"),Y=J.args.str("body");if(z===void 0&&Y===void 0)throw new M1("issue-update requires --title and/or --body","MISSING_FLAG");return gz(J,"issue.mutate",{repoRoot:J.args.requirePath("repo"),op:{type:"update",id:J.args.int("id"),title:z,body:Y}})}async function yS(J){let z=dJ(J),{args:Y,runtime:G}=J,X={repo:await G.resolveRepoRoot(Y.requirePath("repo"))},Q=Y.str("title");if(Q)X.title=Q;let f=Y.str("branch");if(f)X.branch=f;let H=Y.str("base-branch");if(H)X.baseRef=H;let B=Y.vendor()??await G.defaultVendor();if(B)X.vendor=B;let V=await z.request("task.create",X),j=V.taskId;await z.request("task.setActive",{taskId:j});let K=Y.enumOf("status");if(K)await z.request("task.status",{taskId:j,status:K});let L=Y.bool("pin");if(L!==void 0)await z.request("task.pin",{taskId:j,pinned:L});let A=V.task;if(K||L!==void 0)A=(await z.request("task.get",{taskId:j})).task;let 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 xS(J){let z=dJ(J),Y=J.args.require("prompt"),G=J.args.str("task-id");if(!G){let Q=await IS(z);if(!Q)throw new M1("no --task-id given and no active task \u2014 open a task first or pass --task-id","MISSING_TARGET");G=Q}let Z=await z.request("task.get",{taskId:G}),X=await J.runtime.deliverPrompt(z,{id:G,worktreePath:Z.task.worktreePath,vendor:Z.task.vendor,repo:Z.task.repo},Y);return{ok:!0,taskId:G,session:X.session,started:X.started,engineReady:X.engineReady}}async function uS(J){let z=dJ(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 ES(J){let z=dJ(J),Y=J.args.require("task-id"),G=J.args.require("text");return await z.request("note.file",{taskId:Y,text:G})}async function wS(J){let z=dJ(J),Y=J.args.require("task-id"),G=await z.request("task.get",{taskId:Y}),Z=await J.runtime.isTaskRunning(Y);return{task:G.task,running:Z}}async function PS(J){return dJ(J).request("task.list")}async function hS(J){let z=dJ(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 vS(J){let z=dJ(J),Y=J.args.require("task-id"),G=J.args.bool("archived")??!0,Z=await z.request("task.archive",{taskId:Y,archived:G});if(G)await J.runtime.tearDownSession(Y);return Z}async function mS(J){let z=dJ(J),Y=J.args.require("task-id"),G=J.args.bool("force")??!1,Z=await z.request("task.delete",{taskId:Y,force:G});return await J.runtime.tearDownSession(Y),Z}async function cS(J){let z=dJ(J),{args:Y}=J,G={repo:Y.requirePath("repo"),worktreePath:Y.requirePath("worktree")},Z=Y.str("branch");if(Z)G.branch=Z;let X=Y.vendor();if(X)G.vendor=X;let Q=Y.str("title");if(Q)G.title=Q;return z.request("worktree.adopt",G)}async function dS(J){let z=dJ(J),{args:Y,runtime:G}=J,Z=await G.resolveRepoRoot(Y.requirePath("repo")),X=Y.require("prompt"),Q=Y.str("title"),f=Y.str("base-branch"),H=Y.str("agents"),B=await G.defaultVendor(),V=H?L4(H):Array(Y.int("count")??1).fill(Y.vendor()??B??"claude");if(V.length>wZ)throw new M1(`fan-out of ${V.length} exceeds the cap of ${wZ} \u2014 spawn in batches`,"BAD_FLAG");let j=[];for(let K of V){let L={repo:Z,vendor:K};if(Q)L.title=Q;if(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},X);j.push({taskId:A.taskId,vendor:K,started:O.started,engineReady:O.engineReady,session:O.session})}return{count:j.length,tasks:j}}async function nS(J){let z=dJ(J),{args:Y,runtime:G}=J,Z=Y.str("task-ids"),X=Y.path("repo"),Q;if(Z)Q=Z.split(",").map((H)=>H.trim()).filter(Boolean);else if(X){let H=await G.resolveRepoRoot(X),{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 M1("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 iS(J){return{ok:!0,discussion:EZ({title:J.args.require("title"),body:J.args.require("body"),categorySlug:J.args.str("category")})}}function g4(J,z,Y,G){return{args:new xj(J,z),client:Y,runtime:G}}async function lS(J,z,Y){let G=aX(J);if(!G)throw new M1(`unknown verb: ${J}`,"BAD_VERB");let Z=new Set(G.flags.filter((Q)=>Q.type==="bool").map((Q)=>Q.name)),X=Tj(z,Z);return yj(G,X.flags),G.handler(g4(G,X.flags,Y.client,Y.runtime??Ej))}async function $S(J){let[z,...Y]=J;if(!z||z==="--help"||z==="-h"||z==="help"){if(!z)fY($f(),"MISSING_VERB",2);process.stdout.write(`${$f()}
|
|
173
|
+
`);return}let G=aX(z);if(!G)fY(`unknown verb: ${z}
|
|
174
|
+
${$f()}`,"BAD_VERB",2);let Z=new Set(G.flags.filter((f)=>f.type==="bool").map((f)=>f.name)),X;try{X=Tj(Y,Z)}catch(f){if(f instanceof M1)fY(f.message,f.code,2);fY(f instanceof Error?f.message:String(f),"BAD_FLAG",2)}if(X.help){process.stdout.write(`${A4(G)}
|
|
175
|
+
`);return}try{yj(G,X.flags)}catch(f){if(f instanceof M1)fY(f.message,f.code,2);fY(f instanceof Error?f.message:String(f),"BAD_FLAG",2)}let Q=null;if(!G.offline)try{Q=await W4()}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 G.handler(g4(G,X.flags,Q?.client??null,Ej));bS(f,X.pretty)}catch(f){if(f instanceof M1)fY(f.message,f.code,1);fY(f instanceof Error?f.message:String(f),"RPC_ERROR",1)}finally{Q?.close()}}var Ij=2,wZ=10,U4,AS,M1,K1,af,PZ,hZ,gS,M4,SS,Ej;var N4=k(()=>{sJ();lf();P1();xq();i1();MJ();V4();U4=["backlog","in_progress","in_review","done","canceled","error"],AS=["open","doing","hold","done"];M1=class M1 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:n1,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"},PZ={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"]};hZ=[{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:RS},{name:"list",summary:"List all tasks (incl. archived). Returns { tasks }.",flags:[],handler:PS},{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:U4,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:yS},{name:"fan-out",summary:`Spawn N tasks of ONE prompt in a single call (parallel attempts). Capped at ${wZ}.`,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:dS},{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:xS},{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:uS},{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:ES},{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:Sj,placeholder:"SLUG",description:"Discussion category slug."}],offline:!0,handler:iS},{name:"issue-list",summary:"List daemon-owned issues for a repo.",flags:[K1.repo()],handler:(J)=>gz(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)=>gz(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:AS,description:"New issue status."}],handler:(J)=>gz(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:TS},{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:nS},{name:"rename",summary:"Set a task's title.",flags:[K1.taskId(),{name:"title",type:"string",required:!0,placeholder:"T",description:"New title."}],handler:(J)=>gz(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)=>gz(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)=>gz(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:U4,description:"New status."}],handler:(J)=>gz(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:vS},{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)=>gz(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:hS},{name:"ensure-worktree",summary:"Materialize a task's git worktree on disk now (without starting an engine). Returns { worktreePath }.",flags:[K1.taskId()],handler:(J)=>gz(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:mS},{name:"discover-adoptable",summary:"List existing git worktrees in a repo not yet tracked as kobe tasks. Returns { worktrees }.",flags:[K1.repo()],handler:(J)=>gz(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:cS}],gS=hZ.map((J)=>J.name);M4=[{name:"pretty",type:"bool",description:"Pretty-print stdout JSON."},{name:"help",type:"bool",description:"Show usage for the verb and exit."}];SS={sessionExists:V1,ensureSession:async(J)=>(await Promise.resolve().then(() => (zJ(),vJ))).ensureSession(J),waitForEnginePane:gX,pasteAndSubmit:CX,resolveEngineLaunchInit:async(J,z,Y)=>(await Promise.resolve().then(() => (NZ(),If))).resolveEngineLaunchInit(J,z,Y),engineCommand:oJ};Ej={isTaskRunning:(J)=>V1(C1(J)),deliverPrompt:(J,z,Y)=>R4(J,z,Y),resolveRepoRoot:async(J)=>(await Promise.resolve().then(() => (F1(),oz))).resolveMainRepoRoot(J),defaultVendor:async()=>{let{getPersistedString:J}=await Promise.resolve().then(() => (F1(),oz)),z=J("lastSelectedVendor")?.trim();return z?z:void 0},readWorktreeChanges:async(J)=>(await Promise.resolve().then(() => (SZ(),OU))).readWorktreeChanges(J),tearDownSession:async(J)=>{let z=C1(J);await Pz(z).catch(()=>{}),await eJ(z).catch(()=>{})}}});var I4={};f1(I4,{updatePlan:()=>k4,runUpdateSubcommand:()=>_S,parseUpdateArgs:()=>b4});import{spawnSync as aS}from"child_process";function k4(){return{command:"sh",args:["-c",$z],display:$z}}function b4(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
176
|
|
|
177
|
-
`),
|
|
178
|
-
`))}async function
|
|
177
|
+
`),S4(process.stderr),process.exit(2)}return{help:!1,dryRun:z}}function S4(J){J.write(["Usage: kobe update [--dry-run]","","Runs kobe's GitHub-hosted update script.","","Default command:",` ${$z}`,"","Script URL:",` ${NQ}`,"","Manual fallback:",` ${vH()}`,"","Examples:"," kobe update"," kobe update --dry-run",""].join(`
|
|
178
|
+
`))}async function _S(J,z){let Y={spawn:z?.spawn??aS,stdout:z?.stdout??process.stdout,stderr:z?.stderr??process.stderr,exit:z?.exit??((Q)=>process.exit(Q))},G=b4(J);if(G.help){S4(Y.stdout);return}let Z=k4();if(Y.stdout.write(`kobe ${p0} -> latest
|
|
179
179
|
`),Y.stdout.write(`running: ${Z.display}
|
|
180
180
|
`),G.dryRun)return;let X=Y.spawn(Z.command,Z.args,{stdio:"inherit"});if(X.error)Y.stderr.write(`kobe update: failed to run ${Z.command}: ${X.error.message}
|
|
181
|
-
`),Y.exit(1);Y.exit(X.status??1)}var
|
|
181
|
+
`),Y.exit(1);Y.exit(X.status??1)}var T4=k(()=>{MJ()});var E4={};f1(E4,{runThemeSubcommand:()=>XI});import{existsSync as x4,mkdirSync as pS,readFileSync as rS,readdirSync as oS,unlinkSync as sS,writeFileSync as tS}from"fs";import{basename as y4,join as Pj,resolve as eS}from"path";function HY(J){process.stderr.write(`kobe theme: ${J}
|
|
182
182
|
`),process.exit(1)}function cY(J){process.stderr.write(`kobe theme: ${J}
|
|
183
183
|
|
|
184
|
-
`),
|
|
184
|
+
`),u4(),process.exit(2)}function JI(){let J=[];J.push("bundled:");for(let G of[...wj].sort())J.push(` ${G} [built-in]`);let z=DZ(),Y=[];try{Y=oS(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 Z=G.slice(0,-5),X=Pj(z,G),Q=wj.includes(Z)?" (overrides built-in)":"";J.push(` ${Z}${Q} ${X}`)}process.stdout.write(`${J.join(`
|
|
185
185
|
`)}
|
|
186
|
-
`)}async function
|
|
186
|
+
`)}async function zI(J){if(/^https?:\/\//i.test(J)){let X;try{X=await fetch(J)}catch(V){HY(`failed to fetch ${J}: ${V instanceof Error?V.message:String(V)}`)}if(!X.ok)HY(`failed to fetch ${J}: HTTP ${X.status} ${X.statusText}`);let Q=await X.text(),f=J.split(/[?#]/)[0]??J,H=y4(f)||"theme.json",B=H.endsWith(".json")?H.slice(0,-5):H;return{text:Q,defaultName:B}}let z=eS(process.cwd(),J),Y;try{Y=rS(z,"utf8")}catch(X){HY(`failed to read ${z}: ${X instanceof Error?X.message:String(X)}`)}let G=y4(z),Z=G.endsWith(".json")?G.slice(0,-5):G;return{text:Y,defaultName:Z}}function YI(J){let z=null,Y,G=!1;for(let Z=0;Z<J.length;Z+=1){let X=J[Z];if(X==="--force"||X==="-f"){G=!0;continue}if(X==="--name"||X==="-n"){let Q=J[Z+1];if(Q===void 0)cY("--name requires a value");Y=Q,Z+=1;continue}if(X.startsWith("--name=")){Y=X.slice(7);continue}if(X.startsWith("--"))cY(`unknown flag: ${X}`);if(z===null){z=X;continue}cY(`unexpected positional argument: ${X}`)}if(z===null)cY("missing <source> (URL or path to theme JSON)");return{source:z,opts:{name:Y,force:G}}}async function GI(J){let{source:z,opts:Y}=YI(J),{text:G,defaultName:Z}=await zI(z),X;try{X=JSON.parse(G)}catch(V){HY(`source is not valid JSON: ${V instanceof Error?V.message:String(V)}`)}let Q=dq(X);if(!Q.ok)HY(`source is not a valid kobe theme: ${Q.reason}`);let f=Y.name??Z;if(!f||!/^[a-zA-Z0-9._-]+$/.test(f))HY(`invalid theme name "${f}" (use letters, digits, '.', '_', '-')`);let H=DZ();pS(H,{recursive:!0});let B=Pj(H,`${f}.json`);if(x4(B)&&!Y.force)HY(`${B} already exists (pass --force to overwrite)`);tS(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 ZI(J){let z=J[0];if(!z)cY("missing <name>");if(J.length>1)cY(`unexpected extra arguments after "${z}"`);if(wj.includes(z))HY(`"${z}" is a built-in theme and cannot be removed`);let Y=Pj(DZ(),`${z}.json`);if(!x4(Y))HY(`no user theme named "${z}" (looked for ${Y})`);sS(Y),process.stdout.write(`removed theme "${z}" (${Y})
|
|
189
|
+
`)}function u4(){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: ${DZ()}`,"Schema: https://raw.githubusercontent.com/sma1lboy/kobe/main/packages/kobe/src/tui/context/theme/theme.schema.json",""].join(`
|
|
190
|
+
`))}async function XI(J){let[z,...Y]=J;if(!z||z==="--help"||z==="-h"||z==="help"){if(u4(),!z)process.exit(2);return}if(z==="list"||z==="ls"){if(Y.length>0)cY(`"${z}" takes no arguments`);JI();return}if(z==="add"){await GI(Y);return}if(z==="remove"||z==="rm"){ZI(Y);return}cY(`unknown action "${z}" (try "list", "add", or "remove")`)}var wj;var w4=k(()=>{p1();nq();QB();wj=["claude","conductor","dracula","nord","opencode","osaka-jade","tokyonight"]});var m4={};f1(m4,{runFeedbackSubcommand:()=>qI,parseFeedbackArgs:()=>v4});import{readFileSync as P4}from"fs";function dY(J){process.stderr.write(`kobe feedback: ${J}
|
|
191
191
|
|
|
192
|
-
${
|
|
193
|
-
`),process.exit(2)}function
|
|
194
|
-
`);return}if(!z.title)dY("--title is required");if(z.body&&z.bodyFile)dY("pass either --body or --body-file, not both");let Y=z.bodyFile?
|
|
195
|
-
`)});import{homedir as
|
|
196
|
-
`))}function
|
|
192
|
+
${h4}
|
|
193
|
+
`),process.exit(2)}function QI(J){if(J==="-")return P4(0,"utf8");return P4(J,"utf8")}function v4(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)dY("--title requires a value");continue}if(G==="--body"){if(z.body=J[++Y],z.body===void 0)dY("--body requires a value");continue}if(G==="--body-file"){if(z.bodyFile=J[++Y],z.bodyFile===void 0)dY("--body-file requires a value");continue}if(G==="--category"){if(z.category=J[++Y],z.category===void 0)dY("--category requires a value");continue}dY(`unexpected argument "${G}"`)}return z}async function qI(J){let z=v4(J);if(z.help){process.stdout.write(`${h4}
|
|
194
|
+
`);return}if(!z.title)dY("--title is required");if(z.body&&z.bodyFile)dY("pass either --body or --body-file, not both");let Y=z.bodyFile?QI(z.bodyFile):z.body;if(!Y)dY("--body or --body-file is required");let G=EZ({title:z.title,body:Y,categorySlug:z.category});console.log(`created Discussion #${G.number}: ${G.url}`)}var h4;var c4=k(()=>{lf();h4=["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 fI}from"os";async function d4(J={}){let z=J.homeDir??process.env.KOBE_HOME_DIR??fI(),Y=new xZ({homeDir:z});await Y.load();let G=new mf,Z=new Aq({store:Y,worktrees:G});return{homeDir:z,orchestrator:Z,store:Y,worktrees:G,async close(){Z.dispose()}}}var n4=k(()=>{FX();iX();kj()});var l4={};f1(l4,{runDaemonSubcommand:()=>BI});function i4(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 HI(){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 BI(J){let[z="status"]=J,Y=Sz(),G=sz();if(z==="--help"||z==="-h"||z==="help"){i4(process.stdout);return}if(z==="status"){let f=new aJ(Y);try{let H=await f.request("daemon.status");console.log(JSON.stringify(H,null,2))}catch{let H=await IZ(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 aJ(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 TZ(Y,G),(await Az()).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
|
+
`),i4(process.stderr),process.exit(2);FK();let Z=await d4(),X=await SU(Z.orchestrator,{socketPath:Y,pidPath:G,homeDir:Z.homeDir,webPort:HI(),webHost:process.env.KOBE_WEB_HOST,webStaticDir:process.env.KOBE_DAEMON_WEB_STATIC_DIR,onStop:async()=>{await Z.close()}});if(console.log(`kobe daemon: listening on ${X.socketPath}`),X.webPort)console.log(`kobe daemon: web transport listening on http://127.0.0.1:${X.webPort}`);let Q=async()=>{await X.close(),await Z.close(),process.exit(0)};process.once("SIGINT",()=>void Q()),process.once("SIGTERM",()=>void Q())}var $4=k(()=>{zX();FJ();Pf();dG();wf();n4()});import{existsSync as jI,readFileSync as WI}from"fs";import{homedir as VI}from"os";import{join as a4}from"path";function mj(J={}){return["skills","add",KI,"--skill","kobe","--agent",J.agent??_f]}function pf(J={}){return`npx ${mj(J).join(" ")}`}function cj(J={}){let z=J.home??VI(),Y=J.cwd??process.cwd();return[a4(z,_4),a4(Y,_4)]}function UI(J){let z=J.match(/kobe-skill-version:\s*(\d+)/);return z?Number.parseInt(z[1],10):null}function pX(J){let z=cj(J).find((Z)=>jI(Z));if(!z)return{installed:!1,installedVersion:null,currentVersion:hj,stale:!1};let Y=null;try{Y=UI(WI(z,"utf8"))}catch{Y=null}let G=Y===null||Y<hj;return{installed:!0,installedVersion:Y,currentVersion:hj,stale:G}}function p4(){let J=pX();if(!J.installed){if(g1(vj)==="1")return;r1(vj,"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
|
+
${_X}
|
|
201
|
+
(wraps \`${pf()}\`; check anytime with \`kobe doctor\`)
|
|
202
202
|
|
|
203
|
-
`);return}if(J.stale){let z=`${
|
|
203
|
+
`);return}if(J.stale){let z=`${vj}:v${J.currentVersion}`;if(g1(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
|
+
${_X}
|
|
206
206
|
|
|
207
|
-
`)}}var
|
|
207
|
+
`)}}var hj=2,_4=".claude/skills/kobe/SKILL.md",_X="kobe skill install",KI="Sma1lboy/kobe",_f="claude-code",vj="skillHintSeen";var rf=k(()=>{F1()});var of={};f1(of,{runResetSubcommand:()=>SI,runReloadSubcommand:()=>II,runDoctorSubcommand:()=>kI});import{existsSync as DI,readFileSync as s4,statSync as LI}from"fs";import{unlink as MI}from"fs/promises";import{join as t4}from"path";import{createInterface as FI}from"readline";function OI(J){try{return process.kill(J,0),!0}catch(z){return z.code==="EPERM"}}async function AI(J){let z=new aJ(J);try{return await z.request("daemon.status")}catch{return null}finally{z.close()}}function RI(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 gI(J){if(J<1024)return`${J} B`;if(J<1048576)return`${(J/1024).toFixed(1)} KB`;return`${(J/1048576).toFixed(1)} MB`}function dj(J){try{let z=LI(J);return`present (${gI(z.size)}, modified ${z.mtime.toISOString()})`}catch{return"absent"}}function e4(J){try{let z=JSON.parse(s4(J,"utf8"));return Array.isArray(z.tasks)?z.tasks.length:null}catch{return null}}function CI(J,z){try{return s4(J,"utf8").split(`
|
|
208
208
|
`).filter((G)=>G.trim().length>0).slice(-z).join(`
|
|
209
|
-
`)}catch{return""}}async function
|
|
210
|
-
`).filter((Y)=>Y.trim().length>0).length}async function
|
|
209
|
+
`)}catch{return""}}async function nj(J){let z=Bun.spawn(CG(...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 NI(){if(!await wz())return 0;let{code:J,stdout:z}=await nj(["list-sessions","-F","#{session_name}"]);if(J!==0)return 0;return z.split(`
|
|
210
|
+
`).filter((Y)=>Y.trim().length>0).length}async function kI(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=Sz(),G=sz(),Z=
|
|
213
|
-
`))f.push(` \u2502 ${L}`)}}if(f.push(""),await wz())f.push(`tmux: ${await
|
|
214
|
-
`))}async function
|
|
215
|
-
`))}async function
|
|
212
|
+
`)),process.exit(2);let Y=Sz(),G=sz(),Z=uQ(),X=t4(qJ(),"tasks.json"),Q=lJ(),f=["kobe doctor",` home: ${bz()}`,` socket: ${Y}`,""],H=await AI(Y);if(H){let j=typeof H.daemonPid==="number"?H.daemonPid:"?",K=typeof H.uptimeMs==="number"?RI(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!==p0)f.push(` \u26A0 stale build: daemon is v${O}, you launched v${p0}`),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 IZ(G);if(j&&OI(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(DI(Y))f.push(` orphan socket file present: ${Y}`);let K=CI(Z,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 wz())f.push(`tmux: ${await NI()} kobe session(s) on \`${Fz}\` socket`);else f.push("tmux: \u2717 not found on PATH (task sessions need tmux)");f.push("");let B=pX();if(!B.installed)f.push("skill: \u2717 kobe agent skill not installed (optional \u2014 lets a coding agent drive `kobe api`)"),f.push(` \u2192 ${_X}`);else if(B.stale){let j=B.installedVersion===null?"unstamped":`v${B.installedVersion}`;f.push(`skill: \u26A0 kobe agent skill out of date (${j}; this kobe wants v${B.currentVersion})`),f.push(` \u2192 ${_X}`)}else f.push(`skill: \u2713 kobe agent skill installed (v${B.installedVersion})`);f.push("");let V=e4(X);f.push(`tasks.json: ${dj(X)}${V===null?"":` \u2014 ${V} task(s)`}`),f.push(`state.json: ${dj(Q)}`),f.push(`daemon.log: ${dj(Z)}`),console.log(f.join(`
|
|
214
|
+
`))}async function bI(J){let z=FI({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 r4(J,z){try{await MI(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 o4(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 SI(J){if(J.includes("--help")||J.includes("-h")||J.includes("help")){o4(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
|
+
`),o4(process.stderr),process.exit(2);let G=J.includes("--hard"),Z=J.includes("--yes")||J.includes("-y"),X=Sz(),Q=sz(),f=t4(qJ(),"tasks.json"),H=lJ();if(console.log("kobe reset will:"),console.log(" \u2022 stop the kobe daemon (graceful \u2192 SIGTERM \u2192 SIGKILL)"),console.log(` \u2022 remove its socket + pidfile (${X})`),console.log(` \u2022 kill all kobe tmux sessions on the \`${Fz}\` socket`),G){let j=e4(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(!Z){if(!process.stdin.isTTY){console.log(`
|
|
218
|
+
re-run with --yes to proceed (no interactive terminal for a y/N prompt)`);return}if(!await bI(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 TZ(X,Q);if(console.log(V==="absent"?" daemon: was not running (cleared any stale socket/pidfile)":` daemon: stopped via ${V}${B?` (pid ${B})`:""}`),await wz()){let{code:j}=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 TZ(X,Q);if(console.log(V==="absent"?" daemon: was not running (cleared any stale socket/pidfile)":` daemon: stopped via ${V}${B?` (pid ${B})`:""}`),await wz()){let{code:j}=await nj(["kill-server"]);console.log(j===0?` tmux: killed all sessions on \`${Fz}\``:` tmux: no sessions on \`${Fz}\``)}else console.log(" tmux: not installed \u2014 no sessions to kill");if(G)await r4(f,"task index"),await r4(H,"UI state");console.log(`
|
|
221
|
+
kobe: reset complete. Relaunch kobe to start fresh.`)}async function II(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 wz()){console.log("kobe reload: tmux is not installed \u2014 no panes to reload");return}let{code:Y,stdout:G}=await
|
|
226
|
-
`).map((f)=>f.trim()).filter((f)=>f.length>0);if(Z.length===0){console.log(`kobe reload: no kobe tmux sessions on the \`${Fz}\` socket`);return}let{refreshKobeWorkspacePanes:X}=await Promise.resolve().then(() => (zJ(),vJ)),Q=0;for(let f of Z)try{await X(f),Q++}catch(H){console.error(` failed to reload session "${f}": ${H instanceof Error?H.message:String(H)}`)}console.log(`kobe: reloaded Tasks/Ops panes in ${Q}/${Z.length} session(s) \u2014 engine panes untouched`)}var
|
|
227
|
-
`).map((G)=>Number.parseInt(G.trim(),10)).filter((G)=>Number.isFinite(G)&&G!==process.pid)}catch{return[]}}async function
|
|
228
|
-
`),process.exit(2);z=G}try{let G=J.includes("--routes-only")||J.includes("--bridge-only"),Z=!J.includes("--no-takeover"),X=G?void 0:
|
|
229
|
-
`),process.stdout.write(` home: ${
|
|
230
|
-
`);else if(Q=await
|
|
231
|
-
`),process.stdout.write(` home: ${
|
|
225
|
+
`),process.exit(2);if(!await wz()){console.log("kobe reload: tmux is not installed \u2014 no panes to reload");return}let{code:Y,stdout:G}=await nj(["list-sessions","-F","#{session_name}"]);if(Y!==0){console.log(`kobe reload: no kobe tmux sessions on the \`${Fz}\` socket`);return}let Z=G.split(`
|
|
226
|
+
`).map((f)=>f.trim()).filter((f)=>f.length>0);if(Z.length===0){console.log(`kobe reload: no kobe tmux sessions on the \`${Fz}\` socket`);return}let{refreshKobeWorkspacePanes:X}=await Promise.resolve().then(() => (zJ(),vJ)),Q=0;for(let f of Z)try{await X(f),Q++}catch(H){console.error(` failed to reload session "${f}": ${H instanceof Error?H.message:String(H)}`)}console.log(`kobe: reloaded Tasks/Ops panes in ${Q}/${Z.length} session(s) \u2014 engine panes untouched`)}var sf=k(()=>{zX();Pf();dG();wf();p1();rf();P1();MJ()});var QD={};f1(QD,{runWebSubcommand:()=>hI});import{existsSync as YD}from"fs";import{homedir as TI}from"os";import{resolve as tf}from"path";import{fileURLToPath as GD}from"url";function JD(){let J=process.env.KOBE_HOME_DIR?.trim();return J?`sandbox: ${J}`:`${TI()}/.kobe (production)`}function xI(){let J=GD(import.meta.url),z=[tf(J,"../../../../kobe-web/dist"),tf(J,"../../web-ui")];for(let Y of z)if(YD(`${Y}/index.html`))return Y;return}function uI(){let J=GD(import.meta.url),z=[tf(J,"../../../../kobe-web/pty-server.mjs"),tf(J,"../../web-ui/pty-server.mjs")];for(let Y of z)if(YD(Y))return Y;return}async function zD(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 EI(J){let z;try{z=(await(await fetch(`http://localhost:${J}${XD}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(z!==ZD)throw Error(`PTY port ${J} is in use by a non-kobe service; refusing to replace it`);let Y=await zD(J);for(let Z of Y)try{process.kill(Z,"SIGTERM")}catch{}let G=Date.now()+2000;while(Date.now()<G){if((await zD(J)).length===0)return;await new Promise((Z)=>setTimeout(Z,100))}}async function wI(J){let z=uI();if(!z)return null;let Y=J.webPort+2;if(J.takeover)await EI(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 PI(J,z){if(process.env.KOBE_DAEMON_WEB_PORT=String(J),z)process.env.KOBE_DAEMON_WEB_STATIC_DIR=z;await yZ();let Y;try{Y=(await(await fetch(`http://127.0.0.1:${J}${XD}`,{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!==ZD)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 hI(J){if(J.includes("--help")||J.includes("-h")){process.stdout.write(yI);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"),Z=!J.includes("--no-takeover"),X=G?void 0:xI();if(!G&&!X)throw Error("web assets are missing from this kobe build; run `bun run build` in packages/kobe, or `bun run dev` in packages/kobe-web from a source checkout");await PI(z,X);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: ${JD()}
|
|
230
|
+
`);else if(Q=await wI({webPort:z,takeover:Z}),process.stdout.write(`kobe web \u2192 http://localhost:${z}
|
|
231
|
+
`),process.stdout.write(` home: ${JD()}
|
|
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
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
|
|
235
|
+
`),process.exit(1)}}var ZD="kobe-web",XD="/__kobe_web",yI=`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
|
|
244
|
+
`;var qD=k(()=>{FJ()});var HD={};f1(HD,{runSkillSubcommand:()=>mI});function ij(){return["usage: kobe skill <verb>","","verbs:"," install [--agent NAME] Install the kobe agent skill (wraps `npx skills add`)"," status Show whether the skill is installed"," command [--agent NAME] Print the underlying npx command without running it","",`The skill teaches a coding agent how to drive \`kobe api\`. Default agent: ${_f}.`].join(`
|
|
245
|
+
`)}function fD(J){let z=_f;for(let Y=0;Y<J.length;Y++){let G=J[Y];if(G==="--agent"){let Z=J[Y+1];if(!Z||Z.startsWith("--"))process.stderr.write(`kobe skill: --agent requires a value
|
|
246
246
|
`),process.exit(2);z=Z,Y++}else if(G.startsWith("--agent="))z=G.slice(8);else process.stderr.write(`kobe skill: unknown flag "${G}"
|
|
247
247
|
|
|
248
|
-
${
|
|
249
|
-
`),process.exit(2)}return z}async function
|
|
250
|
-
`),!z)process.exitCode=2;return}if(!
|
|
248
|
+
${ij()}
|
|
249
|
+
`),process.exit(2)}return z}async function mI(J){let[z,...Y]=J;if(!z||z==="--help"||z==="-h"||z==="help"){if(process.stdout.write(`${ij()}
|
|
250
|
+
`),!z)process.exitCode=2;return}if(!vI.includes(z))process.stderr.write(`kobe skill: unknown verb "${z}"
|
|
251
251
|
|
|
252
|
-
${
|
|
253
|
-
`),process.exit(2);if(z==="status"){let f=
|
|
254
|
-
`));return}if(z==="command"){process.stdout.write(`${
|
|
255
|
-
`);return}let G=
|
|
252
|
+
${ij()}
|
|
253
|
+
`),process.exit(2);if(z==="status"){let f=pX(),[H,B]=cj(),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:fD(Y)})}
|
|
255
|
+
`);return}let G=fD(Y),Z=mj({agent:G});process.stdout.write(`kobe skill: running \`npx ${Z.join(" ")}\`
|
|
256
256
|
`);let Q=await Bun.spawn(["npx",...Z],{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 vI=500,cI="worktree-created",HD="externalWorktreeSync";var ij=k(()=>{FJ();S8();Zq();F1();i1()});function FD(J){var z;if(J>=55296&&J<=57343||J>1114111)return 65533;return(z=rI.get(J))!==null&&z!==void 0?z:J}var lj,rI,MD;var OD=k(()=>{rI=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]]),MD=(lj=String.fromCodePoint)!==null&&lj!==void 0?lj:(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 AD(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 Z=0,X=0;Z<Y;Z+=2){let Q=z.charCodeAt(Z),f=z.charCodeAt(Z+1);G[X++]=Q|f<<8}return G}var RD;var gD=k(()=>{RD=AD("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 VJ;var CD=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"})(VJ||(VJ={}))});function $j(J){return J>=h1.ZERO&&J<=h1.NINE}function oI(J){return J>=h1.UPPER_A&&J<=h1.UPPER_F||J>=h1.LOWER_A&&J<=h1.LOWER_F}function sI(J){return J>=h1.UPPER_A&&J<=h1.UPPER_Z||J>=h1.LOWER_A&&J<=h1.LOWER_Z||$j(J)}function tI(J){return J===h1.EQUALS||sI(J)}class aj{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)|ND)===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($j(Y)||oI(Y)){let G=Y<=h1.NINE?Y-h1.ZERO:(Y|ND)-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($j(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(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],Z=(G&VJ.VALUE_LENGTH)>>14;while(z<J.length){if(Z===0&&(G&VJ.FLAG13)!==0){let Q=(G&VJ.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let f=G&VJ.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],Z=(G&VJ.VALUE_LENGTH)>>14}if(z>=J.length)break;let X=J.charCodeAt(z);if(X===h1.SEMI&&Z!==0&&(G&VJ.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,Z,this.consumed+this.excess);if(this.treeIndex=JT(Y,G,this.treeIndex+Math.max(1,Z),X),this.treeIndex<0)return this.result===0||this.decodeMode===BY.Attribute&&(Z===0||tI(X))?0:this.emitNotTerminatedNamedEntity();if(G=Y[this.treeIndex],Z=(G&VJ.VALUE_LENGTH)>>14,Z!==0){if(X===h1.SEMI)return this.emitNamedEntityData(this.treeIndex,Z,this.consumed+this.excess);if(this.decodeMode!==BY.Strict&&(G&VJ.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]&VJ.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]&~(VJ.VALUE_LENGTH|VJ.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!==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 eI(J){let z="",Y=new aj(J,(G)=>z+=MD(G));return function(Z,X){let Q=0,f=0;while((f=Z.indexOf("&",f))>=0){z+=Z.slice(Q,f),Y.startEntity(X);let B=Y.write(Z,f+1);if(B<0){Q=f+Y.end();break}Q=f+B,f=B===0?Q+1:Q}let H=z+Z.slice(Q);return z="",H}}function JT(J,z,Y,G){let Z=(z&VJ.BRANCH_LENGTH)>>7,X=z&VJ.JUMP_TABLE;if(Z===0)return X!==0&&G===X?Y:-1;if(X){let B=G-X;return B<0||B>=Z?-1:J[Y+B]-1}let Q=Z+1>>1,f=0,H=Z-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 TG(J,z=BY.Legacy){return zT(J,z)}var h1,ND=32,YJ,BY,zT;var kD=k(()=>{OD();gD();CD();(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={}));zT=eI(RD)});var bD,SD;var TD=k(()=>{kD();(function(J){J[J.XML=0]="XML",J[J.HTML=1]="HTML"})(bD||(bD={}));(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"})(SD||(SD={}))});import{CliRenderer as GT,createCliRenderer as ZT,engine as XT}from"@opentui/core";import{createTestRenderer as q$}from"@opentui/core/testing";import{ASCIIFontRenderable as QT,BoxRenderable as qT,CodeRenderable as fT,DiffRenderable as HT,InputRenderable as BT,LineNumberRenderable as jT,MarkdownRenderable as WT,ScrollBoxRenderable as VT,SelectRenderable as KT,TabSelectRenderable as UT,TextareaRenderable as DT,TextAttributes as _j,TextNodeRenderable as LT,TextRenderable as MT}from"@opentui/core";import{engine as B$,Timeline as j$}from"@opentui/core";import{BaseRenderable as PD,createTextAttributes as OT,InputRenderable as pj,InputRenderableEvents as pX,isTextNodeRenderable as sj,parseColor as yD,Renderable as AT,RootTextNodeRenderable as RT,ScrollBoxRenderable as gT,SelectRenderable as xD,SelectRenderableEvents as rj,TabSelectRenderable as uD,TabSelectRenderableEvents as oj,TextNodeRenderable as CT,TextRenderable as hD}from"@opentui/core";import{BaseRenderable as uT,isTextNodeRenderable as ET,TextNodeRenderable as wT,TextRenderable as PT,Yoga as wD}from"@opentui/core";import{BoxRenderable as A$,RootRenderable as R$}from"@opentui/core";import{TimeToFirstDrawRenderable as cT}from"@opentui/core";import{createSlotRegistry as N$}from"@opentui/core";function kT({createElement:J,createTextNode:z,createSlotNode:Y,isTextNode:G,replaceText:Z,insertNode:X,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);Iz((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 i=typeof N,e=I!==void 0;if(i==="string"||i==="number"){if(i==="number")N=N.toString();if(e){let J0=M[0];if(J0&&G(J0))Z(J0,N);else J0=z(N);M=O(S,M,I,J0)}else if(M!==""&&typeof M==="string")Z(B(S),M=N);else O(S,M,I,z(N)),M=N}else if(N==null||i==="boolean")M=O(S,M,I);else if(i==="function")return Iz(()=>{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 Iz(()=>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))X(S,N);else x(S,N,B(S));M=N}return M}function L(S,N,M){let I=!1;for(let r=0,i=N.length;r<i;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,i=I,e=0,J0=0,T=V(N[r-1]),q0=null;while(e<r||J0<i){if(N[e]===M[J0]){e++,J0++;continue}while(N[r-1]===M[i-1])r--,i--;if(r===e){let p=i<I?J0?V(M[J0-1]):M[i-J0]:T;while(J0<i)X(S,M[J0++],p)}else if(i===J0)while(e<r){if(!q0||!q0.has(N[e]))Q(S,N[e]);e++}else if(N[e]===M[i-1]&&M[J0]===N[r-1]){let p=V(N[--r]);X(S,M[J0++],V(N[e++])),X(S,M[--i],p),N[r]=M[i]}else{if(!q0){q0=new Map;let B0=J0;while(B0<i)q0.set(M[B0],B0++)}let p=q0.get(N[e]);if(p!=null)if(J0<p&&p<i){let B0=e,L0=1,V0;while(++B0<r&&B0<i){if((V0=q0.get(N[B0]))==null||V0!==p+L0)break;L0++}if(L0>p-J0){let t=N[e];while(J0<p)X(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 i;while(i=B(S))Q(S,i);return I&&X(S,I),I??""}let r=I||Y();if(N.length){let i=!1;for(let e=N.length-1;e>=0;e--){let J0=N[e];if(r!==J0){let T=H(J0)===S;if(!i&&!e)T?x(S,r,J0):X(S,r,M);else T&&Q(S,J0)}else i=!0}}else X(S,r,M);return[r]}function g(S,N,M){for(let I=0,r=N.length;I<r;I++)X(S,N[I],M)}function x(S,N,M){X(S,N,M),Q(S,M)}function _(S,N,M={},I){if(N||(N={}),!I)Iz(()=>M.children=K(S,N.children,M.children));return Iz(()=>N.ref&&N.ref(S)),Iz(()=>{for(let r in N){if(r==="children"||r==="ref")continue;let i=N[r];if(i===M[r])continue;f(S,r,i,M[r]),M[r]=i}}),M}return{render(S,N){let M;return fG((I)=>{M=I,j(N,S())}),M},insert:j,spread(S,N,M){if(typeof N==="function")Iz((I)=>_(S,N(),I,M));else _(S,N,void 0,M)},createElement:J,createTextNode:z,insertNode:X,setProp(S,N,M,I){return f(S,N,M,I),M},mergeProps:Lq,effect:Iz,memo:NT,createComponent:kV,use(S,N,M){return _1(()=>S(N,M))}}}function bT(J){let z=kT(J);return z.mergeProps=Lq,z}function Y9(J){if(!tf.has(J))tf.set(J,0);let z=tf.get(J)+1;return tf.set(J,z),`${J}-${z}`}function ST(J,z,Y){if(GJ("Inserting node:",s1(z),"into parent:",s1(J),"with anchor:",s1(Y),z instanceof vZ),z instanceof rX)z.parent=J,z=z.getSlotChild(J);if(Y&&Y instanceof rX)Y=Y.getSlotChild(J);if(sj(z)){if(!(J instanceof hD)&&!sj(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 PD))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=tj(J),Z=G.findIndex((X)=>X.id===Y.id);if(Z===-1)GJ("[INSERT]","Could not find anchor",s1(J),s1(Y),"[children]",...G.map((X)=>X.id));J.add(z,Z)}function IT(J,z){if(GJ("Removing node:",s1(z),"from parent:",s1(J)),z instanceof rX)z.parent=null,z=z.getSlotChild(J);J.remove(z.id),process.nextTick(()=>{if(z instanceof PD&&!z.parent){z.destroyRecursively();return}})}function TT(J){GJ("Creating text node:",J);let z=Y9("text-node");if(typeof J==="number")J=J.toString();return vZ.fromString(TG(J),{id:z})}function yT(){let J=Y9("slot-node");return GJ("Creating slot node",J),new rX(J)}function ED(J){GJ("Getting parent of node:",s1(J));let z=J.parent??void 0;if(z instanceof RT)z=z.textParent??void 0;let Y=z?.parent?.parent?.parent;if(Y instanceof gT&&Y.content===z)z=Y;return z}function vT(J){Object.assign(lD,J)}function mT(){return lD}var z9,fJ=()=>{let J=wJ(z9);if(!J)throw Error("No renderer found");return J},FT=(J)=>{let z=fJ();e1(()=>{z.on("resize",J)}),k1(()=>{z.off("resize",J)})},mz=()=>{let J=fJ(),[z,Y]=a({width:J.width,height:J.height});return FT((Z,X)=>{Y({width:Z,height:X})}),z},NT=(J)=>K0(()=>J()),tf,GJ=(...J)=>{if(process.env.DEBUG)console.log("[Reconciler]",...J)},vZ,s1=(J)=>{if(!J)return;return J.id},tj=(J)=>{let z;if(J instanceof hD)z=J.getTextChildren();else z=J.getChildren();return z},xT,y,x0,b,W,E0,D,U,M$,q,vD,cz,G9,mD,cD,rX,oX,ef,ej,J9,dD,nD,iD,hT,lD,dT=(J,z)=>{let Y,G=!1,Z=!1,X=!0,Q=!1,f=J.destroy.bind(J),H=()=>{if(Z)return;if(!Y){G=!0;return}Z=!0,Y()};J.once("destroy",H),J.destroy=()=>{if(X){Q=!0;return}f()};try{Y=xT(()=>b(z9.Provider,{get value(){return J},get children(){return b(z,{})}}),J.root)}finally{X=!1,J.destroy=f}if(G)H();if(Q)f()},$D=async(J,z={})=>{let Y=z instanceof GT?z:await ZT({...z,onDestroy:()=>{z.onDestroy?.()}});XT.attach(Y),dT(Y,J)};var P=k(()=>{j1();TD();j1();j1();j1();z9=Tz();tf=new Map;vZ=class vZ extends CT{static fromString(J,z={}){let Y=new vZ(z);return Y.add(J),Y}};({render:xT,effect:y,memo:x0,createComponent:b,createElement:W,createTextNode:E0,insertNode:D,insert:U,spread:M$,setProp:q,mergeProps:vD,use:cz}=bT({createElement(J){GJ("Creating element:",J);let z=Y9(J),Y=wJ(z9);if(!Y)throw Error("No renderer found");let G=mT();if(!G[J])throw Error(`[Reconciler] Unknown component type: ${J}`);let Z=new G[J](Y,{id:z});return GJ("Element created with id:",z),Z},createTextNode:TT,createSlotNode:yT,replaceText(J,z){if(GJ("Replacing text:",z,"in node:",s1(J)),!(J instanceof vZ))return;J.replace(TG(z),0)},setProperty(J,z,Y,G){if(z.startsWith("on:")){let Z=z.slice(3);if(Y)J.on(Z,Y);if(G)J.off(Z,G);return}if(sj(J)){if(z==="href"){J.link={url:Y};return}if(z==="style"){J.attributes|=OT(Y),J.fg=Y.fg?yD(Y.fg):J.fg,J.bg=Y.bg?yD(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 AT))return;if(Y)J.focus();else J.blur();break;case"onChange":let Z=void 0;if(J instanceof xD)Z=rj.SELECTION_CHANGED;else if(J instanceof uD)Z=oj.SELECTION_CHANGED;else if(J instanceof pj)Z=pX.CHANGE;if(!Z)break;if(Y)J.on(Z,Y);if(G)J.off(Z,G);break;case"onInput":if(J instanceof pj){if(Y)J.on(pX.INPUT,Y);if(G)J.off(pX.INPUT,G)}break;case"onSubmit":if(J instanceof pj){if(Y)J.on(pX.ENTER,Y);if(G)J.off(pX.ENTER,G)}else J[z]=Y;break;case"onSelect":if(J instanceof xD){if(Y)J.on(rj.ITEM_SELECTED,Y);if(G)J.off(rj.ITEM_SELECTED,G)}else if(J instanceof uD){if(Y)J.on(oj.ITEM_SELECTED,Y);if(G)J.off(oj.ITEM_SELECTED,G)}break;case"style":for(let X in Y){let Q=Y[X];if(G!==void 0&&Q===G[X])continue;J[X]=Q}break;case"text":case"content":{let X=typeof Y==="string"?Y:Array.isArray(Y)?Y.join(""):`${Y}`;J[z]=TG(X);break}default:J[z]=Y}},isTextNode(J){return J instanceof vZ},insertNode:ST,removeNode:IT,getParentNode:ED,getFirstChild(J){GJ("Getting first child of node:",s1(J));let z=tj(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=ED(J);if(!z){GJ("No parent found for node:",s1(J));return}let Y=tj(z),G=Y.indexOf(J);if(G===-1||G===Y.length-1){GJ("No next sibling found for node:",s1(J));return}let Z=Y[G+1];if(!Z){GJ("Next sibling is null for node:",s1(J));return}return GJ("Next sibling found:",s1(Z),"for node:",s1(J)),Z}}));G9=class G9 extends uT{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}};mD=class mD extends wT{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()}};cD=class cD extends G9{yogaNode;slotParent;destroyed=!1;constructor(J,z){super(J);this._visible=!1,this.slotParent=z,this.yogaNode=wD.default.Node.create(),this.yogaNode.setDisplay(wD.Display.None)}getLayoutNode(){return this.yogaNode}updateFromLayout(){}updateLayout(){}onRemove(){}destroy(){if(this.destroyed)return;this.destroyed=!0,super.destroy(),this.slotParent?.destroy()}};rX=class rX extends G9{layoutNode;textNode;destroyed=!1;constructor(J){super(J);this._visible=!1}getSlotChild(J){if(ET(J)||J instanceof PT){if(!this.textNode)this.textNode=new mD(`slot-text-${this.id}`,this);return this.textNode}if(!this.layoutNode)this.layoutNode=new cD(`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()}};oX=class oX extends LT{_ctx;constructor(J,z){super(z);this._ctx=J}};ef=class ef extends oX{constructor(J,z){super(null,J);if(z==="b"||z==="strong")this.attributes=(this.attributes||0)|_j.BOLD;else if(z==="i"||z==="em")this.attributes=(this.attributes||0)|_j.ITALIC;else if(z==="u")this.attributes=(this.attributes||0)|_j.UNDERLINE}};ej=class ej extends ef{constructor(J){super(J,"b")}};J9=class J9 extends ef{constructor(J){super(J,"i")}};dD=class dD extends ef{constructor(J){super(J,"u")}};nD=class nD extends oX{constructor(J,z){super(null,z);this.add()}add(){return super.add(`
|
|
262
|
-
`)}};iD=class iD extends oX{constructor(J,z){let Y={...z,link:{url:z.href}};super(null,Y)}};hT={box:qT,text:MT,input:BT,select:KT,textarea:DT,ascii_font:QT,tab_select:UT,scrollbox:VT,code:fT,diff:HT,line_number:jT,markdown:WT,span:oX,strong:ej,b:ej,em:J9,i:J9,u:dD,br:nD,a:iD},lD={...hT};vT({time_to_first_draw:cT})});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 nT(J){let z=J?.changes;if(!z||typeof z!=="object"||Array.isArray(z))return null;let Y=new Map;for(let[G,Z]of Object.entries(z)){let X=Z;if(typeof X?.added!=="number"||typeof X.deleted!=="number")return null;Y.set(G,{added:X.added,deleted:X.deleted})}return Y}function iT(J){let z=J;if(typeof z?.theme!=="string")return null;return{theme:z.theme,transparentBackground:z.transparentBackground===!0,focusAccent:typeof z.focusAccent==="string"?z.focusAccent:null,locale:typeof z.locale==="string"?z.locale:"",sortMode:z.sortMode==="recent"?"recent":"default",keysCollapsed:z.keysCollapsed===!0,projectFilter:typeof z.projectFilter==="string"&&z.projectFilter.length>0?z.projectFilter:null}}function lT(J,z){if(J.size!==z.size)return!1;for(let[Y,G]of J){let Z=z.get(Y);if(!Z||!vz(G,Z))return!1}return!0}function $T(J){let z=J?.activity;if(!z||typeof z!=="object"||Array.isArray(z))return null;let Y=new Map;for(let[G,Z]of Object.entries(z)){let X=Z;if(typeof X?.mtimeMs!=="number"||typeof X.completionAt!=="number")return null;if(X.completionId!==null&&typeof X.completionId!=="string")return null;Y.set(G,{mtimeMs:X.mtimeMs,completionId:X.completionId,completionAt:X.completionAt})}return Y}function aT(J,z){if(J.size!==z.size)return!1;for(let[Y,G]of J){let Z=z.get(Y);if(!Z||Z.mtimeMs!==G.mtimeMs||Z.completionId!==G.completionId||Z.completionAt!==G.completionAt)return!1}return!0}class KJ{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([]),[Z,X]=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=(i)=>G(()=>i),this.activeTaskAcc=Z,this.setActiveTaskSig=(i)=>X(()=>i),this.updateAcc=Q,this.setUpdateSig=(i)=>f(()=>i),this.daemonVersionAcc=H,this.setDaemonVersionSig=(i)=>B(()=>i),this.engineStateAcc=V,this.setEngineStateSig=(i)=>j(()=>i),this.taskJobsAcc=K,this.setTaskJobsSig=(i)=>L(()=>i),this.worktreeChangesAcc=A,this.setWorktreeChangesSig=(i)=>O(()=>i),this.transcriptActivityAcc=g,this.setTranscriptActivitySig=(i)=>x(()=>i),this.uiPrefsAcc=_,this.setUiPrefsSig=(i)=>S(()=>i),this.keybindingsRevAcc=N,this.setKeybindingsRevSig=(i)=>M(()=>i),this.connectionStateAcc=I,this.setConnectionState=(i)=>r(()=>i),this.ensureReachable=z.ensureReachable??yZ,this.role=z.role??"pane",this.channels=z.channels,this.subscribesTasks=!z.channels||z.channels.includes("task.snapshot"),this.client.on("*",(i)=>this.handleEvent(i.name,i.payload)),this.client.onLifecycle("close",()=>{if(this.setConnectionState("disconnected"),this.role==="pane")tz("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(),tz("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:$J,minProtocolVersion:FY}),z=typeof J.protocolVersion==="number"?J.protocolVersion:$J,Y=typeof J.minProtocolVersion==="number"?J.minProtocolVersion:z;if(!TQ({localVersion:$J,localMin:FY,remoteVersion:z,remoteMin:Y}))throw Error(`kobe daemon is protocol v${z} (min v${Y}); this client is v${$J} (min v${FY}). 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(sX));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"),tz("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()=>lW(this.daemonVersionAcc()??void 0,p0)}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 fG((Y)=>{return r0(()=>{let G=this.tasksAcc();if(z){z=!1;return}try{J(G)}catch(Z){console.error("[kobe RemoteOrchestrator] task listener threw:",Z)}}),Y})}async createTask(J){let{modelEffort:z,...Y}=J,G=await this.client.request("task.create",{...Y,effort:z});return sX(G.task)}async ensureMainTask(J){let z=await this.client.request("task.ensureMain",{repo:J});return sX(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 sX(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(sX)),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 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=${jY(Y?.taskId)}, kind=${jY(Y?.kind)})`);return}let G=this.taskJobsAcc();if(Y.phase==="running"){let Z=new Map(G);Z.set(Y.taskId,{kind:Y.kind}),this.setTaskJobsSig(Z);return}if((Y.phase==="done"||Y.phase==="error")&&G.has(Y.taskId)){let Z=new Map(G);Z.delete(Y.taskId),this.setTaskJobsSig(Z)}return}if(J==="worktree.changes"){let Y=nT(z);if(!Y){o1("orch",`dropped worktree.changes event: malformed changes payload (${jY(z)})`);return}let G=this.worktreeChangesAcc();if(G&&lT(G,Y))return;this.setWorktreeChangesSig(Y);return}if(J==="transcript.activity"){let Y=$T(z);if(!Y){o1("orch",`dropped transcript.activity event: malformed activity payload (${jY(z)})`);return}let G=this.transcriptActivityAcc();if(G&&aT(G,Y))return;this.setTranscriptActivitySig(Y);return}if(J==="ui-prefs"){let Y=iT(z);if(!Y){let G=z?.theme;o1("orch",`dropped ui-prefs event: theme must be a string (got ${jY(G)})`);return}this.setUiPrefsSig(Y);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((Z)=>Z.id)),G=null;for(let Z of z.keys()){if(Y.has(Z))continue;if(!G)G=new Map(z);G.delete(Z)}if(G)this.setEngineStateSig(G)}pruneTaskJobs(J){let z=this.taskJobsAcc();if(z.size===0)return;let Y=new Set(J.map((Z)=>Z.id)),G=null;for(let Z of z.keys()){if(Y.has(Z))continue;if(!G)G=new Map(z);G.delete(Z)}if(G)this.setTaskJobsSig(G)}}function sX(J){return{id:BX(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 nY=k(()=>{zG();FJ();eY();j1();SZ();rJ();MJ()});function pD(J){let z=J[jz];if(!z){if(Object.defineProperty(J,jz,{value:z=new Proxy(J,rT)}),!Array.isArray(J)){let Y=Object.keys(J),G=Object.getOwnPropertyDescriptors(J),Z=Object.getPrototypeOf(J),X=Z!==null&&J!==null&&typeof J==="object"&&!Array.isArray(J)&&Z!==Object.prototype;if(X){let Q=Object.getOwnPropertyDescriptors(Z);Y.push(...Object.keys(Q)),Object.assign(G,Q)}for(let Q=0,f=Y.length;Q<f;Q++){let H=Y[Q];if(X&&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 JH(J){let z;return J!=null&&typeof J==="object"&&(J[jz]||!(z=Object.getPrototypeOf(J))||z===Object.prototype||Array.isArray(J))}function eX(J,z=new Set){let Y,G,Z,X;if(Y=J!=null&&J[Z9])return Y;if(!JH(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(Z=J[Q],(G=eX(Z,z))!==Z)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(X=Q[H],f[X].get)continue;if(Z=J[X],(G=eX(Z,z))!==Z)J[X]=G}}return J}function zH(J,z){let Y=J[z];if(!Y)Object.defineProperty(J,z,{value:Y=Object.create(null)});return Y}function JQ(J,z,Y){if(J[z])return J[z];let[G,Z]=a(Y,{equals:!1,internal:!0});return G.$=Z,J[z]=G}function _T(J,z){let Y=Reflect.getOwnPropertyDescriptor(J,z);if(!Y||Y.get||!Y.configurable||z===jz||z===mZ)return Y;return delete Y.value,delete Y.writable,Y.get=()=>J[jz][z],Y}function rD(J){Dq()&&JQ(zH(J,mZ),_D)()}function pT(J){return rD(J),Reflect.ownKeys(J)}function YH(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 Z=J[z],X=J.length;if(aD.onStoreNodeUpdate&&aD.onStoreNodeUpdate(J,z,Y,Z),Y===void 0){if(delete J[z],J[WY]&&J[WY][z]&&Z!==void 0)J[WY][z].$()}else if(J[z]=Y,J[WY]&&J[WY][z]&&Z===void 0)J[WY][z].$();let Q=zH(J,mZ),f;if(f=JQ(Q,z,Z))f.$(()=>Y);if(Array.isArray(J)&&J.length!==X){for(let H=J.length;H<X;H++)(f=Q[H])&&f.$();(f=JQ(Q,"length",X))&&f.$(J.length)}(f=Q[_D])&&f.$()}function oD(J,z){let Y=Object.keys(z);for(let G=0;G<Y.length;G+=1){let Z=Y[G];if(sD(Z))continue;YH(J,Z,z[Z])}}function sD(J){return J==="__proto__"||J==="constructor"||J==="prototype"}function oT(J,z){if(typeof z==="function")z=z(J);if(z=eX(z),Array.isArray(z)){if(J===z)return;let Y=0,G=z.length;for(;Y<G;Y++){let Z=z[Y];if(J[Y]!==Z)YH(J,Y,Z)}YH(J,"length",G)}else oD(J,z)}function tX(J,z,Y=[]){let G,Z=J;if(z.length>1){G=z.shift();let Q=typeof G,f=Array.isArray(J);if(Q==="string"&&(G==="__proto__"||z.length>1&&sD(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++)tX(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))tX(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)tX(J,[j].concat(z),Y);return}else if(z.length>1){tX(J[G],z,[G].concat(Y));return}Z=J[G],Y=[G].concat(Y)}let X=z[0];if(typeof X==="function"){if(X=X(Z,Y),X===Z)return}if(G===void 0&&X==null)return;if(X=eX(X),G===void 0||JH(Z)&&JH(X)&&!Array.isArray(X))oD(Z,X);else YH(J,G,X)}function dz(...[J,z]){let Y=eX(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 Z=pD(Y);SV.registerGraph({value:Y,name:z&&z.name});function X(...Q){Uq(()=>{G&&Q.length===1?oT(Y,Q[0]):tX(Y,Q)})}return[Z,X]}var Z9,mZ,WY,_D,aD,rT,P$;var cZ=k(()=>{j1();Z9=Symbol("store-raw"),mZ=Symbol("store-node"),WY=Symbol("store-has"),_D=Symbol("store-self"),aD={onStoreNodeUpdate:null};rT={get(J,z,Y){if(z===Z9)return J;if(z===jz)return Y;if(z===Wq)return rD(J),Y;let G=zH(J,mZ),Z=G[z],X=Z?Z():J[z];if(z===mZ||z===WY||z==="__proto__")return X;if(!Z){let Q=Object.getOwnPropertyDescriptor(J,z);if(Dq()&&(typeof X!=="function"||J.hasOwnProperty(z))&&!(Q&&Q.get))X=JQ(G,z,X)()}return JH(X)?pD(X):X},has(J,z){if(z===Z9||z===jz||z===Wq||z===mZ||z===WY||z==="__proto__")return!0;return Dq()&&JQ(zH(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:pT,getOwnPropertyDescriptor:_T};P$=Symbol("store-root")});function GH(J){let z=Tz();return{provider:(Y)=>{let G=J.init(Y);return b(Z0,{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=wJ(z);if(!Y)throw Error(`${J.name} context must be used within a context provider`);return Y}}}var X9=k(()=>{P();P();j1()});import{RGBA as yG}from"@opentui/core";function tT(){return Object.keys(HJ.themes)}function zQ(J){return Boolean(HJ.themes[J])}function q9(J,z){if(!J)return!1;if(!z||typeof z!=="object"||!z.theme)return!1;return xG("themes",{...HJ.themes,[J]:z}),!0}function Q9(J,z="dark"){let Y=J.defs??{};function G(H,B=[]){if(typeof H==="string"){if(H==="transparent"||H==="none")return yG.fromInts(0,0,0,0);if(H.startsWith("#"))return yG.fromHex(H);if(B.includes(H))return yG.fromInts(0,0,0);let V=Y[H]??J.theme[H];if(V===void 0)return yG.fromInts(0,0,0);return G(V,[...B,H])}return G(H[z],B)}let Z={};for(let[H,B]of Object.entries(J.theme))Z[H]=G(B);let X=Z.text??yG.fromHex("#ffffff"),Q=Z.background??yG.fromHex("#000000");return{...{primary:Z.primary??X,secondary:Z.secondary??X,accent:Z.accent??Z.primary??X,error:Z.error??X,warning:Z.warning??X,success:Z.success??X,info:Z.info??X,text:X,textMuted:Z.textMuted??X,background:Q,backgroundPanel:Z.backgroundPanel??Q,backgroundElement:Z.backgroundElement??Q,backgroundMenu:Z.backgroundMenu??Z.backgroundElement??Q,backgroundDialog:Z.backgroundDialog??Z.backgroundPanel??Q,border:Z.border??X,borderActive:Z.borderActive??Z.border??X,borderSubtle:Z.borderSubtle??Z.border??X,diffAdded:Z.diffAdded??Z.success??X,diffRemoved:Z.diffRemoved??Z.error??X,diffContext:Z.diffContext??Z.textMuted??X,diffHunkHeader:Z.diffHunkHeader??Z.textMuted??X,diffAddedBg:Z.diffAddedBg??Q,diffRemovedBg:Z.diffRemovedBg??Q,selectedListItemText:Z.selectedListItemText??Q},...Z}}var sT,uG,HJ,xG,d0,tD;var v1=k(()=>{P();j1();cZ();X9();xq();uq();Eq();wq();Pq();hq();vq();sT={claude:HZ,conductor:BZ,nord:WZ,opencode:VZ,dracula:jZ,tokyonight:UZ,"osaka-jade":KZ},uG=["primary","success","info"],[HJ,xG]=dz({themes:{...sT},active:"claude",mode:"dark",transparentBackground:!1,focusAccent:"primary"});({use:d0,provider:tD}=GH({name:"Theme",init:(J)=>{if(J.mode)xG("mode",J.mode);if(J.theme&&zQ(J.theme))xG("active",J.theme);let z=fJ(),Y=K0(()=>{let Z=HJ.themes[HJ.active];if(Z)return Q9(Z,HJ.mode);let X=HJ.themes.claude??HJ.themes.opencode??Object.values(HJ.themes)[0];if(!X)return Q9({theme:{background:"#000000",text:"#ffffff"}},HJ.mode);return Q9(X,HJ.mode)}),G=K0(()=>{let Z=Y(),X=Z[HJ.focusAccent]??Z.primary,Q={...Z,focusAccent:X};if(!HJ.transparentBackground)return Q;let f=yG.fromInts(0,0,0,0);return{...Q,background:f,backgroundPanel:f}});return r0(()=>{z?.setBackgroundColor(G().background)}),{theme:new Proxy({},{get(Z,X){let Q=G();return Q[X]??Q.text}}),get selected(){return HJ.active},get transparentBackground(){return HJ.transparentBackground},get focusAccent(){return HJ.focusAccent},mode(){return HJ.mode},set(Z){if(!zQ(Z))return!1;return xG("active",Z),!0},setMode(Z){xG("mode",Z)},setTransparentBackground(Z){xG("transparentBackground",Z)},setFocusAccent(Z){xG("focusAccent",Z)},all(){return tT()},has(Z){return zQ(Z)}}}}))});var eD,JL;var zL=k(()=>{eD={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"}},JL={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 YL,GL;var ZL=k(()=>{YL={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"}},GL={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 XL,QL;var qL=k(()=>{XL={title:"kobe \u2014 keybindings",esc:"esc"},QL={title:"kobe \u2014 \u5FEB\u6377\u952E",esc:"esc"}});var fL,HL;var BL=k(()=>{fL={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)"}},HL={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,WL;var VL=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"}},WL={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 KL,UL;var DL=k(()=>{KL={badge:{newActivity:"\u25CF new"},preview:{diffVsHead:"diff vs HEAD",file:"file",closeHint:"\xB7 q to close",loading:"loading\u2026"}},UL={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 LL,ML;var FL=k(()=>{LL={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"},ML={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 OL,AL;var RL=k(()=>{OL={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)"}},AL={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 gL,CL;var NL=k(()=>{gL={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}"}},CL={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 kL,bL;var SL=k(()=>{kL={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`"}},bL={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 YQ(J){return typeof J==="string"&&EG.some((z)=>z.id===J)}var eT,Jy,EG,dZ,nZ="en";var iZ=k(()=>{zL();ZL();qL();BL();VL();DL();FL();RL();NL();SL();eT={settings:OL,tasks:gL,files:YL,newTask:jL,ops:KL,update:kL,quickTask:LL,help:XL,common:eD,keys:fL},Jy={settings:AL,tasks:CL,files:GL,newTask:WL,ops:UL,update:bL,quickTask:ML,help:QL,common:JL,keys:HL},EG=[{id:"en",label:"English"},{id:"zh",label:"\u4E2D\u6587"}],dZ={en:eT,zh:Jy}});function GQ(J){if(dZ[J])zy("lang",J)}function H9(){return f9.lang}function IL(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 Yy(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=f9.lang,G=IL(dZ[Y],J)??IL(dZ.en,J)??J;return Yy(G,z)}function B9(J,z){let Y=f9.lang,G=(Z)=>{return Z.keys[J]?.[z]};return G(dZ[Y])??G(dZ.en)??z}var f9,zy;var ZJ=k(()=>{cZ();iZ();iZ();[f9,zy]=dz({lang:nZ})});function Gy(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 Z=`${G.join("+")}+`;return z.map((X)=>Z+X)}function W9(J,z){if(z.defaultPrevented)return!1;if(j9)return!1;let Y=J.slice(),G=Gy(z);j9=!0;try{for(let Z=Y.length-1;Z>=0;Z--){let X=Y[Z];if(!X)continue;let Q=X.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{j9=!1}}var j9=!1;function Xy(){if(V9)return;let J=fJ();if(!J)throw Error("useBindings: no renderer in scope; call inside a component rendered by @opentui/solid.");V9=J.keyInput,TL=(z)=>{W9(ZH,z)},V9.on("keypress",TL)}function D1(J){Xy();let z=Zy++,Y={config:J,id:z};r0(()=>{J()}),ZH.push(Y),k1(()=>{let G=ZH.findIndex((Z)=>Z.id===z);if(G>=0)ZH.splice(G,1)})}var Zy=1,ZH,V9=null,TL=null;var yJ=k(()=>{P();j1();ZH=[]});function XH(){let J=new Set;function z(G,Z){let X=setTimeout(()=>{J.delete(X),G()},Z);return J.add(X),X}function Y(G){if(J.delete(G))clearTimeout(G)}return k1(()=>{for(let G of J)clearTimeout(G);J.clear()}),{set:z,clear:Y}}var K9=k(()=>{j1()});import{RGBA as yL}from"@opentui/core";function fy(J){let z=mz(),Y=d0(),{theme:G}=Y,Z=fJ(),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=!!Z?.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),y((j)=>{var K=z().width,L=z().height,A=Y.transparentBackground?qy:Qy,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 Hy(){let[J,z]=dz({stack:[],size:"medium"}),Y=fJ(),G=null,Z=XH();function X(){Z.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)),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?.();Uq(()=>{z("size","medium"),z("stack",[])}),X()},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)X()},get stack(){return J.stack},get size(){return J.size},setSize(Q){z("size",Q)}}}function uL(J){let z=Hy();return b(xL.Provider,{value:z,get children(){return[x0(()=>J.children),(()=>{var Y=W("box");return q(Y,"position","absolute"),q(Y,"zIndex",3000),U(Y,b(Z0,{get when(){return z.stack.length},get children(){return b(fy,{onClose:()=>z.clear(),get size(){return z.size},get children(){return z.stack.at(-1).element()}})}})),Y})()]}})}function c1(){let J=wJ(xL);if(!J)throw Error("useDialog must be used within a DialogProvider");return J}var Qy,qy,xL;var nJ=k(()=>{P();P();P();P();P();P();P();P();j1();cZ();v1();yJ();K9();Qy=yL.fromInts(0,0,0,128),qy=yL.fromInts(0,0,0,64);xL=Tz()});import{spawnSync as U9}from"child_process";import*as wL from"fs";function EL(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 PL(J){let z=J.trim();if(!z)return"repo path is required";let Y;try{Y=wL.statSync(z)}catch{return`path does not exist: ${z}`}if(!Y.isDirectory())return`not a directory: ${z}`;try{if(U9("git",["rev-parse","--git-dir"],{cwd:z,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]}).status!==0)return EL(z)}catch{return EL(z)}return null}function ZQ(J){if(!J)return null;try{let z=U9("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 hL(J){if(!J)return[];try{let z=U9("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 Z=(f)=>f==="main"?0:f==="master"?1:f==="develop"?2:3,X=Z(Y),Q=Z(G);if(X!==Q)return X-Q;return Y.localeCompare(G)})}catch{return[]}}var Cz="main";var QH=()=>{};import*as vL from"fs";import*as qH from"os";function UJ(J){if(J==="~")return qH.homedir();if(J.startsWith("~/"))return qH.homedir()+J.slice(1);return J}function D9(J){if(!J)return{base:"",filter:""};let Y=UJ(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 L9(J){if(!J)return[];try{let z=vL.readdirSync(J,{withFileTypes:!0}),Y=[];for(let G of z)if(G.isDirectory())Y.push(G.name);return Y.sort((G,Z)=>G.localeCompare(Z))}catch{return[]}}function M9(J,z){let Y=z.toLowerCase(),Z=Y.startsWith(".")?J:J.filter((X)=>!X.startsWith("."));if(!Y)return Z;return Z.filter((X)=>X.toLowerCase().startsWith(Y))}function XQ(J,z,Y){let G=z+Y;if(J.startsWith("~")){let Z=qH.homedir();if(G===Z)return"~";if(G.startsWith(`${Z}/`))return`~${G.slice(Z.length)}`}return G}var fH=()=>{};import{spawn as By}from"child_process";import*as wG from"fs";import*as QQ from"path";function mL(J){let z=J.trim().replace(/\/+$/,"");if(!z)return"";let Y=z.lastIndexOf("/"),G=z.lastIndexOf(":"),Z=Math.max(Y,G);return(Z>=0?z.slice(Z+1):z).replace(/\.git$/i,"")}function cL(J){let z=J.trim();if(!z)return F("newTask.error.gitUrlRequired");let Y=z.includes("://"),G=z.includes("@")&&z.includes(":"),Z=z.includes("/");if(!Y&&!G&&!Z)return F("newTask.error.gitUrlInvalid",{url:z});return null}function dL(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 Z=UJ(G),X;try{X=wG.statSync(Z)}catch{return F("newTask.error.parentNotFound",{path:Z})}if(!X.isDirectory())return F("newTask.error.parentNotDir",{path:Z});let Q=QQ.join(Z,Y);if(wG.existsSync(Q))return F("newTask.error.targetExists",{path:Q});return null}function nL(J,z){return QQ.join(UJ(J.trim()),z.trim())}function iL(J,z){let Y=z.trim();if(!Y)return z;let G=UJ(J.trim());if(!G)return z;try{if(!wG.statSync(G).isDirectory())return z}catch{return z}if(!wG.existsSync(QQ.join(G,Y)))return Y;for(let Z=2;Z<1000;Z++){let X=`${Y}-${Z}`;if(!wG.existsSync(QQ.join(G,X)))return X}return Y}function lL(J,z,Y){return new Promise((G)=>{let Z="";try{let X=By("git",["clone","--progress",J,z],{stdio:["ignore","ignore","pipe"]});X.stderr?.setEncoding("utf-8"),X.stderr?.on("data",(Q)=>{if(Z+=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)=>{G({ok:!1,error:Q.message})}),X.on("close",(Q)=>{if(Q===0){G({ok:!0,path:z});return}let f=Z.split(/[\r\n]+/).filter((H)=>H.trim().length>0).pop()??`git clone exited with ${Q}`;G({ok:!1,error:f})})}catch(X){G({ok:!1,error:X instanceof Error?X.message:String(X)})}})}var $L=k(()=>{ZJ();fH()});function F9(J){if(J==="existing")return"clone";if(J==="clone")return"adopt";return"existing"}function O9(J){if(J==="existing")return"adopt";if(J==="clone")return"existing";return"clone"}function aL(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 DJ(J){return J.replace(/[\r\n]+/g,"")}function qQ(J){return!/\S/u.test(J)}function A9(J,z="existing"){if(J==="confirm")return"tabs";if(J==="tabs")return"engine";if(J==="engine")return R9(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 R9(J){if(J==="clone")return"cloneUrl";if(J==="adopt")return"adoptFilter";return"repo"}function _L(J,z){let Y=z.trim();if(!Y)return J;return J.filter((G)=>OQ(Y,G.path))}function pL(J,z){let Y=new Set,G=[];for(let Z of[J,...z]){let X=Z.trim();if(!X||Y.has(X))continue;Y.add(X),G.push(X)}return G}function rL(J,z){let Y=z.trim().toLowerCase();if(!Y)return J;return J.filter((G)=>G.toLowerCase().includes(Y))}function oL(J,z){let Y=z.trim().toLowerCase();if(!Y)return J;return J.filter((G)=>G.toLowerCase().includes(Y))}function fQ(J,z,Y=jy){let G=J.length;if(G<=Y)return{items:J,start:0,total:G};let Z=Math.floor(Y/2),X=Math.max(0,z-Z);if(X+Y>G)X=G-Y;return{items:J.slice(X,X+Y),start:X,total:G}}function nz(J,z){if(z<=0)return 0;return Math.max(0,Math.min(z-1,J))}function sL(J,z,Y){let G=z[Y];if(G)return G;return J.trim()||Cz}var jy=8;var g9=k(()=>{yH();QH()});import{TextAttributes as Yz}from"@opentui/core";function tL(J){let z=c1(),{theme:Y}=d0(),[G,Z]=a("existing"),X=()=>{let d=J.availableVendors;return d&&d.length>0?d:n1},Q=(()=>{let d=X(),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(ZQ(UJ(J.defaultRepo.trim()))??Cz),[O,g]=a(!1),[x,_]=a(""),[S,N]=a(J.defaultCloneParent?.trim()?J.defaultCloneParent:"~/"),[M,I]=a(""),[r,i]=a(!1),[e,J0]=a(Cz),[T,q0]=a(!1),[p,B0]=a(""),L0=K0(()=>pL(J.defaultRepo,J.savedRepos)),V0=K0(()=>aL(j(),L0())),t=K0(()=>D9(j())),h=K0(()=>L9(t().base)),C=K0(()=>M9(h(),t().filter)),o=K0(()=>rL(L0(),j())),E=K0(()=>V0()==="browse"?C():o()),[c,s]=a(0),X0=K0(()=>fQ(E(),c())),[F0,P0]=a(!1),A0=K0(()=>hL(UJ(j().trim()))),N0=K0(()=>oL(A0(),L())),[u,g0]=a(0),Q0=K0(()=>fQ(N0(),u())),R0=K0(()=>D9(S())),y0=K0(()=>L9(R0().base)),H1=K0(()=>M9(y0(),R0().filter)),[G1,w0]=a(0),o0=K0(()=>fQ(H1(),G1())),[$,W0]=a(!1),[T0,s0]=a(""),[a0,_0]=a(0),[t0,N1]=a(new Set),[R1]=Kq(()=>G()==="adopt"?UJ(j().trim()):null,async(d)=>J.discoverAdoptable?await J.discoverAdoptable(d):[]),z0=K0(()=>_L(R1()??[],T0())),G0=K0(()=>fQ(z0().map((d)=>d.path),a0())),H0=K0(()=>{let d=G0();return z0().slice(d.start,d.start+d.items.length)});r0(()=>{z0(),_0((d)=>nz(d,z0().length))});function k0(d){N1((Y0)=>{let I0=new Set(Y0);if(I0.has(d))I0.delete(d);else I0.add(d);return I0})}function R(){let d=z0()[a0()];if(d)k0(d.path)}r0(()=>{N0(),g0(0)}),r0(()=>{let d=UJ(j().trim());if(!d)return;if(O())return;let Y0=ZQ(d);if(Y0)A(Y0)}),r0(()=>{E(),s(0)}),r0(()=>{H1(),w0(0)}),r0(()=>{let d=x(),Y0=S();if(r())return;let I0=mL(d);I(iL(Y0,I0))});let[h0,U0]=a(null);r0(()=>{j(),x(),S(),M(),T0(),U0(null)});function u0(){let d=UJ(j().trim());if(!d)return;let Y0=PL(d);if(Y0){U0(Y0),V("repo");return}let I0=L().trim()||Cz;J.onSubmit({repo:d,baseRef:I0,vendor:f()}),z.clear()}async function j0(){if(T())return;let d=cL(x());if(d){U0(d),V("cloneUrl");return}let Y0=dL(S(),M());if(Y0){U0(Y0),V(M().trim()?"cloneParent":"cloneFolder");return}let I0=nL(S(),M());q0(!0),B0(F("newTask.clone.progressInto",{target:I0}));let S0=await lL(x().trim(),I0,(XJ)=>{B0(XJ)});if(q0(!1),!S0.ok){U0(F("newTask.error.cloneFailed",{error:S0.error})),V("cloneUrl");return}let BJ=e().trim()||Cz,LJ=UJ(S().trim());J.onSubmit({repo:S0.path,baseRef:BJ,vendor:f(),cloned:{parentDir:LJ}}),z.clear()}function D0(){let d=z0();if(d.length===0){U0(F("newTask.error.noAdoptable"));return}let Y0=t0(),I0=Y0.size>0?d.filter((S0)=>Y0.has(S0.path)):d.slice(a0(),a0()+1);if(I0.length===0)return;J.onSubmit({mode:"adopt",repo:UJ(j().trim()),vendor:f(),adopt:I0.map((S0)=>({worktreePath:S0.path,branch:S0.branch}))}),z.clear()}function C0(){if(G()==="clone"){j0();return}if(G()==="adopt"){D0();return}u0()}function J1(d){if(T())return;if(d===G())return;Z(d),V(R9(d)),U0(null)}function z1(d){if(T())return;let Y0=d===1?F9(G()):O9(G());if(Y0===G())return;Z(Y0),U0(null),V("tabs")}function n0(d){H((Y0)=>d===1?LY(X(),Y0):xH(X(),Y0))}function x1(){if(!j().trim()&&V0()==="saved"){let Y0=E()[0];if(Y0){K(Y0),V("baseRef");return}}if(V0()==="browse"){let I0=C()[c()],S0=t();if(I0){K(XQ(j(),S0.base,I0)),s(0),P0(!0),V("baseRef");return}V("baseRef");return}let d=E()[c()];if(d){K(d),V("baseRef");return}V("baseRef")}function b0(d){let I0=E()[d];if(!I0)return;if(V0()==="browse"){let S0=t();K(XQ(j(),S0.base,I0)),s(d),P0(!0),V("baseRef");return}K(I0),s(d),V("baseRef")}function m1(){let Y0=H1()[G1()],I0=R0();if(Y0){N(XQ(S(),I0.base,Y0)),w0(0),W0(!0),V("cloneFolder");return}V("cloneFolder")}function v(d){let I0=H1()[d];if(!I0)return;let S0=R0();N(XQ(S(),S0.base,I0)),w0(d),W0(!0),V("cloneFolder")}let O0=()=>{let d=z0();if(d.length===0)return;let Y0=d.every((I0)=>t0().has(I0.path));N1(Y0?new Set:new Set(d.map((I0)=>I0.path)))};D1(()=>({bindings:[{key:"tab",cmd:()=>V((d)=>A9(d,G()))},{key:"ctrl+]",cmd:()=>J1(F9(G()))},{key:"ctrl+[",cmd:()=>J1(O9(G()))},{key:"ctrl+e",cmd:()=>H((d)=>LY(X(),d))},{key:"up",cmd:()=>{if(T())return;if(G()==="existing"&&B()==="repo"){let d=E();if(d.length===0)return;s(nz(c()-1,d.length));return}if(G()==="existing"&&B()==="baseRef"){let d=N0();if(d.length===0)return;g0(nz(u()-1,d.length));return}if(G()==="clone"&&B()==="cloneParent"){let d=H1();if(d.length===0)return;w0(nz(G1()-1,d.length));return}if(G()==="adopt"){let d=z0();if(d.length===0)return;_0(nz(a0()-1,d.length))}}},{key:"down",cmd:()=>{if(T())return;if(G()==="existing"&&B()==="repo"){let d=E();if(d.length===0)return;s(nz(c()+1,d.length));return}if(G()==="existing"&&B()==="baseRef"){let d=N0();if(d.length===0)return;g0(nz(u()+1,d.length));return}if(G()==="clone"&&B()==="cloneParent"){let d=H1();if(d.length===0)return;w0(nz(G1()+1,d.length));return}if(G()==="adopt"){let d=z0();if(d.length===0)return;_0(nz(a0()+1,d.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((d)=>A9(d,G()))}]:[],...G()==="adopt"?[{key:"ctrl+a",cmd:O0}]:[]]})),D1(()=>({enabled:B()==="confirm"&&!T(),bindings:[{key:"return",cmd:()=>C0()}]}));let W1=(d)=>B()===d?Y.primary:Y.textMuted,A1=(d)=>B()===d?Yz.BOLD|Yz.UNDERLINE:void 0,B1=(d,Y0)=>d?Y0?Yz.BOLD|Yz.UNDERLINE:Yz.BOLD:void 0;return(()=>{var d=W("box"),Y0=W("box"),I0=W("text"),S0=W("box"),BJ=W("box"),LJ=W("text"),XJ=W("box"),iJ=W("box"),iz=W("text"),AJ=W("box"),lz=W("text"),UY=W("text");return D(d,Y0),D(d,S0),D(d,AJ),q(d,"paddingLeft",2),q(d,"paddingRight",2),q(d,"gap",0),D(Y0,I0),q(Y0,"flexDirection","row"),U(I0,()=>F("newTask.title")),D(S0,BJ),q(S0,"gap",1),q(S0,"paddingTop",1),q(S0,"paddingBottom",1),U(S0,()=>{let m=()=>B()==="tabs",n=(l)=>l?Y.primary:Y.textMuted;return(()=>{var l=W("box"),w=W("text"),m0=W("text"),v0=W("text");return D(l,w),D(l,m0),D(l,v0),q(l,"flexDirection","row"),q(l,"gap",2),q(w,"onMouseUp",()=>J1("existing")),U(w,(()=>{var M0=x0(()=>G()==="existing");return()=>M0()?`\u25B8 ${F("newTask.tabs.existing")}`:` ${F("newTask.tabs.existing")}`})()),q(m0,"onMouseUp",()=>J1("clone")),U(m0,(()=>{var M0=x0(()=>G()==="clone");return()=>M0()?`\u25B8 ${F("newTask.tabs.clone")}`:` ${F("newTask.tabs.clone")}`})()),q(v0,"onMouseUp",()=>J1("adopt")),U(v0,(()=>{var M0=x0(()=>G()==="adopt");return()=>M0()?`\u25B8 ${F("newTask.tabs.adopt")}`:` ${F("newTask.tabs.adopt")}`})()),y((M0)=>{var c0=n(G()==="existing"),q1=B1(G()==="existing",m()),L1=n(G()==="clone"),jJ=B1(G()==="clone",m()),Zz=n(G()==="adopt"),DY=B1(G()==="adopt",m());return c0!==M0.e&&(M0.e=q(w,"fg",c0,M0.e)),q1!==M0.t&&(M0.t=q(w,"attributes",q1,M0.t)),L1!==M0.a&&(M0.a=q(m0,"fg",L1,M0.a)),jJ!==M0.o&&(M0.o=q(m0,"attributes",jJ,M0.o)),Zz!==M0.i&&(M0.i=q(v0,"fg",Zz,M0.i)),DY!==M0.n&&(M0.n=q(v0,"attributes",DY,M0.n)),M0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),l})()},BJ),D(BJ,LJ),D(BJ,XJ),q(BJ,"gap",0),U(LJ,()=>F("newTask.field.engine")),D(XJ,iJ),D(XJ,iz),q(XJ,"flexDirection","row"),q(XJ,"gap",2),U(XJ,b(X1,{get each(){return X()},children:(m)=>{let n=()=>f()===m;return(()=>{var l=W("text");return q(l,"onMouseUp",()=>H(m)),U(l,()=>n()?"\u25B8 ":" ",null),U(l,m,null),y((w)=>{var m0=n()?Y.primary:Y.textMuted,v0=n()?Yz.BOLD:void 0;return m0!==w.e&&(w.e=q(l,"fg",m0,w.e)),v0!==w.t&&(w.t=q(l,"attributes",v0,w.t)),w},{e:void 0,t:void 0}),l})()}}),iJ),q(iJ,"flexGrow",1),U(iz,()=>F("newTask.hint.engineCycle")),U(S0,b(Z0,{get when(){return G()==="existing"},get children(){return[(()=>{var m=W("box"),n=W("text"),l=W("input");return D(m,n),D(m,l),q(m,"gap",0),U(n,()=>F("newTask.field.repo")),q(l,"onInput",(w)=>{P0(!1),K(DJ(w))}),q(l,"onSubmit",()=>{if(!j().trim())return;x1()}),y((w)=>{var m0=W1("repo"),v0=A1("repo"),M0=j(),c0=J.defaultRepo,q1=B()==="repo";return m0!==w.e&&(w.e=q(n,"fg",m0,w.e)),v0!==w.t&&(w.t=q(n,"attributes",v0,w.t)),M0!==w.a&&(w.a=q(l,"value",M0,w.a)),c0!==w.o&&(w.o=q(l,"placeholder",c0,w.o)),q1!==w.i&&(w.i=q(l,"focused",q1,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),m})(),b(Z0,{get when(){return x0(()=>B()==="repo"&&E().length>0)()&&!F0()},get children(){var m=W("box");return q(m,"gap",0),q(m,"paddingLeft",2),U(m,b(Z0,{get when(){return X0().start>0},get children(){var n=W("text");return q(n,"wrapMode","none"),U(n,()=>F("newTask.picker.moreAbove",{count:X0().start})),y((l)=>q(n,"fg",Y.textMuted,l)),n}}),null),U(m,b(X1,{get each(){return X0().items},children:(n,l)=>{let w=()=>X0().start+l(),m0=()=>w()===c(),v0=()=>V0()==="saved"&&n===J.defaultRepo,M0=()=>V0()==="saved"&&j().trim()===n,c0=()=>V0()==="browse"?"/":"",q1=()=>v0()?` ${F("newTask.hint.currentDir")}`:"";return(()=>{var L1=W("text");return q(L1,"wrapMode","none"),q(L1,"onMouseUp",()=>b0(w())),U(L1,()=>m0()?"\u25B8 ":" ",null),U(L1,n,null),U(L1,c0,null),U(L1,q1,null),y((jJ)=>{var Zz=m0()?Y.primary:M0()?Y.accent:Y.textMuted,DY=m0()?Yz.BOLD:void 0;return Zz!==jJ.e&&(jJ.e=q(L1,"fg",Zz,jJ.e)),DY!==jJ.t&&(jJ.t=q(L1,"attributes",DY,jJ.t)),jJ},{e:void 0,t:void 0}),L1})()}}),null),U(m,b(Z0,{get when(){return X0().start+X0().items.length<X0().total},get children(){var n=W("text");return q(n,"wrapMode","none"),U(n,()=>F("newTask.picker.moreBelow",{count:X0().total-X0().start-X0().items.length})),y((l)=>q(n,"fg",Y.textMuted,l)),n}}),null),m}}),(()=>{var m=W("box"),n=W("text"),l=W("input");return D(m,n),D(m,l),q(m,"gap",0),U(n,()=>F("newTask.field.fromBranch")),q(l,"placeholder",Cz),q(l,"onInput",(w)=>{g(!0),A(DJ(w))}),q(l,"onSubmit",()=>{A(sL(L(),N0(),u())),g(!0),u0()}),y((w)=>{var m0=W1("baseRef"),v0=A1("baseRef"),M0=L(),c0=B()==="baseRef";return m0!==w.e&&(w.e=q(n,"fg",m0,w.e)),v0!==w.t&&(w.t=q(n,"attributes",v0,w.t)),M0!==w.a&&(w.a=q(l,"value",M0,w.a)),c0!==w.o&&(w.o=q(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),b(Z0,{get when(){return x0(()=>B()==="baseRef"&&N0().length===0)()&&h0()==null},get children(){var m=W("box"),n=W("text");return D(m,n),q(m,"gap",0),q(m,"paddingLeft",2),q(m,"paddingBottom",1),q(n,"wrapMode","none"),U(n,(()=>{var l=x0(()=>A0().length===0);return()=>l()?F("newTask.hint.noBranchesFound"):F("newTask.hint.noMatchBranch")})()),y((l)=>q(n,"fg",Y.textMuted,l)),m}}),b(Z0,{get when(){return x0(()=>B()==="baseRef")()&&N0().length>0},get children(){var m=W("box");return q(m,"gap",0),q(m,"paddingLeft",2),q(m,"paddingBottom",1),U(m,b(Z0,{get when(){return Q0().start>0},get children(){var n=W("text");return q(n,"wrapMode","none"),U(n,()=>F("newTask.picker.moreAbove",{count:Q0().start})),y((l)=>q(n,"fg",Y.textMuted,l)),n}}),null),U(m,b(X1,{get each(){return Q0().items},children:(n,l)=>{let w=()=>Q0().start+l(),m0=()=>w()===u(),v0=()=>L().trim()===n;return(()=>{var M0=W("text");return q(M0,"wrapMode","none"),q(M0,"onMouseUp",()=>{A(n),g(!0),g0(w()),V("confirm")}),U(M0,()=>m0()?"\u25B8 ":" ",null),U(M0,n,null),y((c0)=>{var q1=m0()?Y.primary:v0()?Y.accent:Y.textMuted,L1=m0()?Yz.BOLD:void 0;return q1!==c0.e&&(c0.e=q(M0,"fg",q1,c0.e)),L1!==c0.t&&(c0.t=q(M0,"attributes",L1,c0.t)),c0},{e:void 0,t:void 0}),M0})()}}),null),U(m,b(Z0,{get when(){return Q0().start+Q0().items.length<Q0().total},get children(){var n=W("text");return q(n,"wrapMode","none"),U(n,()=>F("newTask.picker.moreBelow",{count:Q0().total-Q0().start-Q0().items.length})),y((l)=>q(n,"fg",Y.textMuted,l)),n}}),null),m}})]}}),null),U(S0,b(Z0,{get when(){return G()==="clone"},get children(){return[(()=>{var m=W("box"),n=W("text"),l=W("input");return D(m,n),D(m,l),q(m,"gap",0),U(n,()=>F("newTask.field.gitUrl")),q(l,"placeholder","https://github.com/user/repo.git"),q(l,"onInput",(w)=>_(DJ(w))),q(l,"onSubmit",()=>{if(!x().trim())return;V("cloneParent")}),y((w)=>{var m0=W1("cloneUrl"),v0=A1("cloneUrl"),M0=x(),c0=B()==="cloneUrl";return m0!==w.e&&(w.e=q(n,"fg",m0,w.e)),v0!==w.t&&(w.t=q(n,"attributes",v0,w.t)),M0!==w.a&&(w.a=q(l,"value",M0,w.a)),c0!==w.o&&(w.o=q(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),(()=>{var m=W("box"),n=W("text"),l=W("input");return D(m,n),D(m,l),q(m,"gap",0),U(n,()=>F("newTask.field.parentDir")),q(l,"placeholder","~/"),q(l,"onInput",(w)=>{W0(!1),N(DJ(w))}),q(l,"onSubmit",()=>m1()),y((w)=>{var m0=W1("cloneParent"),v0=A1("cloneParent"),M0=S(),c0=B()==="cloneParent";return m0!==w.e&&(w.e=q(n,"fg",m0,w.e)),v0!==w.t&&(w.t=q(n,"attributes",v0,w.t)),M0!==w.a&&(w.a=q(l,"value",M0,w.a)),c0!==w.o&&(w.o=q(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),b(Z0,{get when(){return B()==="cloneParent"},get children(){var m=W("box"),n=W("text");return D(m,n),q(m,"paddingLeft",2),q(n,"wrapMode","none"),U(n,()=>F("newTask.hint.remembered")),y((l)=>q(n,"fg",Y.textMuted,l)),m}}),b(Z0,{get when(){return x0(()=>B()==="cloneParent"&&H1().length>0)()&&!$()},get children(){var m=W("box");return q(m,"gap",0),q(m,"paddingLeft",2),U(m,b(Z0,{get when(){return o0().start>0},get children(){var n=W("text");return q(n,"wrapMode","none"),U(n,()=>F("newTask.picker.moreAbove",{count:o0().start})),y((l)=>q(n,"fg",Y.textMuted,l)),n}}),null),U(m,b(X1,{get each(){return o0().items},children:(n,l)=>{let w=()=>o0().start+l(),m0=()=>w()===G1();return(()=>{var v0=W("text"),M0=E0("/");return D(v0,M0),q(v0,"wrapMode","none"),q(v0,"onMouseUp",()=>v(w())),U(v0,()=>m0()?"\u25B8 ":" ",M0),U(v0,n,M0),y((c0)=>{var q1=m0()?Y.primary:Y.textMuted,L1=m0()?Yz.BOLD:void 0;return q1!==c0.e&&(c0.e=q(v0,"fg",q1,c0.e)),L1!==c0.t&&(c0.t=q(v0,"attributes",L1,c0.t)),c0},{e:void 0,t:void 0}),v0})()}}),null),U(m,b(Z0,{get when(){return o0().start+o0().items.length<o0().total},get children(){var n=W("text");return q(n,"wrapMode","none"),U(n,()=>F("newTask.picker.moreBelow",{count:o0().total-o0().start-o0().items.length})),y((l)=>q(n,"fg",Y.textMuted,l)),n}}),null),m}}),(()=>{var m=W("box"),n=W("text"),l=W("input");return D(m,n),D(m,l),q(m,"gap",0),U(n,()=>F("newTask.field.folderName")),q(l,"onInput",(w)=>{i(!0),I(DJ(w))}),q(l,"onSubmit",()=>V("cloneBaseRef")),y((w)=>{var m0=W1("cloneFolder"),v0=A1("cloneFolder"),M0=M(),c0=F("newTask.placeholder.folderName"),q1=B()==="cloneFolder";return m0!==w.e&&(w.e=q(n,"fg",m0,w.e)),v0!==w.t&&(w.t=q(n,"attributes",v0,w.t)),M0!==w.a&&(w.a=q(l,"value",M0,w.a)),c0!==w.o&&(w.o=q(l,"placeholder",c0,w.o)),q1!==w.i&&(w.i=q(l,"focused",q1,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),m})(),(()=>{var m=W("box"),n=W("text"),l=W("input");return D(m,n),D(m,l),q(m,"gap",0),U(n,()=>F("newTask.field.baseBranch")),q(l,"placeholder",Cz),q(l,"onInput",(w)=>J0(DJ(w))),q(l,"onSubmit",()=>void j0()),y((w)=>{var m0=W1("cloneBaseRef"),v0=A1("cloneBaseRef"),M0=e(),c0=B()==="cloneBaseRef";return m0!==w.e&&(w.e=q(n,"fg",m0,w.e)),v0!==w.t&&(w.t=q(n,"attributes",v0,w.t)),M0!==w.a&&(w.a=q(l,"value",M0,w.a)),c0!==w.o&&(w.o=q(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),b(Z0,{get when(){return T()},get children(){var m=W("box"),n=W("text");return D(m,n),q(m,"gap",0),q(m,"paddingLeft",2),q(n,"wrapMode","none"),U(n,()=>p()||F("newTask.clone.progressFallback")),y((l)=>q(n,"fg",Y.textMuted,l)),m}})]}}),null),U(S0,b(Z0,{get when(){return G()==="adopt"},get children(){return[(()=>{var m=W("box"),n=W("text"),l=W("input");return D(m,n),D(m,l),q(m,"gap",0),U(n,()=>F("newTask.field.adoptFilter")),q(l,"onInput",(w)=>s0(DJ(w))),q(l,"onSubmit",()=>R()),y((w)=>{var m0=W1("adoptFilter"),v0=A1("adoptFilter"),M0=T0(),c0=F("newTask.placeholder.adoptFilter"),q1=B()==="adoptFilter";return m0!==w.e&&(w.e=q(n,"fg",m0,w.e)),v0!==w.t&&(w.t=q(n,"attributes",v0,w.t)),M0!==w.a&&(w.a=q(l,"value",M0,w.a)),c0!==w.o&&(w.o=q(l,"placeholder",c0,w.o)),q1!==w.i&&(w.i=q(l,"focused",q1,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),m})(),(()=>{var m=W("box"),n=W("text");return D(m,n),q(m,"paddingLeft",2),q(n,"wrapMode","none"),U(n,()=>F("newTask.adopt.repoLine",{path:UJ(j().trim())||F("newTask.adopt.repoNone")})),y((l)=>q(n,"fg",Y.textMuted,l)),m})(),b(Z0,{get when(){return R1.loading},get children(){var m=W("box"),n=W("text");return D(m,n),q(m,"paddingLeft",2),q(n,"wrapMode","none"),U(n,()=>F("newTask.hint.scanningWorktrees")),y((l)=>q(n,"fg",Y.textMuted,l)),m}}),b(Z0,{get when(){return x0(()=>!R1.loading)()&&z0().length===0},get children(){var m=W("box"),n=W("text");return D(m,n),q(m,"paddingLeft",2),q(n,"wrapMode","none"),U(n,(()=>{var l=x0(()=>(R1()??[]).length===0);return()=>l()?F("newTask.adopt.noUnlinked"):F("newTask.adopt.noMatch")})()),y((l)=>q(n,"fg",Y.textMuted,l)),m}}),b(Z0,{get when(){return z0().length>0},get children(){var m=W("box"),n=W("text");return D(m,n),q(m,"gap",0),q(m,"paddingLeft",2),U(m,b(Z0,{get when(){return G0().start>0},get children(){var l=W("text");return q(l,"wrapMode","none"),U(l,()=>F("newTask.picker.moreAbove",{count:G0().start})),y((w)=>q(l,"fg",Y.textMuted,w)),l}}),n),U(m,b(X1,{get each(){return H0()},children:(l,w)=>{let m0=()=>G0().start+w(),v0=()=>m0()===a0(),M0=()=>t0().has(l.path),c0=()=>[l.dirty?"dirty":"",l.kobeManaged?"":"external"].filter(Boolean).join(",");return(()=>{var q1=W("text");return q(q1,"wrapMode","none"),q(q1,"onMouseUp",()=>{_0(m0()),k0(l.path)}),U(q1,()=>v0()?"\u25B8 ":" ",null),U(q1,()=>M0()?"[x] ":"[ ] ",null),U(q1,()=>l.branch,null),U(q1,(()=>{var L1=x0(()=>!!c0());return()=>L1()?` (${c0()})`:""})(),null),y((L1)=>{var jJ=v0()?Y.primary:M0()?Y.accent:Y.textMuted,Zz=v0()?Yz.BOLD:void 0;return jJ!==L1.e&&(L1.e=q(q1,"fg",jJ,L1.e)),Zz!==L1.t&&(L1.t=q(q1,"attributes",Zz,L1.t)),L1},{e:void 0,t:void 0}),q1})()}}),n),U(m,b(Z0,{get when(){return G0().start+G0().items.length<G0().total},get children(){var l=W("text");return q(l,"wrapMode","none"),U(l,()=>F("newTask.picker.moreBelow",{count:G0().total-G0().start-G0().items.length})),y((w)=>q(l,"fg",Y.textMuted,w)),l}}),n),q(n,"wrapMode","none"),U(n,(()=>{var l=x0(()=>t0().size>0);return()=>l()?F("newTask.adopt.hintSelected",{count:t0().size}):F("newTask.adopt.hintDefault")})()),y((l)=>q(n,"fg",Y.textMuted,l)),m}})]}}),null),U(S0,b(Z0,{get when(){return h0()},get children(){var m=W("text"),n=E0("\u203B ");return D(m,n),q(m,"wrapMode","word"),U(m,h0,null),y((l)=>q(m,"fg",Y.error,l)),m}}),null),D(AJ,lz),D(AJ,UY),q(AJ,"flexDirection","row"),q(AJ,"justifyContent","space-between"),q(AJ,"alignItems","center"),q(AJ,"paddingTop",1),q(AJ,"paddingBottom",1),U(lz,()=>F("newTask.hint.legend")),q(UY,"onMouseUp",()=>C0()),U(UY,(()=>{var m=x0(()=>!!T());return()=>m()?F("newTask.button.cloning"):x0(()=>B()==="confirm")()?F("newTask.button.createFocused"):F("newTask.button.create")})()),y((m)=>{var n=Yz.BOLD,l=Y.text,w=W1("engine"),m0=A1("engine"),v0=Y.textMuted,M0=Y.textMuted,c0=B()==="confirm"?Y.primary:Y.text,q1=B()==="confirm"?Yz.BOLD:void 0;return n!==m.e&&(m.e=q(I0,"attributes",n,m.e)),l!==m.t&&(m.t=q(I0,"fg",l,m.t)),w!==m.a&&(m.a=q(LJ,"fg",w,m.a)),m0!==m.o&&(m.o=q(LJ,"attributes",m0,m.o)),v0!==m.i&&(m.i=q(iz,"fg",v0,m.i)),M0!==m.n&&(m.n=q(lz,"fg",M0,m.n)),c0!==m.s&&(m.s=q(UY,"fg",c0,m.s)),q1!==m.h&&(m.h=q(UY,"attributes",q1,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 eL=k(()=>{P();P();P();P();P();P();P();P();ZJ();i1();j1();v1();QH();yJ();fH();nJ();$L();g9()});function Wy(J,z,Y,G){return new Promise((Z)=>{J.replace(()=>b(tL,{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:(X)=>Z(X),onCancel:()=>Z(void 0)}),()=>Z(void 0)),J.setSize("medium")})}var HH;var lZ=k(()=>{P();eL();g9();HH={show:Wy}});function J3(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 z3}from"@opentui/core";function Vy(J){let z=c1(),{theme:Y}=d0(),[G,Z]=a("prompt"),[X,Q]=a(""),[f,H]=a(J.defaultVendor),[B,V]=a(J.defaultBaseRef);function j(O){let g=BH.indexOf(G());Z(BH[(g+O+BH.length)%BH.length]??"prompt")}function K(O){let g=J.engines;if(g.length===0)return;if(O>0){H((_)=>LY(g,_));return}let x=Math.max(0,g.indexOf(f()));H(g[(x-1+g.length)%g.length]??f())}function L(){if(qQ(X())){Z("prompt");return}J.onSubmit({prompt:X().trim(),vendor:f(),baseRef:B().trim()||J.defaultBaseRef}),z.clear()}D1(()=>({enabled:!0,bindings:J3(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"),i=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,i),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(DJ(p))),q(M,"onSubmit",()=>L()),D(I,r),q(I,"flexDirection","row"),q(I,"gap",2),U(r,()=>F("quickTask.engineLabel")),U(I,b(X1,{get each(){return J.engines},children:(p)=>(()=>{var B0=W("text");return q(B0,"onMouseUp",()=>{H(p),Z("engine")}),U(B0,()=>J.engineLabel(p)),y((L0)=>{var V0=f()===p?Y.primary:Y.textMuted,t=f()===p?z3.BOLD:void 0;return V0!==L0.e&&(L0.e=q(B0,"fg",V0,L0.e)),t!==L0.t&&(L0.t=q(B0,"attributes",t,L0.t)),L0},{e:void 0,t:void 0}),B0})()}),null),D(i,e),D(i,J0),q(i,"gap",0),U(e,()=>F("quickTask.branchLabel")),q(J0,"onInput",(p)=>V(DJ(p))),q(J0,"onSubmit",()=>L()),D(T,q0),q(T,"paddingBottom",1),U(q0,()=>F("quickTask.legend")),y((p)=>{var B0=z3.BOLD,L0=Y.text,V0=Y.textMuted,t=A("prompt"),h=X(),C=F("quickTask.promptPlaceholder"),o=G()==="prompt",E=A("engine"),c=A("branch"),s=B(),X0=J.defaultBaseRef,F0=G()==="branch",P0=Y.textMuted;return B0!==p.e&&(p.e=q(x,"attributes",B0,p.e)),L0!==p.t&&(p.t=q(x,"fg",L0,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)),X0!==p.l&&(p.l=q(J0,"placeholder",X0,p.l)),F0!==p.u&&(p.u=q(J0,"focused",F0,p.u)),P0!==p.c&&(p.c=q(q0,"fg",P0,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 Ky(J,z){return new Promise((Y)=>{J.replace(()=>b(Vy,vD(z,{onSubmit:(G)=>Y(G),onCancel:()=>Y(void 0)})),()=>Y(void 0)),J.setSize("medium")})}var BH,Y3;var G3=k(()=>{P();P();P();P();P();P();P();j1();i1();v1();ZJ();yJ();nJ();lZ();BH=["prompt","engine","branch"];Y3={show:Ky}});async function jH(J={}){let z=J.logTag??"orch-connect",Y=J.connect??zz,G=null;try{let Z=await Y();if(!Z)return tz(z,"no daemon running \u2014 caller degrades"),null;return G=new KJ(Z,{...J.orchestratorOptions,channels:J.channels}),await G.init(),G}catch(Z){return o1(z,Z),G?.dispose(),null}}var C9=k(()=>{zG();FJ();nY()});function Z3(J){let[z,Y]=a(J.initial??"sidebar"),[G,Z]=a(0),X=fJ();function Q(j){if(Z((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=(WH.indexOf(z())+j+WH.length)%WH.length;Q(WH[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(Uy.Provider,{value:V,get children(){return J.children}})}var WH,Uy;var X3=k(()=>{P();P();j1();WH=["sidebar","workspace","files","terminal"],Uy=Tz(null)});function Q3(){for(let J of iY){let z=Dy.get(J.id);if(!z)continue;let Y=J;Y.keys=[...z.keys],Y.hint=z.hint?{...z.hint}:void 0}}function q3(){Ly((J)=>J+1)}function k9(J){return My.get(J)}function Fy(J){return k9(J)?.keys??[]}function lY(J){let z=[];for(let Y in J){let G=J[Y];if(!G)continue;let Z=Fy(Y);if(Z.length===0){console.warn(`[kobe/keybindings] bindByIds: id="${Y}" has no chords (or doesn't exist in KobeKeymap)`);continue}Z.forEach((X,Q)=>z.push({key:X,cmd:G,slot:Q}))}return z}var iY,Dy,N9,Ly,My;var $Z=k(()=>{j1();iY=[{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"}}],Dy=new Map(iY.map((J)=>[J.id,{keys:[...J.keys],hint:J.hint?{...J.hint}:void 0}]));[N9,Ly]=a(0);My=new Map(iY.map((J)=>[J.id,J]))});function VH(){if($Y)return $Y;let J=Nq();if(!J.exists)return $Y={path:J.path,exists:!1,applied:[],warnings:[]},$Y;let z=[...J.warnings],Y=bq(J.doc,process.platform,{chordOptsFor:YB});z.push(...Y.warnings);let G=Y.entries.filter((f)=>f.id.startsWith("tmux.")),Z=Y.entries.filter((f)=>!f.id.startsWith("tmux.")),X=z5(iY,Z);z.push(...X.warnings);let Q=[...X.applied];if(G.length>0){let f=zB(G);z.push(...f.warnings);for(let H of f.overridden){if(H===xz){Q.push({id:H,keys:f.focus.map((j)=>j?.chord??"").filter((j)=>j!==""),defaultKeys:SY});continue}let B=f.binds[H];Q.push({id:H,keys:B?[B.chord]:[],defaultKeys:[LG[H]]});let V=iY.find((j)=>j.id===H);if(V?.hint)V.hint.keys=B?`${QZ(H)?"prefix ":""}${B.chord}`:"\u2014"}}for(let f of z)console.warn(`[kobe/keybindings] ${f}`);return $Y={path:J.path,exists:!0,applied:Q,warnings:z},$Y}function f3(){return $Y??VH()}function H3(){$Y=null,J5(),X5(),Q3();let J=VH();return q3(),J}var $Y=null;var b9=k(()=>{e8();Tq();Sq();$Z()});var Oy=250,aZ,B3;var HQ=k(()=>{cZ();tY();X9();({use:aZ,provider:B3}=GH({name:"KV",init:()=>{let[J,z]=dz(RJ()),Y=new Set,G=null;function Z(f){if(Y.size===0)return!0;try{let H={};for(let B of Y)H[B]=J[B];return MY(H),Y.clear(),!0}catch(H){return console.error(`[kobe] kv ${f} failed:`,H),!1}}function X(){if(G)clearTimeout(G);G=setTimeout(()=>{G=null,Z("write")},Oy)}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(G)clearTimeout(G),G=null;return Z("flush")},clear(){for(let f of Object.keys(J))z(f,void 0);if(G)clearTimeout(G),G=null;Y.clear();try{wW({})}catch(f){console.error("[kobe] kv clear write failed:",f)}}};return Q}}))});var KH="../pulse-n3cq1btw.wav";var j3=()=>{};import{existsSync as Ry,mkdirSync as gy}from"fs";import{tmpdir as Cy}from"os";import{basename as Ny,isAbsolute as ky,join as S9,resolve as by}from"path";function Iy(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 Ty(){if(UH!==void 0)return UH;let z=(process.env.PATH??"").split(":").filter(Boolean);return UH=Sy.find((Y)=>z.some((G)=>Ry(S9(G,Y))))??null,UH}async function yy(){return K3??=(async()=>{gy(V3,{recursive:!0});let J=S9(V3,Ny(W3)),z=Bun.file(J);if(await z.exists())return J;return await Bun.write(z,Bun.file(W3)),J})(),K3}function U3(J=0.4){let z=Ty();if(!z)return;yy().then((Y)=>{try{Bun.spawn(Iy(z,Y,J),{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).unref?.()}catch{}}).catch(()=>{return})}var W3,V3,Sy,UH,K3;var D3=k(()=>{j3();W3=ky(KH)?KH:by(import.meta.dir,KH),V3=S9(Cy(),"kobe-sfx"),Sy=["ffplay","mpv","mpg123","mpg321","mplayer","afplay","play","omxplayer","aplay","cmdmp3","cvlc","powershell.exe"]});function L3(J,z){return`${J}:${z}`}function F3(J){let z=aZ(),[Y,G]=a([]),[Z,X]=a(new Map),Q=XH(),f=0;function H(K){if(X((L)=>{let A=new Map(L),O=L3(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{}U3()}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),xy)}}function B(K){G((L)=>L.filter((A)=>A.id!==K))}function V(K,L){X((A)=>{let O=L3(K,L);if(!A.has(O))return A;let g=new Map(A);return g.delete(O),g})}let j={toasts:Y,unread:Z,notify:H,dismiss:B,markRead:V};return b(M3.Provider,{value:j,get children(){return J.children}})}function DH(){let J=wJ(M3);if(!J)throw Error("useNotifications must be used within a NotificationsProvider");return J}var xy=4500,M3;var LH=k(()=>{P();j1();K9();D3();HQ();M3=Tz()});function I9(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=Ey(z.focusAccent);if(Y&&Y!==J.focusAccent())J.setFocusAccent(Y)}}function Ey(J){if(J===null)return"primary";return uy.includes(J)?J:null}var uy;var O3=k(()=>{uy=["primary","success","info"]});import{readFileSync as wy}from"fs";function A3(J){try{let z=JSON.parse(wy(lJ(),"utf8")),Y=typeof z.activeTheme==="string"&&zQ(z.activeTheme)?z.activeTheme:J,G=z.transparentBackground===!0,Z=typeof z.focusAccent==="string"&&uG.includes(z.focusAccent)?z.focusAccent:null,X=YQ(z[MH])?z[MH]:nZ;return{theme:Y,transparent:G,focusAccent:Z,locale:X}}catch{return{theme:J,transparent:!1,focusAccent:null,locale:nZ}}}var MH="locale";var T9=k(()=>{p1();v1();iZ()});function hy(J){if(J)uQ(J);eW(),VH();for(let{name:z,theme:Y}of NX())q9(z,Y)}function vy(J){let z={backgroundColor:"transparent",externalOutputMode:"passthrough",exitOnCtrlC:!1,screenMode:"alternate-screen",useKittyKeyboard:{}};return J?{...z,onDestroy:J}:z}function my(J){let z=()=>J.children,Y=()=>J.notifications?b(F3,{get children(){return z()}}):z(),G=()=>b(uL,{get children(){return Y()}}),Z=()=>J.focus?b(Z3,{initial:"sidebar",get children(){return G()}}):G(),X=()=>J.kv?b(B3,{get children(){return Z()}}):Z();return b(tD,{mode:"dark",get theme(){return J.theme},get children(){return X()}})}function cy(J){let{theme:z}=d0();return e1(()=>o1("pane-crash",J.error)),(()=>{var Y=W("box"),G=W("text"),Z=W("text");return D(Y,G),D(Y,Z),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(Z,()=>F("common.paneCrash.hint")),y((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(G,"fg",f,X.t)),H!==X.a&&(X.a=q(Z,"fg",H,X.a)),X},{e:void 0,t:void 0,a:void 0}),Y})()}function dy(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 NX())q9(f,H)},transparentBackground:()=>z.transparentBackground,setTransparentBackground:(f)=>z.setTransparentBackground(f),focusAccent:()=>z.focusAccent,setFocusAccent:(f)=>z.setFocusAccent(f)};I9(Y,{theme:J.boot.theme,transparentBackground:J.boot.transparent,focusAccent:J.boot.focusAccent}),GQ(J.boot.locale);let[G,Z]=a(null),X=!1;e1(()=>{(async()=>{let f=await jH({logTag:"ui-prefs",channels:["ui-prefs","keybindings"]});if(!f)return;if(X){f.dispose();return}Z(f)})()}),r0(()=>{let f=G()?.uiPrefsSignal()();if(!f)return;if(I9(Y,f),YQ(f.locale))GQ(f.locale)});let Q=null;return r0(()=>{let f=G()?.keybindingsRevSignal()();if(f==null)return;if(Q===null||f===Q){Q=f;return}Q=f,H3()}),k1(()=>{X=!0,G()?.dispose()}),null}async function OJ(J){hy(J.logContext);let z=A3(Py),Y=await J.setup(z),G=J.providers?.kv??!0,Z=J.providers?.focus??!0,X=J.providers?.notifications??!1;await $D(()=>b(my,{get theme(){return z.theme},kv:G,focus:Z,notifications:X,get children(){return[b(dy,{boot:z}),b(bV,{fallback:(Q)=>b(cy,{error:Q}),get children(){return Y.root()}})]}}),vy(Y.onDestroy))}var Py="claude";var aY=k(()=>{P();P();P();P();P();P();P();zG();j1();C9();X3();b9();HQ();LH();v1();dq();ZJ();nJ();O3();T9()});async function y9(J,z,Y,G,Z={}){let X=C1(z.id);if(await V1(X))return!0;let Q=z.worktreePath;if(!Q||!zZ(Q)){if(!J)throw new PG("no-daemon",`no daemon; cannot materialise worktree for ${z.id}`);try{Q=await J.ensureWorktree(z.id)}catch(j){throw new PG("worktree",`ensureWorktree failed for ${z.id}`,j)}await Z.reload?.()}if(!Q||!zZ(Q))throw new PG("worktree",`task ${z.id} has no usable worktree`);let{ensureSession:f}=await Promise.resolve().then(() => (zJ(),vJ)),{resolveEngineLaunchInit:H}=await Promise.resolve().then(() => (NZ(),Sf)),B=Y?H(Y,Q,{kind:Z.includeInitPrompt?"repo-init":"none"}):void 0;if(!await f({name:X,cwd:Q,command:oJ(G),taskId:z.id,vendor:G,repo:Y,launchInit:B}))throw new PG("session",`failed to start tmux session for ${z.id}`);return!1}async function x9(J,z,Y,G,Z={}){let X=C1(z.id),Q=await Promise.resolve().then(() => (zJ(),vJ));if(Z.captureFrom){let B=await Q.currentSessionName();if(B&&B!==X)await Q.captureGlobalLayout(B)}if(await y9(J,z,Y,G,{includeInitPrompt:Z.includeInitPrompt,reload:Z.reload})&&Z.heal)try{let B=await gG(X,"@kobe_worktree")||z.worktreePath||"";if(B&&zZ(B)){let{resolveEngineLaunchInit:V}=await Promise.resolve().then(() => (NZ(),Sf)),j=Y?V(Y,B,{kind:Z.includeInitPrompt?"repo-init":"none"}):void 0;await Q.ensureSession({name:X,cwd:B,command:oJ(G),taskId:z.id,vendor:G,repo:Y,launchInit:j})}}catch(B){console.error("[kobe handover] heal failed (continuing to switch):",B)}let{syncSessionZen:H}=await Promise.resolve().then(() => (RG(),o5));await H(X),await J?.setActiveTask(z.id).catch(()=>{}),await Q.enterWindow(X)}async function FH(J,z,Y,G,Z={}){await x9(J,z,Y,G,{includeInitPrompt:Z.includeInitPrompt})}var PG;var OH=k(()=>{sJ();Vz();P1();PG=class PG extends Error{phase;cause;constructor(J,z,Y){super(z);this.name="HandoverError",this.phase=J,this.cause=Y}}});var R3={};f1(R3,{startNewTaskHost:()=>ny,NewTaskPage:()=>AH});function AH(J){let{theme:z}=d0(),Y=c1();e1(()=>{G()});async function G(){let Z=gJ(),X=J.defaultRepo||Z[0]||process.cwd(),Q=xJ(g1("lastSelectedVendor"),uJ()),f=await ez(),H=J.orchestrator,B=await HH.show(Y,X,Z,{defaultVendor:Q,availableVendors:f,discoverAdoptable:H?(j)=>H.discoverAdoptableWorktrees(j):void 0});if(!B)process.exit(0);if(r1("lastSelectedVendor",B.vendor),pz(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 FH(H,V,B.repo,B.vendor,{includeInitPrompt:B.mode!=="adopt"})}catch(j){console.error("[kobe new-task] auto-enter failed:",j)}process.exit(0)}return(()=>{var Z=W("box");return q(Z,"flexDirection","column"),q(Z,"flexGrow",1),y((X)=>q(Z,"backgroundColor",z.background,X)),Z})()}async function ny(J){await OJ({setup:async()=>{let z=null;try{let Y=await Az(),G=new KJ(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 u9=k(()=>{P();P();P();P();FJ();j1();nY();YG();F1();i1();lZ();v1();aY();OH();nJ()});function RH(J,z,Y,G,Z={}){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&&G(V,B)&&(!Z.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 g3(J,z){if(!J)return!0;let Y=J.toLowerCase(),G=z.toLowerCase(),Z=0;for(let X=0;X<G.length&&Z<Y.length;X++)if(G.charCodeAt(X)===Y.charCodeAt(Z))Z++;return Z===Y.length}function iy(J,z){let Y=z==="archived";return J.filter((G)=>G.archived===Y)}function E9(J,z,Y,G="default",Z){let X=iy(J,z),Q=Y?.trim()??"",f=Z?Gz(Z):null,H=Q?X.filter((O)=>g3(Q,`${O.title} ${Nz(O.repo)}`)):X,B=[],V=[],j=[],K=new Set;for(let O of H){if(O.kind==="main"){let g=Gz(O.repo);if(K.has(g))continue;K.add(g),B.push(O);continue}if(f&&Gz(O.repo)!==f)continue;if(O.pinned===!0)V.push(O);else j.push(O)}if(B.sort((O,g)=>Nz(O.repo).localeCompare(Nz(g.repo))),G==="recent")V.sort(C3),j.sort(C3);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 C3(J,z){let Y=N3(z)-N3(J);if(Y!==0)return Y;return String(z.id).localeCompare(String(J.id))}function N3(J){let z=Date.parse(J.updatedAt||J.createdAt);return Number.isFinite(z)?z:0}function Nz(J){let z=J.split("/").filter(Boolean);return z[z.length-1]??J}function Gz(J){return J.trim().replace(/[\\/]+$/,"")||J}function ly(J,z){let Y=Nz(J);if(!z.some((Z)=>Z!==J&&Nz(Z)===Y))return Y;return J.replace(/[\\/]+$/,"").split(/[\\/]+/).slice(-2).join("/")}function k3(J,z){let Y=z==="archived",G=new Map;for(let X of J){let Q=Gz(X.repo),f=G.get(Q)??{repo:X.repo,count:0};if(X.kind==="main")f.repo=X.repo;else if(X.archived===Y)f.count+=1;G.set(Q,f)}let Z=[...G.values()].map((X)=>X.repo);return[...G.values()].map((X)=>({repo:X.repo,label:ly(X.repo,Z),count:X.count})).sort((X,Q)=>X.label.localeCompare(Q.label))}function b3(J,z){if(J.length===0)return-1;if(!z)return J[0]?.flatIndex??-1;let Y=Gz(z),G=J.find((X)=>X.task.kind!=="main"&&Gz(X.task.repo)===Y);if(G)return G.flatIndex;return J.find((X)=>X.task.kind==="main"&&Gz(X.task.repo)===Y)?.flatIndex??J[0]?.flatIndex??-1}function w9(J){return J.map((z)=>z.task.id)}function S3(J,z,Y){let G=z.length;if(J===null){if(Y===-1&&G>0)return 0;if(Y>=G)return Math.max(0,G-1);if(G===0)return-1;return Y}let Z=z.indexOf(J);if(Z>=0)return Z;if(G===0)return-1;if(Y<0||Y>=G)return G-1;return Y}function I3(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 $y(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 T3(J,z){return RH(J,z,(Y)=>Y.task.id,(Y,G)=>Y.flatIndex===G.flatIndex&&$y(Y.task,G.task),{samePosition:!0})}var gH=()=>{};var y3={};f1(y3,{startQuickTaskHost:()=>ry});async function ay(J,z){let Y,G;if(z){let j=await IJ(z,["@kobe_task","@kobe_worktree"]);Y=j["@kobe_task"]||void 0,G=j["@kobe_worktree"]||void 0}let Z=(Y?J?.getTask(Y)?.repo:void 0)??gJ()[0],X=Z??G??process.cwd();if(!Z)return{ctx:null,fallbackRepo:X};let Q=await ez(),f=xJ(g1("lastSelectedVendor"),uJ()),H=Q.length===0||Q.includes(f)?f:Q[0]??f,B=ZQ(UJ(Z))??Cz,V=Q.length>0?Q:[H];return{ctx:{repo:Z,vendor:H,baseRef:B,engines:V},fallbackRepo:X}}async function _y(J,z,Y,G,Z){let X=await y9(J,z,Y,G),Q=C1(z.id),{pane:f}=await RX(Q,!X);if(f)await gX(f,Z)}function py(J){let{theme:z}=d0(),Y=c1();e1(()=>{G()});async function G(){let Z=J.ctx,X=await Y3.show(Y,{repoLabel:Nz(Z.repo),engines:Z.engines,defaultVendor:Z.vendor,defaultBaseRef:Z.baseRef,engineLabel:VG});if(X===void 0)process.exit(0);r1("lastSelectedVendor",X.vendor),pz(Z.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:Z.repo,baseRef:X.baseRef,vendor:X.vendor});await _y(Q,f,Z.repo,X.vendor,X.prompt),await FH(Q,f,Z.repo,X.vendor)}catch(f){console.error("[kobe quick-task] task.create/deliver failed:",f),process.exit(1)}process.exit(0)}return(()=>{var Z=W("box");return q(Z,"flexDirection","column"),q(Z,"flexGrow",1),y((X)=>q(Z,"backgroundColor",z.background,X)),Z})()}async function ry(J){await OJ({setup:async()=>{let z=null;try{let Z=await Az(),X=new KJ(Z);await X.init(),z=X}catch(Z){console.error("[kobe quick-task] daemon unavailable; cannot create task:",Z)}let{ctx:Y,fallbackRepo:G}=await ay(z,J.session);return{root:()=>Y?b(py,{ctx:Y,orchestrator:z}):b(AH,{defaultRepo:G,orchestrator:z}),onDestroy:()=>{z?.dispose()}}}})}var x3=k(()=>{P();P();P();P();FJ();j1();nY();YG();sJ();F1();P1();yq();i1();G3();v1();QH();aY();fH();OH();u9();gH();nJ()});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",Z=Y[2]??"";return`${G}${Z.length===1?Z.toUpperCase():Z}`}function CH(J,z){if(J.includes("/"))return J.split("/").map((Z)=>CH(Z,z)).join("/");let Y=J.toLowerCase();if(Y==="tab")return"tab";let G=sy[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,(Z)=>Z.toUpperCase())}function _Z(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("+")?_Z(f,z):CH(f,!0)}`}let Z=Y.split("+");if(Z.length===1)return CH(Z[0]??"",!1);let X=Z[Z.length-1]??"";return`${Z.slice(0,-1).map((f)=>oy[f.toLowerCase().trim()]??f).join("")} ${CH(X,!0)}`}var oy,sy;var P9=k(()=>{oy={ctrl:"\u2303",control:"\u2303",alt:"\u2325",opt:"\u2325",option:"\u2325",shift:"\u21E7",cmd:"\u2318",command:"\u2318",meta:"\u2318",super:"\u2318"},sy={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 u3}from"@opentui/core";function ty(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 pZ(J={}){let z=c1(),{theme:Y}=d0(),G=()=>ty(iY),Z=()=>J.onClose?J.onClose():z.clear(),[X,Q]=a("\u2303B");return e1(()=>{$0(["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:Z}]})),(()=>{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",Z),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(X1,{get each(){return G()},children:(L)=>(()=>{var A=W("box"),O=W("text");return D(A,O),q(A,"gap",0),U(O,()=>B9("category",L.category)),U(A,b(X1,{get each(){return L.rows},children:(g)=>{let x=g.hint?.keys??g.keys[0]??"\u2014",_=()=>x==="\u2014"?"\u2014":_Z(x,X()),S=()=>(g.hint?g.keys:g.keys.slice(1)).map((N)=>_Z(N,X()));return(()=>{var N=W("box"),M=W("box"),I=W("text"),r=W("box"),i=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,i),q(r,"flexGrow",1),U(i,()=>B9("desc",g.id)),U(N,(()=>{var e=x0(()=>S().length>0);return()=>e()?(()=>{var J0=W("box"),T=W("text");return D(J0,T),U(T,()=>`(${S().join(", ")})`),y((q0)=>q(T,"fg",Y.textMuted,q0)),J0})():null})(),null),y((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(i,"fg",T,e.t)),e},{e:void 0,t:void 0}),N})()}}),null),y((g)=>{var x=Y.accent,_=u3.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})()})),y((L)=>{var A=u3.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 h9=k(()=>{P();P();P();P();P();P();P();j1();P1();$Z();v1();ZJ();P9();yJ();nJ();pZ.show=(J)=>{J.replace(()=>b(pZ,{}))}});import{TextAttributes as ey}from"@opentui/core";function E3(J){let z=c1(),{theme:Y}=d0(),[G,Z]=a(J.currentTitle);function X(){let Q=G().trim();if(qQ(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)=>Z(DJ(O))),q(K,"onSubmit",()=>X()),D(L,A),q(L,"paddingBottom",1),U(A,()=>F("common.rename.footerHint",{submitLabel:J.submitLabel??F("common.rename.defaultSubmitLabel")})),y((O)=>{var g=ey.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 w3=k(()=>{P();P();P();P();P();P();P();ZJ();j1();v1();nJ();lZ()});function Jx(J,z,Y={}){return new Promise((G)=>{J.replace(()=>b(E3,{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:(Z)=>G(Z),onCancel:()=>G(void 0)}),()=>G(void 0))})}var VY;var v9=k(()=>{P();w3();VY={show:Jx}});import{TextAttributes as zx}from"@opentui/core";function Yx(J){if(!J)return J;return J.charAt(0).toUpperCase()+J.slice(1)}function KY(J){let z=c1(),{theme:Y}=d0(),[G,Z]=dz({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:()=>Z("active",G.active==="confirm"?"cancel":"confirm")},{key:"right",cmd:()=>Z("active",G.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(X1,{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,()=>Yx(j==="cancel"?J.label??F("common.cancel"):J.confirmLabel??F("common.confirm"))),y((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})()})),y((j)=>{var K=zx.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}),X})()}var m9=k(()=>{P();P();P();P();P();P();P();ZJ();j1();cZ();v1();yJ();nJ();KY.show=(J,z,Y,G,Z,X)=>{return new Promise((Q)=>{J.replace(()=>b(KY,{title:z,message:Y,onConfirm:()=>Q(!0),onCancel:()=>Q(!1),label:G,confirmLabel:Z,get initialActive(){return X?.initialActive}}),()=>Q(void 0)),J.setSize("small")})}});import{unlinkSync as Gx}from"fs";import{join as Zx}from"path";function P3(J){return J instanceof KJ}function h3(J,z){try{J?.destroy()}catch(Y){console.error(`kobe: renderer.destroy() failed during ${z}:`,Y)}}async function c9(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{Gx(Zx(bz(),".kobe","tasks.json"))}catch(Z){if(Z.code!=="ENOENT")console.error("kobe: failed to delete tasks.json during reset:",Z)}h3(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 v3=k(()=>{nY();p1();m9()});function Xx(J){return`theme:${J}`}function n9(J){return`language:${J}`}function i9(J){return`accent:${J}`}function Qx(J){return`engine:${J}`}function BQ(J){return`surface:${J}`}function l9(J){return[...J.themeNames.map((z)=>({id:Xx(z),kind:"theme",name:z})),...EG.map((z)=>({id:n9(z.id),kind:"language",locale:z.id})),{id:"transparent",kind:"transparent"},...J.focusAccentSlots.map((z)=>({id:i9(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 qx(J){return[...J.map((z)=>({id:Qx(z),kind:"engine",vendor:z})),{id:"add-engine",kind:"engineAdd"}]}function fx(){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 m3(J,z){switch(J){case"general":return l9(z);case"engines":return qx(z.engineList);case"accounts":case"keys":return[];case"feedback":return fx();case"dev":return jQ(z.hasDaemon)}}function WQ(J,z){return J.findIndex((Y)=>Y.id===z)}function kH(J,z){return J[z]}var hG;var $9=k(()=>{iZ();hG=[{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 c3(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(X1,{each:hG,children:(G,Z)=>{let X=()=>Z()===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(G.id)),q(H,"wrapMode","none"),U(H,()=>F(`settings.sections.${G.id}`)),y((B)=>{var V=Q()?z.primary:void 0,j=Q()?z.selectedListItemText:X()?z.accent:z.textMuted,K=X()?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 d3(J){let z=d0(),{theme:Y}=z,G=()=>l9({themeNames:J.themeNames(),focusAccentSlots:uG}),Z=(M)=>WQ(G(),M),X=()=>Z("transparent"),Q=()=>Z("toast"),f=()=>Z("sound"),H=()=>Z("zen-keep-tasks"),B=()=>Z(BQ("chattab")),V=()=>Z(BQ("taskpanel")),j=()=>Z("editor-kind"),K=()=>Z("editor-custom"),L=()=>J.bodyRow()===X(),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"),i=W("box"),e=W("box"),J0=W("text"),T=W("text"),q0=W("box"),p=W("text"),B0=W("text"),L0=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"),X0=W("text"),F0=E0(" "),P0=W("box"),A0=W("text"),N0=E0(" "),u=W("box"),g0=W("text"),Q0=W("text"),R0=W("box"),y0=W("text"),H1=E0(" "),G1=W("box"),w0=W("text"),o0=W("text"),$=W("box"),W0=W("text"),T0=E0(" "),s0=W("box"),a0=W("text"),_0=E0(" "),t0=W("box"),N1=W("text"),R1=W("text"),z0=W("box"),G0=W("text"),H0=W("box"),k0=W("text");return D(M,I),D(M,r),D(M,i),D(M,e),D(M,q0),D(M,t),D(M,o),D(M,u),D(M,G1),D(M,t0),q(M,"flexDirection","column"),q(M,"gap",1),U(I,()=>F("settings.general.theme")),U(r,()=>F("settings.general.themeHint")),q(i,"flexDirection","column"),q(i,"gap",0),U(i,b(X1,{get each(){return J.themeNames()},children:(R,h0)=>{let U0=()=>J.level()==="body"&&J.bodyRow()===h0(),u0=()=>R===z.selected;return(()=>{var j0=W("box"),D0=W("text");return D(j0,D0),q(j0,"flexDirection","row"),q(j0,"gap",1),q(j0,"paddingLeft",1),q(j0,"paddingRight",1),q(j0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(h0()),J.setThemeCursor(h0()),J.selectTheme(R)}),q(D0,"wrapMode","none"),U(D0,()=>u0()?"\u25CF ":" ",null),U(D0,R,null),y((C0)=>{var J1=U0()?Y.primary:void 0,z1=U0()?Y.selectedListItemText:u0()?Y.accent:Y.text,n0=U0()||u0()?e0.BOLD:void 0;return J1!==C0.e&&(C0.e=q(j0,"backgroundColor",J1,C0.e)),z1!==C0.t&&(C0.t=q(D0,"fg",z1,C0.t)),n0!==C0.a&&(C0.a=q(D0,"attributes",n0,C0.a)),C0},{e:void 0,t:void 0,a:void 0}),j0})()}})),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(X1,{each:EG,children:(R)=>{let h0=()=>Z(n9(R.id)),U0=()=>J.level()==="body"&&J.bodyRow()===h0(),u0=()=>J.currentLocale()===R.id;return(()=>{var j0=W("box"),D0=W("text");return D(j0,D0),q(j0,"flexDirection","row"),q(j0,"gap",1),q(j0,"paddingLeft",1),q(j0,"paddingRight",1),q(j0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(h0()),J.selectLanguage(R.id)}),q(D0,"wrapMode","none"),U(D0,()=>u0()?"\u25CF ":" ",null),U(D0,()=>R.label,null),y((C0)=>{var J1=U0()?Y.primary:void 0,z1=U0()?Y.selectedListItemText:u0()?Y.accent:Y.text,n0=U0()||u0()?e0.BOLD:void 0;return J1!==C0.e&&(C0.e=q(j0,"backgroundColor",J1,C0.e)),z1!==C0.t&&(C0.t=q(D0,"fg",z1,C0.t)),n0!==C0.a&&(C0.a=q(D0,"attributes",n0,C0.a)),C0},{e:void 0,t:void 0,a:void 0}),j0})()}}),null),D(q0,p),D(q0,B0),D(q0,L0),q(q0,"flexDirection","column"),q(q0,"gap",0),q(q0,"paddingTop",1),U(p,()=>F("settings.general.transparent")),q(B0,"wrapMode","word"),U(B0,()=>F("settings.general.transparentHint")),D(L0,V0),q(L0,"flexDirection","row"),q(L0,"paddingLeft",1),q(L0,"paddingRight",1),q(L0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(X()),J.toggleTransparent()}),q(V0,"wrapMode","none"),U(V0,(()=>{var R=x0(()=>!!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(X1,{each:uG,children:(R)=>{let h0=()=>Z(i9(R)),U0=()=>J.level()==="body"&&J.bodyRow()===h0(),u0=()=>z.focusAccent===R;return(()=>{var j0=W("box"),D0=W("text");return D(j0,D0),q(j0,"flexDirection","row"),q(j0,"gap",1),q(j0,"paddingLeft",1),q(j0,"paddingRight",1),q(j0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(h0()),J.selectFocusAccent(R)}),q(D0,"wrapMode","none"),U(D0,()=>u0()?"\u25CF ":" ",null),U(D0,()=>F(`settings.general.accent${R.charAt(0).toUpperCase()}${R.slice(1)}`),null),y((C0)=>{var J1=U0()?Y.primary:void 0,z1=U0()?Y.selectedListItemText:u0()?Y.focusAccent:Y.text,n0=U0()||u0()?e0.BOLD:void 0;return J1!==C0.e&&(C0.e=q(j0,"backgroundColor",J1,C0.e)),z1!==C0.t&&(C0.t=q(D0,"fg",z1,C0.t)),n0!==C0.a&&(C0.a=q(D0,"attributes",n0,C0.a)),C0},{e:void 0,t:void 0,a:void 0}),j0})()}}),null),D(o,E),D(o,c),D(o,s),D(o,P0),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,X0),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(X0,F0),q(X0,"wrapMode","none"),U(X0,()=>J.toastEnabled()?"[x]":"[ ]",F0),U(X0,()=>F("settings.general.toast"),null),D(P0,A0),q(P0,"flexDirection","row"),q(P0,"gap",1),q(P0,"paddingLeft",1),q(P0,"paddingRight",1),q(P0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(f()),J.toggleSound()}),D(A0,N0),q(A0,"wrapMode","none"),U(A0,()=>J.soundEnabled()?"[x]":"[ ]",N0),U(A0,()=>F("settings.general.sound"),null),D(u,g0),D(u,Q0),D(u,R0),q(u,"flexDirection","column"),q(u,"gap",0),q(u,"paddingTop",1),U(g0,()=>F("settings.general.zen")),q(Q0,"wrapMode","word"),U(Q0,()=>F("settings.general.zenHint")),D(R0,y0),q(R0,"flexDirection","row"),q(R0,"gap",1),q(R0,"paddingLeft",1),q(R0,"paddingRight",1),q(R0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(H()),J.toggleZenKeepsTasks()}),D(y0,H1),q(y0,"wrapMode","none"),U(y0,()=>J.zenKeepsTasks()?"[x]":"[ ]",H1),U(y0,()=>F("settings.general.zenKeepTasks"),null),D(G1,w0),D(G1,o0),D(G1,$),D(G1,s0),q(G1,"flexDirection","column"),q(G1,"gap",0),q(G1,"paddingTop",1),U(w0,()=>F("settings.general.surface")),q(o0,"wrapMode","word"),U(o0,()=>F("settings.general.surfaceHint")),D($,W0),q($,"flexDirection","row"),q($,"gap",1),q($,"paddingLeft",1),q($,"paddingRight",1),q($,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(B()),J.selectSurface("chattab")}),D(W0,T0),q(W0,"wrapMode","none"),U(W0,()=>J.settingsSurface()==="chattab"?"[x]":"[ ]",T0),U(W0,()=>F("settings.general.surfaceChattab"),null),D(s0,a0),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(a0,_0),q(a0,"wrapMode","none"),U(a0,()=>J.settingsSurface()==="taskpanel"?"[x]":"[ ]",_0),U(a0,()=>F("settings.general.surfaceTaskpanel"),null),D(t0,N1),D(t0,R1),D(t0,z0),D(t0,H0),q(t0,"flexDirection","column"),q(t0,"gap",0),q(t0,"paddingTop",1),U(N1,()=>F("settings.general.editor")),q(R1,"wrapMode","word"),U(R1,()=>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(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(K()),J.editEditorCustom()}),q(k0,"wrapMode","none"),U(k0,()=>F("settings.general.editorCustom",{cmd:J.editorCustomCommand().trim()||F("settings.general.editorCustomUnset")})),y((R)=>{var h0=Y.text,U0=e0.BOLD,u0=Y.textMuted,j0=Y.text,D0=e0.BOLD,C0=Y.textMuted,J1=Y.text,z1=e0.BOLD,n0=Y.textMuted,x1=L()?Y.primary:void 0,b0=L()?Y.selectedListItemText:z.transparentBackground?Y.accent:Y.textMuted,m1=e0.BOLD,v=Y.text,O0=e0.BOLD,W1=Y.textMuted,A1=Y.text,B1=e0.BOLD,d=Y.textMuted,Y0=A()?Y.primary:void 0,I0=A()?Y.selectedListItemText:J.toastEnabled()?Y.accent:Y.textMuted,S0=e0.BOLD,BJ=O()?Y.primary:void 0,LJ=O()?Y.selectedListItemText:J.soundEnabled()?Y.accent:Y.textMuted,XJ=e0.BOLD,iJ=Y.text,iz=e0.BOLD,AJ=Y.textMuted,lz=g()?Y.primary:void 0,UY=g()?Y.selectedListItemText:J.zenKeepsTasks()?Y.accent:Y.textMuted,m=e0.BOLD,n=Y.text,l=e0.BOLD,w=Y.textMuted,m0=x()?Y.primary:void 0,v0=x()?Y.selectedListItemText:J.settingsSurface()==="chattab"?Y.accent:Y.textMuted,M0=e0.BOLD,c0=_()?Y.primary:void 0,q1=_()?Y.selectedListItemText:J.settingsSurface()==="taskpanel"?Y.accent:Y.textMuted,L1=e0.BOLD,jJ=Y.text,Zz=e0.BOLD,DY=Y.textMuted,VW=S()?Y.primary:void 0,KW=S()?Y.selectedListItemText:Y.accent,UW=e0.BOLD,DW=N()?Y.primary:void 0,LW=N()?Y.selectedListItemText:J.editorKind()==="custom"?Y.text:Y.textMuted;return h0!==R.e&&(R.e=q(I,"fg",h0,R.e)),U0!==R.t&&(R.t=q(I,"attributes",U0,R.t)),u0!==R.a&&(R.a=q(r,"fg",u0,R.a)),j0!==R.o&&(R.o=q(J0,"fg",j0,R.o)),D0!==R.i&&(R.i=q(J0,"attributes",D0,R.i)),C0!==R.n&&(R.n=q(T,"fg",C0,R.n)),J1!==R.s&&(R.s=q(p,"fg",J1,R.s)),z1!==R.h&&(R.h=q(p,"attributes",z1,R.h)),n0!==R.r&&(R.r=q(B0,"fg",n0,R.r)),x1!==R.d&&(R.d=q(L0,"backgroundColor",x1,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)),O0!==R.w&&(R.w=q(h,"attributes",O0,R.w)),W1!==R.m&&(R.m=q(C,"fg",W1,R.m)),A1!==R.f&&(R.f=q(E,"fg",A1,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)),I0!==R.b&&(R.b=q(X0,"fg",I0,R.b)),S0!==R.T&&(R.T=q(X0,"attributes",S0,R.T)),BJ!==R.A&&(R.A=q(P0,"backgroundColor",BJ,R.A)),LJ!==R.O&&(R.O=q(A0,"fg",LJ,R.O)),XJ!==R.I&&(R.I=q(A0,"attributes",XJ,R.I)),iJ!==R.S&&(R.S=q(g0,"fg",iJ,R.S)),iz!==R.W&&(R.W=q(g0,"attributes",iz,R.W)),AJ!==R.C&&(R.C=q(Q0,"fg",AJ,R.C)),lz!==R.B&&(R.B=q(R0,"backgroundColor",lz,R.B)),UY!==R.v&&(R.v=q(y0,"fg",UY,R.v)),m!==R.k&&(R.k=q(y0,"attributes",m,R.k)),n!==R.x&&(R.x=q(w0,"fg",n,R.x)),l!==R.j&&(R.j=q(w0,"attributes",l,R.j)),w!==R.q&&(R.q=q(o0,"fg",w,R.q)),m0!==R.z&&(R.z=q($,"backgroundColor",m0,R.z)),v0!==R.P&&(R.P=q(W0,"fg",v0,R.P)),M0!==R.H&&(R.H=q(W0,"attributes",M0,R.H)),c0!==R.F&&(R.F=q(s0,"backgroundColor",c0,R.F)),q1!==R.M&&(R.M=q(a0,"fg",q1,R.M)),L1!==R.D&&(R.D=q(a0,"attributes",L1,R.D)),jJ!==R.R&&(R.R=q(N1,"fg",jJ,R.R)),Zz!==R.E&&(R.E=q(N1,"attributes",Zz,R.E)),DY!==R.L&&(R.L=q(R1,"fg",DY,R.L)),VW!==R.N&&(R.N=q(z0,"backgroundColor",VW,R.N)),KW!==R.G&&(R.G=q(G0,"fg",KW,R.G)),UW!==R.U&&(R.U=q(G0,"attributes",UW,R.U)),DW!==R.K&&(R.K=q(H0,"backgroundColor",DW,R.K)),LW!==R.V&&(R.V=q(k0,"fg",LW,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 n3(J){let{theme:z}=d0(),Y=()=>J.vendors.length;return(()=>{var G=W("box"),Z=W("text"),X=W("text"),Q=W("box"),f=W("box"),H=W("text");return D(G,Z),D(G,X),D(G,Q),q(G,"flexDirection","column"),q(G,"gap",1),U(Z,()=>F("settings.engines.title")),q(X,"wrapMode","word"),U(X,()=>F("settings.engines.hint")),D(Q,f),q(Q,"flexDirection","column"),q(Q,"gap",0),U(Q,b(X1,{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=x0(()=>!!J.isDefault(B));return()=>g()?F("settings.engines.defaultTag"):x0(()=>!!J.isCustom(B))()?F("settings.engines.customTag"):""})(),null),y((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")),y((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(Z,"fg",V,B.e)),j!==B.t&&(B.t=q(Z,"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}),G})()}function i3(J){let{theme:z}=d0(),Y=(G)=>G.binary.found?`Binary: ${G.binary.path}`:`Binary: ${G.binary.error}`;return(()=>{var G=W("box"),Z=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(G,Z),D(G,X),D(G,Q),D(G,H),D(G,V),q(G,"flexDirection","column"),q(G,"gap",1),U(Z,()=>F("settings.accounts.title")),q(X,"wrapMode","word"),U(X,()=>F("settings.accounts.hint")),D(Q,f),q(Q,"flexDirection","column"),q(Q,"gap",0),D(f,E0("claude-code")),U(Q,b(Z0,{get when(){return J.claudeStatus()===null},get children(){var K=W("text");return U(K,()=>F("settings.accounts.checking")),y((L)=>q(K,"fg",z.textMuted,L)),K}}),null),U(Q,b(Z0,{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),y((_)=>q(x,"fg",z.success,_)),x})()}return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.notLoggedIn")),y((x)=>q(g,"fg",z.textMuted,x)),g})()},null),U(L,b(Z0,{get when(){return K().accountError},children:(O)=>(()=>{var g=W("text");return q(g,"wrapMode","word"),U(g,()=>`! ${O()}`),y((x)=>q(g,"fg",z.warning,x)),g})()}),null),y((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(Z0,{get when(){return J.codexStatus()===null},get children(){var K=W("text");return U(K,()=>F("settings.accounts.checking")),y((L)=>q(K,"fg",z.textMuted,L)),K}}),null),U(H,b(Z0,{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=x0(()=>!!O.plan);return()=>x()?` (${O.plan})`:""})(),null),y((x)=>q(g,"fg",z.success,x)),g})();if(O.kind==="apikey")return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.apiKeyConfigured")),y((x)=>q(g,"fg",z.success,x)),g})();return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.notLoggedIn")),y((x)=>q(g,"fg",z.textMuted,x)),g})()},null),U(L,b(Z0,{get when(){return K().accountError},children:(O)=>(()=>{var g=W("text");return q(g,"wrapMode","word"),U(g,()=>`! ${O()}`),y((x)=>q(g,"fg",z.warning,x)),g})()}),null),y((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(Z0,{get when(){return J.copilotStatus()===null},get children(){var K=W("text");return U(K,()=>F("settings.accounts.checking")),y((L)=>q(K,"fg",z.textMuted,L)),K}}),null),U(V,b(Z0,{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})),y((x)=>q(g,"fg",z.success,x)),g})();if(O.kind==="oauth")return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.copilotDetected")),y((x)=>q(g,"fg",z.success,x)),g})();return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.notLoggedIn")),y((x)=>q(g,"fg",z.textMuted,x)),g})()},null),U(L,b(Z0,{get when(){return K().accountError},children:(O)=>(()=>{var g=W("text");return q(g,"wrapMode","word"),U(g,()=>`! ${O()}`),y((x)=>q(g,"fg",z.warning,x)),g})()}),null),y((O)=>q(A,"fg",K().binary.found?z.textMuted:z.warning,O)),L})()}),null),y((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(Z,"fg",L,K.e)),A!==K.t&&(K.t=q(Z,"attributes",A,K.t)),O!==K.a&&(K.a=q(X,"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 l3(J){let{theme:z}=d0(),Y=()=>J.level()==="body",G=()=>Y()&&J.bodyRow()===0,Z=()=>Y()&&J.bodyRow()===1,X=()=>Y()&&J.bodyRow()===2,Q=(B)=>B?z.primary:z.textMuted,f=(B)=>B?e0.BOLD|e0.UNDERLINE:void 0,H;return r0(()=>{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(DJ(M))),q(O,"onSubmit",()=>J.onTitleSubmit()),D(g,x),D(g,_),q(g,"gap",0),U(x,()=>F("settings.feedback.descriptionLabel")),cz((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(Z0,{get when(){return J.status()},get children(){var M=W("text");return q(M,"wrapMode","word"),U(M,()=>J.status()),y((I)=>q(M,"fg",J.status().startsWith("error:")?z.warning:z.success,I)),M}}),null),y((M)=>{var I=z.text,r=e0.BOLD,i=z.textMuted,e=Q(G()),J0=f(G()),T=J.title(),q0=F("settings.feedback.titlePlaceholder"),p=G(),B0=Q(Z()),L0=f(Z()),V0=J.body(),t=F("settings.feedback.descriptionPlaceholder"),h=Z(),C=X()?z.primary:z.backgroundElement,o=X()?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)),i!==M.a&&(M.a=q(j,"fg",i,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)),B0!==M.r&&(M.r=q(x,"fg",B0,M.r)),L0!==M.d&&(M.d=q(x,"attributes",L0,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 $3(J){let{theme:z}=d0(),Y=()=>J.level()==="body"&&J.bodyRow()===0,G=()=>J.level()==="body"&&J.bodyRow()===1,Z=()=>WQ(jQ(J.hasDaemon),"remote-projects"),X=()=>J.level()==="body"&&J.bodyRow()===Z(),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"),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"),i=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(Z0,{get when(){return J.hasDaemon},get children(){var T=W("box"),q0=W("text"),p=W("text"),B0=W("box"),L0=W("text");return D(T,q0),D(T,p),D(T,B0),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(B0,L0),q(B0,"flexDirection","row"),q(B0,"paddingLeft",1),q(B0,"paddingRight",1),q(B0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(1),J.confirmRestartDaemon()}),U(L0,()=>F("settings.dev.restartButton")),y((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(B0,"backgroundColor",o,V0.o)),E!==V0.i&&(V0.i=q(L0,"fg",E,V0.i)),c!==V0.n&&(V0.n=q(L0,"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,i),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(Z()),J.toggleRemoteProjects()}),U(N,(()=>{var T=x0(()=>!!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=x0(()=>!!J.autoStatusEnabled());return()=>T()?F("settings.dev.autoStatusOn"):F("settings.dev.autoStatusOff")})()),q(i,"wrapMode","word"),U(i,()=>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=x0(()=>!!J.dispatcherEnabled());return()=>T()?F("settings.dev.dispatcherOn"):F("settings.dev.dispatcherOff")})()),y((T)=>{var q0=z.text,p=e0.BOLD,B0=z.textMuted,L0=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=X()?z.primary:z.backgroundElement,s=X()?z.selectedListItemText:z.text,X0=J.remoteProjectsEnabled()?e0.BOLD:void 0,F0=z.textMuted,P0=f()?z.primary:z.backgroundElement,A0=f()?z.selectedListItemText:z.text,N0=J.autoStatusEnabled()?e0.BOLD:void 0,u=z.textMuted,g0=B()?z.primary:z.backgroundElement,Q0=B()?z.selectedListItemText:z.text,R0=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)),B0!==T.a&&(T.a=q(K,"fg",B0,T.a)),L0!==T.o&&(T.o=q(L,"backgroundColor",L0,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)),X0!==T.c&&(T.c=q(N,"attributes",X0,T.c)),F0!==T.w&&(T.w=q(M,"fg",F0,T.w)),P0!==T.m&&(T.m=q(I,"backgroundColor",P0,T.m)),A0!==T.f&&(T.f=q(r,"fg",A0,T.f)),N0!==T.y&&(T.y=q(r,"attributes",N0,T.y)),u!==T.g&&(T.g=q(i,"fg",u,T.g)),g0!==T.p&&(T.p=q(e,"backgroundColor",g0,T.p)),Q0!==T.b&&(T.b=q(J0,"fg",Q0,T.b)),R0!==T.T&&(T.T=q(J0,"attributes",R0,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 a3(){let{theme:J}=d0(),z=f3(),Y=Object.keys(JB).sort();return(()=>{var G=W("box"),Z=W("text"),X=W("text"),Q=W("box"),f=W("text"),H=W("text"),B=W("text"),V=W("text");return D(G,Z),D(G,X),D(G,Q),D(G,B),D(G,V),q(G,"flexDirection","column"),q(G,"gap",1),U(Z,()=>F("settings.keybindings.title")),q(X,"wrapMode","word"),U(X,()=>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=x0(()=>!!z.exists);return()=>j()?"":F("settings.keybindings.notCreated")})(),null),U(G,b(Z0,{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]")),y((I)=>{var r=J.text,i=e0.BOLD,e=J.textMuted,J0=J.textMuted,T=J.textMuted,q0=J.textMuted,p=J.textMuted,B0=J.textMuted,L0=J.textMuted,V0=J.textMuted,t=J.textMuted;return r!==I.e&&(I.e=q(K,"fg",r,I.e)),i!==I.t&&(I.t=q(K,"attributes",i,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)),B0!==I.h&&(I.h=q(_,"fg",B0,I.h)),L0!==I.r&&(I.r=q(S,"fg",L0,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(Z0,{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(Z0,{get when(){return z.applied.length===0},get children(){var L=W("text");return U(L,()=>F("settings.keybindings.none")),y((A)=>q(L,"fg",J.textMuted,A)),L}}),null),U(j,b(X1,{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(" / ")})`),y((O)=>q(A,"fg",J.text,O)),A})()}),null),y((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(Z0,{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(X1,{get each(){return z.warnings},children:(L)=>(()=>{var A=W("text");return q(A,"wrapMode","word"),U(A,`! ${L}`),y((O)=>q(A,"fg",J.warning,O)),A})()}),null),y((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(", ")}.`),y((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(Z,"fg",K,j.e)),L!==j.t&&(j.t=q(Z,"attributes",L,j.t)),A!==j.a&&(j.a=q(X,"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 _3=k(()=>{P();P();P();P();P();P();P();P();P();j1();b9();v1();ZJ();iZ();Sq();lZ();$9()});import{TextAttributes as Hx}from"@opentui/core";function Bx(J){return J.split(/[-_]+/).filter((z)=>z.length>0).map((z)=>z.charAt(0).toUpperCase()+z.slice(1)).join(" ")}function vG(J){let z=c1(),Y=d0(),G=fJ(),{theme:Z}=Y,[X,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=P3(J.orchestrator),[I,r]=a(null),[i,e]=a(null),[J0,T]=a(null),q0=!1;r0(()=>{if(f()!=="accounts"||q0)return;q0=!0,mQ().then(r),cQ().then(e),dQ().then(T)});function p(){return m3(f(),{themeNames:S(),focusAccentSlots:uG,engineList:w0(),hasDaemon:M})}function B0(){return p().length}function L0(){return SG(J.kv.get(QY,bG))}function V0(v){if(Y.selected===v)return;if(!Y.set(v))return;J.kv.set("activeTheme",v),J.onVisualPrefsChange?.()}function t(){return H9()}function h(v){if(H9()===v)return;GQ(v),J.kv.set(MH,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 X0(){return J.kv.get("notifications.sound.enabled",!0)!==!1}function F0(){J.kv.set("notifications.toast.enabled",!s())}function P0(){J.kv.set("notifications.sound.enabled",!X0())}function A0(){return J.kv.get(iq,!0)!==!1}function N0(){J.kv.set(iq,!A0())}function u(){return J.kv.get("experimental.remoteProjects",!1)===!0}function g0(){J.kv.set("experimental.remoteProjects",!u())}function Q0(){return J.kv.get(jG,!1)===!0}function R0(){J.kv.set(jG,!Q0())}function y0(){return J.kv.get(WG,!1)===!0}function H1(){J.kv.set(WG,!y0())}function G1(){let v=J.kv.get("customEngineIds",[]);return Array.isArray(v)?v.filter((O0)=>typeof O0==="string"&&O0.trim().length>0):[]}function w0(){return[...n1,...G1()]}function o0(v){let O0=J.kv.get(Kz(v),"");return typeof O0==="string"?O0.trim():""}function $(v){return o0(v)||AX(v).join(" ")}function W0(v){return QJ(v)&&o0(v).length===0&&!s0(v)}function T0(v){let O0=J.kv.get(Uz(v),"");return typeof O0==="string"?O0.trim():""}function s0(v){return T0(v).length>0}function a0(v){return T0(v)||t8[v]||v}let[_0,t0]=a(xJ(g1("lastSelectedVendor"),G1()));function N1(v){return _0()===v}function R1(v){r1("lastSelectedVendor",v),J.kv.set("lastSelectedVendor",v),t0(v)}async function z0(v){let O0=await VY.show(z,$(v),{dialogTitle:`${a0(v)} launch command`,fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(O0===void 0)return;J.kv.set(Kz(v),O0.trim())}async function G0(v){let O0=await VY.show(z,a0(v),{dialogTitle:`${a0(v)} display name (blank = default)`,fieldLabel:"name",submitLabel:"save",allowEmpty:!0});if(O0===void 0)return;J.kv.set(Uz(v),O0.trim())}function H0(v){if(J.kv.set(Kz(v),""),J.kv.set(Uz(v),""),!QJ(v))J.kv.set("customEngineIds",G1().filter((O0)=>O0!==v)),K((O0)=>Math.max(0,Math.min(O0,w0().length)))}async function k0(){let v=await VY.show(z,"",{dialogTitle:"Add engine",fieldLabel:"id",submitLabel:"next",placeholder:"lowercase slug, e.g. aider"});if(v===void 0)return;let O0=v.trim().toLowerCase();if(!O0||QJ(O0)||G1().includes(O0))return;let W1=await VY.show(z,"",{dialogTitle:`Add engine \xB7 ${O0}`,fieldLabel:"command",submitLabel:"next",placeholder:"e.g. aider --model sonnet"});if(W1===void 0)return;let A1=await VY.show(z,O0,{dialogTitle:`Add engine \xB7 ${O0}`,fieldLabel:"name",submitLabel:"add",allowEmpty:!0});if(J.kv.set("customEngineIds",[...G1(),O0]),W1.trim())J.kv.set(Kz(O0),W1.trim());let B1=A1?.trim()??"";J.kv.set(Uz(O0),B1&&B1!==O0?B1:Bx(O0))}function R(){if(f()!=="engines"||X()!=="body")return null;let v=kH(p(),j());return v?.kind==="engine"?v.vendor:null}function h0(){return RZ(J.kv.get(XY,gf))}function U0(){let v=kG.indexOf(h0()),O0=kG[(v+1)%kG.length];if(O0)J.kv.set(XY,O0)}function u0(){let v=J.kv.get(wY,"");return typeof v==="string"?v:""}async function j0(){let v=await VY.show(z,u0(),{dialogTitle:"Custom editor command (use {file} for the path)",fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(v===void 0)return;let O0=v.trim();if(J.kv.set(wY,O0),O0)J.kv.set(XY,"custom")}async function D0(){_("submitting...");try{let v=EZ({title:L(),body:O()});_(`sent: ${v.url}`),A(""),g(""),K(0)}catch(v){_(`error: ${v instanceof Error?v.message:String(v)}`)}}let C0=()=>f()==="feedback"&&X()==="body";function J1(v){let O0=j()+v;if(O0<0||O0>2){Q("sidebar");return}K(O0)}function z1(){if(X()!=="sidebar"||B0()===0)return;if(Q("body"),K(0),f()==="general")N(0)}function n0(v){if(X()==="sidebar"){let A1=(B()+v+hG.length)%hG.length;V(A1);let B1=hG[A1];if(B1)H(B1.id),K(0);return}let O0=B0();if(O0===0)return;let W1=(j()+v+O0)%O0;if(K(W1),kH(p(),W1)?.kind==="theme")N(W1)}function x1(v){H(v),V(hG.findIndex((O0)=>O0.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:()=>F0(),sound:()=>P0(),zenKeepTasks:()=>N0(),surface:(v)=>c(v.surface),editorKind:()=>U0(),editorCustom:()=>void j0(),engine:(v)=>void z0(v.vendor),engineAdd:()=>void k0(),feedbackTitle:()=>K(0),feedbackBody:()=>K(1),feedbackSend:()=>void D0(),devReset:()=>void c9(z,J.kv,G),devRestartDaemon:()=>void d9(z,J.orchestrator,G),devRemoteProjects:()=>g0(),devAutoStatus:()=>R0(),devDispatcher:()=>H1()};function m1(){let v=kH(p(),j());if(!v)return;b0[v.kind](v)}return D1(()=>({enabled:(!J.standalone||z.stack.length===0)&&!C0(),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 v=R();if(v)G0(v)}},{key:"x",cmd:()=>{let v=R();if(v)H0(v)}},{key:"d",cmd:()=>{let v=R();if(v)R1(v)}}]})),D1(()=>({enabled:C0(),bindings:[{key:"tab",cmd:()=>J1(1)},{key:"shift+tab",cmd:()=>J1(-1)}]})),D1(()=>({enabled:C0()&&j()===2,bindings:[{key:"return",cmd:()=>void D0()}]})),(()=>{var v=W("box"),O0=W("box"),W1=W("text"),A1=W("text"),B1=W("box"),d=W("box"),Y0=W("box"),I0=W("text");return D(v,O0),D(v,B1),D(v,Y0),q(v,"paddingLeft",2),q(v,"paddingRight",2),q(v,"paddingBottom",1),q(v,"gap",1),D(O0,W1),D(O0,A1),q(O0,"flexDirection","row"),q(O0,"justifyContent","space-between"),U(W1,()=>F("settings.title")),q(A1,"onMouseUp",()=>J.onClose()),U(A1,()=>F("settings.esc")),D(B1,d),q(B1,"flexDirection","row"),q(B1,"gap",2),U(B1,b(c3,{level:X,cursor:B,switchSection:x1}),d),q(d,"flexGrow",1),q(d,"flexShrink",1),q(d,"flexDirection","column"),q(d,"gap",1),U(d,b(Z0,{get when(){return f()==="general"},get children(){return b(d3,{level:X,bodyRow:j,setLevel:Q,setBodyRow:K,themeNames:S,setThemeCursor:N,selectTheme:V0,currentLocale:t,selectLanguage:h,toggleTransparent:o,selectFocusAccent:E,toastEnabled:s,soundEnabled:X0,toggleToast:F0,toggleSound:P0,zenKeepsTasks:A0,toggleZenKeepsTasks:N0,settingsSurface:L0,selectSurface:c,editorKind:h0,cycleEditorKind:U0,editorCustomCommand:u0,editEditorCustom:()=>void j0()})}}),null),U(d,b(Z0,{get when(){return f()==="engines"},get children(){return b(n3,{level:X,bodyRow:j,setLevel:Q,setBodyRow:K,get vendors(){return w0()},isCustom:(S0)=>!QJ(S0),displayName:a0,commandText:$,isDefault:W0,isDefaultEngine:N1,editEngine:(S0)=>void z0(S0),renameEngine:(S0)=>void G0(S0),resetEngine:H0,onAddEngine:()=>void k0()})}}),null),U(d,b(Z0,{get when(){return f()==="accounts"},get children(){return b(i3,{claudeStatus:I,codexStatus:i,copilotStatus:J0})}}),null),U(d,b(Z0,{get when(){return f()==="keys"},get children(){return b(a3,{})}}),null),U(d,b(Z0,{get when(){return f()==="feedback"},get children(){return b(l3,{level:X,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(Z0,{get when(){return f()==="dev"},get children(){return b($3,{level:X,bodyRow:j,setLevel:Q,setBodyRow:K,hasDaemon:M,confirmReset:()=>void c9(z,J.kv,G),confirmRestartDaemon:()=>void d9(z,J.orchestrator,G),remoteProjectsEnabled:u,toggleRemoteProjects:g0,autoStatusEnabled:Q0,toggleAutoStatus:R0,dispatcherEnabled:y0,toggleDispatcher:H1})}}),null),D(Y0,I0),q(Y0,"paddingTop",0),U(I0,(()=>{var S0=x0(()=>!!C0());return()=>S0()?F("settings.nav.feedback"):F("settings.nav.default")})()),y((S0)=>{var BJ=Hx.BOLD,LJ=Z.text,XJ=Z.textMuted,iJ=Z.textMuted;return BJ!==S0.e&&(S0.e=q(W1,"attributes",BJ,S0.e)),LJ!==S0.t&&(S0.t=q(W1,"fg",LJ,S0.t)),XJ!==S0.a&&(S0.a=q(A1,"fg",XJ,S0.a)),iJ!==S0.o&&(S0.o=q(I0,"fg",iJ,S0.o)),S0},{e:void 0,t:void 0,a:void 0,o:void 0}),v})()}var a9=k(()=>{P();P();P();P();P();P();P();P();j1();YG();sJ();nf();OX();Rq();F1();QB();i1();v1();ZJ();Cf();yJ();T9();nJ();v9();v3();$9();_3();vG.show=(J,z,Y)=>{let G=!1;return new Promise((Z)=>{J.replace(()=>b(vG,{kv:z,orchestrator:Y,onVisualPrefsChange:()=>{G=!0},onClose:()=>Z({visualPrefsChanged:G})}),()=>Z({visualPrefsChanged:G}))})}});import{TextAttributes as jx}from"@opentui/core";function r3(){let{theme:J}=d0(),z=mz(),Y=DH(),G=()=>Y.toasts().slice(-p3),Z=()=>Math.max(0,z().width-Wx-Vx),X=()=>Math.max(0,z().height-Kx-p3-1);return b(Z0,{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(X1,{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),y((A)=>{var O=H(),g=B(),x=jx.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})()}})),y((f)=>{var H=Z(),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 p3=4,Wx=40,Vx=2,Kx=2;var o3=k(()=>{P();P();P();P();P();P();P();j1();LH();v1()});import{TextAttributes as Ux}from"@opentui/core";function Dx(J,z){let Y=J?`v${J}`:F("update.skew.olderBuild");return F("update.skew.hint",{daemon:Y,clientVersion:z})}function s3(J){let{theme:z}=d0(),Y=()=>Math.max(4,J.width()-2);return b(Z0,{get when(){return J.stale()},get children(){var G=W("box"),Z=W("text"),X=W("box"),Q=W("text"),f=W("box"),H=W("text");return D(G,Z),D(G,X),D(G,f),q(G,"flexDirection","column"),q(G,"flexShrink",0),q(G,"paddingLeft",1),q(G,"paddingRight",1),q(G,"paddingBottom",1),q(Z,"wrapMode","none"),U(Z,()=>"\u2594".repeat(Y())),D(X,Q),q(X,"flexDirection","row"),q(X,"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,()=>Dx(J.daemonVersion(),J.clientVersion)),y((B)=>{var{warning:V,warning:j}=z,K=Ux.BOLD,L=z.text;return V!==B.e&&(B.e=q(Z,"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 t3=k(()=>{P();P();P();P();P();P();j1();v1();ZJ()});function e3(J,z){return J.find((Y)=>Y.id!==z&&!Y.archived)}async function Lx(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 G=C1(J.taskId),Z=e3(J.tasks,J.taskId);if(await Pz(G,Z?C1(Z.id):void 0).catch((X)=>{J.logger.error(`${J.logPrefix} switch-client failed:`,X)}),J.updateActiveTask)await J.orch.setActiveTask(Z?.id??null).catch(()=>{});return await eJ(G).catch((X)=>{J.logger.error(`${J.logPrefix} kill tmux session failed:`,X)}),{archived:Y,nextTask:Z}}async function Mx(J){let z=e3(J.tasks,J.taskId),Y=C1(J.taskId);if(J.switchBeforeKill)await Pz(Y,z?C1(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 eJ(Y).catch((G)=>{J.logger.error(`${J.logPrefix} kill tmux session failed:`,G)}),{nextTask:z}}async function JM(J,z){if(!J.orch)return;let Y=J.tasks().find((Z)=>Z.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 Lx({orch:J.orch,tasks:J.tasks(),taskId:z,logger:J.logger,logPrefix:J.logPrefix,updateActiveTask:J.updateActiveTask}))return;await J.reload?.()}async function zM(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 Z=!1;try{await J.orch.deleteTask(z),Z=!0}catch(Q){if((Q instanceof Error?Q.message:String(Q)).includes(l8)){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}),Z=!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(!Z)return;let{nextTask:X}=await Mx({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 YM(J,z){let Y=J.tasks().find((Z)=>Z.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(Z){J.logger.error(`${J.logPrefix} task.rename failed:`,Z),J.notifyError?.(`Couldn't rename task: ${Z instanceof Error?Z.message:String(Z)}`);return}await J.reload?.()}async function GM(J,z){let Y=J.tasks().find((Z)=>Z.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(Z){J.logger.error(`${J.logPrefix} task.setBranch failed:`,Z),J.notifyError?.(`Couldn't rename branch: ${Z instanceof Error?Z.message:String(Z)}`);return}await J.reload?.()}async function ZM(J,z){let Y=J.tasks().find((X)=>X.id===z);if(!Y||!J.orch)return;let G=await ez(),Z=LY(G,Y.vendor??$1);try{await J.orch.setVendor(z,Z)}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 ${VG(Z)} (applies on reopen)`),await J.reload?.()}async function XM(J){let z=gJ(),Y=J.cursorRepo()??z[0]??process.cwd();if(J.openCreateSurface&&await J.openCreateSurface(Y))return;let G=J.lastVendor()??$1,Z=await ez();if(Z.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:G,availableVendors:Z,discoverAdoptable:X?(H)=>X.discoverAdoptableWorktrees(H):void 0});if(!Q)return;if(J.rememberVendor(Q.vendor),pz(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?.(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 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 QM=k(()=>{YG();sJ();_8();F1();ZJ();rJ();i1();zJ()});import{spawn as Fx}from"child_process";import{existsSync as Ox}from"fs";import{basename as Ax,delimiter as Rx,isAbsolute as gx,join as Cx}from"path";function _9(J,z,Y){if(gx(J))return Y(J);let G=z.PATH??"";for(let Z of G.split(Rx)){if(!Z)continue;if(Y(Cx(Z,J)))return!0}return!1}function bx(J){let z=Ax(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 qM(J={}){let z=J.env??process.env,Y=J.platform??process.platform,G=J.exists??Ox,Z=z.KOBE_OPEN_EDITOR?.trim();if(Z)return{id:"env",label:bx(Z),command:Z,args:[]};for(let X of Nx)if(_9(X.command,z,G))return{id:X.id,label:X.label,command:X.command,args:[]};if(Y==="darwin"&&_9("open",z,G)){for(let X of kx)if(X.paths.some((Q)=>G(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"&&_9("xdg-open",z,G))return{id:"xdg-open",label:"Open",command:"xdg-open",args:[]};return null}function Sx(J,z){return[z.command,[...z.args,J]]}function fM(J,z,Y={}){if(!J)return!1;let G=Y.spawn??Fx,[Z,X]=Sx(J,z);try{let Q=G(Z,X,{detached:!0,stdio:"ignore"});if(Q.pid===void 0)return!1;return Q.unref(),!0}catch{return!1}}var Nx,kx;var HM=k(()=>{Nx=[{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"}],kx=[{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 Z=z.get(G);if(!Z){let[X,Q]=a(J.initial,J.equals?{equals:J.equals}:void 0);Z={read:X,write:(f)=>Q(()=>f),inFlight:!1,nextAllowedAt:0},z.set(G,Z)}return Z}return{read(G){if(!G)return J.initial;return Y(G).read()},poll(G){if(!G)return;let Z=Y(G);tG(Z,J,(X)=>J.run(G,X),(X)=>Z.write(X))},reset(){z.clear()}}}var VQ=k(()=>{j1();eG();eG()});import{stat as Ix}from"fs/promises";import{join as Tx}from"path";async function Ex(J){try{let z=await Ix(Tx(J,".git","HEAD"));return`${z.mtimeMs}:${z.size}`}catch{return null}}async function wx(J,z,Y=zY){let G=await Ex(J);if(G!==null){let f=BM.get(J);if(f&&f.fingerprint===G)return f.value}let Z="",X=await Y("git",["symbolic-ref","--short","HEAD"],{cwd:J,env:cJ(),signal:z}),Q=X.status===0?X.stdout.trim():"";if(Q&&Q!=="HEAD")Z=Q;else if((await Y("git",["rev-parse","--verify","HEAD"],{cwd:J,env:cJ(),signal:z})).status===0)Z="(detached)";if(G!==null)BM.set(J,{fingerprint:G,value:Z});return Z}function WM(J){return jM.read(J)}function VM(J){jM.poll(J)}var yx=2000,xx=30000,ux=1500,BM,jM;var KM=k(()=>{PY();VQ();BM=new Map;jM=bH({initial:"",timeoutMs:yx,slowRetryMs:xx,minIntervalMs:ux,run:(J,z)=>wx(J,z)})});function p9(J){let z=J.scheduleTimeout??((H,B)=>{let V=setTimeout(H,B);return()=>clearTimeout(V)}),Y=!1,G=null,Z=()=>{Y=!0,G?.(),G=z(()=>{Y=!1,G=null},700)},X=()=>{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(){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 Z()},pressShiftG(){X(),f(J.getFlatIds().length-1)},isChordArmed(){return Y},disarmChord(){X()}}}function UM(J){let z=p9({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]},G=()=>J.searchMode?.()??!1,Z=()=>J.moveMode?.()??!1;D1(()=>({enabled:J.focused()&&!G(),bindings:lY({"sidebar.nav":(X,Q)=>{let f=(Q??0)%2===0;if(Z()){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(Z()){J.onMoveModeExit?.();return}z.selectCurrent()},"sidebar.goto":(X)=>{if(Z())return;if(X.shift)z.pressShiftG();else z.pressG()},"sidebar.delete":()=>{if(Z())return;let X=Y();if(X!==void 0)J.onDeleteRequest?.(X)},"sidebar.archive":()=>{if(Z())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(Z())return;let X=Y();if(X!==void 0)J.onRenameRequest?.(X)},"sidebar.pin":(X)=>{if(Z())return;if(!X.shift)return;let Q=Y();if(Q!==void 0)J.onPinRequest?.(Q)},"sidebar.search.enter":()=>{if(Z())return;J.onSearchEnter?.()},"sidebar.sort":()=>{if(Z())return;J.onSortModeToggle?.()},"sidebar.projectFilter":()=>{if(Z())return;J.onProjectFilterToggle?.()}})})),D1(()=>({enabled:J.focused()&&Z(),bindings:[{key:"escape",cmd:()=>J.onMoveModeExit?.()}]})),D1(()=>({enabled:J.focused(),bindings:lY({"sidebar.view":(X,Q)=>{J.onViewSwitch?.((Q??0)%2===0?-1:1)}})})),D1(()=>({enabled:J.focused()&&G(),bindings:lY({"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 DM=k(()=>{$Z();yJ()});function r9(J,z){if(z<=0)return"";if(J.length<=z)return J;return`${J.slice(0,Math.max(0,z-1))}\u2026`}function o9(J,z){return` ${r9(J,Math.max(0,z))}`}function hx(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 vx(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 FM(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 mx(){return F("tasks.subtitle.noTracking")}function cx(){return F("tasks.subtitle.materializing")}function dx(J){if(J.kind==="main")return!1;return J.vendor!==void 0&&!QJ(J.vendor)}function s9(J){let{task:z}=J,Y=z.kind==="main",G=Y?J.mainBranch??"":z.branch,Z=Px[z.status],X=J.activity?.state,Q=X!==void 0,f=nx(X),H=vx(X),B=dx(z)&&!Q,V=J.job!==void 0,j=V||!B&&(X==="running"||J.live||!Q&&!Y&&z.status==="in_progress"),K=rZ[J.spinnerFrame]??rZ[0],L=V?"primary":B?"textMuted":H?.tone??(j?"primary":f?.tone??Z.tone),A=B?mx():hx(z.status),O=V?J.truncateBranch(cx(),J.subtitleBudget):H?J.truncateBranch(H.text,J.subtitleBudget):G.length>0?J.truncateBranch(G,J.subtitleBudget):J.truncateBranch(A,J.subtitleBudget),g=B?LM:f?.glyph??Z.glyph,x=B?LM:f?.glyph??"\u2605";return{isMain:Y,titleText:Y?Nz(z.repo):z.title,subtitleText:O,loading:j,stateGlyph:j?K:g,projectGlyph:j?K:x,tone:L}}function t9(J,z){if(!J.loading)return J;let Y=rZ[z()%rZ.length]??"\u280B";if(Y===J.stateGlyph&&Y===J.projectGlyph)return J;return{...J,stateGlyph:Y,projectGlyph:Y}}function nx(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 Px,rZ,MM=100,LM="\xB7";var OM=k(()=>{ZJ();i1();gH();Px={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"}};rZ=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function e9(J){return AM.read(J)}function JW(J){AM.poll(J)}var ix=4000,lx=60000,$x=1500,ax,AM;var RM=k(()=>{PY();VQ();SZ();VQ();ax={added:0,deleted:0},AM=bH({initial:ax,equals:vz,timeoutMs:ix,slowRetryMs:lx,minIntervalMs:$x,run:async(J,z)=>{let Y=await zY("git",["status","--porcelain=v1"],{cwd:J,env:cJ(),signal:z});if(Y.status!==0)throw Error("git status failed");return bZ(Y.stdout)}})});import{TextAttributes as E1}from"@opentui/core";function _x(J){switch(J){case"active":return F("tasks.view.workspace");case"archived":return F("tasks.view.archives")}}function CM(J,z=rx){if(J.length<=z)return J;return`${J.slice(0,Math.max(0,z-1))}\u2026`}function ox(J){let z=0;for(let Y of J)z+=(Y.codePointAt(0)??0)>=4352?2:1;return z}function sx(J,z){if(z<=0||J.length<=z)return J;return`\u2026${J.slice(J.length-Math.max(0,z-1))}`}function NM(J){let{theme:z}=d0(),Y=()=>J.focused?J.focused():!0,[G,Z]=a("active"),[X,Q]=a(!1),[f,H]=a(""),[B,V]=a(null),j=()=>J.projectFilter?.()??B(),K=($)=>{if(J.onProjectFilterChange)J.onProjectFilterChange($);else V($)};function L(){H(""),Q(!0),J.onSearchActiveChange?.(!0)}function A($){Q(!1),H(""),J.onSearchActiveChange?.(!1)}r0(()=>{if(!X())return;let $=fJ();if(!$)return;let W0=(T0)=>{if(T0.defaultPrevented)return;if(!Y())return;if(T0.ctrl||T0.meta||T0.option)return;if(T0.name==="backspace"){H((_0)=>_0.slice(0,-1));return}let s0=T0.sequence;if(!s0||s0.length!==1)return;let a0=s0.charCodeAt(0);if(a0<32||a0===127)return;H((_0)=>_0+s0)};$.keyInput.on("keypress",W0),k1(()=>$.keyInput.off("keypress",W0))});let[O,g]=a(0),x=setInterval(()=>g(($)=>$+1),px);k1(()=>clearInterval(x));let[_,S]=a(0),N=setInterval(()=>S(($)=>($+1)%rZ.length),MM);k1(()=>clearInterval(N));let M=()=>J.sortMode?.()??"default",I=K0(()=>k3(J.tasks(),G())),r=K0(()=>{let $=j();if(!$)return null;let W0=Gz($);return I().find((T0)=>Gz(T0.repo)===W0)??null}),i=K0(()=>r()?.repo??null),e=K0(()=>r()?.label??"all"),J0=K0(()=>{let $=r();return $?$.count:I().reduce((W0,T0)=>W0+T0.count,0)}),T=K0(()=>{let $=J0();return`${$} ${$===1?F("tasks.project.taskSingular"):F("tasks.project.taskPlural")}`}),q0=K0(($)=>T3($,E9(J.tasks(),G(),X()?f():"",M(),i())),[]),p=K0(()=>w9(q0())),B0=K0(()=>I3(q0())),L0=K0(()=>B0().projectRows),V0=K0(()=>B0().taskRows),t=K0(()=>{let $=new Map;for(let W0 of q0())$.set(W0.flatIndex,W0);return $}),h=K0(()=>w9(E9(J.tasks(),G(),"",M(),i())).length),C=K0(()=>V0().length>0);r0(()=>{let $=j(),W0=I();if($!==null&&W0.length>0&&(W0.length<=1||r()===null))K(null)});function o(){let $=I();if($.length<=1){K(null);return}let W0=i(),T0=W0?Gz(W0):null,s0=T0===null?-1:$.findIndex((_0)=>Gz(_0.repo)===T0),a0=$[s0+1];K(a0?.repo??null)}let E=()=>J.width?J.width():gM,c=K0(()=>Math.max(6,E()-9)),s=K0(()=>Math.max(6,E()-16)),X0=mz(),F0=K0(()=>{let $=Math.max(2,Math.min(10,Math.floor(X0().height*0.25))),W0=Math.max(2,L0().length*2);return Math.min($,W0)}),[P0,A0]=a(null),[N0,u]=a(-1),g0,Q0,R0,y0=new Map;r0(()=>{let $=J.width?J.width():gM,W0=R0;if(!W0)return;W0.width=$,W0.flexShrink=1,W0.minHeight=0}),r0(SJ([N0,q0],([$])=>{let W0=t().get($);if(!W0)return;let T0=W0.task.kind==="main"?g0:Q0;if(!T0)return;if(T0.viewport.height<=0)return;let s0=y0.get($);if(!s0)return;T0.scrollChildIntoView(s0.id)})),r0(SJ(()=>[J.selectedId(),p()],([$,W0])=>{let T0=_1(N0),s0=S3($,W0,T0);if(s0!==T0)u(s0)})),r0(SJ(G,()=>{let $=p();u($.length>0?0:-1)},{defer:!0})),r0(SJ(i,($)=>u(b3(q0(),$)),{defer:!0})),r0(SJ([X,f],()=>{if(!X())return;let $=p();u($.length>0?0:-1)}));function H1($){let W0=G(),T0=KQ.findIndex((_0)=>_0.view===W0);if(T0<0)return;let s0=(T0+$+KQ.length)%KQ.length,a0=KQ[s0];if(a0)Z(a0.view)}UM({focused:Y,cursorIndex:N0,setCursorIndex:u,flatTaskIds:p,onSelect:($)=>{J.onSelect($),J.onActivate?.($)},onDeleteRequest:($)=>J.onDeleteRequest?.($),onArchiveRequest:($)=>J.onArchiveRequest?.($),onLocalMergeRequest:($)=>J.onLocalMergeRequest?.($),moveMode:J.moveMode,onMoveRequest:($,W0)=>J.onMoveRequest?.($,W0),onMoveModeExit:()=>J.onMoveModeExit?.(),onRenameRequest:($)=>J.onRenameRequest?.($),onPinRequest:($)=>J.onPinRequest?.($),onViewSwitch:($)=>H1($),onSortModeToggle:()=>J.onSortModeToggle?.(),onProjectFilterToggle:()=>o(),searchMode:X,onSearchEnter:()=>L(),onSearchExit:($)=>A($)});let G1=($)=>(()=>{var W0=W("box"),T0=W("box"),s0=W("text"),a0=W("text");return D(W0,T0),q(W0,"flexDirection","column"),q(W0,"flexShrink",0),U(W0,b(Z0,{get when(){return $.topPad},get children(){var _0=W("box"),t0=W("text");return D(_0,t0),q(_0,"flexShrink",0),D(t0,E0(" ")),q(t0,"wrapMode","none"),_0}}),T0),D(T0,s0),D(T0,a0),q(T0,"flexDirection","row"),q(T0,"flexShrink",0),q(T0,"gap",1),q(T0,"paddingLeft",1),q(T0,"paddingRight",1),q(s0,"wrapMode","none"),U(s0,()=>$.label),q(a0,"wrapMode","none"),U(a0,()=>"\u2500".repeat(Math.max(2,E()-10-$.label.length-($.suffix?.length??0)))),U(T0,b(Z0,{get when(){return $.suffix},get children(){var _0=W("text");return q(_0,"wrapMode","none"),U(_0,()=>$.suffix),y((t0)=>{var N1=z.info,R1=E1.BOLD;return N1!==t0.e&&(t0.e=q(_0,"fg",N1,t0.e)),R1!==t0.t&&(t0.t=q(_0,"attributes",R1,t0.t)),t0},{e:void 0,t:void 0}),_0}}),null),y((_0)=>{var t0=z.textMuted,N1=E1.BOLD,R1=z.border;return t0!==_0.e&&(_0.e=q(s0,"fg",t0,_0.e)),N1!==_0.t&&(_0.t=q(s0,"attributes",N1,_0.t)),R1!==_0.a&&(_0.a=q(a0,"fg",R1,_0.a)),_0},{e:void 0,t:void 0,a:void 0}),W0})(),w0=($)=>{switch($){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=($)=>{let W0=$.row.task,T0=$.row.flatIndex,s0=()=>T0===N0(),a0=()=>W0.id===J.selectedId(),_0=K0(()=>{let R=J.chatRunState?.();if(!R)return!1;let h0=`${W0.id}:`;for(let[U0,u0]of R)if(u0==="running"&&U0.startsWith(h0))return!0;return!1}),t0=K0(()=>{let R=uf(J.worktreeChanges?.(),W0.worktreePath);if(R)return R;if(O(),!W0.archived)JW(W0.worktreePath);return e9(W0.worktreePath)},void 0,{equals:vz}),N1=K0(()=>{return O(),VM(W0.repo),WM(W0.repo)}),R1=K0(()=>s9({task:W0,activity:J.engineState?.().get(W0.id),job:J.taskJobs?.().get(W0.id),live:_0(),spinnerFrame:0,subtitleBudget:s(),truncateBranch:CM,mainBranch:N1()})),z0=K0(()=>t9(R1(),_)),G0=()=>!z0().loading?z.primary:w0(z0().tone),H0=()=>s0()?z.focusAccent:a0()?z.primary:void 0,k0=()=>s0()||a0()?"\u258C":" ";return(()=>{var R=W("box"),h0=W("box"),U0=W("box"),u0=W("text"),j0=W("box"),D0=W("text"),C0=W("text"),J1=W("box"),z1=W("text"),n0=W("box"),x1=W("text");return D(R,h0),q(R,"flexDirection","column"),q(R,"gap",0),q(R,"paddingBottom",0),D(h0,U0),D(h0,J1),cz((b0)=>{y0.set(T0,b0),k1(()=>{if(y0.get(T0)===b0)y0.delete(T0)})},h0),q(h0,"flexDirection","column"),q(h0,"gap",0),q(h0,"onMouseUp",()=>{if(u(T0),J.onSelect(W0.id),J.activateOnClick)J.onActivate?.(W0.id)}),q(h0,"onMouseOver",(b0)=>A0({task:W0,x:b0.x,y:b0.y})),q(h0,"onMouseOut",()=>A0((b0)=>b0?.task.id===W0.id?null:b0)),D(U0,u0),D(U0,j0),q(U0,"flexDirection","row"),q(U0,"gap",0),q(u0,"wrapMode","none"),U(u0,k0),D(j0,D0),D(j0,C0),q(j0,"flexDirection","row"),q(j0,"flexGrow",1),q(j0,"paddingRight",1),q(j0,"gap",0),q(D0,"wrapMode","none"),U(D0,()=>z0().projectGlyph),q(C0,"wrapMode","none"),q(C0,"flexGrow",1),U(C0,()=>o9(z0().titleText,c())),D(J1,z1),D(J1,n0),q(J1,"flexDirection","row"),q(J1,"gap",0),q(z1,"wrapMode","none"),U(z1,k0),D(n0,x1),q(n0,"flexDirection","row"),q(n0,"flexGrow",1),q(n0,"paddingLeft",2),q(n0,"paddingRight",1),q(n0,"gap",1),q(x1,"wrapMode","none"),q(x1,"flexGrow",1),U(x1,()=>z0().subtitleText),U(n0,b(Z0,{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),y((v)=>q(b0,"fg",z.success,v)),b0}}),null),U(n0,b(Z0,{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),y((v)=>q(b0,"fg",z.error,v)),b0}}),null),y((b0)=>{var m1=s0()?z.backgroundElement:void 0,v=H0(),O0=G0(),W1=E1.BOLD,A1=z.text,B1=E1.BOLD,d=H0(),Y0=z.textMuted,I0=E1.DIM;return m1!==b0.e&&(b0.e=q(h0,"backgroundColor",m1,b0.e)),v!==b0.t&&(b0.t=q(u0,"fg",v,b0.t)),O0!==b0.a&&(b0.a=q(D0,"fg",O0,b0.a)),W1!==b0.o&&(b0.o=q(D0,"attributes",W1,b0.o)),A1!==b0.i&&(b0.i=q(C0,"fg",A1,b0.i)),B1!==b0.n&&(b0.n=q(C0,"attributes",B1,b0.n)),d!==b0.s&&(b0.s=q(z1,"fg",d,b0.s)),Y0!==b0.h&&(b0.h=q(x1,"fg",Y0,b0.h)),I0!==b0.r&&(b0.r=q(x1,"attributes",I0,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 $=W("box"),W0=W("box"),T0=W("box"),s0=W("text"),a0=W("box"),_0=W("box"),t0=W("text"),N1=W("scrollbox"),R1=W("box");return D($,W0),D($,a0),D($,N1),cz((z0)=>{R0=z0},$),q($,"flexGrow",1),q($,"minHeight",0),q($,"flexDirection","column"),q($,"paddingTop",1),q($,"paddingBottom",1),q($,"paddingLeft",0),q($,"paddingRight",0),D(W0,T0),q(W0,"flexDirection","row"),q(W0,"justifyContent","space-between"),q(W0,"gap",1),q(W0,"paddingBottom",1),q(W0,"paddingLeft",1),q(W0,"paddingRight",1),D(T0,s0),q(T0,"flexDirection","row"),q(T0,"gap",1),D(s0,E0("KOBE")),q(s0,"wrapMode","none"),U(T0,b(Z0,{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),y((H0)=>{var k0=z0().emphasize?z.warning:z.textMuted,R=z0().emphasize?E1.BOLD:E1.DIM;return k0!==H0.e&&(H0.e=q(G0,"fg",k0,H0.e)),R!==H0.t&&(H0.t=q(G0,"attributes",R,H0.t)),H0},{e:void 0,t:void 0}),G0})()}),null),U(W0,b(Z0,{get when(){return J.onAddTask},get children(){var z0=W("text");return D(z0,E0("[+]")),q(z0,"wrapMode","none"),q(z0,"onMouseUp",()=>J.onAddTask?.()),y((G0)=>{var H0=z.primary,k0=E1.BOLD;return H0!==G0.e&&(G0.e=q(z0,"fg",H0,G0.e)),k0!==G0.t&&(G0.t=q(z0,"attributes",k0,G0.t)),G0},{e:void 0,t:void 0}),z0}}),null),U($,b(Z0,{get when(){return X()},get children(){var z0=W("box"),G0=W("text"),H0=W("text"),k0=W("text");return D(z0,G0),D(z0,H0),D(z0,k0),q(z0,"flexDirection","row"),q(z0,"gap",0),q(z0,"paddingBottom",1),q(z0,"paddingLeft",1),D(G0,E0("/")),q(G0,"wrapMode","none"),q(H0,"wrapMode","none"),U(H0,f),D(k0,E0("\u2588")),q(k0,"wrapMode","none"),U(z0,b(Z0,{get when(){return f().length===0},get children(){var R=W("text"),h0=E0(" ");return D(R,h0),q(R,"wrapMode","none"),U(R,()=>F("tasks.search.placeholder"),null),y((U0)=>q(R,"fg",z.textMuted,U0)),R}}),null),U(z0,b(Z0,{get when(){return f().length>0},get children(){var R=W("text"),h0=E0(" "),U0=E0("/");return D(R,h0),D(R,U0),q(R,"wrapMode","none"),U(R,()=>p().length,U0),U(R,h,null),y((u0)=>q(R,"fg",z.textMuted,u0)),R}}),null),y((R)=>{var{info:h0,text:U0,info:u0}=z,j0=E1.BLINK;return h0!==R.e&&(R.e=q(G0,"fg",h0,R.e)),U0!==R.t&&(R.t=q(H0,"fg",U0,R.t)),u0!==R.a&&(R.a=q(k0,"fg",u0,R.a)),j0!==R.o&&(R.o=q(k0,"attributes",j0,R.o)),R},{e:void 0,t:void 0,a:void 0,o:void 0}),z0}}),a0),D(a0,_0),q(a0,"flexDirection","row"),q(a0,"justifyContent","space-between"),q(a0,"gap",1),q(a0,"paddingBottom",1),q(a0,"paddingLeft",1),q(a0,"paddingRight",1),D(_0,t0),q(_0,"flexDirection","row"),q(_0,"gap",2),U(_0,b(X1,{each:KQ,children:(z0)=>{let G0=()=>G()===z0.view;return(()=>{var H0=W("text");return q(H0,"wrapMode","none"),q(H0,"onMouseUp",()=>Z(z0.view)),U(H0,()=>_x(z0.view)),y((k0)=>{var R=G0()?z.primary:z.textMuted,h0=G0()?E1.BOLD:void 0;return R!==k0.e&&(k0.e=q(H0,"fg",R,k0.e)),h0!==k0.t&&(k0.t=q(H0,"attributes",h0,k0.t)),k0},{e:void 0,t:void 0}),H0})()}}),t0),D(t0,E0("[/]")),q(t0,"wrapMode","none"),U(a0,b(Z0,{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")),y((G0)=>{var H0=z.textMuted,k0=E1.DIM;return H0!==G0.e&&(G0.e=q(z0,"fg",H0,G0.e)),k0!==G0.t&&(G0.t=q(z0,"attributes",k0,G0.t)),G0},{e:void 0,t:void 0}),z0}}),null),U($,b(Z0,{get when(){return L0().length>0},get children(){var z0=W("box"),G0=W("box"),H0=W("text"),k0=W("text"),R=W("scrollbox"),h0=W("box");return D(z0,G0),D(z0,R),q(z0,"flexDirection","column"),q(z0,"flexShrink",0),D(G0,H0),D(G0,k0),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(H0,"wrapMode","none"),U(H0,()=>F("tasks.header.projects")),U(G0,b(Z0,{get when(){return I().length>1},get children(){var U0=W("text");return q(U0,"wrapMode","none"),U(U0,e),y((u0)=>{var j0=i()?z.primary:z.textMuted,D0=i()?E1.BOLD:void 0;return j0!==u0.e&&(u0.e=q(U0,"fg",j0,u0.e)),D0!==u0.t&&(u0.t=q(U0,"attributes",D0,u0.t)),u0},{e:void 0,t:void 0}),U0}}),k0),q(k0,"wrapMode","none"),U(k0,()=>"\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(Z0,{get when(){return I().length>1},get children(){var U0=W("text");return q(U0,"wrapMode","none"),U(U0,T),y((u0)=>{var j0=z.textMuted,D0=E1.DIM;return j0!==u0.e&&(u0.e=q(U0,"fg",j0,u0.e)),D0!==u0.t&&(u0.t=q(U0,"attributes",D0,u0.t)),u0},{e:void 0,t:void 0}),U0}}),null),D(R,h0),cz((U0)=>{g0=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(h0,"flexShrink",0),q(h0,"gap",0),q(h0,"paddingRight",1),U(h0,b(X1,{get each(){return L0()},children:(U0)=>b(o0,{row:U0})})),y((U0)=>{var u0=z.textMuted,j0=E1.BOLD,D0=z.border,C0=F0();return u0!==U0.e&&(U0.e=q(H0,"fg",u0,U0.e)),j0!==U0.t&&(U0.t=q(H0,"attributes",j0,U0.t)),D0!==U0.a&&(U0.a=q(k0,"fg",D0,U0.a)),C0!==U0.o&&(U0.o=q(R,"maxHeight",C0,U0.o)),U0},{e:void 0,t:void 0,a:void 0,o:void 0}),z0}}),N1),U($,b(G1,{get label(){return F("tasks.header.tasks")},get suffix(){return x0(()=>M()==="default")()?void 0:M()},get topPad(){return L0().length>0}}),N1),D(N1,R1),cz((z0)=>{Q0=z0},N1),q(N1,"flexGrow",1),q(N1,"minHeight",0),q(N1,"stickyScroll",!1),q(N1,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),q(R1,"flexShrink",0),q(R1,"gap",0),q(R1,"paddingRight",1),U(R1,b(X1,{get each(){return V0()},children:(z0)=>{let{task:G0,flatIndex:H0}=z0,k0=()=>H0===N0(),R=()=>G0.id===J.selectedId(),h0=K0(()=>{let z1=J.chatRunState?.();if(!z1)return!1;let n0=`${G0.id}:`;for(let[x1,b0]of z1)if(b0==="running"&&x1.startsWith(n0))return!0;return!1}),U0=K0(()=>{let z1=uf(J.worktreeChanges?.(),G0.worktreePath);if(z1)return z1;if(O(),!G0.archived)JW(G0.worktreePath);return e9(G0.worktreePath)},void 0,{equals:vz}),u0=K0(()=>s9({task:G0,activity:J.engineState?.().get(G0.id),job:J.taskJobs?.().get(G0.id),live:h0(),spinnerFrame:0,subtitleBudget:s(),truncateBranch:CM,mainBranch:""})),j0=K0(()=>t9(u0(),_)),D0=()=>w0(j0().tone),C0=()=>k0()?z.focusAccent:R()?z.primary:void 0,J1=()=>k0()||R()?"\u258C":" ";return(()=>{var z1=W("box"),n0=W("box"),x1=W("box"),b0=W("text"),m1=W("box"),v=W("text"),O0=W("text"),W1=W("box"),A1=W("text"),B1=W("box"),d=W("text");return D(z1,n0),q(z1,"flexDirection","column"),q(z1,"gap",0),q(z1,"paddingBottom",1),D(n0,x1),D(n0,W1),cz((Y0)=>{y0.set(H0,Y0),k1(()=>{if(y0.get(H0)===Y0)y0.delete(H0)})},n0),q(n0,"flexDirection","column"),q(n0,"gap",0),q(n0,"onMouseUp",()=>{if(u(H0),J.onSelect(G0.id),J.activateOnClick)J.onActivate?.(G0.id)}),q(n0,"onMouseOver",(Y0)=>A0({task:G0,x:Y0.x,y:Y0.y})),q(n0,"onMouseOut",()=>A0((Y0)=>Y0?.task.id===G0.id?null:Y0)),D(x1,b0),D(x1,m1),q(x1,"flexDirection","row"),q(x1,"gap",0),q(b0,"wrapMode","none"),U(b0,J1),D(m1,v),D(m1,O0),q(m1,"flexDirection","row"),q(m1,"flexGrow",1),q(m1,"paddingRight",1),q(m1,"gap",0),q(v,"wrapMode","none"),U(v,()=>j0().stateGlyph),q(O0,"wrapMode","none"),q(O0,"flexGrow",1),U(O0,()=>o9(j0().titleText,c())),U(m1,b(Z0,{get when(){return x0(()=>!!J.moveMode?.())()&&k0()},get children(){var Y0=W("text");return q(Y0,"wrapMode","none"),U(Y0,()=>F("tasks.moveChip")),y((I0)=>q(Y0,"fg",z.warning,I0)),Y0}}),null),D(W1,A1),D(W1,B1),q(W1,"flexDirection","row"),q(W1,"gap",0),q(A1,"wrapMode","none"),U(A1,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,()=>j0().subtitleText),U(B1,b(Z0,{get when(){return G0.pinned===!0},get children(){var Y0=W("text");return D(Y0,E0("\u25B4")),q(Y0,"wrapMode","none"),y((I0)=>q(Y0,"fg",z.warning,I0)),Y0}}),null),U(B1,b(Z0,{get when(){return FM(G0)},children:(Y0)=>(()=>{var I0=W("text");return q(I0,"wrapMode","none"),U(I0,()=>Y0().glyph),y((S0)=>q(I0,"fg",w0(Y0().tone),S0)),I0})()}),null),U(B1,b(Z0,{get when(){return U0().added>0},get children(){var Y0=W("text"),I0=E0("+");return D(Y0,I0),q(Y0,"wrapMode","none"),U(Y0,()=>U0().added,null),y((S0)=>q(Y0,"fg",z.success,S0)),Y0}}),null),U(B1,b(Z0,{get when(){return U0().deleted>0},get children(){var Y0=W("text"),I0=E0("\u2212");return D(Y0,I0),q(Y0,"wrapMode","none"),U(Y0,()=>U0().deleted,null),y((S0)=>q(Y0,"fg",z.error,S0)),Y0}}),null),y((Y0)=>{var I0=k0()?z.backgroundElement:void 0,S0=C0(),BJ=D0(),LJ=E1.BOLD,XJ=z.text,iJ=R()||k0()?E1.BOLD:void 0,iz=C0(),AJ=z.textMuted,lz=E1.DIM;return I0!==Y0.e&&(Y0.e=q(n0,"backgroundColor",I0,Y0.e)),S0!==Y0.t&&(Y0.t=q(b0,"fg",S0,Y0.t)),BJ!==Y0.a&&(Y0.a=q(v,"fg",BJ,Y0.a)),LJ!==Y0.o&&(Y0.o=q(v,"attributes",LJ,Y0.o)),XJ!==Y0.i&&(Y0.i=q(O0,"fg",XJ,Y0.i)),iJ!==Y0.n&&(Y0.n=q(O0,"attributes",iJ,Y0.n)),iz!==Y0.s&&(Y0.s=q(A1,"fg",iz,Y0.s)),AJ!==Y0.h&&(Y0.h=q(d,"fg",AJ,Y0.h)),lz!==Y0.r&&(Y0.r=q(d,"attributes",lz,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}),z1})()}}),null),U(R1,b(Z0,{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 H0=x0(()=>!!(X()&&f().trim().length>0));return()=>H0()?F("tasks.empty.noMatchSearch"):x0(()=>!!i())()?x0(()=>G()==="active")()?F("tasks.empty.noActiveProject"):F("tasks.empty.noArchivedProject"):x0(()=>G()==="active")()?F("tasks.empty.noActive"):F("tasks.empty.noArchived")})()),y((H0)=>q(G0,"fg",z.textMuted,H0)),z0}}),null),U(R1,b(Z0,{get when(){return x0(()=>!!(i()&&p().length>0&&!C()))()&&!(X()&&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 H0=x0(()=>G()==="active");return()=>H0()?F("tasks.empty.noActiveProject"):F("tasks.empty.noArchivedProject")})()),y((H0)=>{var k0=z.textMuted,R=E1.DIM;return k0!==H0.e&&(H0.e=q(G0,"fg",k0,H0.e)),R!==H0.t&&(H0.t=q(G0,"attributes",R,H0.t)),H0},{e:void 0,t:void 0}),z0}}),null),U(R1,b(Z0,{get when(){return x0(()=>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")),y((H0)=>{var k0=z.textMuted,R=E1.DIM;return k0!==H0.e&&(H0.e=q(G0,"fg",k0,H0.e)),R!==H0.t&&(H0.t=q(G0,"attributes",R,H0.t)),H0},{e:void 0,t:void 0}),z0}}),null),U($,b(Z0,{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?.()),y((H0)=>{var k0=z.accent,R=E1.BOLD;return k0!==H0.e&&(H0.e=q(G0,"fg",k0,H0.e)),R!==H0.t&&(H0.t=q(G0,"attributes",R,H0.t)),H0},{e:void 0,t:void 0}),z0}}),null),U($,b(Z0,{get when(){return P0()},children:(z0)=>{let G0=K0(()=>{let j0=z0().task,D0=[];if(D0.push({text:j0.kind==="main"?Nz(j0.repo):j0.title,bold:!0}),j0.branch.length>0)D0.push({text:`\u2387 ${j0.branch}`});if(j0.worktreePath.length>0)D0.push({text:j0.worktreePath,dim:!0});return D0}),H0=72,k0=K0(()=>Math.min(68,Math.max(...G0().map((j0)=>ox(j0.text))))),R=K0(()=>k0()+4),h0=K0(()=>G0().length+2),U0=K0(()=>Math.max(0,Math.min(z0().x+2,X0().width-R()-1))),u0=K0(()=>Math.max(0,Math.min(z0().y+1,X0().height-h0()-1)));return(()=>{var j0=W("box");return q(j0,"position","absolute"),q(j0,"zIndex",2600),q(j0,"flexDirection","column"),q(j0,"border",!0),q(j0,"paddingLeft",1),q(j0,"paddingRight",1),U(j0,b(X1,{get each(){return G0()},children:(D0)=>(()=>{var C0=W("text");return q(C0,"wrapMode","none"),U(C0,(()=>{var J1=x0(()=>!!D0.dim);return()=>J1()?sx(D0.text,k0()):r9(D0.text,k0())})()),y((J1)=>{var z1=D0.dim?z.textMuted:z.text,n0=D0.bold?E1.BOLD:D0.dim?E1.DIM:void 0;return z1!==J1.e&&(J1.e=q(C0,"fg",z1,J1.e)),n0!==J1.t&&(J1.t=q(C0,"attributes",n0,J1.t)),J1},{e:void 0,t:void 0}),C0})()})),y((D0)=>{var C0=U0(),J1=u0(),z1=R(),n0=z.focusAccent,x1=z.backgroundElement;return C0!==D0.e&&(D0.e=q(j0,"left",C0,D0.e)),J1!==D0.t&&(D0.t=q(j0,"top",J1,D0.t)),z1!==D0.a&&(D0.a=q(j0,"width",z1,D0.a)),n0!==D0.o&&(D0.o=q(j0,"borderColor",n0,D0.o)),x1!==D0.i&&(D0.i=q(j0,"backgroundColor",x1,D0.i)),D0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),j0})()}}),null),y((z0)=>{var G0=Y()?z.focusAccent:z.textMuted,H0=E1.BOLD,k0=z.textMuted,R=E1.DIM;return G0!==z0.e&&(z0.e=q(s0,"fg",G0,z0.e)),H0!==z0.t&&(z0.t=q(s0,"attributes",H0,z0.t)),k0!==z0.a&&(z0.a=q(t0,"fg",k0,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}),$})()}var gM=32,KQ,px=2000,rx=16;var kM=k(()=>{P();P();P();P();P();P();P();P();P();ZJ();P();j1();v1();v1();KM();gH();DM();OM();SZ();RM();KQ=[{view:"active"},{view:"archived"}]});var yM={};f1(yM,{startTasksPane:()=>Yu,legendRowCap:()=>TM,legendCap:()=>IM});import{existsSync as bM}from"fs";import{stat as tx}from"fs/promises";import{TextAttributes as SH}from"@opentui/core";function SM(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 Ju(J){let{theme:z}=d0(),Y=c1(),G=aZ(),Z=DH(),[X,Q]=a(J.tasks().some((u)=>u.id===J.initialTaskId)?J.initialTaskId:J.tasks()[0]?.id??null);function f(u){Z.notify({kind:"error",taskId:X()??"",tabId:"",title:u})}function H(u){Z.notify({kind:"done",taskId:X()??"",tabId:"",title:u})}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=(u)=>{O(u),G.set("tasksPane.projectFilter",u)},[x,_]=a(null),[S,N]=a(!1);{let u=process.env.TMUX_PANE;if(u){let g0=()=>{$0(["show-options","-wqv","-t",u,gY]).then(({code:R0,stdout:y0})=>{N(R0===0&&y0.trim().length>0)})};g0();let Q0=setInterval(g0,1000);k1(()=>clearInterval(Q0))}}let M=mz();r0(()=>{if(J.initialTaskId)return;let u=J.orch?.activeTaskSignal()();if(!u)return;Q(u)}),r0(SJ(()=>J.orch?.uiPrefsSignal()(),(u)=>{if(u&&u.sortMode!==_1(j))K(u.sortMode);if(u&&u.projectFilter!==_1(A))O(u.projectFilter)})),r0(()=>{let u=J.orch?.updateSignal()();if(u)_(u)});let I={orch:J.orch,tasks:()=>J.tasks(),confirm:async(u)=>await KY.show(Y,u.title,u.body,u.cancelLabel,u.confirmLabel)===!0,promptText:(u,g0)=>VY.show(Y,u,g0),logger:console,logPrefix:"[kobe tasks]",notifyError:f,notifyInfo:H,reload:()=>J.reload(),switchBeforeKill:!0,updateActiveTask:!0,onTaskDeleted:(u,g0)=>{if(X()!==u)return;let Q0=J.tasks();Q(g0?.id??(Q0.find((R0)=>!R0.archived)??Q0[0])?.id??null)},promptNewTask:(u,g0,Q0)=>HH.show(Y,u,g0,Q0),cursorRepo:()=>{let u=J.tasks();return(u.find((g0)=>g0.id===X())??u[0])?.repo},lastVendor:()=>xJ(g1("lastSelectedVendor"),uJ()),rememberVendor:(u)=>r1("lastSelectedVendor",u),openCreateSurface:async(u)=>{if(SG(G.get(QY,bG))!=="chattab")return!1;let Q0=await TJ();if(!Q0)return!1;return await Xf(Q0,u),!0},selectTask:(u)=>Q(u),enterTask:(u)=>X0(u)};async function r(){await XM(I)}async function i(){if(SG(G.get(QY,bG))==="chattab"){let Q0=await TJ();if(Q0){await Gf(Q0);return}}if(!(await vG.show(Y,G,J.orch??void 0)).visualPrefsChanged)return;if(!G.flush())return;try{let Q0=await TJ();if(Q0)await MZ(Q0)}catch(Q0){console.error("[kobe tasks] failed to refresh workspace panes:",Q0)}}async function e(){let u=await TJ();if(u){await Zf(u);return}pZ.show(Y)}async function J0(){if(!x()?.hasUpdate){H(F("tasks.toast.alreadyLatest",{version:p0}));return}let g0=await TJ();if(!g0)return;await Qf(g0)}async function T(u){await JM(I,u)}async function q0(u){await zM(I,u)}async function p(u){await YM(I,u)}async function B0(u){await GM(I,u)}async function L0(u){await ZM(I,u)}async function V0(u){let Q0=J.tasks().find((y0)=>y0.id===u)?.worktreePath;if(!Q0||!bM(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(u)}catch(y0){console.error("[kobe tasks] task.ensureWorktree failed:",y0),f(SM(y0));return}await J.reload()}if(!Q0||!bM(Q0))return;let R0=qM();if(!R0){console.error("[kobe tasks] no editor/opener found; set KOBE_OPEN_EDITOR"),f(F("tasks.toast.noEditor"));return}if(!fM(Q0,R0))console.error(`[kobe tasks] failed to open worktree with ${R0.label}`),f(F("tasks.toast.openWorktreeFailed",{label:R0.label}))}async function t(){if(!process.env.TMUX_PANE)return;let u=await TJ();if(!u)return;let g0=await qZ(u);if(!g0)return;await l0(["select-pane","-t",g0])}async function h(u,g0){let Q0=J.tasks().find((R0)=>R0.id===u);if(!Q0||Q0.kind==="main"||!J.orch)return;try{await J.orch.moveTask(u,g0)}catch(R0){console.error("[kobe tasks] task.move failed:",R0),f(F("tasks.toast.moveTaskFailed",{message:R0 instanceof Error?R0.message:String(R0)}));return}Q(u),await J.reload()}let[C,o]=a(G.get("tasksPane.keysCollapsed",!1)===!0),E=(u)=>{o(u),G.set("tasksPane.keysCollapsed",u)};r0(SJ(()=>J.orch?.uiPrefsSignal()(),(u)=>{if(u&&u.keysCollapsed!==_1(C))o(u.keysCollapsed)}));let[c,s]=a(!1);D1(()=>({enabled:Y.stack.length===0&&!c(),bindings:lY({"help.open":()=>void e(),"task.new":()=>void r(),"settings.open.sidebar":()=>void i(),"tasks.update":()=>void J0(),"tasks.openWorktree":()=>{let u=X();if(u)V0(u)},"tasks.renameBranch":()=>{let u=X();if(u)B0(u)},"tasks.cycleEngine":()=>{let u=X();if(u)L0(u)},"tasks.toggleKeys":()=>E(!C()),"tasks.focusEngine":()=>void t().catch((u)=>console.error("[kobe tasks] focus engine pane failed:",u))})}));async function X0(u){let g0=J.tasks().find((Q0)=>Q0.id===u);if(!g0)return;try{await x9(J.orch,g0,g0.repo,g0.vendor,{includeInitPrompt:!0,heal:!0,captureFrom:!0,reload:()=>J.reload()})}catch(Q0){if(Q0 instanceof PG)if(Q0.phase==="no-daemon")f(F("tasks.toast.noDaemonOpen"));else if(Q0.phase==="worktree")f(SM(Q0.cause??Q0));else f(F("tasks.toast.sessionStartFailed"));else console.error("[kobe tasks] switchTo failed:",Q0)}}let F0=K0(()=>{let u=x();if(u?.hasUpdate)return{label:`v${u.latest} \u2191`,emphasize:!0};return{label:`v${p0}`,emphasize:!1}}),P0=()=>J.orch?.daemonStaleSignal()()??!1,A0=()=>J.orch?.daemonVersionSignal()()??null,N0=K0(()=>J.tasks().find((u)=>u.id===X())?.kind==="main");return(()=>{var u=W("box"),g0=W("box");return D(u,g0),q(u,"flexDirection","column"),q(u,"flexGrow",1),U(u,b(s3,{stale:P0,daemonVersion:A0,clientVersion:p0,width:()=>M().width}),g0),q(g0,"flexGrow",1),q(g0,"flexShrink",1),U(g0,b(NM,{get tasks(){return J.tasks},selectedId:X,get onSelect(){return J.initialTaskId?()=>{}:Q},onActivate:(Q0)=>void X0(Q0),activateOnClick:!0,headerStatus:F0,onHeaderStatusClick:()=>void J0(),onAddTask:()=>void r(),zenActive:S,onZenClick:()=>{(async()=>{let Q0=await TJ();if(Q0)await AG(Q0,"zen-toggle")})()},width:()=>M().width,get engineState(){return x0(()=>!!J.orch)()?J.orch.engineStateSignal():void 0},get taskJobs(){return x0(()=>!!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 R0=J.tasks().find((y0)=>y0.id===Q0);if(!R0||R0.kind==="main")return;Q(Q0),V((y0)=>!y0)},moveMode:B,onMoveRequest:(Q0,R0)=>void h(Q0,R0),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(u,b(zu,{moveMode:B,selectedIsMain:N0,collapsed:C,onToggleCollapsed:()=>E(!C())}),null),y((Q0)=>q(u,"backgroundColor",z.background,Q0)),u})()}function IM(J){let z=k9(J);if(!z)return null;let Y=z.hint?.keys??z.keys[0];return Y&&Y.length>0?Y:null}function TM(J){let z=J.map(IM).filter((Y)=>Y!==null);return z.length>0?z.join("/"):null}function zu(J){let{theme:z}=d0(),[Y,G]=a("Prefix");e1(()=>{$0(["show-options","-g","prefix"]).then(({code:K,stdout:L})=>{if(K!==0)return;let A=NH(L);if(A)G(A)})});let Z=()=>{N9();let K=Iq(),L=K.binds,A=[],O=K.focus.filter((x)=>x!==null).map((x)=>x.chord);if(O.length===4&&O.every((x,_)=>x===SY[_]))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},X=()=>{N9();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=TM(A.ids);if(O===null)continue;L.push({k:O,label:A.label,dimWhenMain:A.dimWhenMain})}return L.push(...Z()),L},Q=()=>[{k:"j/k",label:F("tasks.hints.reorder")},{k:"enter/esc",label:F("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=x0(()=>!!j());return()=>A()?F("tasks.hints.headerFolded"):F("tasks.hints.headerUnfolded")})()),U(K,b(Z0,{get when(){return!j()},get children(){return b(X1,{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(_,()=>_Z(A.k,Y()),N),D(M,I),q(M,"flexShrink",0),q(I,"wrapMode","none"),U(I,()=>V(A.label)),y((r)=>{var i=O()?z.textMuted:z.accent,e=O()?SH.DIM:SH.BOLD,J0=B(),T=z.textMuted,q0=O()?SH.DIM:void 0;return i!==r.e&&(r.e=q(_,"fg",i,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),y((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 Yu(J={}){await OJ({logContext:"tasks",providers:{notifications:!0},setup:()=>Gu(J)})}async function Gu(J){let z=new xZ({homeDir:bz()});await z.load();let[Y,G]=a(z.list()),Z=null;try{let B=await zz();if(B){let V=new KJ(B);await V.init(),Z=V}else tz("tasks-boot","no daemon running \u2014 polling tasks.json (a gui owns daemon lifecycle)")}catch(B){o1("tasks-boot",B),tz("tasks-boot","daemon subscribe failed \u2014 polling tasks.json")}let X=()=>Z&&Z.connectionStateSignal()()==="online"?Z.tasksSignal()():Y(),Q=async()=>{await z.load(),G(z.list())},f="",H=setInterval(()=>{if(Z&&Z.connectionStateSignal()()==="online")return;(async()=>{let B="missing";try{let V=await tx(z.filePath);B=`${V.mtimeMs}:${V.size}`}catch{}if(B===f)return;f=B,await Q()})().catch(()=>{})},ex);return{root:()=>[b(Ju,{tasks:X,get initialTaskId(){return J.initialTaskId},orch:Z,reload:Q}),b(r3,{})],onDestroy:()=>{if(H)clearInterval(H);Z?.dispose()}}}var ex=1500;var xM=k(()=>{P();P();P();P();P();P();P();P();P1();Bz();ZJ();P();zG();FJ();j1();nY();p1();nX();F1();Tq();i1();MJ();h9();lZ();v9();a9();o3();t3();$Z();HQ();LH();v1();P9();aY();yJ();QM();OH();HM();kM();RG();zJ();nJ();m9()});var uM={};f1(uM,{startSettingsHost:()=>Xu});function Zu(J){let z=aZ(),Y=c1(),{theme:G}=d0(),Z=!1,X=!1;async function Q(){if(X)return;X=!0;try{if(z.flush()&&Z){let H=await TJ();if(H)await MZ(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(vG,{kv:z,get orchestrator(){return J.orchestrator??void 0},standalone:!0,onVisualPrefsChange:()=>{Z=!0},onClose:Q})),y((H)=>q(f,"backgroundColor",G.background,H)),f})()}async function Xu(){await OJ({setup:async()=>{let J=null;try{let z=await zz();if(z){let Y=new KJ(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(Zu,{orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var EM=k(()=>{P();P();P();P();P();P();FJ();nY();a9();HQ();v1();aY();yJ();zJ();nJ()});var wM={};f1(wM,{startHelpHost:()=>qu});function Qu(){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 G=W("box");return q(G,"flexGrow",1),q(G,"paddingTop",1),U(G,b(pZ,{onClose:Y})),y((Z)=>q(G,"backgroundColor",z.background,Z)),G})()}async function qu(){await OJ({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(Qu,{})})})}var PM=k(()=>{P();P();P();P();P();h9();v1();aY();yJ();nJ()});var hM={};f1(hM,{startUpdateHost:()=>Ku});import{spawn as fu,spawnSync as Hu}from"child_process";import{TextAttributes as oZ}from"@opentui/core";function Bu(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 fu(Y,G,{stdio:"ignore",detached:!0}).unref(),!0}catch{return!1}}function ju(J){return J.replace(/\r\n/g,`
|
|
260
|
+
`)}var vI;var BD=k(()=>{rf();vI=["install","status","command"]});var lj={};f1(lj,{runHookSubcommand:()=>_I,readTextWithTimeout:()=>KD,parseWorktreeAddPath:()=>DD,ensureGlobalKobeHooks:()=>oI});import{homedir as cI}from"os";import{join as WD,resolve as VD}from"path";async function KD(J,z=dI){let Y;try{return await Promise.race([J(),new Promise((G)=>{Y=setTimeout(()=>G(""),z)})])}finally{if(Y!==void 0)clearTimeout(Y)}}async function UD(){try{let J=await KD(()=>Bun.stdin.text());if(!J.trim())return{};let z=JSON.parse(J);return z&&typeof z==="object"&&!Array.isArray(z)?z:{}}catch{return{}}}function nI(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 lI(J){return!!J&&typeof J==="object"&&!Array.isArray(J)}function $I(J){let z=[],Y=/"([^"]*)"|'([^']*)'|(\S+)/g,G;while((G=Y.exec(J))!==null)z.push(G[1]??G[2]??G[3]??"");return z}function DD(J){let z=$I(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 Z=G+2;while(Z<z.length){let X=z[Z];if(X==="&&"||X==="||"||X===";"||X==="|"||X===">"||X===">>")break;if(X.startsWith("-")){Z+=Y.has(X)?2:1;continue}return X}}return}async function aI(){let J=await UD(),z=lI(J.tool_input)?J.tool_input:{},Y=typeof z.command==="string"?z.command:"";if(!Y.includes("worktree"))return;let G=DD(Y);if(!G)return;let Z=typeof J.cwd==="string"&&J.cwd?J.cwd:process.cwd(),X=VD(Z,G),Q=await zz();if(!Q)return;try{await Q.request("worktree.reconcile",{cwd:Z,worktreePath:X})}finally{Q.close()}}async function _I(J){let[z,...Y]=J;if(z==="setup"){await sI(Y);return}if(z===iI){try{await aI()}catch{}return}try{if(!z||!Zq(z))return;let G=await UD(),Z=nI(Y,"--task-id"),X=typeof G.cwd==="string"&&G.cwd?G.cwd:process.cwd(),Q;for(let H of LD())if(Q=H.activityDetailFromPayload(z,G),Q)break;let f=await zz();if(!f)return;try{await f.request("engine.reportEvent",{...Z?{taskId:Z}:{cwd:X},kind:z,...Q?{detail:Q}:{}})}finally{f.close()}}catch{}}function pI(){return n1.map((J)=>I8(J)).filter((J)=>J.supportsWorktreeSync())}function LD(){return n1.map((J)=>I8(J)).filter((J)=>J.supportsHooks())}function MD(){return WD(cI(),".claude","settings.json")}function rI(J){if(!J||J==="off")return;if(J==="global")return MD();if(J.startsWith("repo:"))return WD(VD(J.slice(5)),".claude","settings.json");return J}async function oI(){try{for(let J of LD()){let z=J.globalSettingsPath();if(!z)continue;await J.installActivityHooks(z),await J.installWorktreeWatchHook(z)}await FD()}catch{}}async function FD(){let J=pI();if(J.length===0)return;let z=g1(jD),Y=new Set([MD()]),G=rI(z);if(G)Y.add(G);for(let Z of J)for(let X of Y)await Z.removeWorktreeSyncHook(X);if(z!=="off")r1(jD,"off")}async function sI(J){await FD(),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 dI=500,iI="worktree-created",jD="externalWorktreeSync";var $j=k(()=>{FJ();T8();Xq();F1();i1()});function AD(J){var z;if(J>=55296&&J<=57343||J>1114111)return 65533;return(z=tI.get(J))!==null&&z!==void 0?z:J}var aj,tI,OD;var RD=k(()=>{tI=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]]),OD=(aj=String.fromCodePoint)!==null&&aj!==void 0?aj:(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 gD(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 Z=0,X=0;Z<Y;Z+=2){let Q=z.charCodeAt(Z),f=z.charCodeAt(Z+1);G[X++]=Q|f<<8}return G}var CD;var ND=k(()=>{CD=gD("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 VJ;var kD=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"})(VJ||(VJ={}))});function _j(J){return J>=h1.ZERO&&J<=h1.NINE}function eI(J){return J>=h1.UPPER_A&&J<=h1.UPPER_F||J>=h1.LOWER_A&&J<=h1.LOWER_F}function JT(J){return J>=h1.UPPER_A&&J<=h1.UPPER_Z||J>=h1.LOWER_A&&J<=h1.LOWER_Z||_j(J)}function zT(J){return J===h1.EQUALS||JT(J)}class pj{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)|bD)===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(_j(Y)||eI(Y)){let G=Y<=h1.NINE?Y-h1.ZERO:(Y|bD)-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(_j(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(AD(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],Z=(G&VJ.VALUE_LENGTH)>>14;while(z<J.length){if(Z===0&&(G&VJ.FLAG13)!==0){let Q=(G&VJ.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let f=G&VJ.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],Z=(G&VJ.VALUE_LENGTH)>>14}if(z>=J.length)break;let X=J.charCodeAt(z);if(X===h1.SEMI&&Z!==0&&(G&VJ.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,Z,this.consumed+this.excess);if(this.treeIndex=GT(Y,G,this.treeIndex+Math.max(1,Z),X),this.treeIndex<0)return this.result===0||this.decodeMode===BY.Attribute&&(Z===0||zT(X))?0:this.emitNotTerminatedNamedEntity();if(G=Y[this.treeIndex],Z=(G&VJ.VALUE_LENGTH)>>14,Z!==0){if(X===h1.SEMI)return this.emitNamedEntityData(this.treeIndex,Z,this.consumed+this.excess);if(this.decodeMode!==BY.Strict&&(G&VJ.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]&VJ.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]&~(VJ.VALUE_LENGTH|VJ.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!==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 YT(J){let z="",Y=new pj(J,(G)=>z+=OD(G));return function(Z,X){let Q=0,f=0;while((f=Z.indexOf("&",f))>=0){z+=Z.slice(Q,f),Y.startEntity(X);let B=Y.write(Z,f+1);if(B<0){Q=f+Y.end();break}Q=f+B,f=B===0?Q+1:Q}let H=z+Z.slice(Q);return z="",H}}function GT(J,z,Y,G){let Z=(z&VJ.BRANCH_LENGTH)>>7,X=z&VJ.JUMP_TABLE;if(Z===0)return X!==0&&G===X?Y:-1;if(X){let B=G-X;return B<0||B>=Z?-1:J[Y+B]-1}let Q=Z+1>>1,f=0,H=Z-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 TG(J,z=BY.Legacy){return ZT(J,z)}var h1,bD=32,YJ,BY,ZT;var SD=k(()=>{RD();ND();kD();(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={}));ZT=YT(CD)});var ID,TD;var xD=k(()=>{SD();(function(J){J[J.XML=0]="XML",J[J.HTML=1]="HTML"})(ID||(ID={}));(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"})(TD||(TD={}))});import{CliRenderer as QT,createCliRenderer as qT,engine as fT}from"@opentui/core";import{createTestRenderer as B$}from"@opentui/core/testing";import{ASCIIFontRenderable as HT,BoxRenderable as BT,CodeRenderable as jT,DiffRenderable as WT,InputRenderable as VT,LineNumberRenderable as KT,MarkdownRenderable as UT,ScrollBoxRenderable as DT,SelectRenderable as LT,TabSelectRenderable as MT,TextareaRenderable as FT,TextAttributes as rj,TextNodeRenderable as OT,TextRenderable as AT}from"@opentui/core";import{engine as V$,Timeline as K$}from"@opentui/core";import{BaseRenderable as vD,createTextAttributes as gT,InputRenderable as oj,InputRenderableEvents as rX,isTextNodeRenderable as ej,parseColor as uD,Renderable as CT,RootTextNodeRenderable as NT,ScrollBoxRenderable as kT,SelectRenderable as ED,SelectRenderableEvents as sj,TabSelectRenderable as wD,TabSelectRenderableEvents as tj,TextNodeRenderable as bT,TextRenderable as mD}from"@opentui/core";import{BaseRenderable as PT,isTextNodeRenderable as hT,TextNodeRenderable as vT,TextRenderable as mT,Yoga as hD}from"@opentui/core";import{BoxRenderable as C$,RootRenderable as N$}from"@opentui/core";import{TimeToFirstDrawRenderable as iT}from"@opentui/core";import{createSlotRegistry as S$}from"@opentui/core";function IT({createElement:J,createTextNode:z,createSlotNode:Y,isTextNode:G,replaceText:Z,insertNode:X,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);Iz((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 i=typeof N,e=I!==void 0;if(i==="string"||i==="number"){if(i==="number")N=N.toString();if(e){let J0=M[0];if(J0&&G(J0))Z(J0,N);else J0=z(N);M=O(S,M,I,J0)}else if(M!==""&&typeof M==="string")Z(B(S),M=N);else O(S,M,I,z(N)),M=N}else if(N==null||i==="boolean")M=O(S,M,I);else if(i==="function")return Iz(()=>{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 Iz(()=>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))X(S,N);else x(S,N,B(S));M=N}return M}function L(S,N,M){let I=!1;for(let r=0,i=N.length;r<i;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,i=I,e=0,J0=0,T=V(N[r-1]),q0=null;while(e<r||J0<i){if(N[e]===M[J0]){e++,J0++;continue}while(N[r-1]===M[i-1])r--,i--;if(r===e){let p=i<I?J0?V(M[J0-1]):M[i-J0]:T;while(J0<i)X(S,M[J0++],p)}else if(i===J0)while(e<r){if(!q0||!q0.has(N[e]))Q(S,N[e]);e++}else if(N[e]===M[i-1]&&M[J0]===N[r-1]){let p=V(N[--r]);X(S,M[J0++],V(N[e++])),X(S,M[--i],p),N[r]=M[i]}else{if(!q0){q0=new Map;let B0=J0;while(B0<i)q0.set(M[B0],B0++)}let p=q0.get(N[e]);if(p!=null)if(J0<p&&p<i){let B0=e,L0=1,V0;while(++B0<r&&B0<i){if((V0=q0.get(N[B0]))==null||V0!==p+L0)break;L0++}if(L0>p-J0){let t=N[e];while(J0<p)X(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 i;while(i=B(S))Q(S,i);return I&&X(S,I),I??""}let r=I||Y();if(N.length){let i=!1;for(let e=N.length-1;e>=0;e--){let J0=N[e];if(r!==J0){let T=H(J0)===S;if(!i&&!e)T?x(S,r,J0):X(S,r,M);else T&&Q(S,J0)}else i=!0}}else X(S,r,M);return[r]}function g(S,N,M){for(let I=0,r=N.length;I<r;I++)X(S,N[I],M)}function x(S,N,M){X(S,N,M),Q(S,M)}function _(S,N,M={},I){if(N||(N={}),!I)Iz(()=>M.children=K(S,N.children,M.children));return Iz(()=>N.ref&&N.ref(S)),Iz(()=>{for(let r in N){if(r==="children"||r==="ref")continue;let i=N[r];if(i===M[r])continue;f(S,r,i,M[r]),M[r]=i}}),M}return{render(S,N){let M;return fG((I)=>{M=I,j(N,S())}),M},insert:j,spread(S,N,M){if(typeof N==="function")Iz((I)=>_(S,N(),I,M));else _(S,N,void 0,M)},createElement:J,createTextNode:z,insertNode:X,setProp(S,N,M,I){return f(S,N,M,I),M},mergeProps:Mq,effect:Iz,memo:ST,createComponent:SV,use(S,N,M){return _1(()=>S(N,M))}}}function TT(J){let z=IT(J);return z.mergeProps=Mq,z}function Z9(J){if(!ef.has(J))ef.set(J,0);let z=ef.get(J)+1;return ef.set(J,z),`${J}-${z}`}function yT(J,z,Y){if(GJ("Inserting node:",s1(z),"into parent:",s1(J),"with anchor:",s1(Y),z instanceof vZ),z instanceof oX)z.parent=J,z=z.getSlotChild(J);if(Y&&Y instanceof oX)Y=Y.getSlotChild(J);if(ej(z)){if(!(J instanceof mD)&&!ej(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 vD))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=J9(J),Z=G.findIndex((X)=>X.id===Y.id);if(Z===-1)GJ("[INSERT]","Could not find anchor",s1(J),s1(Y),"[children]",...G.map((X)=>X.id));J.add(z,Z)}function xT(J,z){if(GJ("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 vD&&!z.parent){z.destroyRecursively();return}})}function uT(J){GJ("Creating text node:",J);let z=Z9("text-node");if(typeof J==="number")J=J.toString();return vZ.fromString(TG(J),{id:z})}function ET(){let J=Z9("slot-node");return GJ("Creating slot node",J),new oX(J)}function PD(J){GJ("Getting parent of node:",s1(J));let z=J.parent??void 0;if(z instanceof NT)z=z.textParent??void 0;let Y=z?.parent?.parent?.parent;if(Y instanceof kT&&Y.content===z)z=Y;return z}function dT(J){Object.assign(aD,J)}function nT(){return aD}var G9,fJ=()=>{let J=wJ(G9);if(!J)throw Error("No renderer found");return J},RT=(J)=>{let z=fJ();e1(()=>{z.on("resize",J)}),k1(()=>{z.off("resize",J)})},mz=()=>{let J=fJ(),[z,Y]=a({width:J.width,height:J.height});return RT((Z,X)=>{Y({width:Z,height:X})}),z},ST=(J)=>K0(()=>J()),ef,GJ=(...J)=>{if(process.env.DEBUG)console.log("[Reconciler]",...J)},vZ,s1=(J)=>{if(!J)return;return J.id},J9=(J)=>{let z;if(J instanceof mD)z=J.getTextChildren();else z=J.getChildren();return z},wT,y,x0,b,W,E0,D,U,A$,q,cD,cz,X9,dD,nD,oX,sX,JH,z9,Y9,iD,lD,$D,cT,aD,lT=(J,z)=>{let Y,G=!1,Z=!1,X=!0,Q=!1,f=J.destroy.bind(J),H=()=>{if(Z)return;if(!Y){G=!0;return}Z=!0,Y()};J.once("destroy",H),J.destroy=()=>{if(X){Q=!0;return}f()};try{Y=wT(()=>b(G9.Provider,{get value(){return J},get children(){return b(z,{})}}),J.root)}finally{X=!1,J.destroy=f}if(G)H();if(Q)f()},_D=async(J,z={})=>{let Y=z instanceof QT?z:await qT({...z,onDestroy:()=>{z.onDestroy?.()}});fT.attach(Y),lT(Y,J)};var P=k(()=>{j1();xD();j1();j1();j1();G9=Tz();ef=new Map;vZ=class vZ extends bT{static fromString(J,z={}){let Y=new vZ(z);return Y.add(J),Y}};({render:wT,effect:y,memo:x0,createComponent:b,createElement:W,createTextNode:E0,insertNode:D,insert:U,spread:A$,setProp:q,mergeProps:cD,use:cz}=TT({createElement(J){GJ("Creating element:",J);let z=Z9(J),Y=wJ(G9);if(!Y)throw Error("No renderer found");let G=nT();if(!G[J])throw Error(`[Reconciler] Unknown component type: ${J}`);let Z=new G[J](Y,{id:z});return GJ("Element created with id:",z),Z},createTextNode:uT,createSlotNode:ET,replaceText(J,z){if(GJ("Replacing text:",z,"in node:",s1(J)),!(J instanceof vZ))return;J.replace(TG(z),0)},setProperty(J,z,Y,G){if(z.startsWith("on:")){let Z=z.slice(3);if(Y)J.on(Z,Y);if(G)J.off(Z,G);return}if(ej(J)){if(z==="href"){J.link={url:Y};return}if(z==="style"){J.attributes|=gT(Y),J.fg=Y.fg?uD(Y.fg):J.fg,J.bg=Y.bg?uD(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 CT))return;if(Y)J.focus();else J.blur();break;case"onChange":let Z=void 0;if(J instanceof ED)Z=sj.SELECTION_CHANGED;else if(J instanceof wD)Z=tj.SELECTION_CHANGED;else if(J instanceof oj)Z=rX.CHANGE;if(!Z)break;if(Y)J.on(Z,Y);if(G)J.off(Z,G);break;case"onInput":if(J instanceof oj){if(Y)J.on(rX.INPUT,Y);if(G)J.off(rX.INPUT,G)}break;case"onSubmit":if(J instanceof oj){if(Y)J.on(rX.ENTER,Y);if(G)J.off(rX.ENTER,G)}else J[z]=Y;break;case"onSelect":if(J instanceof ED){if(Y)J.on(sj.ITEM_SELECTED,Y);if(G)J.off(sj.ITEM_SELECTED,G)}else if(J instanceof wD){if(Y)J.on(tj.ITEM_SELECTED,Y);if(G)J.off(tj.ITEM_SELECTED,G)}break;case"style":for(let X in Y){let Q=Y[X];if(G!==void 0&&Q===G[X])continue;J[X]=Q}break;case"text":case"content":{let X=typeof Y==="string"?Y:Array.isArray(Y)?Y.join(""):`${Y}`;J[z]=TG(X);break}default:J[z]=Y}},isTextNode(J){return J instanceof vZ},insertNode:yT,removeNode:xT,getParentNode:PD,getFirstChild(J){GJ("Getting first child of node:",s1(J));let z=J9(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=PD(J);if(!z){GJ("No parent found for node:",s1(J));return}let Y=J9(z),G=Y.indexOf(J);if(G===-1||G===Y.length-1){GJ("No next sibling found for node:",s1(J));return}let Z=Y[G+1];if(!Z){GJ("Next sibling is null for node:",s1(J));return}return GJ("Next sibling found:",s1(Z),"for node:",s1(J)),Z}}));X9=class X9 extends PT{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}};dD=class dD extends vT{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()}};nD=class nD extends X9{yogaNode;slotParent;destroyed=!1;constructor(J,z){super(J);this._visible=!1,this.slotParent=z,this.yogaNode=hD.default.Node.create(),this.yogaNode.setDisplay(hD.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 X9{layoutNode;textNode;destroyed=!1;constructor(J){super(J);this._visible=!1}getSlotChild(J){if(hT(J)||J instanceof mT){if(!this.textNode)this.textNode=new dD(`slot-text-${this.id}`,this);return this.textNode}if(!this.layoutNode)this.layoutNode=new nD(`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 OT{_ctx;constructor(J,z){super(z);this._ctx=J}};JH=class JH extends sX{constructor(J,z){super(null,J);if(z==="b"||z==="strong")this.attributes=(this.attributes||0)|rj.BOLD;else if(z==="i"||z==="em")this.attributes=(this.attributes||0)|rj.ITALIC;else if(z==="u")this.attributes=(this.attributes||0)|rj.UNDERLINE}};z9=class z9 extends JH{constructor(J){super(J,"b")}};Y9=class Y9 extends JH{constructor(J){super(J,"i")}};iD=class iD extends JH{constructor(J){super(J,"u")}};lD=class lD extends sX{constructor(J,z){super(null,z);this.add()}add(){return super.add(`
|
|
262
|
+
`)}};$D=class $D extends sX{constructor(J,z){let Y={...z,link:{url:z.href}};super(null,Y)}};cT={box:BT,text:AT,input:VT,select:LT,textarea:FT,ascii_font:HT,tab_select:MT,scrollbox:DT,code:jT,diff:WT,line_number:KT,markdown:UT,span:sX,strong:z9,b:z9,em:Y9,i:Y9,u:iD,br:lD,a:$D},aD={...cT};dT({time_to_first_draw:iT})});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 $T(J){let z=J?.changes;if(!z||typeof z!=="object"||Array.isArray(z))return null;let Y=new Map;for(let[G,Z]of Object.entries(z)){let X=Z;if(typeof X?.added!=="number"||typeof X.deleted!=="number")return null;Y.set(G,{added:X.added,deleted:X.deleted})}return Y}function aT(J){let z=J;if(typeof z?.theme!=="string")return null;return{theme:z.theme,transparentBackground:z.transparentBackground===!0,focusAccent:typeof z.focusAccent==="string"?z.focusAccent:null,locale:typeof z.locale==="string"?z.locale:"",sortMode:z.sortMode==="recent"?"recent":"default",keysCollapsed:z.keysCollapsed===!0,projectFilter:typeof z.projectFilter==="string"&&z.projectFilter.length>0?z.projectFilter:null}}function _T(J,z){if(J.size!==z.size)return!1;for(let[Y,G]of J){let Z=z.get(Y);if(!Z||!vz(G,Z))return!1}return!0}function pT(J){let z=J?.activity;if(!z||typeof z!=="object"||Array.isArray(z))return null;let Y=new Map;for(let[G,Z]of Object.entries(z)){let X=Z;if(typeof X?.mtimeMs!=="number"||typeof X.completionAt!=="number")return null;if(X.completionId!==null&&typeof X.completionId!=="string")return null;Y.set(G,{mtimeMs:X.mtimeMs,completionId:X.completionId,completionAt:X.completionAt})}return Y}function rT(J,z){if(J.size!==z.size)return!1;for(let[Y,G]of J){let Z=z.get(Y);if(!Z||Z.mtimeMs!==G.mtimeMs||Z.completionId!==G.completionId||Z.completionAt!==G.completionAt)return!1}return!0}class KJ{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([]),[Z,X]=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=(i)=>G(()=>i),this.activeTaskAcc=Z,this.setActiveTaskSig=(i)=>X(()=>i),this.updateAcc=Q,this.setUpdateSig=(i)=>f(()=>i),this.daemonVersionAcc=H,this.setDaemonVersionSig=(i)=>B(()=>i),this.engineStateAcc=V,this.setEngineStateSig=(i)=>j(()=>i),this.taskJobsAcc=K,this.setTaskJobsSig=(i)=>L(()=>i),this.worktreeChangesAcc=A,this.setWorktreeChangesSig=(i)=>O(()=>i),this.transcriptActivityAcc=g,this.setTranscriptActivitySig=(i)=>x(()=>i),this.uiPrefsAcc=_,this.setUiPrefsSig=(i)=>S(()=>i),this.keybindingsRevAcc=N,this.setKeybindingsRevSig=(i)=>M(()=>i),this.connectionStateAcc=I,this.setConnectionState=(i)=>r(()=>i),this.ensureReachable=z.ensureReachable??yZ,this.role=z.role??"pane",this.channels=z.channels,this.subscribesTasks=!z.channels||z.channels.includes("task.snapshot"),this.client.on("*",(i)=>this.handleEvent(i.name,i.payload)),this.client.onLifecycle("close",()=>{if(this.setConnectionState("disconnected"),this.role==="pane")tz("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(),tz("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:$J,minProtocolVersion:FY}),z=typeof J.protocolVersion==="number"?J.protocolVersion:$J,Y=typeof J.minProtocolVersion==="number"?J.minProtocolVersion:z;if(!yQ({localVersion:$J,localMin:FY,remoteVersion:z,remoteMin:Y}))throw Error(`kobe daemon is protocol v${z} (min v${Y}); this client is v${$J} (min v${FY}). 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"),tz("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()=>aW(this.daemonVersionAcc()??void 0,p0)}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 fG((Y)=>{return r0(()=>{let G=this.tasksAcc();if(z){z=!1;return}try{J(G)}catch(Z){console.error("[kobe RemoteOrchestrator] task listener threw:",Z)}}),Y})}async createTask(J){let{modelEffort:z,...Y}=J,G=await this.client.request("task.create",{...Y,effort:z});return tX(G.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 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=${jY(Y?.taskId)}, kind=${jY(Y?.kind)})`);return}let G=this.taskJobsAcc();if(Y.phase==="running"){let Z=new Map(G);Z.set(Y.taskId,{kind:Y.kind}),this.setTaskJobsSig(Z);return}if((Y.phase==="done"||Y.phase==="error")&&G.has(Y.taskId)){let Z=new Map(G);Z.delete(Y.taskId),this.setTaskJobsSig(Z)}return}if(J==="worktree.changes"){let Y=$T(z);if(!Y){o1("orch",`dropped worktree.changes event: malformed changes payload (${jY(z)})`);return}let G=this.worktreeChangesAcc();if(G&&_T(G,Y))return;this.setWorktreeChangesSig(Y);return}if(J==="transcript.activity"){let Y=pT(z);if(!Y){o1("orch",`dropped transcript.activity event: malformed activity payload (${jY(z)})`);return}let G=this.transcriptActivityAcc();if(G&&rT(G,Y))return;this.setTranscriptActivitySig(Y);return}if(J==="ui-prefs"){let Y=aT(z);if(!Y){let G=z?.theme;o1("orch",`dropped ui-prefs event: theme must be a string (got ${jY(G)})`);return}this.setUiPrefsSig(Y);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((Z)=>Z.id)),G=null;for(let Z of z.keys()){if(Y.has(Z))continue;if(!G)G=new Map(z);G.delete(Z)}if(G)this.setEngineStateSig(G)}pruneTaskJobs(J){let z=this.taskJobsAcc();if(z.size===0)return;let Y=new Set(J.map((Z)=>Z.id)),G=null;for(let Z of z.keys()){if(Y.has(Z))continue;if(!G)G=new Map(z);G.delete(Z)}if(G)this.setTaskJobsSig(G)}}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 nY=k(()=>{zG();FJ();eY();j1();SZ();rJ();MJ()});function oD(J){let z=J[jz];if(!z){if(Object.defineProperty(J,jz,{value:z=new Proxy(J,tT)}),!Array.isArray(J)){let Y=Object.keys(J),G=Object.getOwnPropertyDescriptors(J),Z=Object.getPrototypeOf(J),X=Z!==null&&J!==null&&typeof J==="object"&&!Array.isArray(J)&&Z!==Object.prototype;if(X){let Q=Object.getOwnPropertyDescriptors(Z);Y.push(...Object.keys(Q)),Object.assign(G,Q)}for(let Q=0,f=Y.length;Q<f;Q++){let H=Y[Q];if(X&&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[jz]||!(z=Object.getPrototypeOf(J))||z===Object.prototype||Array.isArray(J))}function JQ(J,z=new Set){let Y,G,Z,X;if(Y=J!=null&&J[Q9])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(Z=J[Q],(G=JQ(Z,z))!==Z)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(X=Q[H],f[X].get)continue;if(Z=J[X],(G=JQ(Z,z))!==Z)J[X]=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 zQ(J,z,Y){if(J[z])return J[z];let[G,Z]=a(Y,{equals:!1,internal:!0});return G.$=Z,J[z]=G}function oT(J,z){let Y=Reflect.getOwnPropertyDescriptor(J,z);if(!Y||Y.get||!Y.configurable||z===jz||z===mZ)return Y;return delete Y.value,delete Y.writable,Y.get=()=>J[jz][z],Y}function sD(J){Lq()&&zQ(YH(J,mZ),rD)()}function sT(J){return sD(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 Z=J[z],X=J.length;if(pD.onStoreNodeUpdate&&pD.onStoreNodeUpdate(J,z,Y,Z),Y===void 0){if(delete J[z],J[WY]&&J[WY][z]&&Z!==void 0)J[WY][z].$()}else if(J[z]=Y,J[WY]&&J[WY][z]&&Z===void 0)J[WY][z].$();let Q=YH(J,mZ),f;if(f=zQ(Q,z,Z))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[rD])&&f.$()}function tD(J,z){let Y=Object.keys(z);for(let G=0;G<Y.length;G+=1){let Z=Y[G];if(eD(Z))continue;GH(J,Z,z[Z])}}function eD(J){return J==="__proto__"||J==="constructor"||J==="prototype"}function eT(J,z){if(typeof z==="function")z=z(J);if(z=JQ(z),Array.isArray(z)){if(J===z)return;let Y=0,G=z.length;for(;Y<G;Y++){let Z=z[Y];if(J[Y]!==Z)GH(J,Y,Z)}GH(J,"length",G)}else tD(J,z)}function eX(J,z,Y=[]){let G,Z=J;if(z.length>1){G=z.shift();let Q=typeof G,f=Array.isArray(J);if(Q==="string"&&(G==="__proto__"||z.length>1&&eD(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++)eX(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))eX(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)eX(J,[j].concat(z),Y);return}else if(z.length>1){eX(J[G],z,[G].concat(Y));return}Z=J[G],Y=[G].concat(Y)}let X=z[0];if(typeof X==="function"){if(X=X(Z,Y),X===Z)return}if(G===void 0&&X==null)return;if(X=JQ(X),G===void 0||zH(Z)&&zH(X)&&!Array.isArray(X))tD(Z,X);else GH(J,G,X)}function dz(...[J,z]){let Y=JQ(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 Z=oD(Y);TV.registerGraph({value:Y,name:z&&z.name});function X(...Q){Dq(()=>{G&&Q.length===1?eT(Y,Q[0]):eX(Y,Q)})}return[Z,X]}var Q9,mZ,WY,rD,pD,tT,m$;var cZ=k(()=>{j1();Q9=Symbol("store-raw"),mZ=Symbol("store-node"),WY=Symbol("store-has"),rD=Symbol("store-self"),pD={onStoreNodeUpdate:null};tT={get(J,z,Y){if(z===Q9)return J;if(z===jz)return Y;if(z===Vq)return sD(J),Y;let G=YH(J,mZ),Z=G[z],X=Z?Z():J[z];if(z===mZ||z===WY||z==="__proto__")return X;if(!Z){let Q=Object.getOwnPropertyDescriptor(J,z);if(Lq()&&(typeof X!=="function"||J.hasOwnProperty(z))&&!(Q&&Q.get))X=zQ(G,z,X)()}return zH(X)?oD(X):X},has(J,z){if(z===Q9||z===jz||z===Vq||z===mZ||z===WY||z==="__proto__")return!0;return Lq()&&zQ(YH(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:sT,getOwnPropertyDescriptor:oT};m$=Symbol("store-root")});function ZH(J){let z=Tz();return{provider:(Y)=>{let G=J.init(Y);return b(Z0,{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=wJ(z);if(!Y)throw Error(`${J.name} context must be used within a context provider`);return Y}}}var q9=k(()=>{P();P();j1()});import{RGBA as yG}from"@opentui/core";function zy(){return Object.keys(HJ.themes)}function YQ(J){return Boolean(HJ.themes[J])}function H9(J,z){if(!J)return!1;if(!z||typeof z!=="object"||!z.theme)return!1;return xG("themes",{...HJ.themes,[J]:z}),!0}function f9(J,z="dark"){let Y=J.defs??{};function G(H,B=[]){if(typeof H==="string"){if(H==="transparent"||H==="none")return yG.fromInts(0,0,0,0);if(H.startsWith("#"))return yG.fromHex(H);if(B.includes(H))return yG.fromInts(0,0,0);let V=Y[H]??J.theme[H];if(V===void 0)return yG.fromInts(0,0,0);return G(V,[...B,H])}return G(H[z],B)}let Z={};for(let[H,B]of Object.entries(J.theme))Z[H]=G(B);let X=Z.text??yG.fromHex("#ffffff"),Q=Z.background??yG.fromHex("#000000");return{...{primary:Z.primary??X,secondary:Z.secondary??X,accent:Z.accent??Z.primary??X,error:Z.error??X,warning:Z.warning??X,success:Z.success??X,info:Z.info??X,text:X,textMuted:Z.textMuted??X,background:Q,backgroundPanel:Z.backgroundPanel??Q,backgroundElement:Z.backgroundElement??Q,backgroundMenu:Z.backgroundMenu??Z.backgroundElement??Q,backgroundDialog:Z.backgroundDialog??Z.backgroundPanel??Q,border:Z.border??X,borderActive:Z.borderActive??Z.border??X,borderSubtle:Z.borderSubtle??Z.border??X,diffAdded:Z.diffAdded??Z.success??X,diffRemoved:Z.diffRemoved??Z.error??X,diffContext:Z.diffContext??Z.textMuted??X,diffHunkHeader:Z.diffHunkHeader??Z.textMuted??X,diffAddedBg:Z.diffAddedBg??Q,diffRemovedBg:Z.diffRemovedBg??Q,selectedListItemText:Z.selectedListItemText??Q},...Z}}var Jy,uG,HJ,xG,d0,JL;var v1=k(()=>{P();j1();cZ();q9();uq();Eq();wq();Pq();hq();vq();mq();Jy={claude:HZ,conductor:BZ,nord:WZ,opencode:VZ,dracula:jZ,tokyonight:UZ,"osaka-jade":KZ},uG=["primary","success","info"],[HJ,xG]=dz({themes:{...Jy},active:"claude",mode:"dark",transparentBackground:!1,focusAccent:"primary"});({use:d0,provider:JL}=ZH({name:"Theme",init:(J)=>{if(J.mode)xG("mode",J.mode);if(J.theme&&YQ(J.theme))xG("active",J.theme);let z=fJ(),Y=K0(()=>{let Z=HJ.themes[HJ.active];if(Z)return f9(Z,HJ.mode);let X=HJ.themes.claude??HJ.themes.opencode??Object.values(HJ.themes)[0];if(!X)return f9({theme:{background:"#000000",text:"#ffffff"}},HJ.mode);return f9(X,HJ.mode)}),G=K0(()=>{let Z=Y(),X=Z[HJ.focusAccent]??Z.primary,Q={...Z,focusAccent:X};if(!HJ.transparentBackground)return Q;let f=yG.fromInts(0,0,0,0);return{...Q,background:f,backgroundPanel:f}});return r0(()=>{z?.setBackgroundColor(G().background)}),{theme:new Proxy({},{get(Z,X){let Q=G();return Q[X]??Q.text}}),get selected(){return HJ.active},get transparentBackground(){return HJ.transparentBackground},get focusAccent(){return HJ.focusAccent},mode(){return HJ.mode},set(Z){if(!YQ(Z))return!1;return xG("active",Z),!0},setMode(Z){xG("mode",Z)},setTransparentBackground(Z){xG("transparentBackground",Z)},setFocusAccent(Z){xG("focusAccent",Z)},all(){return zy()},has(Z){return YQ(Z)}}}}))});var zL,YL;var GL=k(()=>{zL={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"}},YL={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 ZL,XL;var QL=k(()=>{ZL={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"}},XL={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 qL,fL;var HL=k(()=>{qL={title:"kobe \u2014 keybindings",esc:"esc"},fL={title:"kobe \u2014 \u5FEB\u6377\u952E",esc:"esc"}});var BL,jL;var WL=k(()=>{BL={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)"}},jL={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 VL,KL;var UL=k(()=>{VL={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"}},KL={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 DL,LL;var ML=k(()=>{DL={badge:{newActivity:"\u25CF new"},preview:{diffVsHead:"diff vs HEAD",file:"file",closeHint:"\xB7 q to close",loading:"loading\u2026"}},LL={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 FL,OL;var AL=k(()=>{FL={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"},OL={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 RL,gL;var CL=k(()=>{RL={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)"}},gL={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 NL,kL;var bL=k(()=>{NL={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}"}},kL={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 SL,IL;var TL=k(()=>{SL={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`"}},IL={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 GQ(J){return typeof J==="string"&&EG.some((z)=>z.id===J)}var Yy,Gy,EG,dZ,nZ="en";var iZ=k(()=>{GL();QL();HL();WL();UL();ML();AL();CL();bL();TL();Yy={settings:RL,tasks:NL,files:ZL,newTask:VL,ops:DL,update:SL,quickTask:FL,help:qL,common:zL,keys:BL},Gy={settings:gL,tasks:kL,files:XL,newTask:KL,ops:LL,update:IL,quickTask:OL,help:fL,common:YL,keys:jL},EG=[{id:"en",label:"English"},{id:"zh",label:"\u4E2D\u6587"}],dZ={en:Yy,zh:Gy}});function ZQ(J){if(dZ[J])Zy("lang",J)}function j9(){return B9.lang}function yL(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 Xy(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=B9.lang,G=yL(dZ[Y],J)??yL(dZ.en,J)??J;return Xy(G,z)}function W9(J,z){let Y=B9.lang,G=(Z)=>{return Z.keys[J]?.[z]};return G(dZ[Y])??G(dZ.en)??z}var B9,Zy;var ZJ=k(()=>{cZ();iZ();iZ();[B9,Zy]=dz({lang:nZ})});function Qy(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 Z=`${G.join("+")}+`;return z.map((X)=>Z+X)}function K9(J,z){if(z.defaultPrevented)return!1;if(V9)return!1;let Y=J.slice(),G=Qy(z);V9=!0;try{for(let Z=Y.length-1;Z>=0;Z--){let X=Y[Z];if(!X)continue;let Q=X.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{V9=!1}}var V9=!1;function fy(){if(U9)return;let J=fJ();if(!J)throw Error("useBindings: no renderer in scope; call inside a component rendered by @opentui/solid.");U9=J.keyInput,xL=(z)=>{K9(XH,z)},U9.on("keypress",xL)}function D1(J){fy();let z=qy++,Y={config:J,id:z};r0(()=>{J()}),XH.push(Y),k1(()=>{let G=XH.findIndex((Z)=>Z.id===z);if(G>=0)XH.splice(G,1)})}var qy=1,XH,U9=null,xL=null;var yJ=k(()=>{P();j1();XH=[]});function QH(){let J=new Set;function z(G,Z){let X=setTimeout(()=>{J.delete(X),G()},Z);return J.add(X),X}function Y(G){if(J.delete(G))clearTimeout(G)}return k1(()=>{for(let G of J)clearTimeout(G);J.clear()}),{set:z,clear:Y}}var D9=k(()=>{j1()});import{RGBA as uL}from"@opentui/core";function jy(J){let z=mz(),Y=d0(),{theme:G}=Y,Z=fJ(),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=!!Z?.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),y((j)=>{var K=z().width,L=z().height,A=Y.transparentBackground?By:Hy,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 Wy(){let[J,z]=dz({stack:[],size:"medium"}),Y=fJ(),G=null,Z=QH();function X(){Z.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)),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?.();Dq(()=>{z("size","medium"),z("stack",[])}),X()},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)X()},get stack(){return J.stack},get size(){return J.size},setSize(Q){z("size",Q)}}}function wL(J){let z=Wy();return b(EL.Provider,{value:z,get children(){return[x0(()=>J.children),(()=>{var Y=W("box");return q(Y,"position","absolute"),q(Y,"zIndex",3000),U(Y,b(Z0,{get when(){return z.stack.length},get children(){return b(jy,{onClose:()=>z.clear(),get size(){return z.size},get children(){return z.stack.at(-1).element()}})}})),Y})()]}})}function c1(){let J=wJ(EL);if(!J)throw Error("useDialog must be used within a DialogProvider");return J}var Hy,By,EL;var nJ=k(()=>{P();P();P();P();P();P();P();P();j1();cZ();v1();yJ();D9();Hy=uL.fromInts(0,0,0,128),By=uL.fromInts(0,0,0,64);EL=Tz()});import{spawnSync as L9}from"child_process";import*as hL from"fs";function PL(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 vL(J){let z=J.trim();if(!z)return"repo path is required";let Y;try{Y=hL.statSync(z)}catch{return`path does not exist: ${z}`}if(!Y.isDirectory())return`not a directory: ${z}`;try{if(L9("git",["rev-parse","--git-dir"],{cwd:z,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]}).status!==0)return PL(z)}catch{return PL(z)}return null}function XQ(J){if(!J)return null;try{let z=L9("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 mL(J){if(!J)return[];try{let z=L9("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 Z=(f)=>f==="main"?0:f==="master"?1:f==="develop"?2:3,X=Z(Y),Q=Z(G);if(X!==Q)return X-Q;return Y.localeCompare(G)})}catch{return[]}}var Cz="main";var qH=()=>{};import*as cL from"fs";import*as fH from"os";function UJ(J){if(J==="~")return fH.homedir();if(J.startsWith("~/"))return fH.homedir()+J.slice(1);return J}function M9(J){if(!J)return{base:"",filter:""};let Y=UJ(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 F9(J){if(!J)return[];try{let z=cL.readdirSync(J,{withFileTypes:!0}),Y=[];for(let G of z)if(G.isDirectory())Y.push(G.name);return Y.sort((G,Z)=>G.localeCompare(Z))}catch{return[]}}function O9(J,z){let Y=z.toLowerCase(),Z=Y.startsWith(".")?J:J.filter((X)=>!X.startsWith("."));if(!Y)return Z;return Z.filter((X)=>X.toLowerCase().startsWith(Y))}function QQ(J,z,Y){let G=z+Y;if(J.startsWith("~")){let Z=fH.homedir();if(G===Z)return"~";if(G.startsWith(`${Z}/`))return`~${G.slice(Z.length)}`}return G}var HH=()=>{};import{spawn as Vy}from"child_process";import*as wG from"fs";import*as qQ from"path";function dL(J){let z=J.trim().replace(/\/+$/,"");if(!z)return"";let Y=z.lastIndexOf("/"),G=z.lastIndexOf(":"),Z=Math.max(Y,G);return(Z>=0?z.slice(Z+1):z).replace(/\.git$/i,"")}function nL(J){let z=J.trim();if(!z)return F("newTask.error.gitUrlRequired");let Y=z.includes("://"),G=z.includes("@")&&z.includes(":"),Z=z.includes("/");if(!Y&&!G&&!Z)return F("newTask.error.gitUrlInvalid",{url:z});return null}function iL(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 Z=UJ(G),X;try{X=wG.statSync(Z)}catch{return F("newTask.error.parentNotFound",{path:Z})}if(!X.isDirectory())return F("newTask.error.parentNotDir",{path:Z});let Q=qQ.join(Z,Y);if(wG.existsSync(Q))return F("newTask.error.targetExists",{path:Q});return null}function lL(J,z){return qQ.join(UJ(J.trim()),z.trim())}function $L(J,z){let Y=z.trim();if(!Y)return z;let G=UJ(J.trim());if(!G)return z;try{if(!wG.statSync(G).isDirectory())return z}catch{return z}if(!wG.existsSync(qQ.join(G,Y)))return Y;for(let Z=2;Z<1000;Z++){let X=`${Y}-${Z}`;if(!wG.existsSync(qQ.join(G,X)))return X}return Y}function aL(J,z,Y){return new Promise((G)=>{let Z="";try{let X=Vy("git",["clone","--progress",J,z],{stdio:["ignore","ignore","pipe"]});X.stderr?.setEncoding("utf-8"),X.stderr?.on("data",(Q)=>{if(Z+=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)=>{G({ok:!1,error:Q.message})}),X.on("close",(Q)=>{if(Q===0){G({ok:!0,path:z});return}let f=Z.split(/[\r\n]+/).filter((H)=>H.trim().length>0).pop()??`git clone exited with ${Q}`;G({ok:!1,error:f})})}catch(X){G({ok:!1,error:X instanceof Error?X.message:String(X)})}})}var _L=k(()=>{ZJ();HH()});function A9(J){if(J==="existing")return"clone";if(J==="clone")return"adopt";return"existing"}function R9(J){if(J==="existing")return"adopt";if(J==="clone")return"existing";return"clone"}function pL(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 DJ(J){return J.replace(/[\r\n]+/g,"")}function fQ(J){return!/\S/u.test(J)}function g9(J,z="existing"){if(J==="confirm")return"tabs";if(J==="tabs")return"engine";if(J==="engine")return C9(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 C9(J){if(J==="clone")return"cloneUrl";if(J==="adopt")return"adoptFilter";return"repo"}function rL(J,z){let Y=z.trim();if(!Y)return J;return J.filter((G)=>AQ(Y,G.path))}function oL(J,z){let Y=new Set,G=[];for(let Z of[J,...z]){let X=Z.trim();if(!X||Y.has(X))continue;Y.add(X),G.push(X)}return G}function sL(J,z){let Y=z.trim().toLowerCase();if(!Y)return J;return J.filter((G)=>G.toLowerCase().includes(Y))}function tL(J,z){let Y=z.trim().toLowerCase();if(!Y)return J;return J.filter((G)=>G.toLowerCase().includes(Y))}function HQ(J,z,Y=Ky){let G=J.length;if(G<=Y)return{items:J,start:0,total:G};let Z=Math.floor(Y/2),X=Math.max(0,z-Z);if(X+Y>G)X=G-Y;return{items:J.slice(X,X+Y),start:X,total:G}}function nz(J,z){if(z<=0)return 0;return Math.max(0,Math.min(z-1,J))}function eL(J,z,Y){let G=z[Y];if(G)return G;return J.trim()||Cz}var Ky=8;var N9=k(()=>{uH();qH()});import{TextAttributes as Yz}from"@opentui/core";function J3(J){let z=c1(),{theme:Y}=d0(),[G,Z]=a("existing"),X=()=>{let d=J.availableVendors;return d&&d.length>0?d:n1},Q=(()=>{let d=X(),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(XQ(UJ(J.defaultRepo.trim()))??Cz),[O,g]=a(!1),[x,_]=a(""),[S,N]=a(J.defaultCloneParent?.trim()?J.defaultCloneParent:"~/"),[M,I]=a(""),[r,i]=a(!1),[e,J0]=a(Cz),[T,q0]=a(!1),[p,B0]=a(""),L0=K0(()=>oL(J.defaultRepo,J.savedRepos)),V0=K0(()=>pL(j(),L0())),t=K0(()=>M9(j())),h=K0(()=>F9(t().base)),C=K0(()=>O9(h(),t().filter)),o=K0(()=>sL(L0(),j())),E=K0(()=>V0()==="browse"?C():o()),[c,s]=a(0),X0=K0(()=>HQ(E(),c())),[F0,P0]=a(!1),A0=K0(()=>mL(UJ(j().trim()))),N0=K0(()=>tL(A0(),L())),[u,g0]=a(0),Q0=K0(()=>HQ(N0(),u())),R0=K0(()=>M9(S())),y0=K0(()=>F9(R0().base)),H1=K0(()=>O9(y0(),R0().filter)),[G1,w0]=a(0),o0=K0(()=>HQ(H1(),G1())),[$,W0]=a(!1),[T0,s0]=a(""),[a0,_0]=a(0),[t0,N1]=a(new Set),[R1]=Uq(()=>G()==="adopt"?UJ(j().trim()):null,async(d)=>J.discoverAdoptable?await J.discoverAdoptable(d):[]),z0=K0(()=>rL(R1()??[],T0())),G0=K0(()=>HQ(z0().map((d)=>d.path),a0())),H0=K0(()=>{let d=G0();return z0().slice(d.start,d.start+d.items.length)});r0(()=>{z0(),_0((d)=>nz(d,z0().length))});function k0(d){N1((Y0)=>{let I0=new Set(Y0);if(I0.has(d))I0.delete(d);else I0.add(d);return I0})}function R(){let d=z0()[a0()];if(d)k0(d.path)}r0(()=>{N0(),g0(0)}),r0(()=>{let d=UJ(j().trim());if(!d)return;if(O())return;let Y0=XQ(d);if(Y0)A(Y0)}),r0(()=>{E(),s(0)}),r0(()=>{H1(),w0(0)}),r0(()=>{let d=x(),Y0=S();if(r())return;let I0=dL(d);I($L(Y0,I0))});let[h0,U0]=a(null);r0(()=>{j(),x(),S(),M(),T0(),U0(null)});function u0(){let d=UJ(j().trim());if(!d)return;let Y0=vL(d);if(Y0){U0(Y0),V("repo");return}let I0=L().trim()||Cz;J.onSubmit({repo:d,baseRef:I0,vendor:f()}),z.clear()}async function j0(){if(T())return;let d=nL(x());if(d){U0(d),V("cloneUrl");return}let Y0=iL(S(),M());if(Y0){U0(Y0),V(M().trim()?"cloneParent":"cloneFolder");return}let I0=lL(S(),M());q0(!0),B0(F("newTask.clone.progressInto",{target:I0}));let S0=await aL(x().trim(),I0,(XJ)=>{B0(XJ)});if(q0(!1),!S0.ok){U0(F("newTask.error.cloneFailed",{error:S0.error})),V("cloneUrl");return}let BJ=e().trim()||Cz,LJ=UJ(S().trim());J.onSubmit({repo:S0.path,baseRef:BJ,vendor:f(),cloned:{parentDir:LJ}}),z.clear()}function D0(){let d=z0();if(d.length===0){U0(F("newTask.error.noAdoptable"));return}let Y0=t0(),I0=Y0.size>0?d.filter((S0)=>Y0.has(S0.path)):d.slice(a0(),a0()+1);if(I0.length===0)return;J.onSubmit({mode:"adopt",repo:UJ(j().trim()),vendor:f(),adopt:I0.map((S0)=>({worktreePath:S0.path,branch:S0.branch}))}),z.clear()}function C0(){if(G()==="clone"){j0();return}if(G()==="adopt"){D0();return}u0()}function J1(d){if(T())return;if(d===G())return;Z(d),V(C9(d)),U0(null)}function z1(d){if(T())return;let Y0=d===1?A9(G()):R9(G());if(Y0===G())return;Z(Y0),U0(null),V("tabs")}function n0(d){H((Y0)=>d===1?LY(X(),Y0):EH(X(),Y0))}function x1(){if(!j().trim()&&V0()==="saved"){let Y0=E()[0];if(Y0){K(Y0),V("baseRef");return}}if(V0()==="browse"){let I0=C()[c()],S0=t();if(I0){K(QQ(j(),S0.base,I0)),s(0),P0(!0),V("baseRef");return}V("baseRef");return}let d=E()[c()];if(d){K(d),V("baseRef");return}V("baseRef")}function b0(d){let I0=E()[d];if(!I0)return;if(V0()==="browse"){let S0=t();K(QQ(j(),S0.base,I0)),s(d),P0(!0),V("baseRef");return}K(I0),s(d),V("baseRef")}function m1(){let Y0=H1()[G1()],I0=R0();if(Y0){N(QQ(S(),I0.base,Y0)),w0(0),W0(!0),V("cloneFolder");return}V("cloneFolder")}function v(d){let I0=H1()[d];if(!I0)return;let S0=R0();N(QQ(S(),S0.base,I0)),w0(d),W0(!0),V("cloneFolder")}let O0=()=>{let d=z0();if(d.length===0)return;let Y0=d.every((I0)=>t0().has(I0.path));N1(Y0?new Set:new Set(d.map((I0)=>I0.path)))};D1(()=>({bindings:[{key:"tab",cmd:()=>V((d)=>g9(d,G()))},{key:"ctrl+]",cmd:()=>J1(A9(G()))},{key:"ctrl+[",cmd:()=>J1(R9(G()))},{key:"ctrl+e",cmd:()=>H((d)=>LY(X(),d))},{key:"up",cmd:()=>{if(T())return;if(G()==="existing"&&B()==="repo"){let d=E();if(d.length===0)return;s(nz(c()-1,d.length));return}if(G()==="existing"&&B()==="baseRef"){let d=N0();if(d.length===0)return;g0(nz(u()-1,d.length));return}if(G()==="clone"&&B()==="cloneParent"){let d=H1();if(d.length===0)return;w0(nz(G1()-1,d.length));return}if(G()==="adopt"){let d=z0();if(d.length===0)return;_0(nz(a0()-1,d.length))}}},{key:"down",cmd:()=>{if(T())return;if(G()==="existing"&&B()==="repo"){let d=E();if(d.length===0)return;s(nz(c()+1,d.length));return}if(G()==="existing"&&B()==="baseRef"){let d=N0();if(d.length===0)return;g0(nz(u()+1,d.length));return}if(G()==="clone"&&B()==="cloneParent"){let d=H1();if(d.length===0)return;w0(nz(G1()+1,d.length));return}if(G()==="adopt"){let d=z0();if(d.length===0)return;_0(nz(a0()+1,d.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((d)=>g9(d,G()))}]:[],...G()==="adopt"?[{key:"ctrl+a",cmd:O0}]:[]]})),D1(()=>({enabled:B()==="confirm"&&!T(),bindings:[{key:"return",cmd:()=>C0()}]}));let W1=(d)=>B()===d?Y.primary:Y.textMuted,A1=(d)=>B()===d?Yz.BOLD|Yz.UNDERLINE:void 0,B1=(d,Y0)=>d?Y0?Yz.BOLD|Yz.UNDERLINE:Yz.BOLD:void 0;return(()=>{var d=W("box"),Y0=W("box"),I0=W("text"),S0=W("box"),BJ=W("box"),LJ=W("text"),XJ=W("box"),iJ=W("box"),iz=W("text"),AJ=W("box"),lz=W("text"),UY=W("text");return D(d,Y0),D(d,S0),D(d,AJ),q(d,"paddingLeft",2),q(d,"paddingRight",2),q(d,"gap",0),D(Y0,I0),q(Y0,"flexDirection","row"),U(I0,()=>F("newTask.title")),D(S0,BJ),q(S0,"gap",1),q(S0,"paddingTop",1),q(S0,"paddingBottom",1),U(S0,()=>{let m=()=>B()==="tabs",n=(l)=>l?Y.primary:Y.textMuted;return(()=>{var l=W("box"),w=W("text"),m0=W("text"),v0=W("text");return D(l,w),D(l,m0),D(l,v0),q(l,"flexDirection","row"),q(l,"gap",2),q(w,"onMouseUp",()=>J1("existing")),U(w,(()=>{var M0=x0(()=>G()==="existing");return()=>M0()?`\u25B8 ${F("newTask.tabs.existing")}`:` ${F("newTask.tabs.existing")}`})()),q(m0,"onMouseUp",()=>J1("clone")),U(m0,(()=>{var M0=x0(()=>G()==="clone");return()=>M0()?`\u25B8 ${F("newTask.tabs.clone")}`:` ${F("newTask.tabs.clone")}`})()),q(v0,"onMouseUp",()=>J1("adopt")),U(v0,(()=>{var M0=x0(()=>G()==="adopt");return()=>M0()?`\u25B8 ${F("newTask.tabs.adopt")}`:` ${F("newTask.tabs.adopt")}`})()),y((M0)=>{var c0=n(G()==="existing"),q1=B1(G()==="existing",m()),L1=n(G()==="clone"),jJ=B1(G()==="clone",m()),Zz=n(G()==="adopt"),DY=B1(G()==="adopt",m());return c0!==M0.e&&(M0.e=q(w,"fg",c0,M0.e)),q1!==M0.t&&(M0.t=q(w,"attributes",q1,M0.t)),L1!==M0.a&&(M0.a=q(m0,"fg",L1,M0.a)),jJ!==M0.o&&(M0.o=q(m0,"attributes",jJ,M0.o)),Zz!==M0.i&&(M0.i=q(v0,"fg",Zz,M0.i)),DY!==M0.n&&(M0.n=q(v0,"attributes",DY,M0.n)),M0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),l})()},BJ),D(BJ,LJ),D(BJ,XJ),q(BJ,"gap",0),U(LJ,()=>F("newTask.field.engine")),D(XJ,iJ),D(XJ,iz),q(XJ,"flexDirection","row"),q(XJ,"gap",2),U(XJ,b(X1,{get each(){return X()},children:(m)=>{let n=()=>f()===m;return(()=>{var l=W("text");return q(l,"onMouseUp",()=>H(m)),U(l,()=>n()?"\u25B8 ":" ",null),U(l,m,null),y((w)=>{var m0=n()?Y.primary:Y.textMuted,v0=n()?Yz.BOLD:void 0;return m0!==w.e&&(w.e=q(l,"fg",m0,w.e)),v0!==w.t&&(w.t=q(l,"attributes",v0,w.t)),w},{e:void 0,t:void 0}),l})()}}),iJ),q(iJ,"flexGrow",1),U(iz,()=>F("newTask.hint.engineCycle")),U(S0,b(Z0,{get when(){return G()==="existing"},get children(){return[(()=>{var m=W("box"),n=W("text"),l=W("input");return D(m,n),D(m,l),q(m,"gap",0),U(n,()=>F("newTask.field.repo")),q(l,"onInput",(w)=>{P0(!1),K(DJ(w))}),q(l,"onSubmit",()=>{if(!j().trim())return;x1()}),y((w)=>{var m0=W1("repo"),v0=A1("repo"),M0=j(),c0=J.defaultRepo,q1=B()==="repo";return m0!==w.e&&(w.e=q(n,"fg",m0,w.e)),v0!==w.t&&(w.t=q(n,"attributes",v0,w.t)),M0!==w.a&&(w.a=q(l,"value",M0,w.a)),c0!==w.o&&(w.o=q(l,"placeholder",c0,w.o)),q1!==w.i&&(w.i=q(l,"focused",q1,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),m})(),b(Z0,{get when(){return x0(()=>B()==="repo"&&E().length>0)()&&!F0()},get children(){var m=W("box");return q(m,"gap",0),q(m,"paddingLeft",2),U(m,b(Z0,{get when(){return X0().start>0},get children(){var n=W("text");return q(n,"wrapMode","none"),U(n,()=>F("newTask.picker.moreAbove",{count:X0().start})),y((l)=>q(n,"fg",Y.textMuted,l)),n}}),null),U(m,b(X1,{get each(){return X0().items},children:(n,l)=>{let w=()=>X0().start+l(),m0=()=>w()===c(),v0=()=>V0()==="saved"&&n===J.defaultRepo,M0=()=>V0()==="saved"&&j().trim()===n,c0=()=>V0()==="browse"?"/":"",q1=()=>v0()?` ${F("newTask.hint.currentDir")}`:"";return(()=>{var L1=W("text");return q(L1,"wrapMode","none"),q(L1,"onMouseUp",()=>b0(w())),U(L1,()=>m0()?"\u25B8 ":" ",null),U(L1,n,null),U(L1,c0,null),U(L1,q1,null),y((jJ)=>{var Zz=m0()?Y.primary:M0()?Y.accent:Y.textMuted,DY=m0()?Yz.BOLD:void 0;return Zz!==jJ.e&&(jJ.e=q(L1,"fg",Zz,jJ.e)),DY!==jJ.t&&(jJ.t=q(L1,"attributes",DY,jJ.t)),jJ},{e:void 0,t:void 0}),L1})()}}),null),U(m,b(Z0,{get when(){return X0().start+X0().items.length<X0().total},get children(){var n=W("text");return q(n,"wrapMode","none"),U(n,()=>F("newTask.picker.moreBelow",{count:X0().total-X0().start-X0().items.length})),y((l)=>q(n,"fg",Y.textMuted,l)),n}}),null),m}}),(()=>{var m=W("box"),n=W("text"),l=W("input");return D(m,n),D(m,l),q(m,"gap",0),U(n,()=>F("newTask.field.fromBranch")),q(l,"placeholder",Cz),q(l,"onInput",(w)=>{g(!0),A(DJ(w))}),q(l,"onSubmit",()=>{A(eL(L(),N0(),u())),g(!0),u0()}),y((w)=>{var m0=W1("baseRef"),v0=A1("baseRef"),M0=L(),c0=B()==="baseRef";return m0!==w.e&&(w.e=q(n,"fg",m0,w.e)),v0!==w.t&&(w.t=q(n,"attributes",v0,w.t)),M0!==w.a&&(w.a=q(l,"value",M0,w.a)),c0!==w.o&&(w.o=q(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),b(Z0,{get when(){return x0(()=>B()==="baseRef"&&N0().length===0)()&&h0()==null},get children(){var m=W("box"),n=W("text");return D(m,n),q(m,"gap",0),q(m,"paddingLeft",2),q(m,"paddingBottom",1),q(n,"wrapMode","none"),U(n,(()=>{var l=x0(()=>A0().length===0);return()=>l()?F("newTask.hint.noBranchesFound"):F("newTask.hint.noMatchBranch")})()),y((l)=>q(n,"fg",Y.textMuted,l)),m}}),b(Z0,{get when(){return x0(()=>B()==="baseRef")()&&N0().length>0},get children(){var m=W("box");return q(m,"gap",0),q(m,"paddingLeft",2),q(m,"paddingBottom",1),U(m,b(Z0,{get when(){return Q0().start>0},get children(){var n=W("text");return q(n,"wrapMode","none"),U(n,()=>F("newTask.picker.moreAbove",{count:Q0().start})),y((l)=>q(n,"fg",Y.textMuted,l)),n}}),null),U(m,b(X1,{get each(){return Q0().items},children:(n,l)=>{let w=()=>Q0().start+l(),m0=()=>w()===u(),v0=()=>L().trim()===n;return(()=>{var M0=W("text");return q(M0,"wrapMode","none"),q(M0,"onMouseUp",()=>{A(n),g(!0),g0(w()),V("confirm")}),U(M0,()=>m0()?"\u25B8 ":" ",null),U(M0,n,null),y((c0)=>{var q1=m0()?Y.primary:v0()?Y.accent:Y.textMuted,L1=m0()?Yz.BOLD:void 0;return q1!==c0.e&&(c0.e=q(M0,"fg",q1,c0.e)),L1!==c0.t&&(c0.t=q(M0,"attributes",L1,c0.t)),c0},{e:void 0,t:void 0}),M0})()}}),null),U(m,b(Z0,{get when(){return Q0().start+Q0().items.length<Q0().total},get children(){var n=W("text");return q(n,"wrapMode","none"),U(n,()=>F("newTask.picker.moreBelow",{count:Q0().total-Q0().start-Q0().items.length})),y((l)=>q(n,"fg",Y.textMuted,l)),n}}),null),m}})]}}),null),U(S0,b(Z0,{get when(){return G()==="clone"},get children(){return[(()=>{var m=W("box"),n=W("text"),l=W("input");return D(m,n),D(m,l),q(m,"gap",0),U(n,()=>F("newTask.field.gitUrl")),q(l,"placeholder","https://github.com/user/repo.git"),q(l,"onInput",(w)=>_(DJ(w))),q(l,"onSubmit",()=>{if(!x().trim())return;V("cloneParent")}),y((w)=>{var m0=W1("cloneUrl"),v0=A1("cloneUrl"),M0=x(),c0=B()==="cloneUrl";return m0!==w.e&&(w.e=q(n,"fg",m0,w.e)),v0!==w.t&&(w.t=q(n,"attributes",v0,w.t)),M0!==w.a&&(w.a=q(l,"value",M0,w.a)),c0!==w.o&&(w.o=q(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),(()=>{var m=W("box"),n=W("text"),l=W("input");return D(m,n),D(m,l),q(m,"gap",0),U(n,()=>F("newTask.field.parentDir")),q(l,"placeholder","~/"),q(l,"onInput",(w)=>{W0(!1),N(DJ(w))}),q(l,"onSubmit",()=>m1()),y((w)=>{var m0=W1("cloneParent"),v0=A1("cloneParent"),M0=S(),c0=B()==="cloneParent";return m0!==w.e&&(w.e=q(n,"fg",m0,w.e)),v0!==w.t&&(w.t=q(n,"attributes",v0,w.t)),M0!==w.a&&(w.a=q(l,"value",M0,w.a)),c0!==w.o&&(w.o=q(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),b(Z0,{get when(){return B()==="cloneParent"},get children(){var m=W("box"),n=W("text");return D(m,n),q(m,"paddingLeft",2),q(n,"wrapMode","none"),U(n,()=>F("newTask.hint.remembered")),y((l)=>q(n,"fg",Y.textMuted,l)),m}}),b(Z0,{get when(){return x0(()=>B()==="cloneParent"&&H1().length>0)()&&!$()},get children(){var m=W("box");return q(m,"gap",0),q(m,"paddingLeft",2),U(m,b(Z0,{get when(){return o0().start>0},get children(){var n=W("text");return q(n,"wrapMode","none"),U(n,()=>F("newTask.picker.moreAbove",{count:o0().start})),y((l)=>q(n,"fg",Y.textMuted,l)),n}}),null),U(m,b(X1,{get each(){return o0().items},children:(n,l)=>{let w=()=>o0().start+l(),m0=()=>w()===G1();return(()=>{var v0=W("text"),M0=E0("/");return D(v0,M0),q(v0,"wrapMode","none"),q(v0,"onMouseUp",()=>v(w())),U(v0,()=>m0()?"\u25B8 ":" ",M0),U(v0,n,M0),y((c0)=>{var q1=m0()?Y.primary:Y.textMuted,L1=m0()?Yz.BOLD:void 0;return q1!==c0.e&&(c0.e=q(v0,"fg",q1,c0.e)),L1!==c0.t&&(c0.t=q(v0,"attributes",L1,c0.t)),c0},{e:void 0,t:void 0}),v0})()}}),null),U(m,b(Z0,{get when(){return o0().start+o0().items.length<o0().total},get children(){var n=W("text");return q(n,"wrapMode","none"),U(n,()=>F("newTask.picker.moreBelow",{count:o0().total-o0().start-o0().items.length})),y((l)=>q(n,"fg",Y.textMuted,l)),n}}),null),m}}),(()=>{var m=W("box"),n=W("text"),l=W("input");return D(m,n),D(m,l),q(m,"gap",0),U(n,()=>F("newTask.field.folderName")),q(l,"onInput",(w)=>{i(!0),I(DJ(w))}),q(l,"onSubmit",()=>V("cloneBaseRef")),y((w)=>{var m0=W1("cloneFolder"),v0=A1("cloneFolder"),M0=M(),c0=F("newTask.placeholder.folderName"),q1=B()==="cloneFolder";return m0!==w.e&&(w.e=q(n,"fg",m0,w.e)),v0!==w.t&&(w.t=q(n,"attributes",v0,w.t)),M0!==w.a&&(w.a=q(l,"value",M0,w.a)),c0!==w.o&&(w.o=q(l,"placeholder",c0,w.o)),q1!==w.i&&(w.i=q(l,"focused",q1,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),m})(),(()=>{var m=W("box"),n=W("text"),l=W("input");return D(m,n),D(m,l),q(m,"gap",0),U(n,()=>F("newTask.field.baseBranch")),q(l,"placeholder",Cz),q(l,"onInput",(w)=>J0(DJ(w))),q(l,"onSubmit",()=>void j0()),y((w)=>{var m0=W1("cloneBaseRef"),v0=A1("cloneBaseRef"),M0=e(),c0=B()==="cloneBaseRef";return m0!==w.e&&(w.e=q(n,"fg",m0,w.e)),v0!==w.t&&(w.t=q(n,"attributes",v0,w.t)),M0!==w.a&&(w.a=q(l,"value",M0,w.a)),c0!==w.o&&(w.o=q(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),b(Z0,{get when(){return T()},get children(){var m=W("box"),n=W("text");return D(m,n),q(m,"gap",0),q(m,"paddingLeft",2),q(n,"wrapMode","none"),U(n,()=>p()||F("newTask.clone.progressFallback")),y((l)=>q(n,"fg",Y.textMuted,l)),m}})]}}),null),U(S0,b(Z0,{get when(){return G()==="adopt"},get children(){return[(()=>{var m=W("box"),n=W("text"),l=W("input");return D(m,n),D(m,l),q(m,"gap",0),U(n,()=>F("newTask.field.adoptFilter")),q(l,"onInput",(w)=>s0(DJ(w))),q(l,"onSubmit",()=>R()),y((w)=>{var m0=W1("adoptFilter"),v0=A1("adoptFilter"),M0=T0(),c0=F("newTask.placeholder.adoptFilter"),q1=B()==="adoptFilter";return m0!==w.e&&(w.e=q(n,"fg",m0,w.e)),v0!==w.t&&(w.t=q(n,"attributes",v0,w.t)),M0!==w.a&&(w.a=q(l,"value",M0,w.a)),c0!==w.o&&(w.o=q(l,"placeholder",c0,w.o)),q1!==w.i&&(w.i=q(l,"focused",q1,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),m})(),(()=>{var m=W("box"),n=W("text");return D(m,n),q(m,"paddingLeft",2),q(n,"wrapMode","none"),U(n,()=>F("newTask.adopt.repoLine",{path:UJ(j().trim())||F("newTask.adopt.repoNone")})),y((l)=>q(n,"fg",Y.textMuted,l)),m})(),b(Z0,{get when(){return R1.loading},get children(){var m=W("box"),n=W("text");return D(m,n),q(m,"paddingLeft",2),q(n,"wrapMode","none"),U(n,()=>F("newTask.hint.scanningWorktrees")),y((l)=>q(n,"fg",Y.textMuted,l)),m}}),b(Z0,{get when(){return x0(()=>!R1.loading)()&&z0().length===0},get children(){var m=W("box"),n=W("text");return D(m,n),q(m,"paddingLeft",2),q(n,"wrapMode","none"),U(n,(()=>{var l=x0(()=>(R1()??[]).length===0);return()=>l()?F("newTask.adopt.noUnlinked"):F("newTask.adopt.noMatch")})()),y((l)=>q(n,"fg",Y.textMuted,l)),m}}),b(Z0,{get when(){return z0().length>0},get children(){var m=W("box"),n=W("text");return D(m,n),q(m,"gap",0),q(m,"paddingLeft",2),U(m,b(Z0,{get when(){return G0().start>0},get children(){var l=W("text");return q(l,"wrapMode","none"),U(l,()=>F("newTask.picker.moreAbove",{count:G0().start})),y((w)=>q(l,"fg",Y.textMuted,w)),l}}),n),U(m,b(X1,{get each(){return H0()},children:(l,w)=>{let m0=()=>G0().start+w(),v0=()=>m0()===a0(),M0=()=>t0().has(l.path),c0=()=>[l.dirty?"dirty":"",l.kobeManaged?"":"external"].filter(Boolean).join(",");return(()=>{var q1=W("text");return q(q1,"wrapMode","none"),q(q1,"onMouseUp",()=>{_0(m0()),k0(l.path)}),U(q1,()=>v0()?"\u25B8 ":" ",null),U(q1,()=>M0()?"[x] ":"[ ] ",null),U(q1,()=>l.branch,null),U(q1,(()=>{var L1=x0(()=>!!c0());return()=>L1()?` (${c0()})`:""})(),null),y((L1)=>{var jJ=v0()?Y.primary:M0()?Y.accent:Y.textMuted,Zz=v0()?Yz.BOLD:void 0;return jJ!==L1.e&&(L1.e=q(q1,"fg",jJ,L1.e)),Zz!==L1.t&&(L1.t=q(q1,"attributes",Zz,L1.t)),L1},{e:void 0,t:void 0}),q1})()}}),n),U(m,b(Z0,{get when(){return G0().start+G0().items.length<G0().total},get children(){var l=W("text");return q(l,"wrapMode","none"),U(l,()=>F("newTask.picker.moreBelow",{count:G0().total-G0().start-G0().items.length})),y((w)=>q(l,"fg",Y.textMuted,w)),l}}),n),q(n,"wrapMode","none"),U(n,(()=>{var l=x0(()=>t0().size>0);return()=>l()?F("newTask.adopt.hintSelected",{count:t0().size}):F("newTask.adopt.hintDefault")})()),y((l)=>q(n,"fg",Y.textMuted,l)),m}})]}}),null),U(S0,b(Z0,{get when(){return h0()},get children(){var m=W("text"),n=E0("\u203B ");return D(m,n),q(m,"wrapMode","word"),U(m,h0,null),y((l)=>q(m,"fg",Y.error,l)),m}}),null),D(AJ,lz),D(AJ,UY),q(AJ,"flexDirection","row"),q(AJ,"justifyContent","space-between"),q(AJ,"alignItems","center"),q(AJ,"paddingTop",1),q(AJ,"paddingBottom",1),U(lz,()=>F("newTask.hint.legend")),q(UY,"onMouseUp",()=>C0()),U(UY,(()=>{var m=x0(()=>!!T());return()=>m()?F("newTask.button.cloning"):x0(()=>B()==="confirm")()?F("newTask.button.createFocused"):F("newTask.button.create")})()),y((m)=>{var n=Yz.BOLD,l=Y.text,w=W1("engine"),m0=A1("engine"),v0=Y.textMuted,M0=Y.textMuted,c0=B()==="confirm"?Y.primary:Y.text,q1=B()==="confirm"?Yz.BOLD:void 0;return n!==m.e&&(m.e=q(I0,"attributes",n,m.e)),l!==m.t&&(m.t=q(I0,"fg",l,m.t)),w!==m.a&&(m.a=q(LJ,"fg",w,m.a)),m0!==m.o&&(m.o=q(LJ,"attributes",m0,m.o)),v0!==m.i&&(m.i=q(iz,"fg",v0,m.i)),M0!==m.n&&(m.n=q(lz,"fg",M0,m.n)),c0!==m.s&&(m.s=q(UY,"fg",c0,m.s)),q1!==m.h&&(m.h=q(UY,"attributes",q1,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 z3=k(()=>{P();P();P();P();P();P();P();P();ZJ();i1();j1();v1();qH();yJ();HH();nJ();_L();N9()});function Uy(J,z,Y,G){return new Promise((Z)=>{J.replace(()=>b(J3,{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:(X)=>Z(X),onCancel:()=>Z(void 0)}),()=>Z(void 0)),J.setSize("medium")})}var BH;var lZ=k(()=>{P();z3();N9();BH={show:Uy}});function Y3(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 G3}from"@opentui/core";function Dy(J){let z=c1(),{theme:Y}=d0(),[G,Z]=a("prompt"),[X,Q]=a(""),[f,H]=a(J.defaultVendor),[B,V]=a(J.defaultBaseRef);function j(O){let g=jH.indexOf(G());Z(jH[(g+O+jH.length)%jH.length]??"prompt")}function K(O){let g=J.engines;if(g.length===0)return;if(O>0){H((_)=>LY(g,_));return}let x=Math.max(0,g.indexOf(f()));H(g[(x-1+g.length)%g.length]??f())}function L(){if(fQ(X())){Z("prompt");return}J.onSubmit({prompt:X().trim(),vendor:f(),baseRef:B().trim()||J.defaultBaseRef}),z.clear()}D1(()=>({enabled:!0,bindings:Y3(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"),i=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,i),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(DJ(p))),q(M,"onSubmit",()=>L()),D(I,r),q(I,"flexDirection","row"),q(I,"gap",2),U(r,()=>F("quickTask.engineLabel")),U(I,b(X1,{get each(){return J.engines},children:(p)=>(()=>{var B0=W("text");return q(B0,"onMouseUp",()=>{H(p),Z("engine")}),U(B0,()=>J.engineLabel(p)),y((L0)=>{var V0=f()===p?Y.primary:Y.textMuted,t=f()===p?G3.BOLD:void 0;return V0!==L0.e&&(L0.e=q(B0,"fg",V0,L0.e)),t!==L0.t&&(L0.t=q(B0,"attributes",t,L0.t)),L0},{e:void 0,t:void 0}),B0})()}),null),D(i,e),D(i,J0),q(i,"gap",0),U(e,()=>F("quickTask.branchLabel")),q(J0,"onInput",(p)=>V(DJ(p))),q(J0,"onSubmit",()=>L()),D(T,q0),q(T,"paddingBottom",1),U(q0,()=>F("quickTask.legend")),y((p)=>{var B0=G3.BOLD,L0=Y.text,V0=Y.textMuted,t=A("prompt"),h=X(),C=F("quickTask.promptPlaceholder"),o=G()==="prompt",E=A("engine"),c=A("branch"),s=B(),X0=J.defaultBaseRef,F0=G()==="branch",P0=Y.textMuted;return B0!==p.e&&(p.e=q(x,"attributes",B0,p.e)),L0!==p.t&&(p.t=q(x,"fg",L0,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)),X0!==p.l&&(p.l=q(J0,"placeholder",X0,p.l)),F0!==p.u&&(p.u=q(J0,"focused",F0,p.u)),P0!==p.c&&(p.c=q(q0,"fg",P0,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 Ly(J,z){return new Promise((Y)=>{J.replace(()=>b(Dy,cD(z,{onSubmit:(G)=>Y(G),onCancel:()=>Y(void 0)})),()=>Y(void 0)),J.setSize("medium")})}var jH,Z3;var X3=k(()=>{P();P();P();P();P();P();P();j1();i1();v1();ZJ();yJ();nJ();lZ();jH=["prompt","engine","branch"];Z3={show:Ly}});async function WH(J={}){let z=J.logTag??"orch-connect",Y=J.connect??zz,G=null;try{let Z=await Y();if(!Z)return tz(z,"no daemon running \u2014 caller degrades"),null;return G=new KJ(Z,{...J.orchestratorOptions,channels:J.channels}),await G.init(),G}catch(Z){return o1(z,Z),G?.dispose(),null}}var k9=k(()=>{zG();FJ();nY()});function Q3(J){let[z,Y]=a(J.initial??"sidebar"),[G,Z]=a(0),X=fJ();function Q(j){if(Z((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=(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(My.Provider,{value:V,get children(){return J.children}})}var VH,My;var q3=k(()=>{P();P();j1();VH=["sidebar","workspace","files","terminal"],My=Tz(null)});function f3(){for(let J of iY){let z=Fy.get(J.id);if(!z)continue;let Y=J;Y.keys=[...z.keys],Y.hint=z.hint?{...z.hint}:void 0}}function H3(){Oy((J)=>J+1)}function S9(J){return Ay.get(J)}function Ry(J){return S9(J)?.keys??[]}function lY(J){let z=[];for(let Y in J){let G=J[Y];if(!G)continue;let Z=Ry(Y);if(Z.length===0){console.warn(`[kobe/keybindings] bindByIds: id="${Y}" has no chords (or doesn't exist in KobeKeymap)`);continue}Z.forEach((X,Q)=>z.push({key:X,cmd:G,slot:Q}))}return z}var iY,Fy,b9,Oy,Ay;var $Z=k(()=>{j1();iY=[{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"}}],Fy=new Map(iY.map((J)=>[J.id,{keys:[...J.keys],hint:J.hint?{...J.hint}:void 0}]));[b9,Oy]=a(0);Ay=new Map(iY.map((J)=>[J.id,J]))});function KH(){if($Y)return $Y;let J=kq();if(!J.exists)return $Y={path:J.path,exists:!1,applied:[],warnings:[]},$Y;let z=[...J.warnings],Y=Sq(J.doc,process.platform,{chordOptsFor:ZB});z.push(...Y.warnings);let G=Y.entries.filter((f)=>f.id.startsWith("tmux.")),Z=Y.entries.filter((f)=>!f.id.startsWith("tmux.")),X=G5(iY,Z);z.push(...X.warnings);let Q=[...X.applied];if(G.length>0){let f=GB(G);z.push(...f.warnings);for(let H of f.overridden){if(H===xz){Q.push({id:H,keys:f.focus.map((j)=>j?.chord??"").filter((j)=>j!==""),defaultKeys:SY});continue}let B=f.binds[H];Q.push({id:H,keys:B?[B.chord]:[],defaultKeys:[LG[H]]});let V=iY.find((j)=>j.id===H);if(V?.hint)V.hint.keys=B?`${QZ(H)?"prefix ":""}${B.chord}`:"\u2014"}}for(let f of z)console.warn(`[kobe/keybindings] ${f}`);return $Y={path:J.path,exists:!0,applied:Q,warnings:z},$Y}function B3(){return $Y??KH()}function j3(){$Y=null,Y5(),q5(),f3();let J=KH();return H3(),J}var $Y=null;var I9=k(()=>{zB();yq();Iq();$Z()});var gy=250,aZ,W3;var BQ=k(()=>{cZ();tY();q9();({use:aZ,provider:W3}=ZH({name:"KV",init:()=>{let[J,z]=dz(RJ()),Y=new Set,G=null;function Z(f){if(Y.size===0)return!0;try{let H={};for(let B of Y)H[B]=J[B];return MY(H),Y.clear(),!0}catch(H){return console.error(`[kobe] kv ${f} failed:`,H),!1}}function X(){if(G)clearTimeout(G);G=setTimeout(()=>{G=null,Z("write")},gy)}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(G)clearTimeout(G),G=null;return Z("flush")},clear(){for(let f of Object.keys(J))z(f,void 0);if(G)clearTimeout(G),G=null;Y.clear();try{hW({})}catch(f){console.error("[kobe] kv clear write failed:",f)}}};return Q}}))});var UH="../pulse-n3cq1btw.wav";var V3=()=>{};import{existsSync as Ny,mkdirSync as ky}from"fs";import{tmpdir as by}from"os";import{basename as Sy,isAbsolute as Iy,join as T9,resolve as Ty}from"path";function xy(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 uy(){if(DH!==void 0)return DH;let z=(process.env.PATH??"").split(":").filter(Boolean);return DH=yy.find((Y)=>z.some((G)=>Ny(T9(G,Y))))??null,DH}async function Ey(){return D3??=(async()=>{ky(U3,{recursive:!0});let J=T9(U3,Sy(K3)),z=Bun.file(J);if(await z.exists())return J;return await Bun.write(z,Bun.file(K3)),J})(),D3}function L3(J=0.4){let z=uy();if(!z)return;Ey().then((Y)=>{try{Bun.spawn(xy(z,Y,J),{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).unref?.()}catch{}}).catch(()=>{return})}var K3,U3,yy,DH,D3;var M3=k(()=>{V3();K3=Iy(UH)?UH:Ty(import.meta.dir,UH),U3=T9(by(),"kobe-sfx"),yy=["ffplay","mpv","mpg123","mpg321","mplayer","afplay","play","omxplayer","aplay","cmdmp3","cvlc","powershell.exe"]});function F3(J,z){return`${J}:${z}`}function A3(J){let z=aZ(),[Y,G]=a([]),[Z,X]=a(new Map),Q=QH(),f=0;function H(K){if(X((L)=>{let A=new Map(L),O=F3(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{}L3()}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),wy)}}function B(K){G((L)=>L.filter((A)=>A.id!==K))}function V(K,L){X((A)=>{let O=F3(K,L);if(!A.has(O))return A;let g=new Map(A);return g.delete(O),g})}let j={toasts:Y,unread:Z,notify:H,dismiss:B,markRead:V};return b(O3.Provider,{value:j,get children(){return J.children}})}function LH(){let J=wJ(O3);if(!J)throw Error("useNotifications must be used within a NotificationsProvider");return J}var wy=4500,O3;var MH=k(()=>{P();j1();D9();M3();BQ();O3=Tz()});function y9(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=hy(z.focusAccent);if(Y&&Y!==J.focusAccent())J.setFocusAccent(Y)}}function hy(J){if(J===null)return"primary";return Py.includes(J)?J:null}var Py;var R3=k(()=>{Py=["primary","success","info"]});import{readFileSync as vy}from"fs";function g3(J){try{let z=JSON.parse(vy(lJ(),"utf8")),Y=typeof z.activeTheme==="string"&&YQ(z.activeTheme)?z.activeTheme:J,G=z.transparentBackground===!0,Z=typeof z.focusAccent==="string"&&uG.includes(z.focusAccent)?z.focusAccent:null,X=GQ(z[FH])?z[FH]:nZ;return{theme:Y,transparent:G,focusAccent:Z,locale:X}}catch{return{theme:J,transparent:!1,focusAccent:null,locale:nZ}}}var FH="locale";var x9=k(()=>{p1();v1();iZ()});function cy(J){if(J)EQ(J);z7(),KH();for(let{name:z,theme:Y}of kX())H9(z,Y)}function dy(J){let z={backgroundColor:"transparent",externalOutputMode:"passthrough",exitOnCtrlC:!1,screenMode:"alternate-screen",useKittyKeyboard:{}};return J?{...z,onDestroy:J}:z}function ny(J){let z=()=>J.children,Y=()=>J.notifications?b(A3,{get children(){return z()}}):z(),G=()=>b(wL,{get children(){return Y()}}),Z=()=>J.focus?b(Q3,{initial:"sidebar",get children(){return G()}}):G(),X=()=>J.kv?b(W3,{get children(){return Z()}}):Z();return b(JL,{mode:"dark",get theme(){return J.theme},get children(){return X()}})}function iy(J){let{theme:z}=d0();return e1(()=>o1("pane-crash",J.error)),(()=>{var Y=W("box"),G=W("text"),Z=W("text");return D(Y,G),D(Y,Z),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(Z,()=>F("common.paneCrash.hint")),y((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(G,"fg",f,X.t)),H!==X.a&&(X.a=q(Z,"fg",H,X.a)),X},{e:void 0,t:void 0,a:void 0}),Y})()}function ly(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 kX())H9(f,H)},transparentBackground:()=>z.transparentBackground,setTransparentBackground:(f)=>z.setTransparentBackground(f),focusAccent:()=>z.focusAccent,setFocusAccent:(f)=>z.setFocusAccent(f)};y9(Y,{theme:J.boot.theme,transparentBackground:J.boot.transparent,focusAccent:J.boot.focusAccent}),ZQ(J.boot.locale);let[G,Z]=a(null),X=!1;e1(()=>{(async()=>{let f=await WH({logTag:"ui-prefs",channels:["ui-prefs","keybindings"]});if(!f)return;if(X){f.dispose();return}Z(f)})()}),r0(()=>{let f=G()?.uiPrefsSignal()();if(!f)return;if(y9(Y,f),GQ(f.locale))ZQ(f.locale)});let Q=null;return r0(()=>{let f=G()?.keybindingsRevSignal()();if(f==null)return;if(Q===null||f===Q){Q=f;return}Q=f,j3()}),k1(()=>{X=!0,G()?.dispose()}),null}async function OJ(J){cy(J.logContext);let z=g3(my),Y=await J.setup(z),G=J.providers?.kv??!0,Z=J.providers?.focus??!0,X=J.providers?.notifications??!1;await _D(()=>b(ny,{get theme(){return z.theme},kv:G,focus:Z,notifications:X,get children(){return[b(ly,{boot:z}),b(IV,{fallback:(Q)=>b(iy,{error:Q}),get children(){return Y.root()}})]}}),dy(Y.onDestroy))}var my="claude";var aY=k(()=>{P();P();P();P();P();P();P();zG();j1();k9();q3();I9();BQ();MH();v1();nq();ZJ();nJ();R3();x9()});async function u9(J,z,Y,G,Z={}){let X=C1(z.id);if(await V1(X))return!0;let Q=z.worktreePath;if(!Q||!zZ(Q)){if(!J)throw new PG("no-daemon",`no daemon; cannot materialise worktree for ${z.id}`);try{Q=await J.ensureWorktree(z.id)}catch(j){throw new PG("worktree",`ensureWorktree failed for ${z.id}`,j)}await Z.reload?.()}if(!Q||!zZ(Q))throw new PG("worktree",`task ${z.id} has no usable worktree`);let{ensureSession:f}=await Promise.resolve().then(() => (zJ(),vJ)),{resolveEngineLaunchInit:H}=await Promise.resolve().then(() => (NZ(),If)),B=Y?H(Y,Q,{kind:Z.includeInitPrompt?"repo-init":"none"}):void 0;if(!await f({name:X,cwd:Q,command:oJ(G),taskId:z.id,vendor:G,repo:Y,launchInit:B}))throw new PG("session",`failed to start tmux session for ${z.id}`);return!1}async function E9(J,z,Y,G,Z={}){let X=C1(z.id),Q=await Promise.resolve().then(() => (zJ(),vJ));if(Z.captureFrom){let B=await Q.currentSessionName();if(B&&B!==X)await Q.captureGlobalLayout(B)}if(await u9(J,z,Y,G,{includeInitPrompt:Z.includeInitPrompt,reload:Z.reload})&&Z.heal)try{let B=await gG(X,"@kobe_worktree")||z.worktreePath||"";if(B&&zZ(B)){let{resolveEngineLaunchInit:V}=await Promise.resolve().then(() => (NZ(),If)),j=Y?V(Y,B,{kind:Z.includeInitPrompt?"repo-init":"none"}):void 0;await Q.ensureSession({name:X,cwd:B,command:oJ(G),taskId:z.id,vendor:G,repo:Y,launchInit:j})}}catch(B){console.error("[kobe handover] heal failed (continuing to switch):",B)}let{syncSessionZen:H}=await Promise.resolve().then(() => (RG(),t5));await H(X),await J?.setActiveTask(z.id).catch(()=>{}),await Q.enterWindow(X)}async function OH(J,z,Y,G,Z={}){await E9(J,z,Y,G,{includeInitPrompt:Z.includeInitPrompt})}var PG;var AH=k(()=>{sJ();Vz();P1();PG=class PG extends Error{phase;cause;constructor(J,z,Y){super(z);this.name="HandoverError",this.phase=J,this.cause=Y}}});var C3={};f1(C3,{startNewTaskHost:()=>$y,NewTaskPage:()=>RH});function RH(J){let{theme:z}=d0(),Y=c1();e1(()=>{G()});async function G(){let Z=gJ(),X=J.defaultRepo||Z[0]||process.cwd(),Q=xJ(g1("lastSelectedVendor"),uJ()),f=await ez(),H=J.orchestrator,B=await BH.show(Y,X,Z,{defaultVendor:Q,availableVendors:f,discoverAdoptable:H?(j)=>H.discoverAdoptableWorktrees(j):void 0});if(!B)process.exit(0);if(r1("lastSelectedVendor",B.vendor),pz(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 Z=W("box");return q(Z,"flexDirection","column"),q(Z,"flexGrow",1),y((X)=>q(Z,"backgroundColor",z.background,X)),Z})()}async function $y(J){await OJ({setup:async()=>{let z=null;try{let Y=await Az(),G=new KJ(Y);await G.init(),z=G}catch(Y){console.error("[kobe new-task] daemon unavailable; cannot create task:",Y)}return{root:()=>b(RH,{get defaultRepo(){return J.defaultRepo},orchestrator:z}),onDestroy:()=>{z?.dispose()}}}})}var w9=k(()=>{P();P();P();P();FJ();j1();nY();YG();F1();i1();lZ();v1();aY();AH();nJ()});function gH(J,z,Y,G,Z={}){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&&G(V,B)&&(!Z.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 N3(J,z){if(!J)return!0;let Y=J.toLowerCase(),G=z.toLowerCase(),Z=0;for(let X=0;X<G.length&&Z<Y.length;X++)if(G.charCodeAt(X)===Y.charCodeAt(Z))Z++;return Z===Y.length}function ay(J,z){let Y=z==="archived";return J.filter((G)=>G.archived===Y)}function P9(J,z,Y,G="default",Z){let X=ay(J,z),Q=Y?.trim()??"",f=Z?Gz(Z):null,H=Q?X.filter((O)=>N3(Q,`${O.title} ${Nz(O.repo)}`)):X,B=[],V=[],j=[],K=new Set;for(let O of H){if(O.kind==="main"){let g=Gz(O.repo);if(K.has(g))continue;K.add(g),B.push(O);continue}if(f&&Gz(O.repo)!==f)continue;if(O.pinned===!0)V.push(O);else j.push(O)}if(B.sort((O,g)=>Nz(O.repo).localeCompare(Nz(g.repo))),G==="recent")V.sort(k3),j.sort(k3);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 k3(J,z){let Y=b3(z)-b3(J);if(Y!==0)return Y;return String(z.id).localeCompare(String(J.id))}function b3(J){let z=Date.parse(J.updatedAt||J.createdAt);return Number.isFinite(z)?z:0}function Nz(J){let z=J.split("/").filter(Boolean);return z[z.length-1]??J}function Gz(J){return J.trim().replace(/[\\/]+$/,"")||J}function _y(J,z){let Y=Nz(J);if(!z.some((Z)=>Z!==J&&Nz(Z)===Y))return Y;return J.replace(/[\\/]+$/,"").split(/[\\/]+/).slice(-2).join("/")}function S3(J,z){let Y=z==="archived",G=new Map;for(let X of J){let Q=Gz(X.repo),f=G.get(Q)??{repo:X.repo,count:0};if(X.kind==="main")f.repo=X.repo;else if(X.archived===Y)f.count+=1;G.set(Q,f)}let Z=[...G.values()].map((X)=>X.repo);return[...G.values()].map((X)=>({repo:X.repo,label:_y(X.repo,Z),count:X.count})).sort((X,Q)=>X.label.localeCompare(Q.label))}function I3(J,z){if(J.length===0)return-1;if(!z)return J[0]?.flatIndex??-1;let Y=Gz(z),G=J.find((X)=>X.task.kind!=="main"&&Gz(X.task.repo)===Y);if(G)return G.flatIndex;return J.find((X)=>X.task.kind==="main"&&Gz(X.task.repo)===Y)?.flatIndex??J[0]?.flatIndex??-1}function h9(J){return J.map((z)=>z.task.id)}function T3(J,z,Y){let G=z.length;if(J===null){if(Y===-1&&G>0)return 0;if(Y>=G)return Math.max(0,G-1);if(G===0)return-1;return Y}let Z=z.indexOf(J);if(Z>=0)return Z;if(G===0)return-1;if(Y<0||Y>=G)return G-1;return Y}function y3(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 py(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 x3(J,z){return gH(J,z,(Y)=>Y.task.id,(Y,G)=>Y.flatIndex===G.flatIndex&&py(Y.task,G.task),{samePosition:!0})}var CH=()=>{};var u3={};f1(u3,{startQuickTaskHost:()=>ty});async function ry(J,z){let Y,G;if(z){let j=await IJ(z,["@kobe_task","@kobe_worktree"]);Y=j["@kobe_task"]||void 0,G=j["@kobe_worktree"]||void 0}let Z=(Y?J?.getTask(Y)?.repo:void 0)??gJ()[0],X=Z??G??process.cwd();if(!Z)return{ctx:null,fallbackRepo:X};let Q=await ez(),f=xJ(g1("lastSelectedVendor"),uJ()),H=Q.length===0||Q.includes(f)?f:Q[0]??f,B=XQ(UJ(Z))??Cz,V=Q.length>0?Q:[H];return{ctx:{repo:Z,vendor:H,baseRef:B,engines:V},fallbackRepo:X}}async function oy(J,z,Y,G,Z){let X=await u9(J,z,Y,G),Q=C1(z.id),{pane:f}=await gX(Q,!X);if(f)await CX(f,Z)}function sy(J){let{theme:z}=d0(),Y=c1();e1(()=>{G()});async function G(){let Z=J.ctx,X=await Z3.show(Y,{repoLabel:Nz(Z.repo),engines:Z.engines,defaultVendor:Z.vendor,defaultBaseRef:Z.baseRef,engineLabel:VG});if(X===void 0)process.exit(0);r1("lastSelectedVendor",X.vendor),pz(Z.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:Z.repo,baseRef:X.baseRef,vendor:X.vendor});await oy(Q,f,Z.repo,X.vendor,X.prompt),await OH(Q,f,Z.repo,X.vendor)}catch(f){console.error("[kobe quick-task] task.create/deliver failed:",f),process.exit(1)}process.exit(0)}return(()=>{var Z=W("box");return q(Z,"flexDirection","column"),q(Z,"flexGrow",1),y((X)=>q(Z,"backgroundColor",z.background,X)),Z})()}async function ty(J){await OJ({setup:async()=>{let z=null;try{let Z=await Az(),X=new KJ(Z);await X.init(),z=X}catch(Z){console.error("[kobe quick-task] daemon unavailable; cannot create task:",Z)}let{ctx:Y,fallbackRepo:G}=await ry(z,J.session);return{root:()=>Y?b(sy,{ctx:Y,orchestrator:z}):b(RH,{defaultRepo:G,orchestrator:z}),onDestroy:()=>{z?.dispose()}}}})}var E3=k(()=>{P();P();P();P();FJ();j1();nY();YG();sJ();F1();P1();xq();i1();X3();v1();qH();aY();HH();AH();w9();CH();nJ()});function kH(J){let z=J.trim().split(/\s+/).pop()??"",Y=/^([CM])-(.+)$/.exec(z);if(!Y)return null;let G=Y[1]==="C"?"\u2303":"\u2325",Z=Y[2]??"";return`${G}${Z.length===1?Z.toUpperCase():Z}`}function NH(J,z){if(J.includes("/"))return J.split("/").map((Z)=>NH(Z,z)).join("/");let Y=J.toLowerCase();if(Y==="tab")return"tab";let G=Jx[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,(Z)=>Z.toUpperCase())}function _Z(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("+")?_Z(f,z):NH(f,!0)}`}let Z=Y.split("+");if(Z.length===1)return NH(Z[0]??"",!1);let X=Z[Z.length-1]??"";return`${Z.slice(0,-1).map((f)=>ey[f.toLowerCase().trim()]??f).join("")} ${NH(X,!0)}`}var ey,Jx;var v9=k(()=>{ey={ctrl:"\u2303",control:"\u2303",alt:"\u2325",opt:"\u2325",option:"\u2325",shift:"\u21E7",cmd:"\u2318",command:"\u2318",meta:"\u2318",super:"\u2318"},Jx={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 w3}from"@opentui/core";function zx(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 pZ(J={}){let z=c1(),{theme:Y}=d0(),G=()=>zx(iY),Z=()=>J.onClose?J.onClose():z.clear(),[X,Q]=a("\u2303B");return e1(()=>{$0(["show-options","-g","prefix"]).then(({code:f,stdout:H})=>{if(f!==0)return;let B=kH(H);if(B)Q(B)})}),D1(()=>({bindings:[{key:"?",cmd:Z}]})),(()=>{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",Z),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(X1,{get each(){return G()},children:(L)=>(()=>{var A=W("box"),O=W("text");return D(A,O),q(A,"gap",0),U(O,()=>W9("category",L.category)),U(A,b(X1,{get each(){return L.rows},children:(g)=>{let x=g.hint?.keys??g.keys[0]??"\u2014",_=()=>x==="\u2014"?"\u2014":_Z(x,X()),S=()=>(g.hint?g.keys:g.keys.slice(1)).map((N)=>_Z(N,X()));return(()=>{var N=W("box"),M=W("box"),I=W("text"),r=W("box"),i=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,i),q(r,"flexGrow",1),U(i,()=>W9("desc",g.id)),U(N,(()=>{var e=x0(()=>S().length>0);return()=>e()?(()=>{var J0=W("box"),T=W("text");return D(J0,T),U(T,()=>`(${S().join(", ")})`),y((q0)=>q(T,"fg",Y.textMuted,q0)),J0})():null})(),null),y((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(i,"fg",T,e.t)),e},{e:void 0,t:void 0}),N})()}}),null),y((g)=>{var x=Y.accent,_=w3.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})()})),y((L)=>{var A=w3.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 m9=k(()=>{P();P();P();P();P();P();P();j1();P1();$Z();v1();ZJ();v9();yJ();nJ();pZ.show=(J)=>{J.replace(()=>b(pZ,{}))}});import{TextAttributes as Yx}from"@opentui/core";function P3(J){let z=c1(),{theme:Y}=d0(),[G,Z]=a(J.currentTitle);function X(){let Q=G().trim();if(fQ(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)=>Z(DJ(O))),q(K,"onSubmit",()=>X()),D(L,A),q(L,"paddingBottom",1),U(A,()=>F("common.rename.footerHint",{submitLabel:J.submitLabel??F("common.rename.defaultSubmitLabel")})),y((O)=>{var g=Yx.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 h3=k(()=>{P();P();P();P();P();P();P();ZJ();j1();v1();nJ();lZ()});function Gx(J,z,Y={}){return new Promise((G)=>{J.replace(()=>b(P3,{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:(Z)=>G(Z),onCancel:()=>G(void 0)}),()=>G(void 0))})}var VY;var c9=k(()=>{P();h3();VY={show:Gx}});import{TextAttributes as Zx}from"@opentui/core";function Xx(J){if(!J)return J;return J.charAt(0).toUpperCase()+J.slice(1)}function KY(J){let z=c1(),{theme:Y}=d0(),[G,Z]=dz({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:()=>Z("active",G.active==="confirm"?"cancel":"confirm")},{key:"right",cmd:()=>Z("active",G.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(X1,{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,()=>Xx(j==="cancel"?J.label??F("common.cancel"):J.confirmLabel??F("common.confirm"))),y((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})()})),y((j)=>{var K=Zx.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}),X})()}var d9=k(()=>{P();P();P();P();P();P();P();ZJ();j1();cZ();v1();yJ();nJ();KY.show=(J,z,Y,G,Z,X)=>{return new Promise((Q)=>{J.replace(()=>b(KY,{title:z,message:Y,onConfirm:()=>Q(!0),onCancel:()=>Q(!1),label:G,confirmLabel:Z,get initialActive(){return X?.initialActive}}),()=>Q(void 0)),J.setSize("small")})}});import{unlinkSync as Qx}from"fs";import{join as qx}from"path";function v3(J){return J instanceof KJ}function m3(J,z){try{J?.destroy()}catch(Y){console.error(`kobe: renderer.destroy() failed during ${z}:`,Y)}}async function n9(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{Qx(qx(bz(),".kobe","tasks.json"))}catch(Z){if(Z.code!=="ENOENT")console.error("kobe: failed to delete tasks.json during reset:",Z)}m3(Y,"reset"),process.stderr.write(`kobe: UI state reset. Relaunch kobe to start fresh.
|
|
264
|
+
`),process.exit(0)}async function i9(J,z,Y){if(!(z instanceof KJ))return;if(await KY.show(J,"Restart backend?","Quits this kobe window. Relaunch to (re)spawn the daemon. Any other attached windows keep their connection. In v0.6 the daemon's RPC surface shrank to task CRUD + subscribe, so a graceful daemon.stop RPC is no longer plumbed through the client \u2014 quit + relaunch is the path.","cancel")!==!0)return;m3(Y,"daemon restart"),process.stderr.write(`kobe: window closed. Relaunch kobe to start fresh.
|
|
265
|
+
`),process.exit(0)}var c3=k(()=>{nY();p1();d9()});function fx(J){return`theme:${J}`}function l9(J){return`language:${J}`}function $9(J){return`accent:${J}`}function Hx(J){return`engine:${J}`}function jQ(J){return`surface:${J}`}function a9(J){return[...J.themeNames.map((z)=>({id:fx(z),kind:"theme",name:z})),...EG.map((z)=>({id:l9(z.id),kind:"language",locale:z.id})),{id:"transparent",kind:"transparent"},...J.focusAccentSlots.map((z)=>({id:$9(z),kind:"focusAccent",slot:z})),{id:"toast",kind:"toast"},{id:"sound",kind:"sound"},{id:"zen-keep-tasks",kind:"zenKeepTasks"},{id:jQ("chattab"),kind:"surface",surface:"chattab"},{id:jQ("taskpanel"),kind:"surface",surface:"taskpanel"},{id:"editor-kind",kind:"editorKind"},{id:"editor-custom",kind:"editorCustom"}]}function Bx(J){return[...J.map((z)=>({id:Hx(z),kind:"engine",vendor:z})),{id:"add-engine",kind:"engineAdd"}]}function jx(){return[{id:"feedback-title",kind:"feedbackTitle"},{id:"feedback-body",kind:"feedbackBody"},{id:"feedback-send",kind:"feedbackSend"}]}function WQ(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 a9(z);case"engines":return Bx(z.engineList);case"accounts":case"keys":return[];case"feedback":return jx();case"dev":return WQ(z.hasDaemon)}}function VQ(J,z){return J.findIndex((Y)=>Y.id===z)}function bH(J,z){return J[z]}var hG;var _9=k(()=>{iZ();hG=[{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 n3(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(X1,{each:hG,children:(G,Z)=>{let X=()=>Z()===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(G.id)),q(H,"wrapMode","none"),U(H,()=>F(`settings.sections.${G.id}`)),y((B)=>{var V=Q()?z.primary:void 0,j=Q()?z.selectedListItemText:X()?z.accent:z.textMuted,K=X()?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=d0(),{theme:Y}=z,G=()=>a9({themeNames:J.themeNames(),focusAccentSlots:uG}),Z=(M)=>VQ(G(),M),X=()=>Z("transparent"),Q=()=>Z("toast"),f=()=>Z("sound"),H=()=>Z("zen-keep-tasks"),B=()=>Z(jQ("chattab")),V=()=>Z(jQ("taskpanel")),j=()=>Z("editor-kind"),K=()=>Z("editor-custom"),L=()=>J.bodyRow()===X(),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"),i=W("box"),e=W("box"),J0=W("text"),T=W("text"),q0=W("box"),p=W("text"),B0=W("text"),L0=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"),X0=W("text"),F0=E0(" "),P0=W("box"),A0=W("text"),N0=E0(" "),u=W("box"),g0=W("text"),Q0=W("text"),R0=W("box"),y0=W("text"),H1=E0(" "),G1=W("box"),w0=W("text"),o0=W("text"),$=W("box"),W0=W("text"),T0=E0(" "),s0=W("box"),a0=W("text"),_0=E0(" "),t0=W("box"),N1=W("text"),R1=W("text"),z0=W("box"),G0=W("text"),H0=W("box"),k0=W("text");return D(M,I),D(M,r),D(M,i),D(M,e),D(M,q0),D(M,t),D(M,o),D(M,u),D(M,G1),D(M,t0),q(M,"flexDirection","column"),q(M,"gap",1),U(I,()=>F("settings.general.theme")),U(r,()=>F("settings.general.themeHint")),q(i,"flexDirection","column"),q(i,"gap",0),U(i,b(X1,{get each(){return J.themeNames()},children:(R,h0)=>{let U0=()=>J.level()==="body"&&J.bodyRow()===h0(),u0=()=>R===z.selected;return(()=>{var j0=W("box"),D0=W("text");return D(j0,D0),q(j0,"flexDirection","row"),q(j0,"gap",1),q(j0,"paddingLeft",1),q(j0,"paddingRight",1),q(j0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(h0()),J.setThemeCursor(h0()),J.selectTheme(R)}),q(D0,"wrapMode","none"),U(D0,()=>u0()?"\u25CF ":" ",null),U(D0,R,null),y((C0)=>{var J1=U0()?Y.primary:void 0,z1=U0()?Y.selectedListItemText:u0()?Y.accent:Y.text,n0=U0()||u0()?e0.BOLD:void 0;return J1!==C0.e&&(C0.e=q(j0,"backgroundColor",J1,C0.e)),z1!==C0.t&&(C0.t=q(D0,"fg",z1,C0.t)),n0!==C0.a&&(C0.a=q(D0,"attributes",n0,C0.a)),C0},{e:void 0,t:void 0,a:void 0}),j0})()}})),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(X1,{each:EG,children:(R)=>{let h0=()=>Z(l9(R.id)),U0=()=>J.level()==="body"&&J.bodyRow()===h0(),u0=()=>J.currentLocale()===R.id;return(()=>{var j0=W("box"),D0=W("text");return D(j0,D0),q(j0,"flexDirection","row"),q(j0,"gap",1),q(j0,"paddingLeft",1),q(j0,"paddingRight",1),q(j0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(h0()),J.selectLanguage(R.id)}),q(D0,"wrapMode","none"),U(D0,()=>u0()?"\u25CF ":" ",null),U(D0,()=>R.label,null),y((C0)=>{var J1=U0()?Y.primary:void 0,z1=U0()?Y.selectedListItemText:u0()?Y.accent:Y.text,n0=U0()||u0()?e0.BOLD:void 0;return J1!==C0.e&&(C0.e=q(j0,"backgroundColor",J1,C0.e)),z1!==C0.t&&(C0.t=q(D0,"fg",z1,C0.t)),n0!==C0.a&&(C0.a=q(D0,"attributes",n0,C0.a)),C0},{e:void 0,t:void 0,a:void 0}),j0})()}}),null),D(q0,p),D(q0,B0),D(q0,L0),q(q0,"flexDirection","column"),q(q0,"gap",0),q(q0,"paddingTop",1),U(p,()=>F("settings.general.transparent")),q(B0,"wrapMode","word"),U(B0,()=>F("settings.general.transparentHint")),D(L0,V0),q(L0,"flexDirection","row"),q(L0,"paddingLeft",1),q(L0,"paddingRight",1),q(L0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(X()),J.toggleTransparent()}),q(V0,"wrapMode","none"),U(V0,(()=>{var R=x0(()=>!!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(X1,{each:uG,children:(R)=>{let h0=()=>Z($9(R)),U0=()=>J.level()==="body"&&J.bodyRow()===h0(),u0=()=>z.focusAccent===R;return(()=>{var j0=W("box"),D0=W("text");return D(j0,D0),q(j0,"flexDirection","row"),q(j0,"gap",1),q(j0,"paddingLeft",1),q(j0,"paddingRight",1),q(j0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(h0()),J.selectFocusAccent(R)}),q(D0,"wrapMode","none"),U(D0,()=>u0()?"\u25CF ":" ",null),U(D0,()=>F(`settings.general.accent${R.charAt(0).toUpperCase()}${R.slice(1)}`),null),y((C0)=>{var J1=U0()?Y.primary:void 0,z1=U0()?Y.selectedListItemText:u0()?Y.focusAccent:Y.text,n0=U0()||u0()?e0.BOLD:void 0;return J1!==C0.e&&(C0.e=q(j0,"backgroundColor",J1,C0.e)),z1!==C0.t&&(C0.t=q(D0,"fg",z1,C0.t)),n0!==C0.a&&(C0.a=q(D0,"attributes",n0,C0.a)),C0},{e:void 0,t:void 0,a:void 0}),j0})()}}),null),D(o,E),D(o,c),D(o,s),D(o,P0),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,X0),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(X0,F0),q(X0,"wrapMode","none"),U(X0,()=>J.toastEnabled()?"[x]":"[ ]",F0),U(X0,()=>F("settings.general.toast"),null),D(P0,A0),q(P0,"flexDirection","row"),q(P0,"gap",1),q(P0,"paddingLeft",1),q(P0,"paddingRight",1),q(P0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(f()),J.toggleSound()}),D(A0,N0),q(A0,"wrapMode","none"),U(A0,()=>J.soundEnabled()?"[x]":"[ ]",N0),U(A0,()=>F("settings.general.sound"),null),D(u,g0),D(u,Q0),D(u,R0),q(u,"flexDirection","column"),q(u,"gap",0),q(u,"paddingTop",1),U(g0,()=>F("settings.general.zen")),q(Q0,"wrapMode","word"),U(Q0,()=>F("settings.general.zenHint")),D(R0,y0),q(R0,"flexDirection","row"),q(R0,"gap",1),q(R0,"paddingLeft",1),q(R0,"paddingRight",1),q(R0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(H()),J.toggleZenKeepsTasks()}),D(y0,H1),q(y0,"wrapMode","none"),U(y0,()=>J.zenKeepsTasks()?"[x]":"[ ]",H1),U(y0,()=>F("settings.general.zenKeepTasks"),null),D(G1,w0),D(G1,o0),D(G1,$),D(G1,s0),q(G1,"flexDirection","column"),q(G1,"gap",0),q(G1,"paddingTop",1),U(w0,()=>F("settings.general.surface")),q(o0,"wrapMode","word"),U(o0,()=>F("settings.general.surfaceHint")),D($,W0),q($,"flexDirection","row"),q($,"gap",1),q($,"paddingLeft",1),q($,"paddingRight",1),q($,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(B()),J.selectSurface("chattab")}),D(W0,T0),q(W0,"wrapMode","none"),U(W0,()=>J.settingsSurface()==="chattab"?"[x]":"[ ]",T0),U(W0,()=>F("settings.general.surfaceChattab"),null),D(s0,a0),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(a0,_0),q(a0,"wrapMode","none"),U(a0,()=>J.settingsSurface()==="taskpanel"?"[x]":"[ ]",_0),U(a0,()=>F("settings.general.surfaceTaskpanel"),null),D(t0,N1),D(t0,R1),D(t0,z0),D(t0,H0),q(t0,"flexDirection","column"),q(t0,"gap",0),q(t0,"paddingTop",1),U(N1,()=>F("settings.general.editor")),q(R1,"wrapMode","word"),U(R1,()=>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(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(K()),J.editEditorCustom()}),q(k0,"wrapMode","none"),U(k0,()=>F("settings.general.editorCustom",{cmd:J.editorCustomCommand().trim()||F("settings.general.editorCustomUnset")})),y((R)=>{var h0=Y.text,U0=e0.BOLD,u0=Y.textMuted,j0=Y.text,D0=e0.BOLD,C0=Y.textMuted,J1=Y.text,z1=e0.BOLD,n0=Y.textMuted,x1=L()?Y.primary:void 0,b0=L()?Y.selectedListItemText:z.transparentBackground?Y.accent:Y.textMuted,m1=e0.BOLD,v=Y.text,O0=e0.BOLD,W1=Y.textMuted,A1=Y.text,B1=e0.BOLD,d=Y.textMuted,Y0=A()?Y.primary:void 0,I0=A()?Y.selectedListItemText:J.toastEnabled()?Y.accent:Y.textMuted,S0=e0.BOLD,BJ=O()?Y.primary:void 0,LJ=O()?Y.selectedListItemText:J.soundEnabled()?Y.accent:Y.textMuted,XJ=e0.BOLD,iJ=Y.text,iz=e0.BOLD,AJ=Y.textMuted,lz=g()?Y.primary:void 0,UY=g()?Y.selectedListItemText:J.zenKeepsTasks()?Y.accent:Y.textMuted,m=e0.BOLD,n=Y.text,l=e0.BOLD,w=Y.textMuted,m0=x()?Y.primary:void 0,v0=x()?Y.selectedListItemText:J.settingsSurface()==="chattab"?Y.accent:Y.textMuted,M0=e0.BOLD,c0=_()?Y.primary:void 0,q1=_()?Y.selectedListItemText:J.settingsSurface()==="taskpanel"?Y.accent:Y.textMuted,L1=e0.BOLD,jJ=Y.text,Zz=e0.BOLD,DY=Y.textMuted,UW=S()?Y.primary:void 0,DW=S()?Y.selectedListItemText:Y.accent,LW=e0.BOLD,MW=N()?Y.primary:void 0,FW=N()?Y.selectedListItemText:J.editorKind()==="custom"?Y.text:Y.textMuted;return h0!==R.e&&(R.e=q(I,"fg",h0,R.e)),U0!==R.t&&(R.t=q(I,"attributes",U0,R.t)),u0!==R.a&&(R.a=q(r,"fg",u0,R.a)),j0!==R.o&&(R.o=q(J0,"fg",j0,R.o)),D0!==R.i&&(R.i=q(J0,"attributes",D0,R.i)),C0!==R.n&&(R.n=q(T,"fg",C0,R.n)),J1!==R.s&&(R.s=q(p,"fg",J1,R.s)),z1!==R.h&&(R.h=q(p,"attributes",z1,R.h)),n0!==R.r&&(R.r=q(B0,"fg",n0,R.r)),x1!==R.d&&(R.d=q(L0,"backgroundColor",x1,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)),O0!==R.w&&(R.w=q(h,"attributes",O0,R.w)),W1!==R.m&&(R.m=q(C,"fg",W1,R.m)),A1!==R.f&&(R.f=q(E,"fg",A1,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)),I0!==R.b&&(R.b=q(X0,"fg",I0,R.b)),S0!==R.T&&(R.T=q(X0,"attributes",S0,R.T)),BJ!==R.A&&(R.A=q(P0,"backgroundColor",BJ,R.A)),LJ!==R.O&&(R.O=q(A0,"fg",LJ,R.O)),XJ!==R.I&&(R.I=q(A0,"attributes",XJ,R.I)),iJ!==R.S&&(R.S=q(g0,"fg",iJ,R.S)),iz!==R.W&&(R.W=q(g0,"attributes",iz,R.W)),AJ!==R.C&&(R.C=q(Q0,"fg",AJ,R.C)),lz!==R.B&&(R.B=q(R0,"backgroundColor",lz,R.B)),UY!==R.v&&(R.v=q(y0,"fg",UY,R.v)),m!==R.k&&(R.k=q(y0,"attributes",m,R.k)),n!==R.x&&(R.x=q(w0,"fg",n,R.x)),l!==R.j&&(R.j=q(w0,"attributes",l,R.j)),w!==R.q&&(R.q=q(o0,"fg",w,R.q)),m0!==R.z&&(R.z=q($,"backgroundColor",m0,R.z)),v0!==R.P&&(R.P=q(W0,"fg",v0,R.P)),M0!==R.H&&(R.H=q(W0,"attributes",M0,R.H)),c0!==R.F&&(R.F=q(s0,"backgroundColor",c0,R.F)),q1!==R.M&&(R.M=q(a0,"fg",q1,R.M)),L1!==R.D&&(R.D=q(a0,"attributes",L1,R.D)),jJ!==R.R&&(R.R=q(N1,"fg",jJ,R.R)),Zz!==R.E&&(R.E=q(N1,"attributes",Zz,R.E)),DY!==R.L&&(R.L=q(R1,"fg",DY,R.L)),UW!==R.N&&(R.N=q(z0,"backgroundColor",UW,R.N)),DW!==R.G&&(R.G=q(G0,"fg",DW,R.G)),LW!==R.U&&(R.U=q(G0,"attributes",LW,R.U)),MW!==R.K&&(R.K=q(H0,"backgroundColor",MW,R.K)),FW!==R.V&&(R.V=q(k0,"fg",FW,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 l3(J){let{theme:z}=d0(),Y=()=>J.vendors.length;return(()=>{var G=W("box"),Z=W("text"),X=W("text"),Q=W("box"),f=W("box"),H=W("text");return D(G,Z),D(G,X),D(G,Q),q(G,"flexDirection","column"),q(G,"gap",1),U(Z,()=>F("settings.engines.title")),q(X,"wrapMode","word"),U(X,()=>F("settings.engines.hint")),D(Q,f),q(Q,"flexDirection","column"),q(Q,"gap",0),U(Q,b(X1,{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=x0(()=>!!J.isDefault(B));return()=>g()?F("settings.engines.defaultTag"):x0(()=>!!J.isCustom(B))()?F("settings.engines.customTag"):""})(),null),y((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")),y((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(Z,"fg",V,B.e)),j!==B.t&&(B.t=q(Z,"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}),G})()}function $3(J){let{theme:z}=d0(),Y=(G)=>G.binary.found?`Binary: ${G.binary.path}`:`Binary: ${G.binary.error}`;return(()=>{var G=W("box"),Z=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(G,Z),D(G,X),D(G,Q),D(G,H),D(G,V),q(G,"flexDirection","column"),q(G,"gap",1),U(Z,()=>F("settings.accounts.title")),q(X,"wrapMode","word"),U(X,()=>F("settings.accounts.hint")),D(Q,f),q(Q,"flexDirection","column"),q(Q,"gap",0),D(f,E0("claude-code")),U(Q,b(Z0,{get when(){return J.claudeStatus()===null},get children(){var K=W("text");return U(K,()=>F("settings.accounts.checking")),y((L)=>q(K,"fg",z.textMuted,L)),K}}),null),U(Q,b(Z0,{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),y((_)=>q(x,"fg",z.success,_)),x})()}return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.notLoggedIn")),y((x)=>q(g,"fg",z.textMuted,x)),g})()},null),U(L,b(Z0,{get when(){return K().accountError},children:(O)=>(()=>{var g=W("text");return q(g,"wrapMode","word"),U(g,()=>`! ${O()}`),y((x)=>q(g,"fg",z.warning,x)),g})()}),null),y((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(Z0,{get when(){return J.codexStatus()===null},get children(){var K=W("text");return U(K,()=>F("settings.accounts.checking")),y((L)=>q(K,"fg",z.textMuted,L)),K}}),null),U(H,b(Z0,{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=x0(()=>!!O.plan);return()=>x()?` (${O.plan})`:""})(),null),y((x)=>q(g,"fg",z.success,x)),g})();if(O.kind==="apikey")return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.apiKeyConfigured")),y((x)=>q(g,"fg",z.success,x)),g})();return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.notLoggedIn")),y((x)=>q(g,"fg",z.textMuted,x)),g})()},null),U(L,b(Z0,{get when(){return K().accountError},children:(O)=>(()=>{var g=W("text");return q(g,"wrapMode","word"),U(g,()=>`! ${O()}`),y((x)=>q(g,"fg",z.warning,x)),g})()}),null),y((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(Z0,{get when(){return J.copilotStatus()===null},get children(){var K=W("text");return U(K,()=>F("settings.accounts.checking")),y((L)=>q(K,"fg",z.textMuted,L)),K}}),null),U(V,b(Z0,{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})),y((x)=>q(g,"fg",z.success,x)),g})();if(O.kind==="oauth")return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.copilotDetected")),y((x)=>q(g,"fg",z.success,x)),g})();return(()=>{var g=W("text");return U(g,()=>F("settings.accounts.notLoggedIn")),y((x)=>q(g,"fg",z.textMuted,x)),g})()},null),U(L,b(Z0,{get when(){return K().accountError},children:(O)=>(()=>{var g=W("text");return q(g,"wrapMode","word"),U(g,()=>`! ${O()}`),y((x)=>q(g,"fg",z.warning,x)),g})()}),null),y((O)=>q(A,"fg",K().binary.found?z.textMuted:z.warning,O)),L})()}),null),y((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(Z,"fg",L,K.e)),A!==K.t&&(K.t=q(Z,"attributes",A,K.t)),O!==K.a&&(K.a=q(X,"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 a3(J){let{theme:z}=d0(),Y=()=>J.level()==="body",G=()=>Y()&&J.bodyRow()===0,Z=()=>Y()&&J.bodyRow()===1,X=()=>Y()&&J.bodyRow()===2,Q=(B)=>B?z.primary:z.textMuted,f=(B)=>B?e0.BOLD|e0.UNDERLINE:void 0,H;return r0(()=>{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(DJ(M))),q(O,"onSubmit",()=>J.onTitleSubmit()),D(g,x),D(g,_),q(g,"gap",0),U(x,()=>F("settings.feedback.descriptionLabel")),cz((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(Z0,{get when(){return J.status()},get children(){var M=W("text");return q(M,"wrapMode","word"),U(M,()=>J.status()),y((I)=>q(M,"fg",J.status().startsWith("error:")?z.warning:z.success,I)),M}}),null),y((M)=>{var I=z.text,r=e0.BOLD,i=z.textMuted,e=Q(G()),J0=f(G()),T=J.title(),q0=F("settings.feedback.titlePlaceholder"),p=G(),B0=Q(Z()),L0=f(Z()),V0=J.body(),t=F("settings.feedback.descriptionPlaceholder"),h=Z(),C=X()?z.primary:z.backgroundElement,o=X()?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)),i!==M.a&&(M.a=q(j,"fg",i,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)),B0!==M.r&&(M.r=q(x,"fg",B0,M.r)),L0!==M.d&&(M.d=q(x,"attributes",L0,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 _3(J){let{theme:z}=d0(),Y=()=>J.level()==="body"&&J.bodyRow()===0,G=()=>J.level()==="body"&&J.bodyRow()===1,Z=()=>VQ(WQ(J.hasDaemon),"remote-projects"),X=()=>J.level()==="body"&&J.bodyRow()===Z(),Q=()=>VQ(WQ(J.hasDaemon),"auto-status"),f=()=>J.level()==="body"&&J.bodyRow()===Q(),H=()=>VQ(WQ(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"),i=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(Z0,{get when(){return J.hasDaemon},get children(){var T=W("box"),q0=W("text"),p=W("text"),B0=W("box"),L0=W("text");return D(T,q0),D(T,p),D(T,B0),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(B0,L0),q(B0,"flexDirection","row"),q(B0,"paddingLeft",1),q(B0,"paddingRight",1),q(B0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(1),J.confirmRestartDaemon()}),U(L0,()=>F("settings.dev.restartButton")),y((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(B0,"backgroundColor",o,V0.o)),E!==V0.i&&(V0.i=q(L0,"fg",E,V0.i)),c!==V0.n&&(V0.n=q(L0,"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,i),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(Z()),J.toggleRemoteProjects()}),U(N,(()=>{var T=x0(()=>!!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=x0(()=>!!J.autoStatusEnabled());return()=>T()?F("settings.dev.autoStatusOn"):F("settings.dev.autoStatusOff")})()),q(i,"wrapMode","word"),U(i,()=>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=x0(()=>!!J.dispatcherEnabled());return()=>T()?F("settings.dev.dispatcherOn"):F("settings.dev.dispatcherOff")})()),y((T)=>{var q0=z.text,p=e0.BOLD,B0=z.textMuted,L0=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=X()?z.primary:z.backgroundElement,s=X()?z.selectedListItemText:z.text,X0=J.remoteProjectsEnabled()?e0.BOLD:void 0,F0=z.textMuted,P0=f()?z.primary:z.backgroundElement,A0=f()?z.selectedListItemText:z.text,N0=J.autoStatusEnabled()?e0.BOLD:void 0,u=z.textMuted,g0=B()?z.primary:z.backgroundElement,Q0=B()?z.selectedListItemText:z.text,R0=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)),B0!==T.a&&(T.a=q(K,"fg",B0,T.a)),L0!==T.o&&(T.o=q(L,"backgroundColor",L0,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)),X0!==T.c&&(T.c=q(N,"attributes",X0,T.c)),F0!==T.w&&(T.w=q(M,"fg",F0,T.w)),P0!==T.m&&(T.m=q(I,"backgroundColor",P0,T.m)),A0!==T.f&&(T.f=q(r,"fg",A0,T.f)),N0!==T.y&&(T.y=q(r,"attributes",N0,T.y)),u!==T.g&&(T.g=q(i,"fg",u,T.g)),g0!==T.p&&(T.p=q(e,"backgroundColor",g0,T.p)),Q0!==T.b&&(T.b=q(J0,"fg",Q0,T.b)),R0!==T.T&&(T.T=q(J0,"attributes",R0,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 p3(){let{theme:J}=d0(),z=B3(),Y=Object.keys(YB).sort();return(()=>{var G=W("box"),Z=W("text"),X=W("text"),Q=W("box"),f=W("text"),H=W("text"),B=W("text"),V=W("text");return D(G,Z),D(G,X),D(G,Q),D(G,B),D(G,V),q(G,"flexDirection","column"),q(G,"gap",1),U(Z,()=>F("settings.keybindings.title")),q(X,"wrapMode","word"),U(X,()=>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=x0(()=>!!z.exists);return()=>j()?"":F("settings.keybindings.notCreated")})(),null),U(G,b(Z0,{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]")),y((I)=>{var r=J.text,i=e0.BOLD,e=J.textMuted,J0=J.textMuted,T=J.textMuted,q0=J.textMuted,p=J.textMuted,B0=J.textMuted,L0=J.textMuted,V0=J.textMuted,t=J.textMuted;return r!==I.e&&(I.e=q(K,"fg",r,I.e)),i!==I.t&&(I.t=q(K,"attributes",i,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)),B0!==I.h&&(I.h=q(_,"fg",B0,I.h)),L0!==I.r&&(I.r=q(S,"fg",L0,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(Z0,{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(Z0,{get when(){return z.applied.length===0},get children(){var L=W("text");return U(L,()=>F("settings.keybindings.none")),y((A)=>q(L,"fg",J.textMuted,A)),L}}),null),U(j,b(X1,{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(" / ")})`),y((O)=>q(A,"fg",J.text,O)),A})()}),null),y((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(Z0,{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(X1,{get each(){return z.warnings},children:(L)=>(()=>{var A=W("text");return q(A,"wrapMode","word"),U(A,`! ${L}`),y((O)=>q(A,"fg",J.warning,O)),A})()}),null),y((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(", ")}.`),y((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(Z,"fg",K,j.e)),L!==j.t&&(j.t=q(Z,"attributes",L,j.t)),A!==j.a&&(j.a=q(X,"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 r3=k(()=>{P();P();P();P();P();P();P();P();P();j1();I9();v1();ZJ();iZ();Iq();lZ();_9()});import{TextAttributes as Wx}from"@opentui/core";function Vx(J){return J.split(/[-_]+/).filter((z)=>z.length>0).map((z)=>z.charAt(0).toUpperCase()+z.slice(1)).join(" ")}function vG(J){let z=c1(),Y=d0(),G=fJ(),{theme:Z}=Y,[X,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=v3(J.orchestrator),[I,r]=a(null),[i,e]=a(null),[J0,T]=a(null),q0=!1;r0(()=>{if(f()!=="accounts"||q0)return;q0=!0,cQ().then(r),dQ().then(e),nQ().then(T)});function p(){return d3(f(),{themeNames:S(),focusAccentSlots:uG,engineList:w0(),hasDaemon:M})}function B0(){return p().length}function L0(){return SG(J.kv.get(QY,bG))}function V0(v){if(Y.selected===v)return;if(!Y.set(v))return;J.kv.set("activeTheme",v),J.onVisualPrefsChange?.()}function t(){return j9()}function h(v){if(j9()===v)return;ZQ(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 X0(){return J.kv.get("notifications.sound.enabled",!0)!==!1}function F0(){J.kv.set("notifications.toast.enabled",!s())}function P0(){J.kv.set("notifications.sound.enabled",!X0())}function A0(){return J.kv.get(lq,!0)!==!1}function N0(){J.kv.set(lq,!A0())}function u(){return J.kv.get("experimental.remoteProjects",!1)===!0}function g0(){J.kv.set("experimental.remoteProjects",!u())}function Q0(){return J.kv.get(jG,!1)===!0}function R0(){J.kv.set(jG,!Q0())}function y0(){return J.kv.get(WG,!1)===!0}function H1(){J.kv.set(WG,!y0())}function G1(){let v=J.kv.get("customEngineIds",[]);return Array.isArray(v)?v.filter((O0)=>typeof O0==="string"&&O0.trim().length>0):[]}function w0(){return[...n1,...G1()]}function o0(v){let O0=J.kv.get(Kz(v),"");return typeof O0==="string"?O0.trim():""}function $(v){return o0(v)||RX(v).join(" ")}function W0(v){return QJ(v)&&o0(v).length===0&&!s0(v)}function T0(v){let O0=J.kv.get(Uz(v),"");return typeof O0==="string"?O0.trim():""}function s0(v){return T0(v).length>0}function a0(v){return T0(v)||JB[v]||v}let[_0,t0]=a(xJ(g1("lastSelectedVendor"),G1()));function N1(v){return _0()===v}function R1(v){r1("lastSelectedVendor",v),J.kv.set("lastSelectedVendor",v),t0(v)}async function z0(v){let O0=await VY.show(z,$(v),{dialogTitle:`${a0(v)} launch command`,fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(O0===void 0)return;J.kv.set(Kz(v),O0.trim())}async function G0(v){let O0=await VY.show(z,a0(v),{dialogTitle:`${a0(v)} display name (blank = default)`,fieldLabel:"name",submitLabel:"save",allowEmpty:!0});if(O0===void 0)return;J.kv.set(Uz(v),O0.trim())}function H0(v){if(J.kv.set(Kz(v),""),J.kv.set(Uz(v),""),!QJ(v))J.kv.set("customEngineIds",G1().filter((O0)=>O0!==v)),K((O0)=>Math.max(0,Math.min(O0,w0().length)))}async function k0(){let v=await VY.show(z,"",{dialogTitle:"Add engine",fieldLabel:"id",submitLabel:"next",placeholder:"lowercase slug, e.g. aider"});if(v===void 0)return;let O0=v.trim().toLowerCase();if(!O0||QJ(O0)||G1().includes(O0))return;let W1=await VY.show(z,"",{dialogTitle:`Add engine \xB7 ${O0}`,fieldLabel:"command",submitLabel:"next",placeholder:"e.g. aider --model sonnet"});if(W1===void 0)return;let A1=await VY.show(z,O0,{dialogTitle:`Add engine \xB7 ${O0}`,fieldLabel:"name",submitLabel:"add",allowEmpty:!0});if(J.kv.set("customEngineIds",[...G1(),O0]),W1.trim())J.kv.set(Kz(O0),W1.trim());let B1=A1?.trim()??"";J.kv.set(Uz(O0),B1&&B1!==O0?B1:Vx(O0))}function R(){if(f()!=="engines"||X()!=="body")return null;let v=bH(p(),j());return v?.kind==="engine"?v.vendor:null}function h0(){return RZ(J.kv.get(XY,Cf))}function U0(){let v=kG.indexOf(h0()),O0=kG[(v+1)%kG.length];if(O0)J.kv.set(XY,O0)}function u0(){let v=J.kv.get(wY,"");return typeof v==="string"?v:""}async function j0(){let v=await VY.show(z,u0(),{dialogTitle:"Custom editor command (use {file} for the path)",fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(v===void 0)return;let O0=v.trim();if(J.kv.set(wY,O0),O0)J.kv.set(XY,"custom")}async function D0(){_("submitting...");try{let v=EZ({title:L(),body:O()});_(`sent: ${v.url}`),A(""),g(""),K(0)}catch(v){_(`error: ${v instanceof Error?v.message:String(v)}`)}}let C0=()=>f()==="feedback"&&X()==="body";function J1(v){let O0=j()+v;if(O0<0||O0>2){Q("sidebar");return}K(O0)}function z1(){if(X()!=="sidebar"||B0()===0)return;if(Q("body"),K(0),f()==="general")N(0)}function n0(v){if(X()==="sidebar"){let A1=(B()+v+hG.length)%hG.length;V(A1);let B1=hG[A1];if(B1)H(B1.id),K(0);return}let O0=B0();if(O0===0)return;let W1=(j()+v+O0)%O0;if(K(W1),bH(p(),W1)?.kind==="theme")N(W1)}function x1(v){H(v),V(hG.findIndex((O0)=>O0.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:()=>F0(),sound:()=>P0(),zenKeepTasks:()=>N0(),surface:(v)=>c(v.surface),editorKind:()=>U0(),editorCustom:()=>void j0(),engine:(v)=>void z0(v.vendor),engineAdd:()=>void k0(),feedbackTitle:()=>K(0),feedbackBody:()=>K(1),feedbackSend:()=>void D0(),devReset:()=>void n9(z,J.kv,G),devRestartDaemon:()=>void i9(z,J.orchestrator,G),devRemoteProjects:()=>g0(),devAutoStatus:()=>R0(),devDispatcher:()=>H1()};function m1(){let v=bH(p(),j());if(!v)return;b0[v.kind](v)}return D1(()=>({enabled:(!J.standalone||z.stack.length===0)&&!C0(),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 v=R();if(v)G0(v)}},{key:"x",cmd:()=>{let v=R();if(v)H0(v)}},{key:"d",cmd:()=>{let v=R();if(v)R1(v)}}]})),D1(()=>({enabled:C0(),bindings:[{key:"tab",cmd:()=>J1(1)},{key:"shift+tab",cmd:()=>J1(-1)}]})),D1(()=>({enabled:C0()&&j()===2,bindings:[{key:"return",cmd:()=>void D0()}]})),(()=>{var v=W("box"),O0=W("box"),W1=W("text"),A1=W("text"),B1=W("box"),d=W("box"),Y0=W("box"),I0=W("text");return D(v,O0),D(v,B1),D(v,Y0),q(v,"paddingLeft",2),q(v,"paddingRight",2),q(v,"paddingBottom",1),q(v,"gap",1),D(O0,W1),D(O0,A1),q(O0,"flexDirection","row"),q(O0,"justifyContent","space-between"),U(W1,()=>F("settings.title")),q(A1,"onMouseUp",()=>J.onClose()),U(A1,()=>F("settings.esc")),D(B1,d),q(B1,"flexDirection","row"),q(B1,"gap",2),U(B1,b(n3,{level:X,cursor:B,switchSection:x1}),d),q(d,"flexGrow",1),q(d,"flexShrink",1),q(d,"flexDirection","column"),q(d,"gap",1),U(d,b(Z0,{get when(){return f()==="general"},get children(){return b(i3,{level:X,bodyRow:j,setLevel:Q,setBodyRow:K,themeNames:S,setThemeCursor:N,selectTheme:V0,currentLocale:t,selectLanguage:h,toggleTransparent:o,selectFocusAccent:E,toastEnabled:s,soundEnabled:X0,toggleToast:F0,toggleSound:P0,zenKeepsTasks:A0,toggleZenKeepsTasks:N0,settingsSurface:L0,selectSurface:c,editorKind:h0,cycleEditorKind:U0,editorCustomCommand:u0,editEditorCustom:()=>void j0()})}}),null),U(d,b(Z0,{get when(){return f()==="engines"},get children(){return b(l3,{level:X,bodyRow:j,setLevel:Q,setBodyRow:K,get vendors(){return w0()},isCustom:(S0)=>!QJ(S0),displayName:a0,commandText:$,isDefault:W0,isDefaultEngine:N1,editEngine:(S0)=>void z0(S0),renameEngine:(S0)=>void G0(S0),resetEngine:H0,onAddEngine:()=>void k0()})}}),null),U(d,b(Z0,{get when(){return f()==="accounts"},get children(){return b($3,{claudeStatus:I,codexStatus:i,copilotStatus:J0})}}),null),U(d,b(Z0,{get when(){return f()==="keys"},get children(){return b(p3,{})}}),null),U(d,b(Z0,{get when(){return f()==="feedback"},get children(){return b(a3,{level:X,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(Z0,{get when(){return f()==="dev"},get children(){return b(_3,{level:X,bodyRow:j,setLevel:Q,setBodyRow:K,hasDaemon:M,confirmReset:()=>void n9(z,J.kv,G),confirmRestartDaemon:()=>void i9(z,J.orchestrator,G),remoteProjectsEnabled:u,toggleRemoteProjects:g0,autoStatusEnabled:Q0,toggleAutoStatus:R0,dispatcherEnabled:y0,toggleDispatcher:H1})}}),null),D(Y0,I0),q(Y0,"paddingTop",0),U(I0,(()=>{var S0=x0(()=>!!C0());return()=>S0()?F("settings.nav.feedback"):F("settings.nav.default")})()),y((S0)=>{var BJ=Wx.BOLD,LJ=Z.text,XJ=Z.textMuted,iJ=Z.textMuted;return BJ!==S0.e&&(S0.e=q(W1,"attributes",BJ,S0.e)),LJ!==S0.t&&(S0.t=q(W1,"fg",LJ,S0.t)),XJ!==S0.a&&(S0.a=q(A1,"fg",XJ,S0.a)),iJ!==S0.o&&(S0.o=q(I0,"fg",iJ,S0.o)),S0},{e:void 0,t:void 0,a:void 0,o:void 0}),v})()}var p9=k(()=>{P();P();P();P();P();P();P();P();j1();YG();sJ();lf();AX();gq();F1();fB();i1();v1();ZJ();Nf();yJ();x9();nJ();c9();c3();_9();r3();vG.show=(J,z,Y)=>{let G=!1;return new Promise((Z)=>{J.replace(()=>b(vG,{kv:z,orchestrator:Y,onVisualPrefsChange:()=>{G=!0},onClose:()=>Z({visualPrefsChanged:G})}),()=>Z({visualPrefsChanged:G}))})}});import{TextAttributes as Kx}from"@opentui/core";function s3(){let{theme:J}=d0(),z=mz(),Y=LH(),G=()=>Y.toasts().slice(-o3),Z=()=>Math.max(0,z().width-Ux-Dx),X=()=>Math.max(0,z().height-Lx-o3-1);return b(Z0,{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(X1,{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),y((A)=>{var O=H(),g=B(),x=Kx.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})()}})),y((f)=>{var H=Z(),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 o3=4,Ux=40,Dx=2,Lx=2;var t3=k(()=>{P();P();P();P();P();P();P();j1();MH();v1()});import{TextAttributes as Mx}from"@opentui/core";function Fx(J,z){let Y=J?`v${J}`:F("update.skew.olderBuild");return F("update.skew.hint",{daemon:Y,clientVersion:z})}function e3(J){let{theme:z}=d0(),Y=()=>Math.max(4,J.width()-2);return b(Z0,{get when(){return J.stale()},get children(){var G=W("box"),Z=W("text"),X=W("box"),Q=W("text"),f=W("box"),H=W("text");return D(G,Z),D(G,X),D(G,f),q(G,"flexDirection","column"),q(G,"flexShrink",0),q(G,"paddingLeft",1),q(G,"paddingRight",1),q(G,"paddingBottom",1),q(Z,"wrapMode","none"),U(Z,()=>"\u2594".repeat(Y())),D(X,Q),q(X,"flexDirection","row"),q(X,"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,()=>Fx(J.daemonVersion(),J.clientVersion)),y((B)=>{var{warning:V,warning:j}=z,K=Mx.BOLD,L=z.text;return V!==B.e&&(B.e=q(Z,"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 JM=k(()=>{P();P();P();P();P();P();j1();v1();ZJ()});function zM(J,z){return J.find((Y)=>Y.id!==z&&!Y.archived)}async function Ox(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 G=C1(J.taskId),Z=zM(J.tasks,J.taskId);if(await Pz(G,Z?C1(Z.id):void 0).catch((X)=>{J.logger.error(`${J.logPrefix} switch-client failed:`,X)}),J.updateActiveTask)await J.orch.setActiveTask(Z?.id??null).catch(()=>{});return await eJ(G).catch((X)=>{J.logger.error(`${J.logPrefix} kill tmux session failed:`,X)}),{archived:Y,nextTask:Z}}async function Ax(J){let z=zM(J.tasks,J.taskId),Y=C1(J.taskId);if(J.switchBeforeKill)await Pz(Y,z?C1(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 eJ(Y).catch((G)=>{J.logger.error(`${J.logPrefix} kill tmux session failed:`,G)}),{nextTask:z}}async function YM(J,z){if(!J.orch)return;let Y=J.tasks().find((Z)=>Z.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 Ox({orch:J.orch,tasks:J.tasks(),taskId:z,logger:J.logger,logPrefix:J.logPrefix,updateActiveTask:J.updateActiveTask}))return;await J.reload?.()}async function GM(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 Z=!1;try{await J.orch.deleteTask(z),Z=!0}catch(Q){if((Q instanceof Error?Q.message:String(Q)).includes(a8)){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}),Z=!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(!Z)return;let{nextTask:X}=await Ax({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 ZM(J,z){let Y=J.tasks().find((Z)=>Z.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(Z){J.logger.error(`${J.logPrefix} task.rename failed:`,Z),J.notifyError?.(`Couldn't rename task: ${Z instanceof Error?Z.message:String(Z)}`);return}await J.reload?.()}async function XM(J,z){let Y=J.tasks().find((Z)=>Z.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(Z){J.logger.error(`${J.logPrefix} task.setBranch failed:`,Z),J.notifyError?.(`Couldn't rename branch: ${Z instanceof Error?Z.message:String(Z)}`);return}await J.reload?.()}async function QM(J,z){let Y=J.tasks().find((X)=>X.id===z);if(!Y||!J.orch)return;let G=await ez(),Z=LY(G,Y.vendor??$1);try{await J.orch.setVendor(z,Z)}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 ${VG(Z)} (applies on reopen)`),await J.reload?.()}async function qM(J){let z=gJ(),Y=J.cursorRepo()??z[0]??process.cwd();if(J.openCreateSurface&&await J.openCreateSurface(Y))return;let G=J.lastVendor()??$1,Z=await ez();if(Z.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:G,availableVendors:Z,discoverAdoptable:X?(H)=>X.discoverAdoptableWorktrees(H):void 0});if(!Q)return;if(J.rememberVendor(Q.vendor),pz(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?.(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 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 fM=k(()=>{YG();sJ();r8();F1();ZJ();rJ();i1();zJ()});function rZ(J,z){if(z<=0)return"";let Y=[...J];if(Y.length<=z)return J;return`${Y.slice(0,Math.max(0,z-1)).join("")}\u2026`}function SH(J,z){if(z<=0)return"";let Y=[...J];if(Y.length<=z)return J;return`\u2026${Y.slice(Y.length-Math.max(0,z-1)).join("")}`}import{spawn as Rx}from"child_process";import{existsSync as gx}from"fs";import{basename as Cx,delimiter as Nx,isAbsolute as kx,join as bx}from"path";function r9(J,z,Y){if(kx(J))return Y(J);let G=z.PATH??"";for(let Z of G.split(Nx)){if(!Z)continue;if(Y(bx(Z,J)))return!0}return!1}function Tx(J){let z=Cx(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 HM(J={}){let z=J.env??process.env,Y=J.platform??process.platform,G=J.exists??gx,Z=z.KOBE_OPEN_EDITOR?.trim();if(Z)return{id:"env",label:Tx(Z),command:Z,args:[]};for(let X of Sx)if(r9(X.command,z,G))return{id:X.id,label:X.label,command:X.command,args:[]};if(Y==="darwin"&&r9("open",z,G)){for(let X of Ix)if(X.paths.some((Q)=>G(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"&&r9("xdg-open",z,G))return{id:"xdg-open",label:"Open",command:"xdg-open",args:[]};return null}function yx(J,z){return[z.command,[...z.args,J]]}function BM(J,z,Y={}){if(!J)return!1;let G=Y.spawn??Rx,[Z,X]=yx(J,z);try{let Q=G(Z,X,{detached:!0,stdio:"ignore"});if(Q.pid===void 0)return!1;return Q.unref(),!0}catch{return!1}}var Sx,Ix;var jM=k(()=>{Sx=[{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"}],Ix=[{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 IH(J){let z=new Map;function Y(G){let Z=z.get(G);if(!Z){let[X,Q]=a(J.initial,J.equals?{equals:J.equals}:void 0);Z={read:X,write:(f)=>Q(()=>f),inFlight:!1,nextAllowedAt:0},z.set(G,Z)}return Z}return{read(G){if(!G)return J.initial;return Y(G).read()},poll(G){if(!G)return;let Z=Y(G);tG(Z,J,(X)=>J.run(G,X),(X)=>Z.write(X))},reset(){z.clear()}}}var KQ=k(()=>{j1();eG();eG()});import{stat as xx}from"fs/promises";import{join as ux}from"path";async function hx(J){try{let z=await xx(ux(J,".git","HEAD"));return`${z.mtimeMs}:${z.size}`}catch{return null}}async function vx(J,z,Y=zY){let G=await hx(J);if(G!==null){let f=WM.get(J);if(f&&f.fingerprint===G)return f.value}let Z="",X=await Y("git",["symbolic-ref","--short","HEAD"],{cwd:J,env:cJ(),signal:z}),Q=X.status===0?X.stdout.trim():"";if(Q&&Q!=="HEAD")Z=Q;else if((await Y("git",["rev-parse","--verify","HEAD"],{cwd:J,env:cJ(),signal:z})).status===0)Z="(detached)";if(G!==null)WM.set(J,{fingerprint:G,value:Z});return Z}function KM(J){return VM.read(J)}function UM(J){VM.poll(J)}var Ex=2000,wx=30000,Px=1500,WM,VM;var DM=k(()=>{PY();KQ();WM=new Map;VM=IH({initial:"",timeoutMs:Ex,slowRetryMs:wx,minIntervalMs:Px,run:(J,z)=>vx(J,z)})});function o9(J){let z=J.scheduleTimeout??((H,B)=>{let V=setTimeout(H,B);return()=>clearTimeout(V)}),Y=!1,G=null,Z=()=>{Y=!0,G?.(),G=z(()=>{Y=!1,G=null},700)},X=()=>{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(){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 Z()},pressShiftG(){X(),f(J.getFlatIds().length-1)},isChordArmed(){return Y},disarmChord(){X()}}}function LM(J){let z=o9({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]},G=()=>J.searchMode?.()??!1,Z=()=>J.moveMode?.()??!1;D1(()=>({enabled:J.focused()&&!G(),bindings:lY({"sidebar.nav":(X,Q)=>{let f=(Q??0)%2===0;if(Z()){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(Z()){J.onMoveModeExit?.();return}z.selectCurrent()},"sidebar.goto":(X)=>{if(Z())return;if(X.shift)z.pressShiftG();else z.pressG()},"sidebar.delete":()=>{if(Z())return;let X=Y();if(X!==void 0)J.onDeleteRequest?.(X)},"sidebar.archive":()=>{if(Z())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(Z())return;let X=Y();if(X!==void 0)J.onRenameRequest?.(X)},"sidebar.pin":(X)=>{if(Z())return;if(!X.shift)return;let Q=Y();if(Q!==void 0)J.onPinRequest?.(Q)},"sidebar.search.enter":()=>{if(Z())return;J.onSearchEnter?.()},"sidebar.sort":()=>{if(Z())return;J.onSortModeToggle?.()},"sidebar.projectFilter":()=>{if(Z())return;J.onProjectFilterToggle?.()}})})),D1(()=>({enabled:J.focused()&&Z(),bindings:[{key:"escape",cmd:()=>J.onMoveModeExit?.()}]})),D1(()=>({enabled:J.focused(),bindings:lY({"sidebar.view":(X,Q)=>{J.onViewSwitch?.((Q??0)%2===0?-1:1)}})})),D1(()=>({enabled:J.focused()&&G(),bindings:lY({"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 MM=k(()=>{$Z();yJ()});function s9(J,z){return rZ(J,z)}function t9(J,z){return` ${s9(J,Math.max(0,z))}`}var FM=()=>{};function cx(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 dx(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 RM(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 nx(){return F("tasks.subtitle.noTracking")}function ix(){return F("tasks.subtitle.materializing")}function lx(J){if(J.kind==="main")return!1;return J.vendor!==void 0&&!QJ(J.vendor)}function e9(J){let{task:z}=J,Y=z.kind==="main",G=Y?J.mainBranch??"":z.branch,Z=mx[z.status],X=J.activity?.state,Q=X!==void 0,f=$x(X),H=dx(X),B=lx(z)&&!Q,V=J.job!==void 0,j=V||!B&&(X==="running"||J.live||!Q&&!Y&&z.status==="in_progress"),K=oZ[J.spinnerFrame]??oZ[0],L=V?"primary":B?"textMuted":H?.tone??(j?"primary":f?.tone??Z.tone),A=B?nx():cx(z.status),O=V?J.truncateBranch(ix(),J.subtitleBudget):H?J.truncateBranch(H.text,J.subtitleBudget):G.length>0?J.truncateBranch(G,J.subtitleBudget):J.truncateBranch(A,J.subtitleBudget),g=B?OM:f?.glyph??Z.glyph,x=B?OM:f?.glyph??"\u2605";return{isMain:Y,titleText:Y?Nz(z.repo):z.title,subtitleText:O,loading:j,stateGlyph:j?K:g,projectGlyph:j?K:x,tone:L}}function JW(J,z){if(!J.loading)return J;let Y=oZ[z()%oZ.length]??"\u280B";if(Y===J.stateGlyph&&Y===J.projectGlyph)return J;return{...J,stateGlyph:Y,projectGlyph:Y}}function $x(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 mx,oZ,AM=100,OM="\xB7";var gM=k(()=>{ZJ();i1();CH();mx={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"}};oZ=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function zW(J){return CM.read(J)}function YW(J){CM.poll(J)}var ax=4000,_x=60000,px=1500,rx,CM;var NM=k(()=>{PY();KQ();SZ();KQ();rx={added:0,deleted:0},CM=IH({initial:rx,equals:vz,timeoutMs:ax,slowRetryMs:_x,minIntervalMs:px,run:async(J,z)=>{let Y=await zY("git",["status","--porcelain=v1"],{cwd:J,env:cJ(),signal:z});if(Y.status!==0)throw Error("git status failed");return bZ(Y.stdout)}})});import{TextAttributes as E1}from"@opentui/core";function ox(J){switch(J){case"active":return F("tasks.view.workspace");case"archived":return F("tasks.view.archives")}}function bM(J,z=tx){return rZ(J,z)}function ex(J){let z=0;for(let Y of J)z+=(Y.codePointAt(0)??0)>=4352?2:1;return z}function SM(J){let{theme:z}=d0(),Y=()=>J.focused?J.focused():!0,[G,Z]=a("active"),[X,Q]=a(!1),[f,H]=a(""),[B,V]=a(null),j=()=>J.projectFilter?.()??B(),K=($)=>{if(J.onProjectFilterChange)J.onProjectFilterChange($);else V($)};function L(){H(""),Q(!0),J.onSearchActiveChange?.(!0)}function A($){Q(!1),H(""),J.onSearchActiveChange?.(!1)}r0(()=>{if(!X())return;let $=fJ();if(!$)return;let W0=(T0)=>{if(T0.defaultPrevented)return;if(!Y())return;if(T0.ctrl||T0.meta||T0.option)return;if(T0.name==="backspace"){H((_0)=>_0.slice(0,-1));return}let s0=T0.sequence;if(!s0||s0.length!==1)return;let a0=s0.charCodeAt(0);if(a0<32||a0===127)return;H((_0)=>_0+s0)};$.keyInput.on("keypress",W0),k1(()=>$.keyInput.off("keypress",W0))});let[O,g]=a(0),x=setInterval(()=>g(($)=>$+1),sx);k1(()=>clearInterval(x));let[_,S]=a(0),N=setInterval(()=>S(($)=>($+1)%oZ.length),AM);k1(()=>clearInterval(N));let M=()=>J.sortMode?.()??"default",I=K0(()=>S3(J.tasks(),G())),r=K0(()=>{let $=j();if(!$)return null;let W0=Gz($);return I().find((T0)=>Gz(T0.repo)===W0)??null}),i=K0(()=>r()?.repo??null),e=K0(()=>r()?.label??"all"),J0=K0(()=>{let $=r();return $?$.count:I().reduce((W0,T0)=>W0+T0.count,0)}),T=K0(()=>{let $=J0();return`${$} ${$===1?F("tasks.project.taskSingular"):F("tasks.project.taskPlural")}`}),q0=K0(($)=>x3($,P9(J.tasks(),G(),X()?f():"",M(),i())),[]),p=K0(()=>h9(q0())),B0=K0(()=>y3(q0())),L0=K0(()=>B0().projectRows),V0=K0(()=>B0().taskRows),t=K0(()=>{let $=new Map;for(let W0 of q0())$.set(W0.flatIndex,W0);return $}),h=K0(()=>h9(P9(J.tasks(),G(),"",M(),i())).length),C=K0(()=>V0().length>0);r0(()=>{let $=j(),W0=I();if($!==null&&W0.length>0&&(W0.length<=1||r()===null))K(null)});function o(){let $=I();if($.length<=1){K(null);return}let W0=i(),T0=W0?Gz(W0):null,s0=T0===null?-1:$.findIndex((_0)=>Gz(_0.repo)===T0),a0=$[s0+1];K(a0?.repo??null)}let E=()=>J.width?J.width():kM,c=K0(()=>Math.max(6,E()-9)),s=K0(()=>Math.max(6,E()-16)),X0=mz(),F0=K0(()=>{let $=Math.max(2,Math.min(10,Math.floor(X0().height*0.25))),W0=Math.max(2,L0().length*2);return Math.min($,W0)}),[P0,A0]=a(null),[N0,u]=a(-1),g0,Q0,R0,y0=new Map;r0(()=>{let $=J.width?J.width():kM,W0=R0;if(!W0)return;W0.width=$,W0.flexShrink=1,W0.minHeight=0}),r0(SJ([N0,q0],([$])=>{let W0=t().get($);if(!W0)return;let T0=W0.task.kind==="main"?g0:Q0;if(!T0)return;if(T0.viewport.height<=0)return;let s0=y0.get($);if(!s0)return;T0.scrollChildIntoView(s0.id)})),r0(SJ(()=>[J.selectedId(),p()],([$,W0])=>{let T0=_1(N0),s0=T3($,W0,T0);if(s0!==T0)u(s0)})),r0(SJ(G,()=>{let $=p();u($.length>0?0:-1)},{defer:!0})),r0(SJ(i,($)=>u(I3(q0(),$)),{defer:!0})),r0(SJ([X,f],()=>{if(!X())return;let $=p();u($.length>0?0:-1)}));function H1($){let W0=G(),T0=UQ.findIndex((_0)=>_0.view===W0);if(T0<0)return;let s0=(T0+$+UQ.length)%UQ.length,a0=UQ[s0];if(a0)Z(a0.view)}LM({focused:Y,cursorIndex:N0,setCursorIndex:u,flatTaskIds:p,onSelect:($)=>{J.onSelect($),J.onActivate?.($)},onDeleteRequest:($)=>J.onDeleteRequest?.($),onArchiveRequest:($)=>J.onArchiveRequest?.($),onLocalMergeRequest:($)=>J.onLocalMergeRequest?.($),moveMode:J.moveMode,onMoveRequest:($,W0)=>J.onMoveRequest?.($,W0),onMoveModeExit:()=>J.onMoveModeExit?.(),onRenameRequest:($)=>J.onRenameRequest?.($),onPinRequest:($)=>J.onPinRequest?.($),onViewSwitch:($)=>H1($),onSortModeToggle:()=>J.onSortModeToggle?.(),onProjectFilterToggle:()=>o(),searchMode:X,onSearchEnter:()=>L(),onSearchExit:($)=>A($)});let G1=($)=>(()=>{var W0=W("box"),T0=W("box"),s0=W("text"),a0=W("text");return D(W0,T0),q(W0,"flexDirection","column"),q(W0,"flexShrink",0),U(W0,b(Z0,{get when(){return $.topPad},get children(){var _0=W("box"),t0=W("text");return D(_0,t0),q(_0,"flexShrink",0),D(t0,E0(" ")),q(t0,"wrapMode","none"),_0}}),T0),D(T0,s0),D(T0,a0),q(T0,"flexDirection","row"),q(T0,"flexShrink",0),q(T0,"gap",1),q(T0,"paddingLeft",1),q(T0,"paddingRight",1),q(s0,"wrapMode","none"),U(s0,()=>$.label),q(a0,"wrapMode","none"),U(a0,()=>"\u2500".repeat(Math.max(2,E()-10-$.label.length-($.suffix?.length??0)))),U(T0,b(Z0,{get when(){return $.suffix},get children(){var _0=W("text");return q(_0,"wrapMode","none"),U(_0,()=>$.suffix),y((t0)=>{var N1=z.info,R1=E1.BOLD;return N1!==t0.e&&(t0.e=q(_0,"fg",N1,t0.e)),R1!==t0.t&&(t0.t=q(_0,"attributes",R1,t0.t)),t0},{e:void 0,t:void 0}),_0}}),null),y((_0)=>{var t0=z.textMuted,N1=E1.BOLD,R1=z.border;return t0!==_0.e&&(_0.e=q(s0,"fg",t0,_0.e)),N1!==_0.t&&(_0.t=q(s0,"attributes",N1,_0.t)),R1!==_0.a&&(_0.a=q(a0,"fg",R1,_0.a)),_0},{e:void 0,t:void 0,a:void 0}),W0})(),w0=($)=>{switch($){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=($)=>{let W0=$.row.task,T0=$.row.flatIndex,s0=()=>T0===N0(),a0=()=>W0.id===J.selectedId(),_0=K0(()=>{let R=J.chatRunState?.();if(!R)return!1;let h0=`${W0.id}:`;for(let[U0,u0]of R)if(u0==="running"&&U0.startsWith(h0))return!0;return!1}),t0=K0(()=>{let R=Ef(J.worktreeChanges?.(),W0.worktreePath);if(R)return R;if(O(),!W0.archived)YW(W0.worktreePath);return zW(W0.worktreePath)},void 0,{equals:vz}),N1=K0(()=>{return O(),UM(W0.repo),KM(W0.repo)}),R1=K0(()=>e9({task:W0,activity:J.engineState?.().get(W0.id),job:J.taskJobs?.().get(W0.id),live:_0(),spinnerFrame:0,subtitleBudget:s(),truncateBranch:bM,mainBranch:N1()})),z0=K0(()=>JW(R1(),_)),G0=()=>!z0().loading?z.primary:w0(z0().tone),H0=()=>s0()?z.focusAccent:a0()?z.primary:void 0,k0=()=>s0()||a0()?"\u258C":" ";return(()=>{var R=W("box"),h0=W("box"),U0=W("box"),u0=W("text"),j0=W("box"),D0=W("text"),C0=W("text"),J1=W("box"),z1=W("text"),n0=W("box"),x1=W("text");return D(R,h0),q(R,"flexDirection","column"),q(R,"gap",0),q(R,"paddingBottom",0),D(h0,U0),D(h0,J1),cz((b0)=>{y0.set(T0,b0),k1(()=>{if(y0.get(T0)===b0)y0.delete(T0)})},h0),q(h0,"flexDirection","column"),q(h0,"gap",0),q(h0,"onMouseUp",()=>{if(u(T0),J.onSelect(W0.id),J.activateOnClick)J.onActivate?.(W0.id)}),q(h0,"onMouseOver",(b0)=>A0({task:W0,x:b0.x,y:b0.y})),q(h0,"onMouseOut",()=>A0((b0)=>b0?.task.id===W0.id?null:b0)),D(U0,u0),D(U0,j0),q(U0,"flexDirection","row"),q(U0,"gap",0),q(u0,"wrapMode","none"),U(u0,k0),D(j0,D0),D(j0,C0),q(j0,"flexDirection","row"),q(j0,"flexGrow",1),q(j0,"paddingRight",1),q(j0,"gap",0),q(D0,"wrapMode","none"),U(D0,()=>z0().projectGlyph),q(C0,"wrapMode","none"),q(C0,"flexGrow",1),U(C0,()=>t9(z0().titleText,c())),D(J1,z1),D(J1,n0),q(J1,"flexDirection","row"),q(J1,"gap",0),q(z1,"wrapMode","none"),U(z1,k0),D(n0,x1),q(n0,"flexDirection","row"),q(n0,"flexGrow",1),q(n0,"paddingLeft",2),q(n0,"paddingRight",1),q(n0,"gap",1),q(x1,"wrapMode","none"),q(x1,"flexGrow",1),U(x1,()=>z0().subtitleText),U(n0,b(Z0,{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),y((v)=>q(b0,"fg",z.success,v)),b0}}),null),U(n0,b(Z0,{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),y((v)=>q(b0,"fg",z.error,v)),b0}}),null),y((b0)=>{var m1=s0()?z.backgroundElement:void 0,v=H0(),O0=G0(),W1=E1.BOLD,A1=z.text,B1=E1.BOLD,d=H0(),Y0=z.textMuted,I0=E1.DIM;return m1!==b0.e&&(b0.e=q(h0,"backgroundColor",m1,b0.e)),v!==b0.t&&(b0.t=q(u0,"fg",v,b0.t)),O0!==b0.a&&(b0.a=q(D0,"fg",O0,b0.a)),W1!==b0.o&&(b0.o=q(D0,"attributes",W1,b0.o)),A1!==b0.i&&(b0.i=q(C0,"fg",A1,b0.i)),B1!==b0.n&&(b0.n=q(C0,"attributes",B1,b0.n)),d!==b0.s&&(b0.s=q(z1,"fg",d,b0.s)),Y0!==b0.h&&(b0.h=q(x1,"fg",Y0,b0.h)),I0!==b0.r&&(b0.r=q(x1,"attributes",I0,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 $=W("box"),W0=W("box"),T0=W("box"),s0=W("text"),a0=W("box"),_0=W("box"),t0=W("text"),N1=W("scrollbox"),R1=W("box");return D($,W0),D($,a0),D($,N1),cz((z0)=>{R0=z0},$),q($,"flexGrow",1),q($,"minHeight",0),q($,"flexDirection","column"),q($,"paddingTop",1),q($,"paddingBottom",1),q($,"paddingLeft",0),q($,"paddingRight",0),D(W0,T0),q(W0,"flexDirection","row"),q(W0,"justifyContent","space-between"),q(W0,"gap",1),q(W0,"paddingBottom",1),q(W0,"paddingLeft",1),q(W0,"paddingRight",1),D(T0,s0),q(T0,"flexDirection","row"),q(T0,"gap",1),D(s0,E0("KOBE")),q(s0,"wrapMode","none"),U(T0,b(Z0,{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),y((H0)=>{var k0=z0().emphasize?z.warning:z.textMuted,R=z0().emphasize?E1.BOLD:E1.DIM;return k0!==H0.e&&(H0.e=q(G0,"fg",k0,H0.e)),R!==H0.t&&(H0.t=q(G0,"attributes",R,H0.t)),H0},{e:void 0,t:void 0}),G0})()}),null),U(W0,b(Z0,{get when(){return J.onAddTask},get children(){var z0=W("text");return D(z0,E0("[+]")),q(z0,"wrapMode","none"),q(z0,"onMouseUp",()=>J.onAddTask?.()),y((G0)=>{var H0=z.primary,k0=E1.BOLD;return H0!==G0.e&&(G0.e=q(z0,"fg",H0,G0.e)),k0!==G0.t&&(G0.t=q(z0,"attributes",k0,G0.t)),G0},{e:void 0,t:void 0}),z0}}),null),U($,b(Z0,{get when(){return X()},get children(){var z0=W("box"),G0=W("text"),H0=W("text"),k0=W("text");return D(z0,G0),D(z0,H0),D(z0,k0),q(z0,"flexDirection","row"),q(z0,"gap",0),q(z0,"paddingBottom",1),q(z0,"paddingLeft",1),D(G0,E0("/")),q(G0,"wrapMode","none"),q(H0,"wrapMode","none"),U(H0,f),D(k0,E0("\u2588")),q(k0,"wrapMode","none"),U(z0,b(Z0,{get when(){return f().length===0},get children(){var R=W("text"),h0=E0(" ");return D(R,h0),q(R,"wrapMode","none"),U(R,()=>F("tasks.search.placeholder"),null),y((U0)=>q(R,"fg",z.textMuted,U0)),R}}),null),U(z0,b(Z0,{get when(){return f().length>0},get children(){var R=W("text"),h0=E0(" "),U0=E0("/");return D(R,h0),D(R,U0),q(R,"wrapMode","none"),U(R,()=>p().length,U0),U(R,h,null),y((u0)=>q(R,"fg",z.textMuted,u0)),R}}),null),y((R)=>{var{info:h0,text:U0,info:u0}=z,j0=E1.BLINK;return h0!==R.e&&(R.e=q(G0,"fg",h0,R.e)),U0!==R.t&&(R.t=q(H0,"fg",U0,R.t)),u0!==R.a&&(R.a=q(k0,"fg",u0,R.a)),j0!==R.o&&(R.o=q(k0,"attributes",j0,R.o)),R},{e:void 0,t:void 0,a:void 0,o:void 0}),z0}}),a0),D(a0,_0),q(a0,"flexDirection","row"),q(a0,"justifyContent","space-between"),q(a0,"gap",1),q(a0,"paddingBottom",1),q(a0,"paddingLeft",1),q(a0,"paddingRight",1),D(_0,t0),q(_0,"flexDirection","row"),q(_0,"gap",2),U(_0,b(X1,{each:UQ,children:(z0)=>{let G0=()=>G()===z0.view;return(()=>{var H0=W("text");return q(H0,"wrapMode","none"),q(H0,"onMouseUp",()=>Z(z0.view)),U(H0,()=>ox(z0.view)),y((k0)=>{var R=G0()?z.primary:z.textMuted,h0=G0()?E1.BOLD:void 0;return R!==k0.e&&(k0.e=q(H0,"fg",R,k0.e)),h0!==k0.t&&(k0.t=q(H0,"attributes",h0,k0.t)),k0},{e:void 0,t:void 0}),H0})()}}),t0),D(t0,E0("[/]")),q(t0,"wrapMode","none"),U(a0,b(Z0,{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")),y((G0)=>{var H0=z.textMuted,k0=E1.DIM;return H0!==G0.e&&(G0.e=q(z0,"fg",H0,G0.e)),k0!==G0.t&&(G0.t=q(z0,"attributes",k0,G0.t)),G0},{e:void 0,t:void 0}),z0}}),null),U($,b(Z0,{get when(){return L0().length>0},get children(){var z0=W("box"),G0=W("box"),H0=W("text"),k0=W("text"),R=W("scrollbox"),h0=W("box");return D(z0,G0),D(z0,R),q(z0,"flexDirection","column"),q(z0,"flexShrink",0),D(G0,H0),D(G0,k0),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(H0,"wrapMode","none"),U(H0,()=>F("tasks.header.projects")),U(G0,b(Z0,{get when(){return I().length>1},get children(){var U0=W("text");return q(U0,"wrapMode","none"),U(U0,e),y((u0)=>{var j0=i()?z.primary:z.textMuted,D0=i()?E1.BOLD:void 0;return j0!==u0.e&&(u0.e=q(U0,"fg",j0,u0.e)),D0!==u0.t&&(u0.t=q(U0,"attributes",D0,u0.t)),u0},{e:void 0,t:void 0}),U0}}),k0),q(k0,"wrapMode","none"),U(k0,()=>"\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(Z0,{get when(){return I().length>1},get children(){var U0=W("text");return q(U0,"wrapMode","none"),U(U0,T),y((u0)=>{var j0=z.textMuted,D0=E1.DIM;return j0!==u0.e&&(u0.e=q(U0,"fg",j0,u0.e)),D0!==u0.t&&(u0.t=q(U0,"attributes",D0,u0.t)),u0},{e:void 0,t:void 0}),U0}}),null),D(R,h0),cz((U0)=>{g0=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(h0,"flexShrink",0),q(h0,"gap",0),q(h0,"paddingRight",1),U(h0,b(X1,{get each(){return L0()},children:(U0)=>b(o0,{row:U0})})),y((U0)=>{var u0=z.textMuted,j0=E1.BOLD,D0=z.border,C0=F0();return u0!==U0.e&&(U0.e=q(H0,"fg",u0,U0.e)),j0!==U0.t&&(U0.t=q(H0,"attributes",j0,U0.t)),D0!==U0.a&&(U0.a=q(k0,"fg",D0,U0.a)),C0!==U0.o&&(U0.o=q(R,"maxHeight",C0,U0.o)),U0},{e:void 0,t:void 0,a:void 0,o:void 0}),z0}}),N1),U($,b(G1,{get label(){return F("tasks.header.tasks")},get suffix(){return x0(()=>M()==="default")()?void 0:M()},get topPad(){return L0().length>0}}),N1),D(N1,R1),cz((z0)=>{Q0=z0},N1),q(N1,"flexGrow",1),q(N1,"minHeight",0),q(N1,"stickyScroll",!1),q(N1,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),q(R1,"flexShrink",0),q(R1,"gap",0),q(R1,"paddingRight",1),U(R1,b(X1,{get each(){return V0()},children:(z0)=>{let{task:G0,flatIndex:H0}=z0,k0=()=>H0===N0(),R=()=>G0.id===J.selectedId(),h0=K0(()=>{let z1=J.chatRunState?.();if(!z1)return!1;let n0=`${G0.id}:`;for(let[x1,b0]of z1)if(b0==="running"&&x1.startsWith(n0))return!0;return!1}),U0=K0(()=>{let z1=Ef(J.worktreeChanges?.(),G0.worktreePath);if(z1)return z1;if(O(),!G0.archived)YW(G0.worktreePath);return zW(G0.worktreePath)},void 0,{equals:vz}),u0=K0(()=>e9({task:G0,activity:J.engineState?.().get(G0.id),job:J.taskJobs?.().get(G0.id),live:h0(),spinnerFrame:0,subtitleBudget:s(),truncateBranch:bM,mainBranch:""})),j0=K0(()=>JW(u0(),_)),D0=()=>w0(j0().tone),C0=()=>k0()?z.focusAccent:R()?z.primary:void 0,J1=()=>k0()||R()?"\u258C":" ";return(()=>{var z1=W("box"),n0=W("box"),x1=W("box"),b0=W("text"),m1=W("box"),v=W("text"),O0=W("text"),W1=W("box"),A1=W("text"),B1=W("box"),d=W("text");return D(z1,n0),q(z1,"flexDirection","column"),q(z1,"gap",0),q(z1,"paddingBottom",1),D(n0,x1),D(n0,W1),cz((Y0)=>{y0.set(H0,Y0),k1(()=>{if(y0.get(H0)===Y0)y0.delete(H0)})},n0),q(n0,"flexDirection","column"),q(n0,"gap",0),q(n0,"onMouseUp",()=>{if(u(H0),J.onSelect(G0.id),J.activateOnClick)J.onActivate?.(G0.id)}),q(n0,"onMouseOver",(Y0)=>A0({task:G0,x:Y0.x,y:Y0.y})),q(n0,"onMouseOut",()=>A0((Y0)=>Y0?.task.id===G0.id?null:Y0)),D(x1,b0),D(x1,m1),q(x1,"flexDirection","row"),q(x1,"gap",0),q(b0,"wrapMode","none"),U(b0,J1),D(m1,v),D(m1,O0),q(m1,"flexDirection","row"),q(m1,"flexGrow",1),q(m1,"paddingRight",1),q(m1,"gap",0),q(v,"wrapMode","none"),U(v,()=>j0().stateGlyph),q(O0,"wrapMode","none"),q(O0,"flexGrow",1),U(O0,()=>t9(j0().titleText,c())),U(m1,b(Z0,{get when(){return x0(()=>!!J.moveMode?.())()&&k0()},get children(){var Y0=W("text");return q(Y0,"wrapMode","none"),U(Y0,()=>F("tasks.moveChip")),y((I0)=>q(Y0,"fg",z.warning,I0)),Y0}}),null),D(W1,A1),D(W1,B1),q(W1,"flexDirection","row"),q(W1,"gap",0),q(A1,"wrapMode","none"),U(A1,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,()=>j0().subtitleText),U(B1,b(Z0,{get when(){return G0.pinned===!0},get children(){var Y0=W("text");return D(Y0,E0("\u25B4")),q(Y0,"wrapMode","none"),y((I0)=>q(Y0,"fg",z.warning,I0)),Y0}}),null),U(B1,b(Z0,{get when(){return RM(G0)},children:(Y0)=>(()=>{var I0=W("text");return q(I0,"wrapMode","none"),U(I0,()=>Y0().glyph),y((S0)=>q(I0,"fg",w0(Y0().tone),S0)),I0})()}),null),U(B1,b(Z0,{get when(){return U0().added>0},get children(){var Y0=W("text"),I0=E0("+");return D(Y0,I0),q(Y0,"wrapMode","none"),U(Y0,()=>U0().added,null),y((S0)=>q(Y0,"fg",z.success,S0)),Y0}}),null),U(B1,b(Z0,{get when(){return U0().deleted>0},get children(){var Y0=W("text"),I0=E0("\u2212");return D(Y0,I0),q(Y0,"wrapMode","none"),U(Y0,()=>U0().deleted,null),y((S0)=>q(Y0,"fg",z.error,S0)),Y0}}),null),y((Y0)=>{var I0=k0()?z.backgroundElement:void 0,S0=C0(),BJ=D0(),LJ=E1.BOLD,XJ=z.text,iJ=R()||k0()?E1.BOLD:void 0,iz=C0(),AJ=z.textMuted,lz=E1.DIM;return I0!==Y0.e&&(Y0.e=q(n0,"backgroundColor",I0,Y0.e)),S0!==Y0.t&&(Y0.t=q(b0,"fg",S0,Y0.t)),BJ!==Y0.a&&(Y0.a=q(v,"fg",BJ,Y0.a)),LJ!==Y0.o&&(Y0.o=q(v,"attributes",LJ,Y0.o)),XJ!==Y0.i&&(Y0.i=q(O0,"fg",XJ,Y0.i)),iJ!==Y0.n&&(Y0.n=q(O0,"attributes",iJ,Y0.n)),iz!==Y0.s&&(Y0.s=q(A1,"fg",iz,Y0.s)),AJ!==Y0.h&&(Y0.h=q(d,"fg",AJ,Y0.h)),lz!==Y0.r&&(Y0.r=q(d,"attributes",lz,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}),z1})()}}),null),U(R1,b(Z0,{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 H0=x0(()=>!!(X()&&f().trim().length>0));return()=>H0()?F("tasks.empty.noMatchSearch"):x0(()=>!!i())()?x0(()=>G()==="active")()?F("tasks.empty.noActiveProject"):F("tasks.empty.noArchivedProject"):x0(()=>G()==="active")()?F("tasks.empty.noActive"):F("tasks.empty.noArchived")})()),y((H0)=>q(G0,"fg",z.textMuted,H0)),z0}}),null),U(R1,b(Z0,{get when(){return x0(()=>!!(i()&&p().length>0&&!C()))()&&!(X()&&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 H0=x0(()=>G()==="active");return()=>H0()?F("tasks.empty.noActiveProject"):F("tasks.empty.noArchivedProject")})()),y((H0)=>{var k0=z.textMuted,R=E1.DIM;return k0!==H0.e&&(H0.e=q(G0,"fg",k0,H0.e)),R!==H0.t&&(H0.t=q(G0,"attributes",R,H0.t)),H0},{e:void 0,t:void 0}),z0}}),null),U(R1,b(Z0,{get when(){return x0(()=>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")),y((H0)=>{var k0=z.textMuted,R=E1.DIM;return k0!==H0.e&&(H0.e=q(G0,"fg",k0,H0.e)),R!==H0.t&&(H0.t=q(G0,"attributes",R,H0.t)),H0},{e:void 0,t:void 0}),z0}}),null),U($,b(Z0,{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?.()),y((H0)=>{var k0=z.accent,R=E1.BOLD;return k0!==H0.e&&(H0.e=q(G0,"fg",k0,H0.e)),R!==H0.t&&(H0.t=q(G0,"attributes",R,H0.t)),H0},{e:void 0,t:void 0}),z0}}),null),U($,b(Z0,{get when(){return P0()},children:(z0)=>{let G0=K0(()=>{let j0=z0().task,D0=[];if(D0.push({text:j0.kind==="main"?Nz(j0.repo):j0.title,bold:!0}),j0.branch.length>0)D0.push({text:`\u2387 ${j0.branch}`});if(j0.worktreePath.length>0)D0.push({text:j0.worktreePath,dim:!0});return D0}),H0=72,k0=K0(()=>Math.min(68,Math.max(...G0().map((j0)=>ex(j0.text))))),R=K0(()=>k0()+4),h0=K0(()=>G0().length+2),U0=K0(()=>Math.max(0,Math.min(z0().x+2,X0().width-R()-1))),u0=K0(()=>Math.max(0,Math.min(z0().y+1,X0().height-h0()-1)));return(()=>{var j0=W("box");return q(j0,"position","absolute"),q(j0,"zIndex",2600),q(j0,"flexDirection","column"),q(j0,"border",!0),q(j0,"paddingLeft",1),q(j0,"paddingRight",1),U(j0,b(X1,{get each(){return G0()},children:(D0)=>(()=>{var C0=W("text");return q(C0,"wrapMode","none"),U(C0,(()=>{var J1=x0(()=>!!D0.dim);return()=>J1()?Ju(D0.text,k0()):s9(D0.text,k0())})()),y((J1)=>{var z1=D0.dim?z.textMuted:z.text,n0=D0.bold?E1.BOLD:D0.dim?E1.DIM:void 0;return z1!==J1.e&&(J1.e=q(C0,"fg",z1,J1.e)),n0!==J1.t&&(J1.t=q(C0,"attributes",n0,J1.t)),J1},{e:void 0,t:void 0}),C0})()})),y((D0)=>{var C0=U0(),J1=u0(),z1=R(),n0=z.focusAccent,x1=z.backgroundElement;return C0!==D0.e&&(D0.e=q(j0,"left",C0,D0.e)),J1!==D0.t&&(D0.t=q(j0,"top",J1,D0.t)),z1!==D0.a&&(D0.a=q(j0,"width",z1,D0.a)),n0!==D0.o&&(D0.o=q(j0,"borderColor",n0,D0.o)),x1!==D0.i&&(D0.i=q(j0,"backgroundColor",x1,D0.i)),D0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),j0})()}}),null),y((z0)=>{var G0=Y()?z.focusAccent:z.textMuted,H0=E1.BOLD,k0=z.textMuted,R=E1.DIM;return G0!==z0.e&&(z0.e=q(s0,"fg",G0,z0.e)),H0!==z0.t&&(z0.t=q(s0,"attributes",H0,z0.t)),k0!==z0.a&&(z0.a=q(t0,"fg",k0,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}),$})()}var kM=32,UQ,sx=2000,tx=16,Ju;var IM=k(()=>{P();P();P();P();P();P();P();P();P();ZJ();P();j1();v1();v1();DM();CH();MM();FM();gM();SZ();NM();UQ=[{view:"active"},{view:"archived"}];Ju=SH});var EM={};f1(EM,{startTasksPane:()=>Xu,legendRowCap:()=>uM,legendCap:()=>xM});import{existsSync as TM}from"fs";import{stat as zu}from"fs/promises";import{TextAttributes as TH}from"@opentui/core";function yM(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 Gu(J){let{theme:z}=d0(),Y=c1(),G=aZ(),Z=LH(),[X,Q]=a(J.tasks().some((u)=>u.id===J.initialTaskId)?J.initialTaskId:J.tasks()[0]?.id??null);function f(u){Z.notify({kind:"error",taskId:X()??"",tabId:"",title:u})}function H(u){Z.notify({kind:"done",taskId:X()??"",tabId:"",title:u})}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=(u)=>{O(u),G.set("tasksPane.projectFilter",u)},[x,_]=a(null),[S,N]=a(!1);{let u=process.env.TMUX_PANE;if(u){let g0=()=>{$0(["show-options","-wqv","-t",u,gY]).then(({code:R0,stdout:y0})=>{N(R0===0&&y0.trim().length>0)})};g0();let Q0=setInterval(g0,1000);k1(()=>clearInterval(Q0))}}let M=mz();r0(()=>{if(J.initialTaskId)return;let u=J.orch?.activeTaskSignal()();if(!u)return;Q(u)}),r0(SJ(()=>J.orch?.uiPrefsSignal()(),(u)=>{if(u&&u.sortMode!==_1(j))K(u.sortMode);if(u&&u.projectFilter!==_1(A))O(u.projectFilter)})),r0(()=>{let u=J.orch?.updateSignal()();if(u)_(u)});let I={orch:J.orch,tasks:()=>J.tasks(),confirm:async(u)=>await KY.show(Y,u.title,u.body,u.cancelLabel,u.confirmLabel)===!0,promptText:(u,g0)=>VY.show(Y,u,g0),logger:console,logPrefix:"[kobe tasks]",notifyError:f,notifyInfo:H,reload:()=>J.reload(),switchBeforeKill:!0,updateActiveTask:!0,onTaskDeleted:(u,g0)=>{if(X()!==u)return;let Q0=J.tasks();Q(g0?.id??(Q0.find((R0)=>!R0.archived)??Q0[0])?.id??null)},promptNewTask:(u,g0,Q0)=>BH.show(Y,u,g0,Q0),cursorRepo:()=>{let u=J.tasks();return(u.find((g0)=>g0.id===X())??u[0])?.repo},lastVendor:()=>xJ(g1("lastSelectedVendor"),uJ()),rememberVendor:(u)=>r1("lastSelectedVendor",u),openCreateSurface:async(u)=>{if(SG(G.get(QY,bG))!=="chattab")return!1;let Q0=await TJ();if(!Q0)return!1;return await Qf(Q0,u),!0},selectTask:(u)=>Q(u),enterTask:(u)=>X0(u)};async function r(){await qM(I)}async function i(){if(SG(G.get(QY,bG))==="chattab"){let Q0=await TJ();if(Q0){await Zf(Q0);return}}if(!(await vG.show(Y,G,J.orch??void 0)).visualPrefsChanged)return;if(!G.flush())return;try{let Q0=await TJ();if(Q0)await MZ(Q0)}catch(Q0){console.error("[kobe tasks] failed to refresh workspace panes:",Q0)}}async function e(){let u=await TJ();if(u){await Xf(u);return}pZ.show(Y)}async function J0(){if(!x()?.hasUpdate){H(F("tasks.toast.alreadyLatest",{version:p0}));return}let g0=await TJ();if(!g0)return;await qf(g0)}async function T(u){await YM(I,u)}async function q0(u){await GM(I,u)}async function p(u){await ZM(I,u)}async function B0(u){await XM(I,u)}async function L0(u){await QM(I,u)}async function V0(u){let Q0=J.tasks().find((y0)=>y0.id===u)?.worktreePath;if(!Q0||!TM(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(u)}catch(y0){console.error("[kobe tasks] task.ensureWorktree failed:",y0),f(yM(y0));return}await J.reload()}if(!Q0||!TM(Q0))return;let R0=HM();if(!R0){console.error("[kobe tasks] no editor/opener found; set KOBE_OPEN_EDITOR"),f(F("tasks.toast.noEditor"));return}if(!BM(Q0,R0))console.error(`[kobe tasks] failed to open worktree with ${R0.label}`),f(F("tasks.toast.openWorktreeFailed",{label:R0.label}))}async function t(){if(!process.env.TMUX_PANE)return;let u=await TJ();if(!u)return;let g0=await qZ(u);if(!g0)return;await l0(["select-pane","-t",g0])}async function h(u,g0){let Q0=J.tasks().find((R0)=>R0.id===u);if(!Q0||Q0.kind==="main"||!J.orch)return;try{await J.orch.moveTask(u,g0)}catch(R0){console.error("[kobe tasks] task.move failed:",R0),f(F("tasks.toast.moveTaskFailed",{message:R0 instanceof Error?R0.message:String(R0)}));return}Q(u),await J.reload()}let[C,o]=a(G.get("tasksPane.keysCollapsed",!1)===!0),E=(u)=>{o(u),G.set("tasksPane.keysCollapsed",u)};r0(SJ(()=>J.orch?.uiPrefsSignal()(),(u)=>{if(u&&u.keysCollapsed!==_1(C))o(u.keysCollapsed)}));let[c,s]=a(!1);D1(()=>({enabled:Y.stack.length===0&&!c(),bindings:lY({"help.open":()=>void e(),"task.new":()=>void r(),"settings.open.sidebar":()=>void i(),"tasks.update":()=>void J0(),"tasks.openWorktree":()=>{let u=X();if(u)V0(u)},"tasks.renameBranch":()=>{let u=X();if(u)B0(u)},"tasks.cycleEngine":()=>{let u=X();if(u)L0(u)},"tasks.toggleKeys":()=>E(!C()),"tasks.focusEngine":()=>void t().catch((u)=>console.error("[kobe tasks] focus engine pane failed:",u))})}));async function X0(u){let g0=J.tasks().find((Q0)=>Q0.id===u);if(!g0)return;try{await E9(J.orch,g0,g0.repo,g0.vendor,{includeInitPrompt:!0,heal:!0,captureFrom:!0,reload:()=>J.reload()})}catch(Q0){if(Q0 instanceof PG)if(Q0.phase==="no-daemon")f(F("tasks.toast.noDaemonOpen"));else if(Q0.phase==="worktree")f(yM(Q0.cause??Q0));else f(F("tasks.toast.sessionStartFailed"));else console.error("[kobe tasks] switchTo failed:",Q0)}}let F0=K0(()=>{let u=x();if(u?.hasUpdate)return{label:`v${u.latest} \u2191`,emphasize:!0};return{label:`v${p0}`,emphasize:!1}}),P0=()=>J.orch?.daemonStaleSignal()()??!1,A0=()=>J.orch?.daemonVersionSignal()()??null,N0=K0(()=>J.tasks().find((u)=>u.id===X())?.kind==="main");return(()=>{var u=W("box"),g0=W("box");return D(u,g0),q(u,"flexDirection","column"),q(u,"flexGrow",1),U(u,b(e3,{stale:P0,daemonVersion:A0,clientVersion:p0,width:()=>M().width}),g0),q(g0,"flexGrow",1),q(g0,"flexShrink",1),U(g0,b(SM,{get tasks(){return J.tasks},selectedId:X,get onSelect(){return J.initialTaskId?()=>{}:Q},onActivate:(Q0)=>void X0(Q0),activateOnClick:!0,headerStatus:F0,onHeaderStatusClick:()=>void J0(),onAddTask:()=>void r(),zenActive:S,onZenClick:()=>{(async()=>{let Q0=await TJ();if(Q0)await AG(Q0,"zen-toggle")})()},width:()=>M().width,get engineState(){return x0(()=>!!J.orch)()?J.orch.engineStateSignal():void 0},get taskJobs(){return x0(()=>!!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 R0=J.tasks().find((y0)=>y0.id===Q0);if(!R0||R0.kind==="main")return;Q(Q0),V((y0)=>!y0)},moveMode:B,onMoveRequest:(Q0,R0)=>void h(Q0,R0),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(u,b(Zu,{moveMode:B,selectedIsMain:N0,collapsed:C,onToggleCollapsed:()=>E(!C())}),null),y((Q0)=>q(u,"backgroundColor",z.background,Q0)),u})()}function xM(J){let z=S9(J);if(!z)return null;let Y=z.hint?.keys??z.keys[0];return Y&&Y.length>0?Y:null}function uM(J){let z=J.map(xM).filter((Y)=>Y!==null);return z.length>0?z.join("/"):null}function Zu(J){let{theme:z}=d0(),[Y,G]=a("Prefix");e1(()=>{$0(["show-options","-g","prefix"]).then(({code:K,stdout:L})=>{if(K!==0)return;let A=kH(L);if(A)G(A)})});let Z=()=>{b9();let K=Tq(),L=K.binds,A=[],O=K.focus.filter((x)=>x!==null).map((x)=>x.chord);if(O.length===4&&O.every((x,_)=>x===SY[_]))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},X=()=>{b9();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=uM(A.ids);if(O===null)continue;L.push({k:O,label:A.label,dimWhenMain:A.dimWhenMain})}return L.push(...Z()),L},Q=()=>[{k:"j/k",label:F("tasks.hints.reorder")},{k:"enter/esc",label:F("tasks.hints.done")}],f=()=>J.moveMode?.()?Q():X(),H=18,B=()=>Math.min(H,Math.max(...f().map((K)=>K.label.length))),V=(K)=>rZ(K,B()),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=x0(()=>!!j());return()=>A()?F("tasks.hints.headerFolded"):F("tasks.hints.headerUnfolded")})()),U(K,b(Z0,{get when(){return!j()},get children(){return b(X1,{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(_,()=>_Z(A.k,Y()),N),D(M,I),q(M,"flexShrink",0),q(I,"wrapMode","none"),U(I,()=>V(A.label)),y((r)=>{var i=O()?z.textMuted:z.accent,e=O()?TH.DIM:TH.BOLD,J0=B(),T=z.textMuted,q0=O()?TH.DIM:void 0;return i!==r.e&&(r.e=q(_,"fg",i,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),y((A)=>{var O=z.textMuted,g=TH.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 Xu(J={}){await OJ({logContext:"tasks",providers:{notifications:!0},setup:()=>Qu(J)})}async function Qu(J){let z=new xZ({homeDir:bz()});await z.load();let[Y,G]=a(z.list()),Z=null;try{let B=await zz();if(B){let V=new KJ(B);await V.init(),Z=V}else tz("tasks-boot","no daemon running \u2014 polling tasks.json (a gui owns daemon lifecycle)")}catch(B){o1("tasks-boot",B),tz("tasks-boot","daemon subscribe failed \u2014 polling tasks.json")}let X=()=>Z&&Z.connectionStateSignal()()==="online"?Z.tasksSignal()():Y(),Q=async()=>{await z.load(),G(z.list())},f="",H=setInterval(()=>{if(Z&&Z.connectionStateSignal()()==="online")return;(async()=>{let B="missing";try{let V=await zu(z.filePath);B=`${V.mtimeMs}:${V.size}`}catch{}if(B===f)return;f=B,await Q()})().catch(()=>{})},Yu);return{root:()=>[b(Gu,{tasks:X,get initialTaskId(){return J.initialTaskId},orch:Z,reload:Q}),b(s3,{})],onDestroy:()=>{if(H)clearInterval(H);Z?.dispose()}}}var Yu=1500;var wM=k(()=>{P();P();P();P();P();P();P();P();P1();Bz();ZJ();P();zG();FJ();j1();nY();p1();iX();F1();yq();i1();MJ();m9();lZ();c9();p9();t3();JM();$Z();BQ();MH();v1();v9();aY();yJ();fM();AH();jM();IM();RG();zJ();nJ();d9()});var PM={};f1(PM,{startSettingsHost:()=>fu});function qu(J){let z=aZ(),Y=c1(),{theme:G}=d0(),Z=!1,X=!1;async function Q(){if(X)return;X=!0;try{if(z.flush()&&Z){let H=await TJ();if(H)await MZ(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(vG,{kv:z,get orchestrator(){return J.orchestrator??void 0},standalone:!0,onVisualPrefsChange:()=>{Z=!0},onClose:Q})),y((H)=>q(f,"backgroundColor",G.background,H)),f})()}async function fu(){await OJ({setup:async()=>{let J=null;try{let z=await zz();if(z){let Y=new KJ(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(qu,{orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var hM=k(()=>{P();P();P();P();P();P();FJ();nY();p9();BQ();v1();aY();yJ();zJ();nJ()});var vM={};f1(vM,{startHelpHost:()=>Bu});function Hu(){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 G=W("box");return q(G,"flexGrow",1),q(G,"paddingTop",1),U(G,b(pZ,{onClose:Y})),y((Z)=>q(G,"backgroundColor",z.background,Z)),G})()}async function Bu(){await OJ({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(Hu,{})})})}var mM=k(()=>{P();P();P();P();P();m9();v1();aY();yJ();nJ()});var cM={};f1(cM,{startUpdateHost:()=>Lu});import{spawn as ju,spawnSync as Wu}from"child_process";import{TextAttributes as sZ}from"@opentui/core";function Vu(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 ju(Y,G,{stdio:"ignore",detached:!0}).unref(),!0}catch{return!1}}function Ku(J){return J.replace(/\r\n/g,`
|
|
266
266
|
`).split(`
|
|
267
|
-
`).map((z)=>z.trim()).filter(Boolean)}function
|
|
267
|
+
`).map((z)=>z.trim()).filter(Boolean)}function Uu(){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 Du(){let{theme:J}=d0(),z=fJ(),[Y,G]=a(null),[Z,X]=a([]),[Q,f]=a(!0),[H,B]=a("update"),[V,j]=a(null),K=K0(()=>Y()?.latest??p0),L=K0(()=>Z()[0]?.url??cH(K())),A=K0(()=>[{id:"update",key:"U",label:F("update.actions.updateNow"),detail:$z},{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")}]);e1(()=>{O()});async function O(){let S=await tZ({force:!0});G(S);let N=S?.latest??p0,M=await mH({current:p0,latest:N});X(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(Vu(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
268
|
kobe ${p0} -> latest
|
|
269
269
|
`),process.stdout.write(`running: ${$z}
|
|
270
270
|
|
|
271
|
-
`);let S=
|
|
271
|
+
`);let S=Wu("sh",["-c",$z],{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
273
|
`);process.stdout.write(N===0?`
|
|
274
274
|
${F("update.updateComplete")}
|
|
275
275
|
`:`
|
|
276
276
|
${F("update.updateFailed",{code:String(N)})}
|
|
277
|
-
`),process.stdout.write(F("update.pressAnyKey")),await
|
|
278
|
-
`)}function
|
|
279
|
-
`).map((X)=>X.replace(/\r$/,"")),Z=new Set;for(let X of G)if(X.length>0)Z.add(X);return Array.from(Z).sort()}async function YW(J,z){let Y=await IH(["status","--porcelain","--untracked-files=all"],J,z),G=_M(Y),Z=new Map;try{let X=await IH(["diff","--no-color","--numstat","HEAD"],J,z);Z=new Map(lM(X).map((Q)=>[Q.path,{added:Q.added,deleted:Q.deleted}]))}catch{try{let X=await IH(["diff","--no-color","--numstat","--cached"],J,z);Z=new Map(lM(X).map((Q)=>[Q.path,{added:Q.added,deleted:Q.deleted}]))}catch{Z=new Map}}return G.map((X)=>{let Q=Z.get(X.path);if(Q)return{...X,added:Q.added,deleted:Q.deleted};return X})}function lM(J){return LU(J).map((z)=>({path:z.path,added:z.added,deleted:z.deleted}))}function $M(J){let z={name:"",path:"",isDir:!0,children:[]};for(let Y of J){if(!Y)continue;let G=Y.split("/").filter((X)=>X.length>0);if(G.length===0)continue;let Z=z;for(let X=0;X<G.length;X++){let Q=G[X],H=X!==G.length-1,B=Z.children.find((V)=>V.name===Q&&V.isDir===H);if(!B)B={name:Q,path:G.slice(0,X+1).join("/"),isDir:H,children:[]},Z.children.push(B);Z=B}}return aM(z),z}function aM(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)aM(z)}function _M(J){let z=[];for(let Y of yf(J)){let G;if(Y.x==="?"&&Y.y==="?")G="?";else{let X=Y.y!==" "?Y.y:Y.x;if(X==="M"||X==="A"||X==="D"||X==="R"||X==="C"||X==="U")G=X;else continue}let Z=Y.path;if(Z.length===0)continue;if(Z.endsWith("/"))continue;z.push({path:Z,status:G})}return z}var GW=k(()=>{Lj();Nf()});function ZW(J){D1(()=>({enabled:J.focused(),bindings:lY({"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(),Z=UQ.indexOf(G);if(Z<0)return;let X=(Y??0)%2===0?-1:1,Q=UQ[(Z+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 XW=k(()=>{$Z();yJ();UQ=["all","changes"]});import{spawn as pM}from"child_process";import{existsSync as Ru}from"fs";import{platform as gu}from"os";function rM(J){if(!J)return;let z=gu();if(z==="linux"){if(Ru("/proc/sys/fs/binfmt_misc/WSLInterop")||process.env.WSL_DISTRO_NAME){DQ("wslview",[J],()=>{let Y=pM("wslpath",["-w",J],{stdio:["ignore","pipe","ignore"]}),G="";Y.stdout?.on("data",(Z)=>{G+=Z.toString()}),Y.on("close",(Z)=>{if(Z===0)DQ("explorer.exe",[G.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 G=pM(J,z,{stdio:"ignore",detached:!0});G.on("error",()=>Y?.()),G.unref()}catch{Y?.()}}var oM=()=>{};function QW(J,z,Y,G){for(let Z of J.children)if(Z.isDir){let X=z.has(Z.path);if(G.push({kind:"dir",path:Z.path,name:Z.name,depth:Y,expanded:X,hasChildren:Z.children.length>0}),X)QW(Z,z,Y+1,G)}else G.push({kind:"file",path:Z.path,name:Z.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 tM(J){return J.map((z)=>({kind:"status",path:z.path,status:z.status,added:z.added,deleted:z.deleted}))}function Cu(J){return`${J.kind}\x00${J.path}`}function Nu(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 eM(J,z){return RH(J,z,Cu,Nu)}function JF(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 zF(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],Z=z[Y];if(G.path!==Z.path||G.status!==Z.status||G.added!==Z.added||G.deleted!==Z.deleted)return!1}return!0}var YF=()=>{};import{watch as ku}from"fs";import{TextAttributes as LQ}from"@opentui/core";function bu(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 Iu(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 Tu(J){switch(J){case"all":return F("files.tabs.all");case"changes":return F("files.tabs.changes")}}function qW(J){let{theme:z}=d0(),Y=mz(),G=()=>J.focused?J.focused():!0,[Z,X]=a("all"),[Q,f]=a(0),[H,B]=a(0),[V,j]=a(null,{equals:JF}),[K,L]=a(null,{equals:zF}),[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 zW(h,C);if(C?.aborted||o!==_||J.worktreePath()!==h)return;j(E)}else if(t==="changes"){let E=await YW(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)}}r0(SJ(J.worktreePath,async(t)=>{j(null),L(null),O(null),f(0),x(new Set);let h=new AbortController;k1(()=>h.abort()),await S(Z(),t,h.signal)})),r0(SJ(J.worktreePath,(t)=>{if(t==null)return;if(process.env.KOBE_FILETREE_WATCH!=="1")return;let h=null,C=null;try{C=ku(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{}k1(()=>{if(h!=null)clearTimeout(h);if(C!=null)C.close()})})),r0(SJ([Z,H],async([t,h])=>{let C=J.worktreePath();if(C==null)return;f(0);let o=new AbortController;k1(()=>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 $M(t)}),M=K0((t)=>{let h=[];if(Z()==="all"){let C=N();if(C!=null)QW(C,g(),0,h)}else if(Z()==="changes"){let C=K();if(C!=null)h.push(...tM(C))}return eM(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 i(){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(Z()!=="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 B0(){B((t)=>t+1),J.onRefresh?.()}function L0(){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}`;rM(E)}ZW({focused:G,moveDown:i,moveUp:e,setTab:(t)=>X(t),currentTab:Z,openCurrent:q0,mentionCurrent:p,createPR:J.onCreatePR,openExternal:L0,refresh:B0,expandOrDescend:J0,collapseOrParent:T});let V0;return r0(SJ([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(Z0,{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(Z0,{get when(){return J.onZenToggle},get children(){var c=W("box"),s=W("text"),X0=W("text");return D(c,s),D(c,X0),q(c,"flexDirection","row"),q(c,"gap",1),q(c,"onMouseUp",()=>J.onZenToggle?.()),D(s,E0("[~]")),q(s,"wrapMode","none"),q(X0,"wrapMode","none"),U(X0,()=>F("files.actions.zen")),y((F0)=>{var P0=z.accent,A0=LQ.BOLD,N0=z.text;return P0!==F0.e&&(F0.e=q(s,"fg",P0,F0.e)),A0!==F0.t&&(F0.t=q(s,"attributes",A0,F0.t)),N0!==F0.a&&(F0.a=q(X0,"fg",N0,F0.a)),F0},{e:void 0,t:void 0,a:void 0}),c}}),null),U(E,b(Z0,{get when(){return J.onCreatePR},get children(){var c=W("box"),s=W("text"),X0=W("text");return D(c,s),D(c,X0),q(c,"flexDirection","row"),q(c,"gap",1),q(c,"onMouseUp",()=>J.onCreatePR?.()),D(s,E0("[P]")),q(s,"wrapMode","none"),q(X0,"wrapMode","none"),U(X0,()=>F("files.actions.createPR")),y((F0)=>{var P0=z.accent,A0=LQ.BOLD,N0=z.text;return P0!==F0.e&&(F0.e=q(s,"fg",P0,F0.e)),A0!==F0.t&&(F0.t=q(s,"attributes",A0,F0.t)),N0!==F0.a&&(F0.a=q(X0,"fg",N0,F0.a)),F0},{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(X1,{each:Su,children:(E)=>{let c=()=>Z()===E;return(()=>{var s=W("text");return q(s,"wrapMode","none"),q(s,"onMouseUp",()=>X(E)),U(s,()=>Tu(E)),y((X0)=>{var F0=c()?z.primary:z.textMuted,P0=c()?LQ.BOLD:void 0;return F0!==X0.e&&(X0.e=q(s,"fg",F0,X0.e)),P0!==X0.t&&(X0.t=q(s,"attributes",P0,X0.t)),X0},{e:void 0,t:void 0}),s})()}})),U(h,b(Z0,{get when(){return J.cornerBadge?.()},children:(E)=>(()=>{var c=W("text");return q(c,"wrapMode","none"),U(c,()=>E().text),y((s)=>{var X0=E().active?z.accent:z.textMuted,F0=E().active?LQ.BOLD:void 0;return X0!==s.e&&(s.e=q(c,"fg",X0,s.e)),F0!==s.t&&(s.t=q(c,"attributes",F0,s.t)),s},{e:void 0,t:void 0}),c})()}),null),U(t,b(Z0,{get when(){return Z()==="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")),y((s)=>q(c,"fg",z.textMuted,s)),E}}),o),U(t,b(Z0,{get when(){return Z()!=="changes"},get children(){var E=W("box");return q(E,"flexDirection","row"),q(E,"paddingBottom",1),q(E,"flexShrink",0),E}}),o),cz((E)=>{V0=E},o),q(o,"flexGrow",1),q(o,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),U(o,b(Z0,{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")),y((s)=>q(c,"fg",z.textMuted,s)),E}}),null),U(o,b(Z0,{get when(){return x0(()=>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,()=>Iu(A()??"")),q(s,"wrapMode","word"),U(s,()=>F("files.error.retryHint")),y((X0)=>{var{error:F0,textMuted:P0}=z;return F0!==X0.e&&(X0.e=q(c,"fg",F0,X0.e)),P0!==X0.t&&(X0.t=q(s,"fg",P0,X0.t)),X0},{e:void 0,t:void 0}),E}}),null),U(o,b(Z0,{get when(){return x0(()=>J.worktreePath()!=null&&A()==null&&M().length===0)()&&(Z()==="all"&&V()!=null||Z()==="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=x0(()=>Z()==="all");return()=>s()?F("files.empty.noFiles"):F("files.empty.noChanges")})()),y((s)=>q(c,"fg",z.textMuted,s)),E}}),null),U(o,b(Z0,{get when(){return x0(()=>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(X1,{get each(){return M()},children:(c,s)=>{let X0=()=>s()===Q(),F0=(()=>{var R0=W("text");return q(R0,"wrapMode","none"),U(R0,()=>X0()?"\u258C":" "),y((y0)=>q(R0,"fg",X0()?z.focusAccent:void 0,y0)),R0})(),P0=()=>X0()?z.backgroundElement:void 0;if(c.kind==="dir"){let R0=" ".repeat(c.depth),y0=c.expanded?"\u25BE":"\u25B8";return(()=>{var H1=W("box"),G1=W("box"),w0=W("text");return D(H1,G1),q(H1,"flexDirection","row"),q(H1,"gap",0),q(H1,"onMouseUp",()=>{f(s()),x((o0)=>{let $=new Set(o0);if($.has(c.path))$.delete(c.path);else $.add(c.path);return $})}),U(H1,F0,G1),D(G1,w0),q(G1,"flexGrow",1),q(G1,"paddingRight",1),q(w0,"wrapMode","none"),U(w0,()=>`${R0}${y0} ${c.name}/`),y((o0)=>{var $=P0(),W0=z.textMuted,T0=LQ.BOLD;return $!==o0.e&&(o0.e=q(H1,"backgroundColor",$,o0.e)),W0!==o0.t&&(o0.t=q(w0,"fg",W0,o0.t)),T0!==o0.a&&(o0.a=q(w0,"attributes",T0,o0.a)),o0},{e:void 0,t:void 0,a:void 0}),H1})()}if(c.kind==="file"){let R0=" ".repeat(c.depth);return(()=>{var y0=W("box"),H1=W("box"),G1=W("text");return D(y0,H1),q(y0,"flexDirection","row"),q(y0,"gap",0),q(y0,"onMouseUp",()=>{f(s()),J.onOpenFile(c.path)}),U(y0,F0,H1),D(H1,G1),q(H1,"flexGrow",1),q(H1,"paddingRight",1),q(G1,"wrapMode","none"),U(G1,()=>`${R0} ${c.name}`),y((w0)=>{var o0=P0(),$=z.text;return o0!==w0.e&&(w0.e=q(y0,"backgroundColor",o0,w0.e)),$!==w0.t&&(w0.t=q(G1,"fg",$,w0.t)),w0},{e:void 0,t:void 0}),y0})()}let A0=bu(c.status),N0=()=>{switch(A0){case"success":return z.success;case"warning":return z.warning;case"error":return z.error;case"info":return z.info;default:return z.textMuted}},u=I(),g0=c.added==null?" ".repeat(u.added):`+${c.added}`.padStart(u.added),Q0=c.deleted==null?" ".repeat(u.deleted):`-${c.deleted}`.padStart(u.deleted);return(()=>{var R0=W("box"),y0=W("box"),H1=W("text"),G1=W("text");return D(R0,y0),q(R0,"flexDirection","row"),q(R0,"gap",0),q(R0,"onMouseUp",()=>{f(s()),J.onOpenFile(c.path)}),U(R0,F0,y0),D(y0,H1),D(y0,G1),q(y0,"flexDirection","row"),q(y0,"flexGrow",1),q(y0,"gap",1),q(y0,"paddingRight",1),q(H1,"wrapMode","none"),U(H1,()=>c.status),q(G1,"wrapMode","none"),q(G1,"flexGrow",1),U(G1,()=>sM(c.path,r())),U(y0,b(Z0,{get when(){return u.added>0},get children(){var w0=W("text");return q(w0,"wrapMode","none"),U(w0,g0),y((o0)=>q(w0,"fg",z.success,o0)),w0}}),null),U(y0,b(Z0,{get when(){return u.deleted>0},get children(){var w0=W("text");return q(w0,"wrapMode","none"),U(w0,Q0),y((o0)=>q(w0,"fg",z.error,o0)),w0}}),null),y((w0)=>{var o0=P0(),$=N0(),W0=z.text;return o0!==w0.e&&(w0.e=q(R0,"backgroundColor",o0,w0.e)),$!==w0.t&&(w0.t=q(H1,"fg",$,w0.t)),W0!==w0.a&&(w0.a=q(G1,"fg",W0,w0.a)),w0},{e:void 0,t:void 0,a:void 0}),R0})()}})),E}}),null),U(t,b(Z0,{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")),y((s)=>q(c,"fg",z.textMuted,s)),E}}),null),t})()}var Su;var GF=k(()=>{P();P();P();P();P();P();P();P();P();ZJ();P();j1();v1();GW();XW();oM();YF();Su=["all","changes"]});var ZF=k(()=>{GF();GW();XW()});function QF(J,z){if(z<3)return 2500;return Math.min(J*2,20000)}function qF(J,z,Y){if(z)return 1500;if(Y==="running")return 1500;return Math.min(J*2,6000)}var XF=2500,MQ=1500;import{promises as yu}from"fs";import xu from"path";async function TH(J,z){let Y=new AbortController,G=setTimeout(()=>Y.abort(),uu);try{let Z=await zY("git",z,{cwd:J,env:cJ(),signal:Y.signal});if(Y.signal.aborted)return null;if(Z.status!==0)return null;return Z.stdout.trim()}finally{clearTimeout(G)}}async function Eu(J){return await TH(J,["rev-parse","--abbrev-ref","HEAD"])||"HEAD"}async function wu(J){let z=await TH(J,["symbolic-ref","refs/remotes/origin/HEAD","--short"]);if(!z)return"main";return z.startsWith("origin/")?z.slice(7):z}async function Pu(J){let z=await TH(J,["rev-parse","--abbrev-ref","@{u}"]);return z!==null&&z.length>0}async function hu(J){let z=await TH(J,["status","--porcelain"]);if(!z)return 0;return z.split(`
|
|
280
|
-
`).filter((Y)=>Y.length>0).length}async function
|
|
277
|
+
`),process.stdout.write(F("update.pressAnyKey")),await Uu(),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"),i=W("text"),e=W("text"),J0=E0("v"),T=W("text"),q0=W("text"),p=E0("v"),B0=W("box"),L0=W("box"),V0=W("text"),t=W("scrollbox"),h=W("box");return D(S,N),D(S,r),D(S,B0),D(S,L0),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,i),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(i,"wrapMode","none"),U(i,()=>F("update.current")),D(e,J0),q(e,"wrapMode","none"),U(e,p0,null),q(T,"wrapMode","none"),U(T,()=>F("update.latest")),D(q0,p),q(q0,"wrapMode","none"),U(q0,K,null),q(B0,"flexDirection","column"),q(B0,"flexShrink",0),q(B0,"paddingTop",1),q(B0,"gap",0),U(B0,b(X1,{get each(){return A()},children:(C)=>(()=>{var o=W("box"),E=W("box"),c=W("text"),s=E0("["),X0=E0("]"),F0=W("box"),P0=W("text"),A0=W("text");return D(o,E),D(o,F0),D(o,A0),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,X0),q(c,"wrapMode","none"),U(c,()=>C.key,X0),D(F0,P0),q(F0,"width",14),q(F0,"flexShrink",0),q(P0,"wrapMode","none"),U(P0,()=>C.label),q(A0,"wrapMode","word"),U(A0,()=>C.detail),y((N0)=>{var u=H()===C.id?J.primary:void 0,g0=H()===C.id?J.selectedListItemText:J.accent,Q0=sZ.BOLD,R0=H()===C.id?J.selectedListItemText:J.text,y0=H()===C.id?J.selectedListItemText:J.textMuted;return u!==N0.e&&(N0.e=q(o,"backgroundColor",u,N0.e)),g0!==N0.t&&(N0.t=q(c,"fg",g0,N0.t)),Q0!==N0.a&&(N0.a=q(c,"attributes",Q0,N0.a)),R0!==N0.o&&(N0.o=q(P0,"fg",R0,N0.o)),y0!==N0.i&&(N0.i=q(A0,"fg",y0,N0.i)),N0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),o})()})),U(S,b(Z0,{get when(){return V()},get children(){var C=W("text");return q(C,"wrapMode","word"),U(C,V),y((o)=>q(C,"fg",J.info,o)),C}}),L0),D(L0,V0),q(L0,"flexShrink",0),q(L0,"paddingTop",1),q(V0,"wrapMode","none"),U(V0,()=>F("update.changesSectionHeader",{from:p0,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(Z0,{get when(){return Q()},get children(){var C=W("text");return U(C,()=>F("update.loadingNotes")),y((o)=>q(C,"fg",J.textMuted,o)),C}}),null),U(h,b(Z0,{get when(){return x0(()=>!Q())()&&Z().length===0},get children(){var C=W("text");return q(C,"wrapMode","word"),U(C,()=>F("update.notesUnavailable")),y((o)=>q(C,"fg",J.textMuted,o)),C}}),null),U(h,b(X1,{get each(){return Z()},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(X1,{get each(){return Ku(C.body)},children:(s)=>(()=>{var X0=W("text");return q(X0,"wrapMode","word"),U(X0,s),y((F0)=>q(X0,"fg",J.textMuted,F0)),X0})()}),null),y((s)=>{var X0=J.text,F0=sZ.BOLD;return X0!==s.e&&(s.e=q(E,"fg",X0,s.e)),F0!==s.t&&(s.t=q(E,"attributes",F0,s.t)),s},{e:void 0,t:void 0}),o})()}),null),y((C)=>{var{background:o,text:E}=J,c=sZ.BOLD,s=J.textMuted,X0=J.textMuted,F0=J.text,P0=sZ.BOLD,A0=J.textMuted,N0=Y()?.hasUpdate?J.warning:J.success,u=sZ.BOLD,g0=J.textMuted,Q0=sZ.DIM,R0={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)),X0!==C.i&&(C.i=q(i,"fg",X0,C.i)),F0!==C.n&&(C.n=q(e,"fg",F0,C.n)),P0!==C.s&&(C.s=q(e,"attributes",P0,C.s)),A0!==C.h&&(C.h=q(T,"fg",A0,C.h)),N0!==C.r&&(C.r=q(q0,"fg",N0,C.r)),u!==C.d&&(C.d=q(q0,"attributes",u,C.d)),g0!==C.l&&(C.l=q(V0,"fg",g0,C.l)),Q0!==C.u&&(C.u=q(V0,"attributes",Q0,C.u)),R0!==C.c&&(C.c=q(t,"verticalScrollbarOptions",R0,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 Lu(){await OJ({setup:()=>({root:()=>b(Du,{})})})}var dM=k(()=>{P();P();P();P();P();P();P();P();P();j1();MJ();v1();ZJ();aY();yJ()});function Mu(J){return J.trim().split(/\s+/)[0]??""}function iM(J,z,Y,G){let Z=Z1(Y);if(J==="vim")return{bin:"vim",command:`vim ${Z}`};if(J==="nvim")return{bin:"nvim",command:`nvim ${Z}`};if(J==="nano")return{bin:"nano",command:`nano ${Z}`};if(J==="emacs")return{bin:"emacs",command:`emacs ${Z}`};let X=(z.trim()||(G??"").trim()).trim();if(!X)return null;let Q=Mu(X);if(!Q)return null;let f=X.includes(nM)?X.split(nM).join(Z):`${X} ${Z}`;return{bin:Q,command:f}}function Fu(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 Ou(J,z){let Y=J.endsWith("/")?J:`${J}/`;return z.startsWith(Y)?z.slice(Y.length):null}async function Au(J){let z=RZ(g1(XY)),Y=g1(wY)??"",G=(process.env.VISUAL??process.env.EDITOR??"").trim();if(z!=="auto")return iM(z,Y,J,G);if(G)return iM("custom","",J,G);let Z=Z1(J);for(let X of L6)if(await lM(X))return{bin:X,command:`${X} ${Z}`};return null}async function lM(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 Ru(J,z){try{return await Bun.spawn(["git","diff","--quiet","HEAD","--",z],{cwd:J,stdin:"ignore",stdout:"ignore",stderr:"ignore",env:cJ()}).exited===1}catch{return!1}}async function $M(J,z,Y){let G=await Au(Y);if(!G)return!1;if(!await lM(G.bin))return!1;let Z=await gu(G,z,Y);return await Mz(J,{cwd:z,command:Z,name:Cu(Y)}),!0}async function gu(J,z,Y){let{bin:G,command:Z}=J;if(G!=="nvim"&&G!=="vim")return Z;if(Z!==`${G} ${Z1(Y)}`)return Z;let X=Ou(z,Y);if(!X)return Z;if(!await Ru(z,X))return Z;return Fu(G,Y,X)}function Cu(J){let z=J.slice(J.lastIndexOf("/")+1).trim();return z.length>0?z:"edit"}var nM="{file}";var aM=k(()=>{PY();F1();Nf();P1();Bz()});async function yH(J,z,Y){if(!z)throw Error("git(): cwd is required");let G=await gZ(z,J,{signal:Y}),Z=G.status??-1;if(Z!==0){let X=(G.stderr??"").trim(),Q=(G.stdout??"").trim();throw Error(`git ${J.join(" ")} (cwd=${z}) exited with code ${Z}: ${X||Q||"(no output)"}`)}return G.stdout??""}async function GW(J,z){let G=(await yH(["ls-files","--cached","--others","--exclude-standard","--full-name"],J,z)).split(`
|
|
279
|
+
`).map((X)=>X.replace(/\r$/,"")),Z=new Set;for(let X of G)if(X.length>0)Z.add(X);return Array.from(Z).sort()}async function ZW(J,z){let Y=await yH(["status","--porcelain","--untracked-files=all"],J,z),G=oM(Y),Z=new Map;try{let X=await yH(["diff","--no-color","--numstat","HEAD"],J,z);Z=new Map(_M(X).map((Q)=>[Q.path,{added:Q.added,deleted:Q.deleted}]))}catch{try{let X=await yH(["diff","--no-color","--numstat","--cached"],J,z);Z=new Map(_M(X).map((Q)=>[Q.path,{added:Q.added,deleted:Q.deleted}]))}catch{Z=new Map}}return G.map((X)=>{let Q=Z.get(X.path);if(Q)return{...X,added:Q.added,deleted:Q.deleted};return X})}function _M(J){return FU(J).map((z)=>({path:z.path,added:z.added,deleted:z.deleted}))}function pM(J){let z={name:"",path:"",isDir:!0,children:[]};for(let Y of J){if(!Y)continue;let G=Y.split("/").filter((X)=>X.length>0);if(G.length===0)continue;let Z=z;for(let X=0;X<G.length;X++){let Q=G[X],H=X!==G.length-1,B=Z.children.find((V)=>V.name===Q&&V.isDir===H);if(!B)B={name:Q,path:G.slice(0,X+1).join("/"),isDir:H,children:[]},Z.children.push(B);Z=B}}return rM(z),z}function rM(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)rM(z)}function oM(J){let z=[];for(let Y of xf(J)){let G;if(Y.x==="?"&&Y.y==="?")G="?";else{let X=Y.y!==" "?Y.y:Y.x;if(X==="M"||X==="A"||X==="D"||X==="R"||X==="C"||X==="U")G=X;else continue}let Z=Y.path;if(Z.length===0)continue;if(Z.endsWith("/"))continue;z.push({path:Z,status:G})}return z}var XW=k(()=>{Fj();kf()});function QW(J){D1(()=>({enabled:J.focused(),bindings:lY({"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(),Z=DQ.indexOf(G);if(Z<0)return;let X=(Y??0)%2===0?-1:1,Q=DQ[(Z+X+DQ.length)%DQ.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 DQ;var qW=k(()=>{$Z();yJ();DQ=["all","changes"]});import{spawn as sM}from"child_process";import{existsSync as Nu}from"fs";import{platform as ku}from"os";function tM(J){if(!J)return;let z=ku();if(z==="linux"){if(Nu("/proc/sys/fs/binfmt_misc/WSLInterop")||process.env.WSL_DISTRO_NAME){LQ("wslview",[J],()=>{let Y=sM("wslpath",["-w",J],{stdio:["ignore","pipe","ignore"]}),G="";Y.stdout?.on("data",(Z)=>{G+=Z.toString()}),Y.on("close",(Z)=>{if(Z===0)LQ("explorer.exe",[G.trim()])})});return}LQ("xdg-open",[J]);return}if(z==="darwin"){LQ("open",[J]);return}if(z==="win32"){LQ("cmd.exe",["/c","start","",J]);return}}function LQ(J,z,Y){try{let G=sM(J,z,{stdio:"ignore",detached:!0});G.on("error",()=>Y?.()),G.unref()}catch{Y?.()}}var eM=()=>{};function fW(J,z,Y,G){for(let Z of J.children)if(Z.isDir){let X=z.has(Z.path);if(G.push({kind:"dir",path:Z.path,name:Z.name,depth:Y,expanded:X,hasChildren:Z.children.length>0}),X)fW(Z,z,Y+1,G)}else G.push({kind:"file",path:Z.path,name:Z.name,depth:Y})}function JF(J,z){return SH(J,z)}function zF(J){return J.map((z)=>({kind:"status",path:z.path,status:z.status,added:z.added,deleted:z.deleted}))}function bu(J){return`${J.kind}\x00${J.path}`}function Su(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 YF(J,z){return gH(J,z,bu,Su)}function GF(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 ZF(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],Z=z[Y];if(G.path!==Z.path||G.status!==Z.status||G.added!==Z.added||G.deleted!==Z.deleted)return!1}return!0}var XF=()=>{};import{watch as Iu}from"fs";import{TextAttributes as MQ}from"@opentui/core";function Tu(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 xu(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 uu(J){switch(J){case"all":return F("files.tabs.all");case"changes":return F("files.tabs.changes")}}function HW(J){let{theme:z}=d0(),Y=mz(),G=()=>J.focused?J.focused():!0,[Z,X]=a("all"),[Q,f]=a(0),[H,B]=a(0),[V,j]=a(null,{equals:GF}),[K,L]=a(null,{equals:ZF}),[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 GW(h,C);if(C?.aborted||o!==_||J.worktreePath()!==h)return;j(E)}else if(t==="changes"){let E=await ZW(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)}}r0(SJ(J.worktreePath,async(t)=>{j(null),L(null),O(null),f(0),x(new Set);let h=new AbortController;k1(()=>h.abort()),await S(Z(),t,h.signal)})),r0(SJ(J.worktreePath,(t)=>{if(t==null)return;if(process.env.KOBE_FILETREE_WATCH!=="1")return;let h=null,C=null;try{C=Iu(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{}k1(()=>{if(h!=null)clearTimeout(h);if(C!=null)C.close()})})),r0(SJ([Z,H],async([t,h])=>{let C=J.worktreePath();if(C==null)return;f(0);let o=new AbortController;k1(()=>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 pM(t)}),M=K0((t)=>{let h=[];if(Z()==="all"){let C=N();if(C!=null)fW(C,g(),0,h)}else if(Z()==="changes"){let C=K();if(C!=null)h.push(...zF(C))}return YF(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 i(){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(Z()!=="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 B0(){B((t)=>t+1),J.onRefresh?.()}function L0(){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}`;tM(E)}QW({focused:G,moveDown:i,moveUp:e,setTab:(t)=>X(t),currentTab:Z,openCurrent:q0,mentionCurrent:p,createPR:J.onCreatePR,openExternal:L0,refresh:B0,expandOrDescend:J0,collapseOrParent:T});let V0;return r0(SJ([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(Z0,{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(Z0,{get when(){return J.onZenToggle},get children(){var c=W("box"),s=W("text"),X0=W("text");return D(c,s),D(c,X0),q(c,"flexDirection","row"),q(c,"gap",1),q(c,"onMouseUp",()=>J.onZenToggle?.()),D(s,E0("[~]")),q(s,"wrapMode","none"),q(X0,"wrapMode","none"),U(X0,()=>F("files.actions.zen")),y((F0)=>{var P0=z.accent,A0=MQ.BOLD,N0=z.text;return P0!==F0.e&&(F0.e=q(s,"fg",P0,F0.e)),A0!==F0.t&&(F0.t=q(s,"attributes",A0,F0.t)),N0!==F0.a&&(F0.a=q(X0,"fg",N0,F0.a)),F0},{e:void 0,t:void 0,a:void 0}),c}}),null),U(E,b(Z0,{get when(){return J.onCreatePR},get children(){var c=W("box"),s=W("text"),X0=W("text");return D(c,s),D(c,X0),q(c,"flexDirection","row"),q(c,"gap",1),q(c,"onMouseUp",()=>J.onCreatePR?.()),D(s,E0("[P]")),q(s,"wrapMode","none"),q(X0,"wrapMode","none"),U(X0,()=>F("files.actions.createPR")),y((F0)=>{var P0=z.accent,A0=MQ.BOLD,N0=z.text;return P0!==F0.e&&(F0.e=q(s,"fg",P0,F0.e)),A0!==F0.t&&(F0.t=q(s,"attributes",A0,F0.t)),N0!==F0.a&&(F0.a=q(X0,"fg",N0,F0.a)),F0},{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(X1,{each:yu,children:(E)=>{let c=()=>Z()===E;return(()=>{var s=W("text");return q(s,"wrapMode","none"),q(s,"onMouseUp",()=>X(E)),U(s,()=>uu(E)),y((X0)=>{var F0=c()?z.primary:z.textMuted,P0=c()?MQ.BOLD:void 0;return F0!==X0.e&&(X0.e=q(s,"fg",F0,X0.e)),P0!==X0.t&&(X0.t=q(s,"attributes",P0,X0.t)),X0},{e:void 0,t:void 0}),s})()}})),U(h,b(Z0,{get when(){return J.cornerBadge?.()},children:(E)=>(()=>{var c=W("text");return q(c,"wrapMode","none"),U(c,()=>E().text),y((s)=>{var X0=E().active?z.accent:z.textMuted,F0=E().active?MQ.BOLD:void 0;return X0!==s.e&&(s.e=q(c,"fg",X0,s.e)),F0!==s.t&&(s.t=q(c,"attributes",F0,s.t)),s},{e:void 0,t:void 0}),c})()}),null),U(t,b(Z0,{get when(){return Z()==="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")),y((s)=>q(c,"fg",z.textMuted,s)),E}}),o),U(t,b(Z0,{get when(){return Z()!=="changes"},get children(){var E=W("box");return q(E,"flexDirection","row"),q(E,"paddingBottom",1),q(E,"flexShrink",0),E}}),o),cz((E)=>{V0=E},o),q(o,"flexGrow",1),q(o,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),U(o,b(Z0,{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")),y((s)=>q(c,"fg",z.textMuted,s)),E}}),null),U(o,b(Z0,{get when(){return x0(()=>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,()=>xu(A()??"")),q(s,"wrapMode","word"),U(s,()=>F("files.error.retryHint")),y((X0)=>{var{error:F0,textMuted:P0}=z;return F0!==X0.e&&(X0.e=q(c,"fg",F0,X0.e)),P0!==X0.t&&(X0.t=q(s,"fg",P0,X0.t)),X0},{e:void 0,t:void 0}),E}}),null),U(o,b(Z0,{get when(){return x0(()=>J.worktreePath()!=null&&A()==null&&M().length===0)()&&(Z()==="all"&&V()!=null||Z()==="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=x0(()=>Z()==="all");return()=>s()?F("files.empty.noFiles"):F("files.empty.noChanges")})()),y((s)=>q(c,"fg",z.textMuted,s)),E}}),null),U(o,b(Z0,{get when(){return x0(()=>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(X1,{get each(){return M()},children:(c,s)=>{let X0=()=>s()===Q(),F0=(()=>{var R0=W("text");return q(R0,"wrapMode","none"),U(R0,()=>X0()?"\u258C":" "),y((y0)=>q(R0,"fg",X0()?z.focusAccent:void 0,y0)),R0})(),P0=()=>X0()?z.backgroundElement:void 0;if(c.kind==="dir"){let R0=" ".repeat(c.depth),y0=c.expanded?"\u25BE":"\u25B8";return(()=>{var H1=W("box"),G1=W("box"),w0=W("text");return D(H1,G1),q(H1,"flexDirection","row"),q(H1,"gap",0),q(H1,"onMouseUp",()=>{f(s()),x((o0)=>{let $=new Set(o0);if($.has(c.path))$.delete(c.path);else $.add(c.path);return $})}),U(H1,F0,G1),D(G1,w0),q(G1,"flexGrow",1),q(G1,"paddingRight",1),q(w0,"wrapMode","none"),U(w0,()=>`${R0}${y0} ${c.name}/`),y((o0)=>{var $=P0(),W0=z.textMuted,T0=MQ.BOLD;return $!==o0.e&&(o0.e=q(H1,"backgroundColor",$,o0.e)),W0!==o0.t&&(o0.t=q(w0,"fg",W0,o0.t)),T0!==o0.a&&(o0.a=q(w0,"attributes",T0,o0.a)),o0},{e:void 0,t:void 0,a:void 0}),H1})()}if(c.kind==="file"){let R0=" ".repeat(c.depth);return(()=>{var y0=W("box"),H1=W("box"),G1=W("text");return D(y0,H1),q(y0,"flexDirection","row"),q(y0,"gap",0),q(y0,"onMouseUp",()=>{f(s()),J.onOpenFile(c.path)}),U(y0,F0,H1),D(H1,G1),q(H1,"flexGrow",1),q(H1,"paddingRight",1),q(G1,"wrapMode","none"),U(G1,()=>`${R0} ${c.name}`),y((w0)=>{var o0=P0(),$=z.text;return o0!==w0.e&&(w0.e=q(y0,"backgroundColor",o0,w0.e)),$!==w0.t&&(w0.t=q(G1,"fg",$,w0.t)),w0},{e:void 0,t:void 0}),y0})()}let A0=Tu(c.status),N0=()=>{switch(A0){case"success":return z.success;case"warning":return z.warning;case"error":return z.error;case"info":return z.info;default:return z.textMuted}},u=I(),g0=c.added==null?" ".repeat(u.added):`+${c.added}`.padStart(u.added),Q0=c.deleted==null?" ".repeat(u.deleted):`-${c.deleted}`.padStart(u.deleted);return(()=>{var R0=W("box"),y0=W("box"),H1=W("text"),G1=W("text");return D(R0,y0),q(R0,"flexDirection","row"),q(R0,"gap",0),q(R0,"onMouseUp",()=>{f(s()),J.onOpenFile(c.path)}),U(R0,F0,y0),D(y0,H1),D(y0,G1),q(y0,"flexDirection","row"),q(y0,"flexGrow",1),q(y0,"gap",1),q(y0,"paddingRight",1),q(H1,"wrapMode","none"),U(H1,()=>c.status),q(G1,"wrapMode","none"),q(G1,"flexGrow",1),U(G1,()=>JF(c.path,r())),U(y0,b(Z0,{get when(){return u.added>0},get children(){var w0=W("text");return q(w0,"wrapMode","none"),U(w0,g0),y((o0)=>q(w0,"fg",z.success,o0)),w0}}),null),U(y0,b(Z0,{get when(){return u.deleted>0},get children(){var w0=W("text");return q(w0,"wrapMode","none"),U(w0,Q0),y((o0)=>q(w0,"fg",z.error,o0)),w0}}),null),y((w0)=>{var o0=P0(),$=N0(),W0=z.text;return o0!==w0.e&&(w0.e=q(R0,"backgroundColor",o0,w0.e)),$!==w0.t&&(w0.t=q(H1,"fg",$,w0.t)),W0!==w0.a&&(w0.a=q(G1,"fg",W0,w0.a)),w0},{e:void 0,t:void 0,a:void 0}),R0})()}})),E}}),null),U(t,b(Z0,{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")),y((s)=>q(c,"fg",z.textMuted,s)),E}}),null),t})()}var yu;var QF=k(()=>{P();P();P();P();P();P();P();P();P();ZJ();P();j1();v1();XW();qW();eM();XF();yu=["all","changes"]});var qF=k(()=>{QF();XW();qW()});function HF(J,z){if(z<3)return 2500;return Math.min(J*2,20000)}function BF(J,z,Y){if(z)return 1500;if(Y==="running")return 1500;return Math.min(J*2,6000)}var fF=2500,FQ=1500;import{promises as Eu}from"fs";import wu from"path";async function xH(J,z){let Y=new AbortController,G=setTimeout(()=>Y.abort(),Pu);try{let Z=await zY("git",z,{cwd:J,env:cJ(),signal:Y.signal});if(Y.signal.aborted)return null;if(Z.status!==0)return null;return Z.stdout.trim()}finally{clearTimeout(G)}}async function hu(J){return await xH(J,["rev-parse","--abbrev-ref","HEAD"])||"HEAD"}async function vu(J){let z=await xH(J,["symbolic-ref","refs/remotes/origin/HEAD","--short"]);if(!z)return"main";return z.startsWith("origin/")?z.slice(7):z}async function mu(J){let z=await xH(J,["rev-parse","--abbrev-ref","@{u}"]);return z!==null&&z.length>0}async function cu(J){let z=await xH(J,["status","--porcelain"]);if(!z)return 0;return z.split(`
|
|
280
|
+
`).filter((Y)=>Y.length>0).length}async function du(J){let[z,Y,G,Z]=await Promise.all([hu(J),vu(J),mu(J),cu(J)]);return{branch:z,targetBranch:Y,hasUpstream:G,dirtyCount:Z}}function nu(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 iu(J){return J?"The current branch tracks an upstream.":"There is no upstream branch yet."}function lu(J,z){let Y={branch:z.branch,targetBranch:z.targetBranch,dirtyCountSentence:nu(z.dirtyCount),upstreamSentence:iu(z.hasUpstream)};return J.replace(/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/g,(G,Z)=>Object.hasOwn(Y,Z)?Y[Z]:G)}async function $u(J){let z=wu.join(J,".kobe","pr-instructions.md");try{let Y=await Eu.readFile(z,"utf8");return Y.length>0?Y:jF}catch{return jF}}async function WF(J){let[z,Y]=await Promise.all([$u(J),du(J)]);return lu(z,Y)}var Pu=5000,jF=`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 BF=k(()=>{PY();VQ()});var fW={};f1(fW,{startOpsPreview:()=>zE,startOpsHost:()=>ru});import{createHash as iu}from"crypto";import{SyntaxStyle as lu}from"@opentui/core";function _u(J){let{theme:z}=d0(),[Y,G]=a(null),Z=!1;e1(()=>{(async()=>{let N=await jH({logTag:"ops-activity",channels:["transcript.activity"]});if(!N)return;if(Z){N.dispose();return}G(N)})()}),k1(()=>{Z=!0,Y()?.dispose()});let X=()=>Y()?.transcriptActivitySignal()()??null,Q=()=>X()?.get(J.worktree)??null,[f,H]=a(0),[B,V]=a(0),j=!1;r0(()=>{let N=X();if(!N)return;let M=N.get(J.worktree)?.mtimeMs??0;if(!j&&M>0)j=!0,H(M);V(M)}),r0(()=>{if(X()!==null)return;let N=!1,M,I=XF,r=0,i=0;async function e(){try{let J0=await _G(J.vendor,J.worktree);if(N)return;if(!j)j=!0,H(J0),i=J0;if(J0>i)i=J0,r=0;else r++;V(J0)}catch{r++}finally{if(!N)I=QF(I,r),M=setTimeout(()=>void e(),I)}}e(),k1(()=>{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())}e1(()=>{if(!J.targetPane)return;let N=HX(J.vendor),M=!1,I=null,r=!1,i="",e=!1,J0=0,T=null,q0=MQ,p=0,B0,L0=()=>X()!==null;async function V0(o){if(o===T)return;T=o,await yY(J.targetPane,au,o)}async function t(){if(L0())return Q()?.completionId??null;return(await N.latestCompletion(J.worktree))?.id??null}async function h(){try{i=jF(await fZ(J.targetPane,80)),I=await t(),r=!0,await V0(N.supportsCompletionMarkers()?"idle":"unknown")}catch{}}async function C(){let o=L0();try{let E=jF(await fZ(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!==i)i=E,e=!0,J0=0,await V0(N.supportsCompletionMarkers()?"running":"unknown");else if(e)J0++;if(N.supportsCompletionMarkers()&&e&&J0>=$u){let X0=await t();if(!M&&X0!==null&&X0!==I)I=X0,e=!1,J0=0,await V0("done")}q0=o?qF(q0,s,T):MQ}catch{q0=MQ}finally{if(!M)B0=setTimeout(()=>void C(),q0)}}h(),B0=setTimeout(()=>void C(),MQ),k1(()=>{if(M=!0,B0)clearTimeout(B0)})});function O(N){if(!J.taskId)return;Mz(C1(J.taskId),{cwd:J.worktree,command:k7({worktree:J.worktree,relPath:N,cliInvocation:b1()}),name:pu(N)})}function g(N){if(!J.taskId){O(N);return}let M=`${J.worktree}/${N}`;nM(C1(J.taskId),J.worktree,M).then((I)=>{if(!I)O(N)})}function x(N){if(!J.targetPane)return;Bf(J.targetPane,`@${N} `)}async function _(){if(!J.targetPane)return;let N=await HF(J.worktree);await Bf(J.targetPane,N),await CX(J.targetPane,"Enter")}function S(){if(!J.taskId)return;let N=C1(J.taskId),M=b1(),I=`${JJ()}${NJ(M)} layout --session ${Z1(N)} --action zen-toggle`;l0(["run-shell","-b",I])}return(()=>{var N=W("box");return q(N,"flexDirection","column"),q(N,"flexGrow",1),U(N,b(qW,{worktreePath:()=>J.worktree,focused:()=>!0,onOpenFile:g,onMention:x,onCreatePR:()=>void _(),get onZenToggle(){return J.taskId?S:void 0},cornerBadge:L,onRefresh:A})),y((M)=>q(N,"backgroundColor",z.background,M)),N})()}function pu(J){let z=J.lastIndexOf("/");return z>=0?J.slice(z+1):J}function jF(J){return iu("sha1").update(J).digest("hex")}async function ru(J){await OJ({logContext:"ops",providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(_u,J)})})}function ou(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 su(J,z){let Y=await gZ(J,["diff","HEAD","--",z]);return Y.status===0?Y.stdout:""}async function tu(J,z){return await D6(J,z)??""}function eu(J){let z={fg:J.primary},Y={fg:J.success},G={fg:J.info},Z={fg:J.warning},X={fg:J.accent},Q={fg:J.textMuted,italic:!0},f={fg:J.textMuted},H={fg:J.text};return lu.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:Z,"type.builtin":Z,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:Z,label:H,module:H})}function JE(J){let{theme:z}=d0(),Y=eu(z),G=ou(J.relPath),[Z]=Kq(()=>J.relPath,async(X)=>{let Q=await su(J.worktree,X);if(Q.trim().length>0)return{kind:"diff",text:Q};return{kind:"code",text:await tu(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=x0(()=>Z()?.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(Z0,{get when(){return Z()},get fallback(){return(()=>{var j=W("text");return U(j,()=>F("ops.preview.loading")),y((K)=>q(j,"fg",z.textMuted,K)),j})()},children:(j)=>b(Z0,{get when(){return j().kind==="diff"},get fallback(){return(()=>{var K=W("code");return q(K,"filetype",G),q(K,"syntaxStyle",Y),y((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),y((L)=>q(K,"diff",j().text,L)),K}})})),y((j)=>{var{background:K,accent:L,textMuted:A,textMuted:O}=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)),O!==j.o&&(j.o=q(B,"fg",O,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),X})()}async function zE(J){await OJ({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(JE,J)})})}var $u=2,au="@kobe_tab_state";var HW=k(()=>{P();P();P();P();P();P();P();JY();zq();Yq();P1();iM();Bz();Nf();j1();C9();v1();ZJ();aY();yJ();ZF();BG();BF()});var UF={};f1(UF,{startDirectTmux:()=>GE,chooseInitialTask:()=>KF});import{resolve as WF}from"path";function KF(J,z={}){let Y=(Q)=>Q?J.find((f)=>f.id===Q):void 0,G=Y(z.activeTaskId);if(G)return G;let Z=Y(z.persistedTaskId);if(Z)return Z;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 VF(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 YE(J){lH();let z=[...gJ()];if(z.length===0)z=[pz(WF(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]??WF(process.cwd())}async function GE(){if(uQ("gui"),Promise.resolve().then(() => (ij(),nj)).then((Y)=>Y.ensureGlobalKobeHooks()),!await wz()){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 Az(),z=new KJ(J,{role:"gui"});try{process.env.KOBE_DAEMON_SOCKET_PATH=J.socketPath,await z.init();let Y=await YE(z),G=KF(z.listTasks(),{activeTaskId:z.activeTaskSignal()(),persistedTaskId:g1("lastSelectedTaskId"),cwdRepo:Y});if(!G){let j=await jf();if(await FG(),await rq(j),await Hf(j),await VF(FZ(j))===null)console.error("kobe: failed to attach to the kobe-home session"),process.exitCode=1;return}let Z=G.worktreePath||await z.ensureWorktree(G.id),X=C1(G.id);await z.setActiveTask(G.id).catch(()=>{}),r1("lastSelectedTaskId",G.id);let Q=G.vendor;if(G.kind==="main"){let K=await NB(X)??xJ(g1("lastSelectedVendor"),uJ());if(K!==G.vendor)await z.setVendor(G.id,K).catch(()=>{}),Q=K}let f=CZ(G.repo,Z,{kind:"repo-init"});if(!await IX({name:X,cwd:Z,command:oJ(Q),taskId:G.id,vendor:Q,repo:G.repo,launchInit:f})){console.error(`kobe: tmux session ${X} failed to start (check the daemon log)`),process.exitCode=1;return}await FG(),await rq(X),await Hf(X);let B=await VF(FZ(X));if(B===null){console.error(`kobe: failed to attach to tmux session ${X}`),process.exitCode=1;return}if(B!==0&&!await V1(X)){console.error(`kobe: tmux session ${X} ended unexpectedly (attach exited ${B})`),process.exitCode=B;return}let V=z.getTask(G.id);if(V&&V.title===yz&&V.worktreePath)try{let j=await pG(V.worktreePath,V.vendor);if(j)await z.setTitle(V.id,j)}catch(j){console.error("[kobe] auto-title failed:",j)}}finally{z.dispose()}}var DF=k(()=>{zG();FJ();nY();sJ();Qq();MX();NZ();F1();P1();i1();nq();RG();zJ()});var LF={};f1(LF,{startTui:()=>ZE});async function ZE(){a4();let{startDirectTmux:J}=await Promise.resolve().then(() => (DF(),UF));await J()}var MF=k(()=>{pf()});yH();i1();import{resolve as jW}from"path";MJ();function kW(){return[`kobe ${p0}`,"","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 VF=k(()=>{PY();KQ()});var BW={};f1(BW,{startOpsPreview:()=>ZE,startOpsHost:()=>tu});import{createHash as au}from"crypto";import{SyntaxStyle as _u}from"@opentui/core";function ou(J){let{theme:z}=d0(),[Y,G]=a(null),Z=!1;e1(()=>{(async()=>{let N=await WH({logTag:"ops-activity",channels:["transcript.activity"]});if(!N)return;if(Z){N.dispose();return}G(N)})()}),k1(()=>{Z=!0,Y()?.dispose()});let X=()=>Y()?.transcriptActivitySignal()()??null,Q=()=>X()?.get(J.worktree)??null,[f,H]=a(0),[B,V]=a(0),j=!1;r0(()=>{let N=X();if(!N)return;let M=N.get(J.worktree)?.mtimeMs??0;if(!j&&M>0)j=!0,H(M);V(M)}),r0(()=>{if(X()!==null)return;let N=!1,M,I=fF,r=0,i=0;async function e(){try{let J0=await _G(J.vendor,J.worktree);if(N)return;if(!j)j=!0,H(J0),i=J0;if(J0>i)i=J0,r=0;else r++;V(J0)}catch{r++}finally{if(!N)I=HF(I,r),M=setTimeout(()=>void e(),I)}}e(),k1(()=>{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())}e1(()=>{if(!J.targetPane)return;let N=BX(J.vendor),M=!1,I=null,r=!1,i="",e=!1,J0=0,T=null,q0=FQ,p=0,B0,L0=()=>X()!==null;async function V0(o){if(o===T)return;T=o,await yY(J.targetPane,ru,o)}async function t(){if(L0())return Q()?.completionId??null;return(await N.latestCompletion(J.worktree))?.id??null}async function h(){try{i=KF(await fZ(J.targetPane,80)),I=await t(),r=!0,await V0(N.supportsCompletionMarkers()?"idle":"unknown")}catch{}}async function C(){let o=L0();try{let E=KF(await fZ(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!==i)i=E,e=!0,J0=0,await V0(N.supportsCompletionMarkers()?"running":"unknown");else if(e)J0++;if(N.supportsCompletionMarkers()&&e&&J0>=pu){let X0=await t();if(!M&&X0!==null&&X0!==I)I=X0,e=!1,J0=0,await V0("done")}q0=o?BF(q0,s,T):FQ}catch{q0=FQ}finally{if(!M)B0=setTimeout(()=>void C(),q0)}}h(),B0=setTimeout(()=>void C(),FQ),k1(()=>{if(M=!0,B0)clearTimeout(B0)})});function O(N){if(!J.taskId)return;Mz(C1(J.taskId),{cwd:J.worktree,command:S7({worktree:J.worktree,relPath:N,cliInvocation:b1()}),name:su(N)})}function g(N){if(!J.taskId){O(N);return}let M=`${J.worktree}/${N}`;$M(C1(J.taskId),J.worktree,M).then((I)=>{if(!I)O(N)})}function x(N){if(!J.targetPane)return;jf(J.targetPane,`@${N} `)}async function _(){if(!J.targetPane)return;let N=await WF(J.worktree);await jf(J.targetPane,N),await NX(J.targetPane,"Enter")}function S(){if(!J.taskId)return;let N=C1(J.taskId),M=b1(),I=`${JJ()}${NJ(M)} layout --session ${Z1(N)} --action zen-toggle`;l0(["run-shell","-b",I])}return(()=>{var N=W("box");return q(N,"flexDirection","column"),q(N,"flexGrow",1),U(N,b(HW,{worktreePath:()=>J.worktree,focused:()=>!0,onOpenFile:g,onMention:x,onCreatePR:()=>void _(),get onZenToggle(){return J.taskId?S:void 0},cornerBadge:L,onRefresh:A})),y((M)=>q(N,"backgroundColor",z.background,M)),N})()}function su(J){let z=J.lastIndexOf("/");return z>=0?J.slice(z+1):J}function KF(J){return au("sha1").update(J).digest("hex")}async function tu(J){await OJ({logContext:"ops",providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(ou,J)})})}function eu(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 JE(J,z){let Y=await gZ(J,["diff","HEAD","--",z]);return Y.status===0?Y.stdout:""}async function zE(J,z){return await M6(J,z)??""}function YE(J){let z={fg:J.primary},Y={fg:J.success},G={fg:J.info},Z={fg:J.warning},X={fg:J.accent},Q={fg:J.textMuted,italic:!0},f={fg:J.textMuted},H={fg:J.text};return _u.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:Z,"type.builtin":Z,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:Z,label:H,module:H})}function GE(J){let{theme:z}=d0(),Y=YE(z),G=eu(J.relPath),[Z]=Uq(()=>J.relPath,async(X)=>{let Q=await JE(J.worktree,X);if(Q.trim().length>0)return{kind:"diff",text:Q};return{kind:"code",text:await zE(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=x0(()=>Z()?.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(Z0,{get when(){return Z()},get fallback(){return(()=>{var j=W("text");return U(j,()=>F("ops.preview.loading")),y((K)=>q(j,"fg",z.textMuted,K)),j})()},children:(j)=>b(Z0,{get when(){return j().kind==="diff"},get fallback(){return(()=>{var K=W("code");return q(K,"filetype",G),q(K,"syntaxStyle",Y),y((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),y((L)=>q(K,"diff",j().text,L)),K}})})),y((j)=>{var{background:K,accent:L,textMuted:A,textMuted:O}=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)),O!==j.o&&(j.o=q(B,"fg",O,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),X})()}async function ZE(J){await OJ({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(GE,J)})})}var pu=2,ru="@kobe_tab_state";var jW=k(()=>{P();P();P();P();P();P();P();JY();Yq();Gq();P1();aM();Bz();kf();j1();k9();v1();ZJ();aY();yJ();qF();BG();VF()});var MF={};f1(MF,{startDirectTmux:()=>QE,chooseInitialTask:()=>LF});import{resolve as UF}from"path";function LF(J,z={}){let Y=(Q)=>Q?J.find((f)=>f.id===Q):void 0,G=Y(z.activeTaskId);if(G)return G;let Z=Y(z.persistedTaskId);if(Z)return Z;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 DF(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 XE(J){aH();let z=[...gJ()];if(z.length===0)z=[pz(UF(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]??UF(process.cwd())}async function QE(){if(EQ("gui"),Promise.resolve().then(() => ($j(),lj)).then((Y)=>Y.ensureGlobalKobeHooks()),!await wz()){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 Az(),z=new KJ(J,{role:"gui"});try{process.env.KOBE_DAEMON_SOCKET_PATH=J.socketPath,await z.init();let Y=await XE(z),G=LF(z.listTasks(),{activeTaskId:z.activeTaskSignal()(),persistedTaskId:g1("lastSelectedTaskId"),cwdRepo:Y});if(!G){let j=await Wf();if(await FG(),await oq(j),await Bf(j),await DF(FZ(j))===null)console.error("kobe: failed to attach to the kobe-home session"),process.exitCode=1;return}let Z=G.worktreePath||await z.ensureWorktree(G.id),X=C1(G.id);await z.setActiveTask(G.id).catch(()=>{}),r1("lastSelectedTaskId",G.id);let Q=G.vendor;if(G.kind==="main"){let K=await bB(X)??xJ(g1("lastSelectedVendor"),uJ());if(K!==G.vendor)await z.setVendor(G.id,K).catch(()=>{}),Q=K}let f=CZ(G.repo,Z,{kind:"repo-init"});if(!await TX({name:X,cwd:Z,command:oJ(Q),taskId:G.id,vendor:Q,repo:G.repo,launchInit:f})){console.error(`kobe: tmux session ${X} failed to start (check the daemon log)`),process.exitCode=1;return}await FG(),await oq(X),await Bf(X);let B=await DF(FZ(X));if(B===null){console.error(`kobe: failed to attach to tmux session ${X}`),process.exitCode=1;return}if(B!==0&&!await V1(X)){console.error(`kobe: tmux session ${X} ended unexpectedly (attach exited ${B})`),process.exitCode=B;return}let V=z.getTask(G.id);if(V&&V.title===yz&&V.worktreePath)try{let j=await pG(V.worktreePath,V.vendor);if(j)await z.setTitle(V.id,j)}catch(j){console.error("[kobe] auto-title failed:",j)}}finally{z.dispose()}}var FF=k(()=>{zG();FJ();nY();sJ();qq();FX();NZ();F1();P1();i1();iq();RG();zJ()});var OF={};f1(OF,{startTui:()=>qE});async function qE(){p4();let{startDirectTmux:J}=await Promise.resolve().then(() => (FF(),MF));await J()}var AF=k(()=>{rf()});uH();i1();import{resolve as VW}from"path";MJ();function SW(){return[`kobe ${p0}`,"","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 RF=`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 fE(J){let z=J[0];if(z==="--help"||z==="-h"||z==="help"){process.stdout.write(RF);return}if(z==="--remote"){let{runAddRemote:Q}=await Promise.resolve().then(() => ($W(),lW));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 X=G(Y);if(X.added)console.log(`added ${X.path} (${X.total} saved repo${X.total===1?"":"s"} total)`);else console.log(`already saved: ${X.path}`);await
|
|
305
|
+
${RF}`),process.exit(2);let Y=VW(process.cwd(),z&&z.length>0?z:"."),{addSavedRepo:G,isGitRepo:Z}=await Promise.resolve().then(() => (F1(),oz));if(!Z(Y))process.stderr.write(`kobe add: "${z&&z.length>0?z:"."}" is not a git repository (resolved to ${Y}).
|
|
306
|
+
`),process.exit(1);let X=G(Y);if(X.added)console.log(`added ${X.path} (${X.total} saved repo${X.total===1?"":"s"} total)`);else console.log(`already saved: ${X.path}`);await BE(X.path)}var gF=`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 HE(J){let z=J[0];if(z==="--help"||z==="-h"||z==="help"){process.stdout.write(gF);return}if(z?.startsWith("-"))process.stderr.write(`kobe remove: unknown flag "${z}"
|
|
316
316
|
|
|
317
|
-
${
|
|
317
|
+
${gF}`),process.exit(2);let{getSavedRepos:Y,resolveRepoRoot:G}=await Promise.resolve().then(() => (F1(),oz)),Z=Y();if(Z.length===0){console.log("no saved projects to remove.");return}let X=z&&z.length>0?z:".",Q=Z.includes(X)?X:(()=>{let V=VW(process.cwd(),X),j=G(V);if(Z.includes(j))return j;if(Z.includes(V))return V;return null})();if(Q===null){process.stderr.write(`kobe remove: "${X}" is not a saved project.
|
|
318
318
|
|
|
319
319
|
Saved projects:
|
|
320
320
|
`);for(let V of Z)process.stderr.write(` ${V}
|
|
321
|
-
`);process.exit(1)}let{connectIfRunning:f}=await Promise.resolve().then(() => (FJ(),
|
|
322
|
-
`);function
|
|
321
|
+
`);process.exit(1)}let{connectIfRunning:f}=await Promise.resolve().then(() => (FJ(),Hf)),H=await f();try{if(H)await H.request("project.forget",{repo:Q});else await(await KW()).forgetProject(Q)}finally{H?.close()}let B=Y().length;console.log(`removed ${Q} (${B} saved repo${B===1?"":"s"} left)`)}async function BE(J){let z=await KW(),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 NF(z,J,Y,pY(void 0))}async function KW(){let{TaskIndexStore:J}=await Promise.resolve().then(() => (iX(),Cj)),{GitWorktreeManager:z}=await Promise.resolve().then(() => (kj(),rU)),{Orchestrator:Y}=await Promise.resolve().then(() => (FX(),oV)),G=new J;return await G.load(),new Y({store:G,worktrees:new z})}async function NF(J,z,Y,G){let{connectIfRunning:Z}=await Promise.resolve().then(() => (FJ(),Hf)),X=await Z();try{for(let Q of Y){let f=X?(await X.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{X?.close()}}var kF=["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 WW(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
|
+
${kF}
|
|
325
|
+
`),process.exit(2)}async function jE(J){let z,Y,G,Z=!1;for(let K=0;K<J.length;K++){let L=J[K];if(L==="--help"||L==="-h"||L==="help"){process.stdout.write(`${kF}
|
|
326
|
+
`);return}if(L==="--repo"){if(Y=J[++K],Y===void 0)WW("--repo requires a value")}else if(L==="--vendor"){if(G=J[++K],G===void 0)WW("--vendor requires a value")}else if(L==="--yes"||L==="-y")Z=!0;else if(L&&!L.startsWith("-")&&z===void 0)z=L;else WW(`unexpected argument "${L}"`)}let{resolveRepoRoot:X}=await Promise.resolve().then(() => (F1(),oz)),Q=X(VW(process.cwd(),Y&&Y.length>0?Y:".")),f=pY(G),H=await KW(),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||AQ(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
328
|
no worktrees match glob ${JSON.stringify(z)}`);return}if(!Z){console.log(`
|
|
329
|
-
${j.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await
|
|
330
|
-
`)}function kz(J){let z={};for(let Y=0;Y<J.length;Y++){let G=J[Y],Z=J[Y+1];if(Z===void 0)continue;if(G==="--task-id")z.taskId=Z,Y++;else if(G==="--worktree")z.worktree=Z,Y++;else if(G==="--target-pane")z.targetPane=Z,Y++;else if(G==="--vendor")z.vendor=Z,Y++;else if(G==="--preview")z.preview=Z,Y++;else if(G==="--session")z.session=Z,Y++;else if(G==="--repo")z.repo=Z,Y++;else if(G==="--initial-task-id")z.initialTaskId=Z,Y++;else if(G==="--action")z.action=Z,Y++;else if(G==="--window")z.windowId=Z,Y++;else if(G==="--cols")z.cols=Z,Y++;else if(G==="--rows")z.rows=Z,Y++;else if(G==="--status")z.status=Z,Y++;else if(G==="--client")z.client=Z,Y++}return z}async function
|
|
329
|
+
${j.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await NF(H,Q,j,f),console.log(`done \u2014 adopted ${j.length} worktree(s)`)}function CF(J){J.write(`${SW()}
|
|
330
|
+
`)}function kz(J){let z={};for(let Y=0;Y<J.length;Y++){let G=J[Y],Z=J[Y+1];if(Z===void 0)continue;if(G==="--task-id")z.taskId=Z,Y++;else if(G==="--worktree")z.worktree=Z,Y++;else if(G==="--target-pane")z.targetPane=Z,Y++;else if(G==="--vendor")z.vendor=Z,Y++;else if(G==="--preview")z.preview=Z,Y++;else if(G==="--session")z.session=Z,Y++;else if(G==="--repo")z.repo=Z,Y++;else if(G==="--initial-task-id")z.initialTaskId=Z,Y++;else if(G==="--action")z.action=Z,Y++;else if(G==="--window")z.windowId=Z,Y++;else if(G==="--cols")z.cols=Z,Y++;else if(G==="--rows")z.rows=Z,Y++;else if(G==="--status")z.status=Z,Y++;else if(G==="--client")z.client=Z,Y++}return z}async function WE(){let[,,...J]=process.argv,[z,...Y]=J;if(z==="--version"||z==="-v"||z==="version"){let{CURRENT_VERSION:Z}=await Promise.resolve().then(() => (MJ(),bW));console.log(`kobe ${Z}`);return}if(z==="--help"||z==="-h"||z==="help"){CF(process.stdout);return}if(z==="add"){await fE(Y);return}if(z==="remove"){await HE(Y);return}if(z==="completions"){let{runCompletionsSubcommand:Z}=await Promise.resolve().then(() => (eU(),tU));await Z(Y);return}if(z==="adopt"){await jE(Y);return}if(z==="export"){let{runExportSubcommand:Z}=await Promise.resolve().then(() => (Z4(),G4));await Z(Y);return}if(z==="repo"){let{runRepoSubcommand:Z}=await Promise.resolve().then(() => (f4(),q4));await Z(Y);return}if(z==="api"){let{runApiSubcommand:Z}=await Promise.resolve().then(() => (N4(),C4));await Z(Y);return}if(z==="update"){let{runUpdateSubcommand:Z}=await Promise.resolve().then(() => (T4(),I4));await Z(Y);return}if(z==="theme"){let{runThemeSubcommand:Z}=await Promise.resolve().then(() => (w4(),E4));await Z(Y);return}if(z==="feedback"){let{runFeedbackSubcommand:Z}=await Promise.resolve().then(() => (c4(),m4));await Z(Y);return}if(z==="daemon"){let{runDaemonSubcommand:Z}=await Promise.resolve().then(() => ($4(),l4));await Z(Y);return}if(z==="doctor"){let{runDoctorSubcommand:Z}=await Promise.resolve().then(() => (sf(),of));await Z(Y);return}if(z==="web"){let{runWebSubcommand:Z}=await Promise.resolve().then(() => (qD(),QD));await Z(Y);return}if(z==="reset"){let{runResetSubcommand:Z}=await Promise.resolve().then(() => (sf(),of));await Z(Y);return}if(z==="reload"){let{runReloadSubcommand:Z}=await Promise.resolve().then(() => (sf(),of));await Z(Y);return}if(z==="skill"){let{runSkillSubcommand:Z}=await Promise.resolve().then(() => (BD(),HD));await Z(Y);return}if(z==="hook"){let{runHookSubcommand:Z}=await Promise.resolve().then(() => ($j(),lj));await Z(Y);return}if(z==="new-chattab"){let Z=kz(Y),X=Z.session;if(!X)console.error("kobe new-chattab: --session <name> is required"),process.exit(2);let{windowIsSurface:Q}=await Promise.resolve().then(() => (P1(),xX));if(await Q(X))return;let f;if(Z.vendor!==void 0){let B=Z.vendor.trim(),{getCustomEngineIds:V}=await Promise.resolve().then(() => (F1(),oz)),{isBuiltinVendor:j}=await Promise.resolve().then(() => (i1(),OW));if(!(j(B)||V().includes(B))){let A=[...n1,...V()].join(", "),O=`kobe: unknown engine '${B}' (known: ${A})`,{runTmux:g}=await Promise.resolve().then(() => (P1(),xX));await g(["display-message","-t",X,O]),console.error(O),process.exit(2)}f=B;let{setPersistedString:L}=await Promise.resolve().then(() => (F1(),oz));L("lastSelectedVendor",f)}let{newChatTab:H}=await Promise.resolve().then(() => (zJ(),vJ));await H(X,f);return}if(z==="kill-sessions"){let{runTmux:Z,KOBE_TMUX_SOCKET:X}=await Promise.resolve().then(() => (P1(),xX)),Q=await Z(["kill-server"]);console.log(Q===0?`kobe: killed all tmux sessions on the \`${X}\` socket`:`kobe: no tmux sessions to kill on the \`${X}\` socket`);return}if(z==="quick-create"){let X=kz(Y).session;if(!X)console.error("kobe quick-create: --session <name> is required"),process.exit(2);let{quickCreate:Q}=await Promise.resolve().then(() => (zJ(),vJ));await Q(X);return}if(z==="focus-tasks"){let Z=kz(Y),X=Z.session;if(!X)console.error("kobe focus-tasks: --session <name> is required"),process.exit(2);let{windowIsSurface:Q}=await Promise.resolve().then(() => (P1(),xX));if(Z.windowId&&await Q(Z.windowId))return;let{selectTasksPane:f}=await Promise.resolve().then(() => (zJ(),vJ));await f(X,{windowId:Z.windowId});return}if(z==="heal-layout"){let X=kz(Y).session;if(!X)console.error("kobe heal-layout: --session <name> is required"),process.exit(2);let{healSessionLayout:Q}=await Promise.resolve().then(() => (zJ(),vJ)),{coalesceLayoutWork:f}=await Promise.resolve().then(() => (LZ(),aq));await f(X,"heal",()=>Q(X));return}if(z==="resync-window"){let Z=kz(Y),X=Z.session;if(!X)console.error("kobe resync-window: --session <name> is required"),process.exit(2);let Q=Number.parseInt(Z.cols??"",10),f=Number.parseInt(Z.rows??"",10),H=Number.isInteger(Q)&&Q>0&&Number.isInteger(f)&&f>0?{columns:Q,rows:f}:null,{resyncWindowToClient:B}=await Promise.resolve().then(() => (zJ(),vJ)),{coalesceLayoutWork:V}=await Promise.resolve().then(() => (LZ(),aq));await V(X,"resync",()=>B(X,{size:H,status:Z.status,clientName:Z.client}));return}if(z==="capture-layout"){let X=kz(Y).session;if(!X)console.error("kobe capture-layout: --session <name> is required"),process.exit(2);let{captureGlobalLayoutOnDrag:Q}=await Promise.resolve().then(() => (zJ(),vJ)),{coalesceLayoutWork:f,genAgeMs:H,RESIZE_GUARD_MS:B}=await Promise.resolve().then(() => (LZ(),aq));await f(X,"capture",async()=>{if(H(X,"resize")<B)return;await Q(X)});return}if(z==="layout"){let Z=kz(Y),X=Z.session;if(!X)console.error("kobe layout: --session <name> is required"),process.exit(2);let Q=Z.action;if(!Q||!new Set(["workspace-split","workspace-close","workspace-reset","tasks-toggle","tasks-restore","ops-toggle","terminal-toggle","zen-toggle","chat-tab-close"]).has(Q))console.error("kobe layout: --action must be one of workspace-split, workspace-close, workspace-reset, tasks-toggle, tasks-restore, ops-toggle, terminal-toggle, zen-toggle, chat-tab-close"),process.exit(2);let{runLayoutAction:H}=await Promise.resolve().then(() => (zJ(),vJ));await H(X,Q,{windowId:Z.windowId});return}if(z==="quick-task"){let Z=kz(Y),{startQuickTaskHost:X}=await Promise.resolve().then(() => (E3(),u3));await X({session:Z.session});return}if(z==="tasks"){let Z=kz(Y),{startTasksPane:X}=await Promise.resolve().then(() => (wM(),EM));await X({initialTaskId:Z.initialTaskId});return}if(z==="settings"){let{startSettingsHost:Z}=await Promise.resolve().then(() => (hM(),PM));await Z();return}if(z==="help-page"){let{startHelpHost:Z}=await Promise.resolve().then(() => (mM(),vM));await Z();return}if(z==="new-task"){let Z=kz(Y),{startNewTaskHost:X}=await Promise.resolve().then(() => (w9(),C3));await X({defaultRepo:Z.repo});return}if(z==="update-page"){let{startUpdateHost:Z}=await Promise.resolve().then(() => (dM(),cM));await Z();return}if(z==="ops"){let Z=kz(Y);if(!Z.worktree)console.error("kobe ops: --worktree <path> is required"),process.exit(2);if(Z.preview){let{startOpsPreview:Q}=await Promise.resolve().then(() => (jW(),BW));await Q({worktree:Z.worktree,relPath:Z.preview});return}let{startOpsHost:X}=await Promise.resolve().then(() => (jW(),BW));await X({taskId:Z.taskId??"",worktree:Z.worktree,targetPane:Z.targetPane??null,vendor:pY(Z.vendor)});return}if(z!==void 0)console.error(`kobe: unknown command '${z}'`),CF(process.stderr),process.exit(2);let{startTui:G}=await Promise.resolve().then(() => (AF(),OF));await G()}WE().catch((J)=>{console.error("kobe failed to start:",J),process.exit(1)});
|