The project follows strict layering and dependency inversion. Views bind to
ViewModels; ViewModels depend on abstractions; concrete services are wired in the
app composition root.
Rules of thumb
Keep views passive and route input through bindings, commands, and behaviors.
Put command state and orchestration in ViewModels.
Put XAML parsing, serialization, AST, language, workspace, terminal, debugger,
collaboration, and protocol logic in services.
Put file system, processes, PTYs, package loading, and persistence behind
infrastructure abstractions.
Register concrete services in App.axaml.cs.
Prefer focused interfaces over broad host-facing service objects.
Extension boundaries
Extensions should depend on XamlVisualEditor.Extensions contracts. Avoid
referencing shell ViewModels from extension code; add typed host adapters when a
feature needs shell-owned state.