diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 03654156..a134fe6f 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -419,6 +419,7 @@ direction LR namespace AiClientNamespace.Providers { class ProviderRegistry { +registerProvider(string $className) void + +getRegisteredProviderIds() string[] +hasProvider(string $idOrClassName) bool +getProviderClassName(string $id) string +isProviderConfigured(string $idOrClassName) bool diff --git a/src/Providers/ProviderRegistry.php b/src/Providers/ProviderRegistry.php index 2ee3ef13..0e0db98c 100644 --- a/src/Providers/ProviderRegistry.php +++ b/src/Providers/ProviderRegistry.php @@ -113,6 +113,18 @@ public function registerProvider(string $className): void $this->registeredClassNames[$className] = true; } + /** + * Gets a list of all registered provider IDs. + * + * @since 0.1.0 + * + * @return list List of registered provider IDs. + */ + public function getRegisteredProviderIds(): array + { + return array_keys($this->providerClassNames); + } + /** * Checks if a provider is registered. * diff --git a/tests/unit/Providers/ProviderRegistryTest.php b/tests/unit/Providers/ProviderRegistryTest.php index 91126997..e0cae3bc 100644 --- a/tests/unit/Providers/ProviderRegistryTest.php +++ b/tests/unit/Providers/ProviderRegistryTest.php @@ -66,6 +66,21 @@ public function testRegisterProviderWithNonExistentClass(): void $this->registry->registerProvider('NonExistentProvider'); } + /** + * Tests that getRegisteredProviderIds returns the correct provider IDs. + * + * @return void + */ + public function testGetRegisteredProviderIds(): void + { + $this->registry->registerProvider(MockProvider::class); + + $this->assertEquals(['mock'], $this->registry->getRegisteredProviderIds()); + + // To test with multiple providers, we would need another mock provider class. + // For now, this covers the basic functionality. + } + /** * Tests hasProvider with unregistered provider. *