Skip to main content
Glama

CTX: Context as Code (CaC) tool

by context-hub
MIT License
235
  • Apple
  • Linux
ConsoleDispatcher.php2.63 kB
<?php declare(strict_types=1); namespace Butschster\ContextGenerator\Application\Dispatcher; use Spiral\Boot\DispatcherInterface; use Spiral\Boot\EnvironmentInterface; use Spiral\Boot\FinalizerInterface; use Spiral\Console\Console; use Spiral\Core\Container; use Spiral\Core\Scope; use Spiral\Exceptions\ExceptionHandlerInterface; use Spiral\Exceptions\Verbosity; use Symfony\Component\Console\Input\ArgvInput; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\ConsoleOutput; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; final readonly class ConsoleDispatcher implements DispatcherInterface { public function __construct( private FinalizerInterface $finalizer, private Container $container, private ExceptionHandlerInterface $errorHandler, ) {} public static function canServe(EnvironmentInterface $env): bool { return true; } public function serve(?InputInterface $input = null, ?OutputInterface $output = null): int { $input ??= new ArgvInput(); // On demand to save some memory. $output ??= new SymfonyStyle($input, new ConsoleOutput()); return $this->container->runScope( bindings: new Scope( name: 'console', ), scope: function (Container $container) use ($input, $output) { $console = $container->get(Console::class); try { return $console->run( $input->getFirstArgument() ?? 'generate', $input, $output, )->getCode(); } catch (\Throwable $e) { $this->handleException($e, $output); return 255; } finally { $this->finalizer->finalize(false); } }, ); } protected function handleException(\Throwable $exception, OutputInterface $output): void { $this->errorHandler->report($exception); $output->write( $this->errorHandler->render( $exception, verbosity: $this->mapVerbosity($output), format: 'cli', ), ); } private function mapVerbosity(OutputInterface $output): Verbosity { return match (true) { $output->isDebug() => Verbosity::DEBUG, $output->isVeryVerbose() => Verbosity::VERBOSE, default => Verbosity::BASIC, }; } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/context-hub/generator'

If you have feedback or need assistance with the MCP directory API, please join our Discord server