fix(hook): suppress peer list when daemon is unreachable
Fold daemonError into SessionAnnounceOptions so the helper owns the mutually-exclusive choice between peer list and daemon-down hint. Before this fix, a session-announce against an unreachable daemon emitted both "No other mailboxes seen within the last 60 minutes (0 total registered)." (misleading — the daemon was never asked) AND the daemon-unreachable hint. Now only the hint appears when the daemon is down. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -260,8 +260,8 @@ program
|
|||||||
windowMinutes: opts.peerWindowMinutes,
|
windowMinutes: opts.peerWindowMinutes,
|
||||||
maxPeers: opts.maxPeers,
|
maxPeers: opts.maxPeers,
|
||||||
watcherCommand: `claude-mailbox watch --block --name ${name}`,
|
watcherCommand: `claude-mailbox watch --block --name ${name}`,
|
||||||
|
daemonError: daemonError ?? undefined,
|
||||||
});
|
});
|
||||||
if (daemonError) lines.push("", daemonError);
|
|
||||||
lines.push("");
|
lines.push("");
|
||||||
process.stdout.write(lines.join("\n"));
|
process.stdout.write(lines.join("\n"));
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -123,10 +123,11 @@ export interface SessionAnnounceOptions {
|
|||||||
windowMinutes: number;
|
windowMinutes: number;
|
||||||
maxPeers: number;
|
maxPeers: number;
|
||||||
watcherCommand?: string;
|
watcherCommand?: string;
|
||||||
|
daemonError?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function buildSessionAnnounceLines(opts: SessionAnnounceOptions): string[] {
|
export function buildSessionAnnounceLines(opts: SessionAnnounceOptions): string[] {
|
||||||
const { name, peers, windowMinutes, maxPeers, watcherCommand } = opts;
|
const { name, peers, windowMinutes, maxPeers, watcherCommand, daemonError } = opts;
|
||||||
const lines = [
|
const lines = [
|
||||||
`Claude-Mailbox: your mailbox name this session is \`${name}\`.`,
|
`Claude-Mailbox: your mailbox name this session is \`${name}\`.`,
|
||||||
`The name is auto-derived as <project>-<session-short>. You can rename it (e.g. to tag your working area) with mcp__mailbox__rename(current_name="${name}", new_name="<project>-<area>-<short>"); after that, use the new name everywhere.`,
|
`The name is auto-derived as <project>-<session-short>. You can rename it (e.g. to tag your working area) with mcp__mailbox__rename(current_name="${name}", new_name="<project>-<area>-<short>"); after that, use the new name everywhere.`,
|
||||||
@@ -151,7 +152,11 @@ export function buildSessionAnnounceLines(opts: SessionAnnounceOptions): string[
|
|||||||
` - exit code 2 → daemon unreachable; wait ~5 s, then relaunch.`,
|
` - exit code 2 → daemon unreachable; wait ~5 s, then relaunch.`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
lines.push("", ...formatActivePeerList(peers, name, { windowMinutes, maxPeers }));
|
if (daemonError) {
|
||||||
|
lines.push("", daemonError);
|
||||||
|
} else {
|
||||||
|
lines.push("", ...formatActivePeerList(peers, name, { windowMinutes, maxPeers }));
|
||||||
|
}
|
||||||
return lines;
|
return lines;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -402,6 +402,20 @@ describe("buildSessionAnnounceLines", () => {
|
|||||||
expect(out).not.toContain("watch --block");
|
expect(out).not.toContain("watch --block");
|
||||||
expect(out).not.toContain("run_in_background");
|
expect(out).not.toContain("run_in_background");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("replaces the peer list with the daemonError hint when daemon is unreachable", () => {
|
||||||
|
const out = buildSessionAnnounceLines({
|
||||||
|
name: "alice-abc12345",
|
||||||
|
peers: [],
|
||||||
|
windowMinutes: 60,
|
||||||
|
maxPeers: 10,
|
||||||
|
daemonError: "[Claude-Mailbox] Daemon not reachable at http://127.0.0.1:1.",
|
||||||
|
}).join("\n");
|
||||||
|
expect(out).toContain("Daemon not reachable");
|
||||||
|
// The misleading "no peers" line must NOT appear when the daemon is down.
|
||||||
|
expect(out).not.toMatch(/No other mailboxes seen/);
|
||||||
|
expect(out).not.toMatch(/Active peers/);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("readSettings / writeSettings roundtrip", () => {
|
describe("readSettings / writeSettings roundtrip", () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user