@drakon-systems/multi-clawd 2.6.1 → 2.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -416,7 +416,7 @@ openclaw plugins install (Get-Location).Path
416
416
  **Or let your agent install it.** Running an OpenClaw assistant or Claude
417
417
  Code on the target machine already? Paste it this and go make coffee:
418
418
 
419
- > Read https://raw.githubusercontent.com/Drakon-Systems-Ltd/multi-clawd/v2.6.1/SETUP-AGENT.md
419
+ > Read https://raw.githubusercontent.com/Drakon-Systems-Ltd/multi-clawd/v2.6.2/SETUP-AGENT.md
420
420
  > and follow it to set up multi-clawd on this machine. I own a second
421
421
  > Claude account — ask me when you need me to log in.
422
422
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "multi-clawd",
3
3
  "name": "multi-clawd",
4
- "version": "2.6.1",
4
+ "version": "2.6.2",
5
5
  "description": "Register additional Claude Code logins (Max/Pro accounts) as first-class OpenClaw CLI backends for cross-account failover, keeping the full skills/MCP harness on every account.",
6
6
  "cliBackends": [
7
7
  "claw1",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drakon-systems/multi-clawd",
3
- "version": "2.6.1",
3
+ "version": "2.6.2",
4
4
  "description": "Multi-account Claude Code failover for OpenClaw — register additional Claude (Max/Pro) logins as first-class CLI backends and keep the full skills/MCP harness across every account. Also imports those accounts' setup tokens into Hermes Agent's Anthropic credential pool.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1055,17 +1055,35 @@ if (accounts.some((a) => a && a.direct !== undefined && a.direct !== false)) {
1055
1055
  // ── 9. watchdog ─────────────────────────────────────────────────────────────
1056
1056
  console.log("eviction watchdog");
1057
1057
  let watchdogFound = false;
1058
+ // A scheduler query that FAILS (no user session bus, no systemd, container)
1059
+ // says nothing about whether a watchdog exists. Only a query that succeeded
1060
+ // can confirm absence. Tool stderr is never inherited: it is raw noise.
1061
+ let watchdogQueried = false;
1062
+ const WATCHDOG_NAME = /multi-?clawd|eviction/;
1058
1063
  try {
1059
- const out = execFileSync("launchctl", ["list"], { encoding: "utf8" });
1064
+ const out = execFileSync("launchctl", ["list"], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
1065
+ watchdogQueried = true;
1060
1066
  if (out.includes("multiclawd")) watchdogFound = true;
1061
1067
  } catch {
1062
- /* not macOS */
1068
+ /* not macOS, or launchctl could not be queried */
1063
1069
  }
1064
1070
  try {
1065
- const out = execFileSync("systemctl", ["--user", "list-timers", "--all"], { encoding: "utf8" });
1066
- if (out.includes("multi-clawd") || out.includes("multiclawd") || out.includes("eviction")) watchdogFound = true;
1071
+ const out = execFileSync("systemctl", ["--user", "list-timers", "--all"], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
1072
+ watchdogQueried = true;
1073
+ if (WATCHDOG_NAME.test(out)) watchdogFound = true;
1067
1074
  } catch {
1068
- /* not systemd */
1075
+ /* not systemd, or the user manager could not be queried */
1076
+ }
1077
+ if (!watchdogFound && !watchdogQueried) {
1078
+ // Query unavailable: fall back to the unit files on disk, which need no
1079
+ // running manager.
1080
+ for (const d of [join(HOME, "Library", "LaunchAgents"), join(HOME, ".config", "systemd", "user")]) {
1081
+ try {
1082
+ if (readdirSync(d).some((f) => /\.(plist|service|timer)$/.test(f) && WATCHDOG_NAME.test(f))) watchdogFound = true;
1083
+ } catch {
1084
+ /* no such directory */
1085
+ }
1086
+ }
1069
1087
  }
1070
1088
  if (watchdogFound) {
1071
1089
  // "Scheduled" is not enough: the unit points at a script INSIDE an install
@@ -1108,7 +1126,11 @@ if (watchdogFound) {
1108
1126
  `watchdog unit ${orphan.file} points at a MISSING script (${orphan.target}) — it fails silently every tick. Repoint it at ${join(EXT_DIR, "scripts", "eviction-watchdog.mjs")} or run the setup wizard to repair.`,
1109
1127
  );
1110
1128
  } else ok("watchdog scheduled");
1111
- } else warn("no watchdog found (needed until openclaw#107596 ships — see README)");
1129
+ } else if (watchdogQueried) {
1130
+ warn("no watchdog found (needed until openclaw#107596 ships — see README)");
1131
+ } else {
1132
+ note("could not query the scheduler (no user session or no systemd/launchd) and found no watchdog unit file — watchdog state unknown. Run doctor from a normal login session to confirm.");
1133
+ }
1112
1134
 
1113
1135
  // ── 10. optional live probe ─────────────────────────────────────────────────
1114
1136
  if (args.has("--probe")) {