@sma1lboy/rove 0.9.248 → 0.9.249
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-ysfe09dd.js → chunk-0hkqt7nn.js} +2 -2
- package/dist/cli/{chunk-empeprq2.js → chunk-1qxr6wsw.js} +1 -1
- package/dist/cli/{chunk-e6w94amk.js → chunk-1xtmkdyn.js} +1 -1
- package/dist/cli/{chunk-ztcxkm24.js → chunk-21xgqgmv.js} +1 -1
- package/dist/cli/{chunk-043hdsx6.js → chunk-27sfb204.js} +1 -1
- package/dist/cli/{chunk-5nfdpc9j.js → chunk-4m18vee4.js} +1 -1
- package/dist/cli/{chunk-3b52kybr.js → chunk-4qwkxe0d.js} +1 -1
- package/dist/cli/{chunk-kxzv662p.js → chunk-544bbk17.js} +1 -1
- package/dist/cli/{chunk-8shm2q5k.js → chunk-5yb2rehg.js} +1 -1
- package/dist/cli/{chunk-esz0pj68.js → chunk-6fr3dfhy.js} +1 -1
- package/dist/cli/{chunk-xpt1rabn.js → chunk-7f1g1kxp.js} +1 -1
- package/dist/cli/{chunk-dhnbgfhh.js → chunk-7fc1ndtk.js} +1 -1
- package/dist/cli/{chunk-hmm0z8x9.js → chunk-7w9wkv9a.js} +1 -1
- package/dist/cli/{chunk-89ag6mab.js → chunk-7xttx9m1.js} +11 -11
- package/dist/cli/{chunk-7mxd2n7q.js → chunk-8gmxg77t.js} +1 -1
- package/dist/cli/{chunk-jjwxx8yp.js → chunk-8mfpv3fh.js} +1 -1
- package/dist/cli/{chunk-k4374n9t.js → chunk-99n8qsw9.js} +2 -2
- package/dist/cli/{chunk-761w6mbm.js → chunk-9mvm5zp2.js} +1 -1
- package/dist/cli/{chunk-v4fa5ycf.js → chunk-a0kyf848.js} +2 -2
- package/dist/cli/{chunk-ncxhtx5a.js → chunk-a97jt3kh.js} +1 -1
- package/dist/cli/{chunk-knpr38z6.js → chunk-b13q90ha.js} +1 -1
- package/dist/cli/{chunk-hfjd4j5b.js → chunk-c9m63446.js} +1 -1
- package/dist/cli/{chunk-ha09kd22.js → chunk-cg072925.js} +1 -1
- package/dist/cli/{chunk-jj640vvr.js → chunk-cm1ykwbs.js} +1 -1
- package/dist/cli/{chunk-twa07m8w.js → chunk-dbsmf3ce.js} +1 -1
- package/dist/cli/{chunk-dk3g9ynd.js → chunk-djvfxx5t.js} +16 -16
- package/dist/cli/{chunk-dmecdp9c.js → chunk-dzm8f4hx.js} +1 -1
- package/dist/cli/{chunk-9d2p1h1b.js → chunk-e8e9f42k.js} +1 -1
- package/dist/cli/{chunk-jxyvk9c0.js → chunk-eyxmdn3h.js} +1 -1
- package/dist/cli/{chunk-5ftfwgnj.js → chunk-fts71ez1.js} +1 -1
- package/dist/cli/{chunk-sxtxxd65.js → chunk-g4jd8vvb.js} +1 -1
- package/dist/cli/{chunk-n4f4xxhr.js → chunk-hd5vbg8d.js} +1 -1
- package/dist/cli/{chunk-2rve8y8t.js → chunk-j0eh1ve1.js} +1 -1
- package/dist/cli/{chunk-y79j580z.js → chunk-j4cqwqnc.js} +1 -1
- package/dist/cli/{chunk-frtdk8ha.js → chunk-j9m9zr27.js} +1 -1
- package/dist/cli/{chunk-q2177zrc.js → chunk-myzsv53b.js} +1 -1
- package/dist/cli/{chunk-5xh7ee2k.js → chunk-nh1g9yw6.js} +1 -1
- package/dist/cli/{chunk-09y7gspe.js → chunk-nqsf6j0s.js} +1 -1
- package/dist/cli/{chunk-cbhzyn31.js → chunk-ntrwd6ks.js} +1 -1
- package/dist/cli/{chunk-62wgn4br.js → chunk-nz084jp5.js} +1 -1
- package/dist/cli/{chunk-nz1436cx.js → chunk-ptb83b12.js} +1 -1
- package/dist/cli/{chunk-nra5y7r7.js → chunk-pyy41pch.js} +1 -1
- package/dist/cli/{chunk-y7xzcxb3.js → chunk-qrb2eqm5.js} +1 -1
- package/dist/cli/{chunk-ncxkn8gy.js → chunk-rr08hsha.js} +2 -2
- package/dist/cli/{chunk-ypjca5g3.js → chunk-rtcxzve2.js} +1 -1
- package/dist/cli/{chunk-30fygd49.js → chunk-rvqse0aa.js} +1 -1
- package/dist/cli/{chunk-ppj32x3a.js → chunk-s3md5y0b.js} +1 -1
- package/dist/cli/{chunk-55rpt311.js → chunk-s87vbwxy.js} +3 -3
- package/dist/cli/{chunk-b27fyc2m.js → chunk-sbgtbxhc.js} +1 -1
- package/dist/cli/{chunk-hdbj5yaz.js → chunk-sr9fd2qp.js} +2 -2
- package/dist/cli/{chunk-kcb75khv.js → chunk-twc7bdag.js} +1 -1
- package/dist/cli/{chunk-mra8t9tk.js → chunk-tydzne5g.js} +1 -1
- package/dist/cli/chunk-v59nnam9.js +3 -0
- package/dist/cli/{chunk-91gkmv3b.js → chunk-vaydxhdd.js} +1 -1
- package/dist/cli/{chunk-shdzs3kz.js → chunk-w0qy9ybf.js} +1 -1
- package/dist/cli/{chunk-wvwkmj3t.js → chunk-w6y3ksqa.js} +1 -1
- package/dist/cli/{chunk-bqthw6ce.js → chunk-wkt6h5cf.js} +1 -1
- package/dist/cli/{chunk-32zj8r86.js → chunk-wn4agkek.js} +1 -1
- package/dist/cli/{chunk-89ze9jc2.js → chunk-wtdj8n93.js} +1 -1
- package/dist/cli/{chunk-3y2tv956.js → chunk-x2gc4vx0.js} +3 -3
- package/dist/cli/chunk-x33sm4rp.js +5 -0
- package/dist/cli/{chunk-0qh9w2sc.js → chunk-y7mg74jx.js} +1 -1
- package/dist/cli/{chunk-wy7qtcym.js → chunk-yc4x46ha.js} +2 -2
- package/dist/cli/{chunk-taa06w9e.js → chunk-ydm5scdn.js} +1 -1
- package/dist/cli/{chunk-ekknb5ft.js → chunk-zh2t2wa9.js} +1 -1
- package/dist/cli/{chunk-9wfdzbnr.js → chunk-zpxjbrzt.js} +1 -1
- package/dist/cli/index.js +4 -4
- package/dist/cli/rove.js +1 -1
- package/dist/web/assets/{index-BC558ZDT.js → index-DgsWPjvG.js} +1 -1
- package/dist/web/index.html +1 -1
- package/package.json +3 -3
- package/dist/cli/chunk-b9t4vq5j.js +0 -3
- package/dist/cli/chunk-znjcesdr.js +0 -5
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{discoverMachine}from"./chunk-wtb8cycx.js";import{RemoteOrchestrator}from"./chunk-
|
|
2
|
+
import{discoverMachine}from"./chunk-wtb8cycx.js";import{RemoteOrchestrator}from"./chunk-wn4agkek.js";import{startTunnel}from"./chunk-9jsm6h5y.js";import{dedupeMachines,duplicateAliasOf,listMachines,readMachines,setMachineIdentity,updateMachine}from"./chunk-9aydqazr.js";import{loadStateFile}from"./chunk-7q43tysm.js";import{createStateCell}from"./chunk-nhakrm1f.js";import{RoveDaemonClient}from"./chunk-0vpn32r6.js";import{logClient,logClientError}from"./chunk-hq9tbzqa.js";class MachineHub{local;slots=new Map;machinesAcc=createStateCell([],"machines.status");mergedAcc=createStateCell([],"machines.tasks");localUnsubscribe=null;disposed=!1;constructor(local){this.local=local}machinesSignal(){return this.machinesAcc}tasksSignal(){if(this.slots.size===0)return this.local.tasksSignal();return this.mergedAcc}remoteTaskIds(){let ids=new Set;for(let slot of this.slots.values())for(let task of slot.tasks)ids.add(String(task.id));return ids}attach(){let entries=dedupeMachines(listMachines());if(entries.length===0)return;for(let entry of entries)this.slots.set(entry.alias,{entry,tasks:[]});this.publishStatuses(),this.localUnsubscribe=this.local.tasksSignal().subscribe(()=>this.republishTasks()),this.republishTasks();for(let entry of entries)this.connect(entry)}async connect(entry){let slot=this.slots.get(entry.alias);if(!slot||this.disposed)return;let found=await discoverMachine(entry.alias,entry);if(this.disposed)return;let sockets=found.ok?{daemon:found.status.socketPath,pty:found.status.ptySocketPath}:entry.sockets;if(!sockets){this.setStatus(entry.alias,{state:"offline",error:found.ok?void 0:found.message});return}if(found.ok)updateMachine(entry.alias,{sockets});let tunnel=startTunnel({alias:entry.alias,config:entry,remoteDaemonSocket:sockets.daemon,remotePtySocket:sockets.pty});if(slot.tunnel=tunnel,tunnel.state()==="unsupported"){this.setStatus(entry.alias,{state:"unsupported",error:"SSH unix-socket forwarding is not available on Windows"});return}if(tunnel.onState((state)=>{if(state==="online")this.openOrchestrator(entry,tunnel);else if(state==="offline")this.setStatus(entry.alias,{state:"offline"}),this.republishTasks()}),tunnel.state()==="online")await this.openOrchestrator(entry,tunnel)}async openOrchestrator(entry,tunnel){let slot=this.slots.get(entry.alias);if(!slot||this.disposed||slot.orchestrator)return;let client=new RoveDaemonClient(tunnel.daemonSocketPath),orchestrator=new RemoteOrchestrator(client,{role:"gui",expectForeignHome:!0,onPeerIdentity:(peer)=>this.onPeerIdentity(entry.alias,peer)});slot.orchestrator=orchestrator;try{await orchestrator.init()}catch(err){let message=err instanceof Error?err.message:String(err);this.setStatus(entry.alias,{state:classifyHandshakeFailure(message),error:message}),logClientError("machines",err);return}let stopTasks=orchestrator.tasksSignal().subscribe(()=>{slot.tasks=orchestrator.tasksSignal().get(),this.republishTasks()}),stopConnection=orchestrator.connectionStateSignal().subscribe(()=>{let connected=orchestrator.connectionStateSignal().get()==="online";if(this.slots.get(entry.alias)!==slot)return;this.setStatus(entry.alias,{state:connected?"online":"offline"}),this.republishTasks()});slot.unsubscribe=()=>{stopTasks(),stopConnection()},slot.tasks=orchestrator.tasksSignal().get(),this.setStatus(entry.alias,{state:"online",version:orchestrator.daemonVersionSignal().get()??void 0}),this.republishTasks(),logClient("machines",`${entry.alias} online (${slot.tasks.length} tasks)`)}onPeerIdentity(alias,peer){if(!peer.hostname&&!peer.homeDir)return;let identity={hostname:peer.hostname,homeDir:peer.homeDir,daemonPid:peer.daemonPid};setMachineIdentity(alias,identity);let duplicate=duplicateAliasOf(readMachines(loadStateFile()),alias,identity);this.setStatus(alias,{hostname:peer.hostname||void 0,version:peer.roveVersion||void 0,...duplicate?{duplicateOf:duplicate}:{}})}setStatus(alias,patch){let next=this.machinesAcc.get().map((row)=>row.alias===alias?{...row,...patch}:row);this.machinesAcc.set(next)}publishStatuses(){this.machinesAcc.set([...this.slots.values()].map((slot)=>({alias:slot.entry.alias,hostLabel:slot.entry.alias,state:"connecting"})))}republishTasks(){let merged=this.local.tasksSignal().get().map((task)=>stampOrigin(task,"local","local"));for(let slot of this.slots.values()){let status=this.machinesAcc.get().find((row)=>row.alias===slot.entry.alias);if(status?.duplicateOf)continue;let hostLabel=status?.hostLabel||slot.entry.alias,stale=status?.state!=="online";for(let task of slot.tasks)merged.push(stampOrigin(task,slot.entry.alias,hostLabel,stale))}this.mergedAcc.set(merged)}dispose(){this.disposed=!0,this.localUnsubscribe?.();for(let slot of this.slots.values())slot.unsubscribe?.(),slot.orchestrator?.dispose(),slot.tunnel?.stop();this.slots.clear()}}function classifyHandshakeFailure(message){return/protocol v\d/i.test(message)?"mismatch":"offline"}function stampOrigin(task,machineId,hostLabel,stale=!1){return{...task,origin:{machineId,hostLabel,...stale?{stale:!0}:{}}}}
|
|
3
3
|
export{MachineHub,classifyHandshakeFailure};
|