| import { describe, expect, it } from "vitest"; |
| import { |
| normalizeMessageClientSources, |
| readMessageClientSources, |
| } from "./message-client-source.js"; |
|
|
| describe("message client sources", () => { |
| it("retains distinct reported apps without treating extra client fields as attribution", () => { |
| const client = { |
| id: "cli", |
| mode: "cli", |
| displayName: " Release helper ", |
| platform: "linux", |
| instanceId: "private-instance", |
| }; |
| const sources = normalizeMessageClientSources([ |
| client, |
| client, |
| { id: "cli", mode: "cli", displayName: "Another helper" }, |
| { id: "not-a-client", mode: "cli", displayName: "Forged sender" }, |
| { id: "cli", mode: "not-a-mode" }, |
| ]); |
| client.displayName = "Changed after admission"; |
| expect(sources).toEqual([ |
| { id: "cli", mode: "cli", displayName: "Release helper" }, |
| { id: "cli", mode: "cli", displayName: "Another helper" }, |
| ]); |
| }); |
|
|
| it("bounds source labels without splitting a Unicode character", () => { |
| expect( |
| normalizeMessageClientSources([ |
| { id: "cli", mode: "cli", displayName: `${"a".repeat(199)}🦞` }, |
| ]), |
| ).toEqual([{ id: "cli", mode: "cli", displayName: "a".repeat(199) }]); |
| }); |
|
|
| it("uses only recorded transport sources and leaves older messages unlabeled", () => { |
| expect( |
| readMessageClientSources({ role: "user", senderLabel: "CLI", content: "From CLI" }), |
| ).toEqual([]); |
| expect( |
| readMessageClientSources({ |
| __openclaw: { transport: { clients: [{ id: "cli", mode: "cli" }] } }, |
| }), |
| ).toEqual([{ id: "cli", mode: "cli" }]); |
| }); |
| }); |
|
|