@sma1lboy/kobe 0.7.90 → 0.7.91
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 +3 -3
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -4,7 +4,7 @@ var ri=Object.create;var{getPrototypeOf:si,defineProperty:sC,getOwnPropertyNames
|
|
|
4
4
|
`).filter((J)=>J.length>0)}wrapCommand($,X={}){let J=X.cwd?`cd ${XL(X.cwd)} && ${$}`:$;return`${$L(this.spec,{tty:X.tty}).map(Sa).join(" ")} ${XL(J)}`}}var XL,Pa,AS=($,X)=>{let[J,...Q]=$,Y=Da(J??"",Q,{env:X?{...process.env,...X}:process.env,encoding:"utf8",shell:!1});return{stdout:Y.stdout??"",stderr:Y.stderr??"",exitCode:Y.status??-1}},ga=($,X,J)=>DS($,{env:X?{...process.env,...X}:process.env,signal:J?.signal});var qA=X1(()=>{eF();XL=sG,Pa=tG});import{spawnSync as Ea}from"child_process";import{platform as ka}from"os";function _S($,X,J){return{service:wa,account:J?`${X}@${$}:${J}`:`${X}@${$}`}}function WA($=HA){return $.platform()==="darwin"}function IS($,X,J=HA){if(J.platform()!=="darwin")return!1;let{exitCode:Q}=J.run(["security","add-generic-password","-U","-s",$.service,"-a",$.account,"-w",X]);return Q===0}function ZL($,X=HA){if(X.platform()!=="darwin")return null;let{stdout:J,exitCode:Q}=X.run(["security","find-generic-password","-s",$.service,"-a",$.account,"-w"]);if(Q!==0)return null;return J.replace(/\n$/,"")}var HA,wa="kobe-remote-ssh";var BA=X1(()=>{HA={run($){let[X,...J]=$,Q=Ea(X??"",J,{encoding:"utf8",shell:!1});return{stdout:Q.stdout??"",exitCode:Q.status??-1}},platform(){return ka()}}});import{existsSync as xa}from"fs";function fS($){let X=$.auth,J=X.kind==="key"?{kind:"key",keyPath:X.keyPath}:{kind:"password",getPassword:()=>ZL(X.keychainRef)};return{host:$.host,user:$.user,port:$.port,auth:J,controlPath:oF($.host,$.user,$.port)}}function $q($){let X=o$($);if(!X)return new JL;return new eG(fS(X))}function L7($){for(let X of Object.values(YA()))if($===X.basePath||$.startsWith(`${X.basePath}/`))return new eG(fS(X));return new JL}function zL($){return $&&z8($)?$:void 0}function GZ($){return L7($).isRemote||xa($)}function K4($){return L7($).isRemote?u7():$}var L$=X1(()=>{B4();Y5();qA();BA()});function iB($){return`kobe-hidden-${$.replace(/[^A-Za-z0-9_-]/g,"")||"session"}`}function SS($){let X=Number.parseInt($.replace(/^@/,""),10);return Number.isFinite(X)&&X>=0?1000+X:1000}function MA($){if(!Number.isFinite($))return PS;return Math.max(ba,Math.min(ya,Math.round($)))}function JQ($){if(!Number.isFinite($))return null;return Math.max(va,Math.min(ua,Math.round($)))}function gS($){let X=Number.parseInt($[QL]??"",10),J=Number.isFinite(X)&&X>0?MA(X):PS,Q=JQ(Number.parseInt($[YL]??"",10)),Y=JQ(Number.parseInt($[GL]??"",10)),q=[];if(Q!==null)q.push("-x",`${Q}%`);if(Y!==null)q.push("-y",`${Y}%`);return{tasksWidth:J,rightColumnWidthPct:Q??100-FA,opsHeightPct:Y??aB,rightColumnResizeArgs:q}}function C2($){return sG($)}function j$($){return tG($)}function O$($,X){let Y=`${X?UA:""}${$}; __rc=$?; [ "$__rc" -ne 0 ] && printf '${"\\n \u26A0 Engine exited (code %s). Check Settings \u2192 Engines and fix the launch command.\\n\\n"}' "$__rc"; `;return X?`${Y}"\${SHELL:-/bin/sh}"; ${X}`:`${Y}exec "\${SHELL:-/bin/sh}"`}function ES($){return`trap '' INT; while :; do ${$}; sleep 1; done`}function Jq($,X,J){return`${$}${X.map(C2).join(" ")} engine-tab-exit --session ${C2(J)}`}function kS(){return`clear; printf ${C2("\\n No task selected\\n\\n Press N to create a task, or pick one on the left.\\n\\n")}; exec "\${SHELL:-/bin/sh}"`}function LA($){let X=typeof $==="number"?$:$==null?Number.NaN:Number.parseInt($,10);if(!Number.isFinite(X))return ha;return Math.max(ma,Math.min(ca,Math.round(X)))}function la($,X){let J=String(X),Q="\\n \u26A0 Repo init (.kobe/init.sh) timed out after %ss and was killed; continuing to the engine.\\n\\n",Y="\\n \u26A0 Repo init (.kobe/init.sh) failed (code %s); continuing to the engine.\\n\\n";return['__kobe_init_env="${TMPDIR:-/tmp}/kobe-init-env.$$"','__kobe_init_to="${TMPDIR:-/tmp}/kobe-init-timeout.$$"','rm -f "$__kobe_init_env" "$__kobe_init_to" 2>/dev/null',"(",$,"__kobe_init_ec=$?",'export -p > "$__kobe_init_env" 2>/dev/null',"exit $__kobe_init_ec",") </dev/null &","__kobe_init_pid=$!",`( sleep ${J}; : > "$__kobe_init_to"; kill -TERM "$__kobe_init_pid" 2>/dev/null; sleep 2; kill -KILL "$__kobe_init_pid" 2>/dev/null ) &`,"__kobe_init_wd=$!",'wait "$__kobe_init_pid" 2>/dev/null; __kobe_init_rc=$?','kill "$__kobe_init_wd" 2>/dev/null; wait "$__kobe_init_wd" 2>/dev/null',`if [ -f "$__kobe_init_to" ]; then __kobe_init_rc=124; printf '${"\\n \u26A0 Repo init (.kobe/init.sh) timed out after %ss and was killed; continuing to the engine.\\n\\n"}' '${J}';`,'elif [ "$__kobe_init_rc" -eq 0 ]; then [ -f "$__kobe_init_env" ] && . "$__kobe_init_env" 2>/dev/null;',`else printf '${"\\n \u26A0 Repo init (.kobe/init.sh) failed (code %s); continuing to the engine.\\n\\n"}' "$__kobe_init_rc"; fi`,'rm -f "$__kobe_init_env" "$__kobe_init_to" 2>/dev/null'].join(`
|
|
5
5
|
`)}function wS($,X,J){let Q=O$($,J),Y=X?.initScript?.trim();if(!Y)return Q;let q=LA(X?.timeoutSeconds),W=la(Y,q);if(X?.markerPath){let H=C2(X.markerPath),K=C2(da(X.markerPath));return UA+[`if [ ! -f ${H} ]; then`,W,`if [ "$__kobe_init_rc" -eq 0 ]; then mkdir -p ${K} && : > ${H}; fi`,"fi",Q].join(`
|
|
6
6
|
`)}return UA+[W,Q].join(`
|
|
7
|
-
`)}function da($){let X=$.lastIndexOf("/");return X<=0?".":$.slice(0,X)}function RS($){return`cd ${C2($)} && while :; do clear; printf "\\033[1m# %s\\033[0m\\n\\n" ${C2($)}; git status --short --branch 2>/dev/null | sed 's/^/ /' || true; printf "\\n"; if command -v lsd >/dev/null 2>&1; then lsd --tree --git -I node_modules -I .git --depth 2 .; elif command -v eza >/dev/null 2>&1; then eza --tree --git -L 2 -I 'node_modules|.git' .; elif command -v tree >/dev/null 2>&1; then tree -L 2 -I 'node_modules|.git'; else ls -la; fi; sleep 2; done`}function xS($){let X=C2($.worktree),J=C2($.relPath),Q=$.cliInvocation.map(C2).join(" "),Y=`cd ${X} && if ! git diff --quiet HEAD -- ${J} 2>/dev/null; then git diff HEAD -- ${J} | { delta --paging=always 2>/dev/null || less -R; }; else bat --style=plain --paging=always ${J} 2>/dev/null || \${PAGER:-less} ${J} 2>/dev/null || cat ${J}; fi`;return`${Q} ops --worktree ${X} --preview ${J} || { ${Y}; }`}function bS($){return`${j$([...$.cliInvocation,"update-page"])}`}function yS($){let X=$.opener??"open";return[`tmux -L ${C2($.tmuxSocket)} capture-pane -Jp -t '#{pane_id}' -S -500`,`grep -oiE 'https?://[^ "'\\''()<>]+'`,"awk '!seen[$0]++'","{ command -v fzf >/dev/null && fzf --reverse || tail -1; }",`xargs -I{} ${X} {}`].join(" | ")}function HZ($,X={}){let J=[...$,"tasks"];if(X.initialTaskId)J.push("--initial-task-id",X.initialTaskId);return j$(J)}function Zq($){if($.taskId&&$.claudePaneId){let X=$.cliInvocation.map(C2).join(" "),J=$.vendor?` --vendor ${C2($.vendor)}`:"";return`KOBE_FILETREE_WATCH=1 ${X} ops --task-id ${C2($.taskId)} --worktree ${C2($.cwd)} --target-pane ${C2($.claudePaneId)}${J} || { ${RS($.cwd)}; }`}return RS($.cwd)}var PS=32,h7="tasks",xX="claude",R6="ops",P6="shell",nB="workspace_aux",KA=4,S6="@kobe_hidden_shell_pane",N$="@kobe_hidden_tasks_pane",qZ="@kobe_zen_panes",Xq="@kobe_zen",QL="@kobe_tasks_width",ba=16,ya=120,FA=60,aB=50,YL="@kobe_right_width_pct",GL="@kobe_ops_height_pct",va=10,ua=90,TS,UA="trap ':' INT; ",ha=120,ma=5,ca=3600;var r$=X1(()=>{eF();TS=[QL,YL,GL]});function zq($,X,J){if(!X)return $;let Q=$q(X);return Q.ensureReady(),Q.wrapCommand($,{tty:!0,cwd:J})}function D4(){let $=[];for(let X of["KOBE_HOME_DIR","KOBE_DAEMON_SOCKET_PATH","KOBE_TMUX_SOCKET"]){let J=process.env[X];if(J&&J.length>0)$.push(`${X}=${C2(J)}`)}return $.length>0?`${$.join(" ")} `:""}var oB="@kobe_remote";var WZ=X1(()=>{L$();r$()});function vS(){return i$(qL,!0)}function HL(){return i$(uS,!1)}function hS($){rF(uS,$)}var qL="zen.keepTasks",uS="zen.active";var NA=X1(()=>{a$()});var WL;var mS=X1(()=>{WL={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.90",description:"TUI orchestrator for Claude Code (codename)",type:"module",packageManager:"bun@1.3.13",bin:{kobe:"dist/cli/index.js"},files:["dist/cli","dist/web-ui","dist/*.wav","README.md","LICENSE"],publishConfig:{access:"public"},repository:{type:"git",url:"git+https://github.com/Sma1lboy/kobe.git"},homepage:"https://github.com/Sma1lboy/kobe#readme",bugs:{url:"https://github.com/Sma1lboy/kobe/issues"},engines:{bun:">=1.3.11"},scripts:{dev:"env KOBE_DEV=1 bun --conditions=browser ./src/cli/index.ts","dev:mock":"env KOBE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:mock-react":"env KOBE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:mock-react-task-dialogs":"env KOBE_DEV=1 bun ./src/tui-react/component/mock-dialogs-host.tsx","dev:mock-react-history":"env KOBE_DEV=1 bun ./src/tui-react/history/mock-host.tsx","dev:mock-react-filetree":"env KOBE_DEV=1 bun ./src/tui-react/panes/filetree/mock-host.tsx","dev:mock-react-sidebar":"env KOBE_DEV=1 bun ./src/tui-react/panes/sidebar/mock-host.tsx","dev:mock-react-terminal":"env KOBE_DEV=1 bun ./src/tui-react/panes/terminal/mock-host.tsx","dev:mock-react-dialogs":"env KOBE_DEV=1 bun ./src/tui-react/mock/dialogs-host.tsx","dev:mock-react-ops":"env KOBE_DEV=1 bun ./src/tui-react/ops/mock-host.tsx","dev:mock-react-settings":"env KOBE_DEV=1 bun ./src/tui-react/settings/mock-host.tsx","dev:mock-react-workspace":"env 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","dev:version":"bash ../../scripts/dev-version.sh",build:"bun run scripts/build.ts","build:with-web":"bun run build",compile:"bun run scripts/compile.ts",typecheck:"tsc --noEmit","check-i18n":"bun run scripts/check-i18n.ts",test:"bun run test:fast && bun run test:socket","perf:golden":"bun scripts/perf-golden.ts","test:fast":"vitest run --passWithNoTests --minWorkers=1 --maxWorkers=4","test:socket":"KOBE_INCLUDE_SOCKET=1 vitest run test/daemon --pool forks --minWorkers=1 --maxWorkers=1 --passWithNoTests","test:behavior":"KOBE_INCLUDE_BEHAVIOR=1 vitest run test/behavior --pool forks --minWorkers=1 --maxWorkers=1 --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/headless":"^6.0.0","node-pty":"^1.1.0",react:"^19.2.0","solid-js":"1.9.13",ws:"^8.18.0"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/kobe-daemon":"0.7.11","@tsconfig/bun":"1.0.10","@types/bun":"1.3.14","@types/node":"25.6.2","@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 lS={};M2(lS,{repoSlug:()=>ZQ,releasePageUrl:()=>AA,recommendedGlobalInstallCommand:()=>VA,isNewerSemver:()=>jA,fetchReleaseSummaries:()=>aa,fetchReleaseNotesRange:()=>CA,fetchReleaseNotes:()=>ia,compareSemver:()=>BL,checkLatestVersion:()=>rB,UPDATE_SCRIPT_URL:()=>UL,UPDATE_COMMAND:()=>bX,PACKAGE_NAME:()=>OA,CURRENT_VERSION:()=>F2});function ZQ(){let $=WL.repository?.url;if(!$)return null;let X=$.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!X||!X[1]||!X[2])return null;return`${X[1]}/${X[2]}`}function VA(){return`npm install -g ${OA}@latest`}async function na($){let X=new AbortController,J=setTimeout(()=>X.abort(),KL);try{let Q=$.replace("/","%2F"),Y=await fetch(`https://registry.npmjs.org/${Q}/latest`,{signal:X.signal,headers:{accept:"application/json"}});if(!Y.ok)return null;let q=await Y.json();if(typeof q.version!=="string")return null;return q.version}catch{return null}finally{clearTimeout(J)}}function jA($,X){return BL($,X)>0}function BL($,X){let J=(q)=>q.split("-")[0]??q,Q=J($).split(".").map((q)=>Number.parseInt(q,10)),Y=J(X).split(".").map((q)=>Number.parseInt(q,10));for(let q=0;q<3;q++){let W=Q[q]??0,H=Y[q]??0;if(Number.isNaN(W)||Number.isNaN(H))return 0;if(W>H)return 1;if(W<H)return-1}return 0}async function rB($={}){let X=process.env.KOBE_FAKE_UPDATE;if(X)return{current:F2,latest:X,hasUpdate:jA(X,F2)};if(aG()&&!$.force)return null;let J=await na(OA);if(!J)return null;return{current:F2,latest:J,hasUpdate:jA(J,F2)}}function cS($){if(typeof $!=="string")return null;return $.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function ia($){let X=ZQ();if(!X)return null;let J=`v${$}`,Q=new AbortController,Y=setTimeout(()=>Q.abort(),KL);try{let q=await fetch(`https://api.github.com/repos/${X}/releases/tags/${J}`,{signal:Q.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!q.ok)return null;let W=await q.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(Y)}}async function CA($){let X=ZQ();if(!X)return[];let J=$.limit??100,Q=new AbortController,Y=setTimeout(()=>Q.abort(),KL);try{let q=await fetch(`https://api.github.com/repos/${X}/releases?per_page=${J}`,{signal:Q.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!q.ok)return[];let W=await q.json();if(!Array.isArray(W))return[];return W.map((H)=>{let K=cS(H.tag_name);if(!K||typeof H.html_url!=="string"||typeof H.body!=="string")return null;if(BL(K,$.current)<=0)return null;if(BL(K,$.latest)>0)return null;return{version:K,url:H.html_url,body:H.body}}).filter((H)=>H!==null)}catch{return[]}finally{clearTimeout(Y)}}async function aa($=12){let X=ZQ();if(!X)return[];let J=new AbortController,Q=setTimeout(()=>J.abort(),KL);try{let Y=await fetch(`https://api.github.com/repos/${X}/releases?per_page=${$}`,{signal:J.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!Y.ok)return[];let q=await Y.json();if(!Array.isArray(q))return[];return q.map((W)=>{let H=cS(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(Q)}}function AA($){let X=ZQ();if(!X)return null;return`https://github.com/${X}/releases/tag/v${$}`}var F2,OA,UL="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",bX,KL=3000;var N7=X1(()=>{mS();B4();F2=WL.version,OA=WL.name;bX=`curl -fsSL ${UL} | sh`});import{spawnSync as oa}from"child_process";import{existsSync as ra,statSync as sa}from"fs";import{homedir as ta}from"os";import sB from"path";async function dS($=ea){let X=[],J=(F)=>{if(!F)return;return X.push(F),$.fileExists(F)?F:void 0},Q=$.which("claude");if(Q){if(X.push(`which:${Q}`),$.fileExists(Q))return Q}let Y=$.home(),q=J(sB.join(Y,".claude","local","claude"));if(q)return q;let W=$.env("NVM_BIN");if(W){let F=J(sB.join(W,"claude"));if(F)return F}let H=sB.join(Y,".nvm","versions","node"),K=$.readdir(H).sort().reverse();for(let F of K){let O=J(sB.join(H,F,"bin","claude"));if(O)return O}for(let F of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude","/bin/claude"]){let O=J(F);if(O)return O}for(let F of[".local/bin/claude",".npm-global/bin/claude",".yarn/bin/claude",".bun/bin/claude","bin/claude"]){let O=J(sB.join(Y,F));if(O)return O}throw new ML(X)}var ML,ea;var pS=X1(()=>{ML=class ML extends Error{checkedPaths;constructor($){super(`Claude Code binary not found. Checked: ${$.join(", ")}. Ensure 'claude' is on PATH, or install at ~/.claude/local/claude.`);this.name="ClaudeBinaryNotFoundError",this.checkedPaths=$}};ea={fileExists($){try{return sa($).isFile()}catch{return!1}},env($){return process.env[$]},home(){return ta()},which($){let X=process.platform==="win32"?"where":"which",J=oa(X,[$],{encoding:"utf8"});if(J.status!==0)return;let Q=J.stdout.split(`
|
|
7
|
+
`)}function da($){let X=$.lastIndexOf("/");return X<=0?".":$.slice(0,X)}function RS($){return`cd ${C2($)} && while :; do clear; printf "\\033[1m# %s\\033[0m\\n\\n" ${C2($)}; git status --short --branch 2>/dev/null | sed 's/^/ /' || true; printf "\\n"; if command -v lsd >/dev/null 2>&1; then lsd --tree --git -I node_modules -I .git --depth 2 .; elif command -v eza >/dev/null 2>&1; then eza --tree --git -L 2 -I 'node_modules|.git' .; elif command -v tree >/dev/null 2>&1; then tree -L 2 -I 'node_modules|.git'; else ls -la; fi; sleep 2; done`}function xS($){let X=C2($.worktree),J=C2($.relPath),Q=$.cliInvocation.map(C2).join(" "),Y=`cd ${X} && if ! git diff --quiet HEAD -- ${J} 2>/dev/null; then git diff HEAD -- ${J} | { delta --paging=always 2>/dev/null || less -R; }; else bat --style=plain --paging=always ${J} 2>/dev/null || \${PAGER:-less} ${J} 2>/dev/null || cat ${J}; fi`;return`${Q} ops --worktree ${X} --preview ${J} || { ${Y}; }`}function bS($){return`${j$([...$.cliInvocation,"update-page"])}`}function yS($){let X=$.opener??"open";return[`tmux -L ${C2($.tmuxSocket)} capture-pane -Jp -t '#{pane_id}' -S -500`,`grep -oiE 'https?://[^ "'\\''()<>]+'`,"awk '!seen[$0]++'","{ command -v fzf >/dev/null && fzf --reverse || tail -1; }",`xargs -I{} ${X} {}`].join(" | ")}function HZ($,X={}){let J=[...$,"tasks"];if(X.initialTaskId)J.push("--initial-task-id",X.initialTaskId);return j$(J)}function Zq($){if($.taskId&&$.claudePaneId){let X=$.cliInvocation.map(C2).join(" "),J=$.vendor?` --vendor ${C2($.vendor)}`:"";return`KOBE_FILETREE_WATCH=1 ${X} ops --task-id ${C2($.taskId)} --worktree ${C2($.cwd)} --target-pane ${C2($.claudePaneId)}${J} || { ${RS($.cwd)}; }`}return RS($.cwd)}var PS=32,h7="tasks",xX="claude",R6="ops",P6="shell",nB="workspace_aux",KA=4,S6="@kobe_hidden_shell_pane",N$="@kobe_hidden_tasks_pane",qZ="@kobe_zen_panes",Xq="@kobe_zen",QL="@kobe_tasks_width",ba=16,ya=120,FA=60,aB=50,YL="@kobe_right_width_pct",GL="@kobe_ops_height_pct",va=10,ua=90,TS,UA="trap ':' INT; ",ha=120,ma=5,ca=3600;var r$=X1(()=>{eF();TS=[QL,YL,GL]});function zq($,X,J){if(!X)return $;let Q=$q(X);return Q.ensureReady(),Q.wrapCommand($,{tty:!0,cwd:J})}function D4(){let $=[];for(let X of["KOBE_HOME_DIR","KOBE_DAEMON_SOCKET_PATH","KOBE_TMUX_SOCKET"]){let J=process.env[X];if(J&&J.length>0)$.push(`${X}=${C2(J)}`)}return $.length>0?`${$.join(" ")} `:""}var oB="@kobe_remote";var WZ=X1(()=>{L$();r$()});function vS(){return i$(qL,!0)}function HL(){return i$(uS,!1)}function hS($){rF(uS,$)}var qL="zen.keepTasks",uS="zen.active";var NA=X1(()=>{a$()});var WL;var mS=X1(()=>{WL={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.91",description:"TUI orchestrator for Claude Code (codename)",type:"module",packageManager:"bun@1.3.13",bin:{kobe:"dist/cli/index.js"},files:["dist/cli","dist/web-ui","dist/*.wav","README.md","LICENSE"],publishConfig:{access:"public"},repository:{type:"git",url:"git+https://github.com/Sma1lboy/kobe.git"},homepage:"https://github.com/Sma1lboy/kobe#readme",bugs:{url:"https://github.com/Sma1lboy/kobe/issues"},engines:{bun:">=1.3.11"},scripts:{dev:"env KOBE_DEV=1 bun --conditions=browser ./src/cli/index.ts","dev:mock":"env KOBE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:mock-react":"env KOBE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:mock-react-task-dialogs":"env KOBE_DEV=1 bun ./src/tui-react/component/mock-dialogs-host.tsx","dev:mock-react-history":"env KOBE_DEV=1 bun ./src/tui-react/history/mock-host.tsx","dev:mock-react-filetree":"env KOBE_DEV=1 bun ./src/tui-react/panes/filetree/mock-host.tsx","dev:mock-react-sidebar":"env KOBE_DEV=1 bun ./src/tui-react/panes/sidebar/mock-host.tsx","dev:mock-react-terminal":"env KOBE_DEV=1 bun ./src/tui-react/panes/terminal/mock-host.tsx","dev:mock-react-dialogs":"env KOBE_DEV=1 bun ./src/tui-react/mock/dialogs-host.tsx","dev:mock-react-ops":"env KOBE_DEV=1 bun ./src/tui-react/ops/mock-host.tsx","dev:mock-react-settings":"env KOBE_DEV=1 bun ./src/tui-react/settings/mock-host.tsx","dev:mock-react-workspace":"env 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","dev:version":"bash ../../scripts/dev-version.sh",build:"bun run scripts/build.ts","build:with-web":"bun run build",compile:"bun run scripts/compile.ts",typecheck:"tsc --noEmit","check-i18n":"bun run scripts/check-i18n.ts",test:"bun run test:fast && bun run test:socket","perf:golden":"bun scripts/perf-golden.ts","test:fast":"vitest run --passWithNoTests --minWorkers=1 --maxWorkers=4","test:socket":"KOBE_INCLUDE_SOCKET=1 vitest run test/daemon --pool forks --minWorkers=1 --maxWorkers=1 --passWithNoTests","test:behavior":"KOBE_INCLUDE_BEHAVIOR=1 vitest run test/behavior --pool forks --minWorkers=1 --maxWorkers=1 --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/headless":"^6.0.0","node-pty":"^1.1.0",react:"^19.2.0","solid-js":"1.9.13",ws:"^8.18.0"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/kobe-daemon":"0.7.11","@tsconfig/bun":"1.0.10","@types/bun":"1.3.14","@types/node":"25.6.2","@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 lS={};M2(lS,{repoSlug:()=>ZQ,releasePageUrl:()=>AA,recommendedGlobalInstallCommand:()=>VA,isNewerSemver:()=>jA,fetchReleaseSummaries:()=>aa,fetchReleaseNotesRange:()=>CA,fetchReleaseNotes:()=>ia,compareSemver:()=>BL,checkLatestVersion:()=>rB,UPDATE_SCRIPT_URL:()=>UL,UPDATE_COMMAND:()=>bX,PACKAGE_NAME:()=>OA,CURRENT_VERSION:()=>F2});function ZQ(){let $=WL.repository?.url;if(!$)return null;let X=$.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!X||!X[1]||!X[2])return null;return`${X[1]}/${X[2]}`}function VA(){return`npm install -g ${OA}@latest`}async function na($){let X=new AbortController,J=setTimeout(()=>X.abort(),KL);try{let Q=$.replace("/","%2F"),Y=await fetch(`https://registry.npmjs.org/${Q}/latest`,{signal:X.signal,headers:{accept:"application/json"}});if(!Y.ok)return null;let q=await Y.json();if(typeof q.version!=="string")return null;return q.version}catch{return null}finally{clearTimeout(J)}}function jA($,X){return BL($,X)>0}function BL($,X){let J=(q)=>q.split("-")[0]??q,Q=J($).split(".").map((q)=>Number.parseInt(q,10)),Y=J(X).split(".").map((q)=>Number.parseInt(q,10));for(let q=0;q<3;q++){let W=Q[q]??0,H=Y[q]??0;if(Number.isNaN(W)||Number.isNaN(H))return 0;if(W>H)return 1;if(W<H)return-1}return 0}async function rB($={}){let X=process.env.KOBE_FAKE_UPDATE;if(X)return{current:F2,latest:X,hasUpdate:jA(X,F2)};if(aG()&&!$.force)return null;let J=await na(OA);if(!J)return null;return{current:F2,latest:J,hasUpdate:jA(J,F2)}}function cS($){if(typeof $!=="string")return null;return $.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function ia($){let X=ZQ();if(!X)return null;let J=`v${$}`,Q=new AbortController,Y=setTimeout(()=>Q.abort(),KL);try{let q=await fetch(`https://api.github.com/repos/${X}/releases/tags/${J}`,{signal:Q.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!q.ok)return null;let W=await q.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(Y)}}async function CA($){let X=ZQ();if(!X)return[];let J=$.limit??100,Q=new AbortController,Y=setTimeout(()=>Q.abort(),KL);try{let q=await fetch(`https://api.github.com/repos/${X}/releases?per_page=${J}`,{signal:Q.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!q.ok)return[];let W=await q.json();if(!Array.isArray(W))return[];return W.map((H)=>{let K=cS(H.tag_name);if(!K||typeof H.html_url!=="string"||typeof H.body!=="string")return null;if(BL(K,$.current)<=0)return null;if(BL(K,$.latest)>0)return null;return{version:K,url:H.html_url,body:H.body}}).filter((H)=>H!==null)}catch{return[]}finally{clearTimeout(Y)}}async function aa($=12){let X=ZQ();if(!X)return[];let J=new AbortController,Q=setTimeout(()=>J.abort(),KL);try{let Y=await fetch(`https://api.github.com/repos/${X}/releases?per_page=${$}`,{signal:J.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!Y.ok)return[];let q=await Y.json();if(!Array.isArray(q))return[];return q.map((W)=>{let H=cS(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(Q)}}function AA($){let X=ZQ();if(!X)return null;return`https://github.com/${X}/releases/tag/v${$}`}var F2,OA,UL="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",bX,KL=3000;var N7=X1(()=>{mS();B4();F2=WL.version,OA=WL.name;bX=`curl -fsSL ${UL} | sh`});import{spawnSync as oa}from"child_process";import{existsSync as ra,statSync as sa}from"fs";import{homedir as ta}from"os";import sB from"path";async function dS($=ea){let X=[],J=(F)=>{if(!F)return;return X.push(F),$.fileExists(F)?F:void 0},Q=$.which("claude");if(Q){if(X.push(`which:${Q}`),$.fileExists(Q))return Q}let Y=$.home(),q=J(sB.join(Y,".claude","local","claude"));if(q)return q;let W=$.env("NVM_BIN");if(W){let F=J(sB.join(W,"claude"));if(F)return F}let H=sB.join(Y,".nvm","versions","node"),K=$.readdir(H).sort().reverse();for(let F of K){let O=J(sB.join(H,F,"bin","claude"));if(O)return O}for(let F of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude","/bin/claude"]){let O=J(F);if(O)return O}for(let F of[".local/bin/claude",".npm-global/bin/claude",".yarn/bin/claude",".bun/bin/claude","bin/claude"]){let O=J(sB.join(Y,F));if(O)return O}throw new ML(X)}var ML,ea;var pS=X1(()=>{ML=class ML extends Error{checkedPaths;constructor($){super(`Claude Code binary not found. Checked: ${$.join(", ")}. Ensure 'claude' is on PATH, or install at ~/.claude/local/claude.`);this.name="ClaudeBinaryNotFoundError",this.checkedPaths=$}};ea={fileExists($){try{return sa($).isFile()}catch{return!1}},env($){return process.env[$]},home(){return ta()},which($){let X=process.platform==="win32"?"where":"which",J=oa(X,[$],{encoding:"utf8"});if(J.status!==0)return;let Q=J.stdout.split(`
|
|
8
8
|
`).map((Y)=>Y.trim()).filter(Boolean)[0];if(!Q)return;if(Q.startsWith("claude:")&&Q.includes("aliased to")){let Y=Q.split("aliased to")[1]?.trim();return Y&&ra(Y)?Y:void 0}return Q},readdir($){try{return cB("fs").readdirSync($)}catch{return[]}}}});import{spawnSync as $o}from"child_process";import{existsSync as Xo,statSync as Jo}from"fs";import{homedir as Zo}from"os";import nS from"path";async function iS($=zo){let X=[],J=(W)=>{if(!W)return;return X.push(W),$.fileExists(W)?W:void 0},Q=$.which("codex");if(Q){if(X.push(`which:${Q}`),$.fileExists(Q))return Q}let Y=$.home();for(let W of["/opt/homebrew/bin/codex","/usr/local/bin/codex","/usr/bin/codex","/bin/codex"]){let H=J(W);if(H)return H}let q=$.env("NVM_BIN");if(q){let W=J(nS.join(q,"codex"));if(W)return W}for(let W of[".local/bin/codex",".bun/bin/codex","bin/codex"]){let H=J(nS.join(Y,W));if(H)return H}throw new FL(X)}var FL,zo;var aS=X1(()=>{FL=class FL extends Error{checkedPaths;constructor($){super(`Codex CLI binary not found. Checked: ${$.join(", ")}. Ensure 'codex' is on PATH (e.g. \`brew install codex\` or the official installer).`);this.name="CodexBinaryNotFoundError",this.checkedPaths=$}};zo={fileExists($){try{return Jo($).isFile()}catch{return!1}},env($){return process.env[$]},home(){return Zo()},which($){let X=process.platform==="win32"?"where":"which",J=$o(X,[$],{encoding:"utf8"});if(J.status!==0)return;let Q=J.stdout.split(`
|
|
9
9
|
`).map((Y)=>Y.trim()).filter(Boolean)[0];if(!Q)return;if(Q.startsWith("codex:")&&Q.includes("aliased to")){let Y=Q.split("aliased to")[1]?.trim();return Y&&Xo(Y)?Y:void 0}return Q},readdir($){try{return cB("fs").readdirSync($)}catch{return[]}}}});import{spawnSync as Qo}from"child_process";import{existsSync as Yo,statSync as Go}from"fs";import{homedir as qo}from"os";import BZ from"path";async function oS($=Ho){let X=[],J=(O)=>{if(!O)return;return X.push(O),$.fileExists(O)?O:void 0},Q=$.which("copilot");if(Q){if(X.push(`which:${Q}`),$.fileExists(Q))return Q}let Y=$.platform()==="win32"?["copilot.exe","copilot.cmd","copilot"]:["copilot"],q=(O)=>{if(!O)return;for(let V of Y){let N=J(BZ.join(O,V));if(N)return N}return};for(let O of["/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin"]){let V=q(O);if(V)return V}let W=$.env("NVM_BIN"),H=q(W);if(H)return H;let K=$.home(),F=[BZ.join(K,".npm-global/bin"),BZ.join(K,".local/bin"),BZ.join(K,".bun/bin"),BZ.join(K,"bin")];if($.platform()==="win32"){let O=$.env("APPDATA"),V=$.env("LOCALAPPDATA");if(F.unshift(BZ.join(K,"AppData/Roaming/npm")),O)F.unshift(BZ.join(O,"npm"));if(V)F.unshift(BZ.join(V,"npm"))}for(let O of F){let V=q(O);if(V)return V}throw new LL(X)}var LL,Ho;var rS=X1(()=>{LL=class LL extends Error{checkedPaths;constructor($){super(`GitHub Copilot CLI binary not found. Checked: ${$.join(", ")}. Ensure 'copilot' is on PATH (for example \`npm install -g @github/copilot\` or \`brew install copilot-cli\`).`);this.name="CopilotBinaryNotFoundError",this.checkedPaths=$}};Ho={fileExists($){try{return Go($).isFile()}catch{return!1}},env($){return process.env[$]},home(){return qo()},which($){let X=process.platform==="win32"?"where":"which",J=Qo(X,[$],{encoding:"utf8"});if(J.status!==0)return;let Q=J.stdout.split(`
|
|
10
10
|
`).map((Y)=>Y.trim()).filter(Boolean)[0];if(!Q)return;if(Q.startsWith("copilot:")&&Q.includes("aliased to")){let Y=Q.split("aliased to")[1]?.trim();return Y&&Yo(Y)?Y:void 0}return Q},platform(){return process.platform}}});import{readFileSync as Wo,statSync as Bo}from"fs";import{readFile as Uo,stat as Ko}from"fs/promises";async function Qq($,X=sS){let{size:J}=await Ko($);if(J>X)return"";return Uo($,"utf8")}function tS($,X=sS){let J;try{J=Bo($)}catch(Q){if(Q.code==="ENOENT")return null;throw Q}if(J.size>X)return null;return Wo($,"utf8")}function yX($,X=Mo){return $.length<=X}var sS=104857600,Mo=8388608;var zQ=()=>{};import{homedir as Fo}from"os";import UZ from"path";function Lo($,X){let J=$("CLAUDE_CONFIG_DIR")?.trim();if(J)return UZ.join(J,".claude.json");return UZ.join(X,".claude.json")}function No($,X){let Q=$("CODEX_HOME")?.trim()??UZ.join(X,".codex");return UZ.join(Q,"auth.json")}function jo($,X){let Q=$("COPILOT_HOME")?.trim()??UZ.join(X,".copilot");return UZ.join(Q,"config.json")}function Oo($){let X=$.split(".");if(X.length!==3)return null;let J=X[1];if(!J)return null;let Q=J.replace(/-/g,"+").replace(/_/g,"/"),Y=Q+"=".repeat((4-Q.length%4)%4);try{let q=Buffer.from(Y,"base64").toString("utf8"),W=JSON.parse(q);return typeof W==="object"&&W!==null?W:null}catch{return null}}async function jL($){try{return{found:!0,path:await $()}}catch(X){if(X instanceof ML||X instanceof FL||X instanceof LL)return{found:!1,error:"not found on PATH"};return{found:!1,error:X instanceof Error?X.message:String(X)}}}async function eS($){return(await Promise.all([["claude",()=>$.findClaudeBinary()],["codex",()=>$.findCodexBinary()],["copilot",()=>$.findCopilotBinary()]].map(async([Q,Y])=>(await jL(Y)).found?Q:null))).filter((Q)=>Q!==null)}function Vo($=Yq){if($!==Yq)return eS($);if(NL)return NL;let X=eS($).catch((J)=>{throw NL=null,J});return NL=X,X}async function T3($=Yq){return[...await Vo($),...rG()]}async function OL($=Yq){let X=await jL(()=>$.findClaudeBinary()),J=Lo($.env,$.home()),Q;try{Q=$.readFile(J)}catch(K){return{binary:X,account:{kind:"none"},accountError:`read ${J}: ${K instanceof Error?K.message:String(K)}`}}if(Q===null)return{binary:X,account:{kind:"none"}};let Y;try{Y=JSON.parse(Q)}catch(K){return{binary:X,account:{kind:"none"},accountError:`parse ${J}: ${K instanceof Error?K.message:String(K)}`}}let q=Y?.oauthAccount;if(!q||typeof q!=="object")return{binary:X,account:{kind:"none"}};let W=q,H=typeof W.emailAddress==="string"?W.emailAddress:void 0;if(!H)return{binary:X,account:{kind:"none"}};return{binary:X,account:{kind:"oauth",email:H,organization:typeof W.organizationName==="string"?W.organizationName:void 0,displayName:typeof W.displayName==="string"?W.displayName:void 0,billingType:typeof W.billingType==="string"?W.billingType:void 0}}}async function VL($=Yq){let X=await jL(()=>$.findCodexBinary()),J=No($.env,$.home()),Q;try{Q=$.readFile(J)}catch(F){return{binary:X,account:{kind:"none"},accountError:`read ${J}: ${F instanceof Error?F.message:String(F)}`}}if(Q===null)return{binary:X,account:{kind:"none"}};let Y;try{Y=JSON.parse(Q)}catch(F){return{binary:X,account:{kind:"none"},accountError:`parse ${J}: ${F instanceof Error?F.message:String(F)}`}}let q=Y??{},W=q.tokens,H=typeof W?.id_token==="string"?W.id_token:void 0;if(H){let F=Oo(H);if(!F)return{binary:X,account:{kind:"none"},accountError:"codex id_token: malformed JWT"};let O=typeof F.email==="string"?F.email:void 0,V=F["https://api.openai.com/auth"],N=typeof V==="object"&&V!==null&&!Array.isArray(V)?V:void 0,I=typeof N?.chatgpt_plan_type==="string"?N.chatgpt_plan_type:void 0;if(O)return{binary:X,account:{kind:"chatgpt",email:O,plan:I}};return{binary:X,account:{kind:"none"},accountError:"codex id_token: no email claim"}}let K=q.OPENAI_API_KEY;if(typeof K==="string"&&K.length>0)return{binary:X,account:{kind:"apikey"}};return{binary:X,account:{kind:"none"}}}async function CL($=Yq){let X=await jL(()=>$.findCopilotBinary());for(let q of["COPILOT_GITHUB_TOKEN","GH_TOKEN","GITHUB_TOKEN"])if($.env(q)?.trim())return{binary:X,account:{kind:"token",source:q}};let J=jo($.env,$.home()),Q;try{Q=$.readFile(J)}catch(q){return{binary:X,account:{kind:"none"},accountError:`read ${J}: ${q instanceof Error?q.message:String(q)}`}}if(Q===null)return{binary:X,account:{kind:"none"}};let Y;try{Y=JSON.parse(Q)}catch(q){return{binary:X,account:{kind:"none"},accountError:`parse ${J}: ${q instanceof Error?q.message:String(q)}`}}if(!DA(Y))return{binary:X,account:{kind:"none"}};if($T(Y,["github_token","oauth_token","access_token","token","selectedUser","currentUser","user"]))return{binary:X,account:{kind:"oauth"}};return{binary:X,account:{kind:"none"}}}function DA($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function $T($,X,J=0){if(J>4||!DA($))return!1;for(let[Q,Y]of Object.entries($)){if(X.includes(Q)&&typeof Y==="string"&&Y.length>0)return!0;if(DA(Y)&&$T(Y,X,J+1))return!0}return!1}var Yq,NL=null;var KZ=X1(()=>{Y5();pS();aS();rS();zQ();Yq={readFile($){return tS($)},env($){return process.env[$]},home(){return Fo()},findClaudeBinary(){return dS()},findCodexBinary(){return iS()},findCopilotBinary(){return oS()}}});function XT($,X){return Co.map((J)=>({vendor:"claude",id:$,effort:J,level:J,label:`${X} \xB7 ${J}`,hint:J==="max"?"deepest reasoning":`${J} effort`}))}function ZT($){return/1m/i.test($)?Ao:Do}var Co,JT,Ao=1e6,Do=200000;var zT=X1(()=>{Co=["low","medium","high","xhigh","max"];JT=[{vendor:"claude",id:"claude-opus-4-7[1m]",label:"Opus 4.7 1M",hint:"long context, default"},...XT("claude-opus-4-7[1m]","Opus 4.7 1M"),{vendor:"claude",id:"claude-opus-4-7",label:"Opus 4.7",hint:"most capable, slowest"},...XT("claude-opus-4-7","Opus 4.7"),{vendor:"claude",id:"claude-sonnet-4-6[1m]",label:"sonnet 4.6 (1M)",hint:"long context"},{vendor:"claude",id:"claude-sonnet-4-6",label:"sonnet 4.6"},{vendor:"claude",id:"claude-haiku-4-5-20251001",label:"haiku 4.5",hint:"fastest, cheapest"}]});import{readFileSync as _o}from"fs";import{homedir as Io}from"os";import{join as fo}from"path";function Po(){if(Gq!==void 0)return Gq;try{let $=_o(Ro,"utf8"),X=JSON.parse($);if(!X||typeof X!=="object")return Gq=null,null;let J=X;return Gq={model:typeof J.model==="string"&&J.model.length>0?J.model:void 0},Gq}catch{return Gq=null,null}}function QT(){let $=Po();if($?.model&&$.model.length>0)return $.model;return So}var Ro,Gq,So="claude-opus-4-7[1m]";var YT=X1(()=>{Ro=fo(Io(),".claude","settings.json")});var GT,qT;var HT=X1(()=>{zT();YT();GT={vendorId:"claude",label:"Claude Code",models:JT,permissionModes:[{id:"acceptEdits",label:"accept edits"},{id:"default",label:"default"},{id:"plan",label:"plan mode"}],defaultModelId:QT,contextWindowFor:ZT,smallFastModelId:()=>"claude-haiku-4-5-20251001"},qT={vendorId:"claude",productName:"Claude Code",shortName:"Claude",assistantName:"Claude",inputPlaceholder:"Ask Claude\u2026"}});import{createHash as To}from"crypto";function qq($){let X=$.maxFiles??8,J=new Map;function Q(q,W){return To("sha256").update(q.slice(0,W)).digest("hex")}function Y(q,W){if(J.delete(q),J.set(q,W),J.size>X){let H=J.keys().next().value;if(H!==void 0)J.delete(H)}}return function(W,H,K){let F=H.lastIndexOf(`
|
|
@@ -532,7 +532,7 @@ ${ld}
|
|
|
532
532
|
`)});import{homedir as F61}from"os";async function id($={}){let X=$.homeDir??process.env.KOBE_HOME_DIR??F61(),J=new NH({homeDir:X});await J.load();let Q=new RZ,Y=new VN({store:J,worktrees:Q});return{homeDir:X,orchestrator:Y,store:J,worktrees:Q,async close(){Y.dispose()}}}var ad=X1(()=>{BU();VK();FU()});var rd={};M2(rd,{runDaemonSubcommand:()=>N61});function od($){$.write(["Usage: kobe daemon <command>","","Commands:"," status Print the running daemon's status JSON (default)"," start Run the daemon in the foreground (this process becomes it)"," stop Ask the running daemon to shut down"," restart Stop the daemon (graceful \u2192 SIGTERM \u2192 SIGKILL) and respawn it",""].join(`
|
|
533
533
|
`))}function L61(){let $=process.env.KOBE_DAEMON_WEB_PORT?.trim();if($==="0"||$==="off"||$==="false")return;let X=$?Number.parseInt($,10):5174;return Number.isFinite(X)&&X>0?X:5174}async function N61($){let[X="status"]=$,J=x6(),Q=R9();if(X==="--help"||X==="-h"||X==="help"){od(process.stdout);return}if(X==="status"){let H=new e8(J);try{let K=await H.request("daemon.status");console.log(JSON.stringify(K,null,2))}catch{let K=await uq(Q);if(K)console.log(`kobe daemon: no daemon socket at ${J} (stale pidfile pid=${K})`);else console.log(`kobe daemon: no daemon running at ${J}`);process.exitCode=1}finally{H.close()}return}if(X==="stop"){let H=new e8(J);try{await H.request("daemon.stop"),console.log("kobe daemon: stop requested")}catch{console.log(`kobe daemon: no daemon running at ${J}`)}finally{H.close()}return}if(X==="restart"){await uX(J,Q),(await J3()).close(),console.log(`kobe daemon: restarted, listening on ${J}`);return}if(X!=="start")process.stderr.write(`kobe daemon: unknown command "${X}"
|
|
534
534
|
|
|
535
|
-
`),od(process.stderr),process.exit(2);Sg(FQ()),CN();let Y=await id(),q=await Ux(Y.orchestrator,{socketPath:J,pidPath:Q,homeDir:Y.homeDir,webPort:L61(),webHost:process.env.KOBE_WEB_HOST,webStaticDir:process.env.KOBE_DAEMON_WEB_STATIC_DIR,onStop:async()=>{await Y.close()}});if(console.log(`kobe daemon: listening on ${q.socketPath}`),q.webPort)console.log(`kobe daemon: web transport listening on http://127.0.0.1:${q.webPort}`);let W=async()=>{await q.close(),await Y.close(),process.exit(0)};process.once("SIGINT",()=>void W()),process.once("SIGTERM",()=>void W())}var sd=X1(()=>{VZ();V8();zU();GD();vX();dN();ad()});function DH($,X={}){let J={};for(let[Q,Y]of Object.entries($)){if(j61.has(Q))continue;if(O61.some((q)=>Q.startsWith(q)))continue;J[Q]=Y}return{...J,...X}}var j61,O61;var XV=X1(()=>{j61=new Set(["TERM_PROGRAM","TERM_PROGRAM_VERSION","TERM_SESSION_ID","TERM_FEATURES","LC_TERMINAL","LC_TERMINAL_VERSION","__CFBundleIdentifier","VTE_VERSION","WT_SESSION","WT_PROFILE_ID","TMUX","TMUX_PANE","ZELLIJ","STY","WINDOW"]),O61=["ITERM_","KITTY_","GHOSTTY_","WEZTERM_","ALACRITTY_","KONSOLE_","ZELLIJ_"]});import{StringDecoder as V61}from"string_decoder";class hR{sessions=new Map;opts;constructor($={}){this.opts=$}open($,X,J,Q){let Y=this.sessions.get($);if(!Y)Y=this.spawn($,X),this.sessions.set($,Y);else if(Y.alive&&(Y.cols!==X.cols||Y.rows!==X.rows))this.resize($,X.cols,X.rows);return Y.sinks.set(J,Q),{replay:Buffer.concat(Y.chunks).toString("base64"),alive:Y.alive}}write($,X){let J=this.sessions.get($);if(!J?.alive||X.length===0)return;try{J.proc?.terminal?.write(X)}catch{this.markExited(J)}}resize($,X,J){let Q=this.sessions.get($);if(!Q?.alive)return;Q.cols=X,Q.rows=J;try{Q.proc?.terminal?.resize(X,J)}catch{this.markExited(Q)}}kill($){let X=this.sessions.get($);if(!X)return;this.sessions.delete($),this.endChild(X)}detach($,X){this.sessions.get($)?.sinks.delete(X)}detachClient($){for(let X of this.sessions.values())X.sinks.delete($)}list(){return Array.from(this.sessions.values(),($)=>({key:$.key,alive:$.alive,pid:$.proc?.pid??null,command:$.command,title:$.title}))}sweepTasks($){for(let X of Array.from(this.sessions.keys())){let J=X.split("::")[0]??X;if(!$.has(J))this.kill(X)}}killAll(){for(let $ of Array.from(this.sessions.keys()))this.kill($)}liveCount(){let $=0;for(let X of this.sessions.values())if(X.alive)$++;return $}spawn($,X){let J=X.command&&X.command.length>0?[...X.command]:[X.shell??process.env.SHELL??"/bin/bash"],Q={key:$,proc:null,alive:!0,chunks:[],bytes:0,cols:X.cols,rows:X.rows,command:J,title:"",titleCarry:"",titleDecoder:new V61("utf8"),sinks:new Map};try{Q.proc=Bun.spawn(J,{cwd:X.cwd,env:DH(process.env,{TERM:"xterm-256color",COLUMNS:String(X.cols),LINES:String(X.rows),BASH_SILENCE_DEPRECATION_WARNING:"1",KOBE_TERMINAL_PTY:"1"}),terminal:{cols:X.cols,rows:X.rows,name:"xterm-256color",data:(Y,q)=>this.onData(Q,q),exit:()=>this.markExited(Q)}}),Q.proc.exited.then(()=>this.markExited(Q),()=>this.markExited(Q)),this.opts.log?.("pty",`spawned ${J[0]} for ${$} (pid ${Q.proc.pid})`),this.opts.onSessionStart?.()}catch(Y){Q.alive=!1,this.opts.log?.("pty",`spawn failed for ${$}: ${Y instanceof Error?Y.message:String(Y)}`)}return Q}scanTitle($,X){let J=$.titleCarry+$.titleDecoder.write(X),Q=null,Y=0;uR.lastIndex=0;for(let H=uR.exec(J);H;H=uR.exec(J))Q=H[1]??"",Y=H.index+H[0].length;if(Q!==null)$.title=Q;let q=J.slice(Y),W=q.lastIndexOf("\x1B");$.titleCarry=W===-1?"":q.slice(W,W+A61)}onData($,X){let J=typeof X==="string"?Buffer.from(X,"utf8"):Buffer.from(X);this.scanTitle($,J),$.chunks.push(J),$.bytes+=J.byteLength;while($.bytes>(this.opts.scrollbackCap??C61)&&$.chunks.length>1){let Y=$.chunks.shift();if(Y)$.bytes-=Y.byteLength}if($.sinks.size===0)return;let Q={type:"event",name:"pty.data",payload:{key:$.key,data:J.toString("base64")}};for(let Y of $.sinks.values())Y(Q)}markExited($){if(!$.alive)return;$.alive=!1;let X={type:"event",name:"pty.exit",payload:{key:$.key}};for(let J of $.sinks.values())J(X);this.opts.log?.("pty",`session ${$.key} exited`),this.opts.onSessionEnd?.()}endChild($){let X=$.alive;if(this.markExited($),!X)return;try{$.proc?.terminal?.close()}catch{}try{$.proc?.kill("SIGTERM")}catch{}}}var C61=524288,uR,A61=1024;var td=X1(()=>{XV();uR=/\x1b\][02];([^\x07\x1b]*)(?:\x07|\x1b\\)/g});import{mkdir as ed,unlink as mR,writeFile as D61}from"fs/promises";import{createServer as _61}from"net";import{dirname as $p}from"path";import{StringDecoder as I61}from"string_decoder";function f61(){let $=process.env.KOBE_PTY_IDLE_EXIT_MS;if($===void 0)return Xp;let X=Number($);return Number.isFinite(X)&&X>=0?X:Xp}async function Jp($={}){let X=$.socketPath??OZ(),J=$.pidPath??LQ(),Q=$.idleExitMs||f61(),Y=$.log??(()=>{}),q=new Set,W=!1,H=null,K=()=>{if(H)clearTimeout(H);H=null},F=()=>{if(W)return;K(),H=setTimeout(()=>{if(W||O.liveCount()>0)return;Y("idle",`no live sessions for ${Q}ms \u2014 exiting`),I()},Q)},O=new hR({onSessionStart:K,onSessionEnd:()=>{if(O.liveCount()===0)F()},log:Y});await ed($p(X),{recursive:!0}),await ed($p(J),{recursive:!0}),await mR(X).catch(()=>{});let V=_61((A)=>{let h={socket:A,writer:new UU(A),buffer:""};q.add(h);let S=new I61("utf8");A.on("data",(f)=>{h.buffer+=S.write(f),_(h)}),A.on("error",()=>{}),A.on("close",()=>{q.delete(h),O.detachClient(h)})}),N={socketPath:X,pidPath:J,async close(){if(W)return;W=!0,K(),O.killAll();for(let A of Array.from(q))A.socket.destroy();await new Promise((A)=>V.close(()=>A())),await mR(X).catch(()=>{}),await mR(J).catch(()=>{})}};async function I(){await N.close().catch((A)=>N5("pty-host-shutdown",A)),$.onStop?.()}function P(A,h){switch(A.name){case"hello":return{protocolVersion:V$,ptyHost:!0,pid:process.pid};case"pty.open":{let S=b3(A.payload);return O.open(_2(S,"key"),{cwd:_2(S,"cwd"),command:Array.isArray(S.command)?S.command.filter((f)=>typeof f==="string"):void 0,shell:typeof S.shell==="string"?S.shell:void 0,cols:typeof S.cols==="number"?S.cols:80,rows:typeof S.rows==="number"?S.rows:24},h,(f)=>RK(h,f))}case"pty.write":{let S=b3(A.payload);return O.write(_2(S,"key"),typeof S.data==="string"?S.data:""),{}}case"pty.resize":{let S=b3(A.payload);return O.resize(_2(S,"key"),typeof S.cols==="number"?S.cols:80,typeof S.rows==="number"?S.rows:24),{}}case"pty.kill":return O.kill(_2(b3(A.payload),"key")),{};case"pty.detach":return O.detach(_2(b3(A.payload),"key"),h),{};case"pty.list":return{sessions:O.list()};case"pty.sweep":{let S=b3(A.payload),f=Array.isArray(S.liveTaskIds)?S.liveTaskIds.filter((E)=>typeof E==="string"):[];return O.sweepTasks(new Set(f)),{}}case"daemon.stop":return setTimeout(()=>void I(),0).unref(),{};default:throw Error(`unknown pty-host request: ${A.name}`)}}function _(A){let h=A.buffer.indexOf(`
|
|
535
|
+
`),od(process.stderr),process.exit(2);Sg(FQ()),CN();let Y=await id(),q=await Ux(Y.orchestrator,{socketPath:J,pidPath:Q,homeDir:Y.homeDir,webPort:L61(),webHost:process.env.KOBE_WEB_HOST,webStaticDir:process.env.KOBE_DAEMON_WEB_STATIC_DIR,onStop:async()=>{await Y.close()}});if(console.log(`kobe daemon: listening on ${q.socketPath}`),q.webPort)console.log(`kobe daemon: web transport listening on http://127.0.0.1:${q.webPort}`);let W=async()=>{await q.close(),await Y.close(),process.exit(0)};process.once("SIGINT",()=>void W()),process.once("SIGTERM",()=>void W())}var sd=X1(()=>{VZ();V8();zU();GD();vX();dN();ad()});function DH($,X={}){let J={};for(let[Q,Y]of Object.entries($)){if(j61.has(Q))continue;if(O61.some((q)=>Q.startsWith(q)))continue;J[Q]=Y}return{...J,...X}}var j61,O61;var XV=X1(()=>{j61=new Set(["TERM_PROGRAM","TERM_PROGRAM_VERSION","TERM_SESSION_ID","TERM_FEATURES","LC_TERMINAL","LC_TERMINAL_VERSION","__CFBundleIdentifier","VTE_VERSION","WT_SESSION","WT_PROFILE_ID","TMUX","TMUX_PANE","ZELLIJ","STY","WINDOW"]),O61=["ITERM_","KITTY_","GHOSTTY_","WEZTERM_","ALACRITTY_","KONSOLE_","ZELLIJ_"]});import{StringDecoder as V61}from"string_decoder";class hR{sessions=new Map;opts;constructor($={}){this.opts=$}open($,X,J,Q){let Y=this.sessions.get($);if(!Y)Y=this.spawn($,X),this.sessions.set($,Y);else if(Y.alive&&(Y.cols!==X.cols||Y.rows!==X.rows))this.resize($,X.cols,X.rows);return Y.sinks.set(J,Q),{replay:Buffer.concat(Y.chunks).toString("base64"),alive:Y.alive,pid:Y.proc?.pid??null}}write($,X){let J=this.sessions.get($);if(!J?.alive||X.length===0)return;try{J.proc?.terminal?.write(X)}catch{this.markExited(J)}}resize($,X,J){let Q=this.sessions.get($);if(!Q?.alive)return;Q.cols=X,Q.rows=J;try{Q.proc?.terminal?.resize(X,J)}catch{this.markExited(Q)}}kill($){let X=this.sessions.get($);if(!X)return;this.sessions.delete($),this.endChild(X)}detach($,X){this.sessions.get($)?.sinks.delete(X)}detachClient($){for(let X of this.sessions.values())X.sinks.delete($)}list(){return Array.from(this.sessions.values(),($)=>({key:$.key,alive:$.alive,pid:$.proc?.pid??null,command:$.command,title:$.title}))}sweepTasks($){for(let X of Array.from(this.sessions.keys())){let J=X.split("::")[0]??X;if(!$.has(J))this.kill(X)}}killAll(){for(let $ of Array.from(this.sessions.keys()))this.kill($)}liveCount(){let $=0;for(let X of this.sessions.values())if(X.alive)$++;return $}spawn($,X){let J=X.command&&X.command.length>0?[...X.command]:[X.shell??process.env.SHELL??"/bin/bash"],Q={key:$,proc:null,alive:!0,chunks:[],bytes:0,cols:X.cols,rows:X.rows,command:J,title:"",titleCarry:"",titleDecoder:new V61("utf8"),sinks:new Map};try{Q.proc=Bun.spawn(J,{cwd:X.cwd,env:DH(process.env,{TERM:"xterm-256color",COLUMNS:String(X.cols),LINES:String(X.rows),BASH_SILENCE_DEPRECATION_WARNING:"1",KOBE_TERMINAL_PTY:"1"}),terminal:{cols:X.cols,rows:X.rows,name:"xterm-256color",data:(Y,q)=>this.onData(Q,q),exit:()=>this.markExited(Q)}}),Q.proc.exited.then(()=>this.markExited(Q),()=>this.markExited(Q)),this.opts.log?.("pty",`spawned ${J[0]} for ${$} (pid ${Q.proc.pid})`),this.opts.onSessionStart?.()}catch(Y){Q.alive=!1,this.opts.log?.("pty",`spawn failed for ${$}: ${Y instanceof Error?Y.message:String(Y)}`)}return Q}scanTitle($,X){let J=$.titleCarry+$.titleDecoder.write(X),Q=null,Y=0;uR.lastIndex=0;for(let H=uR.exec(J);H;H=uR.exec(J))Q=H[1]??"",Y=H.index+H[0].length;if(Q!==null)$.title=Q;let q=J.slice(Y),W=q.lastIndexOf("\x1B");$.titleCarry=W===-1?"":q.slice(W,W+A61)}onData($,X){let J=typeof X==="string"?Buffer.from(X,"utf8"):Buffer.from(X);this.scanTitle($,J),$.chunks.push(J),$.bytes+=J.byteLength;while($.bytes>(this.opts.scrollbackCap??C61)&&$.chunks.length>1){let Y=$.chunks.shift();if(Y)$.bytes-=Y.byteLength}if($.sinks.size===0)return;let Q={type:"event",name:"pty.data",payload:{key:$.key,data:J.toString("base64")}};for(let Y of $.sinks.values())Y(Q)}markExited($){if(!$.alive)return;$.alive=!1;let X={type:"event",name:"pty.exit",payload:{key:$.key,pid:$.proc?.pid??null}};for(let J of $.sinks.values())J(X);this.opts.log?.("pty",`session ${$.key} exited`),this.opts.onSessionEnd?.()}endChild($){let X=$.alive;if(this.markExited($),!X)return;try{$.proc?.terminal?.close()}catch{}try{$.proc?.kill("SIGTERM")}catch{}}}var C61=524288,uR,A61=1024;var td=X1(()=>{XV();uR=/\x1b\][02];([^\x07\x1b]*)(?:\x07|\x1b\\)/g});import{mkdir as ed,unlink as mR,writeFile as D61}from"fs/promises";import{createServer as _61}from"net";import{dirname as $p}from"path";import{StringDecoder as I61}from"string_decoder";function f61(){let $=process.env.KOBE_PTY_IDLE_EXIT_MS;if($===void 0)return Xp;let X=Number($);return Number.isFinite(X)&&X>=0?X:Xp}async function Jp($={}){let X=$.socketPath??OZ(),J=$.pidPath??LQ(),Q=$.idleExitMs||f61(),Y=$.log??(()=>{}),q=new Set,W=!1,H=null,K=()=>{if(H)clearTimeout(H);H=null},F=()=>{if(W)return;K(),H=setTimeout(()=>{if(W||O.liveCount()>0)return;Y("idle",`no live sessions for ${Q}ms \u2014 exiting`),I()},Q)},O=new hR({onSessionStart:K,onSessionEnd:()=>{if(O.liveCount()===0)F()},log:Y});await ed($p(X),{recursive:!0}),await ed($p(J),{recursive:!0}),await mR(X).catch(()=>{});let V=_61((A)=>{let h={socket:A,writer:new UU(A),buffer:""};q.add(h);let S=new I61("utf8");A.on("data",(f)=>{h.buffer+=S.write(f),_(h)}),A.on("error",()=>{}),A.on("close",()=>{q.delete(h),O.detachClient(h)})}),N={socketPath:X,pidPath:J,async close(){if(W)return;W=!0,K(),O.killAll();for(let A of Array.from(q))A.socket.destroy();await new Promise((A)=>V.close(()=>A())),await mR(X).catch(()=>{}),await mR(J).catch(()=>{})}};async function I(){await N.close().catch((A)=>N5("pty-host-shutdown",A)),$.onStop?.()}function P(A,h){switch(A.name){case"hello":return{protocolVersion:V$,ptyHost:!0,pid:process.pid};case"pty.open":{let S=b3(A.payload);return O.open(_2(S,"key"),{cwd:_2(S,"cwd"),command:Array.isArray(S.command)?S.command.filter((f)=>typeof f==="string"):void 0,shell:typeof S.shell==="string"?S.shell:void 0,cols:typeof S.cols==="number"?S.cols:80,rows:typeof S.rows==="number"?S.rows:24},h,(f)=>RK(h,f))}case"pty.write":{let S=b3(A.payload);return O.write(_2(S,"key"),typeof S.data==="string"?S.data:""),{}}case"pty.resize":{let S=b3(A.payload);return O.resize(_2(S,"key"),typeof S.cols==="number"?S.cols:80,typeof S.rows==="number"?S.rows:24),{}}case"pty.kill":return O.kill(_2(b3(A.payload),"key")),{};case"pty.detach":return O.detach(_2(b3(A.payload),"key"),h),{};case"pty.list":return{sessions:O.list()};case"pty.sweep":{let S=b3(A.payload),f=Array.isArray(S.liveTaskIds)?S.liveTaskIds.filter((E)=>typeof E==="string"):[];return O.sweepTasks(new Set(f)),{}}case"daemon.stop":return setTimeout(()=>void I(),0).unref(),{};default:throw Error(`unknown pty-host request: ${A.name}`)}}function _(A){let h=A.buffer.indexOf(`
|
|
536
536
|
`);while(h!==-1){let S=A.buffer.slice(0,h);if(A.buffer=A.buffer.slice(h+1),S.trim().length>0){let f=null;try{f=JSON.parse(S)}catch{RK(A,{type:"response",id:"parse-error",error:{message:"malformed frame"}})}if(f)if(f.type!=="request")RK(A,{type:"response",id:"parse-error",error:{message:"requests only"}});else try{RK(A,{type:"response",id:f.id,name:f.name,payload:P(f,A)})}catch(E){RK(A,{type:"response",id:f.id,name:f.name,error:{message:E instanceof Error?E.message:String(E)}})}}h=A.buffer.indexOf(`
|
|
537
537
|
`)}}return await new Promise((A,h)=>{V.once("error",h),V.listen(X,()=>A())}),await D61(J,`${process.pid}
|
|
538
538
|
`,"utf8"),F(),Y("boot",`pty host listening on ${X}`),N}function RK($,X){$.writer.write(UQ(X),!0)}var Xp=60000;var Zp=X1(()=>{vX();w6();td()});var zp={};M2(zp,{runPtyHostSubcommand:()=>R61});async function R61($){CN();let X=await Jp({log:(Q,Y)=>console.log(`[pty-host ${Q}] ${Y}`),onStop:()=>process.exit(0)});console.log(`kobe pty-host: listening on ${X.socketPath}`);let J=async()=>{await X.close(),process.exit(0)};process.once("SIGINT",()=>void J()),process.once("SIGTERM",()=>void J())}var Qp=X1(()=>{Zp()});import{existsSync as P61,readFileSync as S61}from"fs";import{homedir as T61}from"os";import{join as Yp}from"path";function dR($={}){return["skills","add",g61,"--skill","kobe","--agent",$.agent??JV]}function ZV($={}){return`npx ${dR($).join(" ")}`}function pR($={}){let X=$.home??T61(),J=$.cwd??process.cwd();return[Yp(X,Gp),Yp(J,Gp)]}function E61($){let X=$.match(/kobe-skill-version:\s*(\d+)/);return X?Number.parseInt(X[1],10):null}function SK($){let X=pR($).find((Y)=>P61(Y));if(!X)return{installed:!1,installedVersion:null,currentVersion:cR,stale:!1};let J=null;try{J=E61(S61(X,"utf8"))}catch{J=null}let Q=J===null||J<cR;return{installed:!0,installedVersion:J,currentVersion:cR,stale:Q}}function qp(){let $=SK();if(!$.installed){if(n4(lR)==="1")return;F$(lR,"1"),process.stderr.write(`
|
|
@@ -627,7 +627,7 @@ ${x.join(`
|
|
|
627
627
|
|
|
628
628
|
`),{leaks:r,details:j1}}}function A(d){return P?.trackDisposable(d),d}function h(d){P?.markAsDisposed(d)}function S(d,Y1){P?.setParent(d,Y1)}function f(d){return typeof d=="object"&&d!==null&&typeof d.dispose=="function"&&d.dispose.length===0}function E(d){if(I.Iterable.is(d)){let Y1=[];for(let r of d)if(r)try{r.dispose()}catch(M1){Y1.push(M1)}if(Y1.length===1)throw Y1[0];if(Y1.length>1)throw AggregateError(Y1,"Encountered errors while disposing of store");return Array.isArray(d)?[]:d}if(d)return d.dispose(),d}function b(d){let Y1=A({dispose:(0,N.createSingleCallFunction)(()=>{h(Y1),d()})});return Y1}H.DisposableTracker=_;class y{static{this.DISABLE_DISPOSED_WARNING=!1}constructor(){this._toDispose=new Set,this._isDisposed=!1,A(this)}dispose(){this._isDisposed||(h(this),this._isDisposed=!0,this.clear())}get isDisposed(){return this._isDisposed}clear(){if(this._toDispose.size!==0)try{E(this._toDispose)}finally{this._toDispose.clear()}}add(d){if(!d)return d;if(d===this)throw Error("Cannot register a disposable on itself!");return S(d,this),this._isDisposed?y.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(d),d}delete(d){if(d){if(d===this)throw Error("Cannot dispose a disposable on itself!");this._toDispose.delete(d),d.dispose()}}deleteAndLeak(d){d&&this._toDispose.has(d)&&(this._toDispose.delete(d),S(d,null))}}H.DisposableStore=y;class p{static{this.None=Object.freeze({dispose(){}})}constructor(){this._store=new y,A(this),S(this._store,this)}dispose(){h(this),this._store.dispose()}_register(d){if(d===this)throw Error("Cannot register a disposable on itself!");return this._store.add(d)}}H.Disposable=p;class o{constructor(){this._isDisposed=!1,A(this)}get value(){return this._isDisposed?void 0:this._value}set value(d){this._isDisposed||d===this._value||(this._value?.dispose(),d&&S(d,this),this._value=d)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,h(this),this._value?.dispose(),this._value=void 0}clearAndLeak(){let d=this._value;return this._value=void 0,d&&S(d,null),d}}H.MutableDisposable=o,H.MandatoryMutableDisposable=class{constructor(d){this._disposable=new o,this._isDisposed=!1,this._disposable.value=d}get value(){return this._disposable.value}set value(d){this._isDisposed||d===this._disposable.value||(this._disposable.value=d)}dispose(){this._isDisposed=!0,this._disposable.dispose()}},H.RefCountedDisposable=class{constructor(d){this._disposable=d,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,A(this)}set(d){let Y1=d;return this.unset=()=>Y1=void 0,this.isset=()=>Y1!==void 0,this.dispose=()=>{Y1&&(Y1(),Y1=void 0,h(this))},this}},H.ReferenceCollection=class{constructor(){this.references=new Map}acquire(d,...Y1){let r=this.references.get(d);r||(r={counter:0,object:this.createReferencedObject(d,...Y1)},this.references.set(d,r));let{object:M1}=r,I1=(0,N.createSingleCallFunction)(()=>{--r.counter==0&&(this.destroyReferencedObject(d,r.object),this.references.delete(d))});return r.counter++,{object:M1,dispose:I1}}},H.AsyncReferenceCollection=class{constructor(d){this.referenceCollection=d}async acquire(d,...Y1){let r=this.referenceCollection.acquire(d,...Y1);try{return{object:await r.object,dispose:()=>r.dispose()}}catch(M1){throw r.dispose(),M1}}},H.ImmortalReference=class{constructor(d){this.object=d}dispose(){}};class G1{constructor(){this._store=new Map,this._isDisposed=!1,A(this)}dispose(){h(this),this._isDisposed=!0,this.clearAndDisposeAll()}clearAndDisposeAll(){if(this._store.size)try{E(this._store.values())}finally{this._store.clear()}}has(d){return this._store.has(d)}get size(){return this._store.size}get(d){return this._store.get(d)}set(d,Y1,r=!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),r||this._store.get(d)?.dispose(),this._store.set(d,Y1)}deleteAndDispose(d){this._store.get(d)?.dispose(),this._store.delete(d)}deleteAndLeak(d){let Y1=this._store.get(d);return this._store.delete(d),Y1}keys(){return this._store.keys()}values(){return this._store.values()}[Symbol.iterator](){return this._store[Symbol.iterator]()}}H.DisposableMap=G1},6317:(W,H)=>{Object.defineProperty(H,"__esModule",{value:!0}),H.LinkedList=void 0;class K{static{this.Undefined=new K(void 0)}constructor(O){this.element=O,this.next=K.Undefined,this.prev=K.Undefined}}class F{constructor(){this._first=K.Undefined,this._last=K.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===K.Undefined}clear(){let O=this._first;for(;O!==K.Undefined;){let V=O.next;O.prev=K.Undefined,O.next=K.Undefined,O=V}this._first=K.Undefined,this._last=K.Undefined,this._size=0}unshift(O){return this._insert(O,!1)}push(O){return this._insert(O,!0)}_insert(O,V){let N=new K(O);if(this._first===K.Undefined)this._first=N,this._last=N;else if(V){let P=this._last;this._last=N,N.prev=P,P.next=N}else{let P=this._first;this._first=N,N.next=P,P.prev=N}this._size+=1;let I=!1;return()=>{I||(I=!0,this._remove(N))}}shift(){if(this._first!==K.Undefined){let O=this._first.element;return this._remove(this._first),O}}pop(){if(this._last!==K.Undefined){let O=this._last.element;return this._remove(this._last),O}}_remove(O){if(O.prev!==K.Undefined&&O.next!==K.Undefined){let V=O.prev;V.next=O.next,O.next.prev=V}else O.prev===K.Undefined&&O.next===K.Undefined?(this._first=K.Undefined,this._last=K.Undefined):O.next===K.Undefined?(this._last=this._last.prev,this._last.next=K.Undefined):O.prev===K.Undefined&&(this._first=this._first.next,this._first.prev=K.Undefined);this._size-=1}*[Symbol.iterator](){let O=this._first;for(;O!==K.Undefined;)yield O.element,O=O.next}}H.LinkedList=F},2608:(W,H)=>{var K;Object.defineProperty(H,"__esModule",{value:!0}),H.SetMap=H.BidirectionalMap=H.CounterSet=H.Touch=void 0,H.getOrSet=function(F,O,V){let N=F.get(O);return N===void 0&&(N=V,F.set(O,N)),N},H.mapToString=function(F){let O=[];return F.forEach((V,N)=>{O.push(`${N} => ${V}`)}),`Map(${F.size}) {${O.join(", ")}}`},H.setToString=function(F){let O=[];return F.forEach((V)=>{O.push(V)}),`Set(${F.size}) {${O.join(", ")}}`},H.mapsStrictEqualIgnoreOrder=function(F,O){if(F===O)return!0;if(F.size!==O.size)return!1;for(let[V,N]of F)if(!O.has(V)||O.get(V)!==N)return!1;for(let[V]of O)if(!F.has(V))return!1;return!0},function(F){F[F.None=0]="None",F[F.AsOld=1]="AsOld",F[F.AsNew=2]="AsNew"}(K||(H.Touch=K={})),H.CounterSet=class{constructor(){this.map=new Map}add(F){return this.map.set(F,(this.map.get(F)||0)+1),this}delete(F){let O=this.map.get(F)||0;return O!==0&&(O--,O===0?this.map.delete(F):this.map.set(F,O),!0)}has(F){return this.map.has(F)}},H.BidirectionalMap=class{constructor(F){if(this._m1=new Map,this._m2=new Map,F)for(let[O,V]of F)this.set(O,V)}clear(){this._m1.clear(),this._m2.clear()}set(F,O){this._m1.set(F,O),this._m2.set(O,F)}get(F){return this._m1.get(F)}getKey(F){return this._m2.get(F)}delete(F){let O=this._m1.get(F);return O!==void 0&&(this._m1.delete(F),this._m2.delete(O),!0)}forEach(F,O){this._m1.forEach((V,N)=>{F.call(O,V,N,this)})}keys(){return this._m1.keys()}values(){return this._m1.values()}},H.SetMap=class{constructor(){this.map=new Map}add(F,O){let V=this.map.get(F);V||(V=new Set,this.map.set(F,V)),V.add(O)}delete(F,O){let V=this.map.get(F);V&&(V.delete(O),V.size===0&&this.map.delete(F))}forEach(F,O){let V=this.map.get(F);V&&V.forEach(O)}get(F){return this.map.get(F)||new Set}}},9725:(W,H)=>{Object.defineProperty(H,"__esModule",{value:!0}),H.StopWatch=void 0;let K=globalThis.performance&&typeof globalThis.performance.now=="function";class F{static create(O){return new F(O)}constructor(O){this._now=K&&O===!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=F}},X={};function J(W){var H=X[W];if(H!==void 0)return H.exports;var K=X[W]={exports:{}};return $[W].call(K.exports,K,K.exports,J),K.exports}var Q={};(()=>{var W=Q;Object.defineProperty(W,"__esModule",{value:!0}),W.Terminal=void 0;let H=J(5101),K=J(6097),F=J(4335),O=J(5856),V=J(3027),N=J(7150),I=["cols","rows"];class P extends N.Disposable{constructor(_){super(),this._core=this._register(new O.Terminal(_)),this._addonManager=this._register(new V.AddonManager),this._publicOptions={...this._core.options};let A=(S)=>this._core.options[S],h=(S,f)=>{this._checkReadonlyOptions(S),this._core.options[S]=f};for(let S in this._core.options){Object.defineProperty(this._publicOptions,S,{get:()=>this._core.options[S],set:(E)=>{this._checkReadonlyOptions(S),this._core.options[S]=E}});let f={get:A.bind(this,S),set:h.bind(this,S)};Object.defineProperty(this._publicOptions,S,f)}}_checkReadonlyOptions(_){if(I.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 K.ParserApi(this._core)),this._parser}get unicode(){return this._checkProposedApi(),new F.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,A="none";switch(this._core.coreMouseService.activeProtocol){case"X10":A="x10";break;case"VT200":A="vt200";break;case"DRAG":A="drag";break;case"ANY":A="any"}return{applicationCursorKeysMode:_.applicationCursorKeys,applicationKeypadMode:_.applicationKeypad,bracketedPasteMode:_.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:A,originMode:_.origin,reverseWraparoundMode:_.reverseWraparound,sendFocusMode:_.sendFocus,synchronizedOutputMode:_.synchronizedOutput,wraparoundMode:_.wraparound}}get options(){return this._publicOptions}set options(_){for(let A in _)this._publicOptions[A]=_[A]}input(_,A=!0){this._core.input(_,A)}resize(_,A){this._verifyIntegers(_,A),this._core.resize(_,A)}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(_,A){this._core.write(_,A)}writeln(_,A){this._core.write(_),this._core.write(`\r
|
|
629
629
|
`,A)}reset(){this._core.reset()}loadAddon(_){this._addonManager.loadAddon(this,_)}_verifyIntegers(..._){for(let A of _)if(A===1/0||isNaN(A)||A%1!=0)throw Error("This API only accepts integers")}}W.Terminal=P})();var Y=vp;for(var q in Q)Y[q]=Q[q];Q.__esModule&&Object.defineProperty(Y,"__esModule",{value:!0})})()});function iQ($){if($.length===1)return $[0].raw;if($.length===0)return"";let X="";for(let J of $)X+=J.raw;return X}function A91($,X,J){let Q=iQ(X),Y=$.raw+Q+(J?.raw||"");return{type:_7.STRING,pos:$.pos,raw:Y,command:"APC",params:Q?[Q]:[]}}function D91($,X,J){let Q=iQ(X),Y=J?.raw??"",q=$.raw+Q+Y,W=[],H=_7.CSI,K=0;if(Q)for(;K<Q.length;){let I=Q.charCodeAt(K);if(I<48||I>63)break;K++}let F=K>0?Q.substring(0,K):"",O=K<Q.length?Q.substring(K):"";if(F){let I=0;for(let P=0;P<=F.length;P++)(P===F.length||F.charCodeAt(P)===59||F.charCodeAt(P)===58)&&(W.push(P>I?F.substring(I,P):"0"),I=P+1)}let V=O+Y,N=W[0];if(N!==void 0&&N.charCodeAt(0)===63)return H=_7.DEC,N.length>1?W[0]=N.substring(1):W.shift(),{type:H,pos:$.pos,raw:q,command:V,params:W};for(let I of W)if(I.length>0&&$P.has(I[0])){H=_7.PRIVATE;let P=I[0]+V;for(let _=0;_<W.length;_++)if(W[_].length>0&&$P.has(W[_][0])){W[_].length>1?W[_]=W[_].substring(1):W.splice(_,1);break}return{type:H,pos:$.pos,raw:q,command:P,params:W}}return V==="m"&&W.length===5&&W[1]==="2"&&(N==="38"||N==="48")&&W.splice(2,0,"0"),V==="r"&&W.length===2&&W[1]==="0"&&(W[1]="-1"),{type:H,pos:$.pos,raw:q,command:V,params:W}}function I91($,X,J){let Q=iQ(X),Y=$.raw+Q+(J?.raw??"");if(!Q)return{type:_7.DCS,pos:$.pos,raw:Y,command:"",params:[]};for(let[q,W]of _91)if(Q.startsWith(q)){let H=Q.slice(W),K=[];if(H)for(let F of H.split(mp))K.push(F||"-1");return{type:_7.DCS,pos:$.pos,raw:Y,command:q,params:K}}return{type:_7.DCS,pos:$.pos,raw:Y,command:"",params:[Q]}}function f91($,X,J){let Q=iQ(X),Y=$.intermediate||(X[0]?.raw??J?.raw??""),q=$.intermediate&&J?.raw?[J.raw]:[],W=$.raw+Q+(J?.raw??"");return{type:_7.ESC,pos:$.pos,raw:W,command:Y,params:q}}function R91($,X,J){let Q=iQ(X),Y=$.raw+Q+(J?.raw||""),q=Q.indexOf(";");if(q===-1)return{type:_7.OSC,pos:$.pos,raw:Y,command:Q,params:[]};let W=Q.slice(0,q),H=Q.slice(q+1);if(W==="1337")return{type:_7.OSC,pos:$.pos,raw:Y,command:W,params:[H]};let K=H?H.split(";"):[];return{type:_7.OSC,pos:$.pos,raw:Y,command:W,params:K}}function P91($,X,J){let Q=iQ(X),Y=$.raw+Q+(J?.raw||"");return{type:_7.STRING,pos:$.pos,raw:Y,command:"PM",params:Q?[Q]:[]}}function S91($,X,J){let Q=iQ(X),Y=$.raw+Q+(J?.raw||"");return{type:_7.STRING,pos:$.pos,raw:Y,command:"SOS",params:Q?[Q]:[]}}function tR($){return $===24||$===26||$===27||$===155||$===157||$===144||$===159||$===158||$===152}function eR($){return $===24||$===26}function T91($){return $===27||$===155||$===157||$===144||$===159||$===158||$===152}function g91($){return $===155||$===157||$===144||$===159||$===158||$===152}function cp($){let X=[],J=0,Q=0,Y=0,q=$.length;for(;J<q;)if(Q===0){let W=J,H=$.charCodeAt(J);for(;J<q&&!T91(H);)H=$.charCodeAt(++J);if(J>W&&X.push({type:X4.TEXT,pos:W,raw:$.substring(W,J)}),J>=q)break;if(g91(H))X.push({type:X4.INTRODUCER,pos:J,raw:$[J],code:$[J]}),J++,Q=1,Y=H;else{let K=$.charCodeAt(J+1);if(K===91)X.push({type:X4.INTRODUCER,pos:J,raw:$.substring(J,J+2),code:"\x9B"}),J+=2,Q=1,Y=155;else if(K===93)X.push({type:X4.INTRODUCER,pos:J,raw:$.substring(J,J+2),code:"\x9D"}),J+=2,Q=1,Y=157;else if(J+1<q&&hp.has($[J+1]))X.push({type:X4.INTRODUCER,pos:J,raw:$.substring(J,J+2),code:$[J+1]}),J+=2,Q=1,Y=K;else if(J+1<q){let F=J+1;for(;F<q&&$.charCodeAt(F)>=32&&$.charCodeAt(F)<=47;)F++;if(F>J+1){let O=$.substring(J+1,F);X.push({type:X4.INTRODUCER,pos:J,raw:$.substring(J,F),code:"\x1B",intermediate:O})}else X.push({type:X4.INTRODUCER,pos:J,raw:$[J],code:"\x1B"});J=F,F<q&&(Q=1,Y=27)}else X.push({type:X4.INTRODUCER,pos:J,raw:$[J],code:"\x1B"}),J++}}else{let W=J;if(Y===155){let H=J;for(;J<q;){let K=$.charCodeAt(J);if(tR(K)){J>H&&X.push({type:X4.DATA,pos:W,raw:$.substring(H,J)}),Q=0,eR(K)&&(X.push({type:X4.TEXT,pos:J,raw:$[J]}),J++);break}if(K>=64&&K<=126){J>H&&X.push({type:X4.DATA,pos:W,raw:$.substring(H,J)}),X.push({type:X4.FINAL,pos:J,raw:$[J]}),J++,Q=0;break}J++}Q===1&&J>H&&X.push({type:X4.DATA,pos:W,raw:$.substring(H,J)})}else if(Y===27){if(J<q){let H=$.charCodeAt(J);tR(H)?(Q=0,eR(H)&&(X.push({type:X4.TEXT,pos:J,raw:$[J]}),J++)):(X.push({type:X4.FINAL,pos:J,raw:$[J]}),J++,Q=0)}}else{let H=J;for(;J<q;){let K=$.charCodeAt(J),F;if(K===27&&$.charCodeAt(J+1)===92?F="\x1B\\":K===156?F="\x9C":K===7&&Y===157&&(F="\x07"),F){J>H&&X.push({type:X4.DATA,pos:W,raw:$.substring(H,J)}),X.push({type:X4.FINAL,pos:J,raw:F}),J+=F.length,Q=0;break}if(tR(K)){J>H&&X.push({type:X4.DATA,pos:W,raw:$.substring(H,J)}),Q=0,eR(K)&&(X.push({type:X4.TEXT,pos:J,raw:$[J]}),J++);break}J++}Q===1&&J>H&&X.push({type:X4.DATA,pos:W,raw:$.substring(H,J)})}Q===1&&(Q=0)}return X}function E91($,X,J){switch($.code){case"\x9B":return D91($,X,J);case"\x9D":return R91($,X,J);case"\x90":case"P":return I91($,X,J);case"\x9F":case"_":return A91($,X,J);case"\x9E":case"X":return P91($,X,J);case"\x98":case"^":return S91($,X,J);case"\x1B":return f91($,X,J);default:return{type:_7.TEXT,pos:$.pos,raw:$.raw}}}function k91($){let X=[],J=0,Q=$.length;for(;J<Q;){let Y=$[J];if(Y.type===X4.TEXT){X.push({type:_7.TEXT,pos:Y.pos,raw:Y.raw}),J++;continue}if(Y.type===X4.INTRODUCER){let q=Y,W=[],H;for(J++;J<Q;){let K=$[J];if(K.type===X4.DATA)W.push(K);else if(K.type===X4.FINAL){H=K,J++;break}else break;J++}X.push(E91(q,W,H))}else J++}return X}function TK($){return k91(cp($))}var $P,hp,mp,X4,_7,_91;var lp=X1(()=>{$P=new Set(["<","=",">"]),hp=new Set(["P","_","^","X"]),mp=/[;:]/,X4={TEXT:"TEXT",INTRODUCER:"INTRODUCER",DATA:"DATA",FINAL:"FINAL"},_7={CSI:"CSI",DCS:"DCS",DEC:"DEC",ESC:"ESC",OSC:"OSC",PRIVATE:"PRIVATE",SGR:"SGR",STRING:"STRING",TEXT:"TEXT"};_91=new Map([["$q",2],["+q",2],["+p",2],["|",1],["{",1]])});var XP=X1(()=>{lp()});function m9(){return process.env.SHELL??"/bin/bash"}function qV($){let X=null;for(let J of TK($))if(J.type==="OSC"&&(J.command==="0"||J.command==="2")&&J.params[0])X=J.params[0];return X}function HV($){if($.command&&$.command.length>0)return[...$.command];return[$.shell??m9()]}var _H=80,IH=24,JP=200000;var aQ=X1(()=>{XP()});function rZ($){if($<0)return[0,0,0];if($<16)return w91[$]??[0,0,0];if($<232){let X=$-16,J=Math.floor(X/36),Q=Math.floor(X/6%6),Y=X%6,q=(W)=>W===0?0:55+40*W;return[q(J),q(Q),q(Y)]}if($<256){let X=8+10*($-232);return[X,X,X]}return[0,0,0]}function x91($,X){let J=X.length===0?[0]:X.map((H)=>H===""?0:Number.parseInt(H,10)||0),Q=$.fg,Y=$.bg,q=$.attributes,W=0;while(W<J.length){let H=J[W];if(H===void 0)break;if(H===0){Q=void 0,Y=void 0,q=0,W+=1;continue}if(H===1){q|=u4.BOLD,W+=1;continue}if(H===2){q|=u4.DIM,W+=1;continue}if(H===3){q|=u4.ITALIC,W+=1;continue}if(H===4){q|=u4.UNDERLINE,W+=1;continue}if(H===5||H===6){q|=u4.BLINK,W+=1;continue}if(H===7){q|=u4.INVERSE,W+=1;continue}if(H===8){q|=u4.HIDDEN,W+=1;continue}if(H===9){q|=u4.STRIKETHROUGH,W+=1;continue}if(H===22){q&=~(u4.BOLD|u4.DIM),W+=1;continue}if(H===23){q&=~u4.ITALIC,W+=1;continue}if(H===24){q&=~u4.UNDERLINE,W+=1;continue}if(H===25){q&=~u4.BLINK,W+=1;continue}if(H===27){q&=~u4.INVERSE,W+=1;continue}if(H===28){q&=~u4.HIDDEN,W+=1;continue}if(H===29){q&=~u4.STRIKETHROUGH,W+=1;continue}if(H>=30&&H<=37){Q=rZ(H-30),W+=1;continue}if(H>=90&&H<=97){Q=rZ(H-90+8),W+=1;continue}if(H===39){Q=void 0,W+=1;continue}if(H>=40&&H<=47){Y=rZ(H-40),W+=1;continue}if(H>=100&&H<=107){Y=rZ(H-100+8),W+=1;continue}if(H===49){Y=void 0,W+=1;continue}if(H===38){let K=J[W+1];if(K===5){let F=J[W+2]??0;Q=rZ(F),W+=3;continue}if(K===2){let F=J[W+2]??0,O=J[W+3]??0,V=J[W+4]??0;Q=[F,O,V],W+=5;continue}W+=1;continue}if(H===48){let K=J[W+1];if(K===5){let F=J[W+2]??0;Y=rZ(F),W+=3;continue}if(K===2){let F=J[W+2]??0,O=J[W+3]??0,V=J[W+4]??0;Y=[F,O,V],W+=5;continue}W+=1;continue}W+=1}return{fg:Q,bg:Y,attributes:q}}function b91($){let X=$;if(X.charCodeAt(0)===27)X=X.slice(2);else if(X.charCodeAt(0)===155)X=X.slice(1);if(X.endsWith("m"))X=X.slice(0,-1);return X.split(";")}function y91($,X=dp){if($.length===0)return{chunks:[],endStyle:X};let J=[],Q={...X},Y="",q=()=>{if(Y.length===0)return;let H={text:Y,...Q.fg?{fg:Q.fg}:{},...Q.bg?{bg:Q.bg}:{},...Q.attributes!==0?{attributes:Q.attributes}:{}};J.push(H),Y=""},W=TK($);for(let H of W){if(H.type==="TEXT"){Y+=H.raw;continue}if(H.type==="CSI"&&H.command==="m")q(),Q=x91(Q,b91(H.raw))}return q(),{chunks:J,endStyle:Q}}function WV($){let X=$.split(`
|
|
630
|
-
`),J=[],Q=dp;for(let Y of X){let{chunks:q,endStyle:W}=y91(Y,Q);J.push(q),Q=W}return J}var u4,dp,w91;var fH=X1(()=>{XP();u4=Object.freeze({BOLD:1,DIM:2,ITALIC:4,UNDERLINE:8,BLINK:16,INVERSE:32,HIDDEN:64,STRIKETHROUGH:128}),dp=Object.freeze({fg:void 0,bg:void 0,attributes:0});w91=[[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 pp($){if($==="")return;let X=$.indexOf(":"),J=Number($.slice(X+1));if($.startsWith("rgb:"))return[J>>16&255,J>>8&255,J&255];if($.startsWith("pal:"))return rZ(J);return}function np($,X){if(X==="fg"?$.isFgDefault():$.isBgDefault())return"";let Q=X==="fg"?$.getFgColorMode():$.getBgColorMode(),Y=X==="fg"?$.getFgColor():$.getBgColor();if(Q===h91||(X==="fg"?$.isFgRGB():$.isBgRGB()))return`rgb:${Y}`;if(Q===u91||(X==="fg"?$.isFgPalette():$.isBgPalette()))return`pal:${Y}`;if(Q===v91)return"";return""}function c91($){let X=0;if($.isBold())X|=1;if($.isDim())X|=2;if($.isItalic())X|=4;if($.isUnderline())X|=8;if($.isBlink())X|=16;if($.isInverse())X|=32;if($.isInvisible())X|=64;if($.isStrikethrough())X|=128;return{fg:np($,"fg"),bg:np($,"bg"),attrs:X}}function l91($,X){return $.fg===X.fg&&$.bg===X.bg&&$.attrs===X.attrs}function d91($){let X=pp($.fg),J=pp($.bg);return{...X?{fg:X}:{},...J?{bg:J}:{},...$.attrs!==0?{attributes:$.attrs}:{}}}function p91($){let X=$.getChars();if(X!==""&&X!==" ")return!0;return!$.isAttributeDefault()||!$.isFgDefault()||!$.isBgDefault()}function ip($,X){if(ZP===void 0){let J=$.getCell(X);if(J)ZP=J;return J}return $.getCell(X,ZP)}function ap($,X=-1){let J=Math.min($.length-1,X);for(let H=0;H<$.length;H++){let K=ip($,H);if(!K||K.getWidth()===0)continue;if(p91(K))J=Math.max(J,H)}if(J===-1)return[];let Q=[],Y=m91,q="",W=()=>{if(q==="")return;Q.push({text:q,...d91(Y)}),q=""};for(let H=0;H<=J;H++){let K=ip($,H);if(!K||K.getWidth()===0)continue;let F=c91(K);if(!l91(Y,F))W(),Y=F;q+=K.getChars()||" "}return W(),Q}var v91=0,u91=16777216,h91=50331648,m91,ZP;var op=X1(()=>{fH();m91=Object.freeze({fg:"",bg:"",attrs:0})});class gK{taskId;cwd;term;listeners=new Set;exitListeners=new Set;titleListeners=new Set;snapshot=[];cursor=null;snapshotDirty=!1;scrollbackCache=new Map;anchor;anchorId=0;_title=null;_unwatchedSince=Date.now();_killed=!1;muteReplies=!1;cols;rows;refreshQueued=!1;scrollbackRows;constructor($){this.taskId=$.taskId,this.cwd=$.cwd,this.cols=$.cols??_H,this.rows=$.rows??IH,this.scrollbackRows=$.scrollback??gm(),this.term=new rp.Terminal({allowProposedApi:!0,cols:this.cols,rows:this.rows,scrollback:this.scrollbackRows}),this.term.onData((X)=>{if(this._killed||this.muteReplies)return;try{this.transportWrite(X)}catch{}}),this.term.onTitleChange((X)=>{if(!X||X===this._title)return;this._title=X;for(let J of this.titleListeners)try{J(X)}catch{}})}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.exitListeners.add($),()=>{this.exitListeners.delete($)}}onTitleChange($){if(this.titleListeners.add($),this._title)try{$(this._title)}catch{}return()=>{this.titleListeners.delete($)}}paste($){if(this._killed||$.length===0)return;let X=!1;try{X=this.term.modes.bracketedPasteMode===!0}catch{}this.write(X?`\x1B[200~${$}\x1B[201~`:$)}wheel($,X,J){if(this._killed)return!1;try{let Q=this.term.modes;if(Q.mouseTrackingMode!=="none"){let Y=$==="up"?64:65;return this.write(`\x1B[<${Y};${Math.max(1,X)};${Math.max(1,J)}M`),!0}if(this.term.buffer.active.type==="alternate"){let Y=Q.applicationCursorKeysMode===!0?$==="up"?"\x1BOA":"\x1BOB":$==="up"?"\x1B[A":"\x1B[B";return this.write(Y.repeat(3)),!0}}catch{}return!1}onData($){if(this.ensureFreshSnapshot(),this.listeners.add($),this._unwatchedSince=null,this.snapshot.length>0)try{$(this.snapshot,this.cursor)}catch{}return()=>{if(this.listeners.delete($),this.listeners.size===0&&this._unwatchedSince===null)this._unwatchedSince=Date.now()}}unwatchedSinceMs(){return this._unwatchedSince}resize($,X){if(this._killed)return;this.cols=$,this.rows=X;try{this.term.resize($,X),this.invalidateScrollbackCache(),this.transportResize($,X),this.refreshSnapshot()}catch{this.markDead(!1)}}invalidateScrollbackCache(){this.scrollbackCache.clear(),this.anchor?.dispose(),this.anchor=void 0,this.anchorId=0}capture(){return this.ensureFreshSnapshot(),this.snapshot}captureCursor(){return this.ensureFreshSnapshot(),this.cursor}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($,()=>this.queueRefresh())}feedReplay($){if(this._killed)return;this.muteReplies=!0,this.term.write($,()=>{this.muteReplies=!1,this.queueRefresh()})}queueRefresh(){if(this.listeners.size===0){this.snapshotDirty=!0;return}if(this.refreshQueued)return;this.refreshQueued=!0,setTimeout(()=>{this.refreshQueued=!1,this.refreshSnapshot()},16)}inSynchronizedOutput(){try{return this.term.modes.synchronizedOutputMode===!0}catch{return!1}}cursorHidden(){try{return this.term._core?.coreService?.isCursorHidden===!0}catch{return!1}}refreshSnapshot(){if(this._killed)return;if(this.inSynchronizedOutput()){this.queueRefresh();return}let $=this.term.buffer.active,X=$.type==="alternate";if(!X&&(this.anchor===void 0||this.anchor.isDisposed)){this.scrollbackCache.clear();let K=this.term.registerMarker(0);if(K)this.anchor=K,this.anchorId=K.line}let J=!X&&this.anchor!==void 0&&!this.anchor.isDisposed,Q=J?this.anchorId-this.anchor.line:0,Y=this.scrollbackCache,q=[],W=$.baseY+$.cursorY,H=Math.max(0,$.length-(this.rows+this.scrollbackRows));for(let K=H;K<$.length;K++){let F=J&&K<$.baseY;if(F){let I=Y.get(Q+K);if(I){q.push(I);continue}}let O=$.getLine(K),V=K===W?$.cursorX-1:-1,N=O?ap(O,V):[];if(q.push(N),F)Y.set(Q+K,N)}if(J){let K=Q+H;for(let F of Y.keys())if(F<K)Y.delete(F)}if(!X){let K=this.term.registerMarker(0);if(K)this.anchorId=J?Q+K.line:0,this.anchor?.dispose(),this.anchor=K}this.snapshot=q,this.snapshotDirty=!1,this.cursor=this.cursorHidden()?null:{x:$.cursorX,y:$.baseY+$.cursorY-H};for(let K of this.listeners)try{K(this.snapshot,this.cursor)}catch{}}markDead($){if(this._killed)return;if(this._killed=!0,$)try{this.transportKill()}catch{}let X=[...this.exitListeners];this.listeners.clear(),this.exitListeners.clear();for(let J of X)try{J()}catch{}}silentDispose(){this._killed=!0,this.listeners.clear(),this.exitListeners.clear(),this.titleListeners.clear()}}var rp;var zP=X1(()=>{ef();aQ();op();rp=K0(up(),1)});function n91($){let X=rQ.get($.taskId);if(!X)X=new Set,rQ.set($.taskId,X);X.add($)}function i91($){let X=rQ.get($.taskId);if(!X)return 0;if(X.delete($),X.size===0)rQ.delete($.taskId);return X.size}function a91($){if(sp.has($))return;sp.add($),$.on("pty.data",(X)=>{let J=X.payload,Q=rQ.get(J.key);if(Q)for(let Y of Q)Y.feedFrame(J.data)}),$.on("pty.exit",(X)=>{let J=X.payload,Q=rQ.get(J.key);if(Q)for(let Y of[...Q])Y.remoteGone()})}function o91(){if(oQ)return oQ;let $=(async()=>{let X=await hg(),J=new e8(X);return await J.connect(),a91(J),J.onLifecycle("close",()=>{if(oQ===$)oQ=null}),J})();return $.catch(()=>{if(oQ===$)oQ=null}),oQ=$,$}var oQ=null,rQ,sp,BV;var QP=X1(()=>{VZ();b6();MD();zP();rQ=new Map;sp=new WeakSet;BV=class BV extends gK{client=null;opened=!1;pendingInput=[];pendingResize=null;unsubs=[];deadOnAttach=!1;constructor($){super($);this.openRemote($)}async openRemote($){try{let X=await o91();if(this.killed)return;this.client=X,n91(this),this.unsubs.push(X.onLifecycle("close",()=>this.remoteGone()));let J=await X.request("pty.open",{key:this.taskId,cwd:this.cwd,command:$.command,shell:$.shell,cols:this.cols,rows:this.rows});if(this.killed)return;if(J.replay.length>0)this.feedReplay(Buffer.from(J.replay,"base64"));if(this.opened=!0,this.pendingResize){let{cols:Q,rows:Y}=this.pendingResize;this.pendingResize=null,this.sendResize(Q,Y)}for(let Q of this.pendingInput.splice(0))this.sendInput(Q);if(!J.alive)this.deadOnAttach=J.replay.length>0,this.remoteGone();else if(J.replay.length>0){if(this.sendResize(this.cols,Math.max(1,this.rows-1)),await this.nextDataOrTimeout(200),!this.killed)this.sendResize(this.cols,this.rows)}}catch(X){b4("pty-hosted",X),this.remoteGone()}}transportWrite($){if(!this.opened){this.pendingInput.push($);return}this.sendInput($)}transportResize($,X){if(!this.opened){this.pendingResize={cols:$,rows:X};return}this.sendResize($,X)}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()}detach(){let $=this.client;this.cleanup();let X=rQ.get(this.taskId)?.size??0;if($&&X===0)$.request("pty.detach",{key:this.taskId}).catch(()=>{});this.silentDispose()}sendInput($){this.client?.request("pty.write",{key:this.taskId,data:$}).catch(()=>this.remoteGone())}sendResize($,X){this.client?.request("pty.resize",{key:this.taskId,cols:$,rows:X}).catch(()=>{})}dataWaiter=null;nextDataOrTimeout($){return new Promise((X)=>{let J=setTimeout(()=>{this.dataWaiter=null,X()},$);this.dataWaiter=()=>{this.dataWaiter=null,clearTimeout(J),X()}})}feedFrame($){this.dataWaiter?.(),this.feed(Buffer.from($,"base64"))}remoteGone(){this.cleanup(),this.markDead(!1)}cleanup(){i91(this);for(let $ of this.unsubs.splice(0))try{$()}catch{}}}});class UV{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($){this.taskId=$.taskId,this.cwd=$.cwd,this._cols=$.cols??_H,this._rows=$.rows??IH}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 X=qV($);if(X&&X!==this._title){this._title=X;for(let Q of this.titleListeners)try{Q(X)}catch{}}let J=this.capture();for(let Q of this.listeners)try{Q(J,this._cursor)}catch{}}write($){if(this._killed)return;this.writes.push($)}onData($){if(this.listeners.add($),this.buffer!=="")try{$(this.capture(),this._cursor)}catch{}return()=>{this.listeners.delete($)}}resize($,X){if(this._killed)return;this._cols=$,this._rows=X}capture(){return WV(this.buffer)}setCursor($){this._cursor=$}captureCursor(){if(this._killed)return null;return this._cursor}kill(){if(this._killed)return;this._killed=!0,this.listeners.clear();let $=[...this.exitListeners];this.exitListeners.clear();for(let X of $)X()}paste($){if(this._killed)return;this.pastes.push($)}wheel($,X,J){if(this._killed)return!1;return this.wheels.push({direction:$,col:X,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 YP=X1(()=>{aQ();fH()});import{spawn as r91}from"child_process";class KV{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??_H,this.rows=$.rows??IH;let X=HV($),J=X[0]??m9(),Q=X.slice(1);this.proc=r91(J,Q,{cwd:$.cwd,env:DH(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",(Y)=>this.append(Y)),this.proc.stderr?.on("data",(Y)=>this.append(Y)),this.proc.stdin?.on("error",()=>this.markDead(!1)),this.proc.on("error",(Y)=>{this.append(`
|
|
630
|
+
`),J=[],Q=dp;for(let Y of X){let{chunks:q,endStyle:W}=y91(Y,Q);J.push(q),Q=W}return J}var u4,dp,w91;var fH=X1(()=>{XP();u4=Object.freeze({BOLD:1,DIM:2,ITALIC:4,UNDERLINE:8,BLINK:16,INVERSE:32,HIDDEN:64,STRIKETHROUGH:128}),dp=Object.freeze({fg:void 0,bg:void 0,attributes:0});w91=[[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 pp($){if($==="")return;let X=$.indexOf(":"),J=Number($.slice(X+1));if($.startsWith("rgb:"))return[J>>16&255,J>>8&255,J&255];if($.startsWith("pal:"))return rZ(J);return}function np($,X){if(X==="fg"?$.isFgDefault():$.isBgDefault())return"";let Q=X==="fg"?$.getFgColorMode():$.getBgColorMode(),Y=X==="fg"?$.getFgColor():$.getBgColor();if(Q===h91||(X==="fg"?$.isFgRGB():$.isBgRGB()))return`rgb:${Y}`;if(Q===u91||(X==="fg"?$.isFgPalette():$.isBgPalette()))return`pal:${Y}`;if(Q===v91)return"";return""}function c91($){let X=0;if($.isBold())X|=1;if($.isDim())X|=2;if($.isItalic())X|=4;if($.isUnderline())X|=8;if($.isBlink())X|=16;if($.isInverse())X|=32;if($.isInvisible())X|=64;if($.isStrikethrough())X|=128;return{fg:np($,"fg"),bg:np($,"bg"),attrs:X}}function l91($,X){return $.fg===X.fg&&$.bg===X.bg&&$.attrs===X.attrs}function d91($){let X=pp($.fg),J=pp($.bg);return{...X?{fg:X}:{},...J?{bg:J}:{},...$.attrs!==0?{attributes:$.attrs}:{}}}function p91($){let X=$.getChars();if(X!==""&&X!==" ")return!0;return!$.isAttributeDefault()||!$.isFgDefault()||!$.isBgDefault()}function ip($,X){if(ZP===void 0){let J=$.getCell(X);if(J)ZP=J;return J}return $.getCell(X,ZP)}function ap($,X=-1){let J=Math.min($.length-1,X);for(let H=0;H<$.length;H++){let K=ip($,H);if(!K||K.getWidth()===0)continue;if(p91(K))J=Math.max(J,H)}if(J===-1)return[];let Q=[],Y=m91,q="",W=()=>{if(q==="")return;Q.push({text:q,...d91(Y)}),q=""};for(let H=0;H<=J;H++){let K=ip($,H);if(!K||K.getWidth()===0)continue;let F=c91(K);if(!l91(Y,F))W(),Y=F;q+=K.getChars()||" "}return W(),Q}var v91=0,u91=16777216,h91=50331648,m91,ZP;var op=X1(()=>{fH();m91=Object.freeze({fg:"",bg:"",attrs:0})});class gK{taskId;cwd;term;listeners=new Set;exitListeners=new Set;titleListeners=new Set;snapshot=[];cursor=null;snapshotDirty=!1;scrollbackCache=new Map;anchor;anchorId=0;_title=null;_unwatchedSince=Date.now();_killed=!1;muteReplies=!1;cols;rows;refreshQueued=!1;scrollbackRows;constructor($){this.taskId=$.taskId,this.cwd=$.cwd,this.cols=$.cols??_H,this.rows=$.rows??IH,this.scrollbackRows=$.scrollback??gm(),this.term=new rp.Terminal({allowProposedApi:!0,cols:this.cols,rows:this.rows,scrollback:this.scrollbackRows}),this.term.onData((X)=>{if(this._killed||this.muteReplies)return;try{this.transportWrite(X)}catch{}}),this.term.onTitleChange((X)=>{if(!X||X===this._title)return;this._title=X;for(let J of this.titleListeners)try{J(X)}catch{}})}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.exitListeners.add($),()=>{this.exitListeners.delete($)}}onTitleChange($){if(this.titleListeners.add($),this._title)try{$(this._title)}catch{}return()=>{this.titleListeners.delete($)}}paste($){if(this._killed||$.length===0)return;let X=!1;try{X=this.term.modes.bracketedPasteMode===!0}catch{}this.write(X?`\x1B[200~${$}\x1B[201~`:$)}wheel($,X,J){if(this._killed)return!1;try{let Q=this.term.modes;if(Q.mouseTrackingMode!=="none"){let Y=$==="up"?64:65;return this.write(`\x1B[<${Y};${Math.max(1,X)};${Math.max(1,J)}M`),!0}if(this.term.buffer.active.type==="alternate"){let Y=Q.applicationCursorKeysMode===!0?$==="up"?"\x1BOA":"\x1BOB":$==="up"?"\x1B[A":"\x1B[B";return this.write(Y.repeat(3)),!0}}catch{}return!1}onData($){if(this.ensureFreshSnapshot(),this.listeners.add($),this._unwatchedSince=null,this.snapshot.length>0)try{$(this.snapshot,this.cursor)}catch{}return()=>{if(this.listeners.delete($),this.listeners.size===0&&this._unwatchedSince===null)this._unwatchedSince=Date.now()}}unwatchedSinceMs(){return this._unwatchedSince}resize($,X){if(this._killed)return;this.cols=$,this.rows=X;try{this.term.resize($,X),this.invalidateScrollbackCache(),this.transportResize($,X),this.refreshSnapshot()}catch{this.markDead(!1)}}invalidateScrollbackCache(){this.scrollbackCache.clear(),this.anchor?.dispose(),this.anchor=void 0,this.anchorId=0}capture(){return this.ensureFreshSnapshot(),this.snapshot}captureCursor(){return this.ensureFreshSnapshot(),this.cursor}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($,()=>this.queueRefresh())}feedReplay($){if(this._killed)return;this.muteReplies=!0,this.term.write($,()=>{this.muteReplies=!1,this.queueRefresh()})}queueRefresh(){if(this.listeners.size===0){this.snapshotDirty=!0;return}if(this.refreshQueued)return;this.refreshQueued=!0,setTimeout(()=>{this.refreshQueued=!1,this.refreshSnapshot()},16)}inSynchronizedOutput(){try{return this.term.modes.synchronizedOutputMode===!0}catch{return!1}}cursorHidden(){try{return this.term._core?.coreService?.isCursorHidden===!0}catch{return!1}}refreshSnapshot(){if(this._killed)return;if(this.inSynchronizedOutput()){this.queueRefresh();return}let $=this.term.buffer.active,X=$.type==="alternate";if(!X&&(this.anchor===void 0||this.anchor.isDisposed)){this.scrollbackCache.clear();let K=this.term.registerMarker(0);if(K)this.anchor=K,this.anchorId=K.line}let J=!X&&this.anchor!==void 0&&!this.anchor.isDisposed,Q=J?this.anchorId-this.anchor.line:0,Y=this.scrollbackCache,q=[],W=$.baseY+$.cursorY,H=Math.max(0,$.length-(this.rows+this.scrollbackRows));for(let K=H;K<$.length;K++){let F=J&&K<$.baseY;if(F){let I=Y.get(Q+K);if(I){q.push(I);continue}}let O=$.getLine(K),V=K===W?$.cursorX-1:-1,N=O?ap(O,V):[];if(q.push(N),F)Y.set(Q+K,N)}if(J){let K=Q+H;for(let F of Y.keys())if(F<K)Y.delete(F)}if(!X){let K=this.term.registerMarker(0);if(K)this.anchorId=J?Q+K.line:0,this.anchor?.dispose(),this.anchor=K}this.snapshot=q,this.snapshotDirty=!1,this.cursor=this.cursorHidden()?null:{x:$.cursorX,y:$.baseY+$.cursorY-H};for(let K of this.listeners)try{K(this.snapshot,this.cursor)}catch{}}markDead($){if(this._killed)return;if(this._killed=!0,$)try{this.transportKill()}catch{}let X=[...this.exitListeners];this.listeners.clear(),this.exitListeners.clear();for(let J of X)try{J()}catch{}}silentDispose(){this._killed=!0,this.listeners.clear(),this.exitListeners.clear(),this.titleListeners.clear()}}var rp;var zP=X1(()=>{ef();aQ();op();rp=K0(up(),1)});function n91($){let X=rQ.get($.taskId);if(!X)X=new Set,rQ.set($.taskId,X);X.add($)}function i91($){let X=rQ.get($.taskId);if(!X)return 0;if(X.delete($),X.size===0)rQ.delete($.taskId);return X.size}function a91($){if(sp.has($))return;sp.add($),$.on("pty.data",(X)=>{let J=X.payload,Q=rQ.get(J.key);if(Q)for(let Y of Q)Y.feedFrame(J.data)}),$.on("pty.exit",(X)=>{let J=X.payload,Q=rQ.get(J.key);if(Q)for(let Y of[...Q])Y.remoteExited(J.pid)})}function o91(){if(oQ)return oQ;let $=(async()=>{let X=await hg(),J=new e8(X);return await J.connect(),a91(J),J.onLifecycle("close",()=>{if(oQ===$)oQ=null}),J})();return $.catch(()=>{if(oQ===$)oQ=null}),oQ=$,$}var oQ=null,rQ,sp,BV;var QP=X1(()=>{VZ();b6();MD();zP();rQ=new Map;sp=new WeakSet;BV=class BV extends gK{client=null;opened=!1;pendingInput=[];pendingResize=null;unsubs=[];deadOnAttach=!1;sessionPid=void 0;pendingExitPid=null;constructor($){super($);this.openRemote($)}async openRemote($){try{let X=await o91();if(this.killed)return;this.client=X,n91(this),this.unsubs.push(X.onLifecycle("close",()=>this.remoteGone()));let J=await X.request("pty.open",{key:this.taskId,cwd:this.cwd,command:$.command,shell:$.shell,cols:this.cols,rows:this.rows});if(this.killed)return;if(this.sessionPid=J.pid??null,J.replay.length>0)this.feedReplay(Buffer.from(J.replay,"base64"));if(this.opened=!0,this.pendingResize){let{cols:Y,rows:q}=this.pendingResize;this.pendingResize=null,this.sendResize(Y,q)}for(let Y of this.pendingInput.splice(0))this.sendInput(Y);let Q=this.pendingExitPid;if(this.pendingExitPid=null,!J.alive)this.deadOnAttach=J.replay.length>0,this.remoteGone();else if(Q!==null&&Q===this.sessionPid)this.remoteGone();else if(J.replay.length>0){if(this.sendResize(this.cols,Math.max(1,this.rows-1)),await this.nextDataOrTimeout(200),!this.killed)this.sendResize(this.cols,this.rows)}}catch(X){b4("pty-hosted",X),this.remoteGone()}}transportWrite($){if(!this.opened){this.pendingInput.push($);return}this.sendInput($)}transportResize($,X){if(!this.opened){this.pendingResize={cols:$,rows:X};return}this.sendResize($,X)}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()}detach(){let $=this.client;this.cleanup();let X=rQ.get(this.taskId)?.size??0;if($&&X===0)$.request("pty.detach",{key:this.taskId}).catch(()=>{});this.silentDispose()}sendInput($){this.client?.request("pty.write",{key:this.taskId,data:$}).catch(()=>this.remoteGone())}sendResize($,X){this.client?.request("pty.resize",{key:this.taskId,cols:$,rows:X}).catch(()=>{})}dataWaiter=null;nextDataOrTimeout($){return new Promise((X)=>{let J=setTimeout(()=>{this.dataWaiter=null,X()},$);this.dataWaiter=()=>{this.dataWaiter=null,clearTimeout(J),X()}})}feedFrame($){this.dataWaiter?.(),this.feed(Buffer.from($,"base64"))}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(){i91(this);for(let $ of this.unsubs.splice(0))try{$()}catch{}}}});class UV{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($){this.taskId=$.taskId,this.cwd=$.cwd,this._cols=$.cols??_H,this._rows=$.rows??IH}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 X=qV($);if(X&&X!==this._title){this._title=X;for(let Q of this.titleListeners)try{Q(X)}catch{}}let J=this.capture();for(let Q of this.listeners)try{Q(J,this._cursor)}catch{}}write($){if(this._killed)return;this.writes.push($)}onData($){if(this.listeners.add($),this.buffer!=="")try{$(this.capture(),this._cursor)}catch{}return()=>{this.listeners.delete($)}}resize($,X){if(this._killed)return;this._cols=$,this._rows=X}capture(){return WV(this.buffer)}setCursor($){this._cursor=$}captureCursor(){if(this._killed)return null;return this._cursor}kill(){if(this._killed)return;this._killed=!0,this.listeners.clear();let $=[...this.exitListeners];this.exitListeners.clear();for(let X of $)X()}paste($){if(this._killed)return;this.pastes.push($)}wheel($,X,J){if(this._killed)return!1;return this.wheels.push({direction:$,col:X,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 YP=X1(()=>{aQ();fH()});import{spawn as r91}from"child_process";class KV{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??_H,this.rows=$.rows??IH;let X=HV($),J=X[0]??m9(),Q=X.slice(1);this.proc=r91(J,Q,{cwd:$.cwd,env:DH(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",(Y)=>this.append(Y)),this.proc.stderr?.on("data",(Y)=>this.append(Y)),this.proc.stdin?.on("error",()=>this.markDead(!1)),this.proc.on("error",(Y)=>{this.append(`
|
|
631
631
|
[kobe terminal] failed to start shell: ${Y.message}
|
|
632
632
|
`),this.markDead(!1)}),this.proc.on("exit",()=>this.markDead(!1)),this.proc.unref?.()}get killed(){return this._killed}write($){if(this._killed||$.length===0)return;let X=this.proc.stdin;if(!X||X.destroyed)return;let J=$.replace(/\r/g,`
|
|
633
633
|
`);try{X.write(J)}catch{this.markDead(!1)}}onData($){if(this.listeners.add($),this.buffer!=="")try{$(this.capture(),null)}catch{}return()=>{this.listeners.delete($)}}resize($,X){if(this._killed)return;this.cols=$,this.rows=X}capture(){return WV(this.buffer)}captureCursor(){return null}kill(){if(this._killed)return;this.markDead(!0)}append($){if(this._killed)return;if(this.buffer+=$,this.buffer.length>JP)this.buffer=this.buffer.slice(this.buffer.length-JP);let X=qV($);if(X&&X!==this._title){this._title=X;for(let Q of this.titleListeners)try{Q(X)}catch{}}let J=this.capture();for(let Q of this.listeners)try{Q(J,null)}catch{}}markDead($){if(this._killed)return;if(this._killed=!0,$)try{this.proc.kill("SIGTERM")}catch{}let X=[...this.exitListeners];this.listeners.clear(),this.exitListeners.clear();for(let J of X)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 GP=X1(()=>{XV();aQ();fH()});function ep($){let X=process.env.KOBE_TERMINAL_BACKEND??"hosted";if(X==="mock")return new UV($);if(X==="pipe")return new KV($);if(X==="bun-pty")return new tp($);if(X==="hosted")return new BV($);throw Error(`unknown terminal backend: ${X}`)}var tp;var $n=X1(()=>{XV();QP();YP();GP();aQ();zP();YP();GP();QP();tp=class tp extends gK{proc;constructor($){super($);this.proc=Bun.spawn(HV($),{cwd:$.cwd,env:DH(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:(X,J)=>this.feed(J),exit:()=>this.markDead(!1)}}),this.proc.exited.then(()=>this.markDead(!1),()=>this.markDead(!1)),this.proc.unref?.()}transportWrite($){this.proc.terminal?.write($)}transportResize($,X){this.proc.terminal?.resize($,X)}transportKill(){try{this.proc.terminal?.close()}catch{}try{this.proc.kill("SIGTERM")}catch{}}}});class Xn{map=new Map;factory;constructor($=ep){this.factory=$}parkIdle($,X=Date.now()){let J=[];for(let[Q,Y]of this.map){if(Y.killed)continue;if(!Y.detach||!Y.unwatchedSinceMs)continue;let q=Y.unwatchedSinceMs();if(q===null||X-q<$)continue;try{Y.detach()}catch{}this.map.delete(Q),J.push(Q)}if(J.length>0&&aG()){let Q=Math.round(process.memoryUsage().rss/1048576);console.error(`[kobe pty] parked ${J.length} idle terminal(s); ${this.map.size} live; rss=${Q}MB`)}return J}acquire($,X,J={}){let Q=this.map.get($);if(Q&&!Q.killed)return Q;if(Q)this.map.delete($);let Y=this.factory({taskId:$,cwd:X,...J});return this.map.set($,Y),Y}get($){let X=this.map.get($);if(!X)return null;if(X.killed)return this.map.delete($),null;return X}has($){return this.get($)!==null}release($){let X=this.map.get($);if(this.map.delete($),!X)return;try{X.kill()}catch{}}releaseWhere($){let X=Array.from(this.map.keys()).filter($);for(let J of X)this.release(J)}releaseAll(){let $=Array.from(this.map.keys());for(let X of $)this.release(X)}detachAll(){let $=Array.from(this.map.values());this.map.clear();for(let X of $)try{if(X.detach)X.detach();else X.kill()}catch{}}reset($,X,J={}){return this.release($),this.acquire($,X,J)}get size(){return this.map.size}}function o4(){if(!qP)qP=new Xn;return qP}var qP=null;var RH=X1(()=>{B4();$n()});function s91($,X,J=5000){return new Promise((Q)=>{let Y=!1,q=null,W=null,H=null;function K(F){if(Y)return;if(Y=!0,H!==null)clearTimeout(H);q?.(),W?.(),Q({delivered:F})}if(W=$.onExit(()=>K(!1)),$.killed)return;q=$.onData(()=>{if(Y)return;$.paste(X),$.write("\r"),K(!0)}),H=setTimeout(()=>K(!1),J)})}function Jn($,X,J=5000,Q){return new Promise((Y)=>{let q=Date.now()+J;function W(){if(Q?.aborted){Y({delivered:!1});return}let H=$();if(H){Y(s91(H,X,Math.max(0,q-Date.now())));return}if(Date.now()>=q){Y({delivered:!1});return}setTimeout(W,50)}W()})}function Zn($){return $.kind==="leaf"?0:1+Math.max(...$.children.map(Zn))}function zn($){return{root:{kind:"leaf",id:"leaf-1",content:$},activeLeafId:"leaf-1",nextOrdinal:2}}function Z7($){return $.kind==="leaf"?[$]:$.children.flatMap(Z7)}function HP($,X,J){let Q={kind:"leaf",id:`leaf-${$.nextOrdinal}`,content:J},Y=(W)=>{if(W.kind==="leaf"){if(W.id!==$.activeLeafId)return W;return{kind:"group",orientation:X,children:[W,Q]}}if(W.orientation===X){let H=W.children.findIndex((K)=>K.kind==="leaf"&&K.id===$.activeLeafId);if(H>=0){let K=[...W.children.slice(0,H+1),Q,...W.children.slice(H+1)];return{...W,children:K}}}return{...W,children:W.children.map(Y)}},q=Y($.root);if(Zn(q)>4)return $;return{root:q,activeLeafId:Q.id,nextOrdinal:$.nextOrdinal+1}}function Qn($,X){let J=Z7($.root);if(J.length<=1)return null;let Q=(K)=>{if(K.kind==="leaf")return K.id===X?null:K;let F=K.children.map(Q).filter((O)=>O!==null);if(F.length===0)return null;if(F.length===1)return F[0];return{...K,children:F}},Y=Q($.root);if(Y===null)return null;if(Z7(Y).length===J.length)return $;let q=J.map((K)=>K.id),W=q[Math.max(0,q.indexOf(X)-1)],H=$.activeLeafId===X?W:$.activeLeafId;return{...$,root:Y,activeLeafId:H}}function Yn($,X,J){let Q=J.trim(),Y=Q.length>0?Q:null,q=(W)=>W.kind==="leaf"?W.id===X?{...W,title:Y}:W:{...W,children:W.children.map(q)};if(!Z7($.root).some((W)=>W.id===X))return $;return{...$,root:q($.root)}}function Gn($,X){let J=Z7($.root).map((q)=>q.id);if(J.length<=1)return $;let Q=J.indexOf($.activeLeafId),Y=J[(Q+X+J.length)%J.length];return{...$,activeLeafId:Y}}function WP(){return{tabs:[{kind:"engine",id:"tab-1",title:null,ordinal:1}],activeId:"tab-1",nextOrdinal:2}}function BP($,X){let J=$.tabs.findIndex((Y)=>Y.id===$.activeId);return{tabs:[...$.tabs.slice(0,J+1),X,...$.tabs.slice(J+1)],activeId:X.id,nextOrdinal:$.nextOrdinal+1}}function UP($,X){let J=$.nextOrdinal;return BP($,{kind:"engine",id:`tab-${J}`,title:null,ordinal:J,vendor:X})}function qn($,X,J){let Q=$.nextOrdinal;return BP($,{kind:"command",id:`tab-${Q}`,title:J,ordinal:Q,command:X})}function KP($){return $.tabs.find((X)=>X.kind==="command"&&X.purpose==="editor")}function Hn($,X,J){let Q=KP($);if(!Q){let q=$.nextOrdinal;return BP($,{kind:"command",id:`tab-${q}`,title:J,ordinal:q,command:X,purpose:"editor"})}let Y=$.tabs.map((q)=>q.id===Q.id?{...Q,title:J,command:X,splitTree:null}:q);return{...$,tabs:Y,activeId:Q.id}}function Wn($,X,J){let Q=$.tabs.map((Y)=>Y.id===X&&Y.kind==="engine"?{kind:"command",id:Y.id,title:Y.title,ordinal:Y.ordinal,autoTitle:Y.autoTitle,command:J}:Y);return{...$,tabs:Q}}function MP($,X){if($.tabs.length<=1)return{state:$,closedId:null};let J=$.tabs.findIndex((q)=>q.id===X);if(J<0)return{state:$,closedId:null};let Q=$.tabs.filter((q)=>q.id!==X);if($.activeId!==X)return{state:{...$,tabs:Q},closedId:X};let Y=Q[Math.max(0,J-1)];return{state:{...$,tabs:Q,activeId:(Y??Q[0]).id},closedId:X}}function Bn($){return MP($,$.activeId)}function Un($,X){let J=X.trim(),Q=$.tabs.map((Y)=>Y.id===$.activeId?{...Y,title:J.length>0?J:null}:Y);return{...$,tabs:Q}}function Kn($,X,J){let Q=$.tabs.map((Y)=>Y.id===X&&Y.kind==="engine"?{...Y,sessionId:J}:Y);return{...$,tabs:Q}}function Mn($,X,J){let Q=$.tabs.map((Y)=>Y.id===X?{...Y,autoTitle:J}:Y);return{...$,tabs:Q}}function FP($,X,J){let Q=$.tabs.map((Y)=>Y.id===X&&Y.kind==="engine"&&!Y.spawned!==!J?{...Y,spawned:J}:Y);return{...$,tabs:Q}}function Fn($,X,J){if(!$.sessionId)return X;if($.spawned&&!J)return[...X,"--resume",$.sessionId];return[...X,"--session-id",$.sessionId]}function Ln($,X,J){if($.kind==="command")return"close";if(X&&!!$.sessionId&&$.spawned&&!J)return"resume";return"degrade"}function Nn($,X){let J=$.tabs.map((q)=>q.kind==="command"?{...q,command:X,purpose:void 0}:q);if(J.length===0)return WP();let Q=J.some((q)=>q.id===$.activeId)?$.activeId:J[0].id,Y=J.reduce((q,W)=>Math.max(q,W.ordinal),0);return{tabs:J,activeId:Q,nextOrdinal:Math.max($.nextOrdinal,Y+1)}}function LP($,X){let J=$.tabs.length;if(J<=1)return $;let Q=$.tabs.findIndex((q)=>q.id===$.activeId),Y=$.tabs[(Q+X+J)%J];return{...$,activeId:Y.id}}function jn($,X){if($.activeId===X||!$.tabs.some((J)=>J.id===X))return $;return{...$,activeId:X}}function On($,X,J){if(!$.tabs.some((Y)=>Y.id===X))return $;let Q=$.tabs.map((Y)=>Y.id===X?{...Y,splitTree:J}:Y);return{...$,tabs:Q}}function MV($){return!$||Z7($.root).some((X)=>X.id==="leaf-1")}function FV($){return $?Z7($.root).length>1:!1}function NP($){let X=Z7($.root);return X.length===1&&X[0]?.id==="leaf-1"?null:$}function d7($,X){return`${$}::${X}`}function sQ($,X){return X==="leaf-1"?$:`${$}::${X}`}function Vn($,X,J,Q){let Y=(H)=>{let F=((H??X)[0]??"").split("/").at(-1)??"";return F.length>0?F:"?"},q=new Map,W=new Map;for(let H of $){if(H.title){W.set(H.id,H.title);continue}let K=H.content===null?J||Q?.get(H.id)||Y(H.content):Q?.get(H.id)||EK,F=(q.get(K)??0)+1;q.set(K,F),W.set(H.id,F===1?K:`${K} ${F}`)}return W}var EK="shell";var PH=()=>{};import{TextAttributes as Cn}from"@opentui/core";function t91($){let X=t2(),{theme:J}=Y0(),Q=I0(),Y=$.availableVendors.length>0?$.availableVendors:A4,q=$.allowShell?[...Y,"shell"]:Y,[W,H]=An.useState(Y.includes($.defaultVendor)?$.defaultVendor:q[0]??"claude");function K(O){$.onSubmit(O),X.clear()}let F=(O)=>H((V)=>{let N=q.indexOf(V);return q[(N+O+q.length)%q.length]??V});return e0(()=>({bindings:[{key:"left",cmd:()=>F(-1)},{key:"right",cmd:()=>F(1)},{key:"return",cmd:()=>K(W)}]})),T.jsxDEV("box",{paddingLeft:2,paddingRight:2,gap:1,children:[T.jsxDEV("box",{flexDirection:"row",justifyContent:"space-between",children:[T.jsxDEV("text",{attributes:Cn.BOLD,fg:J.text,children:$.dialogTitle??Q("terminal.tab.chooseEngineTitle")},void 0,!1,void 0,this),T.jsxDEV("text",{fg:J.textMuted,onMouseUp:()=>{$.onCancel(),X.clear()},children:"esc"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),T.jsxDEV("box",{flexDirection:"row",gap:2,children:q.map((O)=>{let V=W===O;return T.jsxDEV("text",{fg:V?J.primary:J.textMuted,attributes:V?Cn.BOLD:void 0,onMouseUp:()=>K(O),children:[V?"\u25B8 ":" ",O]},O,!0,void 0,this)})},void 0,!1,void 0,this),T.jsxDEV("box",{paddingBottom:1,children:T.jsxDEV("text",{fg:J.textMuted,children:Q("terminal.tab.chooseEngineHint")},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function e91($,X,J,Q={}){return new Promise((Y)=>{$.replace(()=>T.jsxDEV(t91,{availableVendors:X,defaultVendor:J,dialogTitle:Q.dialogTitle,allowShell:Q.allowShell,onSubmit:(q)=>Y(q),onCancel:()=>Y(void 0)},void 0,!1,void 0,this),()=>Y(void 0))})}var An,Dn;var _n=X1(async()=>{p4();c2();J0();await w2([N2(),I4(),q8()]);An=K0(f0(),1);Dn={show:e91}});import{RGBA as $X1}from"@opentui/core";function In($){if(!$)return;return $X1.fromInts($[0],$[1],$[2])}function XX1($){return{__isChunk:!0,text:$.text,...$.fg?{fg:In($.fg)}:{},...$.bg?{bg:In($.bg)}:{},...$.attributes!==void 0?{attributes:$.attributes}:{}}}function fn($){let X=[];for(let J=0;J<$.length;J++){if(J>0)X.push({__isChunk:!0,text:`
|
package/package.json
CHANGED