feat(messages): add whatsapp messagePrefix and responsePrefix auto
This commit is contained in:
65
src/agents/identity.test.ts
Normal file
65
src/agents/identity.test.ts
Normal file
@@ -0,0 +1,65 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import type { ClawdbotConfig } from "../config/config.js";
|
||||
import { resolveMessagePrefix, resolveResponsePrefix } from "./identity.js";
|
||||
|
||||
describe("message prefix resolution", () => {
|
||||
it("returns configured messagePrefix override", () => {
|
||||
const cfg: ClawdbotConfig = {};
|
||||
expect(
|
||||
resolveMessagePrefix(cfg, "main", {
|
||||
configured: "[x]",
|
||||
hasAllowFrom: true,
|
||||
}),
|
||||
).toBe("[x]");
|
||||
expect(
|
||||
resolveMessagePrefix(cfg, "main", {
|
||||
configured: "",
|
||||
hasAllowFrom: false,
|
||||
}),
|
||||
).toBe("");
|
||||
});
|
||||
|
||||
it("defaults messagePrefix based on allowFrom + identity", () => {
|
||||
const cfg: ClawdbotConfig = {
|
||||
agents: { list: [{ id: "main", identity: { name: "Richbot" } }] },
|
||||
};
|
||||
expect(resolveMessagePrefix(cfg, "main", { hasAllowFrom: true })).toBe("");
|
||||
expect(resolveMessagePrefix(cfg, "main", { hasAllowFrom: false })).toBe(
|
||||
"[Richbot]",
|
||||
);
|
||||
});
|
||||
|
||||
it("falls back to [clawdbot] when identity is missing", () => {
|
||||
const cfg: ClawdbotConfig = {};
|
||||
expect(resolveMessagePrefix(cfg, "main", { hasAllowFrom: false })).toBe(
|
||||
"[clawdbot]",
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("response prefix resolution", () => {
|
||||
it("does not apply any default when unset", () => {
|
||||
const cfg: ClawdbotConfig = {
|
||||
agents: { list: [{ id: "main", identity: { name: "Richbot" } }] },
|
||||
};
|
||||
expect(resolveResponsePrefix(cfg, "main")).toBeUndefined();
|
||||
});
|
||||
|
||||
it("returns explicit responsePrefix when set", () => {
|
||||
const cfg: ClawdbotConfig = { messages: { responsePrefix: "PFX" } };
|
||||
expect(resolveResponsePrefix(cfg, "main")).toBe("PFX");
|
||||
});
|
||||
|
||||
it("supports responsePrefix: auto (identity-derived opt-in)", () => {
|
||||
const withIdentity: ClawdbotConfig = {
|
||||
agents: { list: [{ id: "main", identity: { name: "Richbot" } }] },
|
||||
messages: { responsePrefix: "auto" },
|
||||
};
|
||||
expect(resolveResponsePrefix(withIdentity, "main")).toBe("[Richbot]");
|
||||
|
||||
const withoutIdentity: ClawdbotConfig = {
|
||||
messages: { responsePrefix: "auto" },
|
||||
};
|
||||
expect(resolveResponsePrefix(withoutIdentity, "main")).toBeUndefined();
|
||||
});
|
||||
});
|
||||
@@ -32,9 +32,9 @@ export function resolveIdentityNamePrefix(
|
||||
export function resolveMessagePrefix(
|
||||
cfg: ClawdbotConfig,
|
||||
agentId: string,
|
||||
opts?: { hasAllowFrom?: boolean; fallback?: string },
|
||||
opts?: { configured?: string; hasAllowFrom?: boolean; fallback?: string },
|
||||
): string {
|
||||
const configured = cfg.messages?.messagePrefix;
|
||||
const configured = opts?.configured ?? cfg.messages?.messagePrefix;
|
||||
if (configured !== undefined) return configured;
|
||||
|
||||
const hasAllowFrom = opts?.hasAllowFrom === true;
|
||||
@@ -47,10 +47,15 @@ export function resolveMessagePrefix(
|
||||
|
||||
export function resolveResponsePrefix(
|
||||
cfg: ClawdbotConfig,
|
||||
_agentId: string,
|
||||
agentId: string,
|
||||
): string | undefined {
|
||||
const configured = cfg.messages?.responsePrefix;
|
||||
if (configured !== undefined) return configured;
|
||||
if (configured !== undefined) {
|
||||
if (configured === "auto") {
|
||||
return resolveIdentityNamePrefix(cfg, agentId);
|
||||
}
|
||||
return configured;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user