@sma1lboy/kobe 0.7.83 → 0.7.84
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 +1 -1
- package/package.json +2 -1
package/dist/cli/index.js
CHANGED
|
@@ -4,7 +4,7 @@ var Mi=Object.create;var{getPrototypeOf:Fi,defineProperty:dC,getOwnPropertyNames
|
|
|
4
4
|
`).filter((J)=>J.length>0)}wrapCommand($,X={}){let J=X.cwd?`cd ${iF(X.cwd)} && ${$}`:$;return`${nF(this.spec,{tty:X.tty}).map(ii).join(" ")} ${iF(J)}`}}var iF,ni,ZS=($,X)=>{let[J,...Q]=$,Y=mi(J??"",Q,{env:X?{...process.env,...X}:process.env,encoding:"utf8",shell:!1});return{stdout:Y.stdout??"",stderr:Y.stderr??"",exitCode:Y.status??-1}},oi=($,X,J)=>zS($,{env:X?{...process.env,...X}:process.env,signal:J?.signal});var XA=J1(()=>{pF();iF=oG,ni=rG});import{spawnSync as ri}from"child_process";import{platform as si}from"os";function QS($,X,J){return{service:ti,account:J?`${X}@${$}:${J}`:`${X}@${$}`}}function ZA($=JA){return $.platform()==="darwin"}function YS($,X,J=JA){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 oF($,X=JA){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 JA,ti="kobe-remote-ssh";var zA=J1(()=>{JA={run($){let[X,...J]=$,Q=ri(X??"",J,{encoding:"utf8",shell:!1});return{stdout:Q.stdout??"",exitCode:Q.status??-1}},platform(){return si()}}});import{existsSync as ei}from"fs";function GS($){let X=$.auth,J=X.kind==="key"?{kind:"key",keyPath:X.keyPath}:{kind:"password",getPassword:()=>oF(X.keychainRef)};return{host:$.host,user:$.user,port:$.port,auth:J,controlPath:mF($.host,$.user,$.port)}}function tG($){let X=r$($);if(!X)return new aF;return new sG(GS(X))}function N7($){for(let X of Object.values(eC()))if($===X.basePath||$.startsWith(`${X.basePath}/`))return new sG(GS(X));return new aF}function rF($){return $&&Q8($)?$:void 0}function HZ($){return N7($).isRemote||ei($)}function M4($){return N7($).isRemote?c7():$}var O$=J1(()=>{U4();H5();XA();zA()});function cB($){return`kobe-hidden-${$.replace(/[^A-Za-z0-9_-]/g,"")||"session"}`}function WS($){let X=Number.parseInt($.replace(/^@/,""),10);return Number.isFinite(X)&&X>=0?1000+X:1000}function GA($){if(!Number.isFinite($))return HS;return Math.max($a,Math.min(Xa,Math.round($)))}function JQ($){if(!Number.isFinite($))return null;return Math.max(Ja,Math.min(Za,Math.round($)))}function US($){let X=Number.parseInt($[sF]??"",10),J=Number.isFinite(X)&&X>0?GA(X):HS,Q=JQ(Number.parseInt($[tF]??"",10)),Y=JQ(Number.parseInt($[eF]??"",10)),q=[];if(Q!==null)q.push("-x",`${Q}%`);if(Y!==null)q.push("-y",`${Y}%`);return{tasksWidth:J,rightColumnWidthPct:Q??100-qA,opsHeightPct:Y??lB,rightColumnResizeArgs:q}}function C2($){return oG($)}function V$($){return rG($)}function C$($,X){let Y=`${X?QA:""}${$}; __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 KS($){return`trap '' INT; while :; do ${$}; sleep 1; done`}function $q($,X,J){return`${$}${X.map(C2).join(" ")} engine-tab-exit --session ${C2(J)}`}function MS(){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 HA($){let X=typeof $==="number"?$:$==null?Number.NaN:Number.parseInt($,10);if(!Number.isFinite(X))return za;return Math.max(Qa,Math.min(Ya,Math.round(X)))}function Ga($,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 FS($,X,J){let Q=C$($,J),Y=X?.initScript?.trim();if(!Y)return Q;let q=HA(X?.timeoutSeconds),W=Ga(Y,q);if(X?.markerPath){let H=C2(X.markerPath),K=C2(qa(X.markerPath));return QA+[`if [ ! -f ${H} ]; then`,W,`if [ "$__kobe_init_rc" -eq 0 ]; then mkdir -p ${K} && : > ${H}; fi`,"fi",Q].join(`
|
|
6
6
|
`)}return QA+[W,Q].join(`
|
|
7
|
-
`)}function qa($){let X=$.lastIndexOf("/");return X<=0?".":$.slice(0,X)}function qS($){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 LS($){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 NS($){return`${V$([...$.cliInvocation,"update-page"])}`}function OS($){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 BZ($,X={}){let J=[...$,"tasks"];if(X.initialTaskId)J.push("--initial-task-id",X.initialTaskId);return V$(J)}function Xq($){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} || { ${qS($.cwd)}; }`}return qS($.cwd)}var HS=32,l7="tasks",xX="claude",T6="ops",g6="shell",mB="workspace_aux",YA=4,E6="@kobe_hidden_shell_pane",j$="@kobe_hidden_tasks_pane",WZ="@kobe_zen_panes",eG="@kobe_zen",sF="@kobe_tasks_width",$a=16,Xa=120,qA=60,lB=50,tF="@kobe_right_width_pct",eF="@kobe_ops_height_pct",Ja=10,Za=90,BS,QA="trap ':' INT; ",za=120,Qa=5,Ya=3600;var s$=J1(()=>{pF();BS=[sF,tF,eF]});function Jq($,X,J){if(!X)return $;let Q=tG(X);return Q.ensureReady(),Q.wrapCommand($,{tty:!0,cwd:J})}function I4(){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 dB="@kobe_remote";var UZ=J1(()=>{O$();s$()});function jS(){return o$($L,!0)}function XL(){return o$(VS,!1)}function CS($){cF(VS,$)}var $L="zen.keepTasks",VS="zen.active";var WA=J1(()=>{E3()});var JL;var AS=J1(()=>{JL={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.83",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-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","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 _S={};V2(_S,{repoSlug:()=>ZQ,releasePageUrl:()=>FA,recommendedGlobalInstallCommand:()=>KA,isNewerSemver:()=>BA,fetchReleaseSummaries:()=>Ua,fetchReleaseNotesRange:()=>MA,fetchReleaseNotes:()=>Ba,compareSemver:()=>ZL,checkLatestVersion:()=>pB,UPDATE_SCRIPT_URL:()=>zL,UPDATE_COMMAND:()=>yX,PACKAGE_NAME:()=>UA,CURRENT_VERSION:()=>M2});function ZQ(){let $=JL.repository?.url;if(!$)return null;let X=$.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!X||!X[1]||!X[2])return null;return`${X[1]}/${X[2]}`}function KA(){return`npm install -g ${UA}@latest`}async function Wa($){let X=new AbortController,J=setTimeout(()=>X.abort(),QL);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 BA($,X){return ZL($,X)>0}function ZL($,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 pB($={}){let X=process.env.KOBE_FAKE_UPDATE;if(X)return{current:M2,latest:X,hasUpdate:BA(X,M2)};if(nG()&&!$.force)return null;let J=await Wa(UA);if(!J)return null;return{current:M2,latest:J,hasUpdate:BA(J,M2)}}function DS($){if(typeof $!=="string")return null;return $.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function Ba($){let X=ZQ();if(!X)return null;let J=`v${$}`,Q=new AbortController,Y=setTimeout(()=>Q.abort(),QL);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 MA($){let X=ZQ();if(!X)return[];let J=$.limit??100,Q=new AbortController,Y=setTimeout(()=>Q.abort(),QL);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=DS(H.tag_name);if(!K||typeof H.html_url!=="string"||typeof H.body!=="string")return null;if(ZL(K,$.current)<=0)return null;if(ZL(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 Ua($=12){let X=ZQ();if(!X)return[];let J=new AbortController,Q=setTimeout(()=>J.abort(),QL);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=DS(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 FA($){let X=ZQ();if(!X)return null;return`https://github.com/${X}/releases/tag/v${$}`}var M2,UA,zL="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",yX,QL=3000;var O7=J1(()=>{AS();U4();M2=JL.version,UA=JL.name;yX=`curl -fsSL ${zL} | sh`});import{spawnSync as Ka}from"child_process";import{existsSync as Ma,statSync as Fa}from"fs";import{homedir as La}from"os";import nB from"path";async function IS($=Na){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(nB.join(Y,".claude","local","claude"));if(q)return q;let W=$.env("NVM_BIN");if(W){let F=J(nB.join(W,"claude"));if(F)return F}let H=nB.join(Y,".nvm","versions","node"),K=$.readdir(H).sort().reverse();for(let F of K){let C=J(nB.join(H,F,"bin","claude"));if(C)return C}for(let F of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude","/bin/claude"]){let C=J(F);if(C)return C}for(let F of[".local/bin/claude",".npm-global/bin/claude",".yarn/bin/claude",".bun/bin/claude","bin/claude"]){let C=J(nB.join(Y,F));if(C)return C}throw new YL(X)}var YL,Na;var RS=J1(()=>{YL=class YL 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=$}};Na={fileExists($){try{return Fa($).isFile()}catch{return!1}},env($){return process.env[$]},home(){return La()},which($){let X=process.platform==="win32"?"where":"which",J=Ka(X,[$],{encoding:"utf8"});if(J.status!==0)return;let Q=J.stdout.split(`
|
|
7
|
+
`)}function qa($){let X=$.lastIndexOf("/");return X<=0?".":$.slice(0,X)}function qS($){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 LS($){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 NS($){return`${V$([...$.cliInvocation,"update-page"])}`}function OS($){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 BZ($,X={}){let J=[...$,"tasks"];if(X.initialTaskId)J.push("--initial-task-id",X.initialTaskId);return V$(J)}function Xq($){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} || { ${qS($.cwd)}; }`}return qS($.cwd)}var HS=32,l7="tasks",xX="claude",T6="ops",g6="shell",mB="workspace_aux",YA=4,E6="@kobe_hidden_shell_pane",j$="@kobe_hidden_tasks_pane",WZ="@kobe_zen_panes",eG="@kobe_zen",sF="@kobe_tasks_width",$a=16,Xa=120,qA=60,lB=50,tF="@kobe_right_width_pct",eF="@kobe_ops_height_pct",Ja=10,Za=90,BS,QA="trap ':' INT; ",za=120,Qa=5,Ya=3600;var s$=J1(()=>{pF();BS=[sF,tF,eF]});function Jq($,X,J){if(!X)return $;let Q=tG(X);return Q.ensureReady(),Q.wrapCommand($,{tty:!0,cwd:J})}function I4(){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 dB="@kobe_remote";var UZ=J1(()=>{O$();s$()});function jS(){return o$($L,!0)}function XL(){return o$(VS,!1)}function CS($){cF(VS,$)}var $L="zen.keepTasks",VS="zen.active";var WA=J1(()=>{E3()});var JL;var AS=J1(()=>{JL={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.84",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-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 _S={};V2(_S,{repoSlug:()=>ZQ,releasePageUrl:()=>FA,recommendedGlobalInstallCommand:()=>KA,isNewerSemver:()=>BA,fetchReleaseSummaries:()=>Ua,fetchReleaseNotesRange:()=>MA,fetchReleaseNotes:()=>Ba,compareSemver:()=>ZL,checkLatestVersion:()=>pB,UPDATE_SCRIPT_URL:()=>zL,UPDATE_COMMAND:()=>yX,PACKAGE_NAME:()=>UA,CURRENT_VERSION:()=>M2});function ZQ(){let $=JL.repository?.url;if(!$)return null;let X=$.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!X||!X[1]||!X[2])return null;return`${X[1]}/${X[2]}`}function KA(){return`npm install -g ${UA}@latest`}async function Wa($){let X=new AbortController,J=setTimeout(()=>X.abort(),QL);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 BA($,X){return ZL($,X)>0}function ZL($,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 pB($={}){let X=process.env.KOBE_FAKE_UPDATE;if(X)return{current:M2,latest:X,hasUpdate:BA(X,M2)};if(nG()&&!$.force)return null;let J=await Wa(UA);if(!J)return null;return{current:M2,latest:J,hasUpdate:BA(J,M2)}}function DS($){if(typeof $!=="string")return null;return $.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function Ba($){let X=ZQ();if(!X)return null;let J=`v${$}`,Q=new AbortController,Y=setTimeout(()=>Q.abort(),QL);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 MA($){let X=ZQ();if(!X)return[];let J=$.limit??100,Q=new AbortController,Y=setTimeout(()=>Q.abort(),QL);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=DS(H.tag_name);if(!K||typeof H.html_url!=="string"||typeof H.body!=="string")return null;if(ZL(K,$.current)<=0)return null;if(ZL(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 Ua($=12){let X=ZQ();if(!X)return[];let J=new AbortController,Q=setTimeout(()=>J.abort(),QL);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=DS(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 FA($){let X=ZQ();if(!X)return null;return`https://github.com/${X}/releases/tag/v${$}`}var M2,UA,zL="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",yX,QL=3000;var O7=J1(()=>{AS();U4();M2=JL.version,UA=JL.name;yX=`curl -fsSL ${zL} | sh`});import{spawnSync as Ka}from"child_process";import{existsSync as Ma,statSync as Fa}from"fs";import{homedir as La}from"os";import nB from"path";async function IS($=Na){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(nB.join(Y,".claude","local","claude"));if(q)return q;let W=$.env("NVM_BIN");if(W){let F=J(nB.join(W,"claude"));if(F)return F}let H=nB.join(Y,".nvm","versions","node"),K=$.readdir(H).sort().reverse();for(let F of K){let C=J(nB.join(H,F,"bin","claude"));if(C)return C}for(let F of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude","/bin/claude"]){let C=J(F);if(C)return C}for(let F of[".local/bin/claude",".npm-global/bin/claude",".yarn/bin/claude",".bun/bin/claude","bin/claude"]){let C=J(nB.join(Y,F));if(C)return C}throw new YL(X)}var YL,Na;var RS=J1(()=>{YL=class YL 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=$}};Na={fileExists($){try{return Fa($).isFile()}catch{return!1}},env($){return process.env[$]},home(){return La()},which($){let X=process.platform==="win32"?"where":"which",J=Ka(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&&Ma(Y)?Y:void 0}return Q},readdir($){try{return yB("fs").readdirSync($)}catch{return[]}}}});import{spawnSync as Oa}from"child_process";import{existsSync as ja,statSync as Va}from"fs";import{homedir as Ca}from"os";import fS from"path";async function PS($=Aa){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(fS.join(q,"codex"));if(W)return W}for(let W of[".local/bin/codex",".bun/bin/codex","bin/codex"]){let H=J(fS.join(Y,W));if(H)return H}throw new GL(X)}var GL,Aa;var SS=J1(()=>{GL=class GL 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=$}};Aa={fileExists($){try{return Va($).isFile()}catch{return!1}},env($){return process.env[$]},home(){return Ca()},which($){let X=process.platform==="win32"?"where":"which",J=Oa(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&&ja(Y)?Y:void 0}return Q},readdir($){try{return yB("fs").readdirSync($)}catch{return[]}}}});import{spawnSync as Da}from"child_process";import{existsSync as _a,statSync as Ia}from"fs";import{homedir as Ra}from"os";import KZ from"path";async function TS($=fa){let X=[],J=(C)=>{if(!C)return;return X.push(C),$.fileExists(C)?C: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=(C)=>{if(!C)return;for(let j of Y){let N=J(KZ.join(C,j));if(N)return N}return};for(let C of["/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin"]){let j=q(C);if(j)return j}let W=$.env("NVM_BIN"),H=q(W);if(H)return H;let K=$.home(),F=[KZ.join(K,".npm-global/bin"),KZ.join(K,".local/bin"),KZ.join(K,".bun/bin"),KZ.join(K,"bin")];if($.platform()==="win32"){let C=$.env("APPDATA"),j=$.env("LOCALAPPDATA");if(F.unshift(KZ.join(K,"AppData/Roaming/npm")),C)F.unshift(KZ.join(C,"npm"));if(j)F.unshift(KZ.join(j,"npm"))}for(let C of F){let j=q(C);if(j)return j}throw new qL(X)}var qL,fa;var gS=J1(()=>{qL=class qL 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=$}};fa={fileExists($){try{return Ia($).isFile()}catch{return!1}},env($){return process.env[$]},home(){return Ra()},which($){let X=process.platform==="win32"?"where":"which",J=Da(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&&_a(Y)?Y:void 0}return Q},platform(){return process.platform}}});import{readFileSync as Pa,statSync as Sa}from"fs";import{readFile as Ta,stat as ga}from"fs/promises";async function Zq($,X=ES){let{size:J}=await ga($);if(J>X)return"";return Ta($,"utf8")}function kS($,X=ES){let J;try{J=Sa($)}catch(Q){if(Q.code==="ENOENT")return null;throw Q}if(J.size>X)return null;return Pa($,"utf8")}function vX($,X=Ea){return $.length<=X}var ES=104857600,Ea=8388608;var zQ=()=>{};import{homedir as ka}from"os";import MZ from"path";function wa($,X){let J=$("CLAUDE_CONFIG_DIR")?.trim();if(J)return MZ.join(J,".claude.json");return MZ.join(X,".claude.json")}function ba($,X){let Q=$("CODEX_HOME")?.trim()??MZ.join(X,".codex");return MZ.join(Q,"auth.json")}function xa($,X){let Q=$("COPILOT_HOME")?.trim()??MZ.join(X,".copilot");return MZ.join(Q,"config.json")}function ya($){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 WL($){try{return{found:!0,path:await $()}}catch(X){if(X instanceof YL||X instanceof GL||X instanceof qL)return{found:!1,error:"not found on PATH"};return{found:!1,error:X instanceof Error?X.message:String(X)}}}async function wS($){return(await Promise.all([["claude",()=>$.findClaudeBinary()],["codex",()=>$.findCodexBinary()],["copilot",()=>$.findCopilotBinary()]].map(async([Q,Y])=>(await WL(Y)).found?Q:null))).filter((Q)=>Q!==null)}function va($=zq){if($!==zq)return wS($);if(HL)return HL;let X=wS($).catch((J)=>{throw HL=null,J});return HL=X,X}async function k3($=zq){return[...await va($),...aG()]}async function BL($=zq){let X=await WL(()=>$.findClaudeBinary()),J=wa($.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 UL($=zq){let X=await WL(()=>$.findCodexBinary()),J=ba($.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=ya(H);if(!F)return{binary:X,account:{kind:"none"},accountError:"codex id_token: malformed JWT"};let C=typeof F.email==="string"?F.email:void 0,j=F["https://api.openai.com/auth"],N=typeof j==="object"&&j!==null&&!Array.isArray(j)?j:void 0,I=typeof N?.chatgpt_plan_type==="string"?N.chatgpt_plan_type:void 0;if(C)return{binary:X,account:{kind:"chatgpt",email:C,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 KL($=zq){let X=await WL(()=>$.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=xa($.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(!LA(Y))return{binary:X,account:{kind:"none"}};if(bS(Y,["github_token","oauth_token","access_token","token","selectedUser","currentUser","user"]))return{binary:X,account:{kind:"oauth"}};return{binary:X,account:{kind:"none"}}}function LA($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function bS($,X,J=0){if(J>4||!LA($))return!1;for(let[Q,Y]of Object.entries($)){if(X.includes(Q)&&typeof Y==="string"&&Y.length>0)return!0;if(LA(Y)&&bS(Y,X,J+1))return!0}return!1}var zq,HL=null;var FZ=J1(()=>{H5();RS();SS();gS();zQ();zq={readFile($){return kS($)},env($){return process.env[$]},home(){return ka()},findClaudeBinary(){return IS()},findCodexBinary(){return PS()},findCopilotBinary(){return TS()}}});function xS($,X){return ua.map((J)=>({vendor:"claude",id:$,effort:J,level:J,label:`${X} \xB7 ${J}`,hint:J==="max"?"deepest reasoning":`${J} effort`}))}function vS($){return/1m/i.test($)?ha:ma}var ua,yS,ha=1e6,ma=200000;var uS=J1(()=>{ua=["low","medium","high","xhigh","max"];yS=[{vendor:"claude",id:"claude-opus-4-7[1m]",label:"Opus 4.7 1M",hint:"long context, default"},...xS("claude-opus-4-7[1m]","Opus 4.7 1M"),{vendor:"claude",id:"claude-opus-4-7",label:"Opus 4.7",hint:"most capable, slowest"},...xS("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 ca}from"fs";import{homedir as la}from"os";import{join as da}from"path";function na(){if(Qq!==void 0)return Qq;try{let $=ca(pa,"utf8"),X=JSON.parse($);if(!X||typeof X!=="object")return Qq=null,null;let J=X;return Qq={model:typeof J.model==="string"&&J.model.length>0?J.model:void 0},Qq}catch{return Qq=null,null}}function hS(){let $=na();if($?.model&&$.model.length>0)return $.model;return ia}var pa,Qq,ia="claude-opus-4-7[1m]";var mS=J1(()=>{pa=da(la(),".claude","settings.json")});var cS,lS;var dS=J1(()=>{uS();mS();cS={vendorId:"claude",label:"Claude Code",models:yS,permissionModes:[{id:"acceptEdits",label:"accept edits"},{id:"default",label:"default"},{id:"plan",label:"plan mode"}],defaultModelId:hS,contextWindowFor:vS,smallFastModelId:()=>"claude-haiku-4-5-20251001"},lS={vendorId:"claude",productName:"Claude Code",shortName:"Claude",assistantName:"Claude",inputPlaceholder:"Ask Claude\u2026"}});import{createHash as aa}from"crypto";function Yq($){let X=$.maxFiles??8,J=new Map;function Q(q,W){return aa("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(`
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@sma1lboy/kobe",
|
|
4
|
-
"version": "0.7.
|
|
4
|
+
"version": "0.7.84",
|
|
5
5
|
"description": "TUI orchestrator for Claude Code (codename)",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"packageManager": "bun@1.3.13",
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
"typecheck": "tsc --noEmit",
|
|
45
45
|
"check-i18n": "bun run scripts/check-i18n.ts",
|
|
46
46
|
"test": "bun run test:fast && bun run test:socket",
|
|
47
|
+
"perf:golden": "bun scripts/perf-golden.ts",
|
|
47
48
|
"test:fast": "vitest run --passWithNoTests --minWorkers=1 --maxWorkers=4",
|
|
48
49
|
"test:socket": "KOBE_INCLUDE_SOCKET=1 vitest run test/daemon --pool forks --minWorkers=1 --maxWorkers=1 --passWithNoTests",
|
|
49
50
|
"test:behavior": "KOBE_INCLUDE_BEHAVIOR=1 vitest run test/behavior --pool forks --minWorkers=1 --maxWorkers=1 --passWithNoTests",
|