feat(compile): Wails support in /compile skill

- New helper: deploy_wails_exe_to_windows_bash_infra
  - taskkill + cp build/bin/<app>.exe to Desktop/apps/<app>/
  - cmd.exe /c start RELAUNCHES the app post-deploy (key diff vs cpp)
  - preserves local_files/, copies appicon.ico if present
- New pipeline: compile_wails_app_bash_pipelines
  - resolve_cpp_app_dir (reused) + wails build -platform windows/amd64
  - auto -tags goolm if app declares matrix_crypto_init
  - delegates deploy + relaunch to deploy_wails_exe_to_windows
- /compile skill dispatches by framework:
  - wails.json present -> compile_wails_app (relaunches)
  - CMakeLists.txt present -> compile_cpp_app (no relaunch)

Refs: matrix_client_pc + matrix_admin_panel (issues 0147, 0163)
This commit is contained in:
egutierrez
2026-05-25 03:11:09 +02:00
parent e9c64a4687
commit de9bfec498
6 changed files with 411 additions and 21 deletions
@@ -0,0 +1,65 @@
---
name: compile_wails_app
kind: pipeline
lang: bash
domain: pipelines
version: "0.1.0"
purity: impure
signature: "compile_wails_app(app_name_or_empty: string) -> void"
description: "Pipeline que resuelve la app Wails desde el nombre o CWD, la compila para Windows con wails build -platform windows/amd64 (detectando -tags goolm automaticamente si la app usa E2EE Matrix), y despliega el .exe al escritorio de Windows + relanza el proceso. Equivalente a compile_cpp_app pero para apps Wails (Go + WebView2)."
tags: [wails, windows, compile, pipelines, launch, matrix-mas]
uses_functions:
- resolve_cpp_app_dir_bash_infra
- deploy_wails_exe_to_windows_bash_infra
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: []
tested: false
tests: []
test_file_path: ""
file_path: "bash/functions/pipelines/compile_wails_app.sh"
params:
- name: app_name_or_empty
desc: "Nombre de la app Wails a compilar (opcional). Sin arg se deduce desde el directorio actual si estamos dentro de projects/*/apps/<X>/ o apps/<X>/. Lista apps disponibles si no puede deducirlo."
output: "Compila el .exe con wails build, lo despliega al escritorio de Windows y relanza el proceso. Imprime progreso por steps a stderr y resumen final con ls -lh del .exe resultante."
---
## Ejemplo
```bash
# Desde el directorio de la app (deduce nombre automaticamente)
cd projects/element_agents/apps/matrix_client_pc
./fn run compile_wails_app
# Desde la raiz del registry, con nombre explicito
cd /home/lucas/fn_registry
./fn run compile_wails_app matrix_admin_panel
# Directo sin fn run
bash bash/functions/pipelines/compile_wails_app.sh matrix_client_pc
```
## Cuando usarla
Usar cuando quieras rebuild + redeploy + relanzar una app Wails con un solo comando durante iteracion activa de desarrollo. Equivale al slash command `/compile` aplicado a targets Wails. El pipeline detecta automaticamente si la app necesita `-tags goolm` (apps Matrix con E2EE).
## Gotchas
- Requiere `wails` CLI instalado en PATH y mingw-w64 configurado para cross-compile (`GOARCH=amd64 GOOS=windows` via toolchain Wails).
- Si la app usa `-tags goolm` (E2EE Matrix), esta pipeline lo detecta automaticamente: busca `matrix_crypto_init` en `app.md` o `"build:tags": "goolm"` en `wails.json`. Si la deteccion falla, pasar la variable `TAGS` o editar el `wails.json`.
- El relanzar despues del deploy es la diferencia clave con `compile_cpp_app`: las apps Wails son single-binary (no DLLs adicionales) y arrancan en <1s, lo que hace iteracion muy rapida.
- Si el build falla con `no required module provides package`, ejecutar `go mod tidy` en el directorio de la app antes de volver a compilar.
- `matrix_client_pc` tiene helpers en `internal/infra/` que son copias vendored de `functions/infra/` del registry padre. Si actualizas un helper en el registry padre, debes copiarlo manualmente a la app antes de compilar — el build de Wails no ve el modulo padre.
- El deploy mata el proceso anterior con `taskkill.exe /F` (pre-autorizado) antes de copiar el .exe, para evitar "Permission denied" de Windows al sobreescribir un binario en uso.
- Variable de entorno `WIN_DESKTOP_APPS` controla el destino; default `/mnt/c/Users/lucas/Desktop/apps`.
## Flujo
1. `resolve_cpp_app_dir` — deduce nombre y directorio absoluto de la app (desde CWD o arg)
2. Verifica `wails.json` y `go.mod` en el directorio de la app
3. Detecta si necesita `-tags goolm` (app.md referencia `matrix_crypto_init` o wails.json lo declara)
4. `wails build -platform windows/amd64 [tags]` desde el directorio de la app
5. `deploy_wails_exe_to_windows` — mata proceso, copia .exe, relanza y verifica PID
6. Imprime `ls -lh` del exe final en `Desktop/apps/<APP>/`