public sealed class AssetEditorsModuleDoc 37 § P7's panel, registered — the half of that phase that was built and unreachable.
Remarks
P7 shipped a view, a model, six tests and no way to open any of it. AgentDebuggerView was never handed to Shell.RegisterPanel, AgentDebugModel was constructed only by this assembly's own tests, and docs/overview.md recorded the whole row as "none of it is reachable". Every exit criterion of that phase was met as a test, which is exactly the shape of defect a test suite cannot see: nothing was broken, and nobody could use it.
⚠ Here rather than in the editor's application, because the view is in this assembly and this module already exists to be its last mile. The four AI asset editors are registered by StandardEditors and reached from the application; the debugger has no document and no extension, so a factory registry has no seat for it. A module that already owns a PluginContext does — and AddPanel unregisters it again on unload, which Shell.RegisterPanel would not.
⚠ The model is a field and the view is not. A panel's factory runs again every time it is reopened, so a model built inside the lambda would throw away the breakpoints and the selected agent every time somebody closed the tab. The view is the opposite: it belongs to the panel that built it, and Closed drops it so a stale control is never refreshed.
⚠ Live needs an AiSystem, and in the editor one exists only while Play is pressed. Refresh photographs a system in this process. PlayAi builds one on Play from what the project's assemblies declared through AgentDeclarations, Provides it to that session and lets it die on Stop — so the panel asks IActivePlaySession first and reads the session's world. Between sessions, or in a project that declares no actions, it shows an empty model, which is the honest reading of doc 20's first bar: a verb that is not running is visibly not running rather than absent. A host that steps agents of its own — a game embedding the editor — can still publish its system with Services.Add(system).
⚠ Why a seam and not a publish of the system: lifetime. PluginServices has no removal, so an AiSystem put there on Play would be a dead object after the first Stop — the reason PlayPhysics calls session.Provide. The seam is the controller itself under IActivePlaySession, published once, with the answer moving under it the way ShownScene's does. #470.
⚠ What it still cannot do is tint an agent nobody spawned. AiAgent is not scene-placeable — its remarks defer the authored form to the behaviour-tree asset — so the agents a session runs are the ones a project's [GameSystem] creates, handed the session's system. A scene with no such system has nothing for this panel to follow.
Fields and properties (5)
public const string AgentDebuggerPanelIdWhat the agent debugger is registered as.
public const string ModuleIdWhat the host activates it under, and what a plugin depending on it names.
public const string ModuleNameWhat a plugin-management panel calls it.
public const string AddressablesPanelThe Addressables panel's id, which the application's Assets menu names.
public const string InputDebugPanelIdWhat the input debug panel is registered as.
Methods (2)
public bool Follow(UiElement view)Points a freshly-opened AI asset editor at the debugger's model.
public void Activate(PluginContext context)Adds everything the plugin contributes.
Used by (8)
- AgentDebuggerPanelTestsVixen.Editor.App.Tests
- AgentFollowWiringTestsVixen.Editor.App.Tests
- AssetEditorsModuleReachTestsVixen.Editor.App.Tests
- EditorModulesVixen.Editor.Host
- InputDebugPanelTestsVixen.Editor.App.Tests
- NodeGraphThemeTestsVixen.Editor.App.Tests
- PlayAiTestsVixen.Editor.App.Tests
- ScrollingPanelPictureTestsVixen.Editor.App.Tests