Task 38 - Mehanizmy discovery
Phase: 3
Status: done
Owner: -
Slug: discovery
Goal
Static config, registry lookup i mDNS/Bonjour dlya deployment-specific discovery. Discovery sam po sebe ne vydayot trust.
Acceptance criteria
Sub-tasks
src/agent/Mesh/Discovery/IDiscoverySource.cs—IDiscoverySourceinterface:Source,DiscoverAsync,Namesrc/agent/Mesh/Discovery/DiscoveryResult.cs— result wrapper:DiscoveredAgent,Source,DiscoveredAt,Errorsrc/agent/Mesh/Discovery/StaticDiscoverySource.cs— static config fromMeshConfig.Peers+ manifest fetchsrc/agent/Mesh/Discovery/RegistryDiscoverySource.cs— delegates toCapabilityRegistry(re-exports agents)src/agent/Mesh/Discovery/IMdnsClient.cs+MdnsDiscoverySource.cs— mDNS/Bonjour via DNS-SD multicast; stub on Windowssrc/agent/Mesh/Discovery/DiscoveryService.cs— orchestrates all sources, deduplicates by agentId, cache with TTLConfig/AppConfig.cs— addDiscoveryConfigtoMeshConfigMeshServiceExtensions.cs— wireIDiscoveryService,IDiscoverySource[]via DIMeshController.cs— add discovery endpoints:/api/mesh/discovery/sources,/api/mesh/discovery/agents,/api/mesh/discovery/refreshtests/Phase3Tests/DiscoveryTests.cs— unit tests for each source + orchestrationdotnet build— 0 errorsdotnet test Phase3— all Phase 3 tests pass (157/157)
Implementation notes
2026-08-13
src/agent/Mesh/Discovery/ — novaia papka dlya discovery layer:
DiscoveryResult.cs—DiscoveredAgentrecord (AgentId, DisplayName, Endpoint, ManifestUrl, Source, DiscoveredAt, Capabilities, ManifestLoaded, Error) iDiscoveryResultwrapper sAgents,Source,SourceName,Success,Error.DiscoverySourceKindenum (Static/Registry/Mdns).IDiscoverySource.cs—IDiscoverySourceinterface:Source,Name,DiscoverAsync,IsEnabled.StaticDiscoverySource.cs— chitaetMeshConfig.Peers, fetchit manifest s kazhdogo peer, ispolzuetHttpClient, propuskaet self-agent.RegistryDiscoverySource.cs— delegiruet kCapabilityRegistry.ListAgents(), propuskaet self-agent.IMdnsClient.cs—IMdnsClientinterface sBrowseAsynciResolveAsync.MdnsServiceInstanceiMdnsResolvedInstancerecords.NoopMdnsClient.cs— stub realizatsiya dlya Windows (net resursov, vozvrashchaet pustoi potok).MdnsDiscoverySource.cs— ispolzuetIMdnsClientdlya mDNS browse, izвлекает agentId iz TXT record.DiscoveryService.cs—IDiscoveryService+DiscoveryService: orchestruet vse source, dedupliciruet po AgentId (predpochitaet s manifestLoaded), keshiruet s TTL.
Config/AppConfig.cs — MeshConfig rasshiren s Discovery DiscoveryConfig { get; set; } = new().
DiscoveryConfig — AutoDiscoverOnStart, EnableMdns, MdnsServiceType, CacheTtlSeconds, AutoRefreshIntervalSeconds.
Mesh/MeshServiceExtensions.cs — dobavleny registratsii:
StaticDiscoverySourcesIHttpClientFactoryNoopMdnsClientkakIMdnsClient(stub)MdnsDiscoverySourceRegistryDiscoverySourceDiscoveryServicekakIDiscoveryService
MeshController.cs — dobavleny discovery endpoints:
GET /api/mesh/discovery/sources— status vsex discovery sourceGET /api/mesh/discovery/agents— vse discoverovannye agenty (s filtrom po source)POST /api/mesh/discovery/refresh— force-refresh vsex source
tests/Phase3Tests/DiscoveryTests.cs — 14 unit testov: StaticDiscoverySource, RegistryDiscoverySource, MdnsDiscoverySource, DiscoveryService (caching, deduplication, source filtering).
Validation:
dotnet build src/agent/Hercules.csproj -c Release— 0 errors (pre-existing warnings only)dotnet test Phase3Tests— 157/157 passeddotnet test Phase4Tests— 29/29 passed
Scope / Likely files
src/agent/Mesh/Discovery/
Dependencies
- blokiruet / opiraetsya na: task_034 - capability-registry
Risks / Rollback
Spoofing discovery; trust policy otdelno.
Links
- Backlog: ../backlog.md
- Roadmap (EN): ../../ROADMAP-EN.md
- Roadmap (RU): ../../ROADMAP-RU.md