@sma1lboy/kobe 0.8.82 → 0.8.83
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 +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -281,7 +281,7 @@ ${z}`,Z);this.line=J,this.column=X,this.codeblock=z}}});function cO($,Z){let J=$
|
|
|
281
281
|
`)){let U=H.trim();if(!U)continue;if(!UJ(U))continue;let K;try{K=JSON.parse(U)}catch{continue}if(!_P(K)||typeof K.type!=="string")continue;let F=typeof K.timestamp==="string"?K.timestamp:new Date().toISOString(),L=_P(K.data)?K.data:{};if(K.type==="session.start"){let M=typeof L.sessionId==="string"?L.sessionId:void 0;if(M)z=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,O90),"utf8").toString("utf8");J.push({role:"user",blocks:[{type:"text",text:M}],timestamp:F,sessionId:z});continue}if(K.type==="assistant.message"){let M=[],_=typeof L.content==="string"?L.content:"";if(_)M.push({type:"text",text:_});let R=Array.isArray(L.toolRequests)?L.toolRequests:[];for(let V of R){if(!_P(V))continue;let C=typeof V.id==="string"?V.id:typeof V.toolCallId==="string"?V.toolCallId:"tool",f=typeof V.name==="string"?V.name:typeof V.toolName==="string"?V.toolName:"tool";M.push({type:"tool_call",callId:C,name:f,input:V.arguments??{}})}if(M.length>0)J.push({role:"assistant",blocks:M,timestamp:F,sessionId:z});continue}if(K.type==="tool.execution_start"){let M=typeof L.toolCallId==="string"?L.toolCallId:void 0,_=typeof L.toolName==="string"?L.toolName:"tool";if(M)X.set(M,_);continue}if(K.type==="tool.execution_complete"){let M=typeof L.toolCallId==="string"?L.toolCallId:void 0;if(!M)continue;let _=X.get(M)??(typeof L.toolName==="string"?L.toolName:"tool"),R=L.result??(L.success===!1?{success:!1}:void 0);J.push({role:"assistant",blocks:[{type:"tool_result",callId:M,output:R,isError:L.success===!1}],timestamp:F,sessionId:z});continue}if(K.type==="session.shutdown")Y=Fb(L)}return{messages:J,toolNameById:X,sessionId:z,usageMetrics:Y,firstUserMessage:W}}function _P($){return typeof $==="object"&&$!==null&&!Array.isArray($)}var ez,M90,O90=200;var _b=a(()=>{rz();JL();ez={copilotDir(){let $=process.env.COPILOT_HOME?.trim();if($)return $;return YQ.join(q90(),".copilot")},async readdir($){try{return await Y90($)}catch{return[]}},async readFile($){return await qH($)},stat:H90,async rm($){await W90($,{recursive:!0,force:!0})}};M90=MH({initial:N90,parseChunk:($,Z)=>F90($,Z)})});var qL,Vb,Cb;var UL=a(()=>{qL=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],Vb=["\xB7","\u2722","\u2731","\u2736","\u273B","\u273D"],Cb=[...Vb,...[...Vb].reverse()]});import{readFile as Db,stat as j90}from"fs/promises";class BL{supportsCompletionMarkers(){return!0}async latestCompletion($){return(await this.latestActivity($)).marker}async latestActivityInFile($){return null}}function Pb($){return S4($).createTurnDetector()}function Ab($,Z="claude",J=0){let X=null,z=0;for(let Y of $.split(`
|
|
282
282
|
`)){z++;let W=Tb(Y);if(!W)continue;let H=PP(W.message)?W.message:W;if(H.role!=="assistant")continue;if(!("content"in H))continue;let U=Sb(W,J),K={id:`claude:${Z}:${U}:${z}`,timestampMs:U,source:"claude"};if(!X||K.timestampMs>=X.timestampMs)X=K}return X}function A90($){if($.type==="turn.completed")return!0;if($.type!=="event_msg")return!1;let Z=PP($.payload)?$.payload:void 0;return typeof Z?.type==="string"&&C90.has(Z.type)}function D90($,Z="codex"){let J=null,X=0;for(let z of $.split(`
|
|
283
283
|
`)){X++;let Y=Tb(z);if(!Y||!A90(Y))continue;let W=Sb(Y,0),H={id:`codex:${Z}:${W}:${X}`,timestampMs:W,source:"codex"};if(!J||H.timestampMs>=J.timestampMs)J=H}return J}function Tb($){let Z=$.trim();if(!Z)return null;try{let J=JSON.parse(Z);return PP(J)?J:null}catch{return null}}function Sb($,Z){let J=typeof $.timestamp==="string"?Date.parse($.timestamp):Number.NaN;return Number.isFinite(J)?J:Z}function PP($){return typeof $==="object"&&$!==null&&!Array.isArray($)}var Rb=($)=>j90($).then((Z)=>Z.mtimeMs,()=>0),_90,AP,V90,DP,FK,C90;var RP=a(()=>{XP();YL();k7();_90={listSessionFiles:($)=>FH($),readFile:($)=>Db($,"utf8"),statMtimeMs:Rb};AP=class AP extends BL{deps;vendor="claude";cache=new Map;constructor($=_90){super();this.deps=$}async latestActivity($){let Z=await this.deps.listSessionFiles($),J=Z[0]?.mtimeMs??0,X=null,z=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=Ab(U,Y.path,Y.mtimeMs)}if(z.set(Y.path,{mtimeMs:Y.mtimeMs,marker:H}),H&&(!X||H.timestampMs>X.timestampMs))X=H}return this.cache=z,{marker:X,mtimeMs:J}}async latestActivityInFile($){let Z=await(this.deps.statMtimeMs??Rb)($);if(Z===0)return null;let J=await this.deps.readFile($).catch(()=>"");return{marker:Ab(J,$,Z),mtimeMs:Z}}};V90={findLatestRollout:($)=>LP($),readFile:($)=>Db($,"utf8")};DP=class DP extends BL{deps;vendor="codex";cache=null;constructor($=V90){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=D90(J,Z.path);return this.cache={path:Z.path,mtimeMs:Z.mtimeMs,marker:X},{marker:X,mtimeMs:Z.mtimeMs}}};FK=class FK extends BL{vendor;constructor($){super();this.vendor=$}supportsCompletionMarkers(){return!1}async latestActivity(){return{marker:null,mtimeMs:0}}};C90=new Set(["task_complete","turn_complete","turn_aborted"])});function S90($){return{vendor:$,builtin:!1,displayName:$,defaultCommand:[$],history:TP,detectAccount:async()=>({binary:{found:!1,error:"custom engine: kobe has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new OK($),createTurnDetector:()=>new FK($)}}function S4($){return f7($)?SP[$]:S90($)}function Ib($){return S4($).history!==TP}function IP($){let Z=S4($).terminalTitle?.statusPrefixes;return Z&&Z.length>0?Z:Eb}function LH($,Z){let J=Z?IP(Z):Eb;for(let X of[...J].sort((z,Y)=>Y.length-z.length)){if(!$.startsWith(X))continue;let z=$.slice(X.length).trimStart();if(z.length===0)return $;return z}return $}function KL($,Z){let J=S4($).terminalTitle,X=J?.workingPrefixes;if(J?.ownsStatus!==!0||!X||X.length===0)return null;let z=Z.trim();if(z.length===0)return null;return X.some((Y)=>z.startsWith(Y))?"working":"rest"}function wb(){return Object.values(SP).filter(($)=>$.quotaUsage).map(($)=>$.vendor)}var TP,P90,R90,T90,SP,Eb;var k7=a(()=>{g7();BJ();Py();XP();hy();ny();ay();YL();Bb();Mb();_b();EP();UL();RP();TP={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async transcriptPath(){return null},async latestTranscriptMtimeForWorktree(){return 0}},P90={async listSessionIdsForWorktree($){return[...await FH($)].sort((J,X)=>J.mtimeMs-X.mtimeMs).map((J)=>J.sessionId)},readHistory:($)=>fy($),async transcriptPath($,Z){return(await FH(Z)).find((X)=>X.sessionId===$)?.path??null},latestTranscriptMtimeForWorktree:($)=>xy($)},R90={listSessionIdsForWorktree:($)=>Yb($),readHistory:($)=>Hb($),transcriptPath:async($)=>await OP($)??null,latestTranscriptMtimeForWorktree:($)=>Wb($)},T90={listSessionIdsForWorktree:($)=>Ob($),readHistory:($)=>jb($),transcriptPath:async()=>null,latestTranscriptMtimeForWorktree:($)=>Lb($)},SP={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:P90,detectAccount:($)=>UH($),createHookAdapter:()=>new GP,createTurnDetector:()=>new AP,capabilities:Ay,identity:Dy,spinnerFrames:Cb,terminalTitle:{ownsStatus:!0,statusPrefixes:["\u2733","\u2802","\u2810","\u25D0","\u25D1"],workingPrefixes:["\u2802","\u2810","\u25D0","\u25D1"]},quotaUsage:()=>py()},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:R90,detectAccount:($)=>BH($),createHookAdapter:()=>new jP,createTurnDetector:()=>new DP,capabilities:iy,identity:oy,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:()=>Nb()},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:T90,detectAccount:($)=>KH($),createHookAdapter:()=>new OK("copilot"),createTurnDetector:()=>new FK("copilot")},kimi:{vendor:"kimi",builtin:!0,displayName:"Kimi",defaultCommand:["kimi"],history:TP,detectAccount:($)=>$L($),createHookAdapter:()=>new OK("kimi"),createTurnDetector:()=>new FK("kimi")}};Eb=[...new Set(Object.values(SP).flatMap(($)=>$.terminalTitle?.statusPrefixes??[]))]});function wP($){return S4($).createHookAdapter()}class OK{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 EP=a(()=>{k7()});function NL($){return I90.includes($)}function xb($){return E90.includes($)}var I90,E90;var xP=a(()=>{I90=["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"];E90=["session-start","turn-start","turn-complete","turn-failed","turn-interrupted","awaiting-input","session-end"]});var db={};x4(db,{runHookSubcommand:()=>v90,readTextWithTimeout:()=>yb,parseWorktreeRemovePath:()=>mb,parseWorktreeAddPath:()=>kb,ensureGlobalKobeHooks:()=>yP});import{readFileSync as w90}from"fs";import{homedir as x90}from"os";import{join as gP,resolve as fP}from"path";async function yb($,Z=f90){let J;try{return await Promise.race([$(),new Promise((X)=>{J=setTimeout(()=>X(""),Z)})])}finally{if(J!==void 0)clearTimeout(J)}}async function bb(){try{let $=await yb(()=>Bun.stdin.text());if(!$.trim())return{};let Z=JSON.parse($);return Z&&typeof Z==="object"&&!Array.isArray(Z)?Z:{}}catch{return{}}}function fb($,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 y90($){return!!$&&typeof $==="object"&&!Array.isArray($)}function vb($){let Z=[],J=/"([^"]*)"|'([^']*)'|(\S+)/g,X;while((X=J.exec($))!==null)Z.push(X[1]??X[2]??X[3]??"");return Z}function kb($){let Z=vb($),J=new Set(["-b","-B","--reason"]);for(let X=0;X+1<Z.length;X++){if(Z[X]!=="worktree"||Z[X+1]!=="add")continue;let z=X+2;while(z<Z.length){let Y=Z[z];if(Y==="&&"||Y==="||"||Y===";"||Y==="|"||Y===">"||Y===">>")break;if(Y.startsWith("-")){z+=J.has(Y)?2:1;continue}return Y}}return}function mb($){let Z=vb($);for(let J=0;J+1<Z.length;J++){if(Z[J]!=="worktree"||Z[J+1]!=="remove")continue;let X=J+2;while(X<Z.length){let z=Z[X];if(z==="&&"||z==="||"||z===";"||z==="|"||z===">"||z===">>")break;if(z.startsWith("-")){X+=1;continue}return z}}return}async function b90(){let $=await bb(),Z=y90($.tool_input)?$.tool_input:{},J=typeof Z.command==="string"?Z.command:"";if(!J.includes("worktree"))return;let X=typeof $.cwd==="string"&&$.cwd?$.cwd:process.cwd(),z=kb(J),Y=z?void 0:mb(J);if(!z&&!Y)return;let W=await oX();if(!W)return;try{if(z)await W.request("worktree.reconcile",{cwd:X,worktreePath:fP(X,z)});else if(Y)await W.request("worktree.archiveRemoved",{worktreePath:fP(X,Y)})}finally{W.close()}}async function v90($){let[Z,...J]=$;if(Z==="setup"){await u90(J);return}if(Z===g90){try{await b90()}catch{}return}try{if(!Z||!NL(Z))return;let X=await bb(),z=fb(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=fb(J,"--engine"),K=hb().filter((_)=>!U||_.vendor===U),F;for(let _ of K)if(F=_.activityDetailFromPayload(Z,X),F)break;let L;for(let _ of K)if(L=_.sessionFromPayload(X),L)break;let M=await oX();if(!M)return;try{let _=z??W;await M.request("engine.reportEvent",{..._?{taskId:_}:{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 k90(){return C8.map(($)=>wP($)).filter(($)=>$.supportsWorktreeSync())}function hb(){return C8.map(($)=>wP($)).filter(($)=>$.supportsHooks())}function ub(){return gP(x90(),".claude","settings.json")}function m90($){if(!$||$==="off")return;if($==="global")return ub();if($.startsWith("repo:"))return gP(fP($.slice(5)),".claude","settings.json");return $}async function yP(){try{let $=h90();for(let Z of hb()){let J=Z.globalSettingsPath();if(!J)continue;await Z.installActivityHooks(J,{toolEvents:$}),await Z.installWorktreeWatchHook(J)}await cb()}catch{}}function h90(){try{for(let $ of M5().plugins){if(!$.enabled)continue;try{let Z=w90(gP($.root,C2),"utf8");if(n2(Z).manifest.events.some((J)=>J.on.startsWith("tool.")))return!0}catch{}}}catch{}return!1}async function cb(){let $=k90();if($.length===0)return;let Z=v7(gb),J=new Set([ub()]),X=m90(Z);if(X)J.add(X);for(let z of $)for(let Y of J)await z.removeWorktreeSyncHook(Y);if(Z!=="off")m3(gb,"off")}async function u90($){await cb(),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 f90=500,g90="worktree-created",gb="externalWorktreeSync";var bP=a(()=>{L2();ZQ();qJ();EP();xP();v$();g7()});var ML;var lb=a(()=>{ML={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.8.
|
|
284
|
+
`))}var f90=500,g90="worktree-created",gb="externalWorktreeSync";var bP=a(()=>{L2();ZQ();qJ();EP();xP();v$();g7()});var ML;var lb=a(()=>{ML={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.8.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/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 nb={};x4(nb,{repoSlug:()=>$G,releasePageUrl:()=>cP,recommendedGlobalInstallCommand:()=>mP,isNewerSemver:()=>vP,fetchReleaseSummaries:()=>jK,fetchReleaseNotesRange:()=>uP,fetchReleaseNotes:()=>hP,compareSemver:()=>z3,checkLatestVersion:()=>ZG,breakingVersionsCrossed:()=>LK,UPDATE_SCRIPT_URL:()=>FL,UPDATE_COMMAND:()=>o9,PACKAGE_NAME:()=>kP,CURRENT_VERSION:()=>V4,BREAKING_VERSIONS:()=>NJ});function $G(){let $=ML.repository?.url;if(!$)return null;let Z=$.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!Z||!Z[1]||!Z[2])return null;return`${Z[1]}/${Z[2]}`}function mP(){return`npm install -g ${kP}@latest`}function LK($,Z,J=NJ){let[X,z]=z3($,Z)<=0?[$,Z]:[Z,$];return J.filter((Y)=>z3(Y,X)>0&&z3(Y,z)<=0)}async function d90($){let Z=new AbortController,J=setTimeout(()=>Z.abort(),OL);try{let X=$.replace("/","%2F"),z=await fetch(`https://registry.npmjs.org/${X}/latest`,{signal:Z.signal,headers:{accept:"application/json"}});if(!z.ok)return null;let Y=await z.json();if(typeof Y.version!=="string")return null;return Y.version}catch{return null}finally{clearTimeout(J)}}function vP($,Z){return z3($,Z)>0}function z3($,Z){let J=(Y)=>Y.split("-")[0]??Y,X=J($).split(".").map((Y)=>Number.parseInt(Y,10)),z=J(Z).split(".").map((Y)=>Number.parseInt(Y,10));for(let Y=0;Y<3;Y++){let W=X[Y]??0,H=z[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 ZG($={}){let Z=process.env.KOBE_FAKE_UPDATE;if(Z)return{current:V4,latest:Z,hasUpdate:vP(Z,V4)};if(lW()&&!$.force)return null;let J=await d90(kP);if(!J)return null;return{current:V4,latest:J,hasUpdate:vP(J,V4)}}function pb($){if(typeof $!=="string")return null;return $.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function hP($){let Z=$G();if(!Z)return null;let J=`v${$}`,X=new AbortController,z=setTimeout(()=>X.abort(),OL);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(z)}}async function uP($){let Z=$G();if(!Z)return[];let J=$.limit??100,X=new AbortController,z=setTimeout(()=>X.abort(),OL);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=pb(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(z)}}async function jK($=12){let Z=$G();if(!Z)return[];let J=new AbortController,X=setTimeout(()=>J.abort(),OL);try{let z=await fetch(`https://api.github.com/repos/${Z}/releases?per_page=${$}`,{signal:J.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!z.ok)return[];let Y=await z.json();if(!Array.isArray(Y))return[];return Y.map((W)=>{let H=pb(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 cP($){let Z=$G();if(!Z)return null;return`https://github.com/${Z}/releases/tag/v${$}`}var V4,kP,FL="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",o9,NJ,OL=3000;var R8=a(()=>{lb();R5();V4=ML.version,kP=ML.name;o9=`curl -fsSL ${FL} | sh`;NJ=[]});var ob={};x4(ob,{stampResetGate:()=>LL,resetGateBlockers:()=>ib,enforceResetGate:()=>lP,LAST_RUN_VERSION_KEY:()=>dP});function ib($,Z=V4,J=NJ){if(typeof $!=="string"||$.length===0)return[];let[X,z]=z3($,Z)<=0?[$,Z]:[Z,$];return J.filter((Y)=>z3(Y,X)>0&&z3(Y,z)<=0)}function lP(){let $=j$()[dP],Z=ib($);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
285
|
`)),process.exit(1)}if($!==V4)LL()}function LL(){try{d2({[dP]:V4})}catch{}}var dP="app.lastRunVersion";var jL=a(()=>{j2();R8()});import{existsSync as rb,readFileSync as l90}from"fs";import{homedir as p90}from"os";import{join as sb,resolve as ab}from"path";import{fileURLToPath as n90}from"url";function _L(){let $=n90(import.meta.url);return[ab($,"../../../../../.agents/skills/kobe"),ab($,"../../skills/kobe")].find((J)=>rb(sb(J,"SKILL.md")))??null}function VL($={}){let Z=$.source!==void 0?$.source:_L(),J=$.agent===void 0?[]:typeof $.agent==="string"?[$.agent]:$.agent;return["skills","add",Z??o90,"--skill","kobe",...$.global===!1?[]:["--global"],...J.flatMap((X)=>["--agent",X])]}function JG($={}){return`npx ${VL($).join(" ")}`}async function iP($,Z){return await Bun.spawn(["npx",...VL({...$===void 0?{}:{agent:$},global:Z})],{stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited}function CL($={}){let Z=$.home??p90(),J=$.cwd??process.cwd();return[Z,J].flatMap((X)=>i90.map((z)=>sb(X,z)))}function a90($){let Z=$.match(/kobe-skill-version:\s*(\d+)/);return Z?Number.parseInt(Z[1],10):null}function _K($){let Z=CL($).find((z)=>rb(z));if(!Z)return{installed:!1,installedVersion:null,currentVersion:pP,stale:!1};let J=null;try{J=a90(l90(Z,"utf8"))}catch{J=null}let X=J===null||J<pP;return{installed:!0,installedVersion:J,currentVersion:pP,stale:X}}function r90(){return new Promise(($)=>{process.stdin.resume(),process.stdin.once("data",(Z)=>{process.stdin.pause(),$(String(Z))})})}async function tb($={}){let Z=_K();if(!Z.installed){if(v7(nP)==="1")return;m3(nP,"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}
|
package/package.json
CHANGED