package service import ( edgeevents "iop/apps/edge/internal/events" edgenode "iop/apps/edge/internal/node" ) const ( DefaultSessionID = "default" DefaultTimeoutSec = 30 ) // Service is the surface-neutral application service shared by the console, // HTTP/A2A input surfaces, and the Control Plane connector. Its responsibilities // are split across this package by concern: status_provider.go (node snapshots, // capabilities, health status), run_dispatch.go (run lifecycle), node_command.go // (node command transport), and control_command.go (Control Plane command // execution). type Service struct { registry *edgenode.Registry events *edgeevents.Bus nodeStore *edgenode.NodeStore } func New(registry *edgenode.Registry, events *edgeevents.Bus) *Service { return &Service{registry: registry, events: events} } func (s *Service) SetNodeStore(store *edgenode.NodeStore) { s.nodeStore = store } func (s *Service) ListNodes() []*edgenode.NodeEntry { return s.registry.All() } // NormalizeSessionID maps an empty session id to the default session. func NormalizeSessionID(id string) string { if id == "" { return DefaultSessionID } return id } func normalizeTimeoutSec(timeoutSec int) int { if timeoutSec <= 0 { return DefaultTimeoutSec } return timeoutSec } func nodeLabel(entry *edgenode.NodeEntry) string { return entry.DisplayLabel() }