Spaces:
Build error
Build error
| import { Trans } from "react-i18next"; | |
| import { OpenHandsAction } from "#/types/core/actions"; | |
| import { isOpenHandsAction, isOpenHandsObservation } from "#/types/core/guards"; | |
| import { OpenHandsObservation } from "#/types/core/observations"; | |
| import { MonoComponent } from "../mono-component"; | |
| import { PathComponent } from "../path-component"; | |
| import { getActionContent } from "./get-action-content"; | |
| import { getObservationContent } from "./get-observation-content"; | |
| import i18n from "#/i18n"; | |
| const hasPathProperty = ( | |
| obj: Record<string, unknown>, | |
| ): obj is { path: string } => typeof obj.path === "string"; | |
| const hasCommandProperty = ( | |
| obj: Record<string, unknown>, | |
| ): obj is { command: string } => typeof obj.command === "string"; | |
| const trimText = (text: string, maxLength: number): string => { | |
| if (!text) return ""; | |
| return text.length > maxLength ? `${text.substring(0, maxLength)}...` : text; | |
| }; | |
| export const getEventContent = ( | |
| event: OpenHandsAction | OpenHandsObservation, | |
| ) => { | |
| let title: React.ReactNode = ""; | |
| let details: string = ""; | |
| if (isOpenHandsAction(event)) { | |
| const actionKey = `ACTION_MESSAGE$${event.action.toUpperCase()}`; | |
| // If translation key exists, use Trans component | |
| if (i18n.exists(actionKey)) { | |
| title = ( | |
| <Trans | |
| i18nKey={actionKey} | |
| values={{ | |
| path: hasPathProperty(event.args) && event.args.path, | |
| command: | |
| hasCommandProperty(event.args) && | |
| trimText(event.args.command, 80), | |
| mcp_tool_name: event.action === "call_tool_mcp" && event.args.name, | |
| }} | |
| components={{ | |
| path: <PathComponent />, | |
| cmd: <MonoComponent />, | |
| }} | |
| /> | |
| ); | |
| } else { | |
| // For generic actions, just use the uppercase type | |
| title = event.action.toUpperCase(); | |
| } | |
| details = getActionContent(event); | |
| } | |
| if (isOpenHandsObservation(event)) { | |
| const observationKey = `OBSERVATION_MESSAGE$${event.observation.toUpperCase()}`; | |
| // If translation key exists, use Trans component | |
| if (i18n.exists(observationKey)) { | |
| title = ( | |
| <Trans | |
| i18nKey={observationKey} | |
| values={{ | |
| path: hasPathProperty(event.extras) && event.extras.path, | |
| command: | |
| hasCommandProperty(event.extras) && | |
| trimText(event.extras.command, 80), | |
| mcp_tool_name: event.observation === "mcp" && event.extras.name, | |
| }} | |
| components={{ | |
| path: <PathComponent />, | |
| cmd: <MonoComponent />, | |
| }} | |
| /> | |
| ); | |
| } else { | |
| // For generic observations, just use the uppercase type | |
| title = event.observation.toUpperCase(); | |
| } | |
| details = getObservationContent(event); | |
| } | |
| return { | |
| title: title ?? i18n.t("EVENT$UNKNOWN_EVENT"), | |
| details: details ?? i18n.t("EVENT$UNKNOWN_EVENT"), | |
| }; | |
| }; | |