SIGN IN SIGN UP

refactor(layering): break all tui->cli edges; presentation SCC dissolved into clean core<tui<cli DAG

Final boundary edge tui->cli (12 refs) eliminated by relocating logic to the
proper architectural layer:

- selfdev (2): add client_selfdev_requested() to low-level jcode-selfdev-types
  crate (alongside CLIENT_SELFDEV_ENV); tui calls it directly. cli re-exports.
- external_auth (6): move src/cli/provider_init/external_auth.rs ->
  src/external_auth.rs (core; deps only auth/config/provider/provider_catalog).
- lock_model_provider (1): tui calls provider::activation::lock_runtime_provider_key
  directly (cli wrapper was a thin pass-through).
- hot_exec rebuild (1): move src/cli/hot_exec/rebuild.rs -> src/session_rebuild.rs
  (core). cli/hot_exec re-exports.
- dispatch server-lifecycle (2): new core src/server_spawn.rs with is_running()
  + spawner observer hook (register_default_server_spawner + OnceLock), registered
  at cli::startup::run. tui calls server_spawn:: directly.

Analyzer now shows the giant presentation SCC GONE: cli(in=0) > tui/video_export
> core. No core module references crate::cli or crate::tui. Remaining SCCs are all
internal to the core layer (server/tool/agent 78K, provider/auth 55K) which is fine
for a layered crate split.
J
jeremy committed
a9a8282760652720674c3e08851f4f1f54ebbca5
Parent: c074494