JARVIS-UI
Actualización 2.159
20/6/2026
v2.159.0.0MINORJarvis-UI
Pestaña «Personaje» del editor de partidas guardadas: compatibilidad con FFXED (habilidades, grupo, modos OD, overdrives)
- La pestaña «Personaje» ya no se limita a estadísticas y botones de lotes: nuevo
SaveEditor_CharacterBindings+FfxSaveCharacterFieldCatalogreflejan el panel FFXED v0.749 — combinaciones de Activation/Overdrive Mode, grupo (7 ranuras @15768), ~95 habilidades (campo de bits a 22090), 20 modos Overdrive con contadores, Overdrives y habilidades especiales, nivel de esfera / medidor de OD con valores máximos (22088/22086).FfxSaveCore.ReadSaveBit/WriteSaveBitcorrige los bits >7 (semántica FFXEDoffset + bit/8). Interfaz de usuario reorganizada en tres columnas, como en FFXED. Versión de prueba 0 errores
v2.158.2.0
v2.159.1.0PATCHJarvis-UI
Runtime DLL Manager: ModuleMasterDetail_Shell piloto + heroGradient + responsive + banners offline/separados + estado vacío + a11y
- Continúa la auditoría de la interfaz de usuario módulo por módulo en el Runtime DLL Manager (
Modules/RuntimeDllManager/), segúnPROMPT_UI_RUNTIMEDLL_2026-06-20.md. (P0) Hero en línea#183444/#111C24/#3B4B2D→Classes="heroGradient"; código hexadecimal de Chrome#20303Beliminado del.axaml(usaRailHoverBrush/PanelStrokeBrush). (P1) 1.º consumido r del repositorio deModuleMasterDetail_Shell: master = 3 tarjetas de estado (Game root / FFX open / Hooks); detail = héroe + lista de DLL. (P1)rsp:Responsive.Breakpoints+ estiloUserControl.narrowSe colapsa el maestro. (P2) BannersWarningBrush/DangerBrushcuandoIsGameClosed(partida cerrada — los botones solo activan el disco) yIsRuntimeDetached(FFX abierto sin probe/hook — estado en tiempo real poco fiable). Estado vacíoBorder#EmptyStatecuando!GameRootReady. (P3)AutomationProperties.Nameen las casillas de estado y los botones de acción;ToggleA11yNamepor elemento. Ámbito respetado: lógica de despliegue/activación/DLL/hook/probe intacta — solo contenedor visual. [anterior:v2.159.0.0]
v2.159.2.0PATCHJarvis-UI
Blitzball Hub: migración del shell duplicado al `SubTabHub` reutilizable
- El
BlitzballHub_Control(Modules/BlitzballHub/) duplicaba exactamente lo que elSubTabHub_Controlya hace — sección de subpestañastabPill,tabPillActive, carga diferida + caché por pestaña, píldora Writer/Read-only, audioPlayAlternative()al hacer clic. ElMenuItem_BlitzballAhora construye unoSubTabHub_ControlconAddTabFluent para las 5 pestañas (4 Writer + 1 Prize Atlas de solo lectura), con los mismos textos de las pastillas yrequiresProject: falseEn todos ellos (los cuatro editores de texto conservan sus propios estados vacíos de diseño; Atlas se abre sin diseño). ElBlitzballHub_Control(.axaml+.axaml.cs) se elimina —grepya no lo encuentranew BlitzballHub_Control()en producción. Alcance cumplido:FfxLib/Blitzball/*, RT0/RT2,ByteSnapshotEditorSessiony el contenido interno de los 5 subeditores se ha mantenido totalmente intacto; solo ha cambiado el contenedor visual. Se convierte en una plantilla para la futura migración delSaveEditorHub(7 pestañas codificadas). Compilación de lanzamiento 0 errores (401 advertencias preexistentes)
v2.159.1.0
v2.159.3.0PATCHJarvis-UI
Save Editor Hub, fase 2: chip sucio + carga útil SHA256 + protección de sesión
- Continúa la auditoría de la interfaz de usuario módulo por módulo en el Save Editor Hub (
Modules/SaveEditor/), segúndocs/ai/PROMPT_UI_SAVEEDITOR_HUB_PHASE2_2026-06-20.md. (P0) Chip Cambios no guardados en la tarjeta de cabecera utilizando clasesautosaveChip/autosaveOrb/autosaveLabelexistentes delStudioTheme, vinculado aIsDirty— aparece cuando el usuario edita Personaje/Gil/Equipo/etc. y desaparece tras Guardar/Guardar como (DataModel ya se pone a ceroIsDirty). (P1) Carga útil SHA256 corta (los primeros 12 caracteres + «…») a través deFfxSaveHash.Sha256Hex(session.Core.Data)en el encabezado, con una información emergente que muestra el hash completo (64 caracteres); se recalcula al cargar, guardar o cambiar de modo (MC) — no se recalcula alTouchDirty(hash = huella digital del blob en memoria; «dirty» ≠ cambio en el hash hasta «Apply+mutate»). Nuevas propiedadesPayloadHashShort/PayloadHashFully métodoRefreshPayloadHash()en DataModel. (P2) Confirmación antes de sustituir la sesión: nov el helperAvaloniaDialog_Util.ConfirmYesNoAsync(modal Sí/No sin elemento nuevo) se invoca antes de Load (barra de herramientas + CTA en estado vacío) y antes de cambiar la ranura del MC cuandoIsDirty; el combo de la ranura MC deja de utilizar el binding TwoWay directo y pasa porSelectionChangedcon validación + sincronización manual combo↔DataModel. Ámbito respetado: subpestañas FFXED, offsets,FfxSaveFileescritores, etiquetas por lotes y CLI--ffx-save-rt2Sin cambios en absoluto: solo el hub shell y el DataModel han adquirido nuevas propiedades. Compilación de versión 0 errores. [anterior:v2.159.2.0]
v2.159.4.0PATCHJarvis-UI
Magic DLL Browser: 9 hex → tokens + ModuleMasterDetail_Shell (2.º consumidor) + estados vacíos + responsivo + a11y
- Continúa la auditoría de la interfaz de usuario módulo por módulo en el Magic DLL Browser (
Modules/Extras/), segúndocs/ai/PROMPT_UI_MAGICDLLBROWSER_2026-06-20.md. (P0) Los 11#RRGGBBde Chrome (Guía de edición de Wave4)#E8A040, Advertencia de la familia Value Workbench#E8A040, y las 3 insignias RT2 en línea — inactivas#3B1A1A/#E85050/#F0A0A0, proveedor#3B2719/#E8A040/#F0C070, riesgo#2A2A1A/#C0A040/#E8D080) se añaden a los tokens/clases existentes delStudioTheme:WarningBrushen los textos de orientación/advertencia a los familiares; insignia rt2-dead →Classes="pillDanger"; insignia rt2-timing PROVED →Classes="pillWriter"; insignia rt2-timing RISK → fondoPanelAltBrush+WarningBrush(borde/primer plano). (P1) 2.º consumidor del repositorio deModuleMasterDetail_Shell(1.º = RuntimeDllManager): el cuerpoColumnDefinitions="330,*"hand-rolled convierte el shell enMasterHeaderLabel="Magic DLLs"— master = Resumen de la raíz de origen + Búsqueda + Cuadro de lista demagic_*.dll; detalle = héroe de acciones + Wave4 Attribution + Direct Patch Builder + TabControl denso (Secciones/Exportaciones/Importaciones/Sonido (SeSep)/Ranuras de superposición/Candidatos a roles/Comparador de familias/Descompilación lógica/Cadenas/Advertencias).MinWidthmaster ~260 proviene del shell. (P2)Border#EmptyStateen detalle cuando!HasSelectedDll(título «No DLL selected» + subtítulo en el que se indica cómo seleccionar una DLL / configurar elmagicFiles\FFXroot); estado vacío en la rama «master» cuando!HasDllList(nueva bandera calculadaDlls.Count > 0, notif situada enApplyFilterpara cubrir las funciones «Refresh» y «Search»);rsp:Responsive.Breakpointssin root + estiloUserControl.narrowEl panel principal se colapsa en menos de 760 píxeles (el WrapPanel de acciones no oculta botones esenciales como «Extract» o «Repack»). (P3)AutomationProperties.Nameen los ~16 botones de acción de Detail (Abrir DLL/Extraer/Descompilar lógicamente/Reempaquetar/Plan de parches/Proyecto C/ASM/Informe RE semántico/Magic Viewer/E/S del paquete Phyre/Clonar/Aplicar parche de bytes/Aplicar parche ASCII/Preparar y aplicar parche de valores/Preparar y aplicar parche de desplazamiento del host/Implementar clon de ps3data/Abrir PS3 Magic y carpetas). La tarjeta de encabezado se mantiene comocardcomún (decisión:heroGradienten un encabezado de contexto secundario pesaría —el héroe real se encuentra en el panel de inspección cuando hay una DLL seleccionada). Ámbito respetado: superposición PE, Direct Patch Builder, Value Workbench, descompilación lógica,MagicDllBrowser_DataModellógica de descompilación/reempaquetado/parches y los eventosOpenPs3MagicRequested/OpenMagicViewerRequested+ cableado n.ºMain_Windowtotalmente intactos: solo ha cambiado el contenedor visual (1 propiedad exclusiva de la interfaz de usuario)HasDllListañadida). Compilación de lanzamiento 0 errores (401 advertencias preexistentes); cero#RRGGBBliteral en el.axamldel módulo. [anterior:v2.159.3.0]
v2.159.5.0PATCHJarvis-UI
UI Optionals Master: 28 ID del backlog de opcionales cerrados en un único PATCH (Jarvis-UI)
- Ejecución completa del
docs/ai/PROMPT_UI_OPTIONALS_MASTER_2026-06-20.mdapartado 5 — se han implementado los 28 ID pendientes (OPT-F2 ya estaba hecho env2.159.4.0, sin modificar). Alcance: pulido de la interfaz de usuario solo en el contenedor (tokens, diseño adaptativo, accesibilidad, estados vacíos, píldoras, emojis) — writers/save bytes/hooks/FfxLib/RT0/RT2 sin modificar. Spri nt B (SubTabHub reutilizable): OPT-B1/B2 —AutomationProperties.Nameen todos los botonestabPillgenerados enAddTab(), contabA11yNameopcional (el valor por defecto se deriva de la etiqueta: «Pestaña X»); OPT-B3 —BlitzballSubTabHubFactory.Create()estático extrae la estructura de las 5 pestañas delMenuItem_Blitzball(≤5 líneas); OPT-B4 — copia del marcador de posiciónrequiresProjectahora configurable por concentrador (RequiresProjectMessage), se conserva la configuración predeterminada heredada de PT. Sprint F (Magic DLL Browser residual): OPT-F1 — tarjeta de cabeceraheroGradient; OPT-F3 — botones de acción en 2 líneas fijas (Abrir/Ver | Autor/Parche, antes un único WrapPanel); OPT-F4 —IsMasterExpandedse ha conservado en el DataModel (TwoWay en el shell); OPT-F5 — el héroe del detalleheroGradient; OPT-F6 — maestro vacío!HasDllListen el modeloBorder#EmptyState(icono + copiar, igual que «detalle vacío»); OPT-F7 —StatusSeverity(Ninguno/Información/Advertencia/Peligro) derivado deStatusText+ nuevoStatusSeverityBrushConvertermuestra un error/aviso enDangerBrush/WarningBrush; OPT-F8 —AutomationProperties.Nameen el cuadro de búsqueda; OPT-F9 — pastillaWRITER LAB · native magicFiles DLL · RT2 pendingen el encabezado. Sprint A + C (Save Editor): OPT-A1 — adaptabilidad (el encabezado se convierte en un StackPanel vertical, las acciones se apilan en modo estrecho); OPT-A2 — encabezadoheroGradient; OPT-A3 — pastillaREAD-ONLY · FFXED port · RT2 via CLIen el encabezado; OPT-A4 — copiar al hacer clic el hash SHA256 completo (portapapeles a través deTopLevel.Clipboard, nuevoIconCopy); OPT-C1 —StatusSeverityenStatusSummary(reutilización del conversor); OPT-C2–C5 — listas principales de las subpestañas «Caracteres», «Equipo», «Objetos» y «Blitzball» enExpanderplegable (ExpandDirection="Left", expandido por defecto). Sprint A5/A6/D (Sphere Grid + Blitzball): OPT-A5 — emoji🏐eliminado delSetModuletítulo del Blitzball y delsectionLabelde la plantilla; OPT-A6 —♻️ Restaurar→ «Restaurar original»,✕en el enlace → «Eliminar» + a11y; OPT-D1 — v1 formulario adaptativo (cuadrículas de 3 columnas →WrapPanelque se apila en «narrow»); OPT-D2 —ActiveToolModeenum en el DataModel + clase visualtoolActiveen el botón de modo activo (reflejado a través dePropertyChangeden el código subyacente); OPT-D3 —AutomationProperties.Nameen los CTA «Load/Save/Validate». Sprint E (Runtim (eDll residual): OPT-E2 — botón «Refresh» en el bannerIsGameClosed; OPT-E3 — código hexadecimal del botón de alternancia en C# (ToggleBrush/ToggleBorderBrush/ToggleForeground/ToggleGlow/RuntimeBrush) convertido en tokensRuntimeToggle*/RuntimeRuntime*enStudioTokens(se resuelve medianteResources.TryGetValue, sin hex en el módulo); OPT-E1 — omitido (la DLL de conmutación es síncrona a través deFile.Move/File.Copy, no hay ninguna operación asíncrona perceptible superior a 300 ms —documentado en el apartado 7). Compilación de versión 0 errores (401 advertencias preexistentes, ninguna en los archivos modificados); cero#RRGGBBnuevo texto en los.axamlreproducidos. [anterior:v2.159.4.0]
v2.159.6.0PATCHJarvis-UI
Aspecto visual de Frontend P0/P1: heroGradient sweep + tokens hexagonales de MonsterAi + drawer narrow + tokens de diseño P1-7 (Jarvis-UI)
- Ejecución del backlog P0/P1 del
docs/ai/FRONTEND_AUDIT_P0_P1_2026-06-19.mdsegún el plan aprobado. Alcance: pulir la interfaz de usuario y el sistema de diseño — writers/save bytes/hooks/FfxLib/RT0/RT2 sin modificar;MonsterAiEditor2_*(descatalogado) sin modificar. P0-1 (heroGradient sweep): 26 gradientes en línea en 25 archivos deModules/trasladados — 18 canónigos (#163245/#0F1821/#214F69) vieronClasses="heroGradient"; 8 variantes de identidad conservadas como nuevos tokens con nombre (heroPurple/heroGreen/heroBrown/heroTeal/heroBlueenStudioTheme.axaml+ColortokensHeroXxxA/B/CColorenStudioTokens.axaml) — «Aurora» se mantiene en morado, «AutoAbility», «Formation» y «Customization» se mantienen en verde, «KeyItem» se mantiene en marrón, «AlBhed», «CtbBase» y «PlayerGrowth» se mantienen en verde azulado, y «MixTable» se mantiene en azul.Main_Window.axamlencabezado (paletaPanelDeepColorpropia) conservada intencionadamente. P0-2 (MonsterAi hex → tokens): los 4 archivos ACTIVOS del clúster MonsterAiEditor migrados — 261 literales hexadecimales (Background/BorderBrush/Foreground) comprimidos en{DynamicResource ...}por familia (Shell/Protect/Regen/Gold/Forbidden/Cycle + Panel/Stroke), normalizando la variación dentro de cada familia (~20 rellenos de color verde azulado se convierten en 1AccentShellFillBrush). Creados 14AccentXxxForegroundBrushnuevos (solo los tenía Gold) + familiaBorder.accentXxx(15 estilos + selectores> TextBlock) enStudioTheme, paralela aButton.accen tXxxexistente.MonsterAiEditor2_Control.axamlretém seus 71 hex (discontinued). P0-4 (drawer narrow): o bug onde emWindow.narrowo botão "≡" eCtrl+Bnão faziam nada visível (estiloWindow.narrow Border#IconRailCol → IsVisible=Falsevencia o toggle) foi resolvido — novo<Popup Name="RailDrawer">flutuante emMain_Window.axamlcom os 6 grupos de navegação como botões de texto verticais (mais escaneáveis que ícones 22px em tela pequena),IsLightDismissEnabled=True;ToggleIconRail()agora branch narrow→Popup / wide→Border. Reusa os MESMOSMenuItem_*handlers (zero mudança em handlers). P1-7 (design tokens estruturais): novas famílias emStudioTokens.axaml— Spacing (Espaciado Xs/Sm/Md/Lg/XlThickness +StackGapSm/Md/Lgdoubles), Radius (RadiusSm = 8 / Md = 10 / Lg = 12 / Pill = 999CornerRadius), Motion (Duración: Rápida/Normal/Lentasys:TimeSpan), Elevation (Border.elevation1/2/3BoxShadow). Adoção piloto:StudioTheme.axamlconsomeRadio Lg/Md/SmemBorder.card/cardSoft/Button.primaryAction/acción secundaria/railIcon/tabPill, eDuración: Normal/Rápidanas 3 transições de microinteração (antes literais0:0:0,12/0:0:0,10);MonsterAiEditor_Control.axamldemonstraEspaciado grande/mediano+ combotarjeta decorativa Shellem 4 cards piloto. Divergências do audit registradas: P0-3 (Ctrl+B) já estava implementado na working tree (não era mais "comentário mentiroso"); P1-8 (shell) já tinha 2 consumidores; P1-5/P1-6 (arquitetura nav) fora do escopo por alto merge-risk. Build Release 0 erros (401 warnings preexistentes, nenhum novo). Artefatos de sweep:work/_hero_gradient_sweep_20260620.ps1,work/_monster_ai_hex_sweep_20260620.ps1. [anterior:v2.159.5.0]
v2.159.6.1PATCHJarvis-UI
Corrección de arranque: tokens P1-7 de radio/movimiento + enlaces de ModuleMasterDetail_Shell (Jarvis-UI)
- Corrección de emergencia posterior a
v2.159.6.0. StudioTheme: referencias P1-7 (RadiusLg/Md/Sm,DurationNormal/Fast) utilizaban{StaticResource }mas os tokens estão emApplication.Resources(StudioTokens.axaml) depois doStyleIncludedo tema →KeyNotFoundException: No se ha encontrado el recurso estático «RadiusLg»no boot (processo morria sem janela). Fix:{DynamicResource ...}. ModuleMasterDetail_Shell:MasterHeader/MasterList/Detalle/MasterHeaderLabel/IsMasterExpandedagora usamRelativeSource AncestorType=ModuleMasterDetail_Shell(antes bindavam o DataModel do módulo → lista/botões/detail vazios no Magic DLL Browser e Runtime DLL Manager). Escopo: UI container only — writers/save/hooks intocados. Build Release 0 erros. [anterior:v2.159.6.0]