I’ve got an approach that seems to be working well for our purposes that I’ll post here in case it helps anyone in the future: https://github.com/KittyCAD/modeling-app/pull/9612
I created a pared-down HistoryView class that wraps an EditorView. At runtime, a local history target EditorView can be registered. If a local history target is registered, dispatches to the HistoryView are forwarded to the target as “pointer events” with inverted effects that allow undoing the forwarded event to trigger an undo from the HistoryView, an idea I borrowed from @FilipSzutkowski’s helpful write-up here.
I store this HistoryView in the same place as our (now “local”) EditorView instance, and made all my undo buttons and whatnot use its undo and redo functionality to provide fallbacks if global history depth is available but local isn’t. The upshot is that users get file system edits interleaved with their normal local code edits until they navigate to another file, then the global history persists and the interleaved edits disappear, but direct access to the file system edit history lives on and is still available if you undo any local edits, like “before” your local edits.