feat(app-tauri): packager les assets web en ressource et les résoudre depuis le resource dir (#68)

L'AppImage ne pouvait pas servir d'assets web : `resolve_web_root` ne
connaissait que `IDEA_WEB_ROOT`, le dossier de l'exécutable et le cwd —
aucun ne pointe vers un bundle packagé.

- `bundle.resources` embarque les assets sous `web/`, `beforeBuildCommand`
  déclenche le build du frontend.
- Le resource dir Tauri descend de `lib.rs` jusqu'à `EmbeddedServerController`
  via `AppState::build_with_resource_dir`, en gardant les constructeurs
  historiques comme façade.
- `resolve_web_root` insère le candidat packagé juste après `IDEA_WEB_ROOT`,
  qui garde donc la priorité pour le développement.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-17 08:54:15 +02:00
parent a13a6c1801
commit 166adc3c4b
4 changed files with 78 additions and 10 deletions

View File

@ -51,6 +51,13 @@ impl AppState {
/// into the backend core.
#[must_use]
pub fn build(app_data_dir: PathBuf) -> Self {
Self::build_with_resource_dir(app_data_dir, None)
}
/// Builds the shared backend core with the Tauri bundle resource directory
/// available to desktop-only adapters.
#[must_use]
pub fn build_with_resource_dir(app_data_dir: PathBuf, resource_dir: Option<PathBuf>) -> Self {
let core = Arc::new(BackendCore::build(app_data_dir.clone()));
core.ticket_tool_binder
.bind(Arc::new(AppTicketToolProvider {
@ -69,7 +76,10 @@ impl AppState {
core,
pty_bridge: Arc::new(PtyBridge::new()),
chat_bridge: Arc::new(ChatBridge::new()),
embedded_server: Arc::new(EmbeddedServerController::new(app_data_dir)),
embedded_server: Arc::new(EmbeddedServerController::with_resource_dir(
app_data_dir,
resource_dir,
)),
focused_project: Mutex::new(None),
}
}