import type { UserComposerAttachment } from "@/attachments/types"; import type { DraftAgentStatusBarProps } from "@/components/agent-status-bar"; import type { UseAgentFormStateResult } from "@/hooks/use-agent-form-state"; export interface DraftKeyContext { selectedServerId: string | null; } export type DraftKeyInput = string | ((context: DraftKeyContext) => string); export function resolveDraftKey(input: { draftKey: DraftKeyInput; selectedServerId: string | null; }): string { if (typeof input.draftKey === "function") { return input.draftKey({ selectedServerId: input.selectedServerId }); } return input.draftKey; } export function buildDraftStatusControls(input: { formState: UseAgentFormStateResult; features?: DraftAgentStatusBarProps["features"]; onSetFeature?: DraftAgentStatusBarProps["onSetFeature"]; onDropdownClose?: DraftAgentStatusBarProps["onDropdownClose"]; }): DraftAgentStatusBarProps { const { formState, features, onSetFeature, onDropdownClose } = input; return { providerDefinitions: formState.providerDefinitions, selectedProvider: formState.selectedProvider, onSelectProvider: formState.setProviderFromUser, modeOptions: formState.modeOptions, selectedMode: formState.selectedMode, onSelectMode: formState.setModeFromUser, models: formState.availableModels, selectedModel: formState.selectedModel, onSelectModel: formState.setModelFromUser, isModelLoading: formState.isModelLoading, modelSelectorProviders: formState.modelSelectorProviders, isAllModelsLoading: formState.isAllModelsLoading, onSelectProviderAndModel: formState.setProviderAndModelFromUser, thinkingOptions: formState.availableThinkingOptions, selectedThinkingOptionId: formState.selectedThinkingOptionId, onSelectThinkingOption: formState.setThinkingOptionFromUser, features, onSetFeature, onDropdownClose, onModelSelectorOpen: formState.refetchProviderModelsIfStale, }; } export function hasDraftContent(input: { text: string; attachments: UserComposerAttachment[]; }): boolean { return input.text.trim().length > 0 || input.attachments.length > 0; } export function areAttachmentsEqual(input: { left: UserComposerAttachment[]; right: UserComposerAttachment[]; }): boolean { if (input.left.length !== input.right.length) { return false; } return input.left.every((attachment, index) => { const other = input.right[index]; return JSON.stringify(attachment) === JSON.stringify(other); }); }