4 KiB
4 KiB
TaskerBridges Specification
This document defines the technical specifications for the getphred/tasker-bridges package, which adapts Phred\ConsoleContracts for various CLI runtimes.
1. Bridge Strategy
Bridges act as adapters between the standardized Phred CLI contracts and the native APIs of target console toolkits.
1.1 Universal Bridge Requirements
All bridges must:
- Adapt command metadata (name, description, arguments, options) to the native format.
- Wrap execution to translate native input/output to Phred
InputInterfaceandOutputInterface. - Implement fixed markup translation.
- Map native verbosity and interaction states to Phred's standardized levels/flags.
- Handle common exceptions and map them to
sysexits.hexit codes.
2. SymfonyBridge
Target: symfony/console (v6.x and v7.x)
Namespace: Phred\TaskerBridges\Symfony
2.1 SymfonyCommandAdapter
- Extends
Symfony\Component\Console\Command\Command. - Wraps a
Phred\ConsoleContracts\CommandInterface. - Maps Phred metadata to Symfony's
setName,setDescription,addArgument, andaddOption.
2.2 Symfony IO Adapters
SymfonyInputAdapter: WrapsSymfony\Input\InputInterfaceand implementsPhred\ConsoleContracts\InputInterface.SymfonyOutputAdapter: WrapsSymfony\Output\OutputInterfaceand implementsPhred\ConsoleContracts\OutputInterface.
2.3 Symfony Helper Adapters
SymfonyInteractionAdapter: WrapsSymfony\Helper\QuestionHelperto implementPhred\ConsoleContracts\InteractionInterface.SymfonyProgressBarAdapter: WrapsSymfony\Helper\ProgressBar.SymfonyTableAdapter: WrapsSymfony\Helper\Table.
3. LaravelBridge
Target: illuminate/console (v10.x and v11.x)
Namespace: Phred\TaskerBridges\Laravel
3.1 LaravelCommandAdapter
- Extends
Illuminate\Console\Command. - Wraps a
Phred\ConsoleContracts\CommandInterface. - Internally uses Symfony adapters for IO and helpers where applicable (as Artisan is built on Symfony).
3.2 LaravelServiceProvider
- Handles auto-discovery of Phred commands from
composer.json(extra.phred-tasker). - Registers commands within the Laravel container and Artisan application.
4. PhredBridge (Native)
Target: Tasker Core Runner
Namespace: Phred\TaskerBridges\Phred
4.1 Native Adapters
- Provides ANSI-based implementations for
OutputInterface. - Provides lightweight implementations for
InteractionInterface,ProgressBarInterface, andTableInterfacewith zero external dependencies.
4.2 MarkdownConverterInterface (Native)
- Implementation: Provides a regex-based parser to translate standard Markdown (headings, emphasis, links) into the fixed Phred markup tag set (
<b>,<i>,<u>, etc.).
5. Markup Translation Mapping
| Phred Tag | Phred Color/Style | Symfony/Laravel Implementation | Native Implementation (ANSI) |
|---|---|---|---|
<success> |
Green | Custom SymfonyStyle or Formatter style |
\e[32m |
<info> |
Blue | Custom Formatter style | \e[34m |
<error> |
White on Red | <error> tag |
\e[97;41m |
<warning> |
Black on Yellow | Custom Formatter style | \e[30;43m |
<comment> |
Yellow | <comment> tag |
\e[33m |
<b> |
Bold | \e[1m (if not native) |
\e[1m |
<i> |
Italic | \e[3m (if not native) |
\e[3m |
<u> |
Underline | \e[4m (if not native) |
\e[4m |
6. Exit Code Translation
Bridges should map the following standard exceptions:
InvalidArgumentException->ExitCode::USAGE(64)RuntimeException->ExitCode::SOFTWARE(70)LogicException->ExitCode::SOFTWARE(70)Phred\ConsoleContracts\ConsoleExceptionInterfaceimplementations -> mapped per category.
7. Global Options & Flags
Bridges are responsible for mapping toolkit-specific global options to the Phred state:
- Symfony
--ansi/--no-ansi->OutputInterface::setDecorated() - Symfony
-v/-vv/-vvv->OutputInterface::setVerbosity() - Symfony
--no-interaction->InteractionInterfacebehavior (non-blocking). - Laravel specific variants of the above.