Overview
The resolver is the core engine that transforms user selections into a complete, valid service graph. It handles:- Transitive dependency resolution
- Conflict detection
- Platform compatibility checks
- Memory estimation
- Topological sorting for correct startup order
resolve
Resolves user selections into a complete, valid service list.Parameters
Configuration object specifying services, skill packs, and options
Array of service IDs to include
Array of skill pack IDs to include
AI provider configurations
Reverse proxy to add (“caddy”, “traefik”, or “none”)
Target deployment platform
Whether GPU passthrough is available
Include monitoring stack (Grafana, Prometheus, Uptime Kuma)
Custom memory warning thresholds
Returns
All services in topological order with metadata
Dependencies automatically added by the resolver
Services removed due to conflicts (currently unused)
Non-blocking warnings (platform compatibility, memory, etc.)
Blocking errors (conflicts, missing services, circular deps)
True if no errors were found
Total estimated memory requirement in MB
AI providers passed through from input
Get-Shit-Done runtimes (currently unused)
Algorithm
The resolver uses a deterministic multi-pass algorithm:- Expand skill packs - Add required services from skill pack definitions
- Add proxy - Include reverse proxy if specified
- Add monitoring - Include monitoring stack if requested
- Validate service IDs - Check all services exist in registry
- Resolve transitive dependencies - Iterate until stable (max 50 iterations)
- Check recommendations - Warn about recommended but missing services
- Detect conflicts - Find services with conflicting requirements
- Platform compatibility - Warn if services don’t support target platform
- GPU requirements - Warn if GPU-required services run without GPU
- Memory estimation - Sum minMemoryMB for all services + 512MB base
- Topological sort - Order by dependency graph (Kahn’s algorithm with alphabetical tie-breaking)
Topological Sorting
Services are sorted by their dependency graph to ensure correct Docker Compose startup order. Uses Kahn’s algorithm with alphabetical tie-breaking for deterministic output.Types
ResolverInput
MemoryThresholds
ResolvedService
AddedDependency
Warning
ResolverError
Examples
Basic Resolution
With Dependencies
With Proxy and Monitoring
Handling Errors
Custom Memory Thresholds
Error Types
unknown_service- Service ID not found in registryunknown_skill_pack- Skill pack ID not foundconflict- Two services cannot coexistcycle- Circular dependency detected
Warning Types
platform- Service may not support target platformgpu- Service requires GPU but GPU not enabledmemory- Total memory exceeds thresholdrecommendation- Service recommends additional serviceresolution- Dependency resolution hit iteration limit
See Also
- Schema API - Input/output type definitions
- Composer API - Generate Docker Compose from resolved services
- Validator API - Validate resolved configurations
- Service Registry - Available services