@sma1lboy/rove 0.9.208 → 0.9.210

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 (87) hide show
  1. package/dist/cli/{chunk-4ewx2gqc.js → chunk-0g2g4r4e.js} +1 -1
  2. package/dist/cli/{chunk-chdpmrbj.js → chunk-0nzvv8mj.js} +2 -2
  3. package/dist/cli/{chunk-9dmz0j3m.js → chunk-103d5h4q.js} +2 -2
  4. package/dist/cli/{chunk-3e5n28t6.js → chunk-17e2tgyg.js} +2 -2
  5. package/dist/cli/{chunk-7g48tbk2.js → chunk-1p5334mv.js} +1 -1
  6. package/dist/cli/chunk-21wffeb7.js +2 -0
  7. package/dist/cli/{chunk-dvtxfpxn.js → chunk-2cnzaw88.js} +1 -1
  8. package/dist/cli/{chunk-sqtrxk5j.js → chunk-2me76rna.js} +1 -1
  9. package/dist/cli/{chunk-agmm5cmd.js → chunk-2n62t174.js} +1 -1
  10. package/dist/cli/{chunk-fnq3wqkg.js → chunk-3cx92j5n.js} +1 -1
  11. package/dist/cli/{chunk-d3e2883v.js → chunk-4takap24.js} +1 -1
  12. package/dist/cli/chunk-59xc6m1q.js +3 -0
  13. package/dist/cli/{chunk-mxhb132n.js → chunk-5y3d3sk3.js} +1 -1
  14. package/dist/cli/{chunk-vgva383h.js → chunk-64jfgj4a.js} +1 -1
  15. package/dist/cli/{chunk-bj5kfpds.js → chunk-6yd2fgd5.js} +2 -2
  16. package/dist/cli/{chunk-ax6fqjpd.js → chunk-71xmayay.js} +3 -3
  17. package/dist/cli/{chunk-k4qb9x7r.js → chunk-72b8g3hs.js} +1 -1
  18. package/dist/cli/{chunk-bxf7p7r3.js → chunk-77txn9kg.js} +1 -1
  19. package/dist/cli/chunk-7h2ddwpe.js +14 -0
  20. package/dist/cli/{chunk-58k4dd30.js → chunk-7rw5nym1.js} +1 -1
  21. package/dist/cli/{chunk-n5n3y9rb.js → chunk-9jnjnkqf.js} +1 -1
  22. package/dist/cli/{chunk-kg0snka2.js → chunk-9k41erqh.js} +1 -1
  23. package/dist/cli/{chunk-01p4h28g.js → chunk-aafa44gd.js} +1 -1
  24. package/dist/cli/{chunk-b9ge49ge.js → chunk-c42pwcvw.js} +1 -1
  25. package/dist/cli/{chunk-e5gkvpxx.js → chunk-c8e76j2n.js} +1 -1
  26. package/dist/cli/{chunk-7fpaq7qp.js → chunk-cqspsq15.js} +1 -1
  27. package/dist/cli/{chunk-jhq4v6p4.js → chunk-czbapp4b.js} +1 -1
  28. package/dist/cli/{chunk-h9zx36b2.js → chunk-d9qq7g3p.js} +18 -18
  29. package/dist/cli/{chunk-3jd20m32.js → chunk-dzqqsasz.js} +2 -2
  30. package/dist/cli/{chunk-be7a6xn6.js → chunk-ekmwvws5.js} +1 -1
  31. package/dist/cli/{chunk-r33kmyjp.js → chunk-ezrxbask.js} +1 -1
  32. package/dist/cli/{chunk-3jc514xd.js → chunk-faw6kk1m.js} +1 -1
  33. package/dist/cli/chunk-fjsetmsk.js +3 -0
  34. package/dist/cli/{chunk-egn8kp0g.js → chunk-g9xb8jh5.js} +1 -1
  35. package/dist/cli/{chunk-6mg9f4wq.js → chunk-gc4wfaps.js} +1 -1
  36. package/dist/cli/{chunk-8trdkbjz.js → chunk-gnncrk3w.js} +1 -1
  37. package/dist/cli/{chunk-0tbwx9va.js → chunk-gqqnp8fp.js} +1 -1
  38. package/dist/cli/{chunk-xn402ss7.js → chunk-hbqktm5a.js} +2 -2
  39. package/dist/cli/{chunk-5ysn2pzt.js → chunk-hqbmzz4t.js} +1 -1
  40. package/dist/cli/{chunk-6bxqqgr6.js → chunk-hrwcx8r5.js} +1 -1
  41. package/dist/cli/chunk-j0qr24ff.js +2 -0
  42. package/dist/cli/{chunk-p1dwr9fc.js → chunk-j54zvyrc.js} +1 -1
  43. package/dist/cli/{chunk-0ex8f5gg.js → chunk-jgdjfsdk.js} +1 -1
  44. package/dist/cli/{chunk-q6y71kfg.js → chunk-keyxeze5.js} +1 -1
  45. package/dist/cli/{chunk-kd4x7g32.js → chunk-mat5dr5y.js} +1 -1
  46. package/dist/cli/{chunk-b4bf8w8q.js → chunk-mjdt28x6.js} +1 -1
  47. package/dist/cli/chunk-n6rrghg7.js +9 -0
  48. package/dist/cli/{chunk-kwb78cyq.js → chunk-n85tdzdg.js} +2 -2
  49. package/dist/cli/{chunk-6r8xbmdn.js → chunk-p1zab1sy.js} +1 -1
  50. package/dist/cli/{chunk-sckmwzrw.js → chunk-qgfwebxj.js} +1 -1
  51. package/dist/cli/chunk-qpmfpbw1.js +2 -0
  52. package/dist/cli/{chunk-s53jt3zr.js → chunk-qv5y4xb3.js} +1 -1
  53. package/dist/cli/{chunk-0e8rvs30.js → chunk-qwc3mmhj.js} +1 -1
  54. package/dist/cli/chunk-t142gqnt.js +2 -0
  55. package/dist/cli/chunk-t3dm9102.js +2 -0
  56. package/dist/cli/{chunk-ytmsrjr4.js → chunk-t73qprdc.js} +1 -1
  57. package/dist/cli/{chunk-mtkd49cn.js → chunk-tqr77st4.js} +1 -1
  58. package/dist/cli/{chunk-xkqt2f1p.js → chunk-w0aw0mdw.js} +2 -2
  59. package/dist/cli/{chunk-2v51z796.js → chunk-wrafvgdr.js} +3 -3
  60. package/dist/cli/{chunk-bawdfhqg.js → chunk-x9www3mg.js} +1 -1
  61. package/dist/cli/{chunk-pqgq0452.js → chunk-xf09hgzv.js} +1 -1
  62. package/dist/cli/{chunk-0p5t9dfq.js → chunk-xpwaf5v6.js} +1 -1
  63. package/dist/cli/{chunk-j94fb5fe.js → chunk-yfd7pzj4.js} +1 -1
  64. package/dist/cli/{chunk-gwfkkeq0.js → chunk-yv44tdjq.js} +1 -1
  65. package/dist/cli/{chunk-bc2hf4m0.js → chunk-yvcc04zd.js} +1 -1
  66. package/dist/cli/{chunk-b9x2wvxv.js → chunk-zhbcnr04.js} +1 -1
  67. package/dist/cli/index.js +3 -3
  68. package/dist/cli/kobe.js +1 -1
  69. package/dist/cli/pty-host-node.mjs +1 -0
  70. package/dist/cli/rove.js +1 -1
  71. package/dist/completions/kobe.bash +1 -1
  72. package/dist/completions/kobe.fish +1 -1
  73. package/dist/completions/kobe.zsh +1 -1
  74. package/dist/completions/rove.bash +1 -1
  75. package/dist/completions/rove.fish +1 -1
  76. package/dist/completions/rove.zsh +1 -1
  77. package/dist/skills/rove/SKILL.md +35 -1
  78. package/dist/skills/rove/references/api-flags.md +3 -0
  79. package/package.json +1 -1
  80. package/dist/cli/chunk-0n9xhvwk.js +0 -8
  81. package/dist/cli/chunk-9wgem9z4.js +0 -2
  82. package/dist/cli/chunk-mfj08sv4.js +0 -3
  83. package/dist/cli/chunk-n80zwzae.js +0 -2
  84. package/dist/cli/chunk-q2wxd83y.js +0 -2
  85. package/dist/cli/chunk-qynjk1fb.js +0 -15
  86. package/dist/cli/chunk-szn9z7nt.js +0 -2
  87. package/dist/cli/chunk-wqeeky10.js +0 -2
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{ensurePluginEnginesLoaded,loadPluginEngines,registeredEngineIds,reloadPluginEngines}from"./chunk-fnq3wqkg.js";import"./chunk-7g48tbk2.js";import"./chunk-5ysn2pzt.js";import"./chunk-j38kagw2.js";import"./chunk-w7zv47mp.js";import"./chunk-2brn8e1y.js";import"./chunk-wc0tmpd7.js";import"./chunk-7kysxgbq.js";import"./chunk-b7vvsyeg.js";import"./chunk-xy8be792.js";import"./chunk-crt11rmj.js";import"./chunk-40dgv828.js";import"./chunk-katrbape.js";import"./chunk-hq2n27y1.js";import"./chunk-3es6spp4.js";import"./chunk-pw6yfj10.js";import"./chunk-05jej26n.js";import"./chunk-81p6mm0p.js";import"./chunk-q5jhy3t8.js";import"./chunk-vnpqemb0.js";import"./chunk-f10n6063.js";import"./chunk-9prawccj.js";import"./chunk-y8fqdnh3.js";import"./chunk-00ehck55.js";import"./chunk-fxs82dsx.js";import"./chunk-sb0ns0c7.js";import"./chunk-hq4b3fca.js";import"./chunk-wqfp8d9w.js";export{reloadPluginEngines,registeredEngineIds,loadPluginEngines,ensurePluginEnginesLoaded};
2
+ import{ensurePluginEnginesLoaded,loadPluginEngines,registeredEngineIds,reloadPluginEngines}from"./chunk-3cx92j5n.js";import"./chunk-1p5334mv.js";import"./chunk-hqbmzz4t.js";import"./chunk-j38kagw2.js";import"./chunk-w7zv47mp.js";import"./chunk-2brn8e1y.js";import"./chunk-wc0tmpd7.js";import"./chunk-7kysxgbq.js";import"./chunk-b7vvsyeg.js";import"./chunk-xy8be792.js";import"./chunk-crt11rmj.js";import"./chunk-40dgv828.js";import"./chunk-katrbape.js";import"./chunk-hq2n27y1.js";import"./chunk-3es6spp4.js";import"./chunk-pw6yfj10.js";import"./chunk-05jej26n.js";import"./chunk-81p6mm0p.js";import"./chunk-q5jhy3t8.js";import"./chunk-vnpqemb0.js";import"./chunk-f10n6063.js";import"./chunk-9prawccj.js";import"./chunk-y8fqdnh3.js";import"./chunk-00ehck55.js";import"./chunk-fxs82dsx.js";import"./chunk-sb0ns0c7.js";import"./chunk-hq4b3fca.js";import"./chunk-wqfp8d9w.js";export{reloadPluginEngines,registeredEngineIds,loadPluginEngines,ensurePluginEnginesLoaded};
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{logDaemonInfo}from"./chunk-rcyasw34.js";import{resolveKobeSpawn,spawnDetachedDaemon,testDaemonResponds}from"./chunk-gwfkkeq0.js";import{stopDaemonProcess}from"./chunk-b9ge49ge.js";import{KobeDaemonClient}from"./chunk-b4bf8w8q.js";import{isProcessAlive,readPidFile}from"./chunk-vnpqemb0.js";import{defaultPtyHostLogPath,defaultPtyHostPidPath,defaultPtyHostSocketPath}from"./chunk-y8fqdnh3.js";import{spawn}from"child_process";import{existsSync}from"fs";import{rename,rm}from"fs/promises";import{basename,delimiter,dirname,join,resolve}from"path";import{fileURLToPath}from"url";var PTY_HOST_START_ARGS=["pty-host"],PTY_HOST_NODE_BUNDLE="pty-host-node.mjs",PTY_HOST_NODE_DEV_CACHE="../../.cache/pty-host-node.mjs",PTY_HOST_NODE_ENTRY="../daemon/pty-host-node-entry.ts";function resolveNodeBinary(env=process.env,exists=existsSync,platform=process.platform){let dirs=(env.PATH??env.Path??"").split(delimiter).filter((dir)=>dir.length>0),suffixes=platform==="win32"?(env.PATHEXT??".EXE;.CMD;.BAT").split(";").filter((ext)=>ext.length>0):[""];for(let dir of dirs)for(let suffix of suffixes){let candidate=join(dir,`node${suffix}`);if(exists(candidate))return candidate}return null}async function bundleWithBun(entry,outFile,io){let{build,rename:move,discard}=io??{build:(config)=>Bun.build(config),rename,discard:(path)=>rm(path,{force:!0})},staging=`${outFile}.${process.pid}.tmp`,built=await build({entrypoints:[entry],outdir:dirname(staging),target:"node",format:"esm",naming:basename(staging),external:["node-pty"]});if(!built.success)return await discard(staging).catch(()=>{}),built;return await move(staging,outFile),built}async function resolveNodePtyHostSpawn(deps={}){let platform=deps.platform??process.platform;if(platform!=="win32")return null;let here=deps.moduleDir??dirname(fileURLToPath(import.meta.url)),exists=deps.exists??existsSync,bundle=deps.bundle??bundleWithBun,node=resolveNodeBinary(deps.env??process.env,exists,platform);if(!node)throw Error("Rove: the Windows PTY host runs under node, but no node was found on PATH. "+"Install Node.js (https://nodejs.org) and restart Rove \u2014 engine and terminal sessions cannot start without it.");let packaged=resolve(here,PTY_HOST_NODE_BUNDLE);if(exists(packaged))return[node,packaged];let entry=resolve(here,PTY_HOST_NODE_ENTRY);if(!exists(entry))throw Error(`Rove: no Windows PTY host found (looked for ${packaged} and ${entry})`);let cache=resolve(here,PTY_HOST_NODE_DEV_CACHE),built=await bundle(entry,cache);if(!built.success)throw Error(`Rove: could not build the Windows PTY host \u2014 ${built.logs.map(String).join("; ")}`);return[node,cache]}var BUSY_PTY_HOST_GRACE_MS=15000;async function liveChildCount(pid){try{let proc=spawn("/bin/ps",["-A","-o","ppid="],{stdio:["ignore","pipe","ignore"]});return(await new Promise((done)=>{let out="";proc.stdout.on("data",(chunk)=>{out+=String(chunk)}),proc.on("close",()=>done(out)),proc.on("error",()=>done(""))})).split(`
2
+ import{logDaemonInfo}from"./chunk-rcyasw34.js";import{resolveKobeSpawn,spawnDetachedDaemon,testDaemonResponds}from"./chunk-yv44tdjq.js";import{stopDaemonProcess}from"./chunk-c42pwcvw.js";import{KobeDaemonClient}from"./chunk-mjdt28x6.js";import{isProcessAlive,readPidFile}from"./chunk-vnpqemb0.js";import{defaultPtyHostLogPath,defaultPtyHostPidPath,defaultPtyHostSocketPath}from"./chunk-y8fqdnh3.js";import{spawn}from"child_process";import{existsSync}from"fs";import{rename,rm}from"fs/promises";import{basename,delimiter,dirname,join,resolve}from"path";import{fileURLToPath}from"url";var PTY_HOST_START_ARGS=["pty-host"],PTY_HOST_NODE_BUNDLE="pty-host-node.mjs",PTY_HOST_NODE_DEV_CACHE="../../.cache/pty-host-node.mjs",PTY_HOST_NODE_ENTRY="../daemon/pty-host-node-entry.ts";function resolveNodeBinary(env=process.env,exists=existsSync,platform=process.platform){let dirs=(env.PATH??env.Path??"").split(delimiter).filter((dir)=>dir.length>0),suffixes=platform==="win32"?(env.PATHEXT??".EXE;.CMD;.BAT").split(";").filter((ext)=>ext.length>0):[""];for(let dir of dirs)for(let suffix of suffixes){let candidate=join(dir,`node${suffix}`);if(exists(candidate))return candidate}return null}async function bundleWithBun(entry,outFile,io){let{build,rename:move,discard}=io??{build:(config)=>Bun.build(config),rename,discard:(path)=>rm(path,{force:!0})},staging=`${outFile}.${process.pid}.tmp`,built=await build({entrypoints:[entry],outdir:dirname(staging),target:"node",format:"esm",naming:basename(staging),external:["node-pty"]});if(!built.success)return await discard(staging).catch(()=>{}),built;return await move(staging,outFile),built}async function resolveNodePtyHostSpawn(deps={}){let platform=deps.platform??process.platform;if(platform!=="win32")return null;let here=deps.moduleDir??dirname(fileURLToPath(import.meta.url)),exists=deps.exists??existsSync,bundle=deps.bundle??bundleWithBun,node=resolveNodeBinary(deps.env??process.env,exists,platform);if(!node)throw Error("Rove: the Windows PTY host runs under node, but no node was found on PATH. "+"Install Node.js (https://nodejs.org) and restart Rove \u2014 engine and terminal sessions cannot start without it.");let packaged=resolve(here,PTY_HOST_NODE_BUNDLE);if(exists(packaged))return[node,packaged];let entry=resolve(here,PTY_HOST_NODE_ENTRY);if(!exists(entry))throw Error(`Rove: no Windows PTY host found (looked for ${packaged} and ${entry})`);let cache=resolve(here,PTY_HOST_NODE_DEV_CACHE),built=await bundle(entry,cache);if(!built.success)throw Error(`Rove: could not build the Windows PTY host \u2014 ${built.logs.map(String).join("; ")}`);return[node,cache]}var BUSY_PTY_HOST_GRACE_MS=15000;async function liveChildCount(pid){try{let proc=spawn("/bin/ps",["-A","-o","ppid="],{stdio:["ignore","pipe","ignore"]});return(await new Promise((done)=>{let out="";proc.stdout.on("data",(chunk)=>{out+=String(chunk)}),proc.on("close",()=>done(out)),proc.on("error",()=>done(""))})).split(`
3
3
  `).filter((row)=>Number(row.trim())===pid).length}catch{return 0}}async function ensurePtyHostReachable(){let socketPath=defaultPtyHostSocketPath();if(await testDaemonResponds(socketPath))return socketPath;let hostPid=await readPidFile(defaultPtyHostPidPath());if(hostPid!==null&&hostPid!==process.pid&&isProcessAlive(hostPid)){let deadline2=Date.now()+BUSY_PTY_HOST_GRACE_MS;while(Date.now()<deadline2){if(await new Promise((resolveTimer)=>setTimeout(resolveTimer,250)),await testDaemonResponds(socketPath))return socketPath;if(!isProcessAlive(hostPid))break}if(isProcessAlive(hostPid)){let sessions=await liveChildCount(hostPid);if(sessions>0)throw Error(`rove: the pty host (pid ${hostPid}) is not answering but still holds ${sessions} live session(s) \u2014 refusing to restart it, which would kill every engine running in them. Inspect it with \`rove api pty-list\`, or kill ${hostPid} yourself once you have accepted losing those sessions.`)}}await stopDaemonProcess(socketPath,defaultPtyHostPidPath()).catch(()=>{});let[command,...args]=await resolveNodePtyHostSpawn()??resolveKobeSpawn(PTY_HOST_START_ARGS);spawnDetachedDaemon(command??"",args,process.env,defaultPtyHostLogPath());let deadline=Date.now()+5000;while(Date.now()<deadline){if(await testDaemonResponds(socketPath))return socketPath;await new Promise((resolveTimer)=>setTimeout(resolveTimer,100))}throw Error(`rove: pty host did not start (or stayed wedged) at ${socketPath}`)}async function sweepPtyHostSessions(liveTaskIds,homeDir){let client=new KobeDaemonClient(defaultPtyHostSocketPath(homeDir));try{await client.connect();let{sessions}=await client.request("pty.list"),currentTasks;for(let session of sessions){if(!currentTasks){let ids=liveTaskIds();if(ids===null)return;currentTasks=new Set(ids)}if(currentTasks.has(session.key.split("::")[0]??session.key))continue;if(!session.generation){logDaemonInfo("pty-sweep",`skipped ${session.key}: host has no session generation; restart it when sessions can be interrupted`);continue}await client.request("pty.kill",{key:session.key,expectedGeneration:session.generation}),currentTasks=void 0}}catch{}finally{client.close()}}async function ptyHostHasLiveSessions(homeDir){let client=new KobeDaemonClient(defaultPtyHostSocketPath(homeDir));try{await client.connect();let result=await client.request("pty.list");if(!Array.isArray(result.sessions)||result.sessions.some((s)=>typeof s.alive!=="boolean"))return null;return result.sessions.some((s)=>s.alive)}catch(err){if(err instanceof Error&&"code"in err&&(err.code==="ENOENT"||err.code==="ECONNREFUSED")){let pid=await readPidFile(defaultPtyHostPidPath(homeDir));return pid!==null&&isProcessAlive(pid)?null:!1}return null}finally{client.close()}}
