3.5 KiB
AGENTS.md
This file is the working guide for people and agents changing MoonWell Launcher. Keep it current when architecture, commands, or repository rules change.
Project Shape
MoonWell Launcher is a Flutter desktop app for a private World of Warcraft:
Wrath of the Lich King server. It logs players in, downloads and synchronizes
client files, displays launcher news, and starts Wow.exe.
Important areas:
lib/main.dartinitializes Flutter, the desktop window, dependency injection, andMoonWellApp.lib/appcontains UI screens, BLoC state, widgets, and theme code.lib/app/widgetscontains shared app-level UI such as the custom desktop title bar.lib/features/launcher/domaincontains launcher entities such as sessions, manifests, news items, sync status, and exceptions.lib/features/launcher/applicationcontains use cases for session restore and client synchronization.lib/features/launcher/datacontains API, installation, and log services.lib/features/preferencesstores selected install directory and launcher session data.lib/service_container.dartandlib/service_container.config.dartprovideget_it/injectabledependency wiring.docs/launcher_web_api_spec.mddocuments the current launcher Web API and sync behavior.
Flutter SDK Policy
MoonWell Launcher supports the latest stable Flutter SDK only. Do not introduce or rely on FVM-pinned workflows.
If flutter is not available after installing or updating Flutter, restart the
shell and verify PATH with flutter --version.
Common Commands
flutter pub get
dart run build_runner build --delete-conflicting-outputs
dart format --set-exit-if-changed .
flutter analyze
flutter test
flutter run -d windows --dart-define=MOONWELL_API_BASE_URL=https://host
flutter build windows --dart-define=MOONWELL_API_BASE_URL=https://host
See docs/linting.md for the required format, analyze, test, and Lefthook
pre-commit workflow.
In the current shell on 2026-06-18, flutter was not recognized by
Get-Command flutter or where.exe flutter.
Configuration
The launcher API base URL is compile-time configuration:
--dart-define=MOONWELL_API_BASE_URL=https://host
Do not commit private credentials, production secrets, temporary bearer tokens, or local-only API URLs.
Architecture Notes
- All backend calls should go through
LauncherApiClient. - File sync behavior should stay in
ClientSyncUseCaseandGameInstallationService. - The server manifest is the source of truth for client files.
- Downloads must write to
*.moonwell.part, verify size and SHA-256, then replace the destination file only after successful verification. - Local scans should ignore volatile client directories and launcher metadata:
Cache,Errors,Logs,Screenshots,WTF, and.moonwell_launcher. - Path normalization and traversal checks are safety-critical. Do not bypass
GameInstallationService.resolveClientPathfor manifest-relative paths. lib/service_container.config.dartis generated by injectable. Do not hand-edit it unless you are intentionally repairing generated output; prefer regenerating it with build_runner.
Repository Rules
- Preserve unrelated work in a dirty tree. This repository currently may have user edits in dependency files.
- Keep changes scoped to the requested behavior.
- Always keep
README.mdand files underdocs/up-to-date with any architecture, setup, API, sync, build, or operational change. - Keep documentation links current when files move.