@sma1lboy/rove 0.8.103 → 0.8.104

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 CHANGED
@@ -288,7 +288,7 @@ trust_level = "trusted"
288
288
  `)){if(!J.trim())continue;try{let{sessionId:X,sessionDir:z,workDir:G}=JSON.parse(J);if(X&&z&&G)Z.push({sessionId:X,sessionDir:z,workDir:G})}catch{}}return Z}async function dk($){let Z=await $.readFile(hL.join($.kimiDir(),"session_index.jsonl")).catch(()=>"");return BX0(Z)}function lk($){return hL.join($,"agents","main","wire.jsonl")}async function _R($,Z=VR){if(!$)return[];let J=[];for(let X of await dk(Z)){if(X.workDir!==$)continue;let z=await Z.stat(lk(X.sessionDir)).then((G)=>G.mtimeMs).catch(()=>null);if(z===null)continue;J.push({id:X.sessionId,mtimeMs:z})}return J.sort((X,z)=>X.mtimeMs-z.mtimeMs).map((X)=>X.id)}async function pk($,Z=VR){return await Z.stat($).then((J)=>J.mtimeMs).catch(()=>0)}async function CR($,Z=VR){if(!$)return null;let J=(await dk(Z)).find((z)=>z.sessionId===$);if(!J)return null;let X=lk(J.sessionDir);return await Z.stat(X).then(()=>X).catch(()=>null)}var VR;var nk=a(()=>{AQ();VR={kimiDir(){return process.env.KIMI_CODE_HOME?.trim()||hL.join(UX0(),".kimi-code")},async readFile($){return await DQ($)},stat:qX0}});import FX0 from"path";var uL,ik,ok,ak,rk;var sk=a(()=>{MR();bL();ck();nk();uL={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async transcriptPath(){return null},async latestTranscriptMtimeForWorktree(){return 0}},ik={async listSessionIdsForWorktree($){return[...await hH($)].sort((J,X)=>J.mtimeMs-X.mtimeMs).map((J)=>J.sessionId)},readHistory:($)=>bk($),async transcriptPath($,Z){return(await hH(Z)).find((X)=>X.sessionId===$)?.path??null},latestTranscriptMtimeForWorktree:($)=>yk($)},ok={listSessionIdsForWorktree:($)=>jk($),readHistory:($)=>_k($),transcriptPath:async($)=>await UR($)??null,latestTranscriptMtimeForWorktree:($)=>Vk($)},ak={listSessionIdsForWorktree:($)=>mk($),readHistory:($)=>uk($),async transcriptPath($){let Z=await LR($);return Z?FX0.join(Z,"events.jsonl"):null},latestTranscriptMtimeForWorktree:($)=>hk($)},rk={listSessionIdsForWorktree:($)=>_R($),readHistory:uL.readHistory,transcriptPath:($)=>CR($),async latestTranscriptMtimeForWorktree($){let J=(await _R($)).at(-1);if(!J)return 0;let X=await CR(J);return X?await pk(X):0}}});import{createHash as MX0}from"crypto";import{existsSync as NX0,mkdirSync as OX0,writeFileSync as LX0}from"fs";import{homedir as tk}from"os";import DR from"path";function jX0($,Z=tk()){let J=MX0("sha256").update($).digest("hex").slice(0,12);return DR.join(Z,".kimi-code","workspace-trust",`wd_${DR.basename($)}_${J}`)}function ek($,Z=tk()){let J=jX0($,Z);if(NX0(J))return;OX0(DR.dirname(J),{recursive:!0,mode:448}),LX0(J,JSON.stringify({root:$,trustedAt:Date.now()}),{mode:384})}var $v=()=>{};import{readFile as Jv,stat as VX0}from"fs/promises";class cL{supportsCompletionMarkers(){return!0}async latestCompletion($){return(await this.latestActivity($)).marker}async latestActivityInFile($){return null}}function Xv($){return E$($).createTurnDetector()}function Zv($,Z="claude",J=0){let X=null,z=0;for(let G of $.split(`
289
289
  `)){z++;let W=zv(G);if(!W)continue;let H=RR(W.message)?W.message:W;if(H.role!=="assistant")continue;if(!("content"in H))continue;let U=Yv(W,J),B={id:`claude:${Z}:${U}:${z}`,timestampMs:U,source:"claude"};if(!X||B.timestampMs>=X.timestampMs)X=B}return X}function AX0($){if($.type==="turn.completed")return!0;if($.type!=="event_msg")return!1;let Z=RR($.payload)?$.payload:void 0;return typeof Z?.type==="string"&&DX0.has(Z.type)}function PX0($,Z="codex"){let J=null,X=0;for(let z of $.split(`
290
290
  `)){X++;let G=zv(z);if(!G||!AX0(G))continue;let W=Yv(G,0),H={id:`codex:${Z}:${W}:${X}`,timestampMs:W,source:"codex"};if(!J||H.timestampMs>=J.timestampMs)J=H}return J}function zv($){let Z=$.trim();if(!Z)return null;try{let J=JSON.parse(Z);return RR(J)?J:null}catch{return null}}function Yv($,Z){let J=typeof $.timestamp==="string"?Date.parse($.timestamp):Number.NaN;return Number.isFinite(J)?J:Z}function RR($){return typeof $==="object"&&$!==null&&!Array.isArray($)}var Qv=($)=>VX0($).then((Z)=>Z.mtimeMs,()=>0),_X0,AR,CX0,PR,uK,DX0;var TR=a(()=>{MR();bL();A2();_X0={listSessionFiles:($)=>hH($),readFile:($)=>Jv($,"utf8"),statMtimeMs:Qv};AR=class AR extends cL{deps;vendor="claude";cache=new Map;constructor($=_X0){super();this.deps=$}async latestActivity($){let Z=await this.deps.listSessionFiles($),J=Z[0]?.mtimeMs??0,X=null,z=new Map;for(let G of Z.slice(0,4)){let W=this.cache.get(G.path),H;if(W&&G.mtimeMs>0&&W.mtimeMs===G.mtimeMs)H=W.marker;else{let U=await this.deps.readFile(G.path).catch(()=>"");H=Zv(U,G.path,G.mtimeMs)}if(z.set(G.path,{mtimeMs:G.mtimeMs,marker:H}),H&&(!X||H.timestampMs>X.timestampMs))X=H}return this.cache=z,{marker:X,mtimeMs:J}}async latestActivityInFile($){let Z=await(this.deps.statMtimeMs??Qv)($);if(Z===0)return null;let J=await this.deps.readFile($).catch(()=>"");return{marker:Zv(J,$,Z),mtimeMs:Z}}};CX0={findLatestRollout:($)=>BR($),readFile:($)=>Jv($,"utf8")};PR=class PR extends cL{deps;vendor="codex";cache=null;constructor($=CX0){super();this.deps=$}async latestActivity($){if(!$)return{marker:null,mtimeMs:0};let Z=await this.deps.findLatestRollout($);if(!Z)return{marker:null,mtimeMs:0};if(this.cache&&this.cache.path===Z.path&&Z.mtimeMs>0&&this.cache.mtimeMs===Z.mtimeMs)return{marker:this.cache.marker,mtimeMs:Z.mtimeMs};let J=await this.deps.readFile(Z.path).catch(()=>"");if(!J)return{marker:null,mtimeMs:Z.mtimeMs};let X=PX0(J,Z.path);return this.cache={path:Z.path,mtimeMs:Z.mtimeMs,marker:X},{marker:X,mtimeMs:Z.mtimeMs}}};uK=class uK extends cL{vendor;constructor($){super();this.vendor=$}supportsCompletionMarkers(){return!1}async latestActivity(){return{marker:null,mtimeMs:0}}};DX0=new Set(["task_complete","turn_complete","turn_aborted"])});function RX0($){return{vendor:$,builtin:!1,displayName:$,defaultCommand:[$],history:uL,detectAccount:async()=>({binary:{found:!1,error:"custom engine: Rove has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new cK($),createTurnDetector:()=>new uK($)}}function E$($){return u2($)?SR[$]:RX0($)}function Gv($){return E$($).history.readHistory!==uL.readHistory}function IR($){let Z=E$($).terminalTitle?.statusPrefixes;return Z&&Z.length>0?Z:Wv}function SQ($,Z){let J=Z?IR(Z):Wv;for(let X of[...J].sort((z,G)=>G.length-z.length)){if(!$.startsWith(X))continue;let z=$.slice(X.length).trimStart();if(z.length===0)return $;return z}return $}function dL($,Z){let J=E$($).terminalTitle,X=J?.workingPrefixes;if(J?.ownsStatus!==!0||!X||X.length===0)return null;let z=Z.trim();if(z.length===0)return null;return X.some((G)=>z.startsWith(G))?"working":"rest"}function Hv(){return Object.values(SR).filter(($)=>$.quotaUsage).map(($)=>$.vendor)}var SR,Wv;var A2=a(()=>{c2();IJ();ub();ob();$k();Jk();zk();Gk();Pk();Sk();sk();ER();$v();TR();SR={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:ik,detectAccount:($)=>fH($),createHookAdapter:()=>new eP,createTurnDetector:()=>new AR,capabilities:mb,identity:hb,trustWorktree:Zk,terminalTitle:{ownsStatus:!0,statusPrefixes:["\u2733","\u2802","\u2810","\u25D0","\u25D1"],workingPrefixes:["\u2802","\u2810","\u25D0","\u25D1"]},quotaUsage:()=>eb()},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:ok,detectAccount:($)=>gH($),createHookAdapter:()=>new XR,createTurnDetector:()=>new PR,capabilities:Xk,identity:Qk,trustWorktree:Tk,terminalTitle:{ownsStatus:!0,launchArgs:["-c",'tui.terminal_title=["activity","thread-title"]'],statusPrefixes:["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],workingPrefixes:["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]},quotaUsage:()=>Ak()},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:ak,detectAccount:($)=>yH($),createHookAdapter:()=>new cK("copilot"),createTurnDetector:()=>new uK("copilot")},kimi:{vendor:"kimi",builtin:!0,displayName:"Kimi",defaultCommand:["kimi"],firstMessageDelivery:"paste",processNames:["kimi-co"],trustWorktree:ek,history:rk,detectAccount:($)=>EL($),createHookAdapter:()=>new cK("kimi"),createTurnDetector:()=>new uK("kimi")}};Wv=[...new Set(Object.values(SR).flatMap(($)=>$.terminalTitle?.statusPrefixes??[]))]});function wR($){return E$($).createHookAdapter()}class cK{vendor;constructor($){this.vendor=$}supportsHooks(){return!1}globalSettingsPath(){return""}activityDetailFromPayload(){return}sessionFromPayload(){return}async installActivityHooks(){}async removeActivityHooks(){}supportsWorktreeSync(){return!1}async removeWorktreeSyncHook(){}async installWorktreeWatchHook(){}async removeWorktreeWatchHook(){}}var ER=a(()=>{A2()});function lL($){return TX0.includes($)}function qv($){return SX0.includes($)}var TX0,SX0;var xR=a(()=>{TX0=["session-start","turn-start","turn-complete","turn-failed","turn-interrupted","awaiting-input","session-end","tool-pre","tool-post","tool-failed","pre-compact","post-compact","subagent-start","subagent-stop"];SX0=["session-start","turn-start","turn-complete","turn-failed","turn-interrupted","awaiting-input","session-end"]});var Cv={};g$(Cv,{runHookSubcommand:()=>gX0,readTextWithTimeout:()=>Fv,parseWorktreeRemovePath:()=>Lv,parseWorktreeAddPath:()=>Ov,ensureGlobalKobeHooks:()=>gR});import{homedir as IX0}from"os";import{join as Kv,resolve as fR}from"path";async function Fv($,Z=EX0){let J;try{return await Promise.race([$(),new Promise((X)=>{J=setTimeout(()=>X(""),Z)})])}finally{if(J!==void 0)clearTimeout(J)}}async function Mv(){try{let $=await Fv(()=>Bun.stdin.text());if(!$.trim())return{};let Z=JSON.parse($);return Z&&typeof Z==="object"&&!Array.isArray(Z)?Z:{}}catch{return{}}}function Uv($,Z){for(let J=0;J<$.length;J++){if($[J]===Z)return $[J+1];if($[J].startsWith(`${Z}=`))return $[J].slice(Z.length+1)}return}function xX0($){return!!$&&typeof $==="object"&&!Array.isArray($)}function Nv($){let Z=[],J=/"([^"]*)"|'([^']*)'|(\S+)/g,X;while((X=J.exec($))!==null)Z.push(X[1]??X[2]??X[3]??"");return Z}function Ov($){let Z=Nv($),J=new Set(["-b","-B","--reason"]);for(let X=0;X+1<Z.length;X++){if(Z[X]!=="worktree"||Z[X+1]!=="add")continue;let z=X+2;while(z<Z.length){let G=Z[z];if(G==="&&"||G==="||"||G===";"||G==="|"||G===">"||G===">>")break;if(G.startsWith("-")){z+=J.has(G)?2:1;continue}return G}}return}function Lv($){let Z=Nv($);for(let J=0;J+1<Z.length;J++){if(Z[J]!=="worktree"||Z[J+1]!=="remove")continue;let X=J+2;while(X<Z.length){let z=Z[X];if(z==="&&"||z==="||"||z===";"||z==="|"||z===">"||z===">>")break;if(z.startsWith("-")){X+=1;continue}return z}}return}async function fX0(){let $=await Mv(),Z=xX0($.tool_input)?$.tool_input:{},J=typeof Z.command==="string"?Z.command:"";if(!J.includes("worktree"))return;let X=typeof $.cwd==="string"&&$.cwd?$.cwd:process.cwd(),z=Ov(J),G=z?void 0:Lv(J);if(!z&&!G)return;let W=await BQ();if(!W)return;try{if(z)await W.request("worktree.reconcile",{cwd:X,worktreePath:fR(X,z)});else if(G)await W.request("worktree.archiveRemoved",{worktreePath:fR(X,G)})}finally{W.close()}}async function gX0($){let[Z,...J]=$;if(Z==="setup"){await vX0(J);return}if(Z===wX0){try{await fX0()}catch{}return}try{if(!Z||!lL(Z))return;let X=await Mv(),z=Uv(J,"--task-id"),G=typeof X.cwd==="string"&&X.cwd?X.cwd:process.cwd(),W=process.env.KOBE_TASK_ID,H=process.env.KOBE_TAB_ID,U=Uv(J,"--engine"),B=jv().filter((V)=>!U||V.vendor===U),N;for(let V of B)if(N=V.activityDetailFromPayload(Z,X),N)break;let L;for(let V of B)if(L=V.sessionFromPayload(X),L)break;let M=await BQ();if(!M)return;try{let V=z??W;await M.request("engine.reportEvent",{...V?{taskId:V}:{cwd:G},kind:Z,...U?{engine:U}:{},...H?{tabId:H}:{},...N?{detail:N}:{},...L?{sessionId:L.sessionId}:{},...L?.transcriptPath?{transcriptPath:L.transcriptPath}:{}})}finally{M.close()}}catch(X){if(process.env.KOBE_HOOK_DEBUG)console.error(`[rove hook] ${Z} failed:`,X instanceof Error?X.message:String(X))}}function yX0(){return T8.map(($)=>wR($)).filter(($)=>$.supportsWorktreeSync())}function jv(){return T8.map(($)=>wR($)).filter(($)=>$.supportsHooks())}function Vv(){return Kv(IX0(),".claude","settings.json")}function bX0($){if(!$||$==="off")return;if($==="global")return Vv();if($.startsWith("repo:"))return Kv(fR($.slice(5)),".claude","settings.json");return $}async function gR(){try{let $=kX0();for(let Z of jv()){let J=Z.globalSettingsPath();if(!J)continue;await Z.installActivityHooks(J,{toolEvents:$}),await Z.installWorktreeWatchHook(J)}await _v()}catch{}}function kX0(){try{for(let $ of j5().plugins){if(!$.enabled)continue;try{if(XZ($.root).manifest.events.some((Z)=>Z.on.startsWith("tool.")))return!0}catch{}}}catch{}return!1}async function _v(){let $=yX0();if($.length===0)return;let Z=d2(Bv),J=new Set([Vv()]),X=bX0(Z);if(X)J.add(X);for(let z of $)for(let G of J)await z.removeWorktreeSyncHook(G);if(Z!=="off")o3(Bv,"off")}async function vX0($){await _v(),process.stdout.write(["rove 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 Rove previously installed has been removed.","","Sync is now automatic: a `claude --worktree` (or any session) started in a","worktree under a repo Rove already tracks is adopted as a task on launch.","To adopt existing worktrees on demand, use the New Task dialog or `rove adopt`.",""].join(`
291
- `))}var EX0=500,wX0="worktree-created",Bv="externalWorktreeSync";var yR=a(()=>{D7();jQ();TJ();ER();xR();b4();c2()});var pL;var Dv=a(()=>{pL={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/rove",version:"0.8.103",description:"Rove \u2014 the terminal-native agent multiplexer",type:"module",packageManager:"bun@1.3.13",bin:{kobe:"dist/cli/kobe.js",rove:"dist/cli/rove.js"},files:["dist/cli","dist/web-ui","dist/skills","dist/*.wav","README.md","LICENSE"],publishConfig:{access:"public"},repository:{type:"git",url:"git+https://github.com/Sma1lboy/rove.git"},homepage:"https://github.com/Sma1lboy/rove#readme",bugs:{url:"https://github.com/Sma1lboy/rove/issues"},engines:{bun:">=1.3.11"},scripts:{dev:"ROVE_DEV=1 bun --conditions=browser ./src/cli/rove.ts","dev:kobe":"KOBE_DEV=1 bun --conditions=browser ./src/cli/kobe.ts","dev:mock":"KOBE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:mock-react":"KOBE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:mock-react-task-dialogs":"KOBE_DEV=1 bun ./src/tui-react/component/mock-dialogs-host.tsx","dev:mock-react-filetree":"KOBE_DEV=1 bun ./src/tui-react/panes/filetree/mock-host.tsx","dev:mock-react-sidebar":"KOBE_DEV=1 bun ./src/tui-react/panes/sidebar/mock-host.tsx","dev:mock-react-terminal":"KOBE_DEV=1 bun ./src/tui-react/panes/terminal/mock-host.tsx","dev:mock-react-dialogs":"KOBE_DEV=1 bun ./src/tui-react/mock/dialogs-host.tsx","dev:mock-react-workspace":"KOBE_DEV=1 bun ./src/tui-react/workspace/mock-host.tsx","dev:sandbox":"bun run scripts/dev-sandbox.ts run","dev:sandbox:reset":"bun run scripts/dev-sandbox.ts reset",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","perf:golden":"bun scripts/perf-golden.ts","pty:soak":"bun scripts/pty-soak.ts","test:fast":"vitest run --passWithNoTests --minWorkers=1 --maxWorkers=8","test:socket":"KOBE_INCLUDE_SOCKET=1 vitest run test/daemon --pool forks --minWorkers=1 --maxWorkers=4 --passWithNoTests","test:socket:coverage":"KOBE_INCLUDE_SOCKET=1 KOBE_COVERAGE_DAEMON=1 vitest run test/daemon --coverage --pool forks --minWorkers=1 --maxWorkers=4 --passWithNoTests","test:behavior":"KOBE_INCLUDE_BEHAVIOR=1 vitest run test/behavior --pool forks --minWorkers=1 --maxWorkers=1 --retry=2 --passWithNoTests","test:render":"bun test test/render --coverage --coverage-reporter=text --coverage-reporter=lcov --coverage-dir=coverage-render",coverage:"vitest run --coverage --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.4.3","@opentui/react":"0.4.3","@xterm/addon-serialize":"^0.14.0","@xterm/addon-unicode11":"^0.9.0","@xterm/headless":"^6.0.0","node-pty":"^1.1.0",react:"^19.2.8",ws:"^8.18.0"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/kobe-daemon":"0.7.14","@tsconfig/bun":"1.0.10","@types/bun":"1.3.14","@types/node":"25.6.2","@types/react":"^19.2.0","@vitest/coverage-v8":"2.1.9",knip:"^6.14.2","kobe-web":"workspace:*","react-devtools-core":"^7.0.1",typescript:"5.8.2",vitest:"2.1.9"},trustedDependencies:[]}});var Pv={};g$(Pv,{repoSlug:()=>_Y,releasePageUrl:()=>uR,recommendedGlobalInstallCommand:()=>vR,isNewerSemver:()=>bR,fetchReleaseSummaries:()=>lK,fetchReleaseNotesRange:()=>hR,fetchReleaseNotes:()=>mR,compareSemver:()=>K3,checkLatestVersion:()=>CY,breakingVersionsCrossed:()=>dK,UPDATE_SCRIPT_URL:()=>nL,UPDATE_COMMAND:()=>WZ,PACKAGE_NAME:()=>kR,CURRENT_VERSION:()=>D$,BREAKING_VERSIONS:()=>wJ});function _Y(){let $=pL.repository?.url;if(!$)return null;let Z=$.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!Z||!Z[1]||!Z[2])return null;return`${Z[1]}/${Z[2]}`}function vR(){return`npm install -g ${kR}@latest`}function dK($,Z,J=wJ){let[X,z]=K3($,Z)<=0?[$,Z]:[Z,$];return J.filter((G)=>K3(G,X)>0&&K3(G,z)<=0)}async function hX0($){let Z=new AbortController,J=setTimeout(()=>Z.abort(),iL);try{let X=$.replace("/","%2F"),z=await fetch(`https://registry.npmjs.org/${X}/latest`,{signal:Z.signal,headers:{accept:"application/json"}});if(!z.ok)return null;let G=await z.json();if(typeof G.version!=="string")return null;return G.version}catch{return null}finally{clearTimeout(J)}}function bR($,Z){return K3($,Z)>0}function K3($,Z){let J=(G)=>G.split("-")[0]??G,X=J($).split(".").map((G)=>Number.parseInt(G,10)),z=J(Z).split(".").map((G)=>Number.parseInt(G,10));for(let G=0;G<3;G++){let W=X[G]??0,H=z[G]??0;if(Number.isNaN(W)||Number.isNaN(H))return 0;if(W>H)return 1;if(W<H)return-1}return 0}async function CY($={}){let Z=process.env.KOBE_FAKE_UPDATE;if(Z)return{current:D$,latest:Z,hasUpdate:bR(Z,D$)};if(BH()&&!$.force)return null;let J=await hX0(kR);if(!J)return null;return{current:D$,latest:J,hasUpdate:bR(J,D$)}}function Av($){if(typeof $!=="string")return null;return $.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function mR($){let Z=_Y();if(!Z)return null;let J=`v${$}`,X=new AbortController,z=setTimeout(()=>X.abort(),iL);try{let G=await fetch(`https://api.github.com/repos/${Z}/releases/tags/${J}`,{signal:X.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!G.ok)return null;let W=await G.json();if(typeof W.body!=="string"||typeof W.html_url!=="string")return null;return{body:W.body,url:W.html_url,version:$}}catch{return null}finally{clearTimeout(z)}}async function hR($){let Z=_Y();if(!Z)return[];let J=$.limit??100,X=new AbortController,z=setTimeout(()=>X.abort(),iL);try{let G=await fetch(`https://api.github.com/repos/${Z}/releases?per_page=${J}`,{signal:X.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!G.ok)return[];let W=await G.json();if(!Array.isArray(W))return[];return W.map((H)=>{let U=Av(H.tag_name);if(!U||typeof H.html_url!=="string"||typeof H.body!=="string")return null;if(K3(U,$.current)<=0)return null;if(K3(U,$.latest)>0)return null;return{version:U,url:H.html_url,body:H.body}}).filter((H)=>H!==null)}catch{return[]}finally{clearTimeout(z)}}async function lK($=12){let Z=_Y();if(!Z)return[];let J=new AbortController,X=setTimeout(()=>J.abort(),iL);try{let z=await fetch(`https://api.github.com/repos/${Z}/releases?per_page=${$}`,{signal:J.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!z.ok)return[];let G=await z.json();if(!Array.isArray(G))return[];return G.map((W)=>{let H=Av(W.tag_name);if(!H||typeof W.html_url!=="string")return null;return{version:H,url:W.html_url}}).filter((W)=>W!==null)}catch{return[]}finally{clearTimeout(X)}}function uR($){let Z=_Y();if(!Z)return null;return`https://github.com/${Z}/releases/tag/v${$}`}var D$,kR,nL="https://raw.githubusercontent.com/Sma1lboy/rove/main/scripts/update.sh",WZ,wJ,iL=3000;var x8=a(()=>{Dv();L5();D$=pL.version,kR=pL.name;WZ=`curl -fsSL ${nL} | sh`;wJ=[]});var Tv={};g$(Tv,{stampResetGate:()=>oL,resetGateBlockers:()=>Rv,enforceResetGate:()=>dR,LAST_RUN_VERSION_KEY:()=>cR});function Rv($,Z=D$,J=wJ){if(typeof $!=="string"||$.length===0)return[];let[X,z]=K3($,Z)<=0?[$,Z]:[Z,$];return J.filter((G)=>K3(G,X)>0&&K3(G,z)<=0)}function dR(){let $=Q$(),Z=M4()[cR],J=Rv(Z);if(J.length>0){let X=typeof Z==="string"?Z:"unknown";console.error([`${$} ${D$}: cannot start \u2014 version ${J.join(", ")} introduced breaking changes`,`(last run: ${X}). Your daemon/session state may be incompatible.`,"","Run:",` ${$} reset # stop daemon + PTY host + sessions (tasks kept)`,` ${$} reset --hard # additionally wipe the task index + UI state`,"","Then relaunch Rove. Worktrees are never touched."].join(`
291
+ `))}var EX0=500,wX0="worktree-created",Bv="externalWorktreeSync";var yR=a(()=>{D7();jQ();TJ();ER();xR();b4();c2()});var pL;var Dv=a(()=>{pL={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/rove",version:"0.8.104",description:"Rove \u2014 the terminal-native agent multiplexer",type:"module",packageManager:"bun@1.3.13",bin:{kobe:"dist/cli/kobe.js",rove:"dist/cli/rove.js"},files:["dist/cli","dist/web-ui","dist/skills","dist/*.wav","README.md","LICENSE"],publishConfig:{access:"public"},repository:{type:"git",url:"git+https://github.com/Sma1lboy/rove.git"},homepage:"https://github.com/Sma1lboy/rove#readme",bugs:{url:"https://github.com/Sma1lboy/rove/issues"},engines:{bun:">=1.3.11"},scripts:{dev:"ROVE_DEV=1 bun --conditions=browser ./src/cli/rove.ts","dev:kobe":"KOBE_DEV=1 bun --conditions=browser ./src/cli/kobe.ts","dev:mock":"KOBE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:mock-react":"KOBE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:mock-react-task-dialogs":"KOBE_DEV=1 bun ./src/tui-react/component/mock-dialogs-host.tsx","dev:mock-react-filetree":"KOBE_DEV=1 bun ./src/tui-react/panes/filetree/mock-host.tsx","dev:mock-react-sidebar":"KOBE_DEV=1 bun ./src/tui-react/panes/sidebar/mock-host.tsx","dev:mock-react-terminal":"KOBE_DEV=1 bun ./src/tui-react/panes/terminal/mock-host.tsx","dev:mock-react-dialogs":"KOBE_DEV=1 bun ./src/tui-react/mock/dialogs-host.tsx","dev:mock-react-workspace":"KOBE_DEV=1 bun ./src/tui-react/workspace/mock-host.tsx","dev:sandbox":"bun run scripts/dev-sandbox.ts run","dev:sandbox:reset":"bun run scripts/dev-sandbox.ts reset",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","perf:golden":"bun scripts/perf-golden.ts","pty:soak":"bun scripts/pty-soak.ts","test:fast":"vitest run --passWithNoTests --minWorkers=1 --maxWorkers=8","test:socket":"KOBE_INCLUDE_SOCKET=1 vitest run test/daemon --pool forks --minWorkers=1 --maxWorkers=4 --passWithNoTests","test:socket:coverage":"KOBE_INCLUDE_SOCKET=1 KOBE_COVERAGE_DAEMON=1 vitest run test/daemon --coverage --pool forks --minWorkers=1 --maxWorkers=4 --passWithNoTests","test:behavior":"KOBE_INCLUDE_BEHAVIOR=1 vitest run test/behavior --pool forks --minWorkers=1 --maxWorkers=1 --retry=2 --passWithNoTests","test:render":"bun test test/render --coverage --coverage-reporter=text --coverage-reporter=lcov --coverage-dir=coverage-render",coverage:"vitest run --coverage --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.4.3","@opentui/react":"0.4.3","@xterm/addon-serialize":"^0.14.0","@xterm/addon-unicode11":"^0.9.0","@xterm/headless":"^6.0.0","node-pty":"^1.1.0",react:"^19.2.8",ws:"^8.18.0"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/kobe-daemon":"0.7.14","@tsconfig/bun":"1.0.10","@types/bun":"1.3.14","@types/node":"25.6.2","@types/react":"^19.2.0","@vitest/coverage-v8":"2.1.9",knip:"^6.14.2","kobe-web":"workspace:*","react-devtools-core":"^7.0.1",typescript:"5.8.2",vitest:"2.1.9"},trustedDependencies:[]}});var Pv={};g$(Pv,{repoSlug:()=>_Y,releasePageUrl:()=>uR,recommendedGlobalInstallCommand:()=>vR,isNewerSemver:()=>bR,fetchReleaseSummaries:()=>lK,fetchReleaseNotesRange:()=>hR,fetchReleaseNotes:()=>mR,compareSemver:()=>K3,checkLatestVersion:()=>CY,breakingVersionsCrossed:()=>dK,UPDATE_SCRIPT_URL:()=>nL,UPDATE_COMMAND:()=>WZ,PACKAGE_NAME:()=>kR,CURRENT_VERSION:()=>D$,BREAKING_VERSIONS:()=>wJ});function _Y(){let $=pL.repository?.url;if(!$)return null;let Z=$.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!Z||!Z[1]||!Z[2])return null;return`${Z[1]}/${Z[2]}`}function vR(){return`npm install -g ${kR}@latest`}function dK($,Z,J=wJ){let[X,z]=K3($,Z)<=0?[$,Z]:[Z,$];return J.filter((G)=>K3(G,X)>0&&K3(G,z)<=0)}async function hX0($){let Z=new AbortController,J=setTimeout(()=>Z.abort(),iL);try{let X=$.replace("/","%2F"),z=await fetch(`https://registry.npmjs.org/${X}/latest`,{signal:Z.signal,headers:{accept:"application/json"}});if(!z.ok)return null;let G=await z.json();if(typeof G.version!=="string")return null;return G.version}catch{return null}finally{clearTimeout(J)}}function bR($,Z){return K3($,Z)>0}function K3($,Z){let J=(G)=>G.split("-")[0]??G,X=J($).split(".").map((G)=>Number.parseInt(G,10)),z=J(Z).split(".").map((G)=>Number.parseInt(G,10));for(let G=0;G<3;G++){let W=X[G]??0,H=z[G]??0;if(Number.isNaN(W)||Number.isNaN(H))return 0;if(W>H)return 1;if(W<H)return-1}return 0}async function CY($={}){let Z=process.env.KOBE_FAKE_UPDATE;if(Z)return{current:D$,latest:Z,hasUpdate:bR(Z,D$)};if(BH()&&!$.force)return null;let J=await hX0(kR);if(!J)return null;return{current:D$,latest:J,hasUpdate:bR(J,D$)}}function Av($){if(typeof $!=="string")return null;return $.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function mR($){let Z=_Y();if(!Z)return null;let J=`v${$}`,X=new AbortController,z=setTimeout(()=>X.abort(),iL);try{let G=await fetch(`https://api.github.com/repos/${Z}/releases/tags/${J}`,{signal:X.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!G.ok)return null;let W=await G.json();if(typeof W.body!=="string"||typeof W.html_url!=="string")return null;return{body:W.body,url:W.html_url,version:$}}catch{return null}finally{clearTimeout(z)}}async function hR($){let Z=_Y();if(!Z)return[];let J=$.limit??100,X=new AbortController,z=setTimeout(()=>X.abort(),iL);try{let G=await fetch(`https://api.github.com/repos/${Z}/releases?per_page=${J}`,{signal:X.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!G.ok)return[];let W=await G.json();if(!Array.isArray(W))return[];return W.map((H)=>{let U=Av(H.tag_name);if(!U||typeof H.html_url!=="string"||typeof H.body!=="string")return null;if(K3(U,$.current)<=0)return null;if(K3(U,$.latest)>0)return null;return{version:U,url:H.html_url,body:H.body}}).filter((H)=>H!==null)}catch{return[]}finally{clearTimeout(z)}}async function lK($=12){let Z=_Y();if(!Z)return[];let J=new AbortController,X=setTimeout(()=>J.abort(),iL);try{let z=await fetch(`https://api.github.com/repos/${Z}/releases?per_page=${$}`,{signal:J.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!z.ok)return[];let G=await z.json();if(!Array.isArray(G))return[];return G.map((W)=>{let H=Av(W.tag_name);if(!H||typeof W.html_url!=="string")return null;return{version:H,url:W.html_url}}).filter((W)=>W!==null)}catch{return[]}finally{clearTimeout(X)}}function uR($){let Z=_Y();if(!Z)return null;return`https://github.com/${Z}/releases/tag/v${$}`}var D$,kR,nL="https://raw.githubusercontent.com/Sma1lboy/rove/main/scripts/update.sh",WZ,wJ,iL=3000;var x8=a(()=>{Dv();L5();D$=pL.version,kR=pL.name;WZ=`curl -fsSL ${nL} | sh`;wJ=[]});var Tv={};g$(Tv,{stampResetGate:()=>oL,resetGateBlockers:()=>Rv,enforceResetGate:()=>dR,LAST_RUN_VERSION_KEY:()=>cR});function Rv($,Z=D$,J=wJ){if(typeof $!=="string"||$.length===0)return[];let[X,z]=K3($,Z)<=0?[$,Z]:[Z,$];return J.filter((G)=>K3(G,X)>0&&K3(G,z)<=0)}function dR(){let $=Q$(),Z=M4()[cR],J=Rv(Z);if(J.length>0){let X=typeof Z==="string"?Z:"unknown";console.error([`${$} ${D$}: cannot start \u2014 version ${J.join(", ")} introduced breaking changes`,`(last run: ${X}). Your daemon/session state may be incompatible.`,"","Run:",` ${$} reset # stop daemon + PTY host + sessions (tasks kept)`,` ${$} reset --hard # additionally wipe the task index + UI state`,"","Then relaunch Rove. Worktrees are never touched."].join(`
292
292
  `)),process.exit(1)}if(Z!==D$)oL()}function oL(){try{A7({[cR]:D$})}catch{}}var cR="app.lastRunVersion";var aL=a(()=>{P7();x8();o4()});import{existsSync as Iv,readFileSync as uX0}from"fs";import{homedir as cX0}from"os";import{join as Ev,resolve as Sv}from"path";import{fileURLToPath as dX0}from"url";function nR($=process.env){return`${Q$($)} skill install`}function rL(){let $=dX0(import.meta.url);return[Sv($,"../../../../../.agents/skills/kobe"),Sv($,"../../skills/rove")].find((J)=>Iv(Ev(J,"SKILL.md")))??null}function sL($={}){let Z=$.source!==void 0?$.source:rL(),J=$.agent===void 0?[]:typeof $.agent==="string"?[$.agent]:$.agent;return["skills","add",Z??pX0,"--skill",p3,...$.global===!1?[]:["--global"],...J.flatMap((X)=>["--agent",X])]}function DY($={}){return`npx ${sL($).join(" ")}`}async function iR($,Z){return await Bun.spawn(["npx",...sL({...$===void 0?{}:{agent:$},global:Z})],{stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited}function tL($={}){let Z=$.home??cX0(),J=$.cwd??process.cwd();return[Z,J].flatMap((X)=>lX0.map((z)=>Ev(X,z)))}function nX0($){let Z=$.match(/(?:rove|kobe)-skill-version:\s*(\d+)/);return Z?Number.parseInt(Z[1],10):null}function pK($){let Z=tL($).find((z)=>Iv(z));if(!Z)return{installed:!1,installedVersion:null,currentVersion:lR,stale:!1};let J=null;try{J=nX0(uX0(Z,"utf8"))}catch{J=null}let X=J===null||J<lR;return{installed:!0,installedVersion:J,currentVersion:lR,stale:X}}function iX0(){return new Promise(($)=>{process.stdin.resume(),process.stdin.once("data",(Z)=>{process.stdin.pause(),$(String(Z))})})}async function wv($={}){let Z=Q$(),J=nR(),X=pK();if(!X.installed){if(d2(pR)==="1")return;o3(pR,"1"),process.stderr.write(`
293
293
  ${Z}: the Rove agent skill isn't installed \u2014 install it so your coding agent can drive Rove via \`${Z} api\`:
294
294
  ${J}
@@ -302,7 +302,7 @@ ${Z}: your Rove agent skill is out of date (${G}; this Rove wants v${X.currentVe
302
302
  ${Z}: a new version of the Rove agent skill is available (${G} \u2192 v${X.currentVersion}).
303
303
  Update now? [y]es / [n]o / [d]on't notify for this version: `);let H=(await($.ask??iX0)()).trim().toLowerCase();if(H==="y"||H==="yes"){let U=await($.install??iR)();if(U===0)process.stderr.write(`${Z}: skill updated.
304
304
  `);else process.stderr.write(`${Z}: skill update failed (exit ${U}) \u2014 run \`${J}\` manually.
305
- `)}else if(H.startsWith("d"))o3(z,"1")}var lR=22,lX0,pX0="Sma1lboy/rove",pR="skillHintSeen";var nK=a(()=>{o4();GQ();b4();lX0=[".agents/skills/rove/SKILL.md",".claude/skills/rove/SKILL.md",".agents/skills/kobe/SKILL.md",".claude/skills/kobe/SKILL.md"]});var eL=()=>{};var q1=zY((oX0,$j)=>{(function(){function $(Z0,S0){Object.defineProperty(X.prototype,Z0,{get:function(){console.warn("%s(...) is deprecated in plain JavaScript React classes. %s",S0[0],S0[1])}})}function Z(Z0){if(Z0===null||typeof Z0!=="object")return null;return Z0=P0&&Z0[P0]||Z0["@@iterator"],typeof Z0==="function"?Z0:null}function J(Z0,S0){Z0=(Z0=Z0.constructor)&&(Z0.displayName||Z0.name)||"ReactClass";var e0=Z0+"."+S0;u0[e0]||(console.error("Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.",S0,Z0),u0[e0]=!0)}function X(Z0,S0,e0){this.props=Z0,this.context=S0,this.refs=G1,this.updater=e0||L0}function z(){}function G(Z0,S0,e0){this.props=Z0,this.context=S0,this.refs=G1,this.updater=e0||L0}function W(){}function H(Z0){return""+Z0}function U(Z0){try{H(Z0);var S0=!1}catch(l1){S0=!0}if(S0){S0=console;var e0=S0.error,U1=typeof Symbol==="function"&&Symbol.toStringTag&&Z0[Symbol.toStringTag]||Z0.constructor.name||"Object";return e0.call(S0,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",U1),H(Z0)}}function B(Z0){if(Z0==null)return null;if(typeof Z0==="function")return Z0.$$typeof===c0?null:Z0.displayName||Z0.name||null;if(typeof Z0==="string")return Z0;switch(Z0){case l:return"Fragment";case n:return"Profiler";case d:return"StrictMode";case J0:return"Suspense";case C0:return"SuspenseList";case v0:return"Activity"}if(typeof Z0==="object")switch(typeof Z0.tag==="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),Z0.$$typeof){case v:return"Portal";case s:return Z0.displayName||"Context";case G0:return(Z0._context.displayName||"Context")+".Consumer";case r:var S0=Z0.render;return Z0=Z0.displayName,Z0||(Z0=S0.displayName||S0.name||"",Z0=Z0!==""?"ForwardRef("+Z0+")":"ForwardRef"),Z0;case Q0:return S0=Z0.displayName||null,S0!==null?S0:B(Z0.type)||"Memo";case w0:S0=Z0._payload,Z0=Z0._init;try{return B(Z0(S0))}catch(e0){}}return null}function N(Z0){if(Z0===l)return"<>";if(typeof Z0==="object"&&Z0!==null&&Z0.$$typeof===w0)return"<...>";try{var S0=B(Z0);return S0?"<"+S0+">":"<...>"}catch(e0){return"<...>"}}function L(){var Z0=J1.A;return Z0===null?null:Z0.getOwner()}function M(){return Error("react-stack-top-frame")}function V(Z0){if(u1.call(Z0,"key")){var S0=Object.getOwnPropertyDescriptor(Z0,"key").get;if(S0&&S0.isReactWarning)return!1}return Z0.key!==void 0}function A(Z0,S0){function e0(){q$||(q$=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",S0))}e0.isReactWarning=!0,Object.defineProperty(Z0,"key",{get:e0,configurable:!0})}function _(){var Z0=B(this.type);return n5[Z0]||(n5[Z0]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),Z0=this.props.ref,Z0!==void 0?Z0:null}function C(Z0,S0,e0,U1,l1,w$){var C$=e0.ref;return Z0={$$typeof:H0,type:Z0,key:S0,props:e0,_owner:U1},(C$!==void 0?C$:null)!==null?Object.defineProperty(Z0,"ref",{enumerable:!1,get:_}):Object.defineProperty(Z0,"ref",{enumerable:!1,value:null}),Z0._store={},Object.defineProperty(Z0._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(Z0,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(Z0,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:l1}),Object.defineProperty(Z0,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:w$}),Object.freeze&&(Object.freeze(Z0.props),Object.freeze(Z0)),Z0}function y(Z0,S0){return S0=C(Z0.type,S0,Z0.props,Z0._owner,Z0._debugStack,Z0._debugTask),Z0._store&&(S0._store.validated=Z0._store.validated),S0}function E(Z0){S(Z0)?Z0._store&&(Z0._store.validated=1):typeof Z0==="object"&&Z0!==null&&Z0.$$typeof===w0&&(Z0._payload.status==="fulfilled"?S(Z0._payload.value)&&Z0._payload.value._store&&(Z0._payload.value._store.validated=1):Z0._store&&(Z0._store.validated=1))}function S(Z0){return typeof Z0==="object"&&Z0!==null&&Z0.$$typeof===H0}function R(Z0){var S0={"=":"=0",":":"=2"};return"$"+Z0.replace(/[=:]/g,function(e0){return S0[e0]})}function w(Z0,S0){return typeof Z0==="object"&&Z0!==null&&Z0.key!=null?(U(Z0.key),R(""+Z0.key)):S0.toString(36)}function b(Z0){switch(Z0.status){case"fulfilled":return Z0.value;case"rejected":throw Z0.reason;default:switch(typeof Z0.status==="string"?Z0.then(W,W):(Z0.status="pending",Z0.then(function(S0){Z0.status==="pending"&&(Z0.status="fulfilled",Z0.value=S0)},function(S0){Z0.status==="pending"&&(Z0.status="rejected",Z0.reason=S0)})),Z0.status){case"fulfilled":return Z0.value;case"rejected":throw Z0.reason}}throw Z0}function k(Z0,S0,e0,U1,l1){var w$=typeof Z0;if(w$==="undefined"||w$==="boolean")Z0=null;var C$=!1;if(Z0===null)C$=!0;else switch(w$){case"bigint":case"string":case"number":C$=!0;break;case"object":switch(Z0.$$typeof){case H0:case v:C$=!0;break;case w0:return C$=Z0._init,k(C$(Z0._payload),S0,e0,U1,l1)}}if(C$){C$=Z0,l1=l1(C$);var K4=U1===""?"."+w(C$,0):U1;return N0(l1)?(e0="",K4!=null&&(e0=K4.replace(qX,"$&/")+"/"),k(l1,S0,e0,"",function(S2){return S2})):l1!=null&&(S(l1)&&(l1.key!=null&&(C$&&C$.key===l1.key||U(l1.key)),e0=y(l1,e0+(l1.key==null||C$&&C$.key===l1.key?"":(""+l1.key).replace(qX,"$&/")+"/")+K4),U1!==""&&C$!=null&&S(C$)&&C$.key==null&&C$._store&&!C$._store.validated&&(e0._store.validated=2),l1=e0),S0.push(l1)),1}if(C$=0,K4=U1===""?".":U1+":",N0(Z0))for(var y$=0;y$<Z0.length;y$++)U1=Z0[y$],w$=K4+w(U1,y$),C$+=k(U1,S0,e0,w$,l1);else if(y$=Z(Z0),typeof y$==="function")for(y$===Z0.entries&&(l8||console.warn("Using Maps as children is not supported. Use an array of keyed ReactElements instead."),l8=!0),Z0=y$.call(Z0),y$=0;!(U1=Z0.next()).done;)U1=U1.value,w$=K4+w(U1,y$++),C$+=k(U1,S0,e0,w$,l1);else if(w$==="object"){if(typeof Z0.then==="function")return k(b(Z0),S0,e0,U1,l1);throw S0=String(Z0),Error("Objects are not valid as a React child (found: "+(S0==="[object Object]"?"object with keys {"+Object.keys(Z0).join(", ")+"}":S0)+"). If you meant to render a collection of children, use an array instead.")}return C$}function h(Z0,S0,e0){if(Z0==null)return Z0;var U1=[],l1=0;return k(Z0,U1,"","",function(w$){return S0.call(e0,w$,l1++)}),U1}function o(Z0){if(Z0._status===-1){var S0=Z0._ioInfo;S0!=null&&(S0.start=S0.end=performance.now()),S0=Z0._result;var e0=S0();if(e0.then(function(l1){if(Z0._status===0||Z0._status===-1){Z0._status=1,Z0._result=l1;var w$=Z0._ioInfo;w$!=null&&(w$.end=performance.now()),e0.status===void 0&&(e0.status="fulfilled",e0.value=l1)}},function(l1){if(Z0._status===0||Z0._status===-1){Z0._status=2,Z0._result=l1;var w$=Z0._ioInfo;w$!=null&&(w$.end=performance.now()),e0.status===void 0&&(e0.status="rejected",e0.reason=l1)}}),S0=Z0._ioInfo,S0!=null){S0.value=e0;var U1=e0.displayName;typeof U1==="string"&&(S0.name=U1)}Z0._status===-1&&(Z0._status=0,Z0._result=e0)}if(Z0._status===1)return S0=Z0._result,S0===void 0&&console.error(`lazy: Expected the result of a dynamic import() call. Instead received: %s
305
+ `)}else if(H.startsWith("d"))o3(z,"1")}var lR=23,lX0,pX0="Sma1lboy/rove",pR="skillHintSeen";var nK=a(()=>{o4();GQ();b4();lX0=[".agents/skills/rove/SKILL.md",".claude/skills/rove/SKILL.md",".agents/skills/kobe/SKILL.md",".claude/skills/kobe/SKILL.md"]});var eL=()=>{};var q1=zY((oX0,$j)=>{(function(){function $(Z0,S0){Object.defineProperty(X.prototype,Z0,{get:function(){console.warn("%s(...) is deprecated in plain JavaScript React classes. %s",S0[0],S0[1])}})}function Z(Z0){if(Z0===null||typeof Z0!=="object")return null;return Z0=P0&&Z0[P0]||Z0["@@iterator"],typeof Z0==="function"?Z0:null}function J(Z0,S0){Z0=(Z0=Z0.constructor)&&(Z0.displayName||Z0.name)||"ReactClass";var e0=Z0+"."+S0;u0[e0]||(console.error("Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.",S0,Z0),u0[e0]=!0)}function X(Z0,S0,e0){this.props=Z0,this.context=S0,this.refs=G1,this.updater=e0||L0}function z(){}function G(Z0,S0,e0){this.props=Z0,this.context=S0,this.refs=G1,this.updater=e0||L0}function W(){}function H(Z0){return""+Z0}function U(Z0){try{H(Z0);var S0=!1}catch(l1){S0=!0}if(S0){S0=console;var e0=S0.error,U1=typeof Symbol==="function"&&Symbol.toStringTag&&Z0[Symbol.toStringTag]||Z0.constructor.name||"Object";return e0.call(S0,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",U1),H(Z0)}}function B(Z0){if(Z0==null)return null;if(typeof Z0==="function")return Z0.$$typeof===c0?null:Z0.displayName||Z0.name||null;if(typeof Z0==="string")return Z0;switch(Z0){case l:return"Fragment";case n:return"Profiler";case d:return"StrictMode";case J0:return"Suspense";case C0:return"SuspenseList";case v0:return"Activity"}if(typeof Z0==="object")switch(typeof Z0.tag==="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),Z0.$$typeof){case v:return"Portal";case s:return Z0.displayName||"Context";case G0:return(Z0._context.displayName||"Context")+".Consumer";case r:var S0=Z0.render;return Z0=Z0.displayName,Z0||(Z0=S0.displayName||S0.name||"",Z0=Z0!==""?"ForwardRef("+Z0+")":"ForwardRef"),Z0;case Q0:return S0=Z0.displayName||null,S0!==null?S0:B(Z0.type)||"Memo";case w0:S0=Z0._payload,Z0=Z0._init;try{return B(Z0(S0))}catch(e0){}}return null}function N(Z0){if(Z0===l)return"<>";if(typeof Z0==="object"&&Z0!==null&&Z0.$$typeof===w0)return"<...>";try{var S0=B(Z0);return S0?"<"+S0+">":"<...>"}catch(e0){return"<...>"}}function L(){var Z0=J1.A;return Z0===null?null:Z0.getOwner()}function M(){return Error("react-stack-top-frame")}function V(Z0){if(u1.call(Z0,"key")){var S0=Object.getOwnPropertyDescriptor(Z0,"key").get;if(S0&&S0.isReactWarning)return!1}return Z0.key!==void 0}function A(Z0,S0){function e0(){q$||(q$=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",S0))}e0.isReactWarning=!0,Object.defineProperty(Z0,"key",{get:e0,configurable:!0})}function _(){var Z0=B(this.type);return n5[Z0]||(n5[Z0]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),Z0=this.props.ref,Z0!==void 0?Z0:null}function C(Z0,S0,e0,U1,l1,w$){var C$=e0.ref;return Z0={$$typeof:H0,type:Z0,key:S0,props:e0,_owner:U1},(C$!==void 0?C$:null)!==null?Object.defineProperty(Z0,"ref",{enumerable:!1,get:_}):Object.defineProperty(Z0,"ref",{enumerable:!1,value:null}),Z0._store={},Object.defineProperty(Z0._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(Z0,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(Z0,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:l1}),Object.defineProperty(Z0,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:w$}),Object.freeze&&(Object.freeze(Z0.props),Object.freeze(Z0)),Z0}function y(Z0,S0){return S0=C(Z0.type,S0,Z0.props,Z0._owner,Z0._debugStack,Z0._debugTask),Z0._store&&(S0._store.validated=Z0._store.validated),S0}function E(Z0){S(Z0)?Z0._store&&(Z0._store.validated=1):typeof Z0==="object"&&Z0!==null&&Z0.$$typeof===w0&&(Z0._payload.status==="fulfilled"?S(Z0._payload.value)&&Z0._payload.value._store&&(Z0._payload.value._store.validated=1):Z0._store&&(Z0._store.validated=1))}function S(Z0){return typeof Z0==="object"&&Z0!==null&&Z0.$$typeof===H0}function R(Z0){var S0={"=":"=0",":":"=2"};return"$"+Z0.replace(/[=:]/g,function(e0){return S0[e0]})}function w(Z0,S0){return typeof Z0==="object"&&Z0!==null&&Z0.key!=null?(U(Z0.key),R(""+Z0.key)):S0.toString(36)}function b(Z0){switch(Z0.status){case"fulfilled":return Z0.value;case"rejected":throw Z0.reason;default:switch(typeof Z0.status==="string"?Z0.then(W,W):(Z0.status="pending",Z0.then(function(S0){Z0.status==="pending"&&(Z0.status="fulfilled",Z0.value=S0)},function(S0){Z0.status==="pending"&&(Z0.status="rejected",Z0.reason=S0)})),Z0.status){case"fulfilled":return Z0.value;case"rejected":throw Z0.reason}}throw Z0}function k(Z0,S0,e0,U1,l1){var w$=typeof Z0;if(w$==="undefined"||w$==="boolean")Z0=null;var C$=!1;if(Z0===null)C$=!0;else switch(w$){case"bigint":case"string":case"number":C$=!0;break;case"object":switch(Z0.$$typeof){case H0:case v:C$=!0;break;case w0:return C$=Z0._init,k(C$(Z0._payload),S0,e0,U1,l1)}}if(C$){C$=Z0,l1=l1(C$);var K4=U1===""?"."+w(C$,0):U1;return N0(l1)?(e0="",K4!=null&&(e0=K4.replace(qX,"$&/")+"/"),k(l1,S0,e0,"",function(S2){return S2})):l1!=null&&(S(l1)&&(l1.key!=null&&(C$&&C$.key===l1.key||U(l1.key)),e0=y(l1,e0+(l1.key==null||C$&&C$.key===l1.key?"":(""+l1.key).replace(qX,"$&/")+"/")+K4),U1!==""&&C$!=null&&S(C$)&&C$.key==null&&C$._store&&!C$._store.validated&&(e0._store.validated=2),l1=e0),S0.push(l1)),1}if(C$=0,K4=U1===""?".":U1+":",N0(Z0))for(var y$=0;y$<Z0.length;y$++)U1=Z0[y$],w$=K4+w(U1,y$),C$+=k(U1,S0,e0,w$,l1);else if(y$=Z(Z0),typeof y$==="function")for(y$===Z0.entries&&(l8||console.warn("Using Maps as children is not supported. Use an array of keyed ReactElements instead."),l8=!0),Z0=y$.call(Z0),y$=0;!(U1=Z0.next()).done;)U1=U1.value,w$=K4+w(U1,y$++),C$+=k(U1,S0,e0,w$,l1);else if(w$==="object"){if(typeof Z0.then==="function")return k(b(Z0),S0,e0,U1,l1);throw S0=String(Z0),Error("Objects are not valid as a React child (found: "+(S0==="[object Object]"?"object with keys {"+Object.keys(Z0).join(", ")+"}":S0)+"). If you meant to render a collection of children, use an array instead.")}return C$}function h(Z0,S0,e0){if(Z0==null)return Z0;var U1=[],l1=0;return k(Z0,U1,"","",function(w$){return S0.call(e0,w$,l1++)}),U1}function o(Z0){if(Z0._status===-1){var S0=Z0._ioInfo;S0!=null&&(S0.start=S0.end=performance.now()),S0=Z0._result;var e0=S0();if(e0.then(function(l1){if(Z0._status===0||Z0._status===-1){Z0._status=1,Z0._result=l1;var w$=Z0._ioInfo;w$!=null&&(w$.end=performance.now()),e0.status===void 0&&(e0.status="fulfilled",e0.value=l1)}},function(l1){if(Z0._status===0||Z0._status===-1){Z0._status=2,Z0._result=l1;var w$=Z0._ioInfo;w$!=null&&(w$.end=performance.now()),e0.status===void 0&&(e0.status="rejected",e0.reason=l1)}}),S0=Z0._ioInfo,S0!=null){S0.value=e0;var U1=e0.displayName;typeof U1==="string"&&(S0.name=U1)}Z0._status===-1&&(Z0._status=0,Z0._result=e0)}if(Z0._status===1)return S0=Z0._result,S0===void 0&&console.error(`lazy: Expected the result of a dynamic import() call. Instead received: %s
306
306
 
307
307
  Your code should look like:
308
308
  const MyComponent = lazy(() => import('./MyComponent'))
@@ -651,11 +651,11 @@ ${l.join(`
651
651
  ... and ${t.length-m} more leaking disposables
652
652
 
653
653
  `),{leaks:t,details:F0}}}function C(m){return A?.trackDisposable(m),m}function y(m){A?.markAsDisposed(m)}function E(m,e){A?.setParent(m,e)}function S(m){return typeof m=="object"&&m!==null&&typeof m.dispose=="function"&&m.dispose.length===0}function R(m){if(V.Iterable.is(m)){let e=[];for(let t of m)if(t)try{t.dispose()}catch(z0){e.push(z0)}if(e.length===1)throw e[0];if(e.length>1)throw AggregateError(e,"Encountered errors while disposing of store");return Array.isArray(m)?[]:m}if(m)return m.dispose(),m}function w(m){let e=C({dispose:(0,M.createSingleCallFunction)(()=>{y(e),m()})});return e}H.DisposableTracker=_;class b{static{this.DISABLE_DISPOSED_WARNING=!1}constructor(){this._toDispose=new Set,this._isDisposed=!1,C(this)}dispose(){this._isDisposed||(y(this),this._isDisposed=!0,this.clear())}get isDisposed(){return this._isDisposed}clear(){if(this._toDispose.size!==0)try{R(this._toDispose)}finally{this._toDispose.clear()}}add(m){if(!m)return m;if(m===this)throw Error("Cannot register a disposable on itself!");return E(m,this),this._isDisposed?b.DISABLE_DISPOSED_WARNING||console.warn(Error("Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!").stack):this._toDispose.add(m),m}delete(m){if(m){if(m===this)throw Error("Cannot dispose a disposable on itself!");this._toDispose.delete(m),m.dispose()}}deleteAndLeak(m){m&&this._toDispose.has(m)&&(this._toDispose.delete(m),E(m,null))}}H.DisposableStore=b;class k{static{this.None=Object.freeze({dispose(){}})}constructor(){this._store=new b,C(this),E(this._store,this)}dispose(){y(this),this._store.dispose()}_register(m){if(m===this)throw Error("Cannot register a disposable on itself!");return this._store.add(m)}}H.Disposable=k;class h{constructor(){this._isDisposed=!1,C(this)}get value(){return this._isDisposed?void 0:this._value}set value(m){this._isDisposed||m===this._value||(this._value?.dispose(),m&&E(m,this),this._value=m)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,y(this),this._value?.dispose(),this._value=void 0}clearAndLeak(){let m=this._value;return this._value=void 0,m&&E(m,null),m}}H.MutableDisposable=h,H.MandatoryMutableDisposable=class{constructor(m){this._disposable=new h,this._isDisposed=!1,this._disposable.value=m}get value(){return this._disposable.value}set value(m){this._isDisposed||m===this._disposable.value||(this._disposable.value=m)}dispose(){this._isDisposed=!0,this._disposable.dispose()}},H.RefCountedDisposable=class{constructor(m){this._disposable=m,this._counter=1}acquire(){return this._counter++,this}release(){return--this._counter==0&&this._disposable.dispose(),this}},H.SafeDisposable=class{constructor(){this.dispose=()=>{},this.unset=()=>{},this.isset=()=>!1,C(this)}set(m){let e=m;return this.unset=()=>e=void 0,this.isset=()=>e!==void 0,this.dispose=()=>{e&&(e(),e=void 0,y(this))},this}},H.ReferenceCollection=class{constructor(){this.references=new Map}acquire(m,...e){let t=this.references.get(m);t||(t={counter:0,object:this.createReferencedObject(m,...e)},this.references.set(m,t));let{object:z0}=t,K0=(0,M.createSingleCallFunction)(()=>{--t.counter==0&&(this.destroyReferencedObject(m,t.object),this.references.delete(m))});return t.counter++,{object:z0,dispose:K0}}},H.AsyncReferenceCollection=class{constructor(m){this.referenceCollection=m}async acquire(m,...e){let t=this.referenceCollection.acquire(m,...e);try{return{object:await t.object,dispose:()=>t.dispose()}}catch(z0){throw t.dispose(),z0}}},H.ImmortalReference=class{constructor(m){this.object=m}dispose(){}};class o{constructor(){this._store=new Map,this._isDisposed=!1,C(this)}dispose(){y(this),this._isDisposed=!0,this.clearAndDisposeAll()}clearAndDisposeAll(){if(this._store.size)try{R(this._store.values())}finally{this._store.clear()}}has(m){return this._store.has(m)}get size(){return this._store.size}get(m){return this._store.get(m)}set(m,e,t=!1){this._isDisposed&&console.warn(Error("Trying to add a disposable to a DisposableMap that has already been disposed of. The added object will be leaked!").stack),t||this._store.get(m)?.dispose(),this._store.set(m,e)}deleteAndDispose(m){this._store.get(m)?.dispose(),this._store.delete(m)}deleteAndLeak(m){let e=this._store.get(m);return this._store.delete(m),e}keys(){return this._store.keys()}values(){return this._store.values()}[Symbol.iterator](){return this._store[Symbol.iterator]()}}H.DisposableMap=o},6317:(W,H)=>{Object.defineProperty(H,"__esModule",{value:!0}),H.LinkedList=void 0;class U{static{this.Undefined=new U(void 0)}constructor(N){this.element=N,this.next=U.Undefined,this.prev=U.Undefined}}class B{constructor(){this._first=U.Undefined,this._last=U.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===U.Undefined}clear(){let N=this._first;for(;N!==U.Undefined;){let L=N.next;N.prev=U.Undefined,N.next=U.Undefined,N=L}this._first=U.Undefined,this._last=U.Undefined,this._size=0}unshift(N){return this._insert(N,!1)}push(N){return this._insert(N,!0)}_insert(N,L){let M=new U(N);if(this._first===U.Undefined)this._first=M,this._last=M;else if(L){let A=this._last;this._last=M,M.prev=A,A.next=M}else{let A=this._first;this._first=M,M.next=A,A.prev=M}this._size+=1;let V=!1;return()=>{V||(V=!0,this._remove(M))}}shift(){if(this._first!==U.Undefined){let N=this._first.element;return this._remove(this._first),N}}pop(){if(this._last!==U.Undefined){let N=this._last.element;return this._remove(this._last),N}}_remove(N){if(N.prev!==U.Undefined&&N.next!==U.Undefined){let L=N.prev;L.next=N.next,N.next.prev=L}else N.prev===U.Undefined&&N.next===U.Undefined?(this._first=U.Undefined,this._last=U.Undefined):N.next===U.Undefined?(this._last=this._last.prev,this._last.next=U.Undefined):N.prev===U.Undefined&&(this._first=this._first.next,this._first.prev=U.Undefined);this._size-=1}*[Symbol.iterator](){let N=this._first;for(;N!==U.Undefined;)yield N.element,N=N.next}}H.LinkedList=B},2608:(W,H)=>{var U;Object.defineProperty(H,"__esModule",{value:!0}),H.SetMap=H.BidirectionalMap=H.CounterSet=H.Touch=void 0,H.getOrSet=function(B,N,L){let M=B.get(N);return M===void 0&&(M=L,B.set(N,M)),M},H.mapToString=function(B){let N=[];return B.forEach((L,M)=>{N.push(`${M} => ${L}`)}),`Map(${B.size}) {${N.join(", ")}}`},H.setToString=function(B){let N=[];return B.forEach((L)=>{N.push(L)}),`Set(${B.size}) {${N.join(", ")}}`},H.mapsStrictEqualIgnoreOrder=function(B,N){if(B===N)return!0;if(B.size!==N.size)return!1;for(let[L,M]of B)if(!N.has(L)||N.get(L)!==M)return!1;for(let[L]of N)if(!B.has(L))return!1;return!0},function(B){B[B.None=0]="None",B[B.AsOld=1]="AsOld",B[B.AsNew=2]="AsNew"}(U||(H.Touch=U={})),H.CounterSet=class{constructor(){this.map=new Map}add(B){return this.map.set(B,(this.map.get(B)||0)+1),this}delete(B){let N=this.map.get(B)||0;return N!==0&&(N--,N===0?this.map.delete(B):this.map.set(B,N),!0)}has(B){return this.map.has(B)}},H.BidirectionalMap=class{constructor(B){if(this._m1=new Map,this._m2=new Map,B)for(let[N,L]of B)this.set(N,L)}clear(){this._m1.clear(),this._m2.clear()}set(B,N){this._m1.set(B,N),this._m2.set(N,B)}get(B){return this._m1.get(B)}getKey(B){return this._m2.get(B)}delete(B){let N=this._m1.get(B);return N!==void 0&&(this._m1.delete(B),this._m2.delete(N),!0)}forEach(B,N){this._m1.forEach((L,M)=>{B.call(N,L,M,this)})}keys(){return this._m1.keys()}values(){return this._m1.values()}},H.SetMap=class{constructor(){this.map=new Map}add(B,N){let L=this.map.get(B);L||(L=new Set,this.map.set(B,L)),L.add(N)}delete(B,N){let L=this.map.get(B);L&&(L.delete(N),L.size===0&&this.map.delete(B))}forEach(B,N){let L=this.map.get(B);L&&L.forEach(N)}get(B){return this.map.get(B)||new Set}}},9725:(W,H)=>{Object.defineProperty(H,"__esModule",{value:!0}),H.StopWatch=void 0;let U=globalThis.performance&&typeof globalThis.performance.now=="function";class B{static create(N){return new B(N)}constructor(N){this._now=U&&N===!1?Date.now:globalThis.performance.now.bind(globalThis.performance),this._startTime=this._now(),this._stopTime=-1}stop(){this._stopTime=this._now()}reset(){this._startTime=this._now(),this._stopTime=-1}elapsed(){return this._stopTime!==-1?this._stopTime-this._startTime:this._now()-this._startTime}}H.StopWatch=B}},Z={};function J(W){var H=Z[W];if(H!==void 0)return H.exports;var U=Z[W]={exports:{}};return $[W].call(U.exports,U,U.exports,J),U.exports}var X={};(()=>{var W=X;Object.defineProperty(W,"__esModule",{value:!0}),W.Terminal=void 0;let H=J(5101),U=J(6097),B=J(4335),N=J(5856),L=J(3027),M=J(7150),V=["cols","rows"];class A extends M.Disposable{constructor(_){super(),this._core=this._register(new N.Terminal(_)),this._addonManager=this._register(new L.AddonManager),this._publicOptions={...this._core.options};let C=(E)=>this._core.options[E],y=(E,S)=>{this._checkReadonlyOptions(E),this._core.options[E]=S};for(let E in this._core.options){Object.defineProperty(this._publicOptions,E,{get:()=>this._core.options[E],set:(R)=>{this._checkReadonlyOptions(E),this._core.options[E]=R}});let S={get:C.bind(this,E),set:y.bind(this,E)};Object.defineProperty(this._publicOptions,E,S)}}_checkReadonlyOptions(_){if(V.includes(_))throw Error(`Option "${_}" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.options.allowProposedApi)throw Error("You must set the allowProposedApi option to true to use proposed API")}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onLineFeed(){return this._core.onLineFeed}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get parser(){return this._checkProposedApi(),this._parser||(this._parser=new U.ParserApi(this._core)),this._parser}get unicode(){return this._checkProposedApi(),new B.UnicodeApi(this._core)}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._checkProposedApi(),this._buffer||(this._buffer=this._register(new H.BufferNamespaceApi(this._core))),this._buffer}get markers(){return this._checkProposedApi(),this._core.markers}get modes(){let _=this._core.coreService.decPrivateModes,C="none";switch(this._core.coreMouseService.activeProtocol){case"X10":C="x10";break;case"VT200":C="vt200";break;case"DRAG":C="drag";break;case"ANY":C="any"}return{applicationCursorKeysMode:_.applicationCursorKeys,applicationKeypadMode:_.applicationKeypad,bracketedPasteMode:_.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:C,originMode:_.origin,reverseWraparoundMode:_.reverseWraparound,sendFocusMode:_.sendFocus,synchronizedOutputMode:_.synchronizedOutput,wraparoundMode:_.wraparound}}get options(){return this._publicOptions}set options(_){for(let C in _)this._publicOptions[C]=_[C]}input(_,C=!0){this._core.input(_,C)}resize(_,C){this._verifyIntegers(_,C),this._core.resize(_,C)}registerMarker(_=0){return this._checkProposedApi(),this._verifyIntegers(_),this._core.addMarker(_)}addMarker(_){return this.registerMarker(_)}dispose(){super.dispose()}scrollLines(_){this._verifyIntegers(_),this._core.scrollLines(_)}scrollPages(_){this._verifyIntegers(_),this._core.scrollPages(_)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(_){this._verifyIntegers(_),this._core.scrollToLine(_)}clear(){this._core.clear()}write(_,C){this._core.write(_,C)}writeln(_,C){this._core.write(_),this._core.write(`\r
654
- `,C)}reset(){this._core.reset()}loadAddon(_){this._addonManager.loadAddon(this,_)}_verifyIntegers(..._){for(let C of _)if(C===1/0||isNaN(C)||C%1!=0)throw Error("This API only accepts integers")}}W.Terminal=A})();var z=Yu;for(var G in X)z[G]=X[G];X.__esModule&&Object.defineProperty(z,"__esModule",{value:!0})})()});function _j($){let Z=typeof $==="number"?Math.floor($):typeof $==="string"?Number.parseInt($.trim(),10):Number.NaN;if(!Number.isFinite(Z))return Vj;return Math.min(UY0,Math.max(qY0,Z))}function Wu(){return _j(M4()[jj])}var jj="terminal.scrollbackRows",Vj=1000,qY0=100,UY0=1e5;var hT=a(()=>{P7()});var Hu;var qu=a(()=>{Hu=[{id:"chat.send",scope:"workspace",keys:[],category:"Workspace",description:"Send message (composer)",hint:{keys:"enter"}},{id:"chat.newline",scope:"workspace",keys:[],category:"Workspace",description:"Newline in composer",hint:{keys:"shift+enter"}},{id:"chat.cycle-mode",scope:"workspace",keys:[],category:"Workspace",description:"Cycle permission mode (composer)",hint:{keys:"shift+tab"}},{id:"chat.steer",scope:"workspace",keys:[],category:"Workspace",description:"Steer (interrupt + send) \u2014 mid-stream only",hint:{keys:"ctrl+enter"}},{id:"chat.tab.new",scope:"workspace",keys:["ctrl+t"],category:"Workspace",description:"New chat tab",hint:{keys:"ctrl+t"},presentation:"onePress"},{id:"chat.tab.chooseEngine",scope:"workspace",keys:["ctrl+e"],category:"Workspace",description:"New conversation \u2014 engine/shell picker with destination + context toggles",hint:{keys:"ctrl+e"},presentation:"onePress"},{id:"chat.tab.fork",scope:"workspace",keys:[],prefixKeys:["c"],category:"Workspace",description:"Fork this chat into a new tab (same worktree, keeps the conversation)",hint:{keys:"ctrl+a c"}},{id:"chat.fork.new",scope:"workspace",keys:[],prefixKeys:["f"],category:"Workspace",description:"Quick-fork: create child task seeded with current repo/branch/model",hint:{keys:"ctrl+a f"}},{id:"chat.session.resume",scope:"workspace",keys:[],prefixKeys:["y"],category:"Workspace",description:"Resume a prior session in this task's worktree",hint:{keys:"ctrl+y"}},{id:"chat.tab.close",scope:"workspace",keys:["ctrl+w"],category:"Workspace",description:"Close chat tab",hint:{keys:"ctrl+w"},presentation:"onePress"},{id:"chat.tab.rename",scope:"workspace",keys:["f2"],category:"Workspace",description:"Rename active chat tab",hint:{keys:"f2"},presentation:"onePress"},{id:"chat.tab.cycle-next",scope:"workspace",keys:["ctrl+]"],category:"Workspace",description:"Next chat tab",hint:{keys:"ctrl+]"},presentation:"onePress"},{id:"chat.tab.cycle-prev",scope:"workspace",keys:["ctrl+["],category:"Workspace",description:"Previous chat tab",hint:{keys:"ctrl+["},presentation:"onePress"},{id:"workspace.split.right",scope:"workspace",keys:["ctrl+\\"],category:"Workspace",description:"Split right",hint:{keys:"ctrl+\\"},presentation:"onePress"},{id:"workspace.split.down",scope:"workspace",keys:["ctrl+="],category:"Workspace",description:"Split down",hint:{keys:"ctrl+="},presentation:"onePress"},{id:"workspace.split.focus-next",scope:"workspace",keys:["f3"],category:"Workspace",description:"Focus next split",hint:{keys:"f3"},presentation:"onePress"},{id:"workspace.split.close",scope:"workspace",keys:["ctrl+w"],prefixKeys:["w"],category:"Workspace",description:"Close active split (tab when unsplit)",hint:{keys:"ctrl+w"},presentation:"onePress"},{id:"workspace.split.rename",scope:"workspace",keys:["f2"],category:"Workspace",description:"Rename active split (tab when unsplit)",hint:{keys:"f2"},presentation:"onePress"}]});var Uu;var Bu=a(()=>{Uu=[{id:"files.nav",scope:"files",keys:["j","k","down","up"],category:"Files",description:"Move cursor up/down",hint:{keys:"j/k"}},{id:"files.hierarchy",scope:"files",keys:["h","l","left","right"],category:"Files",description:"Collapse / expand tree level",hint:{keys:"h/l"}},{id:"files.open",scope:"files",keys:["return"],category:"Files",description:"Open file in nvim (diff vs HEAD when changed)",hint:{keys:"enter"}},{id:"files.tab",scope:"files",keys:["[","]"],category:"Files",description:"Switch tab (cycle All / Changes)",hint:{keys:"[/]"}},{id:"files.refresh",scope:"files",keys:["r"],category:"Files",description:"Refresh",hint:{keys:"r"}},{id:"files.scope",scope:"files",keys:["b"],category:"Files",description:"Toggle Changes scope (working \u2194 branch vs base)",hint:{keys:"b"}},{id:"files.diff",scope:"files",keys:["d"],category:"Files",description:"Open read-only diff in a workspace tab",hint:{keys:"d"}},{id:"files.openExternal",scope:"files",keys:["o"],category:"Files",description:"Open file in system default app (audio / video / pdf preview)",hint:{keys:"o"}},{id:"files.mention",scope:"files",keys:["a"],category:"Files",description:"Inject @<path> mention into the engine pane",hint:{keys:"a"}},{id:"files.createPR",scope:"global",keys:[],prefixKeys:["p","shift+p"],category:"Files",description:"Create PR from the current task"},{id:"diff.review.cursor",scope:"workspace",keys:[],category:"Diff review",description:"Move the line cursor over the diff",hint:{keys:"j/k"}},{id:"diff.review.range",scope:"workspace",keys:[],category:"Diff review",description:"Toggle range anchor at the cursor",hint:{keys:"v"}},{id:"diff.review.note",scope:"workspace",keys:[],category:"Diff review",description:"Add a review note at the cursor",hint:{keys:"c"}},{id:"diff.review.send",scope:"workspace",keys:[],category:"Diff review",description:"Send all unsent review notes to the engine",hint:{keys:"s"}}]});var Ku;var Fu=a(()=>{Ku=[{id:"inbox.show",scope:"global",keys:[],prefixKeys:["i"],category:"Global",description:"Open Inbox"},{id:"inbox.nav",scope:"inbox",keys:["j","k","down","up"],category:"Inbox",description:"Move cursor up/down",hint:{keys:"j/k"}},{id:"inbox.open",scope:"inbox",keys:["return"],category:"Inbox",description:"Open the selected Task and Terminal Tab",hint:{keys:"enter"}},{id:"inbox.delete",scope:"inbox",keys:["d"],category:"Inbox",description:"Remove the selected Inbox item",hint:{keys:"d"}}]});function Ou($){return Mu[$]??null}var Mu,Nu;var uT=a(()=>{Mu=["2","3","4","5","6","7","8","9","0"],Nu=Mu.map(($)=>`ctrl+${$}`)});var Lu;var ju=a(()=>{uT();Lu=[{id:"sidebar.nav",scope:"sidebar",keys:["j","k","down","up"],category:"Sidebar",description:"Move cursor up/down",hint:{keys:"j/k"}},{id:"sidebar.select",scope:"sidebar",keys:["return"],category:"Sidebar",description:"Open the selected task",hint:{keys:"enter"}},{id:"sidebar.tree.open",scope:"sidebar",keys:["l","space"],category:"Sidebar",description:"Open the row under the cursor (a tab row enters its chat)",hint:{keys:"l"}},{id:"sidebar.goto",scope:"sidebar",keys:["g","shift+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"}},{id:"sidebar.archive",scope:"sidebar",keys:["a"],category:"Sidebar",description:"Toggle archive",hint:{keys:"a"}},{id:"sidebar.localMerge",scope:"sidebar",keys:["shift+m"],category:"Sidebar",description:"Reorder task (Shift+M, then j/k)",hint:{keys:"M"}},{id:"sidebar.pin",scope:"sidebar",keys:["shift+p"],category:"Sidebar",description:"Pin / unpin task at top (Shift+P)",hint:{keys:"P"}},{id:"sidebar.previewToggle",scope:"sidebar",keys:["i"],category:"Sidebar",description:"Toggle live preview for task (i)",hint:{keys:"i"}},{id:"sidebar.view",scope:"sidebar",keys:["[","]"],category:"Sidebar",description:"Switch view (Working session \u2194 Archives)",hint:{keys:"[/]"}},{id:"sidebar.sort",scope:"sidebar",keys:["t"],category:"Sidebar",description:"Switch task sort (default \u2194 recent)",hint:{keys:"t"}},{id:"sidebar.projectFilter",scope:"sidebar",keys:["ctrl+p"],category:"Sidebar",description:"Cycle task project filter",hint:{keys:"ctrl+p"}},{id:"sidebar.delete",scope:"sidebar",keys:["d"],category:"Sidebar",description:"Delete task (with confirm)",hint:{keys:"d"}},{id:"sidebar.search.enter",scope:"sidebar",keys:["/"],category:"Sidebar",description:"Search tasks (fuzzy filter)",hint:{keys:"/"}},{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"}},{id:"tasks.renameBranch",scope:"sidebar",keys:["b"],category:"Tasks pane",description:"Rename the selected task's git branch",hint:{keys:"b"}},{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"}},{id:"tasks.update",scope:"sidebar",keys:["u"],category:"Tasks pane",description:"Open the update page (when a new version is available)",hint:{keys:"u"}},{id:"tasks.jump",scope:"global",keys:[...Nu],category:"Tasks pane",description:"Jump to the task showing that digit (ctrl+2 = first row)",hint:{keys:"ctrl+2-0"},presentation:"onePress"},{id:"tasks.focusEngine",scope:"sidebar",keys:["right"],category:"Tasks pane",description:"Focus the engine pane of the current window",hint:{keys:"\u2192"}},{id:"tasks.toggleKeys",scope:"sidebar",keys:["?"],category:"Tasks pane",description:"Collapse / expand the keys legend",hint:{keys:"?"}}]});var t7;var cT=a(()=>{qu();Bu();Fu();ju();t7=[{id:"help.open",scope:"global",keys:["f1"],category:"Global",description:"Show keybindings help",hint:{keys:"F1"},presentation:"onePress"},{id:"task.new",scope:"sidebar",keys:["n"],category:"Sidebar",description:"New task",hint:{keys:"n"}},{id:"task.openEditor",scope:"global",keys:[],prefixKeys:["o"],category:"Global",description:"Open active task worktree in editor"},{id:"task.moveMode",scope:"global",keys:[],prefixKeys:["m"],category:"Global",description:"Reorder tasks/projects (then j/k)"},{id:"settings.open",scope:"global",keys:[],prefixKeys:[","],category:"Global",description:"Open settings"},{id:"settings.open.sidebar",scope:"sidebar",keys:["s"],category:"Sidebar",description:"Open settings",hint:{keys:"s"}},{id:"worktrees.open.sidebar",scope:"sidebar",keys:["x"],category:"Sidebar",description:"Open worktrees",hint:{keys:"x"}},{id:"kanban.open",scope:"global",keys:[],prefixKeys:["1"],category:"Global",description:"Open kanban (issues board)"},{id:"automations.open",scope:"global",keys:[],prefixKeys:["2"],category:"Global",description:"Open automations (scheduled tasks)"},{id:"workItems.open",scope:"global",keys:[],prefixKeys:["3"],category:"Global",description:"Open GitHub issues (external tracker)"},{id:"app.quit",scope:"sidebar",keys:["q","ctrl+q"],category:"Sidebar",description:"Quit (with confirm)",hint:{keys:"q"}},{id:"focus.sidebar",scope:"workspace",keys:["ctrl+q"],category:"Workspace",description:"Back to sidebar (tasks)",hint:{keys:"ctrl+q"},presentation:"onePress"},{id:"focus.previous",scope:"global",keys:[],prefixKeys:["h"],category:"Navigation",description:"Focus previous pane (files \u2192 workspace \u2192 sidebar)"},{id:"focus.next",scope:"global",keys:["f4"],prefixKeys:["l"],category:"Navigation",description:"Focus next pane (sidebar \u2192 workspace \u2192 files)",hint:{keys:"f4"},presentation:"onePress"},{id:"attention.next",scope:"global",keys:["f7"],category:"Navigation",description:"Jump to the next available Inbox item",hint:{keys:"f7"},presentation:"onePress"},{id:"workspace.zenToggle",scope:"global",keys:[],prefixKeys:["z"],category:"Navigation",description:"Toggle zen mode (hide the files column)"},{id:"chat.interrupt",scope:"workspace",keys:[],category:"Workspace",description:"Interrupt current turn (esc while streaming)"},...Lu,...Hu,...Uu,...Ku,{id:"terminal.scroll-up",scope:"terminal",keys:["ctrl+pageup"],category:"Terminal",description:"Scroll scrollback up",hint:{keys:"ctrl+pgup"}},{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"},presentation:"onePress"},{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+[/]"}}]});function G5($){let Z=[];for(let J in $){let X=$[J];if(!X)continue;let z=xQ(J),G=z?.keys??[],W=z?.prefixKeys??[];if(G.length===0&&W.length===0){console.warn(`[rove/keybindings] bindByIds: id="${J}" has no chords (or doesn't exist in KobeKeymap)`);continue}G.forEach((H,U)=>Z.push({key:H,cmd:X,slot:U,id:J})),W.forEach((H,U)=>Z.push({key:H,prefix:!0,cmd:X,slot:U,id:J}))}return Z}var Vu=a(()=>{mJ()});function Cu($){return _u.get($)?.keys??[]}function lT(){for(let $ of t7){let Z=_u.get($.id);if(!Z)continue;let J=$;J.keys=[...Z.keys],J.prefixKeys=Z.prefixKeys&&[...Z.prefixKeys],J.hint=Z.hint?{...Z.hint}:void 0}}function pT(){return Du}function nT($){return dT.add($),()=>{dT.delete($)}}function iT(){Du+=1;for(let $ of[...dT])$()}function xQ($){return KY0.get($)}var _u,Du=0,dT,KY0;var mJ=a(()=>{cT();cT();Vu();_u=new Map(t7.map(($)=>[$.id,{keys:[...$.keys],prefixKeys:$.prefixKeys&&[...$.prefixKeys],hint:$.hint?{...$.hint}:void 0}]));dT=new Set;KY0=new Map(t7.map(($)=>[$.id,$]))});function oT($){let Z=$,J=typeof Z.sequence==="string"&&Z.sequence.length>0?Z.sequence:null,X=typeof Z.raw==="string"&&Au.test(Z.raw)||J!=null&&Au.test(J);if(J!=null&&!X)return J;if(J!=null&&J.length===1&&J>=" "&&J!=="\x7F"&&!$.ctrl&&!Z.option&&!Z.meta)return J;return Pu($)}function Pu($){let Z=$.name;if(!Z)return null;if($.shift&&Z==="tab")return"\x1B[Z";if($.option||$.meta){let J=Pu({...$,option:!1,meta:!1});return J==null?null:`\x1B${J}`}switch(Z){case"return":case"enter":return"\r";case"tab":return"\t";case"backspace":return"\x7F";case"delete":return"\x1B[3~";case"up":return"\x1B[A";case"down":return"\x1B[B";case"right":return"\x1B[C";case"left":return"\x1B[D";case"home":return"\x1B[H";case"end":return"\x1B[F";case"escape":return"\x1B";case"space":return $.ctrl?"\x00":" ";default:if(Z.length===1){if($.ctrl){let X=Z.toLowerCase().charCodeAt(0);if(X>=97&&X<=122)return String.fromCharCode(X-96);let z=FY0[Z];if(z!=null)return z;return null}if($.shift&&Z>="a"&&Z<="z")return Z.toUpperCase();return Z}return null}}function Su($,Z,J,X){if($.mouseTracking)return`\x1B[<${Z==="up"?64:65};${Math.max(1,J)};${Math.max(1,X)}M`;if($.alternateScreen)return($.applicationCursorKeys?Z==="up"?"\x1BOA":"\x1BOB":Z==="up"?"\x1B[A":"\x1B[B").repeat(3);return null}var Au,FY0,Ru=10,MY0,NY0,OY0,LY0,Tu;var aT=a(()=>{mJ();Au=/^\x1b\[[\d:;]*u$/,FY0={"@":"\x00","[":"\x1B","\\":"\x1C","]":"\x1D","^":"\x1E",_:"\x1F","?":"\x7F"};MY0=[{id:"help.open"},{id:"focus.sidebar"},{id:"chat.tab.new"},{id:"chat.tab.close"},{id:"chat.tab.cycle-next"},{id:"chat.tab.cycle-prev"},{id:"chat.tab.rename"},"ctrl+e","ctrl+f",{id:"workspace.split.right"},{id:"workspace.split.down"},{id:"workspace.split.focus-next"},{id:"focus.next"},{id:"terminal.reset"},{id:"attention.next"},{id:"tasks.jump"}],NY0=[...new Set(MY0.flatMap(($)=>typeof $==="string"?[$]:Cu($.id)))],OY0=[..."abcdefghijklmnopqrstuvwxyz".split(""),..."ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""),..."0123456789".split(""),..." `~!@#$%^&*()-_=+[]{}\\|;:'\",.<>/?".split(""),"return","enter","space","tab","backspace","delete","up","down","left","right","home","end","pageup","pagedown","escape","insert","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12"],LY0=["","ctrl+","alt+","shift+","ctrl+shift+","alt+shift+","ctrl+alt+"],Tu=OY0.flatMap(($)=>LY0.map((Z)=>`${Z}${$}`)).filter(($)=>!NY0.includes($))});class rT{data=new Set;exits=new Set;titles=new Set;get dataCount(){return this.data.size}addData($){return this.data.add($),()=>this.data.delete($)}addExit($){return this.exits.add($),()=>this.exits.delete($)}addTitle($){return this.titles.add($),()=>this.titles.delete($)}publishData($,Z,J){for(let X of this.data)try{X($,Z,J)}catch{}}publishTitle($){for(let Z of this.titles)try{Z($)}catch{}}drainExits(){let $=[...this.exits];return this.exits.clear(),$}clearData(){this.data.clear()}clearAll(){this.data.clear(),this.exits.clear(),this.titles.clear()}}function Iu($,Z){if($===Z)return!0;return $!==void 0&&Z!==void 0&&$[0]===Z[0]&&$[1]===Z[1]&&$[2]===Z[2]}function jY0($,Z){return $.text===Z.text&&($.attributes??0)===(Z.attributes??0)&&Iu($.fg,Z.fg)&&Iu($.bg,Z.bg)}function VY0($,Z){if($===Z)return!0;if($.length!==Z.length)return!1;for(let J=0;J<$.length;J++)if(!jY0($[J],Z[J]))return!1;return!0}function sT($,Z){return $&&VY0($,Z)?$:Z}function Eu($,Z){if($.length!==Z.length)return Z;let J=!1;for(let X=0;X<Z.length;X++){let z=sT($[X],Z[X]);if(Z[X]=z,z!==$[X])J=!0}return J?Z:$}function wu($,Z){if($===Z)return $;if($&&Z&&$.x===Z.x&&$.y===Z.y)return $;return Z}function hJ($){if($<0)return[0,0,0];if($<16)return _Y0[$]??[0,0,0];if($<232){let Z=$-16,J=Math.floor(Z/36),X=Math.floor(Z/6%6),z=Z%6,G=(W)=>W===0?0:55+40*W;return[G(J),G(X),G(z)]}if($<256){let Z=8+10*($-232);return[Z,Z,Z]}return[0,0,0]}function CY0($,Z){let J=Z.length===0?[0]:Z.map((H)=>H===""?0:Number.parseInt(H,10)||0),X=$.fg,z=$.bg,G=$.attributes,W=0;while(W<J.length){let H=J[W];if(H===void 0)break;if(H===0){X=void 0,z=void 0,G=0,W+=1;continue}if(H===1){G|=Y4.BOLD,W+=1;continue}if(H===2){G|=Y4.DIM,W+=1;continue}if(H===3){G|=Y4.ITALIC,W+=1;continue}if(H===4){G|=Y4.UNDERLINE,W+=1;continue}if(H===5||H===6){G|=Y4.BLINK,W+=1;continue}if(H===7){G|=Y4.INVERSE,W+=1;continue}if(H===8){G|=Y4.HIDDEN,W+=1;continue}if(H===9){G|=Y4.STRIKETHROUGH,W+=1;continue}if(H===22){G&=~(Y4.BOLD|Y4.DIM),W+=1;continue}if(H===23){G&=~Y4.ITALIC,W+=1;continue}if(H===24){G&=~Y4.UNDERLINE,W+=1;continue}if(H===25){G&=~Y4.BLINK,W+=1;continue}if(H===27){G&=~Y4.INVERSE,W+=1;continue}if(H===28){G&=~Y4.HIDDEN,W+=1;continue}if(H===29){G&=~Y4.STRIKETHROUGH,W+=1;continue}if(H>=30&&H<=37){X=hJ(H-30),W+=1;continue}if(H>=90&&H<=97){X=hJ(H-90+8),W+=1;continue}if(H===39){X=void 0,W+=1;continue}if(H>=40&&H<=47){z=hJ(H-40),W+=1;continue}if(H>=100&&H<=107){z=hJ(H-100+8),W+=1;continue}if(H===49){z=void 0,W+=1;continue}if(H===38){let U=J[W+1];if(U===5){let B=J[W+2]??0;X=hJ(B),W+=3;continue}if(U===2){let B=J[W+2]??0,N=J[W+3]??0,L=J[W+4]??0;X=[B,N,L],W+=5;continue}W+=1;continue}if(H===48){let U=J[W+1];if(U===5){let B=J[W+2]??0;z=hJ(B),W+=3;continue}if(U===2){let B=J[W+2]??0,N=J[W+3]??0,L=J[W+4]??0;z=[B,N,L],W+=5;continue}W+=1;continue}W+=1}return{fg:X,bg:z,attributes:G}}function DY0($){let Z=$;if(Z.charCodeAt(0)===27)Z=Z.slice(2);else if(Z.charCodeAt(0)===155)Z=Z.slice(1);if(Z.endsWith("m"))Z=Z.slice(0,-1);return Z.split(";")}function AY0($,Z=xu){if($.length===0)return{chunks:[],endStyle:Z};let J=[],X={...Z},z="",G=()=>{if(z.length===0)return;let H={text:z,...X.fg?{fg:X.fg}:{},...X.bg?{bg:X.bg}:{},...X.attributes!==0?{attributes:X.attributes}:{}};J.push(H),z=""},W=$F($);for(let H of W){if(H.type==="TEXT"){z+=H.raw;continue}if(H.type==="CSI"&&H.command==="m"){G(),X=CY0(X,DY0(H.raw));continue}if(H.type==="OSC"&&H.command==="8"){G();let U=H.params[H.params.length-1]??"";X={...X,attributes:U?X.attributes|Y4.UNDERLINE:X.attributes&~Y4.UNDERLINE}}}return G(),{chunks:J,endStyle:X}}function Cj($){let Z=$.split(`
654
+ `,C)}reset(){this._core.reset()}loadAddon(_){this._addonManager.loadAddon(this,_)}_verifyIntegers(..._){for(let C of _)if(C===1/0||isNaN(C)||C%1!=0)throw Error("This API only accepts integers")}}W.Terminal=A})();var z=Yu;for(var G in X)z[G]=X[G];X.__esModule&&Object.defineProperty(z,"__esModule",{value:!0})})()});function _j($){let Z=typeof $==="number"?Math.floor($):typeof $==="string"?Number.parseInt($.trim(),10):Number.NaN;if(!Number.isFinite(Z))return Vj;return Math.min(UY0,Math.max(qY0,Z))}function Wu(){return _j(M4()[jj])}var jj="terminal.scrollbackRows",Vj=1000,qY0=100,UY0=1e5;var hT=a(()=>{P7()});var Hu;var qu=a(()=>{Hu=[{id:"chat.send",scope:"workspace",keys:[],category:"Workspace",description:"Send message (composer)",hint:{keys:"enter"}},{id:"chat.newline",scope:"workspace",keys:[],category:"Workspace",description:"Newline in composer",hint:{keys:"shift+enter"}},{id:"chat.cycle-mode",scope:"workspace",keys:[],category:"Workspace",description:"Cycle permission mode (composer)",hint:{keys:"shift+tab"}},{id:"chat.steer",scope:"workspace",keys:[],category:"Workspace",description:"Steer (interrupt + send) \u2014 mid-stream only",hint:{keys:"ctrl+enter"}},{id:"chat.tab.new",scope:"workspace",keys:["ctrl+t"],category:"Workspace",description:"New chat tab",hint:{keys:"ctrl+t"},presentation:"onePress"},{id:"chat.tab.chooseEngine",scope:"workspace",keys:["ctrl+e"],category:"Workspace",description:"New conversation \u2014 engine/shell picker with destination + context toggles",hint:{keys:"ctrl+e"},presentation:"onePress"},{id:"chat.tab.fork",scope:"workspace",keys:[],prefixKeys:["c"],category:"Workspace",description:"Fork this chat into a new tab (same Task directory, keeps the conversation)",hint:{keys:"ctrl+a c"}},{id:"chat.fork.new",scope:"workspace",keys:[],prefixKeys:["f"],category:"Workspace",description:"Quick-fork: create child task seeded with current repo/branch/model",hint:{keys:"ctrl+a f"}},{id:"chat.session.resume",scope:"workspace",keys:[],prefixKeys:["y"],category:"Workspace",description:"Resume a prior session in this Task directory",hint:{keys:"ctrl+y"}},{id:"chat.tab.close",scope:"workspace",keys:["ctrl+w"],category:"Workspace",description:"Close chat tab",hint:{keys:"ctrl+w"},presentation:"onePress"},{id:"chat.tab.rename",scope:"workspace",keys:["f2"],category:"Workspace",description:"Rename active chat tab",hint:{keys:"f2"},presentation:"onePress"},{id:"chat.tab.cycle-next",scope:"workspace",keys:["ctrl+]"],category:"Workspace",description:"Next chat tab",hint:{keys:"ctrl+]"},presentation:"onePress"},{id:"chat.tab.cycle-prev",scope:"workspace",keys:["ctrl+["],category:"Workspace",description:"Previous chat tab",hint:{keys:"ctrl+["},presentation:"onePress"},{id:"workspace.split.right",scope:"workspace",keys:["ctrl+\\"],category:"Workspace",description:"Split right",hint:{keys:"ctrl+\\"},presentation:"onePress"},{id:"workspace.split.down",scope:"workspace",keys:["ctrl+="],category:"Workspace",description:"Split down",hint:{keys:"ctrl+="},presentation:"onePress"},{id:"workspace.split.focus-next",scope:"workspace",keys:["f3"],category:"Workspace",description:"Focus next split",hint:{keys:"f3"},presentation:"onePress"},{id:"workspace.split.close",scope:"workspace",keys:["ctrl+w"],prefixKeys:["w"],category:"Workspace",description:"Close active split (tab when unsplit)",hint:{keys:"ctrl+w"},presentation:"onePress"},{id:"workspace.split.rename",scope:"workspace",keys:["f2"],category:"Workspace",description:"Rename active split (tab when unsplit)",hint:{keys:"f2"},presentation:"onePress"}]});var Uu;var Bu=a(()=>{Uu=[{id:"files.nav",scope:"files",keys:["j","k","down","up"],category:"Files",description:"Move cursor up/down",hint:{keys:"j/k"}},{id:"files.hierarchy",scope:"files",keys:["h","l","left","right"],category:"Files",description:"Collapse / expand tree level",hint:{keys:"h/l"}},{id:"files.open",scope:"files",keys:["return"],category:"Files",description:"Open file in configured editor (diff when supported)",hint:{keys:"enter"}},{id:"files.tab",scope:"files",keys:["[","]"],category:"Files",description:"Switch tab (cycle All / Changes)",hint:{keys:"[/]"}},{id:"files.refresh",scope:"files",keys:["r"],category:"Files",description:"Refresh",hint:{keys:"r"}},{id:"files.scope",scope:"files",keys:["b"],category:"Files",description:"Toggle Changes scope (working \u2194 branch vs base)",hint:{keys:"b"}},{id:"files.diff",scope:"files",keys:["d"],category:"Files",description:"Open read-only diff in a workspace tab",hint:{keys:"d"}},{id:"files.openExternal",scope:"files",keys:["o"],category:"Files",description:"Open file in system default app (audio / video / pdf preview)",hint:{keys:"o"}},{id:"files.mention",scope:"files",keys:["a"],category:"Files",description:"Inject @<path> mention into the engine pane",hint:{keys:"a"}},{id:"files.createPR",scope:"global",keys:[],prefixKeys:["p","shift+p"],category:"Files",description:"Create PR from the current task"},{id:"diff.review.cursor",scope:"workspace",keys:[],category:"Diff review",description:"Move the line cursor over the diff",hint:{keys:"j/k"}},{id:"diff.review.range",scope:"workspace",keys:[],category:"Diff review",description:"Toggle range anchor at the cursor",hint:{keys:"v"}},{id:"diff.review.note",scope:"workspace",keys:[],category:"Diff review",description:"Add a review note at the cursor",hint:{keys:"c"}},{id:"diff.review.send",scope:"workspace",keys:[],category:"Diff review",description:"Send all unsent review notes to the engine",hint:{keys:"s"}}]});var Ku;var Fu=a(()=>{Ku=[{id:"inbox.show",scope:"global",keys:[],prefixKeys:["i"],category:"Global",description:"Open Inbox"},{id:"inbox.nav",scope:"inbox",keys:["j","k","down","up"],category:"Inbox",description:"Move cursor up/down",hint:{keys:"j/k"}},{id:"inbox.open",scope:"inbox",keys:["return"],category:"Inbox",description:"Open the selected Task and Terminal Tab",hint:{keys:"enter"}},{id:"inbox.delete",scope:"inbox",keys:["d"],category:"Inbox",description:"Remove the selected Inbox item",hint:{keys:"d"}}]});function Ou($){return Mu[$]??null}var Mu,Nu;var uT=a(()=>{Mu=["2","3","4","5","6","7","8","9","0"],Nu=Mu.map(($)=>`ctrl+${$}`)});var Lu;var ju=a(()=>{uT();Lu=[{id:"sidebar.nav",scope:"sidebar",keys:["j","k","down","up"],category:"Sidebar",description:"Move cursor up/down",hint:{keys:"j/k"}},{id:"sidebar.select",scope:"sidebar",keys:["return"],category:"Sidebar",description:"Open the selected task",hint:{keys:"enter"}},{id:"sidebar.tree.open",scope:"sidebar",keys:["l","space"],category:"Sidebar",description:"Open the row under the cursor (a tab row enters its chat)",hint:{keys:"l"}},{id:"sidebar.goto",scope:"sidebar",keys:["g","shift+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"}},{id:"sidebar.archive",scope:"sidebar",keys:["a"],category:"Sidebar",description:"Toggle archive",hint:{keys:"a"}},{id:"sidebar.localMerge",scope:"sidebar",keys:["shift+m"],category:"Sidebar",description:"Reorder project (Shift+M, then j/k)",hint:{keys:"M"}},{id:"sidebar.pin",scope:"sidebar",keys:["shift+p"],category:"Sidebar",description:"Pin / unpin task at top (Shift+P)",hint:{keys:"P"}},{id:"sidebar.previewToggle",scope:"sidebar",keys:["i"],category:"Sidebar",description:"Toggle live preview for task (i)",hint:{keys:"i"}},{id:"sidebar.view",scope:"sidebar",keys:["[","]"],category:"Sidebar",description:"Switch view (Working session \u2194 Archives)",hint:{keys:"[/]"}},{id:"sidebar.sort",scope:"sidebar",keys:["t"],category:"Sidebar",description:"Switch task sort (default \u2194 recent)",hint:{keys:"t"}},{id:"sidebar.projectFilter",scope:"sidebar",keys:["ctrl+p"],category:"Sidebar",description:"Cycle task project filter",hint:{keys:"ctrl+p"}},{id:"sidebar.delete",scope:"sidebar",keys:["d"],category:"Sidebar",description:"Delete task (with confirm)",hint:{keys:"d"}},{id:"sidebar.search.enter",scope:"sidebar",keys:["/"],category:"Sidebar",description:"Search tasks (fuzzy filter)",hint:{keys:"/"}},{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 directory in your editor",hint:{keys:"o"}},{id:"tasks.renameBranch",scope:"sidebar",keys:["b"],category:"Tasks pane",description:"Rename the selected task's git branch",hint:{keys:"b"}},{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"}},{id:"tasks.update",scope:"sidebar",keys:["u"],category:"Tasks pane",description:"Open the update page (when a new version is available)",hint:{keys:"u"}},{id:"tasks.jump",scope:"global",keys:[...Nu],category:"Tasks pane",description:"Jump to the task showing that digit (ctrl+2 = first row)",hint:{keys:"ctrl+2-0"},presentation:"onePress"},{id:"tasks.focusEngine",scope:"sidebar",keys:["right"],category:"Tasks pane",description:"Focus the engine pane of the current window",hint:{keys:"\u2192"}},{id:"tasks.toggleKeys",scope:"sidebar",keys:["?"],category:"Tasks pane",description:"Collapse / expand the keys legend",hint:{keys:"?"}}]});var t7;var cT=a(()=>{qu();Bu();Fu();ju();t7=[{id:"help.open",scope:"global",keys:["f1"],category:"Global",description:"Show keybindings help",hint:{keys:"F1"},presentation:"onePress"},{id:"task.new",scope:"sidebar",keys:["n"],category:"Sidebar",description:"New task",hint:{keys:"n"}},{id:"task.openEditor",scope:"global",keys:[],prefixKeys:["o"],category:"Global",description:"Open active Task directory in editor"},{id:"task.moveMode",scope:"global",keys:[],prefixKeys:["m"],category:"Global",description:"Reorder projects (then j/k)"},{id:"settings.open",scope:"global",keys:[],prefixKeys:[","],category:"Global",description:"Open settings"},{id:"settings.open.sidebar",scope:"sidebar",keys:["s"],category:"Sidebar",description:"Open settings",hint:{keys:"s"}},{id:"worktrees.open.sidebar",scope:"sidebar",keys:["x"],category:"Sidebar",description:"Open worktrees",hint:{keys:"x"}},{id:"kanban.open",scope:"global",keys:[],prefixKeys:["1"],category:"Global",description:"Open kanban (issues board)"},{id:"automations.open",scope:"global",keys:[],prefixKeys:["2"],category:"Global",description:"Open automations (scheduled tasks)"},{id:"workItems.open",scope:"global",keys:[],prefixKeys:["3"],category:"Global",description:"Open GitHub issues (external tracker)"},{id:"app.quit",scope:"sidebar",keys:["q","ctrl+q"],category:"Sidebar",description:"Quit (with confirm)",hint:{keys:"q"}},{id:"focus.sidebar",scope:"workspace",keys:["ctrl+q"],category:"Workspace",description:"Back to sidebar (tasks)",hint:{keys:"ctrl+q"},presentation:"onePress"},{id:"focus.previous",scope:"global",keys:[],prefixKeys:["h"],category:"Navigation",description:"Focus previous pane (files \u2192 workspace \u2192 sidebar)"},{id:"focus.next",scope:"global",keys:["f4"],prefixKeys:["l"],category:"Navigation",description:"Focus next pane (sidebar \u2192 workspace \u2192 files)",hint:{keys:"f4"},presentation:"onePress"},{id:"attention.next",scope:"global",keys:["f7"],category:"Navigation",description:"Jump to the next available Inbox item",hint:{keys:"f7"},presentation:"onePress"},{id:"workspace.zenToggle",scope:"global",keys:[],prefixKeys:["z"],category:"Navigation",description:"Toggle zen mode (hide the files column)"},{id:"chat.interrupt",scope:"workspace",keys:[],category:"Workspace",description:"Interrupt current turn (esc while streaming)"},...Lu,...Hu,...Uu,...Ku,{id:"terminal.scroll-up",scope:"terminal",keys:["ctrl+pageup"],category:"Terminal",description:"Scroll scrollback up",hint:{keys:"ctrl+pgup"}},{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"},presentation:"onePress"},{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+[/]"}}]});function G5($){let Z=[];for(let J in $){let X=$[J];if(!X)continue;let z=xQ(J),G=z?.keys??[],W=z?.prefixKeys??[];if(G.length===0&&W.length===0){console.warn(`[rove/keybindings] bindByIds: id="${J}" has no chords (or doesn't exist in KobeKeymap)`);continue}G.forEach((H,U)=>Z.push({key:H,cmd:X,slot:U,id:J})),W.forEach((H,U)=>Z.push({key:H,prefix:!0,cmd:X,slot:U,id:J}))}return Z}var Vu=a(()=>{mJ()});function Cu($){return _u.get($)?.keys??[]}function lT(){for(let $ of t7){let Z=_u.get($.id);if(!Z)continue;let J=$;J.keys=[...Z.keys],J.prefixKeys=Z.prefixKeys&&[...Z.prefixKeys],J.hint=Z.hint?{...Z.hint}:void 0}}function pT(){return Du}function nT($){return dT.add($),()=>{dT.delete($)}}function iT(){Du+=1;for(let $ of[...dT])$()}function xQ($){return KY0.get($)}var _u,Du=0,dT,KY0;var mJ=a(()=>{cT();cT();Vu();_u=new Map(t7.map(($)=>[$.id,{keys:[...$.keys],prefixKeys:$.prefixKeys&&[...$.prefixKeys],hint:$.hint?{...$.hint}:void 0}]));dT=new Set;KY0=new Map(t7.map(($)=>[$.id,$]))});function oT($){let Z=$,J=typeof Z.sequence==="string"&&Z.sequence.length>0?Z.sequence:null,X=typeof Z.raw==="string"&&Au.test(Z.raw)||J!=null&&Au.test(J);if(J!=null&&!X)return J;if(J!=null&&J.length===1&&J>=" "&&J!=="\x7F"&&!$.ctrl&&!Z.option&&!Z.meta)return J;return Pu($)}function Pu($){let Z=$.name;if(!Z)return null;if($.shift&&Z==="tab")return"\x1B[Z";if($.option||$.meta){let J=Pu({...$,option:!1,meta:!1});return J==null?null:`\x1B${J}`}switch(Z){case"return":case"enter":return"\r";case"tab":return"\t";case"backspace":return"\x7F";case"delete":return"\x1B[3~";case"up":return"\x1B[A";case"down":return"\x1B[B";case"right":return"\x1B[C";case"left":return"\x1B[D";case"home":return"\x1B[H";case"end":return"\x1B[F";case"escape":return"\x1B";case"space":return $.ctrl?"\x00":" ";default:if(Z.length===1){if($.ctrl){let X=Z.toLowerCase().charCodeAt(0);if(X>=97&&X<=122)return String.fromCharCode(X-96);let z=FY0[Z];if(z!=null)return z;return null}if($.shift&&Z>="a"&&Z<="z")return Z.toUpperCase();return Z}return null}}function Su($,Z,J,X){if($.mouseTracking)return`\x1B[<${Z==="up"?64:65};${Math.max(1,J)};${Math.max(1,X)}M`;if($.alternateScreen)return($.applicationCursorKeys?Z==="up"?"\x1BOA":"\x1BOB":Z==="up"?"\x1B[A":"\x1B[B").repeat(3);return null}var Au,FY0,Ru=10,MY0,NY0,OY0,LY0,Tu;var aT=a(()=>{mJ();Au=/^\x1b\[[\d:;]*u$/,FY0={"@":"\x00","[":"\x1B","\\":"\x1C","]":"\x1D","^":"\x1E",_:"\x1F","?":"\x7F"};MY0=[{id:"help.open"},{id:"focus.sidebar"},{id:"chat.tab.new"},{id:"chat.tab.close"},{id:"chat.tab.cycle-next"},{id:"chat.tab.cycle-prev"},{id:"chat.tab.rename"},"ctrl+e","ctrl+f",{id:"workspace.split.right"},{id:"workspace.split.down"},{id:"workspace.split.focus-next"},{id:"focus.next"},{id:"terminal.reset"},{id:"attention.next"},{id:"tasks.jump"}],NY0=[...new Set(MY0.flatMap(($)=>typeof $==="string"?[$]:Cu($.id)))],OY0=[..."abcdefghijklmnopqrstuvwxyz".split(""),..."ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""),..."0123456789".split(""),..." `~!@#$%^&*()-_=+[]{}\\|;:'\",.<>/?".split(""),"return","enter","space","tab","backspace","delete","up","down","left","right","home","end","pageup","pagedown","escape","insert","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12"],LY0=["","ctrl+","alt+","shift+","ctrl+shift+","alt+shift+","ctrl+alt+"],Tu=OY0.flatMap(($)=>LY0.map((Z)=>`${Z}${$}`)).filter(($)=>!NY0.includes($))});class rT{data=new Set;exits=new Set;titles=new Set;get dataCount(){return this.data.size}addData($){return this.data.add($),()=>this.data.delete($)}addExit($){return this.exits.add($),()=>this.exits.delete($)}addTitle($){return this.titles.add($),()=>this.titles.delete($)}publishData($,Z,J){for(let X of this.data)try{X($,Z,J)}catch{}}publishTitle($){for(let Z of this.titles)try{Z($)}catch{}}drainExits(){let $=[...this.exits];return this.exits.clear(),$}clearData(){this.data.clear()}clearAll(){this.data.clear(),this.exits.clear(),this.titles.clear()}}function Iu($,Z){if($===Z)return!0;return $!==void 0&&Z!==void 0&&$[0]===Z[0]&&$[1]===Z[1]&&$[2]===Z[2]}function jY0($,Z){return $.text===Z.text&&($.attributes??0)===(Z.attributes??0)&&Iu($.fg,Z.fg)&&Iu($.bg,Z.bg)}function VY0($,Z){if($===Z)return!0;if($.length!==Z.length)return!1;for(let J=0;J<$.length;J++)if(!jY0($[J],Z[J]))return!1;return!0}function sT($,Z){return $&&VY0($,Z)?$:Z}function Eu($,Z){if($.length!==Z.length)return Z;let J=!1;for(let X=0;X<Z.length;X++){let z=sT($[X],Z[X]);if(Z[X]=z,z!==$[X])J=!0}return J?Z:$}function wu($,Z){if($===Z)return $;if($&&Z&&$.x===Z.x&&$.y===Z.y)return $;return Z}function hJ($){if($<0)return[0,0,0];if($<16)return _Y0[$]??[0,0,0];if($<232){let Z=$-16,J=Math.floor(Z/36),X=Math.floor(Z/6%6),z=Z%6,G=(W)=>W===0?0:55+40*W;return[G(J),G(X),G(z)]}if($<256){let Z=8+10*($-232);return[Z,Z,Z]}return[0,0,0]}function CY0($,Z){let J=Z.length===0?[0]:Z.map((H)=>H===""?0:Number.parseInt(H,10)||0),X=$.fg,z=$.bg,G=$.attributes,W=0;while(W<J.length){let H=J[W];if(H===void 0)break;if(H===0){X=void 0,z=void 0,G=0,W+=1;continue}if(H===1){G|=Y4.BOLD,W+=1;continue}if(H===2){G|=Y4.DIM,W+=1;continue}if(H===3){G|=Y4.ITALIC,W+=1;continue}if(H===4){G|=Y4.UNDERLINE,W+=1;continue}if(H===5||H===6){G|=Y4.BLINK,W+=1;continue}if(H===7){G|=Y4.INVERSE,W+=1;continue}if(H===8){G|=Y4.HIDDEN,W+=1;continue}if(H===9){G|=Y4.STRIKETHROUGH,W+=1;continue}if(H===22){G&=~(Y4.BOLD|Y4.DIM),W+=1;continue}if(H===23){G&=~Y4.ITALIC,W+=1;continue}if(H===24){G&=~Y4.UNDERLINE,W+=1;continue}if(H===25){G&=~Y4.BLINK,W+=1;continue}if(H===27){G&=~Y4.INVERSE,W+=1;continue}if(H===28){G&=~Y4.HIDDEN,W+=1;continue}if(H===29){G&=~Y4.STRIKETHROUGH,W+=1;continue}if(H>=30&&H<=37){X=hJ(H-30),W+=1;continue}if(H>=90&&H<=97){X=hJ(H-90+8),W+=1;continue}if(H===39){X=void 0,W+=1;continue}if(H>=40&&H<=47){z=hJ(H-40),W+=1;continue}if(H>=100&&H<=107){z=hJ(H-100+8),W+=1;continue}if(H===49){z=void 0,W+=1;continue}if(H===38){let U=J[W+1];if(U===5){let B=J[W+2]??0;X=hJ(B),W+=3;continue}if(U===2){let B=J[W+2]??0,N=J[W+3]??0,L=J[W+4]??0;X=[B,N,L],W+=5;continue}W+=1;continue}if(H===48){let U=J[W+1];if(U===5){let B=J[W+2]??0;z=hJ(B),W+=3;continue}if(U===2){let B=J[W+2]??0,N=J[W+3]??0,L=J[W+4]??0;z=[B,N,L],W+=5;continue}W+=1;continue}W+=1}return{fg:X,bg:z,attributes:G}}function DY0($){let Z=$;if(Z.charCodeAt(0)===27)Z=Z.slice(2);else if(Z.charCodeAt(0)===155)Z=Z.slice(1);if(Z.endsWith("m"))Z=Z.slice(0,-1);return Z.split(";")}function AY0($,Z=xu){if($.length===0)return{chunks:[],endStyle:Z};let J=[],X={...Z},z="",G=()=>{if(z.length===0)return;let H={text:z,...X.fg?{fg:X.fg}:{},...X.bg?{bg:X.bg}:{},...X.attributes!==0?{attributes:X.attributes}:{}};J.push(H),z=""},W=$F($);for(let H of W){if(H.type==="TEXT"){z+=H.raw;continue}if(H.type==="CSI"&&H.command==="m"){G(),X=CY0(X,DY0(H.raw));continue}if(H.type==="OSC"&&H.command==="8"){G();let U=H.params[H.params.length-1]??"";X={...X,attributes:U?X.attributes|Y4.UNDERLINE:X.attributes&~Y4.UNDERLINE}}}return G(),{chunks:J,endStyle:X}}function Cj($){let Z=$.split(`
655
655
  `),J=[],X=xu;for(let z of Z){let{chunks:G,endStyle:W}=AY0(z,X);J.push(G),X=W}return J}var Y4,xu,_Y0;var eH=a(()=>{RT();Y4=Object.freeze({BOLD:1,DIM:2,ITALIC:4,UNDERLINE:8,BLINK:16,INVERSE:32,HIDDEN:64,STRIKETHROUGH:128}),xu=Object.freeze({fg:void 0,bg:void 0,attributes:0});_Y0=[[21,22,30],[247,118,142],[158,206,106],[224,175,104],[122,162,247],[187,154,247],[125,207,255],[169,177,214],[65,72,104],[255,137,157],[158,224,68],[250,186,74],[141,176,255],[199,169,255],[164,218,255],[192,202,245]]});function Dj($){if($==="")return;let Z=$.indexOf(":"),J=Number($.slice(Z+1));if($.startsWith("rgb:"))return[J>>16&255,J>>8&255,J&255];if($.startsWith("pal:"))return hJ(J);return}function fu($,Z){if(Z==="fg"?$.isFgDefault():$.isBgDefault())return"";let X=Z==="fg"?$.getFgColorMode():$.getBgColorMode(),z=Z==="fg"?$.getFgColor():$.getBgColor();if(X===bu||(Z==="fg"?$.isFgRGB():$.isBgRGB()))return`rgb:${z}`;if(X===yu||(Z==="fg"?$.isFgPalette():$.isBgPalette()))return`pal:${z}`;if(X===PY0)return"";return""}function ku($){let Z=0;if($.isBold())Z|=Y4.BOLD;if($.isDim())Z|=Y4.DIM;if($.isItalic())Z|=Y4.ITALIC;if($.isUnderline())Z|=Y4.UNDERLINE;if($.isBlink())Z|=Y4.BLINK;if($.isInverse())Z|=Y4.INVERSE;if($.isInvisible())Z|=Y4.HIDDEN;if($.isStrikethrough())Z|=Y4.STRIKETHROUGH;return Z}function TY0($){return{fg:fu($,"fg"),bg:fu($,"bg"),attrs:ku($)}}function SY0($,Z){return $.fg===Z.fg&&$.bg===Z.bg&&$.attrs===Z.attrs}function IY0($){let Z=Dj($.fg),J=Dj($.bg);return{...Z?{fg:Z}:{},...J?{bg:J}:{},...$.attrs!==0?{attributes:$.attrs}:{}}}function vu($){return $==="\u2580"||$==="\u2584"||$==="\u2588"}function mu($,Z){if($===void 0||Z===void 0)return!1;return $[0]===Z[0]&&$[1]===Z[1]&&$[2]===Z[2]}function hu($){let Z=$.getChars();if(Z!==""&&Z!==" ")return!0;return!$.isAttributeDefault()||!$.isFgDefault()||!$.isBgDefault()}function Aj($,Z){if(tT===void 0){let J=$.getCell(Z);if(J)tT=J;return J}return $.getCell(Z,tT)}function uu($,Z=-1){let J=Math.min($.length-1,Z);for(let U=0;U<$.length;U++){let B=Aj($,U);if(!B||B.getWidth()===0)continue;if(hu(B))J=Math.max(J,U)}if(J===-1)return[];let X=[],z=RY0,G=!1,W="",H=()=>{if(W==="")return;X.push({text:W,...IY0(z)}),W=""};for(let U=0;U<=J;U++){let B=Aj($,U);if(!B||B.getWidth()===0)continue;let N=TY0(B);if(!SY0(z,N))H(),z=N,G=mu(Dj(N.fg),Dj(N.bg));let L=B.getChars()||" ";W+=vu(L)&&G?" ":L}return H(),X}function gu($,Z,J){if(J==="fg"?Z.isFgDefault():Z.isBgDefault())return $===void 0;if(!$)return!1;let z=J==="fg"?Z.getFgColorMode():Z.getBgColorMode(),G=J==="fg"?Z.getFgColor():Z.getBgColor();if(z===bu||(J==="fg"?Z.isFgRGB():Z.isBgRGB()))return $[0]===(G>>16&255)&&$[1]===(G>>8&255)&&$[2]===(G&255);if(z===yu||(J==="fg"?Z.isFgPalette():Z.isBgPalette())){let W=hJ(G);return $[0]===W[0]&&$[1]===W[1]&&$[2]===W[2]}return!1}function EY0($,Z){return($.attributes??0)===ku(Z)&&gu($.fg,Z,"fg")&&gu($.bg,Z,"bg")}function cu($,Z,J=-1){if(!$)return Z.length===0;let X=Math.min($.length-1,J);for(let W=0;W<$.length;W++){let H=Aj($,W);if(!H||H.getWidth()===0)continue;if(hu(H))X=Math.max(X,W)}if(X===-1)return Z.length===0;let z=0,G=0;for(let W=0;W<=X;W++){let H=Aj($,W);if(!H||H.getWidth()===0)continue;let U=Z[z];if(!U||!EY0(U,H))return!1;let B=H.getChars()||" ",N=vu(B)&&mu(U.fg,U.bg)?" ":B;if(!U.text.startsWith(N,G))return!1;if(G+=N.length,G===U.text.length)z++,G=0;else if(G>U.text.length)return!1}return z===Z.length&&G===0}var PY0=0,yu=16777216,bu=50331648,RY0,tT;var eT=a(()=>{eH();RY0=Object.freeze({fg:"",bg:"",attrs:0})});function du($,Z){$.onData(Z.onReply),$.onTitleChange(Z.onTitle)}class $S{dirty=null;subscription;supported;constructor($){let Z=$._core?._inputHandler?.onRequestRefreshRows;if(!Z){this.supported=!1,this.subscription=null;return}this.supported=!0,this.subscription=Z((J)=>{if(!J){this.dirty={kind:"all"};return}if(!this.dirty)this.dirty={kind:"range",start:J.start,end:J.end};else if(this.dirty.kind==="range")this.dirty.start=Math.min(this.dirty.start,J.start),this.dirty.end=Math.max(this.dirty.end,J.end)})}markAll(){this.dirty={kind:"all"}}peek(){return this.dirty}clear(){this.dirty=null}dispose(){this.subscription?.dispose()}}function lu($,Z,J){return{type:$.type,baseY:$.baseY,length:$.length,start:Math.max(0,$.length-(Z+J))}}function wY0($,Z){return $.type===Z.type&&$.baseY===Z.baseY&&$.length===Z.length&&$.start===Z.start}function pu($,Z,J,X,z,G,W=null){if(!J||!wY0(J,X)||!z)return!1;let H=X.start,U=X.length-1;if(z.kind==="range")H=Math.max(H,$.baseY+z.start),U=Math.min(U,$.baseY+z.end);let B=$.baseY+$.cursorY;for(let N=H;N<=U;N++){let L=Z[N-X.start];if(!L)return!1;if(W&&N<W.baseY&&W.cache.get(W.absBase+N)===L)continue;let M=!G&&N===B?$.cursorX-1:-1;if(!cu($.getLine(N),L,M))return!1}return!0}function nu($){try{return $.modes.synchronizedOutputMode===!0}catch{return!1}}function Pj($){try{return $._core?.coreService?.isCursorHidden===!0}catch{return!1}}var ZS=a(()=>{eT()});class XF{taskId;cwd;term;listeners=new rT;snapshot=[];cursor=null;snapshotWindow=null;snapshotEpoch=0;snapshotDirty=!1;scrollbackCache=new Map;anchor;anchorId=0;_title=null;_unwatchedSince=Date.now();_killed=!1;muteReplies=!1;cols;rows;refreshQueued=!1;refreshTracker;publishedMeta=null;scrollbackRows;constructor($){if(this.taskId=$.taskId,this.cwd=$.cwd,this.cols=$.cols??aH,this.rows=$.rows??rH,$.restore?.title)this._title=$.restore.title;this.scrollbackRows=$.scrollback??Wu(),this.term=new iu.Terminal({allowProposedApi:!0,cols:this.cols,rows:this.rows,scrollback:this.scrollbackRows}),this.term.loadAddon(new Qu),this.term.unicode.activeVersion="11",this.refreshTracker=new $S(this.term),du(this.term,{onReply:(Z)=>{if(this._killed||this.muteReplies)return;try{this.transportWrite(Z)}catch{}},onTitle:(Z)=>{if(!Z||Z===this._title)return;this._title=Z,this.listeners.publishTitle(Z)}})}get killed(){return this._killed}write($){if(this._killed||$.length===0)return;try{this.transportWrite($)}catch{this.markDead(!1)}}onExit($){if(this._killed)return $(),()=>{};return this.listeners.addExit($)}onTitleChange($){let Z=this.listeners.addTitle($);if(this._title)try{$(this._title)}catch{}return Z}paste($){if(this._killed||$.length===0)return;let Z=!1;try{Z=this.term.modes.bracketedPasteMode===!0}catch{}this.write(Z?`\x1B[200~${$}\x1B[201~`:$)}wheel($,Z,J){if(this._killed)return!1;try{let X=this.term.modes,z=Su({mouseTracking:X.mouseTrackingMode!=="none",applicationCursorKeys:X.applicationCursorKeysMode===!0,alternateScreen:this.term.buffer.active.type==="alternate"},$,Z,J);if(z!==null)return this.write(z),!0}catch{}return!1}onData($){this.ensureFreshSnapshot();let Z=this.listeners.addData($);if(this._unwatchedSince=null,this.snapshot.length>0)try{$(this.snapshot,this.cursor,this.snapshotWindow)}catch{}return()=>{if(Z(),this.listeners.dataCount===0&&this._unwatchedSince===null)this._unwatchedSince=Date.now()}}unwatchedSinceMs(){return this._unwatchedSince}get windowTitle(){return this._title}get scrollback(){return this.scrollbackRows}resizeEmulator($,Z){this.cols=$,this.rows=Z,this.term.resize($,Z),this.invalidateScrollbackCache(),this.refreshTracker.markAll()}get size(){return{cols:this.cols,rows:this.rows}}resize($,Z){if(this._killed)return;this.cols=$,this.rows=Z;try{this.term.resize($,Z),this.invalidateScrollbackCache(),this.transportResize($,Z),this.refreshTracker.markAll(),this.refreshSnapshot()}catch{this.markDead(!1)}}invalidateScrollbackCache(){this.scrollbackCache.clear(),this.anchor?.dispose(),this.anchor=void 0,this.anchorId=0,this.snapshotWindow=null,this.publishedMeta=null}capture(){return this.ensureFreshSnapshot(),this.snapshot}captureCursor(){return this.ensureFreshSnapshot(),this.cursor}captureWindow(){return this.ensureFreshSnapshot(),this.snapshotWindow}ensureFreshSnapshot(){if(!this.snapshotDirty||this._killed)return;this.refreshSnapshot()}kill(){if(this._killed)return;this.markDead(!0)}feed($){if(this._killed)return;this.term.write($,()=>{if(!this.refreshTracker.supported)this.refreshTracker.markAll();this.queueRefresh()})}feedReplay($){if(this._killed)return;this.muteReplies=!0,this.term.write($,()=>{if(this.muteReplies=!1,!this.refreshTracker.supported)this.refreshTracker.markAll();this.queueRefresh()})}queueRefresh(){if(this.listeners.dataCount===0){this.snapshotDirty=!0;return}if(this.refreshQueued)return;this.refreshQueued=!0,setTimeout(()=>{this.refreshQueued=!1,this.refreshSnapshot()},16)}refreshSnapshot(){if(this._killed)return;let $=this.snapshot,Z=this.cursor,J=this.snapshotWindow;if(nu(this.term)){this.queueRefresh();return}let X=this.term.buffer.active,z=Pj(this.term),G=lu(X,this.rows,this.scrollbackRows),W=wu(Z,z?null:{x:X.cursorX,y:X.baseY+X.cursorY-G.start}),H=this.anchor,U=X.type!=="alternate"&&H!==void 0&&!H.isDisposed?{baseY:X.baseY,absBase:this.anchorId-H.line,cache:this.scrollbackCache}:null;if(pu(X,$,this.publishedMeta,G,this.refreshTracker.peek(),z,U)){if(this.snapshotDirty=!1,this.refreshTracker.clear(),this.publishedMeta=G,this.cursor=W,this.cursor!==Z)this.publishSnapshot();return}let N=X.type!=="alternate"&&X.baseY>0;if(N&&(this.anchor===void 0||this.anchor.isDisposed)){this.scrollbackCache.clear();let E=this.term.registerMarker(-X.cursorY-1);if(E)this.snapshotEpoch+=1,this.anchor=E,this.anchorId=E.line}let L=N&&this.anchor!==void 0&&!this.anchor.isDisposed,M=L?this.anchorId-this.anchor.line:0,V=this.scrollbackCache,A=[],_=X.baseY+X.cursorY,C=G.start;for(let E=C;E<X.length;E++){let S=L&&E<X.baseY;if(S){let h=V.get(M+E);if(h){A.push(h);continue}}let R=X.getLine(E),w=!z&&E===_?X.cursorX-1:-1,b=R?uu(R,w):[],k=S?sT($[A.length],b):b;if(A.push(k),S)V.set(M+E,k)}if(L){let E=M+C;for(let S of V.keys())if(S<E)V.delete(S)}if(N){let E=this.term.registerMarker(-X.cursorY-1);if(E)this.anchorId=L?M+E.line:0,this.anchor?.dispose(),this.anchor=E}this.snapshot=Eu($,A);let y=M+C;if(this.snapshotWindow=L?J?.epoch===this.snapshotEpoch&&J.startLine===y?J:{epoch:this.snapshotEpoch,startLine:y}:null,this.snapshotDirty=!1,this.refreshTracker.clear(),this.publishedMeta=G,this.cursor=W,this.snapshot===$&&this.cursor===Z&&this.snapshotWindow===J)return;this.publishSnapshot()}publishSnapshot(){this.listeners.publishData(this.snapshot,this.cursor,this.snapshotWindow)}disposeEmulator(){try{this.term.dispose()}catch{}}markDead($){if(this._killed)return;if(this._killed=!0,this.refreshTracker.dispose(),this.disposeEmulator(),$)try{this.transportKill()}catch{}let Z=this.listeners.drainExits();this.listeners.clearData();for(let J of Z)try{J()}catch{}}silentDispose(){this._killed=!0,this.refreshTracker.dispose(),this.disposeEmulator(),this.listeners.clearAll()}}var iu;var JS=a(()=>{zu();hT();aT();s3();eT();ZS();iu=H1(Gu(),1)});var xY0=150,QF;var Rj=a(()=>{jJ();Sh();JF();JS();ZS();JF();QF=class QF extends XF{client=null;opened=!1;pendingInput=[];pendingResize=null;unsubs=[];deadOnAttach=!1;sessionPid=void 0;pendingExitPid=null;get shellPid(){return this.sessionPid??null}serializer=new Th;hostOffset=null;constructor($){super($);this.term.loadAddon(this.serializer),this.openRemote($)}static createdFresh($){return $.alive&&($.created??$.replay.length===0)}async openRemote($){try{let Z=await ZF();if(this.killed)return;this.client=Z,hh(this),this.unsubs.push(Z.onLifecycle("close",()=>this.remoteGone()));let J=await Z.request("pty.open",{key:this.taskId,cwd:this.cwd,command:$.command,shell:$.shell,cols:this.cols,rows:this.rows,sinceOffset:$.restore?.byteOffset,sincePid:$.restore?.pid??void 0});if(this.killed)return;this.sessionPid=J.pid??null,this.hostOffset=J.offset??null;let X=$.restore!==void 0&&J.sinceValid===!0&&J.created!==!0&&(J.pid??null)===$.restore.pid;if(X&&$.restore){if(await this.restoreParked($.restore,Buffer.from(J.replay,"base64")),this.killed)return}else if(J.replay.length>0)this.feedReplay(Buffer.from(J.replay,"base64"));if(this.opened=!0,this.pendingResize){let{cols:G,rows:W}=this.pendingResize;this.pendingResize=null,this.sendResize(G,W)}if($.initialInput&&QF.createdFresh(J))this.sendInput($.initialInput);for(let G of this.pendingInput.splice(0))this.sendInput(G);let z=this.pendingExitPid;if(this.pendingExitPid=null,!J.alive)this.deadOnAttach=J.replay.length>0||X,this.remoteGone();else if(z!==null&&z===this.sessionPid)this.remoteGone();else if(J.replay.length>0&&!X){if(this.sendResize(this.cols,Math.max(1,this.rows-1)),await Promise.all([this.nextDataOrTimeout(500),new Promise((G)=>setTimeout(G,xY0))]),!this.killed)this.sendResize(this.cols,this.rows)}}catch(Z){V4("pty-hosted",Z),this.remoteGone()}}transportWrite($){if(!this.opened){this.pendingInput.push($);return}this.sendInput($)}transportResize($,Z){if(!this.opened){this.pendingResize={cols:$,rows:Z};return}this.sendResize($,Z)}transportKill(){let $=this.client;if($)$.request("pty.kill",{key:this.taskId}).catch(()=>{});this.cleanup()}kill(){if(this.killed){this.client?.request("pty.kill",{key:this.taskId}).catch(()=>{});return}super.kill()}capturePark(){if(this.killed||!this.opened||this.hostOffset===null||this.sessionPid===void 0)return null;try{return{serialized:Buffer.from(this.serializer.serialize({scrollback:this.scrollback}),"utf8").toString(),title:this.windowTitle,cursorHidden:Pj(this.term),cols:this.cols,rows:this.rows,byteOffset:this.hostOffset,pid:this.sessionPid}}catch{return null}}async restoreParked($,Z){let J=this.cols,X=this.rows;if($.cols!==J||$.rows!==X)this.resizeEmulator($.cols,$.rows);if(this.feedReplay($.serialized+($.cursorHidden?"\x1B[?25l":"")),Z.byteLength>0)this.feedReplay(Z);if(await new Promise((z)=>{let G=this.onExit(z);this.term.write("",()=>{G(),z()})}),!this.killed&&(this.cols!==J||this.rows!==X))this.resizeEmulator(J,X)}detach($={}){let Z=this.client;this.cleanup();let J=ch(this.taskId);if(Z&&J===0)Z.request("pty.detach",{key:this.taskId,parked:$.parked===!0,parkedScreenBytes:$.parkedScreenBytes}).catch(()=>{});this.silentDispose()}sendInput($){this.client?.request("pty.write",{key:this.taskId,data:$}).catch(()=>this.remoteGone())}sendResize($,Z){this.client?.request("pty.resize",{key:this.taskId,cols:$,rows:Z}).catch(()=>{})}dataWaiter=null;_lastOutputAt=null;lastOutputAtMs(){return this._lastOutputAt}nextDataOrTimeout($){return new Promise((Z)=>{let J=setTimeout(()=>{this.dataWaiter=null,Z()},$);this.dataWaiter=()=>{this.dataWaiter=null,clearTimeout(J),Z()}})}feedFrame($){this.dataWaiter?.(),this._lastOutputAt=Date.now();let Z=Buffer.from($,"base64");if(this.hostOffset!==null)this.hostOffset+=Z.byteLength;this.feed(Z)}remoteExited($){if(this.killed)return;if($===void 0){this.remoteGone();return}if(this.sessionPid===void 0){this.pendingExitPid=$;return}if($!==null&&$===this.sessionPid)this.remoteGone()}remoteGone(){this.cleanup(),this.markDead(!1)}cleanup(){uh(this);for(let $ of this.unsubs.splice(0))try{$()}catch{}}}});class Tj{taskId;cwd;listeners=new Set;buffer="";writes=[];_killed=!1;_title=null;exitListeners=new Set;titleListeners=new Set;pastes=[];deadOnAttach=!1;wheels=[];_cols;_rows;_cursor=null;constructor($){if(this.taskId=$.taskId,this.cwd=$.cwd,this._cols=$.cols??aH,this._rows=$.rows??rH,$.initialInput)this.writes.push($.initialInput)}get killed(){return this._killed}get writeLog(){return this.writes}get geometry(){return{cols:this._cols,rows:this._rows}}feed($){if(this._killed)return;this.buffer+=$;let Z=Fj($);if(Z&&Z!==this._title){this._title=Z;for(let X of this.titleListeners)try{X(Z)}catch{}}let J=this.capture();for(let X of this.listeners)try{X(J,this._cursor,null)}catch{}}write($){if(this._killed)return;this.writes.push($)}onData($){if(this.listeners.add($),this.buffer!=="")try{$(this.capture(),this._cursor,null)}catch{}return()=>{this.listeners.delete($)}}resize($,Z){if(this._killed)return;this._cols=$,this._rows=Z}capture(){return Cj(this.buffer)}setCursor($){this._cursor=$}captureCursor(){if(this._killed)return null;return this._cursor}captureWindow(){return null}kill(){if(this._killed)return;this._killed=!0,this.listeners.clear();let $=[...this.exitListeners];this.exitListeners.clear();for(let Z of $)Z()}paste($){if(this._killed)return;this.pastes.push($)}wheel($,Z,J){if(this._killed)return!1;return this.wheels.push({direction:$,col:Z,row:J}),!1}onExit($){if(this._killed)return $(),()=>{};return this.exitListeners.add($),()=>{this.exitListeners.delete($)}}onTitleChange($){if(this.titleListeners.add($),this._title)try{$(this._title)}catch{}return()=>{this.titleListeners.delete($)}}}var XS=a(()=>{s3();eH()});import{spawn as fY0}from"child_process";class Sj{taskId;cwd;proc;listeners=new Set;buffer="";_killed=!1;_title=null;exitListeners=new Set;titleListeners=new Set;cols;rows;constructor($){this.taskId=$.taskId,this.cwd=$.cwd,this.cols=$.cols??aH,this.rows=$.rows??rH;let Z=Mj($),J=Z[0]??u5(),X=Z.slice(1);if(this.proc=fY0(J,X,{cwd:$.cwd,env:oH(process.env,{TERM:process.env.TERM??"xterm-256color",COLUMNS:String(this.cols),LINES:String(this.rows),KOBE_TERMINAL_PIPE:"1"}),stdio:["pipe","pipe","pipe"]}),this.proc.stdout?.setEncoding("utf8"),this.proc.stderr?.setEncoding("utf8"),this.proc.stdout?.on("data",(z)=>this.append(z)),this.proc.stderr?.on("data",(z)=>this.append(z)),this.proc.stdin?.on("error",()=>this.markDead(!1)),this.proc.on("error",(z)=>{this.append(`
656
656
  [Rove terminal] failed to start shell: ${z.message}
657
657
  `),this.markDead(!1)}),this.proc.on("exit",()=>this.markDead(!1)),this.proc.unref?.(),$.initialInput)this.write($.initialInput)}get killed(){return this._killed}write($){if(this._killed||$.length===0)return;let Z=this.proc.stdin;if(!Z||Z.destroyed)return;let J=$.replace(/\r/g,`
658
- `);try{Z.write(J)}catch{this.markDead(!1)}}onData($){if(this.listeners.add($),this.buffer!=="")try{$(this.capture(),null,null)}catch{}return()=>{this.listeners.delete($)}}resize($,Z){if(this._killed)return;this.cols=$,this.rows=Z}capture(){return Cj(this.buffer)}captureCursor(){return null}captureWindow(){return null}kill(){if(this._killed)return;this.markDead(!0)}append($){if(this._killed)return;if(this.buffer+=$,this.buffer.length>TT)this.buffer=this.buffer.slice(this.buffer.length-TT);let Z=Fj($);if(Z&&Z!==this._title){this._title=Z;for(let X of this.titleListeners)try{X(Z)}catch{}}let J=this.capture();for(let X of this.listeners)try{X(J,null,null)}catch{}}markDead($){if(this._killed)return;if(this._killed=!0,$)try{this.proc.kill("SIGTERM")}catch{}let Z=[...this.exitListeners];this.listeners.clear(),this.exitListeners.clear();for(let J of Z)try{J()}catch{}}paste($){this.write($)}wheel(){return!1}onExit($){if(this._killed)return $(),()=>{};return this.exitListeners.add($),()=>{this.exitListeners.delete($)}}onTitleChange($){if(this.titleListeners.add($),this._title)try{$(this._title)}catch{}return()=>{this.titleListeners.delete($)}}}var QS=a(()=>{Uj();s3();eH()});function au($){let Z=process.env.KOBE_TERMINAL_BACKEND??"hosted";if(Z==="mock")return new Tj($);if(Z==="pipe")return new Sj($);if(Z==="bun-pty")return new ou($);if(Z==="hosted")return new QF($);throw Error(`unknown terminal backend: ${Z}`)}var ou;var ru=a(()=>{Uj();Rj();XS();QS();s3();JS();XS();QS();Rj();ou=class ou extends XF{proc;constructor($){super($);if(this.proc=Bun.spawn(Mj($),{cwd:$.cwd,env:oH(process.env,{TERM:"xterm-256color",COLUMNS:String(this.cols),LINES:String(this.rows),BASH_SILENCE_DEPRECATION_WARNING:"1",KOBE_TERMINAL_PTY:"1"}),terminal:{cols:this.cols,rows:this.rows,name:"xterm-256color",data:(Z,J)=>this.feed(J),exit:()=>this.markDead(!1)}}),this.proc.exited.then(()=>this.markDead(!1),()=>this.markDead(!1)),this.proc.unref?.(),$.initialInput)this.transportWrite($.initialInput)}get shellPid(){return this.proc.pid??null}transportWrite($){this.proc.terminal?.write($)}transportResize($,Z){this.proc.terminal?.resize($,Z)}transportKill(){try{this.proc.terminal?.close()}catch{}try{this.proc.kill("SIGTERM")}catch{}}}});class su{map=new Map;parked=new Map;factory;sweepTimer=null;constructor($=au){this.factory=$}ensureSweeper(){if(this.sweepTimer)return;let $=setInterval(()=>this.parkIdle(gY0),yY0);$.unref?.(),this.sweepTimer=$}stopSweeper(){if(this.sweepTimer)clearInterval(this.sweepTimer);this.sweepTimer=null}parkIdle($,Z=Date.now()){let J=[];for(let[X,z]of this.map){if(z.killed)continue;if(!z.detach||!z.unwatchedSinceMs)continue;let G=z.unwatchedSinceMs();if(G===null||Z-G<$)continue;let W=z.lastOutputAtMs?.()??null;if(W!==null&&Z-W<bY0)continue;let H=z.capturePark?.()??null;try{z.detach({parked:H!==null,parkedScreenBytes:H?Buffer.byteLength(H.serialized):void 0})}catch{}if(this.map.delete(X),H)this.parked.set(X,H);J.push(X)}if(J.length>0&&BH()){let X=Math.round(process.memoryUsage().rss/1048576);console.error(`[rove pty] parked ${J.length} idle terminal(s); ${this.map.size} live; rss=${X}MB`)}return J}acquire($,Z,J={}){let X=this.map.get($);if(X&&!X.killed)return X;if(X)this.map.delete($);let z=this.parked.get($);if(z)this.parked.delete($);let G=this.factory({taskId:$,cwd:Z,...J,...z?{restore:z}:{}});return this.map.set($,G),this.ensureSweeper(),G}get($){let Z=this.map.get($);if(!Z)return null;if(Z.killed)return this.map.delete($),null;return Z}has($){return this.get($)!==null}release($){let Z=this.map.get($);if(this.map.delete($),this.parked.delete($),!Z)return;try{Z.kill()}catch{}}releaseWhere($){let Z=Array.from(this.map.keys()).filter($);for(let J of Z)this.release(J);for(let J of Array.from(this.parked.keys()).filter($))this.parked.delete(J)}releaseAll(){let $=Array.from(this.map.keys());for(let Z of $)this.release(Z);this.parked.clear(),this.stopSweeper()}detachAll(){let $=Array.from(this.map.values());this.map.clear(),this.parked.clear(),this.stopSweeper();for(let Z of $)try{if(Z.detach)Z.detach();else Z.kill()}catch{}}reset($,Z,J={}){return this.release($),this.acquire($,Z,J)}resetIfCurrent($,Z,J,X={}){if(Z.killed||this.map.get($)!==Z)return null;return this.reset($,J,X)}get size(){return this.map.size}entries(){return[...this.map]}}function X4(){if(!zS)zS=new su;return zS}var gY0=120000,yY0=30000,bY0=30000,zS=null;var f8=a(()=>{L5();ru()});function HS($,Z=[],J=null){WS.update((X)=>{if(!$&&!X.armed&&X.options.length===0)return X;return{...X,armed:$,armedAt:$?J:null,options:$?Z:[]}})}function qS($){WS.update((Z)=>({...Z,armed:!1,armedAt:null,options:[],entries:[...Z.entries,{...$,id:vY0++}].slice(-kY0)}))}var YS=4000,GS=180,kY0=3,WS,vY0=1,tu;var US=a(()=>{$Z();WS=r$({armed:!1,armedAt:null,options:[],entries:[]}),tu=WS});function Zc($,Z){if(Z.modalOwner!==void 0){let J=$.findIndex((X)=>X.modalMember===Z.modalOwner);if(J>=0){$.splice(J,0,Z);return}}$.push(Z)}function mY0($){let Z=[],J=$.name;if(J)Z.push(J);if(J==="return")Z.push("enter");if(J==="enter")Z.push("return");if(J==="backspace"&&$.raw==="\b"&&!$.meta&&!$.option)Z.push("ctrl+h");if(J==="linefeed"&&!$.meta&&!$.option)Z.push("ctrl+j");let X=[];if($.ctrl)X.push("ctrl");if($.meta)X.push("cmd");if($.option)X.push("alt");let z=$.shift&&J!==void 0&&J.length===1&&X.length===0;if($.shift&&J&&J.length>1)X.push("shift");if(X.length===0){if(z)return[...Z.map((W)=>`shift+${W}`),...Z];return Z}let G=`${X.join("+")}+`;return Z.map((W)=>G+W)}function Jc($){uJ={...$},J9()}function Xc(){uJ={...Zq},J9()}function t3(){return uJ}function J9(){if(Ij!==null)clearTimeout(Ij);Ij=null,$q=null,FS=!1,HS(!1)}function Qc($,Z,J){J9(),$q=$,FS=J,Ij=setTimeout(J9,uJ.timeoutMs),HS(!0,Z,$)}function zc($,Z=Date.now()){if(uJ.key===null)return!1;if(!Yc($))return!1;return Qc(Z,Gc($),KS($)),!0}function hY0($,Z,J,X){for(let z=Z-1;z>=0;z--){let G=$[z]?.config();if(!G||G.enabled===!1)continue;let W=G.bindings.find((H)=>Boolean(H.prefix)===X&&J.includes(H.key));if(W){if(!eu.has(W.key))eu.add(W.key),console.error(`[rove keymap] "${W.key}" matched two ENABLED bindings \u2014 the lower one is shadowed by LIFO order. Gate one of them off (see tui-react/lib/keymap.ts header).`);return}if(G.modal)return}}function Yc($){for(let Z=$.length-1;Z>=0;Z--){let J=$[Z]?.config();if(!J||J.enabled===!1)continue;if(J.bindings.some((X)=>X.prefix===!0))return!0;if(J.modal)return!1}return!1}function KS($){for(let Z=$.length-1;Z>=0;Z--){let J=$[Z]?.config();if(!J||J.enabled===!1)continue;if(J.bindings.some((X)=>X.passthrough))return!0;if(J.modal)return!1}return!1}function Gc($){let Z=[],J=new Set;for(let X=$.length-1;X>=0;X--){let z=$[X]?.config();if(!z||z.enabled===!1)continue;for(let G of z.bindings){if(G.prefix!==!0||J.has(G.key))continue;J.add(G.key),Z.push({stroke:G.key,action:G.id??G.key})}if(z.modal)break}return Z}function Wc($){let Z=new Set,J=new Set,X=!1;for(let z=$.length-1;z>=0;z--){let G=$[z]?.config();if(!G||G.enabled===!1)continue;for(let W of G.bindings){if(W.passthrough)X=!0;if(!W.id)continue;(W.prefix===!0?J:Z).add(W.id)}if(G.modal)break}return{direct:Z,prefix:J,inputPassthrough:X}}function $c($,Z,J,X){for(let z=$.length-1;z>=0;z--){let G=$[z];if(!G)continue;let W=G.config();if(W.enabled===!1)continue;let H;for(let U of J)if(H=W.bindings.find((B)=>Boolean(B.prefix)===X&&B.key===U),H)break;if(H){if(!W.modal&&BH())hY0($,z,J,X);return H.cmd(Z,H.slot),H}if(W.modal)return null}return null}function MS($,Z,J=Date.now()){if(Z.defaultPrevented||BS)return!1;let X=$.slice(),z=mY0(Z);BS=!0;try{if($q!==null&&KS(X)!==FS)J9();if($q!==null){let W=uJ.key??"",H=J-$q>uJ.timeoutMs;if($q=null,H)J9();else{if(z.includes("escape"))return J9(),Z.preventDefault(),!0;J9();let U=$c(X,Z,z,!0);return qS({prefixKey:W,stroke:z[0]??"",action:U?U.id??U.key:null,at:J}),Z.preventDefault(),!0}}if(uJ.key!==null&&z.includes(uJ.key)){if(Yc(X))return Qc(J,Gc(X),KS(X)),Z.preventDefault(),!0}let G=$c(X,Z,z,!1);if(G){if(G.id&&G.key.includes("+")&&!G.key.startsWith("shift+"))qS({prefixKey:"",stroke:G.key,action:G.id??G.key,at:J});return Z.preventDefault(),!0}return!1}finally{BS=!1}}var BS=!1,Zq,uJ,$q=null,FS=!1,Ij=null,eu;var UZ=a(()=>{L5();US();Zq={key:"ctrl+a",timeoutMs:5000},uJ={...Zq};eu=new Set});var Ej;var NS=a(()=>{Ej={$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 wj;var OS=a(()=>{wj={$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 xj;var LS=a(()=>{xj={$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 Hc;var qc=a(()=>{NS();OS();LS();Hc={claude:Ej,conductor:wj,tokyonight:xj}});import{RGBA as gY}from"@opentui/core";function Uc($){return Boolean(jS[$])}function zF($,Z="dark"){let J=$.defs??{};function X(U,B=[]){if(typeof U==="string"){if(U==="transparent"||U==="none")return gY.fromInts(0,0,0,0);if(U.startsWith("#"))return gY.fromHex(U);if(B.includes(U))return gY.fromInts(0,0,0);let N=J[U]??$.theme[U];if(N===void 0)return gY.fromInts(0,0,0);return X(N,[...B,U])}return X(U[Z],B)}let z={};for(let[U,B]of Object.entries($.theme))z[U]=X(B);let G=z.text??gY.fromHex("#ffffff"),W=z.background??gY.fromHex("#000000");return{...{primary:z.primary??G,secondary:z.secondary??G,accent:z.accent??z.primary??G,error:z.error??G,warning:z.warning??G,success:z.success??G,info:z.info??G,text:G,textMuted:z.textMuted??G,background:W,backgroundPanel:z.backgroundPanel??W,backgroundElement:z.backgroundElement??W,backgroundMenu:z.backgroundMenu??z.backgroundElement??W,backgroundDialog:z.backgroundDialog??z.backgroundPanel??W,border:z.border??G,borderActive:z.borderActive??z.border??G,borderSubtle:z.borderSubtle??z.border??G,diffAdded:z.diffAdded??z.success??G,diffRemoved:z.diffRemoved??z.error??G,diffContext:z.diffContext??z.textMuted??G,diffHunkHeader:z.diffHunkHeader??z.textMuted??G,diffAddedBg:z.diffAddedBg??W,diffRemovedBg:z.diffRemovedBg??W,selectedListItemText:z.selectedListItemText??W},...z}}function Bc($,Z,J){let X={...$,focusAccent:$[Z]??$.primary};if(!J)return X;let z=gY.fromInts(0,0,0,0);return{...X,background:z,backgroundPanel:z}}var jS,fQ;var fj=a(()=>{qc();jS=Hc;fQ=["primary","success","info"]});function G4($){return Kc.useSyncExternalStore($.subscribe,$.get,$.get)}var Kc;var BZ=a(()=>{Kc=H1(q1(),1)});var T;var r0=a(()=>{T=H1(oR(),1)});import{RGBA as lY0}from"@opentui/core";function pY0(){return Object.keys(e7.get().themes)}function Jq($){return Boolean(e7.get().themes[$])}function VS($,Z){if(!$)return!1;if(!Z||typeof Z!=="object"||!Z.theme)return!1;return e7.update((J)=>({...J,themes:{...J.themes,[$]:Z}})),!0}function Fc(){return e7.get().active}function Mc($){if(!Jq($))return!1;return e7.update((Z)=>({...Z,active:$})),!0}function Nc(){return e7.get().transparentBackground}function Oc($){e7.update((Z)=>({...Z,transparentBackground:$}))}function Lc(){return e7.get().focusAccent}function jc($){e7.update((Z)=>({...Z,focusAccent:$}))}function nY0($){let Z=$.themes[$.active];if(Z)return zF(Z,$.mode);let J=$.themes.claude??$.themes.opencode??Object.values($.themes)[0];if(!J)return zF({theme:{background:"#000000",text:"#ffffff"}},$.mode);return zF(J,$.mode)}function _c($){KZ.useMemo(()=>{e7.update((G)=>({...G,mode:$.mode??G.mode,active:$.theme&&G.themes[$.theme]?$.theme:G.active}))},[]);let Z=G4(e7),J=I4(),X=KZ.useMemo(()=>Bc(nY0(Z),Z.focusAccent,Z.transparentBackground),[Z]);KZ.useEffect(()=>{if(J?.screenMode==="split-footer")return;J?.setBackgroundColor(X.background??lY0.fromInts(0,0,0))},[J,X]);let z=KZ.useMemo(()=>({theme:X,selected:Z.active,transparentBackground:Z.transparentBackground,focusAccent:Z.focusAccent,mode:()=>Z.mode,set(G){if(!Jq(G))return!1;return e7.update((W)=>({...W,active:G})),!0},setMode(G){e7.update((W)=>({...W,mode:G}))},setTransparentBackground(G){e7.update((W)=>({...W,transparentBackground:G}))},setFocusAccent(G){e7.update((W)=>({...W,focusAccent:G}))},all:pY0,has:Jq}),[X,Z]);return T.jsxDEV(Vc.Provider,{value:z,children:$.children},void 0,!1,void 0,this)}function l0(){let $=KZ.useContext(Vc);if(!$)throw Error("Theme context must be used within a context provider");return $}var KZ,e7,Vc;var $$=a(async()=>{$Z();fj();BZ();fj();r0();await h4();KZ=H1(q1(),1),e7=qL({themes:{...jS},active:"claude",mode:"dark",transparentBackground:!0,focusAccent:"primary"});Vc=KZ.createContext(null)});var Cc,Dc;var Ac=a(()=>{Cc={title:"ROUTINES",holdingDaemon:"keeping the daemon awake",notHolding:"none active",paused:"paused",newTitle:"New routine",fieldName:"name",fieldRepo:"repo",fieldPrompt:"prompt",fieldSchedule:"schedule (five-field cron)",namePlaceholder:"weekday dependency audit",promptPlaceholder:"Audit dependencies and summarize risky changes.",needRepo:"Open a project first \u2014 a routine runs in one.",cronInvalid:"not a five-field cron",cronField:{minute:"min",hour:"hour",dayOfMonth:"day",month:"month",dayOfWeek:"weekday"},cronNever:"valid, but never fires",missing:{name:"Give it a name.",repo:"Pick a project.",prompt:"Say what it should do.",schedule:"That schedule will not run."},empty:"No routines scheduled.",emptyHint:"Press n to create one.",precheck:"precheck: {command}",recentRuns:"RECENT RUNS",noRuns:"Not run yet.",noSelection:"A routine runs its prompt in a project on a schedule.",running:"Running {name}\u2026",ranWith:"{name}: {status}",runNow:"[ run now ]",runNowHint:"try it without waiting for the schedule",deleteTitle:"Delete routine?",deleteBody:"{name} and its run history will be removed. Tasks it already created are untouched.",deleteButton:"Delete"},Dc={title:"\u4F8B\u884C\u4EFB\u52A1",holdingDaemon:"\u6B63\u5728\u4FDD\u6301\u5B88\u62A4\u8FDB\u7A0B\u5E38\u9A7B",notHolding:"\u65E0\u542F\u7528\u9879",paused:"\u5DF2\u6682\u505C",newTitle:"\u65B0\u5EFA\u4F8B\u884C\u4EFB\u52A1",fieldName:"\u540D\u79F0",fieldRepo:"\u4ED3\u5E93",fieldPrompt:"\u63D0\u793A\u8BCD",fieldSchedule:"\u8C03\u5EA6\uFF08\u4E94\u6BB5 cron\uFF09",namePlaceholder:"\u5DE5\u4F5C\u65E5\u4F9D\u8D56\u5BA1\u8BA1",promptPlaceholder:"\u5BA1\u8BA1\u4F9D\u8D56\u5E76\u603B\u7ED3\u6709\u98CE\u9669\u7684\u53D8\u66F4\u3002",needRepo:"\u5148\u6253\u5F00\u4E00\u4E2A\u9879\u76EE\u2014\u2014\u4F8B\u884C\u4EFB\u52A1\u8981\u8DD1\u5728\u67D0\u4E2A\u9879\u76EE\u91CC\u3002",cronInvalid:"\u4E0D\u662F\u5408\u6CD5\u7684\u4E94\u6BB5 cron",cronField:{minute:"\u5206",hour:"\u65F6",dayOfMonth:"\u65E5",month:"\u6708",dayOfWeek:"\u661F\u671F"},cronNever:"\u8BED\u6CD5\u5408\u6CD5\uFF0C\u4F46\u6C38\u8FDC\u4E0D\u4F1A\u89E6\u53D1",missing:{name:"\u8D77\u4E2A\u540D\u5B57\u3002",repo:"\u9009\u4E00\u4E2A\u9879\u76EE\u3002",prompt:"\u8BF4\u660E\u5B83\u8981\u505A\u4EC0\u4E48\u3002",schedule:"\u8FD9\u4E2A\u8C03\u5EA6\u4E0D\u4F1A\u89E6\u53D1\u3002"},empty:"\u8FD8\u6CA1\u6709\u4F8B\u884C\u4EFB\u52A1\u3002",emptyHint:"\u6309 n \u65B0\u5EFA\u4E00\u6761\u3002",precheck:"\u9884\u68C0\uFF1A{command}",recentRuns:"\u6700\u8FD1\u6267\u884C",noRuns:"\u5C1A\u672A\u6267\u884C\u3002",noSelection:"\u4F8B\u884C\u4EFB\u52A1\u4F1A\u6309\u8C03\u5EA6\u5728\u67D0\u4E2A\u9879\u76EE\u91CC\u8DD1\u5B83\u7684\u63D0\u793A\u8BCD\u3002",running:"\u6B63\u5728\u8FD0\u884C {name}\u2026",ranWith:"{name}\uFF1A{status}",runNow:"[ \u7ACB\u5373\u8FD0\u884C ]",runNowHint:"\u4E0D\u7B49\u8C03\u5EA6\uFF0C\u76F4\u63A5\u8BD5\u4E00\u6B21",deleteTitle:"\u5220\u9664\u8FD9\u6761\u4F8B\u884C\u4EFB\u52A1\uFF1F",deleteBody:"\u5C06\u5220\u9664 {name} \u53CA\u5176\u6267\u884C\u8BB0\u5F55\u3002\u5B83\u5DF2\u7ECF\u521B\u5EFA\u7684\u4EFB\u52A1\u4E0D\u53D7\u5F71\u54CD\u3002",deleteButton:"\u5220\u9664"}});var Pc,Rc;var Tc=a(()=>{Pc={cancel:"Cancel",next:"next",create:"create",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"},prompt:{fieldLabel:"input",submitLabel:"submit"}},Rc={cancel:"\u53D6\u6D88",next:"\u4E0B\u4E00\u6B65",create:"\u521B\u5EFA",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"},prompt:{fieldLabel:"\u8F93\u5165",submitLabel:"\u63D0\u4EA4"}}});var Sc,Ic;var Ec=a(()=>{Sc={tabs:{all:"All",changes:"Changes"},actions:{zen:"Zen",createPR:"Create PR"},legend:{changes:"M modified \xB7 A added \xB7 D deleted \xB7 ? untracked"},scope:{working:"scope: working tree",branch:"scope: vs {base}",toggleHint:"b to toggle"},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"},toast:{prOnTargetBranch:"Already on the target branch ({branch}) \u2014 create the PR from a task branch"}},Ic={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"},scope:{working:"\u8303\u56F4\uFF1A\u5DE5\u4F5C\u533A\u6539\u52A8",branch:"\u8303\u56F4\uFF1A\u5BF9\u6BD4 {base}",toggleHint:"\u6309 b \u5207\u6362"},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"},toast:{prOnTargetBranch:"\u5F53\u524D\u5C31\u5728\u76EE\u6807\u5206\u652F\uFF08{branch}\uFF09\u2014 \u8BF7\u5728\u4EFB\u52A1\u5206\u652F\u4E0A\u521B\u5EFA PR"}}});var wc,xc;var fc=a(()=>{wc={title:"Rove \u2014 keybindings",esc:"esc",commandLayer:"{prefix} \u2014 more Rove commands",escCancel:"esc cancel",focused:"Focused: {surface}",allBindings:"All keybinding contexts",grammar:"Use keys here \xB7 one-press Rove shortcuts \xB7 {prefix} for more commands",disabled:"prefix disabled",here:"HERE \u2014 only in {surface}",direct:"ONE PRESS \u2014 Rove shortcuts",afterPrefix:"AFTER PREFIX \u2014 more Rove commands",otherPane:"OTHER PANE \u2014 {surface}"},xc={title:"Rove \u2014 \u5FEB\u6377\u952E",esc:"esc",commandLayer:"{prefix} \u2014 \u66F4\u591A Rove \u547D\u4EE4",escCancel:"esc \u53D6\u6D88",focused:"\u5F53\u524D\u7126\u70B9\uFF1A{surface}",allBindings:"\u6240\u6709\u5FEB\u6377\u952E\u4E0A\u4E0B\u6587",grammar:"\u5F53\u524D\u533A\u57DF\u76F4\u63A5\u6309 \xB7 Rove \u5355\u6B21\u5FEB\u6377\u952E \xB7 {prefix} \u6253\u5F00\u66F4\u591A\u547D\u4EE4",disabled:"Prefix \u5DF2\u7981\u7528",here:"\u5F53\u524D\u533A\u57DF \u2014 \u4EC5\u5728{surface}",direct:"\u4E00\u6B21\u6309\u4E0B \u2014 Rove \u5FEB\u6377\u952E",afterPrefix:"\u6309\u4E0B Prefix \u540E \u2014 \u66F4\u591A Rove \u547D\u4EE4",otherPane:"\u5176\u4ED6\u533A\u57DF \u2014 {surface}"}});var gc,yc;var bc=a(()=>{gc={status:{commands:"{key} commands",help:"{key} help",sidebar:"{key} sidebar",settings:"settings"},pane:{move:"move",open:"open",fold:"fold",diff:"diff"}},yc={status:{commands:"{key} \u547D\u4EE4",help:"{key} \u5E2E\u52A9",sidebar:"{key} \u4FA7\u680F",settings:"\u8BBE\u7F6E"},pane:{move:"\u79FB\u52A8",open:"\u6253\u5F00",fold:"\u6298\u53E0",diff:"\u5DEE\u5F02"}}});var kc,vc;var mc=a(()=>{kc={empty:"No engine history for this task.",loading:"loading\u2026",earlier:"\u2026 {count} earlier messages",sessionLabel:"Session",archivedTag:"ARCHIVED",liveTag:"\u25CF LIVE",hint:"[ ] session \xB7 j/k scroll \xB7 \u23CE expand",hintExpanded:"[ ] session \xB7 j/k scroll \xB7 \u23CE collapse",role:{user:"USER",assistant:"ASSISTANT",system:"SYSTEM"},thinking:"thinking"},vc={empty:"\u6B64\u4EFB\u52A1\u6CA1\u6709\u5F15\u64CE\u5386\u53F2\u8BB0\u5F55\u3002",loading:"\u52A0\u8F7D\u4E2D\u2026",earlier:"\u2026 \u4E4B\u524D\u8FD8\u6709 {count} \u6761\u6D88\u606F",sessionLabel:"\u4F1A\u8BDD",archivedTag:"\u5DF2\u5F52\u6863",liveTag:"\u25CF \u5B9E\u65F6",hint:"[ ] \u4F1A\u8BDD \xB7 j/k \u6EDA\u52A8 \xB7 \u23CE \u5C55\u5F00",hintExpanded:"[ ] \u4F1A\u8BDD \xB7 j/k \u6EDA\u52A8 \xB7 \u23CE \u6536\u8D77",role:{user:"\u7528\u6237",assistant:"\u52A9\u624B",system:"\u7CFB\u7EDF"},thinking:"\u601D\u8003"}});var hc,uc;var cc=a(()=>{hc={title:"Kanban",hint:"tab project \xB7 \u2190\u2193\u2191\u2192 card \xB7 enter detail \xB7 n new \xB7 d delete \xB7 r refresh \xB7 esc close",loading:"Loading issues\u2026",noRepos:"No projects yet \u2014 create a task first.",empty:"No issues \u2014 agents file them via `rove api issue-create`.",column:{backlog:"Backlog",inProgress:"In progress",done:"Done"},more:"+{count} more",hold:"hold",turnComplete:"turn done",detail:{status:{open:"open",doing:"doing",hold:"hold",done:"done"},created:"created {date}",linked:"linked to a session",titleLabel:"TITLE",description:"DESCRIPTION",noDescription:"No description.",attachHint:"paste a path / ctrl+v screenshot \u2192 inserts an image placeholder",engine:"ENGINE",workspace:"WORKSPACE",placement:{worktree:"New worktree task \u2014 its own workspace",projectWorktree:"New worktree \u2014 as a chattab in the project workspace",project:"Project checkout \u2014 a new chattab, no worktree"},jumpLabel:"AFTER START",jump:{stay:"Stay on the board",follow:"Jump to the session"},startLegend:"enter/ctrl+enter start \xB7 tab fields \xB7 \u2190\u2192 engine \xB7 \u2191\u2193 workspace \xB7 esc save & close",sessionLabel:"SESSION",openAction:"Open the linked session \u21B5",openLegend:"enter/ctrl+enter open the linked session \xB7 tab fields \xB7 esc save & close",eventsLabel:"EVENTS",eventsLoading:"Loading events\u2026",eventsNone:"No engine events recorded yet.",doneNote:"Done stories have nothing left to start \xB7 esc save & close",startedBackground:"Started in background: {title}",newStory:"NEW STORY",createLegend:"ctrl+s save \xB7 enter/ctrl+enter save & start \xB7 tab fields \xB7 esc cancel"},confirmDelete:{title:"Delete story #{id}?",body:"\u201C{title}\u201D will be removed from the tracker. A linked task, branch, or worktree is left untouched."}},uc={title:"\u770B\u677F",hint:"tab \u5207\u9879\u76EE \xB7 \u2190\u2193\u2191\u2192 \u9009\u5361\u7247 \xB7 enter \u8BE6\u60C5 \xB7 n \u65B0\u5EFA \xB7 d \u5220\u9664 \xB7 r \u5237\u65B0 \xB7 esc \u5173\u95ED",loading:"\u6B63\u5728\u52A0\u8F7D issues\u2026",noRepos:"\u8FD8\u6CA1\u6709\u9879\u76EE\u2014\u2014\u5148\u521B\u5EFA\u4E00\u4E2A\u4EFB\u52A1\u3002",empty:"\u6682\u65E0 issue\u2014\u2014agent \u53EF\u901A\u8FC7 `rove api issue-create` \u521B\u5EFA\u3002",column:{backlog:"\u5F85\u529E",inProgress:"\u8FDB\u884C\u4E2D",done:"\u5DF2\u5B8C\u6210"},more:"\u8FD8\u6709 {count} \u6761",hold:"\u6401\u7F6E",turnComplete:"\u56DE\u5408\u5B8C\u6210",detail:{status:{open:"\u5F85\u529E",doing:"\u8FDB\u884C\u4E2D",hold:"\u6401\u7F6E",done:"\u5DF2\u5B8C\u6210"},created:"\u521B\u5EFA\u4E8E {date}",linked:"\u5DF2\u5173\u8054\u4F1A\u8BDD",titleLabel:"\u6807\u9898",description:"\u63CF\u8FF0",noDescription:"\u6682\u65E0\u63CF\u8FF0\u3002",attachHint:"\u7C98\u8D34\u8DEF\u5F84 / ctrl+v \u8D34\u622A\u56FE \u2192 \u63D2\u5165\u56FE\u7247\u5360\u4F4D\u884C",engine:"\u5F15\u64CE",workspace:"\u5DE5\u4F5C\u533A",placement:{worktree:"\u65B0\u5EFA worktree \u4EFB\u52A1\u2014\u2014\u72EC\u7ACB\u5DE5\u4F5C\u533A",projectWorktree:"\u65B0\u5EFA worktree\u2014\u2014\u4F5C\u4E3A\u9879\u76EE\u5DE5\u4F5C\u533A\u91CC\u7684 chattab",project:"\u9879\u76EE\u4E3B\u76EE\u5F55\u2014\u2014\u65B0\u5F00 chattab,\u4E0D\u5EFA worktree"},jumpLabel:"\u542F\u52A8\u540E",jump:{stay:"\u7559\u5728\u770B\u677F",follow:"\u8DF3\u8F6C\u5230\u4F1A\u8BDD"},startLegend:"enter/ctrl+enter \u542F\u52A8 \xB7 tab \u5207\u5B57\u6BB5 \xB7 \u2190\u2192 \u5F15\u64CE \xB7 \u2191\u2193 \u5DE5\u4F5C\u533A \xB7 esc \u4FDD\u5B58\u5173\u95ED",sessionLabel:"\u4F1A\u8BDD",openAction:"\u6253\u5F00\u5173\u8054\u4F1A\u8BDD \u21B5",openLegend:"enter/ctrl+enter \u6253\u5F00\u5DF2\u5173\u8054\u4F1A\u8BDD \xB7 tab \u5207\u5B57\u6BB5 \xB7 esc \u4FDD\u5B58\u5173\u95ED",eventsLabel:"\u4E8B\u4EF6",eventsLoading:"\u6B63\u5728\u52A0\u8F7D\u4E8B\u4EF6\u2026",eventsNone:"\u6682\u65E0\u5F15\u64CE\u4E8B\u4EF6\u8BB0\u5F55\u3002",doneNote:"\u5DF2\u5B8C\u6210\u7684 story \u65E0\u9700\u542F\u52A8 \xB7 esc \u4FDD\u5B58\u5173\u95ED",startedBackground:"\u5DF2\u5728\u540E\u53F0\u542F\u52A8:{title}",newStory:"\u65B0\u5EFA STORY",createLegend:"ctrl+s \u4EC5\u4FDD\u5B58 \xB7 enter/ctrl+enter \u4FDD\u5B58\u5E76\u542F\u52A8 \xB7 tab \u5207\u5B57\u6BB5 \xB7 esc \u53D6\u6D88"},confirmDelete:{title:"\u5220\u9664 story #{id}?",body:"\u300C{title}\u300D\u5C06\u4ECE tracker \u4E2D\u79FB\u9664\u3002\u5DF2\u5173\u8054\u7684\u4EFB\u52A1\u3001\u5206\u652F\u3001worktree \u4E0D\u53D7\u5F71\u54CD\u3002"}}});var dc,lc;var pc=a(()=>{dc={category:{Global:"Global",Sidebar:"Sidebar",Workspace:"Workspace",Navigation:"Navigation","Tasks pane":"Tasks pane",Files:"Files",Terminal:"Terminal",Dialog:"Dialog",Views:"Views",Tasks:"Tasks",Sessions:"Sessions",Attention:"Attention",Tools:"Tools"},desc:{"help.open":"Show keybindings help","task.new":"New task","task.openEditor":"Open active task worktree in editor","task.moveMode":"Reorder tasks/projects (then j/k)","settings.open":"Open settings","settings.open.sidebar":"Open settings","inbox.show":"Open attention Inbox","worktrees.open.sidebar":"Open worktrees","kanban.open":"Open kanban (issues board)","automations.open":"Open automations (scheduled tasks)","workItems.open":"Open GitHub issues (external tracker)","app.quit":"Quit (with confirm)","focus.sidebar":"Back to sidebar (tasks)","focus.previous":"Focus previous pane (files \u2192 workspace \u2192 sidebar)","focus.next":"Focus next pane (sidebar \u2192 workspace \u2192 files)","workspace.zenToggle":"Toggle zen mode","attention.next":"Jump to the next attention item","chat.interrupt":"Interrupt current turn (esc while streaming)","sidebar.nav":"Move cursor up/down","sidebar.select":"Open the selected task","sidebar.tree.open":"Open the row under the cursor","sidebar.goto":"Top / bottom of list (gg or shift-G)","sidebar.rename":"Rename task","sidebar.archive":"Toggle archive","sidebar.localMerge":"Reorder task (Shift+M, then j/k)","sidebar.pin":"Pin / unpin task at top (Shift+P)","sidebar.previewToggle":"Toggle live preview (watch task)","sidebar.view":"Switch view (Active \u2194 Archived)","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.jump":"Jump to the task showing that digit","tasks.toggleKeys":"Collapse / expand the keys legend","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.tab.chooseEngine":"New conversation \u2014 engine/shell picker with destination + context toggles","chat.tab.fork":"Fork this chat into a new tab (same worktree, keeps the conversation)","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","workspace.split.right":"Split right","workspace.split.down":"Split down","workspace.split.focus-next":"Focus next split","workspace.split.close":"Close active split (tab when unsplit)","workspace.split.rename":"Rename active split (tab when unsplit)","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.scope":"Toggle Changes scope (working \u2194 branch vs base)","files.diff":"Open a read-only diff in a workspace tab","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","diff.review.cursor":"Move the line cursor over the diff","diff.review.range":"Toggle range anchor at the cursor","diff.review.note":"Add a review note at the cursor","diff.review.send":"Send all unsent review notes to the engine","inbox.nav":"Move through attention items","inbox.open":"Open the selected attention item","inbox.delete":"Remove the selected attention item","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)"}},lc={category:{Global:"\u5168\u5C40",Sidebar:"\u4FA7\u8FB9\u680F",Workspace:"\u5DE5\u4F5C\u533A",Navigation:"\u5BFC\u822A","Tasks pane":"\u4EFB\u52A1\u9762\u677F",Files:"\u6587\u4EF6",Terminal:"\u7EC8\u7AEF",Dialog:"\u5BF9\u8BDD\u6846",Views:"\u89C6\u56FE",Tasks:"\u4EFB\u52A1",Sessions:"\u4F1A\u8BDD",Attention:"\u63D0\u9192",Tools:"\u5DE5\u5177"},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","task.moveMode":"\u8C03\u6574\u4EFB\u52A1/\u9879\u76EE\u987A\u5E8F\uFF08\u7136\u540E j/k\uFF09","settings.open":"\u6253\u5F00\u8BBE\u7F6E","settings.open.sidebar":"\u6253\u5F00\u8BBE\u7F6E","inbox.show":"\u6253\u5F00\u63D0\u9192\u6536\u4EF6\u7BB1","worktrees.open.sidebar":"\u6253\u5F00 worktrees","kanban.open":"\u6253\u5F00\u770B\u677F\uFF08issues\uFF09","automations.open":"\u6253\u5F00\u81EA\u52A8\u5316\uFF08\u5B9A\u65F6\u4EFB\u52A1\uFF09","workItems.open":"\u6253\u5F00 GitHub issues\uFF08\u5916\u90E8\u8DDF\u8E2A\u5668\uFF09","app.quit":"\u9000\u51FA\uFF08\u9700\u786E\u8BA4\uFF09","focus.sidebar":"\u8FD4\u56DE\u4FA7\u8FB9\u680F\uFF08\u4EFB\u52A1\u5217\u8868\uFF09","focus.previous":"\u805A\u7126\u4E0A\u4E00\u4E2A\u9762\u677F\uFF08\u6587\u4EF6 \u2192 \u5DE5\u4F5C\u533A \u2192 \u4FA7\u8FB9\u680F\uFF09","focus.next":"\u805A\u7126\u4E0B\u4E00\u4E2A\u9762\u677F\uFF08\u4FA7\u8FB9\u680F \u2192 \u5DE5\u4F5C\u533A \u2192 \u6587\u4EF6\uFF09","workspace.zenToggle":"\u5207\u6362\u7985\u6A21\u5F0F","attention.next":"\u8DF3\u5230\u4E0B\u4E00\u4E2A\u9700\u8981\u6CE8\u610F\u7684\u9879\u76EE","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.tree.open":"\u6253\u5F00\u5149\u6807\u6240\u5728\u884C","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":"\u91CD\u65B0\u6392\u5E8F\u4EFB\u52A1\uFF08Shift+M\uFF0C\u7136\u540E\u6309 j/k\uFF09","sidebar.pin":"\u7F6E\u9876 / \u53D6\u6D88\u7F6E\u9876\u4EFB\u52A1\uFF08Shift+P\uFF09","sidebar.previewToggle":"\u5207\u6362\u5B9E\u65F6\u9884\u89C8\uFF08\u89C2\u770B\u4EFB\u52A1\uFF09","sidebar.view":"\u5207\u6362\u89C6\u56FE\uFF08\u8FDB\u884C\u4E2D \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.jump":"\u8DF3\u5230\u663E\u793A\u5BF9\u5E94\u6570\u5B57\u7684\u4EFB\u52A1","tasks.toggleKeys":"\u6298\u53E0 / \u5C55\u5F00\u5FEB\u6377\u952E\u8BF4\u660E","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.tab.chooseEngine":"\u65B0\u5EFA\u5BF9\u8BDD \u2014\u2014 \u9009\u62E9\u5F15\u64CE\u6216 shell\uFF0C\u53EF\u5207\u6362\u843D\u70B9\u4E0E\u4E0A\u4E0B\u6587","chat.tab.fork":"\u6D3E\u751F\u5F53\u524D\u5BF9\u8BDD\u5230\u65B0\u6807\u7B7E\u9875\uFF08\u540C\u4E00 worktree\uFF0C\u5E26\u4E0A\u5DF2\u6709\u5BF9\u8BDD\uFF09","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","workspace.split.right":"\u5411\u53F3\u5206\u5C4F","workspace.split.down":"\u5411\u4E0B\u5206\u5C4F","workspace.split.focus-next":"\u805A\u7126\u4E0B\u4E00\u4E2A\u5206\u5C4F","workspace.split.close":"\u5173\u95ED\u5F53\u524D\u5206\u5C4F\uFF08\u672A\u5206\u5C4F\u65F6\u5173\u95ED\u6807\u7B7E\u9875\uFF09","workspace.split.rename":"\u91CD\u547D\u540D\u5F53\u524D\u5206\u5C4F\uFF08\u672A\u5206\u5C4F\u65F6\u91CD\u547D\u540D\u6807\u7B7E\u9875\uFF09","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.scope":"\u5207\u6362\u53D8\u66F4\u8303\u56F4\uFF08\u5DE5\u4F5C\u533A \u2194 \u5206\u652F\u5BF9\u6BD4 base\uFF09","files.diff":"\u5728\u5DE5\u4F5C\u533A\u6807\u7B7E\u9875\u4E2D\u6253\u5F00\u53EA\u8BFB diff","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","diff.review.cursor":"\u5728 diff \u4E2D\u79FB\u52A8\u884C\u5149\u6807","diff.review.range":"\u5728\u5149\u6807\u5904\u5207\u6362\u8303\u56F4\u951A\u70B9","diff.review.note":"\u5728\u5149\u6807\u5904\u6DFB\u52A0\u5BA1\u9605\u5907\u6CE8","diff.review.send":"\u5C06\u6240\u6709\u672A\u53D1\u9001\u7684\u5BA1\u9605\u5907\u6CE8\u53D1\u7ED9\u5F15\u64CE","inbox.nav":"\u5728\u63D0\u9192\u9879\u76EE\u4E4B\u95F4\u79FB\u52A8","inbox.open":"\u6253\u5F00\u9009\u4E2D\u7684\u63D0\u9192\u9879\u76EE","inbox.delete":"\u79FB\u9664\u9009\u4E2D\u7684\u63D0\u9192\u9879\u76EE","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 nc,ic;var oc=a(()=>{nc={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"},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"}},ic={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"},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 ac,rc;var sc=a(()=>{ac={title:"Welcome to Rove",subtitle:"Two quick questions before your first launch.",completionsQuestion:"Install shell completions for {shell}?",completionsExplain:"Tab-completes rove subcommands. One line is added to your shell config.",skillQuestion:"Install the Rove agent skill?",skillExplain:"Teaches coding agents (Claude Code, Codex) to drive Rove from the shell via `rove api`.",optionYes:"Yes (recommended)",optionNo:"No",legend:"\u2191\u2193 select \xB7 enter confirm \xB7 q skip setup",keysTitle:"Keyboard basics",keysBare:"Bare keys act in the focused pane \u2014 {nav} moves, {open} opens.",keysOnePress:"A few one-press chords are Rove's own \u2014 {newTab} new tab, {focusNext} next pane.",keysPrefix:"{prefix} opens the command map \u2014 hold it a beat and a guide appears.",keysHelp:"{help} shows the full live reference anytime.",keysLegend:"enter finish",appliedCompletions:"\u2713 completions hooked into {path} (takes effect in new shells)",skippedCompletions:"\xB7 completions skipped \u2014 run `{command}` anytime",installingSkill:"installing the Rove agent skill ({command})\u2026",skillFailed:"! skill install failed \u2014 retry with `{command}`",skippedSkill:"\xB7 agent skill skipped \u2014 run `{command}` anytime",ready:"You're ready to go!",readyHint:"Run `rove` to launch the TUI."},rc={title:"\u6B22\u8FCE\u4F7F\u7528 Rove",subtitle:"\u9996\u6B21\u542F\u52A8\u524D\uFF0C\u5148\u56DE\u7B54\u4E24\u4E2A\u5C0F\u95EE\u9898\u3002",completionsQuestion:"\u4E3A {shell} \u5B89\u88C5 shell \u8865\u5168\u5417\uFF1F",completionsExplain:"\u8BA9 rove \u5B50\u547D\u4EE4\u652F\u6301 Tab \u8865\u5168\uFF0C\u4F1A\u5728\u4F60\u7684 shell \u914D\u7F6E\u91CC\u52A0\u4E00\u884C\u3002",skillQuestion:"\u5B89\u88C5 Rove agent skill \u5417\uFF1F",skillExplain:"\u6559\u4F1A\u7F16\u7801 agent\uFF08Claude Code\u3001Codex\uFF09\u901A\u8FC7 `rove api` \u5728\u547D\u4EE4\u884C\u9A71\u52A8 Rove\u3002",optionYes:"\u5B89\u88C5\uFF08\u63A8\u8350\uFF09",optionNo:"\u8DF3\u8FC7",legend:"\u2191\u2193 \u9009\u62E9 \xB7 enter \u786E\u8BA4 \xB7 q \u8DF3\u8FC7\u8BBE\u7F6E",keysTitle:"\u952E\u76D8\u57FA\u7840",keysBare:"\u88F8\u952E\u4F5C\u7528\u4E8E\u5F53\u524D\u805A\u7126\u9762\u677F \u2014 {nav} \u79FB\u52A8\uFF0C{open} \u6253\u5F00\u3002",keysOnePress:"\u5C11\u91CF\u5355\u6B21\u5FEB\u6377\u952E\u5C5E\u4E8E Rove \u81EA\u5DF1 \u2014 {newTab} \u65B0\u6807\u7B7E\u9875\uFF0C{focusNext} \u5207\u6362\u9762\u677F\u3002",keysPrefix:"{prefix} \u6253\u5F00\u547D\u4EE4\u5C42 \u2014 \u6309\u4F4F\u7A0D\u7B49\u4F1A\u51FA\u73B0\u547D\u4EE4\u6307\u5357\u3002",keysHelp:"\u968F\u65F6\u6309 {help} \u67E5\u770B\u5B8C\u6574\u7684\u5B9E\u65F6\u952E\u4F4D\u8868\u3002",keysLegend:"enter \u5B8C\u6210",appliedCompletions:"\u2713 \u8865\u5168\u5DF2\u5199\u5165 {path}\uFF08\u65B0\u5F00\u7684 shell \u751F\u6548\uFF09",skippedCompletions:"\xB7 \u5DF2\u8DF3\u8FC7\u8865\u5168 \u2014 \u4E4B\u540E\u53EF\u968F\u65F6\u8FD0\u884C `{command}`",installingSkill:"\u6B63\u5728\u5B89\u88C5 Rove agent skill\uFF08{command}\uFF09\u2026",skillFailed:"! skill \u5B89\u88C5\u5931\u8D25 \u2014 \u53EF\u7528 `{command}` \u91CD\u8BD5",skippedSkill:"\xB7 \u5DF2\u8DF3\u8FC7 agent skill \u2014 \u4E4B\u540E\u53EF\u968F\u65F6\u8FD0\u884C `{command}`",ready:"\u4E00\u5207\u5C31\u7EEA\uFF01",readyHint:"\u8FD0\u884C `rove` \u542F\u52A8 TUI\u3002"}});var tc,ec;var $d=a(()=>{tc={preview:{diffVsHead:"diff vs HEAD",diffVsBase:"diff vs {base}",file:"file",image:"image",binary:"binary file",closeHint:"\xB7 q to close",loading:"loading\u2026",noTextPreview:"no text preview",openHint:"o open in system viewer",review:{noteDialogTitle:"Review note \u2014 {location}",noteFieldLabel:"note",noteSubmitLabel:"add note",notePlaceholder:"what should the agent change here?",count:"{total} notes \xB7 {unsent} unsent",keysHint:"j/k line \xB7 v range \xB7 c note \xB7 s send"}}},ec={preview:{diffVsHead:"\u4E0E HEAD \u5BF9\u6BD4",diffVsBase:"\u4E0E {base} \u5BF9\u6BD4",file:"\u6587\u4EF6",image:"\u56FE\u7247",binary:"\u4E8C\u8FDB\u5236\u6587\u4EF6",closeHint:"\xB7 q \u5173\u95ED",loading:"\u52A0\u8F7D\u4E2D\u2026",noTextPreview:"\u65E0\u6587\u672C\u9884\u89C8",openHint:"o \u7528\u7CFB\u7EDF\u67E5\u770B\u5668\u6253\u5F00",review:{noteDialogTitle:"\u8BC4\u5BA1\u5907\u6CE8 \u2014 {location}",noteFieldLabel:"\u5907\u6CE8",noteSubmitLabel:"\u6DFB\u52A0\u5907\u6CE8",notePlaceholder:"\u5E0C\u671B agent \u5728\u8FD9\u91CC\u6539\u4EC0\u4E48\uFF1F",count:"{total} \u6761\u5907\u6CE8 \xB7 {unsent} \u6761\u672A\u53D1\u9001",keysHint:"j/k \u884C \xB7 v \u8303\u56F4 \xB7 c \u5907\u6CE8 \xB7 s \u53D1\u9001"}}}});var Zd,Jd;var Xd=a(()=>{Zd={title:"Quick task \xB7 {repoLabel}",esc:"esc",promptLabel:"prompt",promptPlaceholder:"what should this task do?",engineLabel:"engine",branchLabel:"branch"},Jd={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"}});var Qd,zd;var Yd=a(()=>{Qd={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",plugins:"Plugins",keys:"Keybindings",feedback:"Feedback",dev:"Dev"},general:{usage:"USAGE",theme:"Theme",themeHint:"l to enter list \xB7 j/k to highlight \xB7 enter to apply",language:"Language",languageHint:"Display language for Rove'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)",appearance:"Appearance",appearanceHint:"How split panes draw: a full box frame around every pane, or a single divider line between neighbors.",splitBox:"Box frames",splitLine:"Divider line",notifications:"Notifications",notificationsHint:"Fired when a background chat tab finishes or pauses on an approval. Toast = bottom-right popup; Sound = terminal bell + chime + OSC 9 desktop notification (rides SSH to your local terminal). Cross-task = also notify when a task you've switched AWAY from pauses/errors/finishes. Tab-chip unread dot is always on.",toast:"Toast",sound:"Sound",crossTask:"Notify for background tasks",keyHints:"Keyboard hints",keyHintsHint:"The status-bar command/help reminder and the one-line first-use key hints in the sidebar and files panes. Re-enabling relights pane hints that were dismissed by use.",keyHintsShow:"Show keyboard hints",zen:"Zen mode",zenHint:"The `zen` chip (above the file list) and `prefix`+z 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.",zenDefaultOn:"Start in zen mode",zenKeepTasks:"Keep Tasks pane in zen mode",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)",worktree:"Worktree location",worktreeHint:"Where new task worktrees are created. `next to project` keeps them beside each repo; custom takes any path (`~`, relative, or a leading `$project_dir`). New tasks only.",worktreeBase:"location: < {kind} > (enter switches)",worktreeKindDefault:"default ~/.rove/worktrees",worktreeKindNext:"next to project",worktreeKindCustom:"custom",worktreeCustom:"custom: {path}",worktreeCustomUnset:"(unset \u2014 enter to edit)",worktreeBaseTitle:"Custom worktree location (blank = default; $project_dir = project root)",worktreeBaseField:"path",terminal:"Terminal",terminalHint:"Scrollback: how many rows of history each embedded terminal keeps (100\u2013100000). Applies to terminals opened after the change. Larger values cost proportionally more CPU per redraw \u2014 1000 rows is roughly 2\xD7 the cost of 50.",scrollbackRow:"scrollback: {rows} rows (enter to edit)",scrollbackTitle:"Terminal scrollback rows (100\u2013100000)",scrollbackField:"rows",scrollbackInvalidTitle:"Not a number",scrollbackInvalidBody:"Scrollback must be a number of rows (e.g. 1000). Keeping the previous setting.",tabStripRow:"tab strip: {mode} (enter to cycle)",tabStripMode:{never:"off \u2014 the sidebar tree lists tabs",multipleOnly:"only with 2+ tabs",always:"always"}},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 = global default engine (per-project picks, e.g. Ctrl+Shift+T, override it). 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",kimiDetected:"\u25CF Kimi login detected"},plugins:{title:"Plugins",hint:"Plugins registered in ~/.kobe/plugins.json. enter (or click) toggles one on or off \u2014 the daemon watches the file, so the change applies live. Rows indented under a plugin are the settings it declares; enter edits one, and the value reaches the plugin on its next run. Install and remove them from the shell: `rove plugin install <owner/repo>`, `rove plugin link <dir>`.",empty:"No plugins registered. Install one with `rove plugin install <owner/repo>` \u2014 browse the `rove-plugin` topic on GitHub.",sourceLink:"linked {path}",sourceGithub:"{spec}",updateAvailable:"update available \u2014 rove plugin update",declares:"{actions} actions \xB7 {events} events \xB7 {panes} panes",manifestUnreadable:"manifest unreadable",lastRun:"\xB7 last run {label} {status} {ago} ago",neverRun:"\xB7 never run",runOk:"ok",runFailed:"failed to start",runExit:"exit {code}",settingUnset:"(unset \u2014 enter to edit)",settingInvalidTitle:"Not a number",settingInvalidBody:"{label} only accepts a number. Keeping the previous value."},keybindings:{title:"Keybindings",hint:"Edit the YAML below to rebind direct and PureTUI prefix chords; changes reload live. Press F1 anywhere for the live keymap with every binding id.",configFile:"Config file",notCreated:" (not created yet)",prefixTitle:"Command layer ({prefix})",prefixHint:"Bare keys act in the focused pane; a small one-press set covers frequent Rove actions; {prefix} opens the command map ({timeout}ms second-stroke window \u2014 hold on and a guide appears). Prefix bindings keep their pane scope and modal rules.",prefixDisabled:"disabled",fixed:"Fixed (not rebindable): {ids}.",example:"Example",overridesApplied:"Overrides applied",none:"none",warnings:"Warnings"},feedback:{title:"Feedback",hint:"Sends a GitHub Discussion to the Rove 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/rove/state.json and ~/.rove/tasks.json, then quits Rove \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 Rove daemon and quits this Rove window so the next launch spawns a fresh daemon \u2014 picks up daemon / orchestrator / engine edits without a process kill. Other attached Rove windows will lose their connection too.",restartButton:"[enter] Restart",doctorHint:"Daemon wedged or unresponsive? From a shell, run `rove daemon restart`, then relaunch Rove. Hosted engine sessions stay alive across a daemon restart.",experimental:"Experimental",remoteHint:"Remote projects (SSH): register a project whose git worktrees + engine run on another host over SSH, driven from this local Rove. Unfinished \u2014 file/diff panes still degrade for remote. Enables `rove 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 (`rove api note`), the daemon forwards each to the repo's main session, and that session relays them to the in-flight tasks that benefit (`rove api dispatch`). Web-hosted sessions receive the relays today.",dispatcherOn:"[x] Field-notes dispatcher (on)",dispatcherOff:"[ ] Field-notes dispatcher (off)",archivedHistoryHint:"Archived history preview (beta): opening an archived task shows a read-only `rove history` pane (session selector + transcript) in the engine slot instead of relaunching the engine. Its transcript survives worktree removal because the engine store is keyed by the worktree path. Shared with the web dashboard.",archivedHistoryOn:"[x] Archived history preview (on)",archivedHistoryOff:"[ ] Archived history preview (off)"}},zd={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",plugins:"\u63D2\u4EF6",keys:"\u5FEB\u6377\u952E",feedback:"\u53CD\u9988",dev:"\u5F00\u53D1"},general:{usage:"\u7528\u91CF",theme:"\u4E3B\u9898",themeHint:"l \u8FDB\u5165\u5217\u8868 \xB7 j/k \u9AD8\u4EAE \xB7 enter \u5E94\u7528",language:"\u8BED\u8A00",languageHint:"Rove \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",appearance:"\u5916\u89C2",appearanceHint:"\u5206\u5C4F\u9762\u677F\u7684\u63CF\u8FB9\u65B9\u5F0F\uFF1A\u6BCF\u4E2A\u9762\u677F\u4E00\u4E2A\u5B8C\u6574\u65B9\u6846\uFF0C\u6216\u76F8\u90BB\u9762\u677F\u4E4B\u95F4\u4E00\u6761\u5206\u9694\u7EBF\u3002",splitBox:"\u65B9\u6846\u8FB9\u6846",splitLine:"\u5355\u7EBF\u5206\u9694",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 + OSC 9 \u684C\u9762\u901A\u77E5\uFF08\u7ECF SSH \u76F4\u8FBE\u4F60\u672C\u5730\u7EC8\u7AEF\uFF09\u3002\u8DE8\u4EFB\u52A1 = \u4F60\u5DF2\u5207\u8D70\u7684\u4EFB\u52A1\u6682\u505C/\u51FA\u9519/\u5B8C\u6210\u65F6\u4E5F\u901A\u77E5\u3002\u6807\u7B7E\u4E0A\u7684\u672A\u8BFB\u5706\u70B9\u59CB\u7EC8\u5F00\u542F\u3002",toast:"Toast \u5F39\u7A97",sound:"\u58F0\u97F3",crossTask:"\u4E3A\u540E\u53F0\u4EFB\u52A1\u53D1\u9001\u901A\u77E5",keyHints:"\u952E\u76D8\u63D0\u793A",keyHintsHint:"\u72B6\u6001\u680F\u7684\u547D\u4EE4/\u5E2E\u52A9\u63D0\u9192\uFF0C\u4EE5\u53CA\u4FA7\u680F\u548C\u6587\u4EF6\u9762\u677F\u7684\u4E00\u884C\u9996\u7528\u6309\u952E\u63D0\u793A\u3002\u91CD\u65B0\u5F00\u542F\u4F1A\u91CD\u65B0\u70B9\u4EAE\u5DF2\u56E0\u4F7F\u7528\u800C\u7184\u706D\u7684\u9762\u677F\u63D0\u793A\u3002",keyHintsShow:"\u663E\u793A\u952E\u76D8\u63D0\u793A",zen:"\u7985\u6A21\u5F0F",zenHint:"`zen` \u6807\u8BB0\uFF08\u6587\u4EF6\u5217\u8868\u4E0A\u65B9\uFF09\u548C `prefix`+z \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",zenDefaultOn:"\u542F\u52A8\u5373\u8FDB\u5165\u7985\u6A21\u5F0F",zenKeepTasks:"\u7985\u6A21\u5F0F\u4E0B\u4FDD\u7559 Tasks \u9762\u677F",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)",worktree:"\u5DE5\u4F5C\u6811\u4F4D\u7F6E",worktreeHint:"\u65B0\u4EFB\u52A1\u5DE5\u4F5C\u6811\u7684\u521B\u5EFA\u4F4D\u7F6E\u3002\u300C\u9879\u76EE\u65C1\u8FB9\u300D= \u7D27\u6328\u5404\u81EA\u4ED3\u5E93\u5B58\u653E\uFF1B\u81EA\u5B9A\u4E49\u53EF\u586B\u4EFB\u610F\u8DEF\u5F84\uFF08`~`\u3001\u76F8\u5BF9\u8DEF\u5F84\u6216\u4EE5 `$project_dir` \u5F00\u5934\uFF09\u3002\u4EC5\u5BF9\u65B0\u4EFB\u52A1\u751F\u6548\u3002",worktreeBase:"\u4F4D\u7F6E: < {kind} > (enter \u5207\u6362)",worktreeKindDefault:"\u9ED8\u8BA4 ~/.rove/worktrees",worktreeKindNext:"\u9879\u76EE\u65C1\u8FB9",worktreeKindCustom:"\u81EA\u5B9A\u4E49",worktreeCustom:"\u81EA\u5B9A\u4E49: {path}",worktreeCustomUnset:"(\u672A\u8BBE\u7F6E \u2014 enter \u7F16\u8F91)",worktreeBaseTitle:"\u81EA\u5B9A\u4E49\u5DE5\u4F5C\u6811\u4F4D\u7F6E\uFF08\u7559\u7A7A = \u9ED8\u8BA4\uFF1B$project_dir = \u9879\u76EE\u6839\u76EE\u5F55\uFF09",worktreeBaseField:"\u8DEF\u5F84",terminal:"\u7EC8\u7AEF",terminalHint:"\u56DE\u6EDA\u7F13\u51B2\uFF1A\u6BCF\u4E2A\u5185\u5D4C\u7EC8\u7AEF\u4FDD\u7559\u591A\u5C11\u884C\u5386\u53F2\uFF08100\u2013100000\uFF09\u3002\u5BF9\u4FEE\u6539\u540E\u65B0\u6253\u5F00\u7684\u7EC8\u7AEF\u751F\u6548\u3002\u8C03\u5927\u4F1A\u6309\u6BD4\u4F8B\u589E\u52A0\u6BCF\u6B21\u91CD\u7ED8\u7684 CPU\u2014\u20141000 \u884C\u7EA6\u4E3A 50 \u884C\u7684 2 \u500D\u3002",scrollbackRow:"\u56DE\u6EDA\u884C\u6570: {rows} \u884C (enter \u7F16\u8F91)",scrollbackTitle:"\u7EC8\u7AEF\u56DE\u6EDA\u884C\u6570\uFF08100\u2013100000\uFF09",scrollbackField:"\u884C\u6570",scrollbackInvalidTitle:"\u4E0D\u662F\u6570\u5B57",scrollbackInvalidBody:"\u56DE\u6EDA\u884C\u6570\u5FC5\u987B\u662F\u6570\u5B57\uFF08\u5982 1000\uFF09\u3002\u4FDD\u7559\u539F\u8BBE\u7F6E\u3002",tabStripRow:"\u6807\u7B7E\u680F: {mode} (enter \u5207\u6362)",tabStripMode:{never:"\u5173\u95ED \u2014 \u6807\u7B7E\u5728\u5DE6\u4FA7\u6811\u91CC",multipleOnly:"\u4EC5 2 \u4E2A\u4EE5\u4E0A\u6807\u7B7E\u65F6\u663E\u793A",always:"\u59CB\u7EC8\u663E\u793A"}},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 = \u5168\u5C40\u9ED8\u8BA4\u5F15\u64CE\uFF08\u5404\u9879\u76EE\u81EA\u5DF1\u7684\u9009\u62E9\u4F1A\u8986\u76D6\u5B83\uFF0C\u5982 Ctrl+Shift+T\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",kimiDetected:"\u25CF \u68C0\u6D4B\u5230 Kimi \u767B\u5F55"},plugins:{title:"\u63D2\u4EF6",hint:"\u5728 ~/.kobe/plugins.json \u91CC\u6CE8\u518C\u7684\u63D2\u4EF6\u3002enter\uFF08\u6216\u70B9\u51FB\uFF09\u5207\u6362\u542F\u7528/\u7981\u7528\u2014\u2014daemon \u76D1\u542C\u8BE5\u6587\u4EF6\uFF0C\u6539\u52A8\u5B9E\u65F6\u751F\u6548\u3002\u63D2\u4EF6\u4E0B\u65B9\u7F29\u8FDB\u7684\u884C\u662F\u5B83\u58F0\u660E\u7684\u8BBE\u7F6E\u9879\uFF0Center \u7F16\u8F91\uFF0C\u65B0\u503C\u5728\u63D2\u4EF6\u4E0B\u6B21\u8FD0\u884C\u65F6\u751F\u6548\u3002\u5B89\u88C5\u4E0E\u79FB\u9664\u5728 shell \u91CC\u505A\uFF1A`rove plugin install <owner/repo>`\u3001`rove plugin link <dir>`\u3002",empty:"\u5C1A\u672A\u6CE8\u518C\u4EFB\u4F55\u63D2\u4EF6\u3002\u7528 `rove plugin install <owner/repo>` \u5B89\u88C5\u4E00\u4E2A\u2014\u2014\u53EF\u5728 GitHub \u7684 `rove-plugin` \u8BDD\u9898\u4E0B\u6D4F\u89C8\u3002",sourceLink:"\u672C\u5730\u94FE\u63A5 {path}",sourceGithub:"{spec}",updateAvailable:"\u6709\u65B0\u7248\u672C \u2014 rove plugin update",declares:"{actions} \u4E2A\u52A8\u4F5C \xB7 {events} \u4E2A\u4E8B\u4EF6 \xB7 {panes} \u4E2A\u9762\u677F",manifestUnreadable:"manifest \u65E0\u6CD5\u89E3\u6790",lastRun:"\xB7 \u4E0A\u6B21\u8FD0\u884C {label} {status} {ago}\u524D",neverRun:"\xB7 \u5C1A\u672A\u8FD0\u884C\u8FC7",runOk:"\u6210\u529F",runFailed:"\u542F\u52A8\u5931\u8D25",runExit:"\u9000\u51FA\u7801 {code}",settingUnset:"(\u672A\u8BBE\u7F6E \u2014 enter \u7F16\u8F91)",settingInvalidTitle:"\u4E0D\u662F\u6570\u5B57",settingInvalidBody:"{label} \u53EA\u63A5\u53D7\u6570\u5B57\uFF0C\u4FDD\u7559\u539F\u503C\u3002"},keybindings:{title:"\u5FEB\u6377\u952E",hint:"\u7F16\u8F91\u4E0B\u9762\u7684 YAML \u6765\u91CD\u7ED1\u5B9A\u76F4\u63A5\u6309\u952E\u548C PureTUI prefix \u7EC4\u5408\uFF1B\u4FEE\u6539\u4F1A\u5B9E\u65F6\u52A0\u8F7D\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)",prefixTitle:"\u547D\u4EE4\u5C42\uFF08{prefix}\uFF09",prefixHint:"\u88F8\u952E\u4F5C\u7528\u4E8E\u5F53\u524D\u805A\u7126\u9762\u677F\uFF1B\u5C11\u91CF\u5355\u6B21\u5FEB\u6377\u952E\u8986\u76D6\u9AD8\u9891 Rove \u64CD\u4F5C\uFF1B{prefix} \u6253\u5F00\u547D\u4EE4\u5C42\uFF08\u7B2C\u4E8C\u51FB\u7A97\u53E3 {timeout}ms \u2014 \u7A0D\u7B49\u4F1A\u51FA\u73B0\u547D\u4EE4\u6307\u5357\uFF09\u3002Prefix \u7ED1\u5B9A\u4FDD\u6301\u539F\u6709\u7684\u9762\u677F\u4F5C\u7528\u57DF\u548C modal \u89C4\u5219\u3002",prefixDisabled:"\u5DF2\u7981\u7528",fixed:"\u56FA\u5B9A\uFF08\u4E0D\u53EF\u91CD\u7ED1\u5B9A\uFF09\uFF1A{ids}\u3002",example:"\u793A\u4F8B",overridesApplied:"\u5DF2\u5E94\u7528\u7684\u8986\u76D6",none:"\u65E0",warnings:"\u8B66\u544A"},feedback:{title:"\u53CD\u9988",hint:"\u901A\u8FC7 `gh` \u5411 Rove \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/rove/state.json \u548C ~/.rove/tasks.json\uFF0C\u7136\u540E\u9000\u51FA Rove\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 Rove daemon \u5E76\u9000\u51FA\u5F53\u524D Rove \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 Rove \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 `rove daemon restart`\uFF0C\u7136\u540E\u91CD\u65B0\u542F\u52A8 Rove\u3002Hosted PTY \u5F15\u64CE\u4F1A\u8BDD\u4E0D\u4F1A\u56E0 daemon \u91CD\u542F\u800C\u9000\u51FA\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 Rove \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 `rove 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`rove 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`rove 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)",archivedHistoryHint:"\u5F52\u6863\u5386\u53F2\u9884\u89C8\uFF08beta\uFF09\uFF1A\u6253\u5F00\u5DF2\u5F52\u6863\u7684\u4EFB\u52A1\u65F6\uFF0C\u5F15\u64CE\u4F4D\u7F6E\u6539\u4E3A\u53EA\u8BFB\u7684 `rove history` \u9762\u677F\uFF08\u4F1A\u8BDD\u9009\u62E9\u5668 + \u5BF9\u8BDD\u8BB0\u5F55\uFF09\uFF0C\u800C\u4E0D\u662F\u91CD\u65B0\u542F\u52A8\u5F15\u64CE\u3002\u5F15\u64CE\u8BB0\u5F55\u6309 worktree \u8DEF\u5F84\u5B58\u50A8\uFF0C\u6240\u4EE5 worktree \u88AB\u5220\u9664\u540E\u5386\u53F2\u4ECD\u7136\u53EF\u8BFB\u3002\u4E0E Web \u4EEA\u8868\u76D8\u5171\u7528\u540C\u4E00\u5F00\u5173\u3002",archivedHistoryOn:"[x] \u5F52\u6863\u5386\u53F2\u9884\u89C8 (\u5F00)",archivedHistoryOff:"[ ] \u5F52\u6863\u5386\u53F2\u9884\u89C8 (\u5173)"}}});var Gd,Wd;var Hd=a(()=>{Gd={view:{workspace:"Active",archives:"Archived"},nav:{workspace:"Workspace",kanban:"Kanban",automations:"Routines",issues:"Issues"},header:{projects:"PROJECTS",tasks:"TASKS"},search:{placeholder:"fuzzy filter"},menu:{open:"Open",openTab:"Open tab",closeTab:"Close tab",newTask:"New task",rename:"Rename",pin:"Pin",unpin:"Unpin",localMerge:"Merge into local",archive:"Archive",delete:"Delete"},moveChip:" move",recentJump:"Recent: {title}",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 create one above.",noArchived:"No archived tasks."},archiveHint:"a to unarchive",activity:{rateLimited:"rate limited",permissionNeeded:"needs permission",error:"error"},subtitle:{noTracking:"no activity tracking",materializing:"materializing",deleting:"deleting",deleteFailed:"delete failed"},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",reorder:"reorder",done:"done"},reBranch:{title:"Set branch",fieldLabel:"branch",hintNoBranches:"(no local branches \u2014 type a new name)",hintNoMatch:"(no match \u2014 enter renames to this branch)",footer:"\u2191\u2193 pick \xB7 enter set \xB7 esc cancel"},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 ROVE_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}"}},Wd={view:{workspace:"\u8FDB\u884C\u4E2D",archives:"\u5F52\u6863"},nav:{workspace:"\u5DE5\u4F5C\u533A",kanban:"\u770B\u677F",automations:"\u4F8B\u884C\u4EFB\u52A1",issues:"\u8BAE\u9898"},header:{projects:"\u9879\u76EE",tasks:"\u4EFB\u52A1"},search:{placeholder:"\u6A21\u7CCA\u641C\u7D22"},menu:{open:"\u6253\u5F00",openTab:"\u6253\u5F00\u8BE5\u6807\u7B7E\u9875",closeTab:"\u5173\u95ED\u8BE5\u6807\u7B7E\u9875",newTask:"\u65B0\u5EFA\u4EFB\u52A1",rename:"\u91CD\u547D\u540D",pin:"\u7F6E\u9876",unpin:"\u53D6\u6D88\u7F6E\u9876",localMerge:"\u5408\u5165\u672C\u5730\u5206\u652F",archive:"\u5F52\u6863",delete:"\u5220\u9664"},moveChip:" \u79FB\u52A8",recentJump:"\u6700\u8FD1:{title}",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\u5728\u4E0A\u65B9\u65B0\u5EFA\u3002",noArchived:"\u6682\u65E0\u5F52\u6863\u4EFB\u52A1\u3002"},archiveHint:"a \u53D6\u6D88\u5F52\u6863",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",deleting:"\u6B63\u5728\u5220\u9664",deleteFailed:"\u5220\u9664\u5931\u8D25"},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",reorder:"\u91CD\u65B0\u6392\u5E8F",done:"\u5B8C\u6210"},reBranch:{title:"\u8BBE\u7F6E\u5206\u652F",fieldLabel:"\u5206\u652F",hintNoBranches:"\uFF08\u6CA1\u6709\u672C\u5730\u5206\u652F\u2014\u2014\u8F93\u5165\u65B0\u540D\u79F0\uFF09",hintNoMatch:"\uFF08\u65E0\u5339\u914D\u2014\u2014\u56DE\u8F66\u5C06\u5206\u652F\u91CD\u547D\u540D\u4E3A\u6B64\u540D\uFF09",footer:"\u2191\u2193 \u9009\u62E9 \xB7 enter \u8BBE\u7F6E \xB7 esc \u53D6\u6D88"},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 ROVE_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 qd,Ud;var Bd=a(()=>{qd={noTask:"(no task \u2014 press n to create)",exited:"process exited \u2014 F5 restarts it",restoring:"restoring session\u2026",tab:{groupTitle:"group {n}",renameTitle:"Rename tab",renameField:"tab title",renameSubmit:"rename",chooseEngineHint:"\u2190/\u2192 or h/l choose, enter confirm, esc cancel",newChat:{title:"New conversation",destLabel:"tab \u2014 destination: ",destTab:"new tab in this worktree",destFork:"fork a child task (new worktree)",ctxLabel:"ctrl+f \u2014 context: ",ctxFresh:"fresh conversation",ctxContinue:"continue this conversation"},cannotCloseLast:"Cannot close the only tab",nothingToFork:"No conversation in this tab to fork yet",noTranscriptToHandOff:"{engine} keeps no readable transcript to hand over"},split:{renameTitle:"Rename split",renameField:"split name"},scrolledBack:"\u2191 scrolled {lines}L (ctrl+pgdn to follow)",unavailable:{shellMissing:"terminal unavailable \u2014 configured shell is not available",spawnFailed:"terminal unavailable \u2014 shell could not start"},reset:{title:"Reset terminal?",body:"The running shell will be killed and a fresh one will spawn at the worktree. Any in-flight processes (vim, htop, paused jobs) end immediately."}},Ud={noTask:"\uFF08\u65E0\u4EFB\u52A1 \u2014\u2014 \u6309 n \u521B\u5EFA\uFF09",exited:"\u8FDB\u7A0B\u5DF2\u9000\u51FA \u2014\u2014 \u6309 F5 \u91CD\u542F",restoring:"\u6B63\u5728\u6062\u590D\u4F1A\u8BDD\u2026",tab:{groupTitle:"group {n}",renameTitle:"\u91CD\u547D\u540D\u6807\u7B7E\u9875",renameField:"\u6807\u7B7E\u9875\u540D\u79F0",renameSubmit:"\u91CD\u547D\u540D",chooseEngineHint:"\u2190/\u2192 \u6216 h/l \u9009\u62E9\uFF0Center \u786E\u8BA4\uFF0Cesc \u53D6\u6D88",newChat:{title:"\u65B0\u5EFA\u5BF9\u8BDD",destLabel:"tab \u2014\u2014 \u843D\u70B9\uFF1A",destTab:"\u672C worktree \u65B0\u6807\u7B7E\u9875",destFork:"fork \u5B50\u4EFB\u52A1\uFF08\u65B0 worktree\uFF09",ctxLabel:"ctrl+f \u2014\u2014 \u4E0A\u4E0B\u6587\uFF1A",ctxFresh:"\u5168\u65B0\u5BF9\u8BDD",ctxContinue:"\u63A5\u7740\u5F53\u524D\u5BF9\u8BDD"},cannotCloseLast:"\u65E0\u6CD5\u5173\u95ED\u552F\u4E00\u7684\u6807\u7B7E\u9875",nothingToFork:"\u8FD9\u4E2A\u6807\u7B7E\u9875\u8FD8\u6CA1\u6709\u53EF\u6D3E\u751F\u7684\u5BF9\u8BDD",noTranscriptToHandOff:"{engine} \u6CA1\u6709\u53EF\u8BFB\u7684\u5BF9\u8BDD\u8BB0\u5F55\uFF0C\u65E0\u6CD5\u4EA4\u63A5"},split:{renameTitle:"\u91CD\u547D\u540D\u5206\u5C4F",renameField:"\u5206\u5C4F\u540D\u79F0"},scrolledBack:"\u2191 \u5DF2\u56DE\u6EDA {lines} \u884C\uFF08ctrl+pgdn \u56DE\u5230\u5E95\u90E8\uFF09",unavailable:{shellMissing:"\u7EC8\u7AEF\u4E0D\u53EF\u7528 \u2014\u2014 \u914D\u7F6E\u7684 shell \u4E0D\u5B58\u5728",spawnFailed:"\u7EC8\u7AEF\u4E0D\u53EF\u7528 \u2014\u2014 shell \u542F\u52A8\u5931\u8D25"},reset:{title:"\u91CD\u7F6E\u7EC8\u7AEF\uFF1F",body:"\u6B63\u5728\u8FD0\u884C\u7684 shell \u4F1A\u88AB\u6740\u6389\u5E76\u5728 worktree \u91CD\u65B0\u542F\u52A8\uFF0C\u8FDB\u884C\u4E2D\u7684\u8FDB\u7A0B\uFF08vim\u3001htop\u3001\u6682\u505C\u7684\u4EFB\u52A1\uFF09\u4F1A\u7ACB\u5373\u7ED3\u675F\u3002"}}});var Kd,Fd;var Md=a(()=>{Kd={pageTitle:"ROVE UPDATE",current:"current",latest:"latest",releaseUrlUnavailable:"release URL unavailable",statusReleaseOpened:"Opened release page in your browser.",statusReleaseError:"Could not open release URL.",statusRunningUpdater:"Closing the TUI and running the updater in this terminal...",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:"Rove update complete. Relaunch Rove to use the new version.",updateFailed:"Rove 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 workspace"},skew:{title:"\u26A0 DAEMON OUT OF DATE",olderBuild:"an older build",hint:"daemon is {daemon} \u2014 you launched v{clientVersion}. Run `rove daemon restart`, then relaunch Rove"},versions:{pageTitle:"ROVE VERSIONS",loading:"Loading releases...",unavailable:"Could not fetch releases (offline or rate-limited).",tagCurrent:"current",tagLatest:"latest",tagBreaking:"breaking",breakingWarning:"\u26A0 installing this crosses breaking version(s) {versions} \u2014 run `rove reset` after the update.",footerHint:"j/k select \xB7 enter install \xB7 q close"}},Fd={pageTitle:"ROVE \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\u5173\u95ED TUI\uFF0C\u5E76\u5728\u5F53\u524D\u7EC8\u7AEF\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:"Rove \u66F4\u65B0\u5B8C\u6210\u3002\u8BF7\u91CD\u65B0\u542F\u52A8 Rove \u4EE5\u4F7F\u7528\u65B0\u7248\u672C\u3002",updateFailed:"Rove \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\u5DE5\u4F5C\u533A"},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 `rove daemon restart`\uFF0C\u7136\u540E\u91CD\u65B0\u542F\u52A8 Rove"},versions:{pageTitle:"ROVE \u7248\u672C\u5217\u8868",loading:"\u6B63\u5728\u52A0\u8F7D\u53D1\u5E03\u5217\u8868\u2026\u2026",unavailable:"\u65E0\u6CD5\u83B7\u53D6\u53D1\u5E03\u5217\u8868\uFF08\u79BB\u7EBF\u6216\u89E6\u53D1\u9650\u6D41\uFF09\u3002",tagCurrent:"\u5F53\u524D",tagLatest:"\u6700\u65B0",tagBreaking:"breaking",breakingWarning:"\u26A0 \u5B89\u88C5\u8BE5\u7248\u672C\u4F1A\u8DE8\u8FC7 breaking \u7248\u672C {versions}\u2014\u2014\u66F4\u65B0\u540E\u9700\u8FD0\u884C `rove reset`\u3002",footerHint:"j/k \u9009\u62E9 \xB7 enter \u5B89\u88C5 \xB7 q \u5173\u95ED"}}});var Nd,Od;var Ld=a(()=>{Nd={title:"ISSUES",noRepo:"no project",empty:"No open issues.",assignedFilter:"assigned to me",starting:"Starting work on #{number}\u2026",startedNoEngine:"Created {title}, but its engine did not start."},Od={title:"\u8BAE\u9898",noRepo:"\u65E0\u9879\u76EE",empty:"\u6CA1\u6709\u5F00\u653E\u7684\u8BAE\u9898\u3002",assignedFilter:"\u5206\u914D\u7ED9\u6211\u7684",starting:"\u6B63\u5728\u5F00\u59CB\u5904\u7406 #{number}\u2026",startedNoEngine:"\u5DF2\u521B\u5EFA {title}\uFF0C\u4F46\u5F15\u64CE\u6CA1\u6709\u542F\u52A8\u3002"}});var jd,Vd;var _d=a(()=>{jd={quit:{confirmTitle:"Quit Rove?",confirmBody:"The daemon and task sessions keep running. This closes only the native workspace.",confirmLabel:"Quit"},empty:{selectTask:"Select a task with a worktree"},attention:{none:"No available Inbox items"},inbox:{title:"INBOX",empty:"No pending attention",openHint:"enter open",deleteHint:"d delete",section:{attention:"ATTENTION",recent:"RECENT"},state:{done:"done",needsInput:"needs input",error:"error",rateLimited:"rate limited",running:"running"}},terminalComing:"Embedded terminal is starting..."},Vd={quit:{confirmTitle:"\u9000\u51FA Rove\uFF1F",confirmBody:"\u5B88\u62A4\u8FDB\u7A0B\u548C\u4EFB\u52A1\u4F1A\u8BDD\u4F1A\u7EE7\u7EED\u8FD0\u884C\uFF0C\u8FD9\u91CC\u53EA\u5173\u95ED\u539F\u751F\u5DE5\u4F5C\u533A\u3002",confirmLabel:"\u9000\u51FA"},empty:{selectTask:"\u8BF7\u9009\u62E9\u4E00\u4E2A\u5E26 worktree \u7684\u4EFB\u52A1"},attention:{none:"\u6536\u4EF6\u7BB1\u4E2D\u6CA1\u6709\u53EF\u6253\u5F00\u7684\u9879\u76EE"},inbox:{title:"\u6536\u4EF6\u7BB1",empty:"\u6682\u65E0\u5F85\u5904\u7406",openHint:"enter \u6253\u5F00",deleteHint:"d \u5220\u9664",section:{attention:"\u5F85\u5904\u7406",recent:"\u6700\u8FD1\u4F7F\u7528"},state:{done:"\u5B8C\u6210",needsInput:"\u9700\u8981\u8F93\u5165",error:"\u51FA\u9519",rateLimited:"\u9650\u6D41",running:"\u8FDB\u884C\u4E2D"}},terminalComing:"\u5D4C\u5165\u7EC8\u7AEF\u6B63\u5728\u542F\u52A8\u2026\u2026"}});var Cd,Dd;var Ad=a(()=>{Cd={title:"Worktrees",loading:"Loading worktrees\u2026",noProjects:"No local projects known to Rove yet.",noWorktrees:"No worktrees.",badge:{kobeManaged:"rove",dirty:"dirty",remoteOn:"on remote",remoteOff:"not pushed",remoteUnknown:"remote unknown"},verdict:{prOpen:"PR open",prMerged:"merged (PR)",inMain:"in main",prClosed:"PR closed",idle:"stale"},row:{detached:"(detached)",created:"created {age} ago",linkedTask:"task: {title}"},delete:{button:"Delete",confirmTitle:"Delete worktree?",confirmBody:'Delete the worktree for "{branch}"? This removes the working directory; the branch itself is kept.',forceTitle:"Force delete worktree?",forceBody:'"{branch}" has uncommitted or untracked changes that will be PERMANENTLY LOST. Force delete anyway?',failed:"Failed to delete worktree: {error}"},land:{button:"Land",confirmTitle:"Land branch?",confirmBody:`Merge "{branch}" into the base repo's current branch? A dirty base checkout is refused; conflicts abort with a file list.`,noTask:"This worktree isn't tracked as a Rove task \u2014 nothing to land.",conflict:"Land hit conflicts (merge aborted). Resolve by hand: {files}",dirtyBase:"The base checkout has uncommitted changes \u2014 commit or stash them, then land.",failed:"Land failed: {error}",done:'Landed "{branch}" onto {landedOn} ({commit}).'},hint:{}},Dd={title:"\u5DE5\u4F5C\u6811",loading:"\u6B63\u5728\u52A0\u8F7D worktree\u2026",noProjects:"Rove \u8FD8\u6CA1\u6709\u5DF2\u77E5\u7684\u672C\u5730\u9879\u76EE\u3002",noWorktrees:"\u6CA1\u6709 worktree\u3002",badge:{kobeManaged:"rove",dirty:"\u6709\u6539\u52A8",remoteOn:"\u5DF2\u63A8\u9001",remoteOff:"\u672A\u63A8\u9001",remoteUnknown:"\u8FDC\u7AEF\u672A\u77E5"},verdict:{prOpen:"PR \u8BC4\u5BA1\u4E2D",prMerged:"\u5DF2\u5408\u5165 (PR)",inMain:"\u5DF2\u5728\u4E3B\u5206\u652F",prClosed:"PR \u5DF2\u5173\u95ED",idle:"\u9648\u65E7"},row:{detached:"(\u6E38\u79BB\u72B6\u6001)",created:"{age}\u524D\u521B\u5EFA",linkedTask:"\u4EFB\u52A1\uFF1A{title}"},delete:{button:"\u5220\u9664",confirmTitle:"\u5220\u9664 worktree\uFF1F",confirmBody:'\u786E\u5B9A\u5220\u9664 "{branch}" \u5BF9\u5E94\u7684 worktree\uFF1F\u5DE5\u4F5C\u76EE\u5F55\u4F1A\u88AB\u79FB\u9664\uFF0C\u5206\u652F\u672C\u8EAB\u4F1A\u4FDD\u7559\u3002',forceTitle:"\u5F3A\u5236\u5220\u9664 worktree\uFF1F",forceBody:'"{branch}" \u5B58\u5728\u672A\u63D0\u4EA4\u6216\u672A\u8DDF\u8E2A\u7684\u6539\u52A8\uFF0C\u5F3A\u5236\u5220\u9664\u540E\u5C06\u6C38\u4E45\u4E22\u5931\u3002\u4ECD\u8981\u5F3A\u5236\u5220\u9664\u5417\uFF1F',failed:"\u5220\u9664 worktree \u5931\u8D25\uFF1A{error}"},land:{button:"\u5408\u5165",confirmTitle:"\u5408\u5165\u5206\u652F\uFF1F",confirmBody:'\u628A "{branch}" \u5408\u5165\u57FA\u4ED3\u5E93\u5F53\u524D\u5206\u652F\uFF1F\u57FA\u7840\u68C0\u51FA\u6709\u672A\u63D0\u4EA4\u6539\u52A8\u4F1A\u88AB\u62D2\u7EDD\uFF1B\u51B2\u7A81\u4F1A\u4E2D\u6B62\u5E76\u7ED9\u51FA\u6587\u4EF6\u6E05\u5355\u3002',noTask:"\u8BE5 worktree \u672A\u4F5C\u4E3A Rove \u4EFB\u52A1\u88AB\u8DDF\u8E2A\u2014\u2014\u6CA1\u6709\u53EF\u5408\u5165\u7684\u5BF9\u8C61\u3002",conflict:"\u5408\u5165\u9047\u5230\u51B2\u7A81\uFF08\u5DF2\u4E2D\u6B62\uFF09\u3002\u8BF7\u624B\u52A8\u89E3\u51B3\uFF1A{files}",dirtyBase:"\u57FA\u7840\u68C0\u51FA\u6709\u672A\u63D0\u4EA4\u6539\u52A8\u2014\u2014\u8BF7\u5148\u63D0\u4EA4\u6216 stash\uFF0C\u518D\u5408\u5165\u3002",failed:"\u5408\u5165\u5931\u8D25\uFF1A{error}",done:'\u5DF2\u628A "{branch}" \u5408\u5165 {landedOn}\uFF08{commit}\uFF09\u3002'},hint:{}}});function Qq($){return typeof $==="string"&&yY.some((Z)=>Z.id===$)}var iY0,oY0,yY,Xq,bY="en";var kY=a(()=>{Ac();Tc();Ec();fc();bc();mc();cc();pc();oc();sc();$d();Xd();Yd();Hd();Bd();Md();Ld();_d();Ad();iY0={settings:Qd,tasks:Gd,terminal:qd,files:Sc,newTask:nc,onboarding:ac,ops:tc,update:Kd,quickTask:Zd,help:wc,hints:gc,history:kc,common:Pc,keys:dc,workspace:jd,worktrees:Cd,kanban:hc,automations:Cc,workItems:Nd},oY0={settings:zd,tasks:Wd,terminal:Ud,files:Ic,newTask:ic,onboarding:rc,ops:ec,update:Fd,quickTask:Jd,help:xc,hints:yc,history:vc,common:Rc,keys:lc,workspace:Vd,worktrees:Dd,kanban:uc,automations:Dc,workItems:Od},yY=[{id:"en",label:"English"},{id:"zh",label:"\u4E2D\u6587"}],Xq={en:iY0,zh:oY0}});function _S($,Z){let J=$;for(let X of Z.split("."))if(J&&typeof J==="object"&&X in J)J=J[X];else return;return typeof J==="string"?J:void 0}function Pd($,Z){if(!Z)return $;return $.replace(/\{(\w+)\}/g,(J,X)=>(X in Z)?String(Z[X]):J)}function CS($,Z,J){return $.keys[Z]?.[J]}function zq($){if(Xq[$])YF.set($)}function gj(){return YF.get()}function Rd(){return YF}function T$($,Z){let J=YF.get(),X=_S(Xq[J],$)??_S(Xq.en,$)??$;return Pd(X,Z)}function cJ($,Z){let J=YF.get();return CS(Xq[J],$,Z)??CS(Xq.en,$,Z)??Z}var YF;var vY=a(()=>{$Z();kY();kY();YF=r$(bY)});function aY0(){return G4(Rd())}function Z1(){let $=aY0();return Td.useCallback((Z,J)=>T$(Z,J),[$])}var Td;var z$=a(()=>{vY();BZ();kY();Td=H1(q1(),1)});function X9($){return $<70}function Sd($){if($.focusedPane==="sidebar")return"sidebar";return $.hasSelection||$.hasOpenPage?"content":"sidebar"}function Ed($){if(!xQ($))return $;return cJ("desc",$)}function rY0($){if(["kanban.open","automations.open","workItems.open"].includes($))return"Views";if($.startsWith("focus."))return"Navigation";if($.startsWith("inbox.")||$.startsWith("attention."))return"Attention";if($.startsWith("chat.tab.")||$.startsWith("chat.session."))return"Sessions";if($.startsWith("chat.fork.")||$.startsWith("task."))return"Tasks";if($.startsWith("settings.")||$==="workspace.zenToggle")return"Tools";return xQ($)?.category??"Global"}function sY0($){let Z=new Map(t7.map((G,W)=>[G.id,W])),J=new Map;for(let G of $){let W=J.get(G.action);if(W)W.strokes.push(G.stroke);else J.set(G.action,{action:G.action,strokes:[G.stroke]})}let X=new Map,z=[...J.values()].sort((G,W)=>(Z.get(G.action)??Number.MAX_SAFE_INTEGER)-(Z.get(W.action)??Number.MAX_SAFE_INTEGER));for(let G of z){let W=rY0(G.action),H=X.get(W);if(H)H.push(G);else X.set(W,[G])}return[...X].map(([G,W])=>({category:G,actions:W}))}function wd($){let{theme:Z}=l0(),J=Z1(),X=E5(),z=G4(tu),[,G]=GF.useState(0),W=Date.now(),H=z.entries.filter((y)=>W-y.at<YS),U=H[0]?.at;GF.useEffect(()=>{if(U===void 0)return;let y=setTimeout(()=>G((E)=>E+1),Math.max(30,U+YS-Date.now()));return()=>clearTimeout(y)},[U]),GF.useEffect(()=>{if(!z.armed||z.armedAt===null)return;let y=z.armedAt+GS-Date.now();if(y<=0)return;let E=setTimeout(()=>G((S)=>S+1),y);return()=>clearTimeout(E)},[z.armed,z.armedAt]);let B=H.length+(z.armed?1:0);if(B===0)return null;let N=t3().key??"",L=z.armed&&z.armedAt!==null&&W-z.armedAt>=GS,M=L?sY0(z.options):[];if(L){let y=X.width<88,E=y?1:Math.min(3,Math.max(1,M.length)),S=Array.from({length:Math.ceil(M.length/E)},(h,o)=>M.slice(o*E,(o+1)*E)),R=S.reduce((h,o)=>h+Math.max(1,...o.map((m)=>m.actions.length))+1,3),w=Math.max(20,X.width-4),b=Math.max(0,X.height-Id-R),k=y?w-4:Math.max(18,Math.floor((w-4)/E));return T.jsxDEV("box",{position:"absolute",zIndex:2400,left:2,top:b,width:w,border:!0,borderColor:Z.borderActive,backgroundColor:Z.backgroundDialog,paddingLeft:1,paddingRight:1,flexDirection:"column",children:[T.jsxDEV("box",{flexDirection:"row",justifyContent:"space-between",children:[T.jsxDEV("text",{fg:Z.primary,children:J("help.commandLayer",{prefix:N})},void 0,!1,void 0,this),T.jsxDEV("text",{fg:Z.textMuted,children:J("help.escCancel")},void 0,!1,void 0,this)]},void 0,!0,void 0,this),T.jsxDEV("box",{flexDirection:"column",children:S.map((h)=>T.jsxDEV("box",{flexDirection:"row",gap:y?0:1,children:h.map((o)=>T.jsxDEV("box",{flexDirection:"column",flexGrow:1,flexBasis:0,children:[T.jsxDEV("text",{fg:Z.accent,children:cJ("category",o.category)},void 0,!1,void 0,this),o.actions.map((m)=>{let e=m.strokes.join("/"),t=qZ(Ed(m.action),Math.max(4,k-e.length-3));return T.jsxDEV("box",{flexDirection:"row",gap:1,children:[T.jsxDEV("box",{width:Math.min(9,Math.max(3,e.length)),children:T.jsxDEV("text",{fg:Z.primary,children:e},void 0,!1,void 0,this)},void 0,!1,void 0,this),T.jsxDEV("text",{fg:Z.text,wrapMode:"none",children:t},void 0,!1,void 0,this)]},m.action,!0,void 0,this)})]},o.category,!0,void 0,this))},h.map((o)=>o.category).join("-"),!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}let V=X9(X.width),A=V?0:$.left,_=V?X.width:$.width,C=Math.max(0,X.height-Id-B);return T.jsxDEV("box",{position:"absolute",zIndex:2400,left:A,top:C,width:_,flexDirection:"column",children:[H.map((y)=>T.jsxDEV("box",{paddingLeft:1,paddingRight:1,backgroundColor:Z.backgroundDialog,children:T.jsxDEV("text",{fg:Z.textMuted,wrapMode:"none",children:qZ(`${y.prefixKey?`${y.prefixKey} + `:""}${y.stroke} ${y.action?`\u2192 ${Ed(y.action)}`:"\u2205"}`,_-2)},void 0,!1,void 0,this)},y.id,!1,void 0,this)),z.armed?T.jsxDEV("box",{paddingLeft:1,paddingRight:1,backgroundColor:Z.backgroundDialog,children:T.jsxDEV("text",{fg:Z.textMuted,wrapMode:"none",children:`${N} \u22EF`},void 0,!1,void 0,this)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}var GF,Id=1;var xd=a(async()=>{mJ();UZ();US();z$();BZ();r0();await e1([h4(),$$()]);GF=H1(q1(),1)});import{spawnSync as tY0}from"child_process";function ZG0($){let[Z,J]=$.split("/");if(!Z||!J)throw Error(`invalid GitHub repository slug: ${$}`);return{owner:Z,name:J}}function fd($,Z){let J=$.trim();if(!J)throw Error(`${Z} is required`);return J}function gd($,Z){let J=Z?.map((X)=>typeof X.message==="string"?X.message:null).filter((X)=>!!X);if(J&&J.length>0)return J.join("; ");return $.trim()||"GitHub CLI returned an empty response"}function yd($,Z,J){let X=["api","graphql","-f",`query=${$}`];for(let[U,B]of Object.entries(Z))X.push("-f",`${U}=${B}`);let z=J.spawn("gh",X,{encoding:"utf8"});if(z.error)throw Error(`failed to run gh: ${z.error.message}`);let G=typeof z.stdout==="string"?z.stdout:String(z.stdout??""),W=typeof z.stderr==="string"?z.stderr:String(z.stderr??""),H;try{H=JSON.parse(G)}catch{throw Error(`failed to parse gh response: ${gd(W,void 0)}`)}if((z.status??0)!==0||H.errors?.length)throw Error(gd(W,H.errors));if(!H.data)throw Error("GitHub CLI response did not include data");return H.data}function JG0($){return`${$}
658
+ `);try{Z.write(J)}catch{this.markDead(!1)}}onData($){if(this.listeners.add($),this.buffer!=="")try{$(this.capture(),null,null)}catch{}return()=>{this.listeners.delete($)}}resize($,Z){if(this._killed)return;this.cols=$,this.rows=Z}capture(){return Cj(this.buffer)}captureCursor(){return null}captureWindow(){return null}kill(){if(this._killed)return;this.markDead(!0)}append($){if(this._killed)return;if(this.buffer+=$,this.buffer.length>TT)this.buffer=this.buffer.slice(this.buffer.length-TT);let Z=Fj($);if(Z&&Z!==this._title){this._title=Z;for(let X of this.titleListeners)try{X(Z)}catch{}}let J=this.capture();for(let X of this.listeners)try{X(J,null,null)}catch{}}markDead($){if(this._killed)return;if(this._killed=!0,$)try{this.proc.kill("SIGTERM")}catch{}let Z=[...this.exitListeners];this.listeners.clear(),this.exitListeners.clear();for(let J of Z)try{J()}catch{}}paste($){this.write($)}wheel(){return!1}onExit($){if(this._killed)return $(),()=>{};return this.exitListeners.add($),()=>{this.exitListeners.delete($)}}onTitleChange($){if(this.titleListeners.add($),this._title)try{$(this._title)}catch{}return()=>{this.titleListeners.delete($)}}}var QS=a(()=>{Uj();s3();eH()});function au($){let Z=process.env.KOBE_TERMINAL_BACKEND??"hosted";if(Z==="mock")return new Tj($);if(Z==="pipe")return new Sj($);if(Z==="bun-pty")return new ou($);if(Z==="hosted")return new QF($);throw Error(`unknown terminal backend: ${Z}`)}var ou;var ru=a(()=>{Uj();Rj();XS();QS();s3();JS();XS();QS();Rj();ou=class ou extends XF{proc;constructor($){super($);if(this.proc=Bun.spawn(Mj($),{cwd:$.cwd,env:oH(process.env,{TERM:"xterm-256color",COLUMNS:String(this.cols),LINES:String(this.rows),BASH_SILENCE_DEPRECATION_WARNING:"1",KOBE_TERMINAL_PTY:"1"}),terminal:{cols:this.cols,rows:this.rows,name:"xterm-256color",data:(Z,J)=>this.feed(J),exit:()=>this.markDead(!1)}}),this.proc.exited.then(()=>this.markDead(!1),()=>this.markDead(!1)),this.proc.unref?.(),$.initialInput)this.transportWrite($.initialInput)}get shellPid(){return this.proc.pid??null}transportWrite($){this.proc.terminal?.write($)}transportResize($,Z){this.proc.terminal?.resize($,Z)}transportKill(){try{this.proc.terminal?.close()}catch{}try{this.proc.kill("SIGTERM")}catch{}}}});class su{map=new Map;parked=new Map;factory;sweepTimer=null;constructor($=au){this.factory=$}ensureSweeper(){if(this.sweepTimer)return;let $=setInterval(()=>this.parkIdle(gY0),yY0);$.unref?.(),this.sweepTimer=$}stopSweeper(){if(this.sweepTimer)clearInterval(this.sweepTimer);this.sweepTimer=null}parkIdle($,Z=Date.now()){let J=[];for(let[X,z]of this.map){if(z.killed)continue;if(!z.detach||!z.unwatchedSinceMs)continue;let G=z.unwatchedSinceMs();if(G===null||Z-G<$)continue;let W=z.lastOutputAtMs?.()??null;if(W!==null&&Z-W<bY0)continue;let H=z.capturePark?.()??null;try{z.detach({parked:H!==null,parkedScreenBytes:H?Buffer.byteLength(H.serialized):void 0})}catch{}if(this.map.delete(X),H)this.parked.set(X,H);J.push(X)}if(J.length>0&&BH()){let X=Math.round(process.memoryUsage().rss/1048576);console.error(`[rove pty] parked ${J.length} idle terminal(s); ${this.map.size} live; rss=${X}MB`)}return J}acquire($,Z,J={}){let X=this.map.get($);if(X&&!X.killed)return X;if(X)this.map.delete($);let z=this.parked.get($);if(z)this.parked.delete($);let G=this.factory({taskId:$,cwd:Z,...J,...z?{restore:z}:{}});return this.map.set($,G),this.ensureSweeper(),G}get($){let Z=this.map.get($);if(!Z)return null;if(Z.killed)return this.map.delete($),null;return Z}has($){return this.get($)!==null}release($){let Z=this.map.get($);if(this.map.delete($),this.parked.delete($),!Z)return;try{Z.kill()}catch{}}releaseWhere($){let Z=Array.from(this.map.keys()).filter($);for(let J of Z)this.release(J);for(let J of Array.from(this.parked.keys()).filter($))this.parked.delete(J)}releaseAll(){let $=Array.from(this.map.keys());for(let Z of $)this.release(Z);this.parked.clear(),this.stopSweeper()}detachAll(){let $=Array.from(this.map.values());this.map.clear(),this.parked.clear(),this.stopSweeper();for(let Z of $)try{if(Z.detach)Z.detach();else Z.kill()}catch{}}reset($,Z,J={}){return this.release($),this.acquire($,Z,J)}resetIfCurrent($,Z,J,X={}){if(Z.killed||this.map.get($)!==Z)return null;return this.reset($,J,X)}get size(){return this.map.size}entries(){return[...this.map]}}function X4(){if(!zS)zS=new su;return zS}var gY0=120000,yY0=30000,bY0=30000,zS=null;var f8=a(()=>{L5();ru()});function HS($,Z=[],J=null){WS.update((X)=>{if(!$&&!X.armed&&X.options.length===0)return X;return{...X,armed:$,armedAt:$?J:null,options:$?Z:[]}})}function qS($){WS.update((Z)=>({...Z,armed:!1,armedAt:null,options:[],entries:[...Z.entries,{...$,id:vY0++}].slice(-kY0)}))}var YS=4000,GS=180,kY0=3,WS,vY0=1,tu;var US=a(()=>{$Z();WS=r$({armed:!1,armedAt:null,options:[],entries:[]}),tu=WS});function Zc($,Z){if(Z.modalOwner!==void 0){let J=$.findIndex((X)=>X.modalMember===Z.modalOwner);if(J>=0){$.splice(J,0,Z);return}}$.push(Z)}function mY0($){let Z=[],J=$.name;if(J)Z.push(J);if(J==="return")Z.push("enter");if(J==="enter")Z.push("return");if(J==="backspace"&&$.raw==="\b"&&!$.meta&&!$.option)Z.push("ctrl+h");if(J==="linefeed"&&!$.meta&&!$.option)Z.push("ctrl+j");let X=[];if($.ctrl)X.push("ctrl");if($.meta)X.push("cmd");if($.option)X.push("alt");let z=$.shift&&J!==void 0&&J.length===1&&X.length===0;if($.shift&&J&&J.length>1)X.push("shift");if(X.length===0){if(z)return[...Z.map((W)=>`shift+${W}`),...Z];return Z}let G=`${X.join("+")}+`;return Z.map((W)=>G+W)}function Jc($){uJ={...$},J9()}function Xc(){uJ={...Zq},J9()}function t3(){return uJ}function J9(){if(Ij!==null)clearTimeout(Ij);Ij=null,$q=null,FS=!1,HS(!1)}function Qc($,Z,J){J9(),$q=$,FS=J,Ij=setTimeout(J9,uJ.timeoutMs),HS(!0,Z,$)}function zc($,Z=Date.now()){if(uJ.key===null)return!1;if(!Yc($))return!1;return Qc(Z,Gc($),KS($)),!0}function hY0($,Z,J,X){for(let z=Z-1;z>=0;z--){let G=$[z]?.config();if(!G||G.enabled===!1)continue;let W=G.bindings.find((H)=>Boolean(H.prefix)===X&&J.includes(H.key));if(W){if(!eu.has(W.key))eu.add(W.key),console.error(`[rove keymap] "${W.key}" matched two ENABLED bindings \u2014 the lower one is shadowed by LIFO order. Gate one of them off (see tui-react/lib/keymap.ts header).`);return}if(G.modal)return}}function Yc($){for(let Z=$.length-1;Z>=0;Z--){let J=$[Z]?.config();if(!J||J.enabled===!1)continue;if(J.bindings.some((X)=>X.prefix===!0))return!0;if(J.modal)return!1}return!1}function KS($){for(let Z=$.length-1;Z>=0;Z--){let J=$[Z]?.config();if(!J||J.enabled===!1)continue;if(J.bindings.some((X)=>X.passthrough))return!0;if(J.modal)return!1}return!1}function Gc($){let Z=[],J=new Set;for(let X=$.length-1;X>=0;X--){let z=$[X]?.config();if(!z||z.enabled===!1)continue;for(let G of z.bindings){if(G.prefix!==!0||J.has(G.key))continue;J.add(G.key),Z.push({stroke:G.key,action:G.id??G.key})}if(z.modal)break}return Z}function Wc($){let Z=new Set,J=new Set,X=!1;for(let z=$.length-1;z>=0;z--){let G=$[z]?.config();if(!G||G.enabled===!1)continue;for(let W of G.bindings){if(W.passthrough)X=!0;if(!W.id)continue;(W.prefix===!0?J:Z).add(W.id)}if(G.modal)break}return{direct:Z,prefix:J,inputPassthrough:X}}function $c($,Z,J,X){for(let z=$.length-1;z>=0;z--){let G=$[z];if(!G)continue;let W=G.config();if(W.enabled===!1)continue;let H;for(let U of J)if(H=W.bindings.find((B)=>Boolean(B.prefix)===X&&B.key===U),H)break;if(H){if(!W.modal&&BH())hY0($,z,J,X);return H.cmd(Z,H.slot),H}if(W.modal)return null}return null}function MS($,Z,J=Date.now()){if(Z.defaultPrevented||BS)return!1;let X=$.slice(),z=mY0(Z);BS=!0;try{if($q!==null&&KS(X)!==FS)J9();if($q!==null){let W=uJ.key??"",H=J-$q>uJ.timeoutMs;if($q=null,H)J9();else{if(z.includes("escape"))return J9(),Z.preventDefault(),!0;J9();let U=$c(X,Z,z,!0);return qS({prefixKey:W,stroke:z[0]??"",action:U?U.id??U.key:null,at:J}),Z.preventDefault(),!0}}if(uJ.key!==null&&z.includes(uJ.key)){if(Yc(X))return Qc(J,Gc(X),KS(X)),Z.preventDefault(),!0}let G=$c(X,Z,z,!1);if(G){if(G.id&&G.key.includes("+")&&!G.key.startsWith("shift+"))qS({prefixKey:"",stroke:G.key,action:G.id??G.key,at:J});return Z.preventDefault(),!0}return!1}finally{BS=!1}}var BS=!1,Zq,uJ,$q=null,FS=!1,Ij=null,eu;var UZ=a(()=>{L5();US();Zq={key:"ctrl+a",timeoutMs:5000},uJ={...Zq};eu=new Set});var Ej;var NS=a(()=>{Ej={$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 wj;var OS=a(()=>{wj={$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 xj;var LS=a(()=>{xj={$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 Hc;var qc=a(()=>{NS();OS();LS();Hc={claude:Ej,conductor:wj,tokyonight:xj}});import{RGBA as gY}from"@opentui/core";function Uc($){return Boolean(jS[$])}function zF($,Z="dark"){let J=$.defs??{};function X(U,B=[]){if(typeof U==="string"){if(U==="transparent"||U==="none")return gY.fromInts(0,0,0,0);if(U.startsWith("#"))return gY.fromHex(U);if(B.includes(U))return gY.fromInts(0,0,0);let N=J[U]??$.theme[U];if(N===void 0)return gY.fromInts(0,0,0);return X(N,[...B,U])}return X(U[Z],B)}let z={};for(let[U,B]of Object.entries($.theme))z[U]=X(B);let G=z.text??gY.fromHex("#ffffff"),W=z.background??gY.fromHex("#000000");return{...{primary:z.primary??G,secondary:z.secondary??G,accent:z.accent??z.primary??G,error:z.error??G,warning:z.warning??G,success:z.success??G,info:z.info??G,text:G,textMuted:z.textMuted??G,background:W,backgroundPanel:z.backgroundPanel??W,backgroundElement:z.backgroundElement??W,backgroundMenu:z.backgroundMenu??z.backgroundElement??W,backgroundDialog:z.backgroundDialog??z.backgroundPanel??W,border:z.border??G,borderActive:z.borderActive??z.border??G,borderSubtle:z.borderSubtle??z.border??G,diffAdded:z.diffAdded??z.success??G,diffRemoved:z.diffRemoved??z.error??G,diffContext:z.diffContext??z.textMuted??G,diffHunkHeader:z.diffHunkHeader??z.textMuted??G,diffAddedBg:z.diffAddedBg??W,diffRemovedBg:z.diffRemovedBg??W,selectedListItemText:z.selectedListItemText??W},...z}}function Bc($,Z,J){let X={...$,focusAccent:$[Z]??$.primary};if(!J)return X;let z=gY.fromInts(0,0,0,0);return{...X,background:z,backgroundPanel:z}}var jS,fQ;var fj=a(()=>{qc();jS=Hc;fQ=["primary","success","info"]});function G4($){return Kc.useSyncExternalStore($.subscribe,$.get,$.get)}var Kc;var BZ=a(()=>{Kc=H1(q1(),1)});var T;var r0=a(()=>{T=H1(oR(),1)});import{RGBA as lY0}from"@opentui/core";function pY0(){return Object.keys(e7.get().themes)}function Jq($){return Boolean(e7.get().themes[$])}function VS($,Z){if(!$)return!1;if(!Z||typeof Z!=="object"||!Z.theme)return!1;return e7.update((J)=>({...J,themes:{...J.themes,[$]:Z}})),!0}function Fc(){return e7.get().active}function Mc($){if(!Jq($))return!1;return e7.update((Z)=>({...Z,active:$})),!0}function Nc(){return e7.get().transparentBackground}function Oc($){e7.update((Z)=>({...Z,transparentBackground:$}))}function Lc(){return e7.get().focusAccent}function jc($){e7.update((Z)=>({...Z,focusAccent:$}))}function nY0($){let Z=$.themes[$.active];if(Z)return zF(Z,$.mode);let J=$.themes.claude??$.themes.opencode??Object.values($.themes)[0];if(!J)return zF({theme:{background:"#000000",text:"#ffffff"}},$.mode);return zF(J,$.mode)}function _c($){KZ.useMemo(()=>{e7.update((G)=>({...G,mode:$.mode??G.mode,active:$.theme&&G.themes[$.theme]?$.theme:G.active}))},[]);let Z=G4(e7),J=I4(),X=KZ.useMemo(()=>Bc(nY0(Z),Z.focusAccent,Z.transparentBackground),[Z]);KZ.useEffect(()=>{if(J?.screenMode==="split-footer")return;J?.setBackgroundColor(X.background??lY0.fromInts(0,0,0))},[J,X]);let z=KZ.useMemo(()=>({theme:X,selected:Z.active,transparentBackground:Z.transparentBackground,focusAccent:Z.focusAccent,mode:()=>Z.mode,set(G){if(!Jq(G))return!1;return e7.update((W)=>({...W,active:G})),!0},setMode(G){e7.update((W)=>({...W,mode:G}))},setTransparentBackground(G){e7.update((W)=>({...W,transparentBackground:G}))},setFocusAccent(G){e7.update((W)=>({...W,focusAccent:G}))},all:pY0,has:Jq}),[X,Z]);return T.jsxDEV(Vc.Provider,{value:z,children:$.children},void 0,!1,void 0,this)}function l0(){let $=KZ.useContext(Vc);if(!$)throw Error("Theme context must be used within a context provider");return $}var KZ,e7,Vc;var $$=a(async()=>{$Z();fj();BZ();fj();r0();await h4();KZ=H1(q1(),1),e7=qL({themes:{...jS},active:"claude",mode:"dark",transparentBackground:!0,focusAccent:"primary"});Vc=KZ.createContext(null)});var Cc,Dc;var Ac=a(()=>{Cc={title:"ROUTINES",holdingDaemon:"keeping the daemon awake",notHolding:"none active",paused:"paused",newTitle:"New routine",fieldName:"name",fieldRepo:"repo",fieldPrompt:"prompt",fieldSchedule:"schedule (five-field cron)",namePlaceholder:"weekday dependency audit",promptPlaceholder:"Audit dependencies and summarize risky changes.",needRepo:"Open a project first \u2014 a routine runs in one.",cronInvalid:"not a five-field cron",cronField:{minute:"min",hour:"hour",dayOfMonth:"day",month:"month",dayOfWeek:"weekday"},cronNever:"valid, but never fires",missing:{name:"Give it a name.",repo:"Pick a project.",prompt:"Say what it should do.",schedule:"That schedule will not run."},empty:"No routines scheduled.",emptyHint:"Press n to create one.",precheck:"precheck: {command}",recentRuns:"RECENT RUNS",noRuns:"Not run yet.",noSelection:"A routine runs its prompt in a project on a schedule.",running:"Running {name}\u2026",ranWith:"{name}: {status}",runNow:"[ run now ]",runNowHint:"try it without waiting for the schedule",deleteTitle:"Delete routine?",deleteBody:"{name} and its run history will be removed. Tasks it already created are untouched.",deleteButton:"Delete"},Dc={title:"\u4F8B\u884C\u4EFB\u52A1",holdingDaemon:"\u6B63\u5728\u4FDD\u6301\u5B88\u62A4\u8FDB\u7A0B\u5E38\u9A7B",notHolding:"\u65E0\u542F\u7528\u9879",paused:"\u5DF2\u6682\u505C",newTitle:"\u65B0\u5EFA\u4F8B\u884C\u4EFB\u52A1",fieldName:"\u540D\u79F0",fieldRepo:"\u4ED3\u5E93",fieldPrompt:"\u63D0\u793A\u8BCD",fieldSchedule:"\u8C03\u5EA6\uFF08\u4E94\u6BB5 cron\uFF09",namePlaceholder:"\u5DE5\u4F5C\u65E5\u4F9D\u8D56\u5BA1\u8BA1",promptPlaceholder:"\u5BA1\u8BA1\u4F9D\u8D56\u5E76\u603B\u7ED3\u6709\u98CE\u9669\u7684\u53D8\u66F4\u3002",needRepo:"\u5148\u6253\u5F00\u4E00\u4E2A\u9879\u76EE\u2014\u2014\u4F8B\u884C\u4EFB\u52A1\u8981\u8DD1\u5728\u67D0\u4E2A\u9879\u76EE\u91CC\u3002",cronInvalid:"\u4E0D\u662F\u5408\u6CD5\u7684\u4E94\u6BB5 cron",cronField:{minute:"\u5206",hour:"\u65F6",dayOfMonth:"\u65E5",month:"\u6708",dayOfWeek:"\u661F\u671F"},cronNever:"\u8BED\u6CD5\u5408\u6CD5\uFF0C\u4F46\u6C38\u8FDC\u4E0D\u4F1A\u89E6\u53D1",missing:{name:"\u8D77\u4E2A\u540D\u5B57\u3002",repo:"\u9009\u4E00\u4E2A\u9879\u76EE\u3002",prompt:"\u8BF4\u660E\u5B83\u8981\u505A\u4EC0\u4E48\u3002",schedule:"\u8FD9\u4E2A\u8C03\u5EA6\u4E0D\u4F1A\u89E6\u53D1\u3002"},empty:"\u8FD8\u6CA1\u6709\u4F8B\u884C\u4EFB\u52A1\u3002",emptyHint:"\u6309 n \u65B0\u5EFA\u4E00\u6761\u3002",precheck:"\u9884\u68C0\uFF1A{command}",recentRuns:"\u6700\u8FD1\u6267\u884C",noRuns:"\u5C1A\u672A\u6267\u884C\u3002",noSelection:"\u4F8B\u884C\u4EFB\u52A1\u4F1A\u6309\u8C03\u5EA6\u5728\u67D0\u4E2A\u9879\u76EE\u91CC\u8DD1\u5B83\u7684\u63D0\u793A\u8BCD\u3002",running:"\u6B63\u5728\u8FD0\u884C {name}\u2026",ranWith:"{name}\uFF1A{status}",runNow:"[ \u7ACB\u5373\u8FD0\u884C ]",runNowHint:"\u4E0D\u7B49\u8C03\u5EA6\uFF0C\u76F4\u63A5\u8BD5\u4E00\u6B21",deleteTitle:"\u5220\u9664\u8FD9\u6761\u4F8B\u884C\u4EFB\u52A1\uFF1F",deleteBody:"\u5C06\u5220\u9664 {name} \u53CA\u5176\u6267\u884C\u8BB0\u5F55\u3002\u5B83\u5DF2\u7ECF\u521B\u5EFA\u7684\u4EFB\u52A1\u4E0D\u53D7\u5F71\u54CD\u3002",deleteButton:"\u5220\u9664"}});var Pc,Rc;var Tc=a(()=>{Pc={cancel:"Cancel",next:"next",create:"create",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"},prompt:{fieldLabel:"input",submitLabel:"submit"}},Rc={cancel:"\u53D6\u6D88",next:"\u4E0B\u4E00\u6B65",create:"\u521B\u5EFA",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"},prompt:{fieldLabel:"\u8F93\u5165",submitLabel:"\u63D0\u4EA4"}}});var Sc,Ic;var Ec=a(()=>{Sc={tabs:{all:"All",changes:"Changes"},actions:{zen:"Zen",createPR:"Create PR"},legend:{changes:"M modified \xB7 A added \xB7 D deleted \xB7 ? untracked"},scope:{working:"scope: working tree",branch:"scope: vs {base}",toggleHint:"b to toggle"},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"},toast:{prOnTargetBranch:"Already on the target branch ({branch}) \u2014 create the PR from a task branch"}},Ic={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"},scope:{working:"\u8303\u56F4\uFF1A\u5DE5\u4F5C\u533A\u6539\u52A8",branch:"\u8303\u56F4\uFF1A\u5BF9\u6BD4 {base}",toggleHint:"\u6309 b \u5207\u6362"},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"},toast:{prOnTargetBranch:"\u5F53\u524D\u5C31\u5728\u76EE\u6807\u5206\u652F\uFF08{branch}\uFF09\u2014 \u8BF7\u5728\u4EFB\u52A1\u5206\u652F\u4E0A\u521B\u5EFA PR"}}});var wc,xc;var fc=a(()=>{wc={title:"Rove \u2014 keybindings",esc:"esc",commandLayer:"{prefix} \u2014 more Rove commands",escCancel:"esc cancel",focused:"Focused: {surface}",allBindings:"All keybinding contexts",grammar:"Use keys here \xB7 one-press Rove shortcuts \xB7 {prefix} for more commands",disabled:"prefix disabled",here:"HERE \u2014 only in {surface}",direct:"ONE PRESS \u2014 Rove shortcuts",afterPrefix:"AFTER PREFIX \u2014 more Rove commands",otherPane:"OTHER PANE \u2014 {surface}"},xc={title:"Rove \u2014 \u5FEB\u6377\u952E",esc:"esc",commandLayer:"{prefix} \u2014 \u66F4\u591A Rove \u547D\u4EE4",escCancel:"esc \u53D6\u6D88",focused:"\u5F53\u524D\u7126\u70B9\uFF1A{surface}",allBindings:"\u6240\u6709\u5FEB\u6377\u952E\u4E0A\u4E0B\u6587",grammar:"\u5F53\u524D\u533A\u57DF\u76F4\u63A5\u6309 \xB7 Rove \u5355\u6B21\u5FEB\u6377\u952E \xB7 {prefix} \u6253\u5F00\u66F4\u591A\u547D\u4EE4",disabled:"Prefix \u5DF2\u7981\u7528",here:"\u5F53\u524D\u533A\u57DF \u2014 \u4EC5\u5728{surface}",direct:"\u4E00\u6B21\u6309\u4E0B \u2014 Rove \u5FEB\u6377\u952E",afterPrefix:"\u6309\u4E0B Prefix \u540E \u2014 \u66F4\u591A Rove \u547D\u4EE4",otherPane:"\u5176\u4ED6\u533A\u57DF \u2014 {surface}"}});var gc,yc;var bc=a(()=>{gc={status:{commands:"{key} commands",help:"{key} help",sidebar:"{key} sidebar",settings:"settings"},pane:{move:"move",open:"open",fold:"fold",diff:"diff"}},yc={status:{commands:"{key} \u547D\u4EE4",help:"{key} \u5E2E\u52A9",sidebar:"{key} \u4FA7\u680F",settings:"\u8BBE\u7F6E"},pane:{move:"\u79FB\u52A8",open:"\u6253\u5F00",fold:"\u6298\u53E0",diff:"\u5DEE\u5F02"}}});var kc,vc;var mc=a(()=>{kc={empty:"No engine history for this task.",loading:"loading\u2026",earlier:"\u2026 {count} earlier messages",sessionLabel:"Session",archivedTag:"ARCHIVED",liveTag:"\u25CF LIVE",hint:"[ ] session \xB7 j/k scroll \xB7 \u23CE expand",hintExpanded:"[ ] session \xB7 j/k scroll \xB7 \u23CE collapse",role:{user:"USER",assistant:"ASSISTANT",system:"SYSTEM"},thinking:"thinking"},vc={empty:"\u6B64\u4EFB\u52A1\u6CA1\u6709\u5F15\u64CE\u5386\u53F2\u8BB0\u5F55\u3002",loading:"\u52A0\u8F7D\u4E2D\u2026",earlier:"\u2026 \u4E4B\u524D\u8FD8\u6709 {count} \u6761\u6D88\u606F",sessionLabel:"\u4F1A\u8BDD",archivedTag:"\u5DF2\u5F52\u6863",liveTag:"\u25CF \u5B9E\u65F6",hint:"[ ] \u4F1A\u8BDD \xB7 j/k \u6EDA\u52A8 \xB7 \u23CE \u5C55\u5F00",hintExpanded:"[ ] \u4F1A\u8BDD \xB7 j/k \u6EDA\u52A8 \xB7 \u23CE \u6536\u8D77",role:{user:"\u7528\u6237",assistant:"\u52A9\u624B",system:"\u7CFB\u7EDF"},thinking:"\u601D\u8003"}});var hc,uc;var cc=a(()=>{hc={title:"Kanban",hint:"tab project \xB7 \u2190\u2193\u2191\u2192 card \xB7 enter detail \xB7 n new \xB7 d delete \xB7 r refresh \xB7 esc close",loading:"Loading issues\u2026",noRepos:"No projects yet \u2014 create a task first.",empty:"No issues \u2014 agents file them via `rove api issue-create`.",column:{backlog:"Backlog",inProgress:"In progress",done:"Done"},more:"+{count} more",hold:"hold",turnComplete:"turn done",detail:{status:{open:"open",doing:"doing",hold:"hold",done:"done"},created:"created {date}",linked:"linked to a session",titleLabel:"TITLE",description:"DESCRIPTION",noDescription:"No description.",attachHint:"paste a path / ctrl+v screenshot \u2192 inserts an image placeholder",engine:"ENGINE",workspace:"WORKSPACE",placement:{worktree:"New worktree task \u2014 its own workspace",projectWorktree:"New worktree \u2014 as a chattab in the project workspace",project:"Project checkout \u2014 a new chattab, no worktree"},jumpLabel:"AFTER START",jump:{stay:"Stay on the board",follow:"Jump to the session"},startLegend:"enter/ctrl+enter start \xB7 tab fields \xB7 \u2190\u2192 engine \xB7 \u2191\u2193 workspace \xB7 esc save & close",sessionLabel:"SESSION",openAction:"Open the linked session \u21B5",openLegend:"enter/ctrl+enter open the linked session \xB7 tab fields \xB7 esc save & close",eventsLabel:"EVENTS",eventsLoading:"Loading events\u2026",eventsNone:"No engine events recorded yet.",doneNote:"Done stories have nothing left to start \xB7 esc save & close",startedBackground:"Started in background: {title}",newStory:"NEW STORY",createLegend:"ctrl+s save \xB7 enter/ctrl+enter save & start \xB7 tab fields \xB7 esc cancel"},confirmDelete:{title:"Delete story #{id}?",body:"\u201C{title}\u201D will be removed from the tracker. A linked task, branch, or worktree is left untouched."}},uc={title:"\u770B\u677F",hint:"tab \u5207\u9879\u76EE \xB7 \u2190\u2193\u2191\u2192 \u9009\u5361\u7247 \xB7 enter \u8BE6\u60C5 \xB7 n \u65B0\u5EFA \xB7 d \u5220\u9664 \xB7 r \u5237\u65B0 \xB7 esc \u5173\u95ED",loading:"\u6B63\u5728\u52A0\u8F7D issues\u2026",noRepos:"\u8FD8\u6CA1\u6709\u9879\u76EE\u2014\u2014\u5148\u521B\u5EFA\u4E00\u4E2A\u4EFB\u52A1\u3002",empty:"\u6682\u65E0 issue\u2014\u2014agent \u53EF\u901A\u8FC7 `rove api issue-create` \u521B\u5EFA\u3002",column:{backlog:"\u5F85\u529E",inProgress:"\u8FDB\u884C\u4E2D",done:"\u5DF2\u5B8C\u6210"},more:"\u8FD8\u6709 {count} \u6761",hold:"\u6401\u7F6E",turnComplete:"\u56DE\u5408\u5B8C\u6210",detail:{status:{open:"\u5F85\u529E",doing:"\u8FDB\u884C\u4E2D",hold:"\u6401\u7F6E",done:"\u5DF2\u5B8C\u6210"},created:"\u521B\u5EFA\u4E8E {date}",linked:"\u5DF2\u5173\u8054\u4F1A\u8BDD",titleLabel:"\u6807\u9898",description:"\u63CF\u8FF0",noDescription:"\u6682\u65E0\u63CF\u8FF0\u3002",attachHint:"\u7C98\u8D34\u8DEF\u5F84 / ctrl+v \u8D34\u622A\u56FE \u2192 \u63D2\u5165\u56FE\u7247\u5360\u4F4D\u884C",engine:"\u5F15\u64CE",workspace:"\u5DE5\u4F5C\u533A",placement:{worktree:"\u65B0\u5EFA worktree \u4EFB\u52A1\u2014\u2014\u72EC\u7ACB\u5DE5\u4F5C\u533A",projectWorktree:"\u65B0\u5EFA worktree\u2014\u2014\u4F5C\u4E3A\u9879\u76EE\u5DE5\u4F5C\u533A\u91CC\u7684 chattab",project:"\u9879\u76EE\u4E3B\u76EE\u5F55\u2014\u2014\u65B0\u5F00 chattab,\u4E0D\u5EFA worktree"},jumpLabel:"\u542F\u52A8\u540E",jump:{stay:"\u7559\u5728\u770B\u677F",follow:"\u8DF3\u8F6C\u5230\u4F1A\u8BDD"},startLegend:"enter/ctrl+enter \u542F\u52A8 \xB7 tab \u5207\u5B57\u6BB5 \xB7 \u2190\u2192 \u5F15\u64CE \xB7 \u2191\u2193 \u5DE5\u4F5C\u533A \xB7 esc \u4FDD\u5B58\u5173\u95ED",sessionLabel:"\u4F1A\u8BDD",openAction:"\u6253\u5F00\u5173\u8054\u4F1A\u8BDD \u21B5",openLegend:"enter/ctrl+enter \u6253\u5F00\u5DF2\u5173\u8054\u4F1A\u8BDD \xB7 tab \u5207\u5B57\u6BB5 \xB7 esc \u4FDD\u5B58\u5173\u95ED",eventsLabel:"\u4E8B\u4EF6",eventsLoading:"\u6B63\u5728\u52A0\u8F7D\u4E8B\u4EF6\u2026",eventsNone:"\u6682\u65E0\u5F15\u64CE\u4E8B\u4EF6\u8BB0\u5F55\u3002",doneNote:"\u5DF2\u5B8C\u6210\u7684 story \u65E0\u9700\u542F\u52A8 \xB7 esc \u4FDD\u5B58\u5173\u95ED",startedBackground:"\u5DF2\u5728\u540E\u53F0\u542F\u52A8:{title}",newStory:"\u65B0\u5EFA STORY",createLegend:"ctrl+s \u4EC5\u4FDD\u5B58 \xB7 enter/ctrl+enter \u4FDD\u5B58\u5E76\u542F\u52A8 \xB7 tab \u5207\u5B57\u6BB5 \xB7 esc \u53D6\u6D88"},confirmDelete:{title:"\u5220\u9664 story #{id}?",body:"\u300C{title}\u300D\u5C06\u4ECE tracker \u4E2D\u79FB\u9664\u3002\u5DF2\u5173\u8054\u7684\u4EFB\u52A1\u3001\u5206\u652F\u3001worktree \u4E0D\u53D7\u5F71\u54CD\u3002"}}});var dc,lc;var pc=a(()=>{dc={category:{Global:"Global",Sidebar:"Sidebar",Workspace:"Workspace",Navigation:"Navigation","Tasks pane":"Tasks pane",Files:"Files",Terminal:"Terminal",Dialog:"Dialog",Views:"Views",Tasks:"Tasks",Sessions:"Sessions",Attention:"Attention",Tools:"Tools"},desc:{"help.open":"Show keybindings help","task.new":"New task","task.openEditor":"Open active Task directory in editor","task.moveMode":"Reorder projects (then j/k)","settings.open":"Open settings","settings.open.sidebar":"Open settings","inbox.show":"Open attention Inbox","worktrees.open.sidebar":"Open worktrees","kanban.open":"Open kanban (issues board)","automations.open":"Open automations (scheduled tasks)","workItems.open":"Open GitHub issues (external tracker)","app.quit":"Quit (with confirm)","focus.sidebar":"Back to sidebar (tasks)","focus.previous":"Focus previous pane (files \u2192 workspace \u2192 sidebar)","focus.next":"Focus next pane (sidebar \u2192 workspace \u2192 files)","workspace.zenToggle":"Toggle zen mode","attention.next":"Jump to the next attention item","chat.interrupt":"Interrupt current turn (esc while streaming)","sidebar.nav":"Move cursor up/down","sidebar.select":"Open the selected task","sidebar.tree.open":"Open the row under the cursor","sidebar.goto":"Top / bottom of list (gg or shift-G)","sidebar.rename":"Rename task","sidebar.archive":"Toggle archive","sidebar.localMerge":"Reorder project (Shift+M, then j/k)","sidebar.pin":"Pin / unpin task at top (Shift+P)","sidebar.previewToggle":"Toggle live preview (watch task)","sidebar.view":"Switch view (Active \u2194 Archived)","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 directory 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.jump":"Jump to the task showing that digit","tasks.toggleKeys":"Collapse / expand the keys legend","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.tab.chooseEngine":"New conversation \u2014 engine/shell picker with destination + context toggles","chat.tab.fork":"Fork this chat into a new tab (same Task directory, keeps the conversation)","chat.fork.new":"Quick-fork: create child task seeded with current repo/branch/model","chat.session.resume":"Resume a prior session in this Task directory","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","workspace.split.right":"Split right","workspace.split.down":"Split down","workspace.split.focus-next":"Focus next split","workspace.split.close":"Close active split (tab when unsplit)","workspace.split.rename":"Rename active split (tab when unsplit)","files.nav":"Move cursor up/down","files.hierarchy":"Collapse / expand tree level","files.open":"Open file in configured editor (diff when supported)","files.tab":"Switch tab (cycle All / Changes)","files.refresh":"Refresh","files.scope":"Toggle Changes scope (working \u2194 branch vs base)","files.diff":"Open a read-only diff in a workspace tab","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","diff.review.cursor":"Move the line cursor over the diff","diff.review.range":"Toggle range anchor at the cursor","diff.review.note":"Add a review note at the cursor","diff.review.send":"Send all unsent review notes to the engine","inbox.nav":"Move through attention items","inbox.open":"Open the selected attention item","inbox.delete":"Remove the selected attention item","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)"}},lc={category:{Global:"\u5168\u5C40",Sidebar:"\u4FA7\u8FB9\u680F",Workspace:"\u5DE5\u4F5C\u533A",Navigation:"\u5BFC\u822A","Tasks pane":"\u4EFB\u52A1\u9762\u677F",Files:"\u6587\u4EF6",Terminal:"\u7EC8\u7AEF",Dialog:"\u5BF9\u8BDD\u6846",Views:"\u89C6\u56FE",Tasks:"\u4EFB\u52A1",Sessions:"\u4F1A\u8BDD",Attention:"\u63D0\u9192",Tools:"\u5DE5\u5177"},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 Task \u7684\u76EE\u5F55","task.moveMode":"\u8C03\u6574\u9879\u76EE\u987A\u5E8F\uFF08\u7136\u540E j/k\uFF09","settings.open":"\u6253\u5F00\u8BBE\u7F6E","settings.open.sidebar":"\u6253\u5F00\u8BBE\u7F6E","inbox.show":"\u6253\u5F00\u63D0\u9192\u6536\u4EF6\u7BB1","worktrees.open.sidebar":"\u6253\u5F00 worktrees","kanban.open":"\u6253\u5F00\u770B\u677F\uFF08issues\uFF09","automations.open":"\u6253\u5F00\u81EA\u52A8\u5316\uFF08\u5B9A\u65F6\u4EFB\u52A1\uFF09","workItems.open":"\u6253\u5F00 GitHub issues\uFF08\u5916\u90E8\u8DDF\u8E2A\u5668\uFF09","app.quit":"\u9000\u51FA\uFF08\u9700\u786E\u8BA4\uFF09","focus.sidebar":"\u8FD4\u56DE\u4FA7\u8FB9\u680F\uFF08\u4EFB\u52A1\u5217\u8868\uFF09","focus.previous":"\u805A\u7126\u4E0A\u4E00\u4E2A\u9762\u677F\uFF08\u6587\u4EF6 \u2192 \u5DE5\u4F5C\u533A \u2192 \u4FA7\u8FB9\u680F\uFF09","focus.next":"\u805A\u7126\u4E0B\u4E00\u4E2A\u9762\u677F\uFF08\u4FA7\u8FB9\u680F \u2192 \u5DE5\u4F5C\u533A \u2192 \u6587\u4EF6\uFF09","workspace.zenToggle":"\u5207\u6362\u7985\u6A21\u5F0F","attention.next":"\u8DF3\u5230\u4E0B\u4E00\u4E2A\u9700\u8981\u6CE8\u610F\u7684\u9879\u76EE","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.tree.open":"\u6253\u5F00\u5149\u6807\u6240\u5728\u884C","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":"\u91CD\u65B0\u6392\u5E8F\u9879\u76EE\uFF08Shift+M\uFF0C\u7136\u540E\u6309 j/k\uFF09","sidebar.pin":"\u7F6E\u9876 / \u53D6\u6D88\u7F6E\u9876\u4EFB\u52A1\uFF08Shift+P\uFF09","sidebar.previewToggle":"\u5207\u6362\u5B9E\u65F6\u9884\u89C8\uFF08\u89C2\u770B\u4EFB\u52A1\uFF09","sidebar.view":"\u5207\u6362\u89C6\u56FE\uFF08\u8FDB\u884C\u4E2D \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 Task \u7684\u76EE\u5F55","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.jump":"\u8DF3\u5230\u663E\u793A\u5BF9\u5E94\u6570\u5B57\u7684\u4EFB\u52A1","tasks.toggleKeys":"\u6298\u53E0 / \u5C55\u5F00\u5FEB\u6377\u952E\u8BF4\u660E","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.tab.chooseEngine":"\u65B0\u5EFA\u5BF9\u8BDD \u2014\u2014 \u9009\u62E9\u5F15\u64CE\u6216 shell\uFF0C\u53EF\u5207\u6362\u843D\u70B9\u4E0E\u4E0A\u4E0B\u6587","chat.tab.fork":"\u6D3E\u751F\u5F53\u524D\u5BF9\u8BDD\u5230\u65B0\u6807\u7B7E\u9875\uFF08\u540C\u4E00 Task \u76EE\u5F55\uFF0C\u5E26\u4E0A\u5DF2\u6709\u5BF9\u8BDD\uFF09","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 Task \u76EE\u5F55\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","workspace.split.right":"\u5411\u53F3\u5206\u5C4F","workspace.split.down":"\u5411\u4E0B\u5206\u5C4F","workspace.split.focus-next":"\u805A\u7126\u4E0B\u4E00\u4E2A\u5206\u5C4F","workspace.split.close":"\u5173\u95ED\u5F53\u524D\u5206\u5C4F\uFF08\u672A\u5206\u5C4F\u65F6\u5173\u95ED\u6807\u7B7E\u9875\uFF09","workspace.split.rename":"\u91CD\u547D\u540D\u5F53\u524D\u5206\u5C4F\uFF08\u672A\u5206\u5C4F\u65F6\u91CD\u547D\u540D\u6807\u7B7E\u9875\uFF09","files.nav":"\u4E0A\u4E0B\u79FB\u52A8\u5149\u6807","files.hierarchy":"\u6298\u53E0 / \u5C55\u5F00\u6811\u5C42\u7EA7","files.open":"\u5728\u5DF2\u914D\u7F6E\u7684\u7F16\u8F91\u5668\u4E2D\u6253\u5F00\u6587\u4EF6\uFF08\u652F\u6301\u65F6\u663E\u793A diff\uFF09","files.tab":"\u5207\u6362\u6807\u7B7E\u9875\uFF08\u5FAA\u73AF \u5168\u90E8 / \u53D8\u66F4\uFF09","files.refresh":"\u5237\u65B0","files.scope":"\u5207\u6362\u53D8\u66F4\u8303\u56F4\uFF08\u5DE5\u4F5C\u533A \u2194 \u5206\u652F\u5BF9\u6BD4 base\uFF09","files.diff":"\u5728\u5DE5\u4F5C\u533A\u6807\u7B7E\u9875\u4E2D\u6253\u5F00\u53EA\u8BFB diff","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","diff.review.cursor":"\u5728 diff \u4E2D\u79FB\u52A8\u884C\u5149\u6807","diff.review.range":"\u5728\u5149\u6807\u5904\u5207\u6362\u8303\u56F4\u951A\u70B9","diff.review.note":"\u5728\u5149\u6807\u5904\u6DFB\u52A0\u5BA1\u9605\u5907\u6CE8","diff.review.send":"\u5C06\u6240\u6709\u672A\u53D1\u9001\u7684\u5BA1\u9605\u5907\u6CE8\u53D1\u7ED9\u5F15\u64CE","inbox.nav":"\u5728\u63D0\u9192\u9879\u76EE\u4E4B\u95F4\u79FB\u52A8","inbox.open":"\u6253\u5F00\u9009\u4E2D\u7684\u63D0\u9192\u9879\u76EE","inbox.delete":"\u79FB\u9664\u9009\u4E2D\u7684\u63D0\u9192\u9879\u76EE","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 nc,ic;var oc=a(()=>{nc={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"},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"}},ic={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"},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 ac,rc;var sc=a(()=>{ac={title:"Welcome to Rove",subtitle:"Two quick questions before your first launch.",completionsQuestion:"Install shell completions for {shell}?",completionsExplain:"Tab-completes rove subcommands. One line is added to your shell config.",skillQuestion:"Install the Rove agent skill?",skillExplain:"Teaches coding agents (Claude Code, Codex) to drive Rove from the shell via `rove api`.",optionYes:"Yes (recommended)",optionNo:"No",legend:"\u2191\u2193 select \xB7 enter confirm \xB7 q skip setup",keysTitle:"Keyboard basics",keysBare:"Bare keys act in the focused pane \u2014 {nav} moves, {open} opens.",keysOnePress:"A few one-press chords are Rove's own \u2014 {newTab} new tab, {focusNext} next pane.",keysPrefix:"{prefix} opens the command map \u2014 hold it a beat and a guide appears.",keysHelp:"{help} shows the full live reference anytime.",keysLegend:"enter finish",appliedCompletions:"\u2713 completions hooked into {path} (takes effect in new shells)",skippedCompletions:"\xB7 completions skipped \u2014 run `{command}` anytime",installingSkill:"installing the Rove agent skill ({command})\u2026",skillFailed:"! skill install failed \u2014 retry with `{command}`",skippedSkill:"\xB7 agent skill skipped \u2014 run `{command}` anytime",ready:"You're ready to go!",readyHint:"Run `rove` to launch the TUI."},rc={title:"\u6B22\u8FCE\u4F7F\u7528 Rove",subtitle:"\u9996\u6B21\u542F\u52A8\u524D\uFF0C\u5148\u56DE\u7B54\u4E24\u4E2A\u5C0F\u95EE\u9898\u3002",completionsQuestion:"\u4E3A {shell} \u5B89\u88C5 shell \u8865\u5168\u5417\uFF1F",completionsExplain:"\u8BA9 rove \u5B50\u547D\u4EE4\u652F\u6301 Tab \u8865\u5168\uFF0C\u4F1A\u5728\u4F60\u7684 shell \u914D\u7F6E\u91CC\u52A0\u4E00\u884C\u3002",skillQuestion:"\u5B89\u88C5 Rove agent skill \u5417\uFF1F",skillExplain:"\u6559\u4F1A\u7F16\u7801 agent\uFF08Claude Code\u3001Codex\uFF09\u901A\u8FC7 `rove api` \u5728\u547D\u4EE4\u884C\u9A71\u52A8 Rove\u3002",optionYes:"\u5B89\u88C5\uFF08\u63A8\u8350\uFF09",optionNo:"\u8DF3\u8FC7",legend:"\u2191\u2193 \u9009\u62E9 \xB7 enter \u786E\u8BA4 \xB7 q \u8DF3\u8FC7\u8BBE\u7F6E",keysTitle:"\u952E\u76D8\u57FA\u7840",keysBare:"\u88F8\u952E\u4F5C\u7528\u4E8E\u5F53\u524D\u805A\u7126\u9762\u677F \u2014 {nav} \u79FB\u52A8\uFF0C{open} \u6253\u5F00\u3002",keysOnePress:"\u5C11\u91CF\u5355\u6B21\u5FEB\u6377\u952E\u5C5E\u4E8E Rove \u81EA\u5DF1 \u2014 {newTab} \u65B0\u6807\u7B7E\u9875\uFF0C{focusNext} \u5207\u6362\u9762\u677F\u3002",keysPrefix:"{prefix} \u6253\u5F00\u547D\u4EE4\u5C42 \u2014 \u6309\u4F4F\u7A0D\u7B49\u4F1A\u51FA\u73B0\u547D\u4EE4\u6307\u5357\u3002",keysHelp:"\u968F\u65F6\u6309 {help} \u67E5\u770B\u5B8C\u6574\u7684\u5B9E\u65F6\u952E\u4F4D\u8868\u3002",keysLegend:"enter \u5B8C\u6210",appliedCompletions:"\u2713 \u8865\u5168\u5DF2\u5199\u5165 {path}\uFF08\u65B0\u5F00\u7684 shell \u751F\u6548\uFF09",skippedCompletions:"\xB7 \u5DF2\u8DF3\u8FC7\u8865\u5168 \u2014 \u4E4B\u540E\u53EF\u968F\u65F6\u8FD0\u884C `{command}`",installingSkill:"\u6B63\u5728\u5B89\u88C5 Rove agent skill\uFF08{command}\uFF09\u2026",skillFailed:"! skill \u5B89\u88C5\u5931\u8D25 \u2014 \u53EF\u7528 `{command}` \u91CD\u8BD5",skippedSkill:"\xB7 \u5DF2\u8DF3\u8FC7 agent skill \u2014 \u4E4B\u540E\u53EF\u968F\u65F6\u8FD0\u884C `{command}`",ready:"\u4E00\u5207\u5C31\u7EEA\uFF01",readyHint:"\u8FD0\u884C `rove` \u542F\u52A8 TUI\u3002"}});var tc,ec;var $d=a(()=>{tc={preview:{diffVsHead:"diff vs HEAD",diffVsBase:"diff vs {base}",file:"file",image:"image",binary:"binary file",closeHint:"\xB7 q to close",loading:"loading\u2026",noTextPreview:"no text preview",openHint:"o open in system viewer",review:{noteDialogTitle:"Review note \u2014 {location}",noteFieldLabel:"note",noteSubmitLabel:"add note",notePlaceholder:"what should the agent change here?",count:"{total} notes \xB7 {unsent} unsent",keysHint:"j/k line \xB7 v range \xB7 c note \xB7 s send"}}},ec={preview:{diffVsHead:"\u4E0E HEAD \u5BF9\u6BD4",diffVsBase:"\u4E0E {base} \u5BF9\u6BD4",file:"\u6587\u4EF6",image:"\u56FE\u7247",binary:"\u4E8C\u8FDB\u5236\u6587\u4EF6",closeHint:"\xB7 q \u5173\u95ED",loading:"\u52A0\u8F7D\u4E2D\u2026",noTextPreview:"\u65E0\u6587\u672C\u9884\u89C8",openHint:"o \u7528\u7CFB\u7EDF\u67E5\u770B\u5668\u6253\u5F00",review:{noteDialogTitle:"\u8BC4\u5BA1\u5907\u6CE8 \u2014 {location}",noteFieldLabel:"\u5907\u6CE8",noteSubmitLabel:"\u6DFB\u52A0\u5907\u6CE8",notePlaceholder:"\u5E0C\u671B agent \u5728\u8FD9\u91CC\u6539\u4EC0\u4E48\uFF1F",count:"{total} \u6761\u5907\u6CE8 \xB7 {unsent} \u6761\u672A\u53D1\u9001",keysHint:"j/k \u884C \xB7 v \u8303\u56F4 \xB7 c \u5907\u6CE8 \xB7 s \u53D1\u9001"}}}});var Zd,Jd;var Xd=a(()=>{Zd={title:"Quick task \xB7 {repoLabel}",esc:"esc",promptLabel:"prompt",promptPlaceholder:"what should this task do?",engineLabel:"engine",branchLabel:"branch"},Jd={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"}});var Qd,zd;var Yd=a(()=>{Qd={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",plugins:"Plugins",keys:"Keybindings",feedback:"Feedback",dev:"Dev"},general:{usage:"USAGE",theme:"Theme",themeHint:"l to enter list \xB7 j/k to highlight \xB7 enter to apply",language:"Language",languageHint:"Display language for Rove'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)",appearance:"Appearance",appearanceHint:"How split panes draw: a full box frame around every pane, or a single divider line between neighbors.",splitBox:"Box frames",splitLine:"Divider line",notifications:"Notifications",notificationsHint:"Fired when a background chat tab finishes or pauses on an approval. Toast = bottom-right popup; Sound = terminal bell + chime + OSC 9 desktop notification (rides SSH to your local terminal). Cross-task = also notify when a task you've switched AWAY from pauses/errors/finishes. Tab-chip unread dot is always on.",toast:"Toast",sound:"Sound",crossTask:"Notify for background tasks",keyHints:"Keyboard hints",keyHintsHint:"The status-bar command/help reminder and the one-line first-use key hints in the sidebar and files panes. Re-enabling relights pane hints that were dismissed by use.",keyHintsShow:"Show keyboard hints",zen:"Zen mode",zenHint:"The `zen` chip (above the file list) and `prefix`+z hide Files while keeping the Tasks rail and workspace visible. The legacy Keep Tasks value is retained in settings but currently has no layout effect.",zenDefaultOn:"Start in zen mode",zenKeepTasks:"Keep Tasks pane in zen mode (legacy; no effect)",editor:"Editor",editorHint:"What enter opens a file with in the file tree. Changed files use the editor's diff mode when supported; if the editor isn't installed Rove falls back to its 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.",editorRow:"editor: < {kind} > (enter to change)",editorCustom:"custom: {cmd}",editorCustomUnset:"(unset \u2014 enter to edit)",worktree:"Worktree location",worktreeHint:"Where new task worktrees are created. `next to project` keeps them beside each repo; custom takes any path (`~`, relative, or a leading `$project_dir`). New tasks only.",worktreeBase:"location: < {kind} > (enter switches)",worktreeKindDefault:"default ~/.rove/worktrees",worktreeKindNext:"next to project",worktreeKindCustom:"custom",worktreeCustom:"custom: {path}",worktreeCustomUnset:"(unset \u2014 enter to edit)",worktreeBaseTitle:"Custom worktree location (blank = default; $project_dir = project root)",worktreeBaseField:"path",terminal:"Terminal",terminalHint:"Scrollback: how many rows of history each embedded terminal keeps (100\u2013100000). Applies to terminals opened after the change. Larger values cost proportionally more CPU per redraw \u2014 1000 rows is roughly 2\xD7 the cost of 50.",scrollbackRow:"scrollback: {rows} rows (enter to edit)",scrollbackTitle:"Terminal scrollback rows (100\u2013100000)",scrollbackField:"rows",scrollbackInvalidTitle:"Not a number",scrollbackInvalidBody:"Scrollback must be a number of rows (e.g. 1000). Keeping the previous setting.",tabStripRow:"tab strip: {mode} (enter to cycle)",tabStripMode:{never:"off \u2014 the sidebar tree lists tabs",multipleOnly:"only with 2+ tabs",always:"always"}},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 = global default engine (per-project picks, e.g. Ctrl+Shift+T, override it). 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",kimiDetected:"\u25CF Kimi login detected"},plugins:{title:"Plugins",hint:"Plugins registered in ~/.kobe/plugins.json. enter (or click) toggles one on or off \u2014 the daemon watches the file, so the change applies live. Rows indented under a plugin are the settings it declares; enter edits one, and the value reaches the plugin on its next run. Install and remove them from the shell: `rove plugin install <owner/repo>`, `rove plugin link <dir>`.",empty:"No plugins registered. Install one with `rove plugin install <owner/repo>` \u2014 browse the `rove-plugin` topic on GitHub.",sourceLink:"linked {path}",sourceGithub:"{spec}",updateAvailable:"update available \u2014 rove plugin update",declares:"{actions} actions \xB7 {events} events \xB7 {panes} panes",manifestUnreadable:"manifest unreadable",lastRun:"\xB7 last run {label} {status} {ago} ago",neverRun:"\xB7 never run",runOk:"ok",runFailed:"failed to start",runExit:"exit {code}",settingUnset:"(unset \u2014 enter to edit)",settingInvalidTitle:"Not a number",settingInvalidBody:"{label} only accepts a number. Keeping the previous value."},keybindings:{title:"Keybindings",hint:"Edit the YAML below to rebind direct and PureTUI prefix chords; changes reload live. Press F1 anywhere for the live keymap with every binding id.",configFile:"Config file",notCreated:" (not created yet)",prefixTitle:"Command layer ({prefix})",prefixHint:"Bare keys act in the focused pane; a small one-press set covers frequent Rove actions; {prefix} opens the command map ({timeout}ms second-stroke window \u2014 hold on and a guide appears). Prefix bindings keep their pane scope and modal rules.",prefixDisabled:"disabled",fixed:"Fixed (not rebindable): {ids}.",example:"Example",overridesApplied:"Overrides applied",none:"none",warnings:"Warnings"},feedback:{title:"Feedback",hint:"Sends a GitHub Discussion to the Rove 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/rove/state.json and ~/.rove/tasks.json, then quits Rove \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 Rove daemon and quits this Rove window so the next launch spawns a fresh daemon \u2014 picks up daemon / orchestrator / engine edits without a process kill. Other attached Rove windows will lose their connection too.",restartButton:"[enter] Restart",doctorHint:"Daemon wedged or unresponsive? From a shell, run `rove daemon restart`, then relaunch Rove. Hosted engine sessions stay alive across a daemon restart.",experimental:"Experimental",remoteHint:"Remote projects (SSH): register a project whose git worktrees live on another host, driven from this local Rove. Unfinished \u2014 Hosted PTY engine launch over SSH is not implemented, and file/diff panes still degrade. Enables `rove 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 (`rove api note`), the daemon forwards each to the repo's main session, and that session relays them to the in-flight tasks that benefit (`rove api dispatch`). Web-hosted sessions receive the relays today.",dispatcherOn:"[x] Field-notes dispatcher (on)",dispatcherOff:"[ ] Field-notes dispatcher (off)",archivedHistoryHint:"Archived history preview (beta): opening an archived task shows a read-only `rove history` pane (session selector + transcript) in the engine slot instead of relaunching the engine. Its transcript survives worktree removal because the engine store is keyed by the worktree path. Shared with the web dashboard.",archivedHistoryOn:"[x] Archived history preview (on)",archivedHistoryOff:"[ ] Archived history preview (off)"}},zd={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",plugins:"\u63D2\u4EF6",keys:"\u5FEB\u6377\u952E",feedback:"\u53CD\u9988",dev:"\u5F00\u53D1"},general:{usage:"\u7528\u91CF",theme:"\u4E3B\u9898",themeHint:"l \u8FDB\u5165\u5217\u8868 \xB7 j/k \u9AD8\u4EAE \xB7 enter \u5E94\u7528",language:"\u8BED\u8A00",languageHint:"Rove \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",appearance:"\u5916\u89C2",appearanceHint:"\u5206\u5C4F\u9762\u677F\u7684\u63CF\u8FB9\u65B9\u5F0F\uFF1A\u6BCF\u4E2A\u9762\u677F\u4E00\u4E2A\u5B8C\u6574\u65B9\u6846\uFF0C\u6216\u76F8\u90BB\u9762\u677F\u4E4B\u95F4\u4E00\u6761\u5206\u9694\u7EBF\u3002",splitBox:"\u65B9\u6846\u8FB9\u6846",splitLine:"\u5355\u7EBF\u5206\u9694",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 + OSC 9 \u684C\u9762\u901A\u77E5\uFF08\u7ECF SSH \u76F4\u8FBE\u4F60\u672C\u5730\u7EC8\u7AEF\uFF09\u3002\u8DE8\u4EFB\u52A1 = \u4F60\u5DF2\u5207\u8D70\u7684\u4EFB\u52A1\u6682\u505C/\u51FA\u9519/\u5B8C\u6210\u65F6\u4E5F\u901A\u77E5\u3002\u6807\u7B7E\u4E0A\u7684\u672A\u8BFB\u5706\u70B9\u59CB\u7EC8\u5F00\u542F\u3002",toast:"Toast \u5F39\u7A97",sound:"\u58F0\u97F3",crossTask:"\u4E3A\u540E\u53F0\u4EFB\u52A1\u53D1\u9001\u901A\u77E5",keyHints:"\u952E\u76D8\u63D0\u793A",keyHintsHint:"\u72B6\u6001\u680F\u7684\u547D\u4EE4/\u5E2E\u52A9\u63D0\u9192\uFF0C\u4EE5\u53CA\u4FA7\u680F\u548C\u6587\u4EF6\u9762\u677F\u7684\u4E00\u884C\u9996\u7528\u6309\u952E\u63D0\u793A\u3002\u91CD\u65B0\u5F00\u542F\u4F1A\u91CD\u65B0\u70B9\u4EAE\u5DF2\u56E0\u4F7F\u7528\u800C\u7184\u706D\u7684\u9762\u677F\u63D0\u793A\u3002",keyHintsShow:"\u663E\u793A\u952E\u76D8\u63D0\u793A",zen:"\u7985\u6A21\u5F0F",zenHint:"`zen` \u6807\u8BB0\uFF08\u6587\u4EF6\u5217\u8868\u4E0A\u65B9\uFF09\u548C `prefix`+z \u4F1A\u9690\u85CF Files\uFF0C\u540C\u65F6\u4FDD\u7559 Tasks \u4FA7\u680F\u4E0E workspace\u3002\u65E7\u7684\u201C\u7985\u6A21\u5F0F\u4E0B\u4FDD\u7559 Tasks \u9762\u677F\u201D\u8BBE\u7F6E\u4ECD\u4F1A\u4FDD\u5B58\uFF0C\u4F46\u5F53\u524D\u4E0D\u4F1A\u6539\u53D8\u5E03\u5C40\u3002",zenDefaultOn:"\u542F\u52A8\u5373\u8FDB\u5165\u7985\u6A21\u5F0F",zenKeepTasks:"\u7985\u6A21\u5F0F\u4E0B\u4FDD\u7559 Tasks \u9762\u677F\uFF08\u65E7\u8BBE\u7F6E\uFF1B\u5F53\u524D\u65E0\u6548\uFF09",editor:"\u7F16\u8F91\u5668",editorHint:"\u6587\u4EF6\u6811\u91CC\u6309 enter \u7528\u4EC0\u4E48\u6253\u5F00\u6587\u4EF6\uFF1B\u4FEE\u6539\u8FC7\u7684\u6587\u4EF6\u4F1A\u5728\u652F\u6301\u65F6\u4F7F\u7528\u7F16\u8F91\u5668 diff \u6A21\u5F0F\uFF0C\u7F16\u8F91\u5668\u672A\u5B89\u88C5\u65F6\u56DE\u9000\u5230 Rove \u7684\u53EA\u8BFB\u9884\u89C8\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\u3002",editorRow:"\u7F16\u8F91\u5668: < {kind} > (enter \u5207\u6362)",editorCustom:"\u81EA\u5B9A\u4E49: {cmd}",editorCustomUnset:"(\u672A\u8BBE\u7F6E \u2014 enter \u7F16\u8F91)",worktree:"\u5DE5\u4F5C\u6811\u4F4D\u7F6E",worktreeHint:"\u65B0\u4EFB\u52A1\u5DE5\u4F5C\u6811\u7684\u521B\u5EFA\u4F4D\u7F6E\u3002\u300C\u9879\u76EE\u65C1\u8FB9\u300D= \u7D27\u6328\u5404\u81EA\u4ED3\u5E93\u5B58\u653E\uFF1B\u81EA\u5B9A\u4E49\u53EF\u586B\u4EFB\u610F\u8DEF\u5F84\uFF08`~`\u3001\u76F8\u5BF9\u8DEF\u5F84\u6216\u4EE5 `$project_dir` \u5F00\u5934\uFF09\u3002\u4EC5\u5BF9\u65B0\u4EFB\u52A1\u751F\u6548\u3002",worktreeBase:"\u4F4D\u7F6E: < {kind} > (enter \u5207\u6362)",worktreeKindDefault:"\u9ED8\u8BA4 ~/.rove/worktrees",worktreeKindNext:"\u9879\u76EE\u65C1\u8FB9",worktreeKindCustom:"\u81EA\u5B9A\u4E49",worktreeCustom:"\u81EA\u5B9A\u4E49: {path}",worktreeCustomUnset:"(\u672A\u8BBE\u7F6E \u2014 enter \u7F16\u8F91)",worktreeBaseTitle:"\u81EA\u5B9A\u4E49\u5DE5\u4F5C\u6811\u4F4D\u7F6E\uFF08\u7559\u7A7A = \u9ED8\u8BA4\uFF1B$project_dir = \u9879\u76EE\u6839\u76EE\u5F55\uFF09",worktreeBaseField:"\u8DEF\u5F84",terminal:"\u7EC8\u7AEF",terminalHint:"\u56DE\u6EDA\u7F13\u51B2\uFF1A\u6BCF\u4E2A\u5185\u5D4C\u7EC8\u7AEF\u4FDD\u7559\u591A\u5C11\u884C\u5386\u53F2\uFF08100\u2013100000\uFF09\u3002\u5BF9\u4FEE\u6539\u540E\u65B0\u6253\u5F00\u7684\u7EC8\u7AEF\u751F\u6548\u3002\u8C03\u5927\u4F1A\u6309\u6BD4\u4F8B\u589E\u52A0\u6BCF\u6B21\u91CD\u7ED8\u7684 CPU\u2014\u20141000 \u884C\u7EA6\u4E3A 50 \u884C\u7684 2 \u500D\u3002",scrollbackRow:"\u56DE\u6EDA\u884C\u6570: {rows} \u884C (enter \u7F16\u8F91)",scrollbackTitle:"\u7EC8\u7AEF\u56DE\u6EDA\u884C\u6570\uFF08100\u2013100000\uFF09",scrollbackField:"\u884C\u6570",scrollbackInvalidTitle:"\u4E0D\u662F\u6570\u5B57",scrollbackInvalidBody:"\u56DE\u6EDA\u884C\u6570\u5FC5\u987B\u662F\u6570\u5B57\uFF08\u5982 1000\uFF09\u3002\u4FDD\u7559\u539F\u8BBE\u7F6E\u3002",tabStripRow:"\u6807\u7B7E\u680F: {mode} (enter \u5207\u6362)",tabStripMode:{never:"\u5173\u95ED \u2014 \u6807\u7B7E\u5728\u5DE6\u4FA7\u6811\u91CC",multipleOnly:"\u4EC5 2 \u4E2A\u4EE5\u4E0A\u6807\u7B7E\u65F6\u663E\u793A",always:"\u59CB\u7EC8\u663E\u793A"}},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 = \u5168\u5C40\u9ED8\u8BA4\u5F15\u64CE\uFF08\u5404\u9879\u76EE\u81EA\u5DF1\u7684\u9009\u62E9\u4F1A\u8986\u76D6\u5B83\uFF0C\u5982 Ctrl+Shift+T\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",kimiDetected:"\u25CF \u68C0\u6D4B\u5230 Kimi \u767B\u5F55"},plugins:{title:"\u63D2\u4EF6",hint:"\u5728 ~/.kobe/plugins.json \u91CC\u6CE8\u518C\u7684\u63D2\u4EF6\u3002enter\uFF08\u6216\u70B9\u51FB\uFF09\u5207\u6362\u542F\u7528/\u7981\u7528\u2014\u2014daemon \u76D1\u542C\u8BE5\u6587\u4EF6\uFF0C\u6539\u52A8\u5B9E\u65F6\u751F\u6548\u3002\u63D2\u4EF6\u4E0B\u65B9\u7F29\u8FDB\u7684\u884C\u662F\u5B83\u58F0\u660E\u7684\u8BBE\u7F6E\u9879\uFF0Center \u7F16\u8F91\uFF0C\u65B0\u503C\u5728\u63D2\u4EF6\u4E0B\u6B21\u8FD0\u884C\u65F6\u751F\u6548\u3002\u5B89\u88C5\u4E0E\u79FB\u9664\u5728 shell \u91CC\u505A\uFF1A`rove plugin install <owner/repo>`\u3001`rove plugin link <dir>`\u3002",empty:"\u5C1A\u672A\u6CE8\u518C\u4EFB\u4F55\u63D2\u4EF6\u3002\u7528 `rove plugin install <owner/repo>` \u5B89\u88C5\u4E00\u4E2A\u2014\u2014\u53EF\u5728 GitHub \u7684 `rove-plugin` \u8BDD\u9898\u4E0B\u6D4F\u89C8\u3002",sourceLink:"\u672C\u5730\u94FE\u63A5 {path}",sourceGithub:"{spec}",updateAvailable:"\u6709\u65B0\u7248\u672C \u2014 rove plugin update",declares:"{actions} \u4E2A\u52A8\u4F5C \xB7 {events} \u4E2A\u4E8B\u4EF6 \xB7 {panes} \u4E2A\u9762\u677F",manifestUnreadable:"manifest \u65E0\u6CD5\u89E3\u6790",lastRun:"\xB7 \u4E0A\u6B21\u8FD0\u884C {label} {status} {ago}\u524D",neverRun:"\xB7 \u5C1A\u672A\u8FD0\u884C\u8FC7",runOk:"\u6210\u529F",runFailed:"\u542F\u52A8\u5931\u8D25",runExit:"\u9000\u51FA\u7801 {code}",settingUnset:"(\u672A\u8BBE\u7F6E \u2014 enter \u7F16\u8F91)",settingInvalidTitle:"\u4E0D\u662F\u6570\u5B57",settingInvalidBody:"{label} \u53EA\u63A5\u53D7\u6570\u5B57\uFF0C\u4FDD\u7559\u539F\u503C\u3002"},keybindings:{title:"\u5FEB\u6377\u952E",hint:"\u7F16\u8F91\u4E0B\u9762\u7684 YAML \u6765\u91CD\u7ED1\u5B9A\u76F4\u63A5\u6309\u952E\u548C PureTUI prefix \u7EC4\u5408\uFF1B\u4FEE\u6539\u4F1A\u5B9E\u65F6\u52A0\u8F7D\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)",prefixTitle:"\u547D\u4EE4\u5C42\uFF08{prefix}\uFF09",prefixHint:"\u88F8\u952E\u4F5C\u7528\u4E8E\u5F53\u524D\u805A\u7126\u9762\u677F\uFF1B\u5C11\u91CF\u5355\u6B21\u5FEB\u6377\u952E\u8986\u76D6\u9AD8\u9891 Rove \u64CD\u4F5C\uFF1B{prefix} \u6253\u5F00\u547D\u4EE4\u5C42\uFF08\u7B2C\u4E8C\u51FB\u7A97\u53E3 {timeout}ms \u2014 \u7A0D\u7B49\u4F1A\u51FA\u73B0\u547D\u4EE4\u6307\u5357\uFF09\u3002Prefix \u7ED1\u5B9A\u4FDD\u6301\u539F\u6709\u7684\u9762\u677F\u4F5C\u7528\u57DF\u548C modal \u89C4\u5219\u3002",prefixDisabled:"\u5DF2\u7981\u7528",fixed:"\u56FA\u5B9A\uFF08\u4E0D\u53EF\u91CD\u7ED1\u5B9A\uFF09\uFF1A{ids}\u3002",example:"\u793A\u4F8B",overridesApplied:"\u5DF2\u5E94\u7528\u7684\u8986\u76D6",none:"\u65E0",warnings:"\u8B66\u544A"},feedback:{title:"\u53CD\u9988",hint:"\u901A\u8FC7 `gh` \u5411 Rove \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/rove/state.json \u548C ~/.rove/tasks.json\uFF0C\u7136\u540E\u9000\u51FA Rove\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 Rove daemon \u5E76\u9000\u51FA\u5F53\u524D Rove \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 Rove \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 `rove daemon restart`\uFF0C\u7136\u540E\u91CD\u65B0\u542F\u52A8 Rove\u3002Hosted PTY \u5F15\u64CE\u4F1A\u8BDD\u4E0D\u4F1A\u56E0 daemon \u91CD\u542F\u800C\u9000\u51FA\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 Rove \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 `rove 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`rove 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`rove 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)",archivedHistoryHint:"\u5F52\u6863\u5386\u53F2\u9884\u89C8\uFF08beta\uFF09\uFF1A\u6253\u5F00\u5DF2\u5F52\u6863\u7684\u4EFB\u52A1\u65F6\uFF0C\u5F15\u64CE\u4F4D\u7F6E\u6539\u4E3A\u53EA\u8BFB\u7684 `rove history` \u9762\u677F\uFF08\u4F1A\u8BDD\u9009\u62E9\u5668 + \u5BF9\u8BDD\u8BB0\u5F55\uFF09\uFF0C\u800C\u4E0D\u662F\u91CD\u65B0\u542F\u52A8\u5F15\u64CE\u3002\u5F15\u64CE\u8BB0\u5F55\u6309 worktree \u8DEF\u5F84\u5B58\u50A8\uFF0C\u6240\u4EE5 worktree \u88AB\u5220\u9664\u540E\u5386\u53F2\u4ECD\u7136\u53EF\u8BFB\u3002\u4E0E Web \u4EEA\u8868\u76D8\u5171\u7528\u540C\u4E00\u5F00\u5173\u3002",archivedHistoryOn:"[x] \u5F52\u6863\u5386\u53F2\u9884\u89C8 (\u5F00)",archivedHistoryOff:"[ ] \u5F52\u6863\u5386\u53F2\u9884\u89C8 (\u5173)"}}});var Gd,Wd;var Hd=a(()=>{Gd={view:{workspace:"Active",archives:"Archived"},nav:{workspace:"Workspace",kanban:"Kanban",automations:"Routines",issues:"Issues"},header:{projects:"PROJECTS",tasks:"TASKS"},search:{placeholder:"fuzzy filter"},menu:{open:"Open",openTab:"Open tab",closeTab:"Close tab",newTask:"New task",rename:"Rename",pin:"Pin",unpin:"Unpin",localMerge:"Merge into local",archive:"Archive",delete:"Delete"},moveChip:" move",recentJump:"Recent: {title}",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 create one above.",noArchived:"No archived tasks."},archiveHint:"a to unarchive",activity:{rateLimited:"rate limited",permissionNeeded:"needs permission",error:"error"},subtitle:{noTracking:"no activity tracking",materializing:"materializing",deleting:"deleting",deleteFailed:"delete failed"},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",reorder:"reorder",done:"done"},reBranch:{title:"Set branch",fieldLabel:"branch",hintNoBranches:"(no local branches \u2014 type a new name)",hintNoMatch:"(no match \u2014 enter renames to this branch)",footer:"\u2191\u2193 pick \xB7 enter set \xB7 esc cancel"},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 ROVE_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}"}},Wd={view:{workspace:"\u8FDB\u884C\u4E2D",archives:"\u5F52\u6863"},nav:{workspace:"\u5DE5\u4F5C\u533A",kanban:"\u770B\u677F",automations:"\u4F8B\u884C\u4EFB\u52A1",issues:"\u8BAE\u9898"},header:{projects:"\u9879\u76EE",tasks:"\u4EFB\u52A1"},search:{placeholder:"\u6A21\u7CCA\u641C\u7D22"},menu:{open:"\u6253\u5F00",openTab:"\u6253\u5F00\u8BE5\u6807\u7B7E\u9875",closeTab:"\u5173\u95ED\u8BE5\u6807\u7B7E\u9875",newTask:"\u65B0\u5EFA\u4EFB\u52A1",rename:"\u91CD\u547D\u540D",pin:"\u7F6E\u9876",unpin:"\u53D6\u6D88\u7F6E\u9876",localMerge:"\u5408\u5165\u672C\u5730\u5206\u652F",archive:"\u5F52\u6863",delete:"\u5220\u9664"},moveChip:" \u79FB\u52A8",recentJump:"\u6700\u8FD1:{title}",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\u5728\u4E0A\u65B9\u65B0\u5EFA\u3002",noArchived:"\u6682\u65E0\u5F52\u6863\u4EFB\u52A1\u3002"},archiveHint:"a \u53D6\u6D88\u5F52\u6863",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",deleting:"\u6B63\u5728\u5220\u9664",deleteFailed:"\u5220\u9664\u5931\u8D25"},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",reorder:"\u91CD\u65B0\u6392\u5E8F",done:"\u5B8C\u6210"},reBranch:{title:"\u8BBE\u7F6E\u5206\u652F",fieldLabel:"\u5206\u652F",hintNoBranches:"\uFF08\u6CA1\u6709\u672C\u5730\u5206\u652F\u2014\u2014\u8F93\u5165\u65B0\u540D\u79F0\uFF09",hintNoMatch:"\uFF08\u65E0\u5339\u914D\u2014\u2014\u56DE\u8F66\u5C06\u5206\u652F\u91CD\u547D\u540D\u4E3A\u6B64\u540D\uFF09",footer:"\u2191\u2193 \u9009\u62E9 \xB7 enter \u8BBE\u7F6E \xB7 esc \u53D6\u6D88"},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 ROVE_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 qd,Ud;var Bd=a(()=>{qd={noTask:"(no task \u2014 press n to create)",exited:"process exited \u2014 F5 restarts it",restoring:"restoring session\u2026",tab:{groupTitle:"group {n}",renameTitle:"Rename tab",renameField:"tab title",renameSubmit:"rename",chooseEngineHint:"\u2190/\u2192 or h/l choose, enter confirm, esc cancel",newChat:{title:"New conversation",destLabel:"tab \u2014 destination: ",destTab:"new tab in this worktree",destFork:"fork a child task (new worktree)",ctxLabel:"ctrl+f \u2014 context: ",ctxFresh:"fresh conversation",ctxContinue:"continue this conversation"},cannotCloseLast:"Cannot close the only tab",nothingToFork:"No conversation in this tab to fork yet",noTranscriptToHandOff:"{engine} keeps no readable transcript to hand over"},split:{renameTitle:"Rename split",renameField:"split name"},scrolledBack:"\u2191 scrolled {lines}L (ctrl+pgdn to follow)",unavailable:{shellMissing:"terminal unavailable \u2014 configured shell is not available",spawnFailed:"terminal unavailable \u2014 shell could not start"},reset:{title:"Reset terminal?",body:"The running shell will be killed and a fresh one will spawn at the worktree. Any in-flight processes (vim, htop, paused jobs) end immediately."}},Ud={noTask:"\uFF08\u65E0\u4EFB\u52A1 \u2014\u2014 \u6309 n \u521B\u5EFA\uFF09",exited:"\u8FDB\u7A0B\u5DF2\u9000\u51FA \u2014\u2014 \u6309 F5 \u91CD\u542F",restoring:"\u6B63\u5728\u6062\u590D\u4F1A\u8BDD\u2026",tab:{groupTitle:"group {n}",renameTitle:"\u91CD\u547D\u540D\u6807\u7B7E\u9875",renameField:"\u6807\u7B7E\u9875\u540D\u79F0",renameSubmit:"\u91CD\u547D\u540D",chooseEngineHint:"\u2190/\u2192 \u6216 h/l \u9009\u62E9\uFF0Center \u786E\u8BA4\uFF0Cesc \u53D6\u6D88",newChat:{title:"\u65B0\u5EFA\u5BF9\u8BDD",destLabel:"tab \u2014\u2014 \u843D\u70B9\uFF1A",destTab:"\u672C worktree \u65B0\u6807\u7B7E\u9875",destFork:"fork \u5B50\u4EFB\u52A1\uFF08\u65B0 worktree\uFF09",ctxLabel:"ctrl+f \u2014\u2014 \u4E0A\u4E0B\u6587\uFF1A",ctxFresh:"\u5168\u65B0\u5BF9\u8BDD",ctxContinue:"\u63A5\u7740\u5F53\u524D\u5BF9\u8BDD"},cannotCloseLast:"\u65E0\u6CD5\u5173\u95ED\u552F\u4E00\u7684\u6807\u7B7E\u9875",nothingToFork:"\u8FD9\u4E2A\u6807\u7B7E\u9875\u8FD8\u6CA1\u6709\u53EF\u6D3E\u751F\u7684\u5BF9\u8BDD",noTranscriptToHandOff:"{engine} \u6CA1\u6709\u53EF\u8BFB\u7684\u5BF9\u8BDD\u8BB0\u5F55\uFF0C\u65E0\u6CD5\u4EA4\u63A5"},split:{renameTitle:"\u91CD\u547D\u540D\u5206\u5C4F",renameField:"\u5206\u5C4F\u540D\u79F0"},scrolledBack:"\u2191 \u5DF2\u56DE\u6EDA {lines} \u884C\uFF08ctrl+pgdn \u56DE\u5230\u5E95\u90E8\uFF09",unavailable:{shellMissing:"\u7EC8\u7AEF\u4E0D\u53EF\u7528 \u2014\u2014 \u914D\u7F6E\u7684 shell \u4E0D\u5B58\u5728",spawnFailed:"\u7EC8\u7AEF\u4E0D\u53EF\u7528 \u2014\u2014 shell \u542F\u52A8\u5931\u8D25"},reset:{title:"\u91CD\u7F6E\u7EC8\u7AEF\uFF1F",body:"\u6B63\u5728\u8FD0\u884C\u7684 shell \u4F1A\u88AB\u6740\u6389\u5E76\u5728 worktree \u91CD\u65B0\u542F\u52A8\uFF0C\u8FDB\u884C\u4E2D\u7684\u8FDB\u7A0B\uFF08vim\u3001htop\u3001\u6682\u505C\u7684\u4EFB\u52A1\uFF09\u4F1A\u7ACB\u5373\u7ED3\u675F\u3002"}}});var Kd,Fd;var Md=a(()=>{Kd={pageTitle:"ROVE UPDATE",current:"current",latest:"latest",releaseUrlUnavailable:"release URL unavailable",statusReleaseOpened:"Opened release page in your browser.",statusReleaseError:"Could not open release URL.",statusRunningUpdater:"Closing the TUI and running the updater in this terminal...",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:"Rove update complete. Relaunch Rove to use the new version.",updateFailed:"Rove 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 workspace"},skew:{title:"\u26A0 DAEMON OUT OF DATE",olderBuild:"an older build",hint:"daemon is {daemon} \u2014 you launched v{clientVersion}. Run `rove daemon restart`, then relaunch Rove"},versions:{pageTitle:"ROVE VERSIONS",loading:"Loading releases...",unavailable:"Could not fetch releases (offline or rate-limited).",tagCurrent:"current",tagLatest:"latest",tagBreaking:"breaking",breakingWarning:"\u26A0 installing this crosses breaking version(s) {versions} \u2014 run `rove reset` after the update.",footerHint:"j/k select \xB7 enter install \xB7 q close"}},Fd={pageTitle:"ROVE \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\u5173\u95ED TUI\uFF0C\u5E76\u5728\u5F53\u524D\u7EC8\u7AEF\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:"Rove \u66F4\u65B0\u5B8C\u6210\u3002\u8BF7\u91CD\u65B0\u542F\u52A8 Rove \u4EE5\u4F7F\u7528\u65B0\u7248\u672C\u3002",updateFailed:"Rove \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\u5DE5\u4F5C\u533A"},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 `rove daemon restart`\uFF0C\u7136\u540E\u91CD\u65B0\u542F\u52A8 Rove"},versions:{pageTitle:"ROVE \u7248\u672C\u5217\u8868",loading:"\u6B63\u5728\u52A0\u8F7D\u53D1\u5E03\u5217\u8868\u2026\u2026",unavailable:"\u65E0\u6CD5\u83B7\u53D6\u53D1\u5E03\u5217\u8868\uFF08\u79BB\u7EBF\u6216\u89E6\u53D1\u9650\u6D41\uFF09\u3002",tagCurrent:"\u5F53\u524D",tagLatest:"\u6700\u65B0",tagBreaking:"breaking",breakingWarning:"\u26A0 \u5B89\u88C5\u8BE5\u7248\u672C\u4F1A\u8DE8\u8FC7 breaking \u7248\u672C {versions}\u2014\u2014\u66F4\u65B0\u540E\u9700\u8FD0\u884C `rove reset`\u3002",footerHint:"j/k \u9009\u62E9 \xB7 enter \u5B89\u88C5 \xB7 q \u5173\u95ED"}}});var Nd,Od;var Ld=a(()=>{Nd={title:"ISSUES",noRepo:"no project",empty:"No open issues.",assignedFilter:"assigned to me",starting:"Starting work on #{number}\u2026",startedNoEngine:"Created {title}, but its engine did not start."},Od={title:"\u8BAE\u9898",noRepo:"\u65E0\u9879\u76EE",empty:"\u6CA1\u6709\u5F00\u653E\u7684\u8BAE\u9898\u3002",assignedFilter:"\u5206\u914D\u7ED9\u6211\u7684",starting:"\u6B63\u5728\u5F00\u59CB\u5904\u7406 #{number}\u2026",startedNoEngine:"\u5DF2\u521B\u5EFA {title}\uFF0C\u4F46\u5F15\u64CE\u6CA1\u6709\u542F\u52A8\u3002"}});var jd,Vd;var _d=a(()=>{jd={quit:{confirmTitle:"Quit Rove?",confirmBody:"The daemon and task sessions keep running. This closes only the native workspace.",confirmLabel:"Quit"},empty:{selectTask:"Select a task with a worktree"},attention:{none:"No available Inbox items"},inbox:{title:"INBOX",empty:"No pending attention",openHint:"enter open",deleteHint:"d delete",section:{attention:"ATTENTION",recent:"RECENT"},state:{done:"done",needsInput:"needs input",error:"error",rateLimited:"rate limited",running:"running"}},terminalComing:"Embedded terminal is starting..."},Vd={quit:{confirmTitle:"\u9000\u51FA Rove\uFF1F",confirmBody:"\u5B88\u62A4\u8FDB\u7A0B\u548C\u4EFB\u52A1\u4F1A\u8BDD\u4F1A\u7EE7\u7EED\u8FD0\u884C\uFF0C\u8FD9\u91CC\u53EA\u5173\u95ED\u539F\u751F\u5DE5\u4F5C\u533A\u3002",confirmLabel:"\u9000\u51FA"},empty:{selectTask:"\u8BF7\u9009\u62E9\u4E00\u4E2A\u5E26 worktree \u7684\u4EFB\u52A1"},attention:{none:"\u6536\u4EF6\u7BB1\u4E2D\u6CA1\u6709\u53EF\u6253\u5F00\u7684\u9879\u76EE"},inbox:{title:"\u6536\u4EF6\u7BB1",empty:"\u6682\u65E0\u5F85\u5904\u7406",openHint:"enter \u6253\u5F00",deleteHint:"d \u5220\u9664",section:{attention:"\u5F85\u5904\u7406",recent:"\u6700\u8FD1\u4F7F\u7528"},state:{done:"\u5B8C\u6210",needsInput:"\u9700\u8981\u8F93\u5165",error:"\u51FA\u9519",rateLimited:"\u9650\u6D41",running:"\u8FDB\u884C\u4E2D"}},terminalComing:"\u5D4C\u5165\u7EC8\u7AEF\u6B63\u5728\u542F\u52A8\u2026\u2026"}});var Cd,Dd;var Ad=a(()=>{Cd={title:"Worktrees",loading:"Loading worktrees\u2026",noProjects:"No local projects known to Rove yet.",noWorktrees:"No worktrees.",badge:{kobeManaged:"rove",dirty:"dirty",remoteOn:"on remote",remoteOff:"not pushed",remoteUnknown:"remote unknown"},verdict:{prOpen:"PR open",prMerged:"merged (PR)",inMain:"in main",prClosed:"PR closed",idle:"stale"},row:{detached:"(detached)",created:"created {age} ago",linkedTask:"task: {title}"},delete:{button:"Delete",confirmTitle:"Delete worktree?",confirmBody:'Delete the worktree for "{branch}"? This removes the working directory; the branch itself is kept.',forceTitle:"Force delete worktree?",forceBody:'"{branch}" has uncommitted or untracked changes that will be PERMANENTLY LOST. Force delete anyway?',failed:"Failed to delete worktree: {error}"},land:{button:"Land",confirmTitle:"Land branch?",confirmBody:`Merge "{branch}" into the base repo's current branch? A dirty base checkout is refused; conflicts abort with a file list.`,noTask:"This worktree isn't tracked as a Rove task \u2014 nothing to land.",conflict:"Land hit conflicts (merge aborted). Resolve by hand: {files}",dirtyBase:"The base checkout has uncommitted changes \u2014 commit or stash them, then land.",failed:"Land failed: {error}",done:'Landed "{branch}" onto {landedOn} ({commit}).'},hint:{}},Dd={title:"\u5DE5\u4F5C\u6811",loading:"\u6B63\u5728\u52A0\u8F7D worktree\u2026",noProjects:"Rove \u8FD8\u6CA1\u6709\u5DF2\u77E5\u7684\u672C\u5730\u9879\u76EE\u3002",noWorktrees:"\u6CA1\u6709 worktree\u3002",badge:{kobeManaged:"rove",dirty:"\u6709\u6539\u52A8",remoteOn:"\u5DF2\u63A8\u9001",remoteOff:"\u672A\u63A8\u9001",remoteUnknown:"\u8FDC\u7AEF\u672A\u77E5"},verdict:{prOpen:"PR \u8BC4\u5BA1\u4E2D",prMerged:"\u5DF2\u5408\u5165 (PR)",inMain:"\u5DF2\u5728\u4E3B\u5206\u652F",prClosed:"PR \u5DF2\u5173\u95ED",idle:"\u9648\u65E7"},row:{detached:"(\u6E38\u79BB\u72B6\u6001)",created:"{age}\u524D\u521B\u5EFA",linkedTask:"\u4EFB\u52A1\uFF1A{title}"},delete:{button:"\u5220\u9664",confirmTitle:"\u5220\u9664 worktree\uFF1F",confirmBody:'\u786E\u5B9A\u5220\u9664 "{branch}" \u5BF9\u5E94\u7684 worktree\uFF1F\u5DE5\u4F5C\u76EE\u5F55\u4F1A\u88AB\u79FB\u9664\uFF0C\u5206\u652F\u672C\u8EAB\u4F1A\u4FDD\u7559\u3002',forceTitle:"\u5F3A\u5236\u5220\u9664 worktree\uFF1F",forceBody:'"{branch}" \u5B58\u5728\u672A\u63D0\u4EA4\u6216\u672A\u8DDF\u8E2A\u7684\u6539\u52A8\uFF0C\u5F3A\u5236\u5220\u9664\u540E\u5C06\u6C38\u4E45\u4E22\u5931\u3002\u4ECD\u8981\u5F3A\u5236\u5220\u9664\u5417\uFF1F',failed:"\u5220\u9664 worktree \u5931\u8D25\uFF1A{error}"},land:{button:"\u5408\u5165",confirmTitle:"\u5408\u5165\u5206\u652F\uFF1F",confirmBody:'\u628A "{branch}" \u5408\u5165\u57FA\u4ED3\u5E93\u5F53\u524D\u5206\u652F\uFF1F\u57FA\u7840\u68C0\u51FA\u6709\u672A\u63D0\u4EA4\u6539\u52A8\u4F1A\u88AB\u62D2\u7EDD\uFF1B\u51B2\u7A81\u4F1A\u4E2D\u6B62\u5E76\u7ED9\u51FA\u6587\u4EF6\u6E05\u5355\u3002',noTask:"\u8BE5 worktree \u672A\u4F5C\u4E3A Rove \u4EFB\u52A1\u88AB\u8DDF\u8E2A\u2014\u2014\u6CA1\u6709\u53EF\u5408\u5165\u7684\u5BF9\u8C61\u3002",conflict:"\u5408\u5165\u9047\u5230\u51B2\u7A81\uFF08\u5DF2\u4E2D\u6B62\uFF09\u3002\u8BF7\u624B\u52A8\u89E3\u51B3\uFF1A{files}",dirtyBase:"\u57FA\u7840\u68C0\u51FA\u6709\u672A\u63D0\u4EA4\u6539\u52A8\u2014\u2014\u8BF7\u5148\u63D0\u4EA4\u6216 stash\uFF0C\u518D\u5408\u5165\u3002",failed:"\u5408\u5165\u5931\u8D25\uFF1A{error}",done:'\u5DF2\u628A "{branch}" \u5408\u5165 {landedOn}\uFF08{commit}\uFF09\u3002'},hint:{}}});function Qq($){return typeof $==="string"&&yY.some((Z)=>Z.id===$)}var iY0,oY0,yY,Xq,bY="en";var kY=a(()=>{Ac();Tc();Ec();fc();bc();mc();cc();pc();oc();sc();$d();Xd();Yd();Hd();Bd();Md();Ld();_d();Ad();iY0={settings:Qd,tasks:Gd,terminal:qd,files:Sc,newTask:nc,onboarding:ac,ops:tc,update:Kd,quickTask:Zd,help:wc,hints:gc,history:kc,common:Pc,keys:dc,workspace:jd,worktrees:Cd,kanban:hc,automations:Cc,workItems:Nd},oY0={settings:zd,tasks:Wd,terminal:Ud,files:Ic,newTask:ic,onboarding:rc,ops:ec,update:Fd,quickTask:Jd,help:xc,hints:yc,history:vc,common:Rc,keys:lc,workspace:Vd,worktrees:Dd,kanban:uc,automations:Dc,workItems:Od},yY=[{id:"en",label:"English"},{id:"zh",label:"\u4E2D\u6587"}],Xq={en:iY0,zh:oY0}});function _S($,Z){let J=$;for(let X of Z.split("."))if(J&&typeof J==="object"&&X in J)J=J[X];else return;return typeof J==="string"?J:void 0}function Pd($,Z){if(!Z)return $;return $.replace(/\{(\w+)\}/g,(J,X)=>(X in Z)?String(Z[X]):J)}function CS($,Z,J){return $.keys[Z]?.[J]}function zq($){if(Xq[$])YF.set($)}function gj(){return YF.get()}function Rd(){return YF}function T$($,Z){let J=YF.get(),X=_S(Xq[J],$)??_S(Xq.en,$)??$;return Pd(X,Z)}function cJ($,Z){let J=YF.get();return CS(Xq[J],$,Z)??CS(Xq.en,$,Z)??Z}var YF;var vY=a(()=>{$Z();kY();kY();YF=r$(bY)});function aY0(){return G4(Rd())}function Z1(){let $=aY0();return Td.useCallback((Z,J)=>T$(Z,J),[$])}var Td;var z$=a(()=>{vY();BZ();kY();Td=H1(q1(),1)});function X9($){return $<70}function Sd($){if($.focusedPane==="sidebar")return"sidebar";return $.hasSelection||$.hasOpenPage?"content":"sidebar"}function Ed($){if(!xQ($))return $;return cJ("desc",$)}function rY0($){if(["kanban.open","automations.open","workItems.open"].includes($))return"Views";if($.startsWith("focus."))return"Navigation";if($.startsWith("inbox.")||$.startsWith("attention."))return"Attention";if($.startsWith("chat.tab.")||$.startsWith("chat.session."))return"Sessions";if($.startsWith("chat.fork.")||$.startsWith("task."))return"Tasks";if($.startsWith("settings.")||$==="workspace.zenToggle")return"Tools";return xQ($)?.category??"Global"}function sY0($){let Z=new Map(t7.map((G,W)=>[G.id,W])),J=new Map;for(let G of $){let W=J.get(G.action);if(W)W.strokes.push(G.stroke);else J.set(G.action,{action:G.action,strokes:[G.stroke]})}let X=new Map,z=[...J.values()].sort((G,W)=>(Z.get(G.action)??Number.MAX_SAFE_INTEGER)-(Z.get(W.action)??Number.MAX_SAFE_INTEGER));for(let G of z){let W=rY0(G.action),H=X.get(W);if(H)H.push(G);else X.set(W,[G])}return[...X].map(([G,W])=>({category:G,actions:W}))}function wd($){let{theme:Z}=l0(),J=Z1(),X=E5(),z=G4(tu),[,G]=GF.useState(0),W=Date.now(),H=z.entries.filter((y)=>W-y.at<YS),U=H[0]?.at;GF.useEffect(()=>{if(U===void 0)return;let y=setTimeout(()=>G((E)=>E+1),Math.max(30,U+YS-Date.now()));return()=>clearTimeout(y)},[U]),GF.useEffect(()=>{if(!z.armed||z.armedAt===null)return;let y=z.armedAt+GS-Date.now();if(y<=0)return;let E=setTimeout(()=>G((S)=>S+1),y);return()=>clearTimeout(E)},[z.armed,z.armedAt]);let B=H.length+(z.armed?1:0);if(B===0)return null;let N=t3().key??"",L=z.armed&&z.armedAt!==null&&W-z.armedAt>=GS,M=L?sY0(z.options):[];if(L){let y=X.width<88,E=y?1:Math.min(3,Math.max(1,M.length)),S=Array.from({length:Math.ceil(M.length/E)},(h,o)=>M.slice(o*E,(o+1)*E)),R=S.reduce((h,o)=>h+Math.max(1,...o.map((m)=>m.actions.length))+1,3),w=Math.max(20,X.width-4),b=Math.max(0,X.height-Id-R),k=y?w-4:Math.max(18,Math.floor((w-4)/E));return T.jsxDEV("box",{position:"absolute",zIndex:2400,left:2,top:b,width:w,border:!0,borderColor:Z.borderActive,backgroundColor:Z.backgroundDialog,paddingLeft:1,paddingRight:1,flexDirection:"column",children:[T.jsxDEV("box",{flexDirection:"row",justifyContent:"space-between",children:[T.jsxDEV("text",{fg:Z.primary,children:J("help.commandLayer",{prefix:N})},void 0,!1,void 0,this),T.jsxDEV("text",{fg:Z.textMuted,children:J("help.escCancel")},void 0,!1,void 0,this)]},void 0,!0,void 0,this),T.jsxDEV("box",{flexDirection:"column",children:S.map((h)=>T.jsxDEV("box",{flexDirection:"row",gap:y?0:1,children:h.map((o)=>T.jsxDEV("box",{flexDirection:"column",flexGrow:1,flexBasis:0,children:[T.jsxDEV("text",{fg:Z.accent,children:cJ("category",o.category)},void 0,!1,void 0,this),o.actions.map((m)=>{let e=m.strokes.join("/"),t=qZ(Ed(m.action),Math.max(4,k-e.length-3));return T.jsxDEV("box",{flexDirection:"row",gap:1,children:[T.jsxDEV("box",{width:Math.min(9,Math.max(3,e.length)),children:T.jsxDEV("text",{fg:Z.primary,children:e},void 0,!1,void 0,this)},void 0,!1,void 0,this),T.jsxDEV("text",{fg:Z.text,wrapMode:"none",children:t},void 0,!1,void 0,this)]},m.action,!0,void 0,this)})]},o.category,!0,void 0,this))},h.map((o)=>o.category).join("-"),!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}let V=X9(X.width),A=V?0:$.left,_=V?X.width:$.width,C=Math.max(0,X.height-Id-B);return T.jsxDEV("box",{position:"absolute",zIndex:2400,left:A,top:C,width:_,flexDirection:"column",children:[H.map((y)=>T.jsxDEV("box",{paddingLeft:1,paddingRight:1,backgroundColor:Z.backgroundDialog,children:T.jsxDEV("text",{fg:Z.textMuted,wrapMode:"none",children:qZ(`${y.prefixKey?`${y.prefixKey} + `:""}${y.stroke} ${y.action?`\u2192 ${Ed(y.action)}`:"\u2205"}`,_-2)},void 0,!1,void 0,this)},y.id,!1,void 0,this)),z.armed?T.jsxDEV("box",{paddingLeft:1,paddingRight:1,backgroundColor:Z.backgroundDialog,children:T.jsxDEV("text",{fg:Z.textMuted,wrapMode:"none",children:`${N} \u22EF`},void 0,!1,void 0,this)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}var GF,Id=1;var xd=a(async()=>{mJ();UZ();US();z$();BZ();r0();await e1([h4(),$$()]);GF=H1(q1(),1)});import{spawnSync as tY0}from"child_process";function ZG0($){let[Z,J]=$.split("/");if(!Z||!J)throw Error(`invalid GitHub repository slug: ${$}`);return{owner:Z,name:J}}function fd($,Z){let J=$.trim();if(!J)throw Error(`${Z} is required`);return J}function gd($,Z){let J=Z?.map((X)=>typeof X.message==="string"?X.message:null).filter((X)=>!!X);if(J&&J.length>0)return J.join("; ");return $.trim()||"GitHub CLI returned an empty response"}function yd($,Z,J){let X=["api","graphql","-f",`query=${$}`];for(let[U,B]of Object.entries(Z))X.push("-f",`${U}=${B}`);let z=J.spawn("gh",X,{encoding:"utf8"});if(z.error)throw Error(`failed to run gh: ${z.error.message}`);let G=typeof z.stdout==="string"?z.stdout:String(z.stdout??""),W=typeof z.stderr==="string"?z.stderr:String(z.stderr??""),H;try{H=JSON.parse(G)}catch{throw Error(`failed to parse gh response: ${gd(W,void 0)}`)}if((z.status??0)!==0||H.errors?.length)throw Error(gd(W,H.errors));if(!H.data)throw Error("GitHub CLI response did not include data");return H.data}function JG0($){return`${$}
659
659
 
660
660
  ---
661
661
  Submitted from Rove ${D$}.`}function Yq($,Z={}){let J=fd($.title,"feedback title"),X=JG0(fd($.body,"feedback body")),z=(Z.repoSlug??_Y)();if(!z)throw Error("package repository is not a GitHub repository");let{owner:G,name:W}=ZG0(z),H=$.categorySlug?.trim()||DS,U={spawn:Z.spawn??tY0},N=yd(eY0,{owner:G,name:W},U).repository,L=N?.id;if(!L)throw Error(`GitHub repository not found: ${z}`);let M=N.discussionCategories?.nodes?.find((_)=>_.slug===H);if(!M)throw Error(`GitHub Discussion category not found: ${H}`);let A=yd($G0,{repositoryId:L,categoryId:M.id,title:J,body:X},U).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 DS="feedback",eY0=`
@@ -771,9 +771,10 @@ ${Y00}`),process.exit(2)}async function JF0($){let Z=ZF0({input:process.stdin,ou
771
771
  `),Z.close(),G(W)})})}async function XF0($){if(!tA())N9("remote projects are experimental and disabled \u2014 enable Settings \u2192 Dev \u2192 Experimental \u2192 Remote projects first");let Z=G00($);if(!Z.host)N9("--host is required");if(!Z.user)N9("--user is required");if(!Z.path)N9("--path (remote base path) is required");if(Z.key&&Z.password)N9("choose ONE of --key or --password, not both");if(!Z.key&&!Z.password)N9("an auth method is required: --key [path] or --password");let J;if(Z.password){if(!XP())N9("--password needs the macOS keychain (unsupported on this platform)");let G=Fy(Z.host,Z.user,Z.port),W=await JF0(`Password for ${Z.user}@${Z.host}: `);if(W.length===0)N9("empty password");if(!My(G,W))N9("failed to store the password in the keychain");J={kind:"password",keychainRef:G}}else J={kind:"key",keyPath:Z.key?.path};let{key:X,added:z}=$P({host:Z.host,user:Z.user,port:Z.port,basePath:Z.path,auth:J});console.log(z?`added remote project ${X} (base ${Z.path})`:`updated remote project ${X} (base ${Z.path})`),await QF0(Z,J)}async function QF0($,Z){if(Z.kind==="password"&&!XP())return;let J=Z.kind==="key"?{kind:"key",keyPath:Z.keyPath}:{kind:"password",getPassword:()=>QL(Z.keychainRef)},X={host:$.host,user:$.user,port:$.port,auth:J,controlPath:hO($.host,$.user,$.port)};process.stdout.write("checking connection\u2026 ");try{if((await new CK(X).run(["test","-d",$.path])).exitCode===0)console.log("ok");else console.log(`reachable, but base path "${$.path}" is not a directory (you can create it later)`)}catch(z){console.log(`could not connect (${N1(z)})`),console.log("the project is saved; fix the host/credentials and it will connect on first use.")}}var z00,Y00;var H00=a(()=>{L5();ZP();QP();b4();o4();z00=Q$(),Y00=`Usage: ${z00} add --remote --host <host> --user <user> --path <basePath>
772
772
  [--port N] [--key [path] | --password]
773
773
 
774
- Register an SSH-backed project. Worktrees + the engine run on <host> under
775
- <basePath>. Choose ONE auth: --key [path] (ssh-agent when path omitted) or
776
- --password (prompted, stored in the OS keychain \u2014 never in state.json).
774
+ Register an experimental SSH-backed project. Worktrees are created on <host>
775
+ under <basePath>; Hosted PTY engine launch over SSH is not implemented yet.
776
+ Choose ONE auth: --key [path] (ssh-agent when path omitted) or --password
777
+ (macOS only; prompted and stored in Keychain, never in state.json).
777
778
  `});var Nw={};g$(Nw,{runSkillSubcommand:()=>HF0});import{existsSync as zF0,readFileSync as YF0}from"fs";import{join as GF0}from"path";function Mw(){return[`usage: ${X8} skill <verb>`,"","verbs:"," install [--project] [--agent NAME]\u2026 Install the Rove agent skill (wraps `npx skills add`)"," status Show whether the skill is installed"," command [--project] [--agent NAME]\u2026 Print the underlying npx command without running it",` print Print the bundled SKILL.md (also: \`${X8} --skill\`)`,"",`The skill teaches a coding agent how to drive \`${X8} api\`. Installs are`,"global (user-level) by default; --project installs into the current project","instead. With no --agent, the agent-skills CLI detects your installed agents","and asks; repeat --agent to name them (e.g. --agent claude-code --agent codex)."].join(`
778
779
  `)}function q00($){let Z=!0,J=[];for(let z=0;z<$.length;z++){let G=$[z];if(G==="--project"||G==="-p")Z=!1;else if(G==="--global"||G==="-g")Z=!0;else if(G==="--agent"){let W=$[z+1];if(!W||W.startsWith("--"))process.stderr.write(`${X8} skill: --agent requires a value
779
780
  `),process.exit(2);J.push(W),z++}else if(G.startsWith("--agent="))J.push(G.slice(8));else process.stderr.write(`${X8} skill: unknown flag "${G}"
@@ -959,7 +960,7 @@ ${k80}
959
960
  pass a path glob to adopt, e.g. ${d8} adopt '${W}/*' --yes`);return}let L=B.filter(N);if(L.length===0){console.log(`
960
961
  no worktrees match glob ${JSON.stringify(Z)}`);return}if(!z){console.log(`
961
962
  ${L.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await b80(U,W,L,H),console.log(`done \u2014 adopted ${L.length} worktree(s)`)}function y80($){$.write(`${X00()}
962
- `)}async function cC0(){let[,,...$]=process.argv,[Z,...J]=$;if(Z==="--version"||Z==="-v"||Z==="version"){let{CURRENT_VERSION:W}=await Promise.resolve().then(() => (x8(),Pv));console.log(`${d8} ${W}`);return}if(Z==="--help"||Z==="-h"||Z==="help"){y80(process.stdout);return}if(Z==="--skill"){let{runSkillSubcommand:W}=await Promise.resolve().then(() => (Ow(),Nw));await W(["print"]);return}if(Z==="add"){await kC0(J);return}if(Z==="remove"){await mC0(J);return}if(Z==="completions"){let{runCompletionsSubcommand:W}=await Promise.resolve().then(() => (K00(),B00));await W(J);return}if(Z==="adopt"){await uC0(J);return}if(Z==="export"){let{runExportSubcommand:W}=await Promise.resolve().then(() => (j00(),L00));await W(J);return}if(Z==="repo"){let{runRepoSubcommand:W}=await Promise.resolve().then(() => (A00(),D00));await W(J);return}if(Z==="api"){let{runApiSubcommand:W}=await Promise.resolve().then(() => (o10(),i10));await W(J);return}if(Z==="update"){let{runUpdateSubcommand:W}=await Promise.resolve().then(() => (J$0(),Z$0));await W(J);return}if(Z==="theme"){let{runThemeSubcommand:W}=await Promise.resolve().then(() => (G$0(),Y$0));await W(J);return}if(Z==="feedback"){let{runFeedbackSubcommand:W}=await Promise.resolve().then(() => (K$0(),B$0));await W(J);return}if(Z==="daemon"){let{runDaemonSubcommand:W}=await Promise.resolve().then(() => ($70(),e20));await W(J);return}if(Z==="doctor"){let{runDoctorSubcommand:W}=await Promise.resolve().then(() => (F70(),K70));await W(J);return}if(Z==="config"){let{runConfigSubcommand:W}=await Promise.resolve().then(() => (O70(),N70));await W(J);return}if(Z==="reset"){let{runResetSubcommand:W}=await Promise.resolve().then(() => (C70(),_70));await W(J);return}if(Z==="pty-host"){let{runPtyHostSubcommand:W}=await Promise.resolve().then(() => (e70(),t70));await W(J);return}if(Z==="web"){let{runWebSubcommand:W}=await Promise.resolve().then(() => (G80(),Y80));await W(J);return}if(Z==="skill"){let{runSkillSubcommand:W}=await Promise.resolve().then(() => (Ow(),Nw));await W(J);return}if(Z==="plugin"){let{runPluginSubcommand:W}=await Promise.resolve().then(() => (_80(),V80));await W(J);return}if(Z==="hook"){let{runHookSubcommand:W}=await Promise.resolve().then(() => (yR(),Cv));await W(J);return}if(Z!==void 0&&$00(Z)){await Z00(Z);return}if(Z!==void 0)console.error(`${d8}: unknown command '${Z}'`),y80(process.stderr),process.exit(2);let{publishKobeTerminalTitle:X}=await Promise.resolve().then(() => uP);X();let{maybeRunOnboarding:z}=await Promise.resolve().then(() => (x80(),w80));if(await z())return;let{startTui:G}=await Promise.resolve().then(() => (Fw(),Kw));await G()}var d8,f80,g80,k80;var dC0=a(()=>{jA();KH();c2();J00();o4();Q00();jg();d8=Q$(),f80=[`Usage: ${d8} add [path]`,` ${d8} add --remote --host <host> --user <user> --path <basePath> [--port N] [--key <path> | --password]`,"","Save a repo for the new-task picker. With --remote, register an SSH-backed","project whose worktrees + engine run on <host> under <basePath>.",""].join(`
963
+ `)}async function cC0(){let[,,...$]=process.argv,[Z,...J]=$;if(Z==="--version"||Z==="-v"||Z==="version"){let{CURRENT_VERSION:W}=await Promise.resolve().then(() => (x8(),Pv));console.log(`${d8} ${W}`);return}if(Z==="--help"||Z==="-h"||Z==="help"){y80(process.stdout);return}if(Z==="--skill"){let{runSkillSubcommand:W}=await Promise.resolve().then(() => (Ow(),Nw));await W(["print"]);return}if(Z==="add"){await kC0(J);return}if(Z==="remove"){await mC0(J);return}if(Z==="completions"){let{runCompletionsSubcommand:W}=await Promise.resolve().then(() => (K00(),B00));await W(J);return}if(Z==="adopt"){await uC0(J);return}if(Z==="export"){let{runExportSubcommand:W}=await Promise.resolve().then(() => (j00(),L00));await W(J);return}if(Z==="repo"){let{runRepoSubcommand:W}=await Promise.resolve().then(() => (A00(),D00));await W(J);return}if(Z==="api"){let{runApiSubcommand:W}=await Promise.resolve().then(() => (o10(),i10));await W(J);return}if(Z==="update"){let{runUpdateSubcommand:W}=await Promise.resolve().then(() => (J$0(),Z$0));await W(J);return}if(Z==="theme"){let{runThemeSubcommand:W}=await Promise.resolve().then(() => (G$0(),Y$0));await W(J);return}if(Z==="feedback"){let{runFeedbackSubcommand:W}=await Promise.resolve().then(() => (K$0(),B$0));await W(J);return}if(Z==="daemon"){let{runDaemonSubcommand:W}=await Promise.resolve().then(() => ($70(),e20));await W(J);return}if(Z==="doctor"){let{runDoctorSubcommand:W}=await Promise.resolve().then(() => (F70(),K70));await W(J);return}if(Z==="config"){let{runConfigSubcommand:W}=await Promise.resolve().then(() => (O70(),N70));await W(J);return}if(Z==="reset"){let{runResetSubcommand:W}=await Promise.resolve().then(() => (C70(),_70));await W(J);return}if(Z==="pty-host"){let{runPtyHostSubcommand:W}=await Promise.resolve().then(() => (e70(),t70));await W(J);return}if(Z==="web"){let{runWebSubcommand:W}=await Promise.resolve().then(() => (G80(),Y80));await W(J);return}if(Z==="skill"){let{runSkillSubcommand:W}=await Promise.resolve().then(() => (Ow(),Nw));await W(J);return}if(Z==="plugin"){let{runPluginSubcommand:W}=await Promise.resolve().then(() => (_80(),V80));await W(J);return}if(Z==="hook"){let{runHookSubcommand:W}=await Promise.resolve().then(() => (yR(),Cv));await W(J);return}if(Z!==void 0&&$00(Z)){await Z00(Z);return}if(Z!==void 0)console.error(`${d8}: unknown command '${Z}'`),y80(process.stderr),process.exit(2);let{publishKobeTerminalTitle:X}=await Promise.resolve().then(() => uP);X();let{maybeRunOnboarding:z}=await Promise.resolve().then(() => (x80(),w80));if(await z())return;let{startTui:G}=await Promise.resolve().then(() => (Fw(),Kw));await G()}var d8,f80,g80,k80;var dC0=a(()=>{jA();KH();c2();J00();o4();Q00();jg();d8=Q$(),f80=[`Usage: ${d8} add [path]`,` ${d8} add --remote --host <host> --user <user> --path <basePath> [--port N] [--key <path> | --password]`,"","Save a repo for the new-task picker. With --remote, register an SSH-backed","project whose worktrees live on <host>; engine launch over SSH is pending.",""].join(`
963
964
  `);g80=[`Usage: ${d8} remove [path]`,"","Forget a saved project (drop it from the new-task picker). Non-destructive:","the repo's files, worktrees, branches and tasks all stay on disk. A remote","(ssh://) project also has its stored connection config dropped.",""," path defaults to the current directory. Pass an exact saved entry (e.g. a"," remote `ssh://user@host` key) to remove it verbatim. Run with no match to"," print the current saved projects.",""].join(`
964
965
  `);k80=[`Usage: ${d8} adopt [glob] [--repo <path>] [--vendor <v>] [--yes]`,"",`Import existing git worktrees in a repo as ${d8} 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(`
965
966
  `);cC0().catch(($)=>{console.error(`${d8} failed to start:`,process.env.KOBE_DEBUG==="1"?$:N1($)),process.exit(1)})});dC0();