Custom Port option with ssh_custom_port validation in Admin.
List env.php-discovered services first; SSH shortcuts and Custom Port last.
Rename the custom option label to "Custom Port" and align tunnel labels/i18n.
Update tunnel UI (phtml/JS), EnvServicePortResolver, controller, tests, and docs.
the correct store behind a proxy.
TunnelStoreProvisioner now receives ResourceConnection and copies default web
CMS pages/blocks and theme-related setup for new tunnel stores.
Tighten system.xml (remove invalid default), crontab/config defaults, and
update tests with a ResourceConnection stub for PHPUnit.
- Add EnvServicePortResolver (DeploymentConfig) for MySQL, Redis frontends,
session Redis, AMQP, http_cache_hosts, optional search
- Extend tunnel registry with tunnel_type, service_key, service metadata;
provisionServiceTunnel without store/NGINX map; teardown guards
- Admin: Type (Website|Service), service dropdown, list Type column; JS toggle
- TunnelManager/start-server: forward to resolved host:port
- Tests: EnvServicePortResolver + service teardown; test stubs for Magento/PSR
- docs: admin-ui Type/Service and security notes
- Document adding ubuntu-latest via act_runner config (docs/gitea-act-runner-labels.md)
- README CI notes; consolidate PHP QA into one workflow step where relevant
- Primary workflow under .gitea/workflows (Gitea scans this before .github)
- Explicit https://github.com/... action refs for predictable resolution on Gitea
- Mirror under .github/workflows for GitHub Actions (short uses: names)
Made-with: Cursor
- Auto-run parse on load when map path is configured
- Fix Switch to Raw Editor via delegated click (button is injected after parse)
- Prefill raw textarea from parse `raw` / read; handle empty file content
- Add warning about breaking nginx when editing raw map
- Docs: note auto-parse in admin-ui.md
- Add Tunnels list / Add a tunnel tabs with hash navigation
- Show busy overlay during start/stop/remove/create AJAX
- Reload with #magesail-list after successful actions
- Only reload stop/remove on success; fix error handling
- Remove redundant Stores configuration link; drop getConfigUrl()
- Top-level admin menu (sortOrder 78) with PNG icon CSS aligned to core menu
- Dedicated MageSail system config tab before General; ACL/docs paths updated
TunnelStoreProvisioner expands bare hosts to http:// for unsecure and
https:// for optional secure; full URLs still work. Tunnel block strips
scheme for prefill display. Update tunnel template copy, Index error
text, and README/docs.