4
4
  export{resolveNodeBinary,ensurePtyHostReachable,sweepPtyHostSessions,ptyHostHasLiveSessions};
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{BREAKING_VERSIONS,CURRENT_VERSION,compareSemver}from"./chunk-kg0snka2.js";import{loadStateFile,patchStateFile}from"./chunk-katrbape.js";import{activeCliName}from"./chunk-00ehck55.js";var LAST_RUN_VERSION_KEY="app.lastRunVersion";function resetGateBlockers(lastRun,current=CURRENT_VERSION,breaking=BREAKING_VERSIONS){if(typeof lastRun!=="string"||lastRun.length===0)return[];let[lo,hi]=compareSemver(lastRun,current)<=0?[lastRun,current]:[current,lastRun];return breaking.filter((b)=>compareSemver(b,lo)>0&&compareSemver(b,hi)<=0)}function enforceResetGate(){let cliName=activeCliName(),lastRun=loadStateFile()[LAST_RUN_VERSION_KEY],blockers=resetGateBlockers(lastRun);if(blockers.length>0){let from=typeof lastRun==="string"?lastRun:"unknown";console.error([`${cliName} ${CURRENT_VERSION}: cannot start \u2014 version ${blockers.join(", ")} introduced breaking changes`,`(last run: ${from}). Your daemon/session state may be incompatible.`,"","Run:",` ${cliName} reset # stop daemon + PTY host + sessions (tasks kept)`,` ${cliName} reset --hard # additionally wipe the task index + UI state`,"","Then relaunch Rove. Worktrees are never touched."].join(`
2
+ import{BREAKING_VERSIONS,CURRENT_VERSION,compareSemver}from"./chunk-9k41erqh.js";import{loadStateFile,patchStateFile}from"./chunk-katrbape.js";import{activeCliName}from"./chunk-00ehck55.js";var LAST_RUN_VERSION_KEY="app.lastRunVersion";function resetGateBlockers(lastRun,current=CURRENT_VERSION,breaking=BREAKING_VERSIONS){if(typeof lastRun!=="string"||lastRun.length===0)return[];let[lo,hi]=compareSemver(lastRun,current)<=0?[lastRun,current]:[current,lastRun];return breaking.filter((b)=>compareSemver(b,lo)>0&&compareSemver(b,hi)<=0)}function enforceResetGate(){let cliName=activeCliName(),lastRun=loadStateFile()[LAST_RUN_VERSION_KEY],blockers=resetGateBlockers(lastRun);if(blockers.length>0){let from=typeof lastRun==="string"?lastRun:"unknown";console.error([`${cliName} ${CURRENT_VERSION}: cannot start \u2014 version ${blockers.join(", ")} introduced breaking changes`,`(last run: ${from}). Your daemon/session state may be incompatible.`,"","Run:",` ${cliName} reset # stop daemon + PTY host + sessions (tasks kept)`,` ${cliName} reset --hard # additionally wipe the task index + UI state`,"","Then relaunch Rove. Worktrees are never touched."].join(`
3
3
  `)),process.exit(1)}if(lastRun!==CURRENT_VERSION)stampResetGate()}function stampResetGate(){try{patchStateFile({[LAST_RUN_VERSION_KEY]:CURRENT_VERSION})}catch{}}
4
4
  export{LAST_RUN_VERSION_KEY,enforceResetGate,stampResetGate};