feat(maestro): add maestro-config crate with unified TOML schema (NAP-233)

Introduces the shared on-disk schema that all binaries (CLI, daemon,
registry) will load from `~/.config/maestro/config.toml`. Sections:

  [shared]    registry_url, token  — consumed by 2+ binaries
  [cli]       cookie
  [daemon]    daemon_id, hostname, daemon_url, bind_addr, state_dir, worktree_root
  [registry]  bind_addr

Exposes:
- MaestroConfigFile { shared, cli, daemon, registry } with strict load,
  load-or-default, atomic save, and per-section empty-table suppression.
- default_config_path() / resolve_config_path() honoring MAESTRO_CONFIG.
- derive_daemon_ws_url() for the daemon's scheme-swap + /daemon suffix
  off the shared http(s):// base URL.
- ConfigError::MissingFile with a hard-cutover message pointing the user
  at `maestrod configure` (legacy paths are no longer read).

Consumers wired in follow-up commits.
This commit is contained in:
2026-05-26 09:21:41 +00:00
parent 03b5f296ad
commit bc9279b7ae
3 changed files with 406 additions and 0 deletions
+1
View File
@@ -17,6 +17,7 @@ dirs = "5"
futures-util = { version = "0.3", default-features = false, features = ["sink", "std"] }
jsonwebtoken = { version = "9", default-features = false }
libc = "0.2"
maestro-config = { path = "crates/maestro-config" }
maestro-protocol = { path = "crates/maestro-protocol" }
nix = { version = "0.29", default-features = false, features = ["term", "signal"] }
rand = "0.8"