@sma1lboy/rove 0.9.264 → 0.9.266
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/{chunk-ykp6efg0.js → chunk-0sm0wcx9.js} +1 -1
- package/dist/cli/{chunk-md3m1qts.js → chunk-1bmhygwd.js} +1 -1
- package/dist/cli/{chunk-1cmcaarg.js → chunk-1gawhhd0.js} +1 -1
- package/dist/cli/{chunk-2bq6877b.js → chunk-1nrva2m2.js} +2 -2
- package/dist/cli/{chunk-cyq9pwqz.js → chunk-1pg3247n.js} +6 -6
- package/dist/cli/{chunk-nfq1q08c.js → chunk-1vtfzcca.js} +1 -1
- package/dist/cli/{chunk-7y7v9x3n.js → chunk-2gjrfqhs.js} +1 -1
- package/dist/cli/{chunk-x2xk1hpy.js → chunk-2gk96h3f.js} +1 -1
- package/dist/cli/{chunk-8fp47ksq.js → chunk-2vrx0pmv.js} +1 -1
- package/dist/cli/{chunk-yewmtant.js → chunk-30g1bgkg.js} +1 -1
- package/dist/cli/chunk-3126c9x9.js +3 -0
- package/dist/cli/{chunk-c6kw0s9a.js → chunk-31jxjkrq.js} +1 -1
- package/dist/cli/{chunk-hpakh6zr.js → chunk-3zsm2jbm.js} +1 -1
- package/dist/cli/{chunk-s0x0yw8x.js → chunk-4018sjy3.js} +1 -1
- package/dist/cli/chunk-4b9f565d.js +2 -0
- package/dist/cli/chunk-4dsyczce.js +2 -0
- package/dist/cli/chunk-4gngf0mt.js +70 -0
- package/dist/cli/{chunk-gzj9nk7k.js → chunk-4rya4jmx.js} +1 -1
- package/dist/cli/{chunk-y1a673xg.js → chunk-4sj2sqyt.js} +1 -1
- package/dist/cli/{chunk-y5p9wm83.js → chunk-56n0whme.js} +1 -1
- package/dist/cli/{chunk-n7vtv1rw.js → chunk-5srsjs7r.js} +1 -1
- package/dist/cli/{chunk-ws4cg819.js → chunk-625773dm.js} +1 -1
- package/dist/cli/{chunk-2k0f7837.js → chunk-67qa9eca.js} +1 -1
- package/dist/cli/chunk-696sqb6j.js +2 -0
- package/dist/cli/{chunk-3ac75tqw.js → chunk-6a70wv2b.js} +1 -1
- package/dist/cli/{chunk-wch6y5bd.js → chunk-7c4zdjr5.js} +1 -1
- package/dist/cli/{chunk-8gzqcx6x.js → chunk-7nrzkqt5.js} +1 -1
- package/dist/cli/chunk-7wsxppwc.js +55 -0
- package/dist/cli/{chunk-ns2f9b6r.js → chunk-80jqznbm.js} +1 -1
- package/dist/cli/chunk-812et2xk.js +3 -0
- package/dist/cli/{chunk-9ecnsh42.js → chunk-8saxdp88.js} +1 -1
- package/dist/cli/{chunk-j11hzmwy.js → chunk-8sksdq95.js} +1 -1
- package/dist/cli/{chunk-rwx1y497.js → chunk-9g2faw9a.js} +1 -1
- package/dist/cli/chunk-a42j8eek.js +3 -0
- package/dist/cli/{chunk-bmk52w06.js → chunk-aeswyjhk.js} +1 -1
- package/dist/cli/{chunk-e5489crb.js → chunk-agt2sdaw.js} +1 -1
- package/dist/cli/{chunk-n22008wk.js → chunk-amc17enx.js} +1 -1
- package/dist/cli/{chunk-vkbgm18p.js → chunk-b3pm5nvh.js} +1 -1
- package/dist/cli/{chunk-jt994bhe.js → chunk-b4zqkdyq.js} +1 -1
- package/dist/cli/{chunk-17fkjpj8.js → chunk-bav3bh70.js} +1 -1
- package/dist/cli/chunk-bwr6dygx.js +4 -0
- package/dist/cli/{chunk-02f0matw.js → chunk-c47gag5r.js} +1 -1
- package/dist/cli/{chunk-zfyf3fdj.js → chunk-cajrtabt.js} +1 -1
- package/dist/cli/{chunk-mccgj97d.js → chunk-cgxgqc87.js} +1 -1
- package/dist/cli/{chunk-spt9e3zk.js → chunk-chzn3px6.js} +4 -4
- package/dist/cli/{chunk-ytw1twda.js → chunk-cqsc0wmp.js} +1 -1
- package/dist/cli/{chunk-9axe1by1.js → chunk-drt79f2t.js} +1 -1
- package/dist/cli/{chunk-hgf4cz78.js → chunk-dzmfexh8.js} +1 -1
- package/dist/cli/chunk-e69s8s16.js +6 -0
- package/dist/cli/{chunk-bs04j8rh.js → chunk-ejd307we.js} +1 -1
- package/dist/cli/{chunk-mhbc490p.js → chunk-ek6kywem.js} +1 -1
- package/dist/cli/{chunk-r3zkpbf5.js → chunk-g1px1rk6.js} +1 -1
- package/dist/cli/{chunk-27k612fg.js → chunk-gvmgabps.js} +1 -1
- package/dist/cli/{chunk-04zwds1k.js → chunk-hc6qpkpy.js} +2 -2
- package/dist/cli/{chunk-cy1c8jmz.js → chunk-hq3hd8qr.js} +1 -1
- package/dist/cli/{chunk-jjv7xem7.js → chunk-j1fe3j54.js} +1 -1
- package/dist/cli/{chunk-jaqa26ab.js → chunk-jrqtzp35.js} +1 -1
- package/dist/cli/{chunk-s83qnstd.js → chunk-kg8k1rar.js} +1 -1
- package/dist/cli/chunk-kvwqh35r.js +4 -0
- package/dist/cli/{chunk-22d0yc7m.js → chunk-m6pp9gaf.js} +1 -1
- package/dist/cli/chunk-m8shvh3j.js +2 -0
- package/dist/cli/{chunk-3khq4hhf.js → chunk-mb018hfg.js} +3 -3
- package/dist/cli/{chunk-4tb0h00q.js → chunk-me656p3n.js} +2 -2
- package/dist/cli/{chunk-ax5c2qmv.js → chunk-mh2s5ttr.js} +1 -1
- package/dist/cli/chunk-mr0z23fd.js +2 -0
- package/dist/cli/{chunk-65333881.js → chunk-mtw6nce9.js} +1 -1
- package/dist/cli/{chunk-g4281a0g.js → chunk-n3f5sdka.js} +2 -2
- package/dist/cli/chunk-njvz867e.js +2 -0
- package/dist/cli/{chunk-rn3cyff1.js → chunk-nyw4s1pv.js} +1 -1
- package/dist/cli/{chunk-xjvrcx07.js → chunk-p2vagan3.js} +1 -1
- package/dist/cli/chunk-pcqw7r50.js +2 -0
- package/dist/cli/{chunk-b2h6jfrg.js → chunk-qdvtz853.js} +1 -1
- package/dist/cli/{chunk-bqscpzvh.js → chunk-qpr14v8x.js} +1 -1
- package/dist/cli/{chunk-3zjdbdwy.js → chunk-qs0526nj.js} +1 -1
- package/dist/cli/{chunk-dxk134bp.js → chunk-qwz9728j.js} +1 -1
- package/dist/cli/{chunk-z6y4cg73.js → chunk-r4vfng2z.js} +1 -1
- package/dist/cli/{chunk-rtcevh2t.js → chunk-rbr6qapz.js} +1 -1
- package/dist/cli/{chunk-65v8ga90.js → chunk-rtkj4wdw.js} +1 -1
- package/dist/cli/{chunk-vpj3gw8b.js → chunk-rwmxpjrx.js} +1 -1
- package/dist/cli/{chunk-eq0c4ecj.js → chunk-s0gp5b9p.js} +1 -1
- package/dist/cli/{chunk-c0gvp57p.js → chunk-s27a0ckk.js} +1 -1
- package/dist/cli/{chunk-f6tqc1cc.js → chunk-sdya3r5j.js} +1 -1
- package/dist/cli/{chunk-wkv4aw6c.js → chunk-swxq6yak.js} +1 -1
- package/dist/cli/{chunk-fdexrh6h.js → chunk-t6hzyee7.js} +1 -1
- package/dist/cli/{chunk-hv9qjnvj.js → chunk-trhrdby1.js} +1 -1
- package/dist/cli/{chunk-vy6q9m4e.js → chunk-tshbjft4.js} +2 -2
- package/dist/cli/chunk-tvbbnfp2.js +2 -0
- package/dist/cli/{chunk-4kzqv6rq.js → chunk-ve348rmz.js} +1 -1
- package/dist/cli/{chunk-vjew0mqm.js → chunk-vxc90473.js} +1 -1
- package/dist/cli/{chunk-70kj5p5z.js → chunk-w196jkg5.js} +1 -1
- package/dist/cli/chunk-w78n33b8.js +3 -0
- package/dist/cli/{chunk-qy4tma9z.js → chunk-wvaf3d9j.js} +1 -1
- package/dist/cli/{chunk-wv5hvxcd.js → chunk-wyn3zbh4.js} +2 -2
- package/dist/cli/chunk-xgans9wf.js +3 -0
- package/dist/cli/{chunk-b3vz95wb.js → chunk-xh72jz7c.js} +1 -1
- package/dist/cli/chunk-xm7a6swz.js +2 -0
- package/dist/cli/{chunk-9ykm0dcz.js → chunk-y078swzq.js} +1 -1
- package/dist/cli/chunk-y87f04kk.js +2 -0
- package/dist/cli/{chunk-g0kq5ng6.js → chunk-yadx0wc5.js} +1 -1
- package/dist/cli/{chunk-6h9bd4z6.js → chunk-ye4vt96f.js} +3 -3
- package/dist/cli/{chunk-ampdybqg.js → chunk-yk498qwr.js} +1 -1
- package/dist/cli/chunk-ywwm92e5.js +2 -0
- package/dist/cli/chunk-yztr951z.js +3 -0
- package/dist/cli/chunk-z5g3twhn.js +2 -0
- package/dist/cli/{chunk-8021rerp.js → chunk-z72f3d9m.js} +18 -18
- package/dist/cli/{chunk-jwqdhbe9.js → chunk-z80jjarw.js} +1 -1
- package/dist/cli/{chunk-c2cj2bye.js → chunk-z99ynm4r.js} +1 -1
- package/dist/cli/{chunk-7jqd1vht.js → chunk-zprhxt1q.js} +1 -1
- package/dist/cli/index.js +8 -8
- package/dist/cli/rove-run.js +1 -1
- package/dist/cli/rove.js +1 -1
- package/dist/skills/rove/SKILL.md +5 -2
- package/dist/skills/rove/references/api-flags.md +1 -1
- package/dist/web/assets/index-BsbDxm3K.js +109 -0
- package/dist/web/assets/index-DNv-oxrT.css +1 -0
- package/dist/web/index.html +2 -2
- package/package.json +3 -3
- package/dist/cli/chunk-1gxb0bd3.js +0 -3
- package/dist/cli/chunk-26mf16v9.js +0 -2
- package/dist/cli/chunk-2amvwfah.js +0 -6
- package/dist/cli/chunk-2cbzp9t1.js +0 -2
- package/dist/cli/chunk-59g5tbc7.js +0 -2
- package/dist/cli/chunk-5p8ws3an.js +0 -2
- package/dist/cli/chunk-61nwtmyh.js +0 -2
- package/dist/cli/chunk-69dz852g.js +0 -2
- package/dist/cli/chunk-7hr9k9kg.js +0 -2
- package/dist/cli/chunk-7kwk5kxn.js +0 -3
- package/dist/cli/chunk-a2epp2ad.js +0 -4
- package/dist/cli/chunk-ft6ftksv.js +0 -2
- package/dist/cli/chunk-har2ggte.js +0 -2
- package/dist/cli/chunk-k04s1eb9.js +0 -2
- package/dist/cli/chunk-mn134nhp.js +0 -2
- package/dist/cli/chunk-mtvcw6te.js +0 -55
- package/dist/cli/chunk-nze6pmm7.js +0 -2
- package/dist/cli/chunk-pjae8k74.js +0 -70
- package/dist/cli/chunk-r240tf5j.js +0 -3
- package/dist/cli/chunk-va5mjg68.js +0 -3
- package/dist/cli/chunk-x7r75e3p.js +0 -3
- package/dist/web/assets/index-CWRZWwbL.css +0 -1
- package/dist/web/assets/index-apAwSqkl.js +0 -109
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{defaultFixRuntime}from"./chunk-
|
|
2
|
+
import{defaultFixRuntime}from"./chunk-sdya3r5j.js";import{INBOUND_CLASSES,deniedClasses,setInbound}from"./chunk-p2vagan3.js";import"./chunk-1pg3247n.js";import"./chunk-4018sjy3.js";import"./chunk-t6hzyee7.js";import"./chunk-80jqznbm.js";import"./chunk-qs0526nj.js";import"./chunk-8sksdq95.js";import"./chunk-re15t5r1.js";import"./chunk-17e2tgyg.js";import"./chunk-cbc1h345.js";import"./chunk-j1fe3j54.js";import"./chunk-4hestsjp.js";import"./chunk-6a70wv2b.js";import"./chunk-2bgmby1d.js";import"./chunk-41x1hrqe.js";import"./chunk-5mhvjytn.js";import"./chunk-kvwqh35r.js";import"./chunk-atn06ncf.js";import"./chunk-mtw6nce9.js";import"./chunk-qkehg2c1.js";import"./chunk-4rya4jmx.js";import"./chunk-1gawhhd0.js";import"./chunk-ve348rmz.js";import"./chunk-yk498qwr.js";import"./chunk-sak1tphp.js";import"./chunk-a42j8eek.js";import"./chunk-4250pw6r.js";import"./chunk-bnv1mm5h.js";import"./chunk-rxqdw6s5.js";import"./chunk-z80jjarw.js";import"./chunk-f5n0tgky.js";import"./chunk-z3zaa155.js";import"./chunk-30g1bgkg.js";import"./chunk-hpay0ax8.js";import"./chunk-catrr0z3.js";import"./chunk-b4zqkdyq.js";import"./chunk-rbr6qapz.js";import"./chunk-2tfnscxk.js";import"./chunk-8saxdp88.js";import"./chunk-w7zv47mp.js";import"./chunk-etfh8f4z.js";import"./chunk-9g2faw9a.js";import"./chunk-t7j8g9f6.js";import"./chunk-dmzg9zdc.js";import"./chunk-kg9kmwt9.js";import"./chunk-6xppe9bj.js";import{addMachine,defaultMachineAlias,discoverMachine,duplicateAliasOf,getMachine,isValidMachineAlias,listMachines,machineSocketDir,machineSshArgs,parseSshTarget,readMachines,removeMachine,roveCommand,sanitizeAlias,setMachineIdentity,sshTargetOf,updateMachine}from"./chunk-g1px1rk6.js";import{primaryCheckouts,repoIdOf,repoIdentity,setPrimaryCheckout}from"./chunk-31jxjkrq.js";import{shQuote}from"./chunk-b7xjhgts.js";import"./chunk-3126c9x9.js";import"./chunk-bwr6dygx.js";import"./chunk-812et2xk.js";import{argvHasFlag}from"./chunk-zsfyj36g.js";import"./chunk-tgfn5ykb.js";import"./chunk-qga9xd2f.js";import"./chunk-5v02t4pz.js";import"./chunk-ag3txfg2.js";import"./chunk-2brn8e1y.js";import"./chunk-xh72jz7c.js";import"./chunk-7zyyvc3d.js";import"./chunk-r6k3ve2g.js";import"./chunk-xy8be792.js";import"./chunk-7kysxgbq.js";import"./chunk-h2m7em1e.js";import"./chunk-7ghwdjdc.js";import"./chunk-tdhk4dz8.js";import{CURRENT_VERSION}from"./chunk-dzmfexh8.js";import"./chunk-m6pp9gaf.js";import"./chunk-40dgv828.js";import"./chunk-3342qzve.js";import{loadStateFile}from"./chunk-n3f5sdka.js";import"./chunk-zh0c8yzw.js";import"./chunk-wqckm0k6.js";import{homeDir}from"./chunk-prqeddy7.js";import{ROVE_PRODUCT_NAME}from"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-625773dm.js";import"./chunk-xgans9wf.js";import"./chunk-cmp64q4j.js";import"./chunk-kmgheesn.js";import"./chunk-szjgjrar.js";import"./chunk-gskbzgc3.js";import"./chunk-pn5ygqn6.js";import"./chunk-n0rtj4z7.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-pxk2c2vj.js";import{__require}from"./chunk-91sykzqq.js";import{spawn}from"child_process";import{appendFileSync,chmodSync,existsSync,mkdirSync}from"fs";import{homedir}from"os";import{dirname}from"path";function parseSshG(stdout,home=homedir()){let values=new Map;for(let line of stdout.split(`
|
|
3
3
|
`)){let space=line.indexOf(" ");if(space>0)values.set(line.slice(0,space).toLowerCase(),line.slice(space+1).trim())}let hostname=values.get("hostname")??"",port=Number(values.get("port")??"22")||22,files=(key)=>(values.get(key)??"").split(/\s+/).filter((f)=>f&&f!=="none").map((f)=>f.startsWith("~/")?`${home}${f.slice(1)}`:f),alias=values.get("hostkeyalias"),proxy=(key)=>{let v=values.get(key);return v!==void 0&&v!=="none"};return{knownHostsName:alias&&alias!=="none"?alias:port===22?hostname:`[${hostname}]:${port}`,hostname,port,userKnownHosts:files("userknownhostsfile"),globalKnownHosts:files("globalknownhostsfile"),proxied:proxy("proxyjump")||proxy("proxycommand")}}async function checkHostKey(config){let target=sshTargetOf(config),resolved=await run(["ssh","-G",...config.port?["-p",String(config.port)]:[],target]);if(resolved.code!==0)return{state:"skipped",reason:"ssh -G failed"};let destination=parseSshG(resolved.stdout);if(!destination.hostname)return{state:"skipped",reason:"ssh -G named no host"};if(destination.proxied)return{state:"skipped",reason:"reached through a proxy"};for(let file of[...destination.userKnownHosts,...destination.globalKnownHosts]){if(!existsSync(file))continue;if((await run(["ssh-keygen","-F",destination.knownHostsName,"-f",file])).code===0)return{state:"known"}}let keys=(await run(["ssh-keyscan","-T","5","-p",String(destination.port),destination.hostname])).stdout.split(`
|
|
4
4
|
`).filter((line)=>line.trim()&&!line.startsWith("#"));if(keys.length===0)return{state:"skipped",reason:"the host offered no key"};let named=keys.map((line)=>line.replace(/^\S+/,destination.knownHostsName)),fingerprints=(await run(["ssh-keygen","-l","-f","-"],`${named.join(`
|
|
5
5
|
`)}
|
|
@@ -38,12 +38,12 @@ ${MACHINE_USAGE}
|
|
|
38
38
|
`),process.exit(1)}function flagValue(argv,name){for(let i=0;i<argv.length;i++){let arg=argv[i];if(arg===void 0)continue;if(arg.startsWith(`--${name}=`))return arg.slice(name.length+3);if(arg!==`--${name}`)continue;let value=argv[i+1];if(value===void 0||value.startsWith("--"))usageError(`--${name} needs a value`);return value}return}async function runMachineSubcommand(argv){let[verb,...rest]=argv;if(!verb||verb==="--help"||verb==="-h"||verb==="help"){process.stdout.write(`${MACHINE_USAGE}
|
|
39
39
|
`);return}if(verb==="list")return list();if(verb==="add")return await add(rest);if(verb==="doctor")return await doctor(rest);if(verb==="remove")return remove(rest);if(verb==="tunnel")return tunnel(rest);if(verb==="inbound")return inbound(rest);if(verb==="primary")return machinePrimary(rest,usageError);usageError(`unknown verb "${verb}"`)}async function add(argv){let target=positionalOf(argv);if(!target)usageError("add needs an ssh target, e.g. `machine add narwhal`");let parsed=parseSshTarget(target);if(!parsed)usageError(`"${target}" is not a valid ssh target ([user@]host[:port])`);let portFlag=flagValue(argv,"port"),port=portFlag?Number(portFlag):parsed.port;if(port!==void 0&&(!Number.isInteger(port)||port<1||port>65535))usageError("--port must be 1-65535");let identity=flagValue(argv,"identity"),requested=flagValue(argv,"alias");if(requested&&!isValidMachineAlias(requested))usageError(`--alias must be letters/digits/._- and cannot be "local" (got "${requested}")`);let probeAlias=requested??sanitizeAlias(parsed.host),config={host:parsed.host,...parsed.user?{user:parsed.user}:{},...port?{port}:{},auth:identity?{kind:"key",keyPath:identity}:{kind:"key"}};await confirmHostKey(config),process.stderr.write(`${CLI_NAME} machine: contacting ${sshTargetOf(config)}\u2026
|
|
40
40
|
`);let established=await establishMachine(probeAlias,config,setupRuntime(argv));if(!established.ok)fail("nothing was saved");let{found,config:settled}=established,alias=requested??defaultMachineAlias({typedHost:parsed.host,typedUser:parsed.user,port,remoteHostname:found.status.hostname});if(!isValidMachineAlias(alias))fail(`could not derive a usable alias from "${found.status.hostname}" \u2014 pass --alias`);let identityTriple={hostname:found.status.hostname,homeDir:found.status.homeDir,daemonPid:found.status.daemonPid},duplicate=duplicateAliasOf(readMachines(loadStateFile()),alias,identityTriple),sockets={daemon:found.status.socketPath,pty:found.status.ptySocketPath};if(found.roveBin)process.stderr.write(`${CLI_NAME} machine: rove is not on ${alias}'s non-interactive PATH; using ${found.roveBin}
|
|
41
|
-
`);addMachine(alias,{...settled,identity:identityTriple,sockets}),setMachineIdentity(alias,identityTriple);let{ensureForwards}=await import("./chunk-
|
|
41
|
+
`);addMachine(alias,{...settled,identity:identityTriple,sockets}),setMachineIdentity(alias,identityTriple);let{ensureForwards}=await import("./chunk-kg8k1rar.js"),up=await ensureForwards({alias,config:settled,remoteDaemonSocket:sockets.daemon,remotePtySocket:sockets.pty});if(process.stdout.write(`${CLI_NAME} machine: ${alias} \u2192 ${sshTargetOf(settled)} (rove ${found.status.roveVersion||"?"} on ${found.status.hostname||"?"})
|
|
42
42
|
`),!up)process.stderr.write(`${CLI_NAME} machine: registered, but could not forward ${alias}'s socket yet \u2014 it will show as offline until the connection comes up
|
|
43
43
|
`);if(duplicate)process.stdout.write(`${CLI_NAME} machine: ${alias} is the same machine as ${duplicate} (hostname/homeDir/pid match) \u2014 the sidebar shows one row
|
|
44
44
|
`)}function setupRuntime(argv){let yes=argv.includes("--yes"),fixRuntime=defaultFixRuntime();return{confirm:fixRuntime.confirm,exec:fixRuntime.exec,out:(line)=>process.stderr.write(`${line}
|
|
45
45
|
`),ask:!yes,planOnly:!yes&&process.stdin.isTTY!==!0}}async function doctor(argv){let alias=positionalOf(argv),entries=listMachines().filter((m)=>!alias||m.alias===alias);if(alias&&entries.length===0)fail(`no machine named "${alias}" (see \`${CLI_NAME} machine list\`)`);if(entries.length===0){process.stdout.write(`No machines registered. Add one with \`${CLI_NAME} machine add <ssh-target>\`.
|
|
46
|
-
`);return}let rt=setupRuntime(argv),{ensureForwards}=await import("./chunk-
|
|
46
|
+
`);return}let rt=setupRuntime(argv),{ensureForwards}=await import("./chunk-kg8k1rar.js"),failed=0;for(let{alias:name,...config}of entries){process.stderr.write(`${CLI_NAME} machine: checking ${name} (${sshTargetOf(config)})\u2026
|
|
47
47
|
`);let established=await establishMachine(name,config,rt);if(!established.ok){failed++,process.stdout.write(`${name} \u2717 ${established.failure.code}
|
|
48
48
|
`);continue}let{found,config:settled}=established,sockets={daemon:found.status.socketPath,pty:found.status.ptySocketPath};updateMachine(name,{...settled,sockets});let up=await ensureForwards({alias:name,config:settled,remoteDaemonSocket:sockets.daemon,remotePtySocket:sockets.pty}),version=found.status.roveVersion||"?",skew=version!==CURRENT_VERSION?` (this machine runs ${CURRENT_VERSION})`:"";if(process.stdout.write(`${name} ${up?"\u2713":"\u2717 socket not forwarded"} rove ${version}${skew} on ${found.status.hostname||"?"}
|
|
49
49
|
`),!up)failed++}if(failed>0)process.exitCode=1}async function confirmHostKey(config){let check=await checkHostKey(config);if(check.state!=="unknown")return;let write=(line)=>{process.stderr.write(`${line}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{getKeychainPassword}from"./chunk-sak1tphp.js";import{LocalExecHost,RemoteExecHost}from"./chunk-b7xjhgts.js";import{getRemoteRepoConfig,getRemoteRepos,isRemoteRepoKey}from"./chunk-
|
|
2
|
+
import{getKeychainPassword}from"./chunk-sak1tphp.js";import{LocalExecHost,RemoteExecHost}from"./chunk-b7xjhgts.js";import{getRemoteRepoConfig,getRemoteRepos,isRemoteRepoKey}from"./chunk-m6pp9gaf.js";import{remoteControlSocketPath}from"./chunk-prqeddy7.js";function remoteSpecFromConfig(config){let cfgAuth=config.auth,auth=cfgAuth.kind==="key"?{kind:"key",keyPath:cfgAuth.keyPath}:{kind:"password",getPassword:()=>getKeychainPassword(cfgAuth.keychainRef)};return{host:config.host,user:config.user,port:config.port,auth,controlPath:remoteControlSocketPath(config.host,config.user,config.port)}}var remoteHostCache=new Map;function cachedRemoteHost(config){let spec=remoteSpecFromConfig(config),cached=remoteHostCache.get(spec.controlPath);if(cached)return cached;let host=new RemoteExecHost(spec);return remoteHostCache.set(spec.controlPath,host),host}function execHostForRepo(repoKey){let config=getRemoteRepoConfig(repoKey);if(!config)return new LocalExecHost;return cachedRemoteHost(config)}function execHostForWorktreePath(worktreePath){for(let config of Object.values(getRemoteRepos()))if(worktreePath===config.basePath||worktreePath.startsWith(`${config.basePath}/`))return cachedRemoteHost(config);return new LocalExecHost}function remoteKeyForRepo(repo){return repo&&isRemoteRepoKey(repo)?repo:void 0}
|
|
3
3
|
export{execHostForRepo,execHostForWorktreePath,remoteKeyForRepo};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{ensurePluginEnginesLoaded,loadPluginEngines,registeredEngineIds,reloadPluginEngines}from"./chunk-80jqznbm.js";import"./chunk-kvwqh35r.js";import"./chunk-8saxdp88.js";import"./chunk-w7zv47mp.js";import"./chunk-812et2xk.js";import"./chunk-2brn8e1y.js";import"./chunk-7zyyvc3d.js";import"./chunk-r6k3ve2g.js";import"./chunk-xy8be792.js";import"./chunk-7kysxgbq.js";import"./chunk-h2m7em1e.js";import"./chunk-7ghwdjdc.js";import"./chunk-tdhk4dz8.js";import"./chunk-m6pp9gaf.js";import"./chunk-40dgv828.js";import"./chunk-3342qzve.js";import"./chunk-n3f5sdka.js";import"./chunk-zh0c8yzw.js";import"./chunk-wqckm0k6.js";import"./chunk-prqeddy7.js";import"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-szjgjrar.js";import"./chunk-gskbzgc3.js";import"./chunk-pn5ygqn6.js";import"./chunk-n0rtj4z7.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-91sykzqq.js";export{reloadPluginEngines,registeredEngineIds,loadPluginEngines,ensurePluginEnginesLoaded};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{REPEAT_SEP,VerbArgs,defaultApiRuntime,findVerb,parseFlags,unknownVerbError,validateAgainstSpec}from"./chunk-1pg3247n.js";import{ensurePluginEnginesLoaded}from"./chunk-80jqznbm.js";import{ApiError,cliCaller,requireVerbInstalled,splitDaemonCode}from"./chunk-3126c9x9.js";import{errorMessage}from"./chunk-2brn8e1y.js";import{ROVE_API_VERSION}from"./chunk-szjgjrar.js";function toApiError(err){if(err instanceof ApiError)return err;let message=errorMessage(err);if(/task not found/i.test(message))return new ApiError(message,"TASK_NOT_FOUND",{hint:"that task id does not exist (deleted or mistyped) \u2014 list live tasks and retry with a real id",nextCommandArgs:["api","list"]});if(/unknown daemon request:/i.test(message))return versionSkewError(message);let coded=splitDaemonCode(message);if(coded)return new ApiError(coded.rest,coded.code);return new ApiError(message,"RPC_ERROR")}function versionSkewError(message){return new ApiError(message,"DAEMON_VERSION_SKEW",{hint:"the running daemon is a different build than this CLI, so it does not serve this verb \u2014 restart the daemon to pick up this build, then retry (if the verb is gone for good, `rove api schema` lists what this daemon actually serves)",nextCommandArgs:["daemon","restart"]})}function errorBody(err){return{message:err.message,code:err.code,...err.data}}function successEnvelope(result){return{apiVersion:ROVE_API_VERSION,ok:!0,result}}function errorEnvelope(err){return{apiVersion:ROVE_API_VERSION,ok:!1,error:errorBody(toApiError(err))}}function flagText(name,spec,value){let type=spec?.type;if(typeof value==="string")return value;if(spec?.repeatable&&Array.isArray(value)&&value.every((item)=>typeof item==="string"))return value.join(REPEAT_SEP);if(typeof value==="boolean"&&(type==="bool"||type===void 0))return String(value);if(typeof value==="number"&&(type==="int"||type==="uint"||type===void 0))return String(value);if(Array.isArray(value)&&(type==="csv"||type===void 0)){if(!value.every((item)=>typeof item==="string"&&!item.includes(",")))throw new ApiError(`param ${name} must be a list of strings without ","`,"BAD_FLAG");return value.join(",")}throw new ApiError(`param ${name} does not fit its ${type} flag`,"BAD_FLAG")}function paramsToFlags(verb,params){let flags=new Map;for(let[name,value]of Object.entries(params))flags.set(name,flagText(name,verb.flags.find((f)=>f.name===name),value));return flags}function booleanFlagsOf(verb){return new Set(verb.flags.filter((f)=>f.type==="bool").map((f)=>f.name))}function repeatableFlagsOf(verb){return new Set(verb.flags.filter((f)=>f.repeatable).map((f)=>f.name))}async function callVerb(verb,flags,deps){requireVerbInstalled(verb);let caller=deps.caller??cliCaller();try{return await verb.handler({args:new VerbArgs(verb,flags,caller),caller,client:deps.client,runtime:deps.runtime??defaultApiRuntime})}catch(err){throw toApiError(err)}}async function runVerb(verbName,input,deps){ensurePluginEnginesLoaded();let verb=findVerb(verbName);if(!verb)throw unknownVerbError(verbName);if(verb.cliOnly&&!(deps.caller??cliCaller()).cli)throw new ApiError(`"${verbName}" streams over stdout/stdin, so only \`rove api\` can run it`,"CLI_ONLY_VERB",{hint:"run it as a CLI command on the machine whose daemon you are talking to"});let flags="argv"in input?parseFlags(input.argv,booleanFlagsOf(verb),repeatableFlagsOf(verb)).flags:paramsToFlags(verb,input.params);return validateAgainstSpec(verb,flags),callVerb(verb,flags,deps)}async function executeVerb(verbName,input,deps){try{return successEnvelope(await runVerb(verbName,input,deps))}catch(err){return errorEnvelope(err)}}function argvToParams(verbName,argv){let verb=findVerb(verbName);if(!verb)throw unknownVerbError(verbName);let{flags}=parseFlags(argv,booleanFlagsOf(verb),repeatableFlagsOf(verb));return Object.fromEntries(flags)}
|
|
3
|
+
export{toApiError,errorBody,successEnvelope,errorEnvelope,paramsToFlags,booleanFlagsOf,repeatableFlagsOf,callVerb,runVerb,executeVerb,argvToParams};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{AUTO_MACHINE,LOCAL_MACHINE,forwardVerb,invokeRouted,machineDaemonSocket,machinePtySocket,machineTasks,pickMachine,repoHosts,repoWanted,requireMachine,routeTarget}from"./chunk-qdvtz853.js";import"./chunk-s27a0ckk.js";import"./chunk-g1px1rk6.js";import"./chunk-31jxjkrq.js";import"./chunk-b7xjhgts.js";import"./chunk-3126c9x9.js";import"./chunk-bwr6dygx.js";import"./chunk-812et2xk.js";import"./chunk-2brn8e1y.js";import"./chunk-7kysxgbq.js";import"./chunk-m6pp9gaf.js";import"./chunk-40dgv828.js";import"./chunk-3342qzve.js";import"./chunk-n3f5sdka.js";import"./chunk-zh0c8yzw.js";import"./chunk-wqckm0k6.js";import"./chunk-prqeddy7.js";import"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-kmgheesn.js";import"./chunk-szjgjrar.js";import"./chunk-gskbzgc3.js";import"./chunk-pn5ygqn6.js";import"./chunk-n0rtj4z7.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-91sykzqq.js";export{routeTarget,requireMachine,repoWanted,repoHosts,pickMachine,machineTasks,machinePtySocket,machineDaemonSocket,invokeRouted,forwardVerb,LOCAL_MACHINE,AUTO_MACHINE};
|