@sma1lboy/kobe 0.8.72 → 0.8.73

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.
Files changed (2) hide show
  1. package/dist/cli/index.js +17 -17
  2. package/package.json +1 -1
package/dist/cli/index.js CHANGED
@@ -281,8 +281,8 @@ ${G}`,Z);this.line=J,this.column=X,this.codeblock=G}}});function mO($,Z){let J=$
281
281
  `)){let U=H.trim();if(!U)continue;if(!BJ(U))continue;let K;try{K=JSON.parse(U)}catch{continue}if(!UP(K)||typeof K.type!=="string")continue;let F=typeof K.timestamp==="string"?K.timestamp:new Date().toISOString(),L=UP(K.data)?K.data:{};if(K.type==="session.start"){let M=typeof L.sessionId==="string"?L.sessionId:void 0;if(M)G=M;continue}if(K.type==="user.message"){let M=typeof L.content==="string"?L.content:"";if(!M)continue;if(!W)W=Buffer.from(M.slice(0,a60),"utf8").toString("utf8");J.push({role:"user",blocks:[{type:"text",text:M}],timestamp:F,sessionId:G});continue}if(K.type==="assistant.message"){let M=[],V=typeof L.content==="string"?L.content:"";if(V)M.push({type:"text",text:V});let S=Array.isArray(L.toolRequests)?L.toolRequests:[];for(let _ of S){if(!UP(_))continue;let A=typeof _.id==="string"?_.id:typeof _.toolCallId==="string"?_.toolCallId:"tool",f=typeof _.name==="string"?_.name:typeof _.toolName==="string"?_.toolName:"tool";M.push({type:"tool_call",callId:A,name:f,input:_.arguments??{}})}if(M.length>0)J.push({role:"assistant",blocks:M,timestamp:F,sessionId:G});continue}if(K.type==="tool.execution_start"){let M=typeof L.toolCallId==="string"?L.toolCallId:void 0,V=typeof L.toolName==="string"?L.toolName:"tool";if(M)X.set(M,V);continue}if(K.type==="tool.execution_complete"){let M=typeof L.toolCallId==="string"?L.toolCallId:void 0;if(!M)continue;let V=X.get(M)??(typeof L.toolName==="string"?L.toolName:"tool"),S=L.result??(L.success===!1?{success:!1}:void 0);J.push({role:"assistant",blocks:[{type:"tool_result",callId:M,output:S,isError:L.success===!1}],timestamp:F,sessionId:G});continue}if(K.type==="session.shutdown")Y=Yy(L)}return{messages:J,toolNameById:X,sessionId:G,usageMetrics:Y,firstUserMessage:W}}function UP($){return typeof $==="object"&&$!==null&&!Array.isArray($)}var rz,i60,a60=200;var Uy=a(()=>{iz();eO();rz={copilotDir(){let $=process.env.COPILOT_HOME?.trim();if($)return $;return GQ.join(c60(),".copilot")},async readdir($){try{return await m60($)}catch{return[]}},async readFile($){return await qH($)},stat:u60,async rm($){await h60($,{recursive:!0,force:!0})}};i60=MH({initial:n60,parseChunk:($,Z)=>o60($,Z)})});var YL,By,Ky;var WL=a(()=>{YL=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],By=["\xB7","\u2722","\u2733","\u2736","\u273B","\u273D"],Ky=[...By,...[...By].reverse()]});import{readFile as My,stat as s60}from"fs/promises";class HL{supportsCompletionMarkers(){return!0}async latestCompletion($){return(await this.latestActivity($)).marker}async latestActivityInFile($){return null}}function Fy($){return S4($).createTurnDetector()}function Ny($,Z="claude",J=0){let X=null,G=0;for(let Y of $.split(`
282
282
  `)){G++;let W=Ly(Y);if(!W)continue;let H=FP(W.message)?W.message:W;if(H.role!=="assistant")continue;if(!("content"in H))continue;let U=jy(W,J),K={id:`claude:${Z}:${U}:${G}`,timestampMs:U,source:"claude"};if(!X||K.timestampMs>=X.timestampMs)X=K}return X}function Z90($){if($.type==="turn.completed")return!0;if($.type!=="event_msg")return!1;let Z=FP($.payload)?$.payload:void 0;return typeof Z?.type==="string"&&$90.has(Z.type)}function J90($,Z="codex"){let J=null,X=0;for(let G of $.split(`
283
283
  `)){X++;let Y=Ly(G);if(!Y||!Z90(Y))continue;let W=jy(Y,0),H={id:`codex:${Z}:${W}:${X}`,timestampMs:W,source:"codex"};if(!J||H.timestampMs>=J.timestampMs)J=H}return J}function Ly($){let Z=$.trim();if(!Z)return null;try{let J=JSON.parse(Z);return FP(J)?J:null}catch{return null}}function jy($,Z){let J=typeof $.timestamp==="string"?Date.parse($.timestamp):Number.NaN;return Number.isFinite(J)?J:Z}function FP($){return typeof $==="object"&&$!==null&&!Array.isArray($)}var Oy=($)=>s60($).then((Z)=>Z.mtimeMs,()=>0),t60,NP,e60,MP,NK,$90;var OP=a(()=>{oD();QL();k7();t60={listSessionFiles:($)=>FH($),readFile:($)=>My($,"utf8"),statMtimeMs:Oy};NP=class NP extends HL{deps;vendor="claude";cache=new Map;constructor($=t60){super();this.deps=$}async latestActivity($){let Z=await this.deps.listSessionFiles($),J=Z[0]?.mtimeMs??0,X=null,G=new Map;for(let Y of Z.slice(0,4)){let W=this.cache.get(Y.path),H;if(W&&Y.mtimeMs>0&&W.mtimeMs===Y.mtimeMs)H=W.marker;else{let U=await this.deps.readFile(Y.path).catch(()=>"");H=Ny(U,Y.path,Y.mtimeMs)}if(G.set(Y.path,{mtimeMs:Y.mtimeMs,marker:H}),H&&(!X||H.timestampMs>X.timestampMs))X=H}return this.cache=G,{marker:X,mtimeMs:J}}async latestActivityInFile($){let Z=await(this.deps.statMtimeMs??Oy)($);if(Z===0)return null;let J=await this.deps.readFile($).catch(()=>"");return{marker:Ny(J,$,Z),mtimeMs:Z}}};e60={findLatestRollout:($)=>HP($),readFile:($)=>My($,"utf8")};MP=class MP extends HL{deps;vendor="codex";cache=null;constructor($=e60){super();this.deps=$}async latestActivity($){if(!$)return{marker:null,mtimeMs:0};let Z=await this.deps.findLatestRollout($);if(!Z)return{marker:null,mtimeMs:0};if(this.cache&&this.cache.path===Z.path&&Z.mtimeMs>0&&this.cache.mtimeMs===Z.mtimeMs)return{marker:this.cache.marker,mtimeMs:Z.mtimeMs};let J=await this.deps.readFile(Z.path).catch(()=>"");if(!J)return{marker:null,mtimeMs:Z.mtimeMs};let X=J90(J,Z.path);return this.cache={path:Z.path,mtimeMs:Z.mtimeMs,marker:X},{marker:X,mtimeMs:Z.mtimeMs}}};NK=class NK extends HL{vendor;constructor($){super();this.vendor=$}supportsCompletionMarkers(){return!1}async latestActivity(){return{marker:null,mtimeMs:0}}};$90=new Set(["task_complete","turn_complete","turn_aborted"])});function G90($){return{vendor:$,builtin:!1,displayName:$,defaultCommand:[$],history:LP,detectAccount:async()=>({binary:{found:!1,error:"custom engine: kobe has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new MK($),createTurnDetector:()=>new NK($)}}function S4($){return x7($)?jP[$]:G90($)}function Vy($){return S4($).history!==LP}function VP($){let Z=S4($).terminalTitle?.statusPrefixes;return Z&&Z.length>0?Z:_y}function LH($,Z){let J=Z?VP(Z):_y;for(let X of[...J].sort((G,Y)=>Y.length-G.length)){if(!$.startsWith(X))continue;let G=$.slice(X.length).trimStart();if(G.length===0)return $;return G}return $}function qL($,Z){let J=S4($).terminalTitle,X=J?.workingPrefixes;if(J?.ownsStatus!==!0||!X||X.length===0)return null;let G=Z.trim();if(G.length===0)return null;return X.some((Y)=>G.startsWith(Y))?"working":"rest"}function Cy(){return Object.values(jP).filter(($)=>$.quotaUsage).map(($)=>$.vendor)}var LP,X90,Q90,z90,jP,_y;var k7=a(()=>{f7();KJ();Fb();oD();wb();kb();hb();QL();Xy();Gy();Uy();_P();WL();OP();LP={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async transcriptPath(){return null},async latestTranscriptMtimeForWorktree(){return 0}},X90={async listSessionIdsForWorktree($){return[...await FH($)].sort((J,X)=>J.mtimeMs-X.mtimeMs).map((J)=>J.sessionId)},readHistory:($)=>Db($),async transcriptPath($,Z){return(await FH(Z)).find((X)=>X.sessionId===$)?.path??null},latestTranscriptMtimeForWorktree:($)=>Ab($)},Q90={listSessionIdsForWorktree:($)=>tb($),readHistory:($)=>$y($),transcriptPath:async($)=>await WP($)??null,latestTranscriptMtimeForWorktree:($)=>eb($)},z90={listSessionIdsForWorktree:($)=>Wy($),readHistory:($)=>qy($),transcriptPath:async()=>null,latestTranscriptMtimeForWorktree:($)=>Hy($)},jP={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:X90,detectAccount:($)=>UH($),createHookAdapter:()=>new sD,createTurnDetector:()=>new NP,capabilities:Nb,identity:Mb,spinnerFrames:Ky,terminalTitle:{ownsStatus:!0,statusPrefixes:["\u2733","\u2802","\u2810","\u25D0","\u25D1"],workingPrefixes:["\u2802","\u2810","\u25D0","\u25D1"]},quotaUsage:()=>yb()},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:Q90,detectAccount:($)=>BH($),createHookAdapter:()=>new qP,createTurnDetector:()=>new MP,capabilities:vb,identity:mb,terminalTitle:{ownsStatus:!0,launchArgs:["-c",'tui.terminal_title=["activity","thread-title"]'],statusPrefixes:["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],workingPrefixes:["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]},quotaUsage:()=>zy()},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:z90,detectAccount:($)=>KH($),createHookAdapter:()=>new MK("copilot"),createTurnDetector:()=>new NK("copilot")},kimi:{vendor:"kimi",builtin:!0,displayName:"Kimi",defaultCommand:["kimi"],history:LP,detectAccount:($)=>sO($),createHookAdapter:()=>new MK("kimi"),createTurnDetector:()=>new NK("kimi")}};_y=[...new Set(Object.values(jP).flatMap(($)=>$.terminalTitle?.statusPrefixes??[]))]});function CP($){return S4($).createHookAdapter()}class MK{vendor;constructor($){this.vendor=$}supportsHooks(){return!1}globalSettingsPath(){return""}activityDetailFromPayload(){return}sessionFromPayload(){return}async installActivityHooks(){}async removeActivityHooks(){}supportsWorktreeSync(){return!1}async removeWorktreeSyncHook(){}async installWorktreeWatchHook(){}async removeWorktreeWatchHook(){}}var _P=a(()=>{k7()});function UL($){return Y90.includes($)}function Ay($){return W90.includes($)}var Y90,W90;var AP=a(()=>{Y90=["session-start","turn-start","turn-complete","turn-failed","turn-interrupted","awaiting-input","session-end","tool-pre","tool-post","tool-failed","pre-compact","post-compact","subagent-start","subagent-stop"];W90=["session-start","turn-start","turn-complete","turn-failed","turn-interrupted","awaiting-input","session-end"]});var gy={};x4(gy,{runHookSubcommand:()=>M90,readTextWithTimeout:()=>Ry,parseWorktreeRemovePath:()=>Ey,parseWorktreeAddPath:()=>Iy,ensureGlobalKobeHooks:()=>RP});import{readFileSync as H90}from"fs";import{homedir as q90}from"os";import{join as PP,resolve as DP}from"path";async function Ry($,Z=U90){let J;try{return await Promise.race([$(),new Promise((X)=>{J=setTimeout(()=>X(""),Z)})])}finally{if(J!==void 0)clearTimeout(J)}}async function Ty(){try{let $=await Ry(()=>Bun.stdin.text());if(!$.trim())return{};let Z=JSON.parse($);return Z&&typeof Z==="object"&&!Array.isArray(Z)?Z:{}}catch{return{}}}function Dy($,Z){for(let J=0;J<$.length;J++){if($[J]===Z)return $[J+1];if($[J].startsWith(`${Z}=`))return $[J].slice(Z.length+1)}return}function K90($){return!!$&&typeof $==="object"&&!Array.isArray($)}function Sy($){let Z=[],J=/"([^"]*)"|'([^']*)'|(\S+)/g,X;while((X=J.exec($))!==null)Z.push(X[1]??X[2]??X[3]??"");return Z}function Iy($){let Z=Sy($),J=new Set(["-b","-B","--reason"]);for(let X=0;X+1<Z.length;X++){if(Z[X]!=="worktree"||Z[X+1]!=="add")continue;let G=X+2;while(G<Z.length){let Y=Z[G];if(Y==="&&"||Y==="||"||Y===";"||Y==="|"||Y===">"||Y===">>")break;if(Y.startsWith("-")){G+=J.has(Y)?2:1;continue}return Y}}return}function Ey($){let Z=Sy($);for(let J=0;J+1<Z.length;J++){if(Z[J]!=="worktree"||Z[J+1]!=="remove")continue;let X=J+2;while(X<Z.length){let G=Z[X];if(G==="&&"||G==="||"||G===";"||G==="|"||G===">"||G===">>")break;if(G.startsWith("-")){X+=1;continue}return G}}return}async function N90(){let $=await Ty(),Z=K90($.tool_input)?$.tool_input:{},J=typeof Z.command==="string"?Z.command:"";if(!J.includes("worktree"))return;let X=typeof $.cwd==="string"&&$.cwd?$.cwd:process.cwd(),G=Iy(J),Y=G?void 0:Ey(J);if(!G&&!Y)return;let W=await iX();if(!W)return;try{if(G)await W.request("worktree.reconcile",{cwd:X,worktreePath:DP(X,G)});else if(Y)await W.request("worktree.archiveRemoved",{worktreePath:DP(X,Y)})}finally{W.close()}}async function M90($){let[Z,...J]=$;if(Z==="setup"){await j90(J);return}if(Z===B90){try{await N90()}catch{}return}try{if(!Z||!UL(Z))return;let X=await Ty(),G=Dy(J,"--task-id"),Y=typeof X.cwd==="string"&&X.cwd?X.cwd:process.cwd(),W=process.env.KOBE_TASK_ID,H=process.env.KOBE_TAB_ID,U=Dy(J,"--engine"),K=wy().filter((V)=>!U||V.vendor===U),F;for(let V of K)if(F=V.activityDetailFromPayload(Z,X),F)break;let L;for(let V of K)if(L=V.sessionFromPayload(X),L)break;let M=await iX();if(!M)return;try{let V=G??W;await M.request("engine.reportEvent",{...V?{taskId:V}:{cwd:Y},kind:Z,...U?{engine:U}:{},...H?{tabId:H}:{},...F?{detail:F}:{},...L?{sessionId:L.sessionId}:{},...L?.transcriptPath?{transcriptPath:L.transcriptPath}:{}})}finally{M.close()}}catch(X){if(process.env.KOBE_HOOK_DEBUG)console.error(`[kobe hook] ${Z} failed:`,X instanceof Error?X.message:String(X))}}function F90(){return V8.map(($)=>CP($)).filter(($)=>$.supportsWorktreeSync())}function wy(){return V8.map(($)=>CP($)).filter(($)=>$.supportsHooks())}function xy(){return PP(q90(),".claude","settings.json")}function O90($){if(!$||$==="off")return;if($==="global")return xy();if($.startsWith("repo:"))return PP(DP($.slice(5)),".claude","settings.json");return $}async function RP(){try{let $=L90();for(let Z of wy()){let J=Z.globalSettingsPath();if(!J)continue;await Z.installActivityHooks(J,{toolEvents:$}),await Z.installWorktreeWatchHook(J)}await fy()}catch{}}function L90(){try{for(let $ of M5().plugins){if(!$.enabled)continue;try{let Z=H90(PP($.root,_2),"utf8");if(p2(Z).manifest.events.some((J)=>J.on.startsWith("tool.")))return!0}catch{}}}catch{}return!1}async function fy(){let $=F90();if($.length===0)return;let Z=y7(Py),J=new Set([xy()]),X=O90(Z);if(X)J.add(X);for(let G of $)for(let Y of J)await G.removeWorktreeSyncHook(Y);if(Z!=="off")b3(Py,"off")}async function j90($){await fy(),process.stdout.write(["kobe hook setup is deprecated and now a no-op (cleanup only).","","The old external-worktree sync used a global WorktreeCreate hook, which is","a VCS provider hook \u2014 its presence broke `claude --worktree` / EnterWorktree","in every repo. Any hook kobe previously installed has been removed.","","Sync is now automatic: a `claude --worktree` (or any session) started in a","worktree under a repo kobe already tracks is adopted as a task on launch.","To adopt existing worktrees on demand, use the New Task dialog or `kobe adopt`.",""].join(`
284
- `))}var U90=500,B90="worktree-created",Py="externalWorktreeSync";var TP=a(()=>{O2();$Q();UJ();_P();AP();k$();f7()});var BL;var by=a(()=>{BL={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.8.72",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/skills","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:"KOBE_DEV=1 bun --conditions=browser ./src/cli/index.ts","dev:mock":"KOBE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:mock-react":"KOBE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:mock-react-task-dialogs":"KOBE_DEV=1 bun ./src/tui-react/component/mock-dialogs-host.tsx","dev:mock-react-filetree":"KOBE_DEV=1 bun ./src/tui-react/panes/filetree/mock-host.tsx","dev:mock-react-sidebar":"KOBE_DEV=1 bun ./src/tui-react/panes/sidebar/mock-host.tsx","dev:mock-react-terminal":"KOBE_DEV=1 bun ./src/tui-react/panes/terminal/mock-host.tsx","dev:mock-react-dialogs":"KOBE_DEV=1 bun ./src/tui-react/mock/dialogs-host.tsx","dev:mock-react-workspace":"KOBE_DEV=1 bun ./src/tui-react/workspace/mock-host.tsx","dev:sandbox":"bun run scripts/dev-sandbox.ts run","dev:sandbox:reset":"bun run scripts/dev-sandbox.ts reset",build:"bun run scripts/build.ts","build:with-web":"bun run build",compile:"bun run scripts/compile.ts",typecheck:"tsc --noEmit","check-i18n":"bun run scripts/check-i18n.ts",test:"bun run test:fast && bun run test:socket","perf:golden":"bun scripts/perf-golden.ts","pty:soak":"bun scripts/pty-soak.ts","test:fast":"vitest run --passWithNoTests --minWorkers=1 --maxWorkers=8","test:socket":"KOBE_INCLUDE_SOCKET=1 vitest run test/daemon --pool forks --minWorkers=1 --maxWorkers=4 --passWithNoTests","test:socket:coverage":"KOBE_INCLUDE_SOCKET=1 KOBE_COVERAGE_DAEMON=1 vitest run test/daemon --coverage --pool forks --minWorkers=1 --maxWorkers=4 --passWithNoTests","test:behavior":"KOBE_INCLUDE_BEHAVIOR=1 vitest run test/behavior --pool forks --minWorkers=1 --maxWorkers=1 --retry=2 --passWithNoTests","test:render":"bun test test/render --coverage --coverage-reporter=text --coverage-reporter=lcov --coverage-dir=coverage-render",coverage:"vitest run --coverage --passWithNoTests",bench:"vitest bench --run",lint:"biome check .",knip:"knip-bun",postinstall:"bun run scripts/check-preview-deps.ts || true",prepublishOnly:"bun run typecheck && bun run build"},"//":"biome.json + bunfig.toml live at the monorepo root since they apply repo-wide; bun.lock also lives at root (workspace-shared).",dependencies:{"@ansi-tools/parser":"^1.0.15","@opentui/core":"0.4.3","@opentui/react":"0.4.3","@xterm/addon-serialize":"^0.14.0","@xterm/addon-unicode11":"^0.9.0","@xterm/headless":"^6.0.0","node-pty":"^1.1.0",react:"^19.2.8",ws:"^8.18.0"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/kobe-daemon":"0.7.12","@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 ky={};x4(ky,{repoSlug:()=>sz,releasePageUrl:()=>fP,recommendedGlobalInstallCommand:()=>EP,isNewerSemver:()=>SP,fetchReleaseSummaries:()=>OK,fetchReleaseNotesRange:()=>xP,fetchReleaseNotes:()=>wP,compareSemver:()=>Z3,checkLatestVersion:()=>tz,breakingVersionsCrossed:()=>FK,UPDATE_SCRIPT_URL:()=>KL,UPDATE_COMMAND:()=>o9,PACKAGE_NAME:()=>IP,CURRENT_VERSION:()=>V4,BREAKING_VERSIONS:()=>MJ});function sz(){let $=BL.repository?.url;if(!$)return null;let Z=$.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!Z||!Z[1]||!Z[2])return null;return`${Z[1]}/${Z[2]}`}function EP(){return`npm install -g ${IP}@latest`}function FK($,Z,J=MJ){let[X,G]=Z3($,Z)<=0?[$,Z]:[Z,$];return J.filter((Y)=>Z3(Y,X)>0&&Z3(Y,G)<=0)}async function _90($){let Z=new AbortController,J=setTimeout(()=>Z.abort(),NL);try{let X=$.replace("/","%2F"),G=await fetch(`https://registry.npmjs.org/${X}/latest`,{signal:Z.signal,headers:{accept:"application/json"}});if(!G.ok)return null;let Y=await G.json();if(typeof Y.version!=="string")return null;return Y.version}catch{return null}finally{clearTimeout(J)}}function SP($,Z){return Z3($,Z)>0}function Z3($,Z){let J=(Y)=>Y.split("-")[0]??Y,X=J($).split(".").map((Y)=>Number.parseInt(Y,10)),G=J(Z).split(".").map((Y)=>Number.parseInt(Y,10));for(let Y=0;Y<3;Y++){let W=X[Y]??0,H=G[Y]??0;if(Number.isNaN(W)||Number.isNaN(H))return 0;if(W>H)return 1;if(W<H)return-1}return 0}async function tz($={}){let Z=process.env.KOBE_FAKE_UPDATE;if(Z)return{current:V4,latest:Z,hasUpdate:SP(Z,V4)};if(lW()&&!$.force)return null;let J=await _90(IP);if(!J)return null;return{current:V4,latest:J,hasUpdate:SP(J,V4)}}function yy($){if(typeof $!=="string")return null;return $.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function wP($){let Z=sz();if(!Z)return null;let J=`v${$}`,X=new AbortController,G=setTimeout(()=>X.abort(),NL);try{let Y=await fetch(`https://api.github.com/repos/${Z}/releases/tags/${J}`,{signal:X.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!Y.ok)return null;let W=await Y.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(G)}}async function xP($){let Z=sz();if(!Z)return[];let J=$.limit??100,X=new AbortController,G=setTimeout(()=>X.abort(),NL);try{let Y=await fetch(`https://api.github.com/repos/${Z}/releases?per_page=${J}`,{signal:X.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!Y.ok)return[];let W=await Y.json();if(!Array.isArray(W))return[];return W.map((H)=>{let U=yy(H.tag_name);if(!U||typeof H.html_url!=="string"||typeof H.body!=="string")return null;if(Z3(U,$.current)<=0)return null;if(Z3(U,$.latest)>0)return null;return{version:U,url:H.html_url,body:H.body}}).filter((H)=>H!==null)}catch{return[]}finally{clearTimeout(G)}}async function OK($=12){let Z=sz();if(!Z)return[];let J=new AbortController,X=setTimeout(()=>J.abort(),NL);try{let G=await fetch(`https://api.github.com/repos/${Z}/releases?per_page=${$}`,{signal:J.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!G.ok)return[];let Y=await G.json();if(!Array.isArray(Y))return[];return Y.map((W)=>{let H=yy(W.tag_name);if(!H||typeof W.html_url!=="string")return null;return{version:H,url:W.html_url}}).filter((W)=>W!==null)}catch{return[]}finally{clearTimeout(X)}}function fP($){let Z=sz();if(!Z)return null;return`https://github.com/${Z}/releases/tag/v${$}`}var V4,IP,KL="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",o9,MJ,NL=3000;var D8=a(()=>{by();R5();V4=BL.version,IP=BL.name;o9=`curl -fsSL ${KL} | sh`;MJ=[]});var my={};x4(my,{stampResetGate:()=>ML,resetGateBlockers:()=>vy,enforceResetGate:()=>bP,LAST_RUN_VERSION_KEY:()=>gP});function vy($,Z=V4,J=MJ){if(typeof $!=="string"||$.length===0)return[];let[X,G]=Z3($,Z)<=0?[$,Z]:[Z,$];return J.filter((Y)=>Z3(Y,X)>0&&Z3(Y,G)<=0)}function bP(){let $=j$()[gP],Z=vy($);if(Z.length>0){let J=typeof $==="string"?$:"unknown";console.error([`kobe ${V4}: cannot start \u2014 version ${Z.join(", ")} introduced breaking changes`,`(last run: ${J}). Your daemon/session state may be incompatible.`,"","Run:"," kobe reset # stop daemon + PTY host + sessions (tasks kept)"," kobe reset --hard # additionally wipe the task index + UI state","","Then relaunch kobe. Worktrees are never touched."].join(`
285
- `)),process.exit(1)}if($!==V4)ML()}function ML(){try{c2({[gP]:V4})}catch{}}var gP="app.lastRunVersion";var FL=a(()=>{L2();D8()});import{existsSync as uy,readFileSync as C90}from"fs";import{homedir as A90}from"os";import{join as cy,resolve as hy}from"path";import{fileURLToPath as D90}from"url";function OL(){let $=D90(import.meta.url);return[hy($,"../../../../../.agents/skills/kobe"),hy($,"../../skills/kobe")].find((J)=>uy(cy(J,"SKILL.md")))??null}function LL($={}){let Z=$.source!==void 0?$.source:OL(),J=$.agent===void 0?[]:typeof $.agent==="string"?[$.agent]:$.agent;return["skills","add",Z??R90,"--skill","kobe",...J.flatMap((X)=>["--agent",X])]}function ez($={}){return`npx ${LL($).join(" ")}`}async function vP($){return await Bun.spawn(["npx",...LL($===void 0?{}:{agent:$})],{stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited}function jL($={}){let Z=$.home??A90(),J=$.cwd??process.cwd();return[Z,J].flatMap((X)=>P90.map((G)=>cy(X,G)))}function T90($){let Z=$.match(/kobe-skill-version:\s*(\d+)/);return Z?Number.parseInt(Z[1],10):null}function LK($){let Z=jL($).find((G)=>uy(G));if(!Z)return{installed:!1,installedVersion:null,currentVersion:yP,stale:!1};let J=null;try{J=T90(C90(Z,"utf8"))}catch{J=null}let X=J===null||J<yP;return{installed:!0,installedVersion:J,currentVersion:yP,stale:X}}function S90(){return new Promise(($)=>{process.stdin.resume(),process.stdin.once("data",(Z)=>{process.stdin.pause(),$(String(Z))})})}async function dy($={}){let Z=LK();if(!Z.installed){if(y7(kP)==="1")return;b3(kP,"1"),process.stderr.write(`
284
+ `))}var U90=500,B90="worktree-created",Py="externalWorktreeSync";var TP=a(()=>{O2();$Q();UJ();_P();AP();k$();f7()});var BL;var by=a(()=>{BL={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.8.73",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/skills","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:"KOBE_DEV=1 bun --conditions=browser ./src/cli/index.ts","dev:mock":"KOBE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:mock-react":"KOBE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:mock-react-task-dialogs":"KOBE_DEV=1 bun ./src/tui-react/component/mock-dialogs-host.tsx","dev:mock-react-filetree":"KOBE_DEV=1 bun ./src/tui-react/panes/filetree/mock-host.tsx","dev:mock-react-sidebar":"KOBE_DEV=1 bun ./src/tui-react/panes/sidebar/mock-host.tsx","dev:mock-react-terminal":"KOBE_DEV=1 bun ./src/tui-react/panes/terminal/mock-host.tsx","dev:mock-react-dialogs":"KOBE_DEV=1 bun ./src/tui-react/mock/dialogs-host.tsx","dev:mock-react-workspace":"KOBE_DEV=1 bun ./src/tui-react/workspace/mock-host.tsx","dev:sandbox":"bun run scripts/dev-sandbox.ts run","dev:sandbox:reset":"bun run scripts/dev-sandbox.ts reset",build:"bun run scripts/build.ts","build:with-web":"bun run build",compile:"bun run scripts/compile.ts",typecheck:"tsc --noEmit","check-i18n":"bun run scripts/check-i18n.ts",test:"bun run test:fast && bun run test:socket","perf:golden":"bun scripts/perf-golden.ts","pty:soak":"bun scripts/pty-soak.ts","test:fast":"vitest run --passWithNoTests --minWorkers=1 --maxWorkers=8","test:socket":"KOBE_INCLUDE_SOCKET=1 vitest run test/daemon --pool forks --minWorkers=1 --maxWorkers=4 --passWithNoTests","test:socket:coverage":"KOBE_INCLUDE_SOCKET=1 KOBE_COVERAGE_DAEMON=1 vitest run test/daemon --coverage --pool forks --minWorkers=1 --maxWorkers=4 --passWithNoTests","test:behavior":"KOBE_INCLUDE_BEHAVIOR=1 vitest run test/behavior --pool forks --minWorkers=1 --maxWorkers=1 --retry=2 --passWithNoTests","test:render":"bun test test/render --coverage --coverage-reporter=text --coverage-reporter=lcov --coverage-dir=coverage-render",coverage:"vitest run --coverage --passWithNoTests",bench:"vitest bench --run",lint:"biome check .",knip:"knip-bun",postinstall:"bun run scripts/check-preview-deps.ts || true",prepublishOnly:"bun run typecheck && bun run build"},"//":"biome.json + bunfig.toml live at the monorepo root since they apply repo-wide; bun.lock also lives at root (workspace-shared).",dependencies:{"@ansi-tools/parser":"^1.0.15","@opentui/core":"0.4.3","@opentui/react":"0.4.3","@xterm/addon-serialize":"^0.14.0","@xterm/addon-unicode11":"^0.9.0","@xterm/headless":"^6.0.0","node-pty":"^1.1.0",react:"^19.2.8",ws:"^8.18.0"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/kobe-daemon":"0.7.12","@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 ky={};x4(ky,{repoSlug:()=>sz,releasePageUrl:()=>fP,recommendedGlobalInstallCommand:()=>EP,isNewerSemver:()=>SP,fetchReleaseSummaries:()=>OK,fetchReleaseNotesRange:()=>xP,fetchReleaseNotes:()=>wP,compareSemver:()=>Z3,checkLatestVersion:()=>tz,breakingVersionsCrossed:()=>FK,UPDATE_SCRIPT_URL:()=>KL,UPDATE_COMMAND:()=>o9,PACKAGE_NAME:()=>IP,CURRENT_VERSION:()=>V4,BREAKING_VERSIONS:()=>MJ});function sz(){let $=BL.repository?.url;if(!$)return null;let Z=$.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!Z||!Z[1]||!Z[2])return null;return`${Z[1]}/${Z[2]}`}function EP(){return`npm install -g ${IP}@latest`}function FK($,Z,J=MJ){let[X,G]=Z3($,Z)<=0?[$,Z]:[Z,$];return J.filter((Y)=>Z3(Y,X)>0&&Z3(Y,G)<=0)}async function _90($){let Z=new AbortController,J=setTimeout(()=>Z.abort(),NL);try{let X=$.replace("/","%2F"),G=await fetch(`https://registry.npmjs.org/${X}/latest`,{signal:Z.signal,headers:{accept:"application/json"}});if(!G.ok)return null;let Y=await G.json();if(typeof Y.version!=="string")return null;return Y.version}catch{return null}finally{clearTimeout(J)}}function SP($,Z){return Z3($,Z)>0}function Z3($,Z){let J=(Y)=>Y.split("-")[0]??Y,X=J($).split(".").map((Y)=>Number.parseInt(Y,10)),G=J(Z).split(".").map((Y)=>Number.parseInt(Y,10));for(let Y=0;Y<3;Y++){let W=X[Y]??0,H=G[Y]??0;if(Number.isNaN(W)||Number.isNaN(H))return 0;if(W>H)return 1;if(W<H)return-1}return 0}async function tz($={}){let Z=process.env.KOBE_FAKE_UPDATE;if(Z)return{current:V4,latest:Z,hasUpdate:SP(Z,V4)};if(lW()&&!$.force)return null;let J=await _90(IP);if(!J)return null;return{current:V4,latest:J,hasUpdate:SP(J,V4)}}function yy($){if(typeof $!=="string")return null;return $.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function wP($){let Z=sz();if(!Z)return null;let J=`v${$}`,X=new AbortController,G=setTimeout(()=>X.abort(),NL);try{let Y=await fetch(`https://api.github.com/repos/${Z}/releases/tags/${J}`,{signal:X.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!Y.ok)return null;let W=await Y.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(G)}}async function xP($){let Z=sz();if(!Z)return[];let J=$.limit??100,X=new AbortController,G=setTimeout(()=>X.abort(),NL);try{let Y=await fetch(`https://api.github.com/repos/${Z}/releases?per_page=${J}`,{signal:X.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!Y.ok)return[];let W=await Y.json();if(!Array.isArray(W))return[];return W.map((H)=>{let U=yy(H.tag_name);if(!U||typeof H.html_url!=="string"||typeof H.body!=="string")return null;if(Z3(U,$.current)<=0)return null;if(Z3(U,$.latest)>0)return null;return{version:U,url:H.html_url,body:H.body}}).filter((H)=>H!==null)}catch{return[]}finally{clearTimeout(G)}}async function OK($=12){let Z=sz();if(!Z)return[];let J=new AbortController,X=setTimeout(()=>J.abort(),NL);try{let G=await fetch(`https://api.github.com/repos/${Z}/releases?per_page=${$}`,{signal:J.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!G.ok)return[];let Y=await G.json();if(!Array.isArray(Y))return[];return Y.map((W)=>{let H=yy(W.tag_name);if(!H||typeof W.html_url!=="string")return null;return{version:H,url:W.html_url}}).filter((W)=>W!==null)}catch{return[]}finally{clearTimeout(X)}}function fP($){let Z=sz();if(!Z)return null;return`https://github.com/${Z}/releases/tag/v${$}`}var V4,IP,KL="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",o9,MJ,NL=3000;var D8=a(()=>{by();R5();V4=BL.version,IP=BL.name;o9=`curl -fsSL ${KL} | sh`;MJ=[]});var my={};x4(my,{stampResetGate:()=>ML,resetGateBlockers:()=>vy,enforceResetGate:()=>bP,LAST_RUN_VERSION_KEY:()=>gP});function vy($,Z=V4,J=MJ){if(typeof $!=="string"||$.length===0)return[];let[X,G]=Z3($,Z)<=0?[$,Z]:[Z,$];return J.filter((Y)=>Z3(Y,X)>0&&Z3(Y,G)<=0)}function bP(){let $=j$()[gP],Z=vy($);if(Z.length>0){let J=typeof $==="string"?$:"unknown";console.error([`kobe ${V4}: cannot start \u2014 version ${Z.join(", ")} introduced breaking changes`,`(last run: ${J}). Your daemon/session state may be incompatible.`,"","Run:"," kobe reset # stop daemon + PTY host + sessions (tasks kept)"," kobe reset --hard # additionally wipe the task index + UI state","","Then relaunch kobe. Worktrees are never touched."].join(`
285
+ `)),process.exit(1)}if($!==V4)ML()}function ML(){try{c2({[gP]:V4})}catch{}}var gP="app.lastRunVersion";var FL=a(()=>{L2();D8()});import{existsSync as uy,readFileSync as C90}from"fs";import{homedir as A90}from"os";import{join as cy,resolve as hy}from"path";import{fileURLToPath as D90}from"url";function OL(){let $=D90(import.meta.url);return[hy($,"../../../../../.agents/skills/kobe"),hy($,"../../skills/kobe")].find((J)=>uy(cy(J,"SKILL.md")))??null}function LL($={}){let Z=$.source!==void 0?$.source:OL(),J=$.agent===void 0?[]:typeof $.agent==="string"?[$.agent]:$.agent;return["skills","add",Z??R90,"--skill","kobe",...$.global===!1?[]:["--global"],...J.flatMap((X)=>["--agent",X])]}function ez($={}){return`npx ${LL($).join(" ")}`}async function vP($,Z){return await Bun.spawn(["npx",...LL({...$===void 0?{}:{agent:$},global:Z})],{stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited}function jL($={}){let Z=$.home??A90(),J=$.cwd??process.cwd();return[Z,J].flatMap((X)=>P90.map((G)=>cy(X,G)))}function T90($){let Z=$.match(/kobe-skill-version:\s*(\d+)/);return Z?Number.parseInt(Z[1],10):null}function LK($){let Z=jL($).find((G)=>uy(G));if(!Z)return{installed:!1,installedVersion:null,currentVersion:yP,stale:!1};let J=null;try{J=T90(C90(Z,"utf8"))}catch{J=null}let X=J===null||J<yP;return{installed:!0,installedVersion:J,currentVersion:yP,stale:X}}function S90(){return new Promise(($)=>{process.stdin.resume(),process.stdin.once("data",(Z)=>{process.stdin.pause(),$(String(Z))})})}async function dy($={}){let Z=LK();if(!Z.installed){if(y7(kP)==="1")return;b3(kP,"1"),process.stderr.write(`
286
286
  kobe: the kobe agent skill isn't installed \u2014 install it so your coding agent can drive kobe via \`kobe api\`:
287
287
  ${jH}
288
288
  (wraps \`${ez()}\`; check anytime with \`kobe doctor\`)
@@ -765,26 +765,26 @@ ${$t}`),process.exit(2)}async function Iq0($){let Z=Sq0({input:process.stdin,out
765
765
  Register an SSH-backed project. Worktrees + the engine run on <host> under
766
766
  <basePath>. Choose ONE auth: --key [path] (ssh-agent when path omitted) or
767
767
  `+`--password (prompted, stored in the OS keychain \u2014 never in state.json).
768
- `});var YE={};x4(YE,{runSkillSubcommand:()=>yq0});import{existsSync as xq0,readFileSync as fq0}from"fs";import{join as gq0}from"path";function GE(){return["usage: kobe skill <verb>","","verbs:"," install [--agent NAME]\u2026 Install the kobe agent skill (wraps `npx skills add`)"," status Show whether the skill is installed"," command [--agent NAME]\u2026 Print the underlying npx command without running it"," print Print the bundled SKILL.md (also: `kobe --skill`)","","The skill teaches a coding agent how to drive `kobe api`. With no --agent,","the agent-skills CLI detects your installed agents and asks which to use;","repeat --agent to name them yourself (e.g. --agent claude-code --agent codex)."].join(`
769
- `)}function Qt($){let Z=[];for(let X=0;X<$.length;X++){let G=$[X];if(G==="--agent"){let Y=$[X+1];if(!Y||Y.startsWith("--"))process.stderr.write(`kobe skill: --agent requires a value
770
- `),process.exit(2);Z.push(Y),X++}else if(G.startsWith("--agent="))Z.push(G.slice(8));else process.stderr.write(`kobe skill: unknown flag "${G}"
768
+ `});var YE={};x4(YE,{runSkillSubcommand:()=>yq0});import{existsSync as xq0,readFileSync as fq0}from"fs";import{join as gq0}from"path";function GE(){return["usage: kobe skill <verb>","","verbs:"," install [--project] [--agent NAME]\u2026 Install the kobe agent skill (wraps `npx skills add`)"," status Show whether the skill is installed"," command [--project] [--agent NAME]\u2026 Print the underlying npx command without running it"," print Print the bundled SKILL.md (also: `kobe --skill`)","","The skill teaches a coding agent how to drive `kobe api`. Installs are","global (user-level) by default; --project installs into the current project","instead. With no --agent, the agent-skills CLI detects your installed agents","and asks; repeat --agent to name them (e.g. --agent claude-code --agent codex)."].join(`
769
+ `)}function Qt($){let Z=!0,J=[];for(let G=0;G<$.length;G++){let Y=$[G];if(Y==="--project"||Y==="-p")Z=!1;else if(Y==="--global"||Y==="-g")Z=!0;else if(Y==="--agent"){let W=$[G+1];if(!W||W.startsWith("--"))process.stderr.write(`kobe skill: --agent requires a value
770
+ `),process.exit(2);J.push(W),G++}else if(Y.startsWith("--agent="))J.push(Y.slice(8));else process.stderr.write(`kobe skill: unknown flag "${Y}"
771
771
 
772
772
  ${GE()}
773
- `),process.exit(2)}let J=Z.find((X)=>X.includes(","));if(J)process.stderr.write(`kobe skill: --agent takes one name; repeat the flag instead of "${J}"
774
- e.g. ${J.split(",").map((X)=>`--agent ${X.trim()}`).join(" ")}
775
- `),process.exit(2);return Z}async function yq0($){let[Z,...J]=$;if(!Z||Z==="--help"||Z==="-h"||Z==="help"){if(process.stdout.write(`${GE()}
773
+ `),process.exit(2)}let X=J.find((G)=>G.includes(","));if(X)process.stderr.write(`kobe skill: --agent takes one name; repeat the flag instead of "${X}"
774
+ e.g. ${X.split(",").map((G)=>`--agent ${G.trim()}`).join(" ")}
775
+ `),process.exit(2);return{agents:J,global:Z}}async function yq0($){let[Z,...J]=$;if(!Z||Z==="--help"||Z==="-h"||Z==="help"){if(process.stdout.write(`${GE()}
776
776
  `),!Z)process.exitCode=2;return}if(!bq0.includes(Z))process.stderr.write(`kobe skill: unknown verb "${Z}"
777
777
 
778
778
  ${GE()}
779
- `),process.exit(2);if(Z==="print"){let W=OL(),H=W?gq0(W,"SKILL.md"):jL().find((U)=>xq0(U));if(!H)process.stderr.write("kobe skill: no SKILL.md found (not bundled, not installed) \u2014 run `kobe skill install`\n"),process.exit(1);process.stdout.write(fq0(H,"utf8"));return}if(Z==="status"){let W=LK(),H=jL(),U=!W.installed?"\u2717 not installed":W.stale?`\u26A0 out of date (installed ${W.installedVersion===null?"unstamped":`v${W.installedVersion}`}, this kobe wants v${W.currentVersion})`:`\u2713 installed (v${W.installedVersion})`;process.stdout.write([`kobe skill: ${U}`,` looked in: ${H.join(`
780
- `)}`,W.installed&&!W.stale?"":" \u2192 run `kobe skill install` to install / refresh",""].join(`
781
- `));return}if(Z==="command"){process.stdout.write(`${ez({agent:Qt(J)})}
782
- `);return}let X=Qt(J),G=OL();process.stdout.write(`kobe skill: running \`${ez({agent:X})}\`
783
- ${G?"":`kobe skill: no bundled skill found \u2014 falling back to a repo clone (large download).
784
- `}`);let Y=await vP(X);if(Y!==0)process.stderr.write(`
785
- kobe skill install failed (npx exited ${Y}). Is \`npx\` on PATH?
786
- You can run it yourself: ${ez({agent:X})}
787
- `),process.exit(Y||1);process.stdout.write(`kobe skill: installed.
779
+ `),process.exit(2);if(Z==="print"){let H=OL(),U=H?gq0(H,"SKILL.md"):jL().find((K)=>xq0(K));if(!U)process.stderr.write("kobe skill: no SKILL.md found (not bundled, not installed) \u2014 run `kobe skill install`\n"),process.exit(1);process.stdout.write(fq0(U,"utf8"));return}if(Z==="status"){let H=LK(),U=jL(),K=!H.installed?"\u2717 not installed":H.stale?`\u26A0 out of date (installed ${H.installedVersion===null?"unstamped":`v${H.installedVersion}`}, this kobe wants v${H.currentVersion})`:`\u2713 installed (v${H.installedVersion})`;process.stdout.write([`kobe skill: ${K}`,` looked in: ${U.join(`
780
+ `)}`,H.installed&&!H.stale?"":" \u2192 run `kobe skill install` to install / refresh",""].join(`
781
+ `));return}if(Z==="command"){let H=Qt(J);process.stdout.write(`${ez({agent:H.agents,global:H.global})}
782
+ `);return}let{agents:X,global:G}=Qt(J),Y=OL();process.stdout.write(`kobe skill: running \`${ez({agent:X,global:G})}\`
783
+ ${Y?"":`kobe skill: no bundled skill found \u2014 falling back to a repo clone (large download).
784
+ `}`);let W=await vP(X,G);if(W!==0)process.stderr.write(`
785
+ kobe skill install failed (npx exited ${W}). Is \`npx\` on PATH?
786
+ You can run it yourself: ${ez({agent:X,global:G})}
787
+ `),process.exit(W||1);process.stdout.write(`kobe skill: installed.
788
788
  `)}var bq0;var WE=a(()=>{jK();bq0=["install","status","command","print"]});var Z_;var zt=a(()=>{Z_=["web","completions","add","remove","adopt","export","repo","api","daemon","doctor","config","reset","theme","skill","plugin","feedback","update"]});var Yt={};x4(Yt,{runCompletionsSubcommand:()=>hq0});function kq0(){return["# kobe bash completions","# Source: kobe completions bash","","_kobe() {"," local cur"," COMPREPLY=()",' cur="${COMP_WORDS[COMP_CWORD]}"'," if [[ ${COMP_CWORD} -eq 1 ]]; then",` COMPREPLY=( $(compgen -W "${Z_.join(" ")}" -- \${cur}) )`," fi","}","complete -F _kobe kobe",""].join(`
789
789
  `)}function vq0(){return["#compdef kobe","# kobe zsh completions","# Source: kobe completions zsh","","_kobe() {"," local -a subcommands",` subcommands=(${Z_.map((Z)=>`"${Z}"`).join(" ")})`,"",' _arguments "1:subcommand:(${subcommands})"',"}","","# Autoloaded from $fpath -> run as the completion function;","# sourced directly -> register with compdef instead.",'if [ "${funcstack[1]}" = "_kobe" ]; then',' _kobe "$@"',"elif (( $+functions[compdef] )); then"," compdef _kobe kobe","fi",""].join(`
790
790
  `)}function mq0(){return`# kobe fish completions
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.8.72",
4
+ "version": "0.8.73",
5
5
  "description": "TUI orchestrator for Claude Code (codename)",
6
6
  "type": "module",
7
7
  "packageManager": "bun@1.3.13",