refactor: split node agent and Go control plane

This commit is contained in:
2026-09-11 16:57:31 +08:00
parent 078c22c73b
commit c86ba9c4d7
129 changed files with 654 additions and 77 deletions
+43
View File
@@ -0,0 +1,43 @@
namespace WxAgent.Core;
public sealed record WechatSessionSnapshot(string Name, string AutomationId, bool IsCurrent);
public sealed record WechatSessionSearchResult(string Name, string AutomationId, string? Category, bool IsExactMatch);
public static class WechatSessionParser
{
public static IReadOnlyList<WechatSessionSnapshot> Parse(
IEnumerable<(string AutomationId, string Name)> elements,
string? currentName)
{
return elements
.Where(element => element.AutomationId.StartsWith("session_item_", StringComparison.Ordinal) &&
!string.IsNullOrWhiteSpace(element.Name))
.DistinctBy(element => element.AutomationId, StringComparer.Ordinal)
.Select(element => new WechatSessionSnapshot(
element.Name,
element.AutomationId,
string.Equals(element.Name, currentName, StringComparison.Ordinal)))
.ToArray();
}
public static IReadOnlyList<WechatSessionSearchResult> ParseSearchResults(
IEnumerable<(string AutomationId, string AccessibleName)> elements,
string query)
{
ArgumentException.ThrowIfNullOrWhiteSpace(query);
return elements
.Where(element => element.AutomationId.StartsWith("search_item_", StringComparison.Ordinal) &&
!string.IsNullOrWhiteSpace(element.AccessibleName))
.DistinctBy(element => element.AutomationId, StringComparer.Ordinal)
.Select(element =>
{
var lines = element.AccessibleName.Split('\n', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
var exact = lines.FirstOrDefault(line => string.Equals(line, query, StringComparison.Ordinal));
var name = exact ?? lines.Last();
var category = lines.Length > 1 && !string.Equals(lines[0], name, StringComparison.Ordinal) ? lines[0] : null;
return new WechatSessionSearchResult(name, element.AutomationId, category, exact is not null);
})
.ToArray();
}
}