JARVIS-UI
アップデート 2.160
2026/6/20
v2.160.0.0MINORJarvis-UI
フェーズ A–C:ModuleRegistry + Workspace Ready(§17) + フライアウトなしのIcon Rail(§16)(Jarvis-UI)
- フェーズ A–C の納品
docs/specs/EDITOR_UI_OVERHAUL_PLAN.md§16–§17(Halyson 2026年6月20日の決定)に基づき、docs/ai/PROMPT_UI_GLM_REMAINING_BACKLOG_2026-06-20.md. 対象範囲:ナビゲーションアーキテクチャ + データ駆動型カタログ + アイコン — writers/save bytes/hooks/FfxLib/RT0/RT2/SGM/SPIRA FORGE 未変更;68個のハンドラーMenuItem_*リファクタリングされていない(呼び出されているのみ)。フェーズA — ModuleRegistry(単一ソース):ModuleCatalogPolicy.csドキュメントのスタブから権威あるカタログへと発展 — 新規public static class ModuleRegistrycomIReadOnlyList<ModuleCatalogEntry> All41エントリ(Home + 10 Core Authoring + 5 Maps + 7 Live + 16 Extras + 2 Wave-1)が登録されており、各モジュールにつき1つずつがレール上でルーティングされています。ModuleCatalogEntry獲得するMode/Notes/Scope/Cluster(enumModuleCluster) さらにId/Title/Description/IconKey/RequiresProject原文。各リテラルの忠実な複製SetModule(...)でMain_Window.axaml.cs(再発明されたものではない)。doc-commentポリシー:新規MenuItem_*ルーティング済み = レジストリへの追加 (レビュー・ブロッカー)。 フェーズA — アイコングラフィックス:StudioIcons.axaml14 → 54 個のアイコン に拡張されました (<StreamGeometry>Lucide風、viewBox 24×24) — モジュールごとに1つのメタファー(剣+角=モンスター、フロッピーディスク=セーブ、頭蓋骨=敵のデザイン、六角格子=球面グリッドなど)。 整合性チェック(スクリプト)により、41個すべてがIconKeyレジストリのsは、以下に解決されますStudioIcons. フェーズB — §17 Workspace Ready:MainDashboard_Control.axaml6つのハードコードされたタイルがなくなり、代わりにItemsControl ItemsSource="{Binding Modules}"comDataTemplate(アイコン + タイトル + 詳細説明 + モードのピル)。Main_DataModel獲得するpublic IReadOnlyList<ModuleCatalogEntry> Modules => ModuleRegistry.All. 新品のコンバーター2台がFFXProjectEditor/Converters/:IconKeyToGeo metryConverter(resolve string IconKey → Geometry percorrendoリソース+統合辞書viaTryGetResource(key, ActualThemeVariant, out _)— necessário porque binding{DynamicResource {Binding IconKey}}não funciona paraPathIcon.Dataem Avalonia) eRequiresProjectEnabledConverter(IMultiValueConverterRequiresProject × IsProjectLoaded →IsEnabled). Hero + empty-state CTA + card de Workspace status preservados (§17.4). Fase C — §16 Icon Rail sem flyouts: removidos os 5Button.Flyout/メニューフライアウトdoIconRailCol(XAML L156–239) — substituídos por<StackPanel Name="RailStack">populado em code-behind porBuildIconRail()(1 botãorailIconpor entry, agrupado por cluster comボーダー1px como separador).Popup#RailDrawer(narrow) troca a lista textual deButton Classes="nav"por<WrapPanel Name="RailDrawerGrid">(grid de ícones). Handler únicoButton_RailModule_Click(sender, e)lêタグ=ID→Dispatch(id).RefreshRailProjectGates()re-aplica o gateRequiresProjectquandoProject_Service.IsProjectLoadedmuda. Fase C — Dispatch genérico:OnQuickLaunchRequested(6 keys hardcoded: monster/kernel/sphere/save/extras/home) substituído porDispatch(string moduleId)com switch de todos os 41 Ids → handlerMenuItem_*existente. Rail, drawer e dashboard passam pelo mesmo caminho. Aceite: build Release 0 erros (402 warnings preexistentes); 0メニューフライアウトnoIconRailCol; 0 tile hardcoded no dashboard; 41 ícones renderizando no rail + 41 cards no home com ícone dedicado + descrição completa; cards desabilitados quandoRequiresProject && !IsProjectLoaded. Bug visual corrigido: os ícones não renderizavam inicialmente porqueApplication.Current.Resources.TryGetValue()em Avalonia 11 não percorre統合辞書— fix viaResolveGeometry()helper compartilhado que itera os merged dicts comTryGetResource. [anterior:v2.159.6.1]
v2.160.1.0PATCHJarvis-UI
フェーズD1完了:インターフェース`IRestorableModule` + リファクタリング`NavigationSnapshot` (Jarvis-UI)
- フェーズDの最初のコミット (
docs/ai/PROMPT_GLM_PHASE_D_TO_F_2026-06-20.md§3.D1). 対象範囲:ナビゲーションアーキテクチャ(復元可能な「戻る」「進む」) — writers/save bytes/hooks/FfxLib/RT0/RT2/SGM/SPIRA FORGE は変更なし。新規契約FFXProjectEditor/Modules/Common/IRestorableModule.cs:CaptureState()→Dictionary<string,object?>?(null = ステートレス) およびRestoreState(state)(冪等、null でも安全)。D1 以前では、Main_Window具体的な型に対してパターンマッチを行っていた(MonEditorSelector_Control/KernelCommands_Control) 状態の取得用 — ~38モジュールまで拡張できない。現在、Main_Windowコントロールに、それがそうかどうかを尋ねるIRestorableModule. リファクタリングNavigationSnapshot: 回るrecord struct (string ModuleId, Dictionary<string,object?>? State); enumNavigationSurfaceKind削除されます。新しいフィールドprivate string _currentModuleId = "home"の冒頭で設定されたDispatch(string moduleId).CaptureCurrentNavigationSnapshot()ジェネリック医薬品(オンライン購入)ContentFrame.Content is IRestorableModule;IsSameNavigationSurface()比べてみてModuleId;RestoreNavigationSnapshot()するDispatch(snapshot.ModuleId)+restorable.RestoreState(snapshot.State). 3件のリンク切れを修正(依然としてNavigationSurfaceKind):MenuItem_MonsterMagic1/2(L560/568) →_currentModuleId = "battle-commands-hub"+new NavigationSnapshot("battle-commands-hub")(以下のものと同じ形式のMenuItem_Commands/MenuItem_Items(すでに移行済み);NavigateToMonsterEditor(L1549) →new NavigationSnapshot("monster-editor"). 正直なところ: 3つのオリジナル(Home/Monster/KernelCommands)では「戻る」「進む」機能が引き続き動作しますが、Monster/KernelCommandsのみが完全に復元可能となります le がその制御を実装したときIRestorableModule(D2/D4)。それまでは、スナップショットは作成されますが、State来るnull(モジュールに戻る。サブ選択は復元されない)。ビルドリリース エラー0件(既存の警告402件)。[前回:v2.160.0.0]
v2.160.2.0PATCHJarvis-UI
フェーズD2:`IRestorableModule` 7つの簡単なエディタ(Jarvis-UI)
- フェーズDの2番目のコミット(
docs/ai/PROMPT_GLM_PHASE_D_TO_F_2026-06-20.md§3.D2). 適用範囲:7つのCore Authoringエディタで「戻る/進む」機能を復元可能 — writers/save bytes/hooks/FfxLib/RT0/RT2/SGM/SPIRA FORGEは変更なし。実装IRestorableModule(D1で定義されたもの)を7つの対照群において:TreasureEditor_Control,AutoAbilityEditor_Control,PlayerGrowthEditor_Control,CtbBaseEditor_Control,KeyItemEditor_Control,FormationEditor_Control,BukiGetTreasureCatalog_Control. それぞれCaptureState()キャプチャfilterText(文字列) +selectedIndex(int? コレクション内で選択された項目から派生した値Displayed*);RestoreState(state)フィルターを再適用する(これにより、ApplyFilter経由OnFilterTextChanged) を行い、インデックスに基づいて行を再選択します。エディタによるマッピング: Treasure (SelectedTreasure/DisplayedTreasures), AutoAbility (SelectedAbility/DisplayedAbilities), PlayerGrowth (SelectedCharacter/DisplayedCharacters), CtbBase (SelectedRow/DisplayedRows), KeyItem (SelectedItem/DisplayedItems), 形成 (SelectedBattle/Battles—Displayed*なし), BukiGetTreasureCatalog (SelectedRow/表示行数). **Honestidade:** agora Monster Editor + os 7 editores acima são plenamente restorable via back/forward (voltam pra seleção/filtro exatos). KernelCommands + os hubs (BattleCommands/Items/etc.) viram em D3 (SubTabHub). Build Release **0 erros** (402 warnings preexistentes). [anterior:v2.160.1.0`]
v2.160.3.0PATCHJarvis-UI
フェーズD3:`IRestorableModule` no`SubTabHub_Control` (9つのハブに対応)(Jarvis-UI)
- フェーズDの3回目のコミット(
docs/ai/PROMPT_GLM_PHASE_D_TO_F_2026-06-20.md§3.D3). 適用範囲:すべてのベースハブにおいて、戻る/進む機能の復元が可能 でSubTabHub** — writers/save bytes/hooks/FfxLib/RT0/RT2/SGM/SPIRA FORGE は変更なし。SubTabHub_Control.axaml.cs実装するIRestorableModule: 新しいフィールドint _activeTabIndex追跡された日時:SelectTab(index);CaptureState()戻る{["activeTab"] = _activeTabIndex};RestoreState(state)炎SelectTab(idx)(通常は re-apilla pill/active/hosted-content を使用します)。9つのハブの自動対応: BattleCommandsHub、ItemsHub、SphereGridHub、TextHub、EnemyDesignHub、CustomizationsHub、StatsHub、EncountersHub、Blitzball — これらすべてがSubTabHub_Control経由AddTab(...), そうすれば、たった1回の変更で全員がアクティブなサブタブの復元機能を無料で利用できるようになります。正直に言うと: 各サブタブ内のコンテンツ(ホストされたエディタのフィルター/選択機能)については、ホストされたコントロールが責任を負います — もしそれがIRestorableModule(D2はTreasure/KeyItem/etc.を網羅した)、そのMain_Windowその直後にrestoreを実行します。ビルドリリース エラー0件(既存の警告402件)。[前回:v2.160.2.0]
v2.160.4.0PATCHJarvis-UI
フェーズD4:`IRestorableModule` 残りのすべてのコントロールについては、デフォルトのインターフェースメソッド(Jarvis-UI)を介して処理されます
- フェーズDの4回目のコミット(
docs/ai/PROMPT_GLM_PHASE_D_TO_F_2026-06-20.md§3.D4). 適用範囲:すべての*_Control残りの — writers/save bytes/hooks/FfxLib/RT0/RT2/SGM/SPIRA FORGE は変更なし。IRestorableModule.csデフォルトのインターフェースメソッドが追加されます:CaptureState() => nullそしてRestoreState(state) { }(デフォルトではstateless/no-op)。したがって、実質的な状態を持たないコントロール(読み取り専用エクスプローラー、ハブ、ランタイムラボ、デバッグ、トラッカー、16のエクストラ、Wave-1、サブコントロール)は、単に, IRestorableModule署名欄 — oMain_WindowこれでできるようになりましたContentFrame.Content is IRestorableModuleタイプを問わず、任意のモジュールで。自動スイープは以下を通じてwork/_irestable_stateless_sweep_20260620.ps1: 変更されたコントロール:65個(追加using FFXProjectEditor.Modules.Common;+: UserControl, IRestorableModule), 9つスキップ(D1/D2/D3ですでに実装済みの8つ +MonsterAiEditor2_Control販売終了)。正直に言うと: フィルタ機能を備えた3つのブラウザ(MagicDllBrowser/RuntimeDllManager/Ps3MagicBrowser)は、そのFilterTextこれらは非公開のDataModels内に存在し、コントロール上には公開されていない――フィルターの実際のキャプチャは、より小さなバックログとして残される。D1+D2+D3+D4により、約72個のコントロールすべてが現在、以下のように宣言しているIRestorableModule; これまで参加していたもの(8つのエディター+9つのハブ)は明示的なオーバーライドを行っており、それ以外はステートレスである。ビルドリリース エラー0件(既存の警告402件)
v2.160.3.0