fix(gateway): persist pairing tokens and honor docker config (#630)

* fix(gateway): honor config bind settings and persist pairing

Resolve docker-compose startup and restart friction by:
- using config host/port defaults for gateway/daemon unless CLI flags are passed
- persisting paired token hashes to config.toml on successful /pair
- running container default command as 'zeroclaw gateway' (no hardcoded --host/--port overrides)
- updating compose image/docs to zeroclaw-labs namespace
- adding MODEL env fallback for default_model override and targeted regression tests

* chore(ci): sync lockfile and restore rustfmt parity

Update Cargo.lock to match Cargo.toml and format src/service/mod.rs so rust quality gates stop failing with unrelated baseline drift.
This commit is contained in:
Will Sarg 2026-02-17 15:05:56 -05:00 committed by GitHub
parent 35f7597c3c
commit 30b9df761a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 103 additions and 36 deletions

View file

@ -115,9 +115,8 @@ fn status(config: &Config) -> Result<()> {
if cfg!(target_os = "windows") {
let _ = config;
let task_name = windows_task_name();
let out = run_capture(
Command::new("schtasks").args(["/Query", "/TN", task_name, "/FO", "LIST"]),
);
let out =
run_capture(Command::new("schtasks").args(["/Query", "/TN", task_name, "/FO", "LIST"]));
match out {
Ok(text) => {
let running = text.contains("Running");
@ -167,9 +166,7 @@ fn uninstall(config: &Config) -> Result<()> {
if cfg!(target_os = "windows") {
let task_name = windows_task_name();
let _ = run_checked(
Command::new("schtasks").args(["/Delete", "/TN", task_name, "/F"]),
);
let _ = run_checked(Command::new("schtasks").args(["/Delete", "/TN", task_name, "/F"]));
// Remove the wrapper script
let wrapper = config
.config_path
@ -288,20 +285,18 @@ fn install_windows(config: &Config) -> Result<()> {
.args(["/Delete", "/TN", task_name, "/F"])
.output();
run_checked(
Command::new("schtasks").args([
"/Create",
"/TN",
task_name,
"/SC",
"ONLOGON",
"/TR",
&format!("\"{}\"", wrapper.display()),
"/RL",
"HIGHEST",
"/F",
]),
)?;
run_checked(Command::new("schtasks").args([
"/Create",
"/TN",
task_name,
"/SC",
"ONLOGON",
"/TR",
&format!("\"{}\"", wrapper.display()),
"/RL",
"HIGHEST",
"/F",
]))?;
println!("✅ Installed Windows scheduled task: {}", task_name);
println!(" Wrapper: {}", wrapper.display());