@cryptiklemur/lattice 1.30.1 → 1.31.0

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.
@@ -39,11 +39,18 @@ function NodeRow(props: NodeRowProps) {
39
39
  </span>
40
40
  )}
41
41
  </div>
42
- <div className="text-[11px] text-base-content/40 truncate">
43
- {props.node.address}:{props.node.port}
44
- {!props.node.online && (
45
- <span className="ml-2 text-base-content/30 italic">offline</span>
46
- )}
42
+ <div className="text-[11px] text-base-content/40">
43
+ {(props.node.addresses && props.node.addresses.length > 0
44
+ ? props.node.addresses
45
+ : [props.node.address + (props.node.port ? ":" + props.node.port : "")]
46
+ ).map(function (addr, i) {
47
+ return (
48
+ <span key={addr} className="mr-2">
49
+ {i > 0 && <span className="text-base-content/20 mr-2">/</span>}
50
+ {addr}
51
+ </span>
52
+ );
53
+ })}
47
54
  </div>
48
55
  </div>
49
56
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cryptiklemur/lattice",
3
- "version": "1.30.1",
3
+ "version": "1.31.0",
4
4
  "description": "Multi-machine agentic dashboard for Claude Code. Monitor sessions, manage MCP servers and skills, orchestrate across mesh-networked nodes.",
5
5
  "license": "MIT",
6
6
  "author": "Aaron Scherer <me@aaronscherer.me>",
@@ -5,6 +5,7 @@ import { loadConfig } from "../config";
5
5
  import { loadOrCreateIdentity } from "../identity";
6
6
  import { generateInviteCode, parseInviteCode, validatePairingToken, consumePairingToken } from "../mesh/pairing";
7
7
  import { addPeer, removePeer, loadPeers } from "../mesh/peers";
8
+ import { getConnectedPeerIds } from "../mesh/connector";
8
9
  import type { PeerInfo } from "@lattice/shared";
9
10
  import { networkInterfaces } from "node:os";
10
11
 
@@ -33,11 +34,14 @@ export function buildNodesMessage(): NodeInfo[] {
33
34
  var peers = loadPeers();
34
35
  var config = loadConfig();
35
36
  var identity = loadOrCreateIdentity();
37
+ var connectedIds = new Set(getConnectedPeerIds());
38
+ var localAddrs = getAllAddresses().map(function (a) { return a.address + ":" + config.port; });
36
39
 
37
40
  var local: NodeInfo = {
38
41
  id: identity.id,
39
42
  name: config.name,
40
- address: "localhost",
43
+ address: localAddrs[0] ?? "localhost:" + config.port,
44
+ addresses: localAddrs.length > 0 ? localAddrs : ["localhost:" + config.port],
41
45
  port: config.port,
42
46
  online: true,
43
47
  isLocal: true,
@@ -51,8 +55,9 @@ export function buildNodesMessage(): NodeInfo[] {
51
55
  id: peer.id,
52
56
  name: peer.name,
53
57
  address: peer.addresses[0] ?? "",
58
+ addresses: peer.addresses,
54
59
  port: 0,
55
- online: false,
60
+ online: connectedIds.has(peer.id),
56
61
  isLocal: false,
57
62
  projects: [],
58
63
  };
@@ -137,6 +142,7 @@ registerHandler("mesh", function (clientId: string, message: ClientMessage) {
137
142
  id: peer.id,
138
143
  name: peer.name,
139
144
  address: parsed!.address,
145
+ addresses: [parsed!.address + ":" + parsed!.port],
140
146
  port: parsed!.port,
141
147
  online: true,
142
148
  isLocal: false,
@@ -4,6 +4,7 @@ export interface NodeInfo {
4
4
  id: string;
5
5
  name: string;
6
6
  address: string;
7
+ addresses: string[];
7
8
  port: number;
8
9
  online: boolean;
9
10
  isLocal: boolean;