Add interface abstractions for SchemaGenerator and Discoverer with DI improvements (#215)
* schema generator injection * add interface for schema generator * improve discoverer dependency * remove some comments * make some classes final * simplify condition * code review * Extend changelog for covering interfaces * Adopt SchemaGeneratorInterface after rebase and #153 --------- Co-authored-by: Christopher Hertel <mail@christopher-hertel.de>
This commit is contained in:
parent
1de4ea933f
commit
7cb29125bd
2 changed files with 167 additions and 27 deletions
|
|
@ -18,6 +18,7 @@ use Mcp\Capability\Completion\ProviderInterface;
|
|||
use Mcp\Capability\Discovery\DocBlockParser;
|
||||
use Mcp\Capability\Discovery\HandlerResolver;
|
||||
use Mcp\Capability\Discovery\SchemaGenerator;
|
||||
use Mcp\Capability\Discovery\SchemaGeneratorInterface;
|
||||
use Mcp\Capability\Registry\ElementReference;
|
||||
use Mcp\Capability\RegistryInterface;
|
||||
use Mcp\Exception\ConfigurationException;
|
||||
|
|
@ -84,13 +85,14 @@ final class ArrayLoader implements LoaderInterface
|
|||
private readonly array $resourceTemplates = [],
|
||||
private readonly array $prompts = [],
|
||||
private LoggerInterface $logger = new NullLogger(),
|
||||
private ?SchemaGeneratorInterface $schemaGenerator = null,
|
||||
) {
|
||||
}
|
||||
|
||||
public function load(RegistryInterface $registry): void
|
||||
{
|
||||
$docBlockParser = new DocBlockParser(logger: $this->logger);
|
||||
$schemaGenerator = new SchemaGenerator($docBlockParser);
|
||||
$schemaGenerator = $this->schemaGenerator ?? new SchemaGenerator($docBlockParser);
|
||||
|
||||
// Register Tools
|
||||
foreach ($this->tools as $data) {
|
||||
|
|
|
|||
|
|
@ -11,13 +11,12 @@
|
|||
|
||||
namespace Mcp\Capability\Registry\Loader;
|
||||
|
||||
use Mcp\Capability\Discovery\CachedDiscoverer;
|
||||
use Mcp\Capability\Discovery\Discoverer;
|
||||
use Mcp\Capability\Discovery\DiscovererInterface;
|
||||
use Mcp\Capability\RegistryInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Psr\SimpleCache\CacheInterface;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*
|
||||
* @author Antoine Bluchet <soyuka@gmail.com>
|
||||
*/
|
||||
final class DiscoveryLoader implements LoaderInterface
|
||||
|
|
@ -30,21 +29,13 @@ final class DiscoveryLoader implements LoaderInterface
|
|||
private string $basePath,
|
||||
private array $scanDirs,
|
||||
private array $excludeDirs,
|
||||
private LoggerInterface $logger,
|
||||
private ?CacheInterface $cache = null,
|
||||
private DiscovererInterface $discoverer,
|
||||
) {
|
||||
}
|
||||
|
||||
public function load(RegistryInterface $registry): void
|
||||
{
|
||||
// This now encapsulates the discovery process
|
||||
$discoverer = new Discoverer($this->logger);
|
||||
|
||||
$cachedDiscoverer = $this->cache
|
||||
? new CachedDiscoverer($discoverer, $this->cache, $this->logger)
|
||||
: $discoverer;
|
||||
|
||||
$discoveryState = $cachedDiscoverer->discover($this->basePath, $this->scanDirs, $this->excludeDirs);
|
||||
$discoveryState = $this->discoverer->discover($this->basePath, $this->scanDirs, $this->excludeDirs);
|
||||
|
||||
$registry->setDiscoveryState($discoveryState);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue