The extension already has some service-style pieces, but a lot of core behavior is still split across command/provider modules and global state. In particular, TLC checking, semantic state, diagnostics, and adapter wiring do not yet have clear shared ownership. That makes some parts harder to follow, test, and extend.
I would suggest we continue moving the extension toward a more service-driven core, where commands, providers, MCP, debugger, and UI rely more on shared runtime services and less on direct cross-module wiring and global state.
This first step should:
- introduce an explicit runtime container
- introduce shared services for checking, parsing, diagnostics projection, and semantic state
- introduce session-based TLC ownership
- rewire main adapters to depend on services instead of globals
- preserve current behavior
This step does not need to finish that architecture. It only needs to establish the service core and make the main ownership boundaries clearer.
The extension already has some service-style pieces, but a lot of core behavior is still split across command/provider modules and global state. In particular, TLC checking, semantic state, diagnostics, and adapter wiring do not yet have clear shared ownership. That makes some parts harder to follow, test, and extend.
I would suggest we continue moving the extension toward a more service-driven core, where commands, providers, MCP, debugger, and UI rely more on shared runtime services and less on direct cross-module wiring and global state.
This first step should:
This step does not need to finish that architecture. It only needs to establish the service core and make the main ownership boundaries clearer.