diff --git a/NucleicRemote/NucleicRemote/Models/RemoteStore.swift b/NucleicRemote/NucleicRemote/Models/RemoteStore.swift index d908d71..0352e85 100644 --- a/NucleicRemote/NucleicRemote/Models/RemoteStore.swift +++ b/NucleicRemote/NucleicRemote/Models/RemoteStore.swift @@ -1210,6 +1210,7 @@ extension WireSessionSummary { auto: auto ?? self.auto, autoShip: autoShip ?? self.autoShip, shipBranch: shipBranch ?? self.shipBranch, contextInputTokens: contextInputTokens, - updatedAt: updatedAt ?? Date()) + updatedAt: updatedAt ?? Date(), + movedTo: movedTo, arrivedFrom: arrivedFrom) } } diff --git a/NucleicRemote/NucleicRemote/Views/SessionsView.swift b/NucleicRemote/NucleicRemote/Views/SessionsView.swift index 277639e..e9c9d37 100644 --- a/NucleicRemote/NucleicRemote/Views/SessionsView.swift +++ b/NucleicRemote/NucleicRemote/Views/SessionsView.swift @@ -125,18 +125,32 @@ struct SessionRow: View { } Text(summary.title).font(.body.weight(.medium)).lineLimit(1) // The same trailing markers the Mac sidebar row carries: auto-approval - // bolt, Orchestra note, autoship box. - if summary.auto { - Image(systemName: "bolt.fill").font(.caption2).foregroundStyle(Palette.accent) - } - if orchestra { - Image(systemName: "music.note.list").font(.caption2).foregroundStyle(Palette.orchestra) - } - if summary.autoShip { - Image(systemName: "shippingbox.fill").font(.caption2).foregroundStyle(Palette.accent) + // bolt, Orchestra note, autoship box. Suppressed on a moved-away tombstone. + if summary.movedTo == nil { + if summary.auto { + Image(systemName: "bolt.fill").font(.caption2).foregroundStyle(Palette.accent) + } + if orchestra { + Image(systemName: "music.note.list").font(.caption2).foregroundStyle(Palette.orchestra) + } + if summary.autoShip { + Image(systemName: "shippingbox.fill").font(.caption2).foregroundStyle(Palette.accent) + } } } - if showProjectName { + if let moved = summary.movedTo { + // Moved to another Mac (mesh P5): the name is baked by the host, so the phone + // renders it directly without needing to know that Mac itself. + Label("Moved to \(moved.deviceName)", systemImage: "arrow.up.forward") + .font(.caption).foregroundStyle(.secondary).lineLimit(1) + } else if let arrived = summary.arrivedFrom { + // Arrived from another Mac (mesh P5) — subtle provenance, with the project name + // folded in when it would otherwise show. + Label(showProjectName ? "\(summary.projectName) · from \(arrived.deviceName)" + : "from \(arrived.deviceName)", + systemImage: "arrow.down.forward") + .font(.caption).foregroundStyle(.secondary).lineLimit(1) + } else if showProjectName { Text(summary.projectName).font(.caption).foregroundStyle(.secondary) } }