Files
tutti/packages/agent/gui/shared/agentConversationRailTitlePromptSelector.ts
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

46 lines
1.4 KiB
TypeScript

import {
selectSessionMessagesById,
type AgentSessionEngineState
} from "@tutti-os/agent-activity-core";
import { resolveAgentGUIFirstUserMessageDisplayPrompt } from "./agentConversationTitleProjection.ts";
export type AgentGUIConversationRailTitlePromptsBySessionId = Readonly<
Record<string, string>
>;
export function createAgentGUIConversationRailTitlePromptSelector(): (
state: AgentSessionEngineState
) => AgentGUIConversationRailTitlePromptsBySessionId {
let previous: AgentGUIConversationRailTitlePromptsBySessionId = {};
return (state) => {
const next: Record<string, string> = {};
for (const [agentSessionId, messages] of Object.entries(
selectSessionMessagesById(state)
)) {
const displayPrompt =
resolveAgentGUIFirstUserMessageDisplayPrompt(messages);
if (displayPrompt) {
next[agentSessionId] = displayPrompt;
}
}
if (agentGUIConversationRailTitlePromptsEqual(previous, next)) {
return previous;
}
previous = next;
return previous;
};
}
function agentGUIConversationRailTitlePromptsEqual(
left: AgentGUIConversationRailTitlePromptsBySessionId,
right: AgentGUIConversationRailTitlePromptsBySessionId
): boolean {
const leftKeys = Object.keys(left);
const rightKeys = Object.keys(right);
return (
leftKeys.length === rightKeys.length &&
leftKeys.every((key) => left[key] === right[key])
);
}