From c4a2db93d99cb372900a7f5a038f577247ab7253 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 14 Jul 2026 04:40:29 -0700 Subject: [PATCH] refactor(status): privatize channel feature rendering (#107428) --- scripts/deadcode-exports.baseline.mjs | 1 - src/status/status-text.test.ts | 48 +++++++++++++++++++++------ src/status/status-text.ts | 2 +- 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/scripts/deadcode-exports.baseline.mjs b/scripts/deadcode-exports.baseline.mjs index c932ef1cd371..4e0ada5708e4 100644 --- a/scripts/deadcode-exports.baseline.mjs +++ b/scripts/deadcode-exports.baseline.mjs @@ -717,7 +717,6 @@ export const KNIP_UNUSED_EXPORT_BASELINE = [ "src/skills/lifecycle/upload-store.ts: MAX_ACTIVE_SKILL_UPLOADS", "src/skills/runtime/refresh.ts: resetSkillsRefreshForTest", "src/skills/runtime/remote-skills.ts: resetRemoteNodeSkillsForTests", - "src/status/status-text.ts: resolveStatusChannelFeatureLine", "src/talk/agent-consult-runtime.ts: setRealtimeVoiceAgentConsultDepsForTest", "src/tasks/detached-task-runtime.ts: resetDetachedTaskLifecycleRuntimeForTests", "src/tasks/detached-task-runtime.ts: setDetachedTaskLifecycleRuntime", diff --git a/src/status/status-text.test.ts b/src/status/status-text.test.ts index 958ee2988cea..3df58d542706 100644 --- a/src/status/status-text.test.ts +++ b/src/status/status-text.test.ts @@ -1,17 +1,47 @@ import { describe, expect, it } from "vitest"; -import { resolveStatusChannelFeatureLine } from "./status-text.js"; +import { buildStatusText } from "./status-text.js"; + +type StatusTextParams = Parameters[0]; + +async function renderTelegramStatus(params: { + cfg: StatusTextParams["cfg"]; + sessionEntry: NonNullable; + statusAccountId?: string; +}): Promise { + return await buildStatusText({ + cfg: params.cfg, + sessionEntry: params.sessionEntry, + sessionKey: "agent:main:main", + statusChannel: "telegram", + ...(params.statusAccountId ? { statusAccountId: params.statusAccountId } : {}), + provider: "openai", + model: "gpt-5.4-mini", + resolvedHarness: "pi", + resolvedVerboseLevel: "off", + resolvedReasoningLevel: "off", + resolveDefaultThinkingLevel: async () => undefined, + isGroup: false, + defaultGroupActivation: () => "mention", + pluginHealthLineOverride: "Plugins: test", + taskLineOverride: "", + skipDefaultTaskLookup: true, + primaryModelLabelOverride: "openai/gpt-5.4-mini", + modelAuthOverride: "test", + activeModelAuthOverride: "test", + includeTranscriptUsage: false, + }); +} describe("buildStatusText channel features", () => { it.each([ { richMessages: undefined, expected: "Telegram rich messages: off" }, { richMessages: false, expected: "Telegram rich messages: off" }, { richMessages: true, expected: "Telegram rich messages: on" }, - ])("shows Telegram rich message state for %s", ({ richMessages, expected }) => { + ])("shows Telegram rich message state for %s", async ({ richMessages, expected }) => { const telegram = richMessages === undefined ? {} : { richMessages }; - const text = resolveStatusChannelFeatureLine({ + const text = await renderTelegramStatus({ cfg: { channels: { telegram } }, sessionEntry: { sessionId: `telegram-rich-${String(richMessages)}`, updatedAt: 0 }, - statusChannel: "telegram", }); expect(text).toContain(expected); @@ -22,8 +52,8 @@ describe("buildStatusText channel features", () => { } }); - it("uses Telegram account rich message overrides", () => { - const text = resolveStatusChannelFeatureLine({ + it("uses Telegram account rich message overrides", async () => { + const text = await renderTelegramStatus({ cfg: { channels: { telegram: { @@ -37,15 +67,14 @@ describe("buildStatusText channel features", () => { updatedAt: 0, lastAccountId: "work", }, - statusChannel: "telegram", }); expect(text).toContain("Telegram rich messages: off"); expect(text).toContain("enable richMessages for this Telegram account"); }); - it("uses the current Telegram command account before the session records it", () => { - const text = resolveStatusChannelFeatureLine({ + it("uses the current Telegram command account before the session records it", async () => { + const text = await renderTelegramStatus({ cfg: { channels: { telegram: { @@ -58,7 +87,6 @@ describe("buildStatusText channel features", () => { sessionId: "telegram-rich-command-account", updatedAt: 0, }, - statusChannel: "telegram", statusAccountId: "work", }); diff --git a/src/status/status-text.ts b/src/status/status-text.ts index ae692f1fe084..1f01ced857d6 100644 --- a/src/status/status-text.ts +++ b/src/status/status-text.ts @@ -70,7 +70,7 @@ const USAGE_OAUTH_ONLY_PROVIDERS = new Set([ ]); const CODEX_APP_SERVER_HOME_DIRNAME = "codex-home"; -export function resolveStatusChannelFeatureLine(params: { +function resolveStatusChannelFeatureLine(params: { cfg: OpenClawConfig; statusChannel: string; statusAccountId?: string;