feat: listen to named conversations in dedicated chat windows

This commit is contained in:
2026-09-06 00:03:32 +08:00
parent 82ea9bf69f
commit 93f4583737
8 changed files with 119 additions and 31 deletions
+11 -9
View File
@@ -65,7 +65,7 @@ try
case "inspect-ui":
{
var output = GetRequiredOption(args, "--output");
var snapshot = await WechatUiInspector.CaptureAsync(output, cancellationToken);
var snapshot = await WechatUiInspector.CaptureAsync(output, cancellationToken, GetOption(args, "--window-title"));
WriteJson(new { output = Path.GetFullPath(output), nodes = CountNodes(snapshot), sanitized = true });
return 0;
}
@@ -101,7 +101,7 @@ try
}
case "listener-smoke":
{
var result = await WechatChatClient.ListenerSmokeAsync(GetRequiredOption(args, "--output"), cancellationToken);
var result = await WechatChatClient.ListenerSmokeAsync(GetRequiredOption(args, "--output"), cancellationToken, HasOption(args, "--independent"));
WriteJson(result);
return result.Sent && result.MatchingEvents == 1 && result.EventsAfterRestart == 0
&& result.Snapshots >= 2 && result.CheckpointSaved ? 0 : 2;
@@ -322,7 +322,9 @@ try
await foreach (var messageEvent in WechatChatClient.ListenEventsAsync(
TimeSpan.FromSeconds(seconds),
stateFile,
cancellationToken))
cancellationToken,
session: GetOption(args, "--session") ?? WechatLocators.FileTransferAssistant,
independentWindow: HasOption(args, "--independent")))
{
Console.WriteLine(JsonSerializer.Serialize(ToEventOutput(messageEvent, includeContent), jsonLineOptions));
}
@@ -473,7 +475,7 @@ static int ValidateCommandLine(string[] values)
if (values[0] == "listener-smoke")
{
ValidateOptions(values, 1, ["--output", "--timeout"], []);
ValidateOptions(values, 1, ["--output", "--timeout"], ["--independent"]);
return 60;
}
@@ -485,7 +487,7 @@ static int ValidateCommandLine(string[] values)
if (values[0] == "inspect-ui")
{
ValidateOptions(values, 1, ["--output", "--timeout"], []);
ValidateOptions(values, 1, ["--output", "--window-title", "--timeout"], []);
return 30;
}
@@ -564,7 +566,7 @@ static int ValidateCommandLine(string[] values)
ValidateOptions(values, 2, ["--limit", "--scrolls", "--timeout"], ["--include-content"]);
return 60;
case "monitor":
ValidateOptions(values, 2, ["--seconds", "--state-file", "--timeout"], ["--include-content"]);
ValidateOptions(values, 2, ["--seconds", "--state-file", "--session", "--timeout"], ["--include-content", "--independent"]);
return GetPositiveIntOption(values, "--seconds", 60, 86400) + 30;
case "listen":
ValidateOptions(values, 2, ["--seconds", "--timeout"], ["--include-content"]);
@@ -716,13 +718,13 @@ static void PrintHelp() => Console.WriteLine("""
WxAgent.Host commands:
doctor [--timeout 30]
diagnose --output <dir> [--baseline <ui-tree.json>] [--timeout 60]
inspect-ui --output <path> [--timeout 30]
inspect-ui --output <path> [--window-title <title>] [--timeout 30]
smoke [--output <path>] [--timeout 30]
m4-smoke [--timeout 60]
m5-smoke [--timeout 60]
tray-status [--timeout 30]
window-status [--timeout 30]
listener-smoke --output <new-dir> [--timeout 60]
listener-smoke --output <new-dir> [--independent] [--timeout 60]
recovery-smoke [--timeout 30]
recover-ui [--timeout 30]
stability-smoke [--seconds 15] [--sample-seconds 5] [--output <dir>]
@@ -737,7 +739,7 @@ WxAgent.Host commands:
chat send-image --path <image> [--timeout 60]
chat read [--limit 20] [--include-content] [--timeout 30]
chat history [--limit 100] [--scrolls 10] [--include-content] [--timeout 60]
chat monitor [--seconds 60] [--state-file <path>] [--include-content] [--timeout <seconds>]
chat monitor [--seconds 60] [--session <name>] [--independent] [--state-file <path>] [--include-content] [--timeout <seconds>]
chat listen [--seconds 30] [--include-content] [--timeout <seconds>]
session list [--timeout 30]
session search --query <text> [--exact] [--timeout 30]