Skip to content

feat: framework definition store#103

Open
geodro wants to merge 2 commits intomainfrom
feat/framework-store
Open

feat: framework definition store#103
geodro wants to merge 2 commits intomainfrom
feat/framework-store

Conversation

@geodro
Copy link
Copy Markdown
Owner

@geodro geodro commented Apr 7, 2026

Summary

  • Community framework store backed by geodro/lerd-frameworks with versioned definitions for Laravel, Symfony, WordPress, Drupal, CakePHP, Statamic
  • All hardcoded Laravel worker logic replaced with a generic system driven by framework YAML definitions
  • New commands: framework search, install, update with --check and --diff flags
  • New MCP tools: framework_search, framework_install
  • Workers support conflicts_with (horizon replaces queue), proxy config (auto port assignment + nginx regen), and check rules (conditional visibility)
  • Dedicated commands (queue, schedule, reverb, horizon) are now aliases to the generic worker handler
  • Framework definitions resolve from 4 layers: user overlay > project .lerd.yaml > store-installed > built-in
  • Project-specific custom workers via .lerd.yaml custom_workers field
  • Framework detection limited to link/init/env/setup only, all other commands read from site registry
  • Existing sites backfilled with detected framework on lerd start/update

geodro added 2 commits April 7, 2026 18:55
Add a community framework store backed by geodro/lerd-frameworks where
users can search, install, and update versioned framework definitions.
Refactor all hardcoded Laravel worker logic into a generic system driven
entirely by framework YAML definitions.

Framework store:
- new internal/store package with client, caching, version detection
- lerd framework search/install/update commands
- framework_search and framework_install MCP tools
- auto-fetch from store when linking a project with no local definition
- versioned storage: ~/.local/share/lerd/frameworks/<name>@<version>.yaml
- separate from user-defined: ~/.config/lerd/frameworks/<name>.yaml
- version auto-detection from composer.lock, pinned in .lerd.yaml

Framework-agnostic workers:
- FrameworkWorker gains ConflictsWith, Proxy, and Check fields
- horizon conflicts_with queue, reverb has proxy config with auto port
- all dedicated commands (queue, schedule, reverb, horizon) are now
  aliases that read from fw.Workers and delegate to WorkerStartForSite
- WorkerStartForSite handles proxy port assignment and nginx regen
  generically for any worker with a proxy config
- port collision prevention scans all proxy port env keys across all sites
- removed all hardcoded worker switch statements from pause, link, setup,
  startstop, init, check

Framework definition layering:
- built-in (laravel) < store-installed < user overlay < project .lerd.yaml
- user overlay merges workers on top of store/built-in base
- .lerd.yaml custom_workers for project-specific workers committed to git
- framework_def only embedded in .lerd.yaml for user-defined frameworks
- framework_version pinned in .lerd.yaml, auto-updated from composer.lock

Other changes:
- removed IsLaravel/siteIsLaravel, replaced with capability checks
- framework detection limited to link/init/env/setup/park only
- backfill framework for existing sites on lerd start/update
- nginx templates use generic Proxy/ProxyPath/ProxyPort instead of Reverb
- env key generation driven by fw.Env.KeyGeneration
- service detection uses fw.Env.Services for all frameworks including Laravel
@geodro geodro added the help wanted Extra attention is needed label Apr 8, 2026
@geodro geodro self-assigned this Apr 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

help wanted Extra attention is needed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant