MCPcopy Create free account
hub / github.com/compozy/agh / RefreshRemoteDetailed

Method RefreshRemoteDetailed

internal/network/peer.go:353–422  ·  view source on GitHub ↗

RefreshRemoteDetailed stores or refreshes one remote peer advertisement and reports lifecycle changes caused by the same registry mutation.

(
	workspaceID string,
	channel string,
	card PeerCard,
	capabilityCatalog []sessionpkg.NetworkPeerCapability,
	capabilityCatalogKnown bool,
	seenAt time.Time,
)

Source from the content-addressed store, hash-verified

351// RefreshRemoteDetailed stores or refreshes one remote peer advertisement and
352// reports lifecycle changes caused by the same registry mutation.
353func (r *PeerRegistry) RefreshRemoteDetailed(
354 workspaceID string,
355 channel string,
356 card PeerCard,
357 capabilityCatalog []sessionpkg.NetworkPeerCapability,
358 capabilityCatalogKnown bool,
359 seenAt time.Time,
360) (RemoteRefreshResult, error) {
361 if r == nil {
362 return RemoteRefreshResult{}, fmt.Errorf("%w: peer registry is required", ErrInvalidField)
363 }
364
365 trimmedWorkspaceID := strings.TrimSpace(workspaceID)
366 if err := ValidateWorkspaceID(trimmedWorkspaceID); err != nil {
367 return RemoteRefreshResult{}, err
368 }
369 trimmedChannel := strings.TrimSpace(channel)
370 if err := ValidateChannel(trimmedChannel); err != nil {
371 return RemoteRefreshResult{}, err
372 }
373 normalizedCard, err := normalizePeerCard(card)
374 if err != nil {
375 return RemoteRefreshResult{}, err
376 }
377 if seenAt.IsZero() {
378 seenAt = r.now()
379 }
380 seenAt = seenAt.UTC()
381
382 r.mu.Lock()
383 defer r.mu.Unlock()
384
385 expired := r.expireRemotesLocked(seenAt)
386 if _, ok := r.lookupLocalLocked(trimmedWorkspaceID, trimmedChannel, normalizedCard.PeerID); ok {
387 r.deleteRemoteLocked(trimmedWorkspaceID, trimmedChannel, normalizedCard.PeerID)
388 return RemoteRefreshResult{Expired: expired}, nil
389 }
390
391 key := peerChannelKey(trimmedWorkspaceID, trimmedChannel)
392 if _, ok := r.remotesByChannel[key]; !ok {
393 r.remotesByChannel[key] = make(map[string]RemotePeerEntry)
394 }
395 existing, hasExisting := r.remotesByChannel[key][normalizedCard.PeerID]
396 storedCatalog, storedCatalogKnown := nextRemoteCapabilityCatalog(
397 existing,
398 hasExisting,
399 normalizedCard.Capabilities,
400 capabilityCatalog,
401 capabilityCatalogKnown,
402 )
403
404 entry := RemotePeerEntry{
405 PeerID: normalizedCard.PeerID,
406 PeerCard: normalizedCard,
407 WorkspaceID: trimmedWorkspaceID,
408 Channel: trimmedChannel,
409 CapabilityCatalog: storedCatalog,
410 CapabilityCatalogKnown: storedCatalogKnown,

Callers 2

handleReceivedGreetMethod · 0.80

Calls 12

expireRemotesLockedMethod · 0.95
lookupLocalLockedMethod · 0.95
deleteRemoteLockedMethod · 0.95
ValidateWorkspaceIDFunction · 0.85
ValidateChannelFunction · 0.85
normalizePeerCardFunction · 0.85
peerChannelKeyFunction · 0.85
cloneRemotePeerEntryFunction · 0.85
IsZeroMethod · 0.45
nowMethod · 0.45
AddMethod · 0.45

Tested by

no test coverage detected