

























@@ -197,6 +197,36 @@ describe("gateway session utils", () => {
197197expect(listed.hasMore).toBe(true);
198198});
199199200+test("session list search includes direct-session origin display labels", () => {
201+const cfg = { agents: { list: [{ id: "main", default: true }] } } as OpenClawConfig;
202+const store = {
203+"agent:main:telegram:direct:42": {
204+chatType: "direct",
205+channel: "telegram",
206+origin: { label: "openclaw-tui" },
207+updatedAt: 2,
208+} as SessionEntry,
209+"agent:main:telegram:direct:99": {
210+chatType: "direct",
211+channel: "telegram",
212+origin: { label: "other-direct" },
213+updatedAt: 1,
214+} as SessionEntry,
215+};
216+217+const listed = listSessionsFromStore({
218+ cfg,
219+storePath: "",
220+ store,
221+opts: { search: "openclaw-tui" },
222+});
223+224+expect(listed.sessions.map((session) => session.key)).toEqual([
225+"agent:main:telegram:direct:42",
226+]);
227+expect(listed.sessions[0]?.displayName).toBe("openclaw-tui");
228+});
229+200230test("session lists mark the final offset page without hasMore", () => {
201231const cfg = createModelDefaultsConfig({ primary: "openai/gpt-5.4" });
202232const store = Object.fromEntries(
@@ -703,6 +733,60 @@ describe("gateway session utils", () => {
703733expect(classifySessionKey("main", entry)).toBe("group");
704734});
705735736+test("buildGatewaySessionRow displayName falls through to origin label for direct sessions", () => {
737+const cfg = { agents: { list: [{ id: "main", default: true }] } } as OpenClawConfig;
738+const entry = {
739+chatType: "direct",
740+channel: "telegram",
741+origin: { label: "openclaw-tui" },
742+} as SessionEntry;
743+const row = buildGatewaySessionRow({
744+ cfg,
745+storePath: "",
746+store: { "agent:main:telegram:direct:42": entry },
747+key: "agent:main:telegram:direct:42",
748+ entry,
749+});
750+expect(row.displayName).toBe("openclaw-tui");
751+});
752+753+test("buildGatewaySessionRow displayName uses group display name for group sessions", () => {
754+const cfg = { agents: { list: [{ id: "main", default: true }] } } as OpenClawConfig;
755+const entry = {
756+chatType: "group",
757+channel: "telegram",
758+subject: "Engineering",
759+origin: { label: "openclaw-tui" },
760+} as SessionEntry;
761+const row = buildGatewaySessionRow({
762+ cfg,
763+storePath: "",
764+store: { "agent:main:telegram:group:99": entry },
765+key: "agent:main:telegram:group:99",
766+ entry,
767+});
768+expect(row.displayName).toMatch(/^telegram:/);
769+expect(row.displayName).not.toBe("openclaw-tui");
770+});
771+772+test("buildGatewaySessionRow prefers entry.label over origin.label for direct sessions", () => {
773+const cfg = { agents: { list: [{ id: "main", default: true }] } } as OpenClawConfig;
774+const entry = {
775+chatType: "direct",
776+channel: "telegram",
777+label: "Alice",
778+origin: { label: "openclaw-tui" },
779+} as SessionEntry;
780+const row = buildGatewaySessionRow({
781+ cfg,
782+storePath: "",
783+store: { "agent:main:telegram:direct:42": entry },
784+key: "agent:main:telegram:direct:42",
785+ entry,
786+});
787+expect(row.displayName).toBe("Alice");
788+});
789+706790test("resolveSessionStoreKey maps main aliases to default agent main", () => {
707791const cfg = {
708792session: { mainKey: "work" },
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。