@athenaintel/react 0.22.1 → 0.22.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +16 -8
  2. package/dist/chat/AthenaChat.cjs +16 -6
  3. package/dist/chat/AthenaChat.cjs.map +1 -1
  4. package/dist/chat/AthenaChat.js +15 -5
  5. package/dist/chat/AthenaChat.js.map +1 -1
  6. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs +0 -1
  7. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs.map +1 -1
  8. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js +0 -1
  9. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js.map +1 -1
  10. package/dist/chat-ui/messages/message-components.cjs +1 -0
  11. package/dist/chat-ui/messages/message-components.cjs.map +1 -1
  12. package/dist/chat-ui/messages/message-components.d.ts +7 -0
  13. package/dist/chat-ui/messages/message-components.js +1 -0
  14. package/dist/chat-ui/messages/message-components.js.map +1 -1
  15. package/dist/packages/agent-runtime/src/tool-metadata.cjs +0 -14
  16. package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +1 -1
  17. package/dist/packages/agent-runtime/src/tool-metadata.js +0 -14
  18. package/dist/packages/agent-runtime/src/tool-metadata.js.map +1 -1
  19. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs +79 -28
  20. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -1
  21. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js +81 -30
  22. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -1
  23. package/dist/packages/react/package.json.cjs +1 -1
  24. package/dist/packages/react/package.json.js +1 -1
  25. package/dist/styles.css +1 -1
  26. package/dist/toolkits/index.cjs +0 -7
  27. package/dist/toolkits/index.cjs.map +1 -1
  28. package/dist/toolkits/index.d.ts +0 -2
  29. package/dist/toolkits/index.js +0 -7
  30. package/dist/toolkits/index.js.map +1 -1
  31. package/dist/voice/use-athena-voice-session.cjs +1 -1
  32. package/dist/voice/use-athena-voice-session.cjs.map +1 -1
  33. package/dist/voice/use-athena-voice-session.d.ts +30 -31
  34. package/dist/voice/use-athena-voice-session.js +1 -1
  35. package/dist/voice/use-athena-voice-session.js.map +1 -1
  36. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"message-components.js","sources":["../../../src/chat-ui/messages/message-components.tsx"],"sourcesContent":["import {\n ActionBarPrimitive,\n AuiIf,\n BranchPickerPrimitive,\n MessagePrimitive,\n useAuiState,\n useMessagePartText,\n useSmooth,\n type ToolCallMessagePartComponent,\n} from \"@assistant-ui/react\";\nimport {\n hideUnterminatedMarkdownLink,\n isVoiceDelegationMessage,\n readRuntimeMessageFromSourceMessages,\n readSoleRuntimeMessageKind,\n} from \"@athenaintel/agent-runtime\";\nimport \"@assistant-ui/react-markdown/styles/dot.css\";\nimport {\n ArrowUpIcon,\n CheckIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n CopyIcon,\n ListPlusIcon,\n PencilIcon,\n RefreshCwIcon,\n} from \"lucide-react\";\nimport {\n type ButtonHTMLAttributes,\n type FC,\n type ReactNode,\n useMemo,\n} from \"react\";\nimport { useAthenaRunLive } from \"../../chat/use-athena-run-live\";\nimport type { ComposerAction } from \"../composer/composer-action\";\nimport { cn } from \"../../lib/utils\";\nimport { ChatMessageBody } from \"../rich-text/chat-message-body\";\nimport { useMessageActionsReadOnly } from \"./message-actions-config\";\nimport { RuntimeMessageCard } from \"./runtime-message\";\nimport { hasVisibleContent } from \"./running-indicator\";\nimport { VoiceDelegationMessage } from \"./voice-delegation-card\";\n\nexport function IconButton({\n children,\n tooltip,\n className,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement> & { tooltip: string }) {\n return (\n <button\n type=\"button\"\n title={tooltip}\n aria-label={tooltip}\n className={cn(\n \"inline-flex size-9 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent hover:text-foreground\",\n className,\n )}\n {...props}\n >\n {children}\n </button>\n );\n}\n\nexport function SmallIconButton({\n children,\n tooltip,\n className,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement> & { tooltip: string }) {\n return (\n <button\n type=\"button\"\n title={tooltip}\n aria-label={tooltip}\n className={cn(\n \"inline-flex size-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\",\n className,\n )}\n {...props}\n >\n {children}\n </button>\n );\n}\n\nexport const BranchPicker: FC = () => (\n <BranchPickerPrimitive.Root\n hideWhenSingleBranch\n className=\"inline-flex items-center gap-0.5 text-xs text-muted-foreground\"\n data-testid=\"chat-branch-picker\"\n >\n <BranchPickerPrimitive.Previous asChild>\n <SmallIconButton\n tooltip=\"Previous branch\"\n data-testid=\"chat-branch-previous\"\n >\n <ChevronLeftIcon className=\"size-3\" />\n </SmallIconButton>\n </BranchPickerPrimitive.Previous>\n <span className=\"font-medium\" data-testid=\"chat-branch-count\">\n <BranchPickerPrimitive.Number /> / <BranchPickerPrimitive.Count />\n </span>\n <BranchPickerPrimitive.Next asChild>\n <SmallIconButton tooltip=\"Next branch\" data-testid=\"chat-branch-next\">\n <ChevronRightIcon className=\"size-3\" />\n </SmallIconButton>\n </BranchPickerPrimitive.Next>\n </BranchPickerPrimitive.Root>\n);\n\nconst CopyActionButton: FC = () => (\n <ActionBarPrimitive.Copy asChild>\n <SmallIconButton tooltip=\"Copy\">\n <AuiIf condition={(state) => state.message.isCopied}>\n <CheckIcon className=\"size-3\" />\n </AuiIf>\n <AuiIf condition={(state) => !state.message.isCopied}>\n <CopyIcon className=\"size-3\" />\n </AuiIf>\n </SmallIconButton>\n </ActionBarPrimitive.Copy>\n);\n\n/**\n * The edit primitive does not check the runtime's edit capability itself —\n * clicking it on a runtime without one throws inside onPress, where no error\n * boundary can catch it — so the button must gate on the capability and, to\n * match the rewind semantics of `run/edit`, stay hidden while a run is live.\n * The read-only context covers threads the capability flags cannot: a host's\n * static `edit: true` still applies to fenced legacy conversations.\n */\nconst EditActionButton: FC = () => {\n const allowEdit = useAuiState((s) => s.thread.capabilities.edit);\n const isRunning = useAthenaRunLive();\n const readOnly = useMessageActionsReadOnly();\n if (!allowEdit || isRunning || readOnly) return null;\n return (\n <ActionBarPrimitive.Edit asChild>\n <SmallIconButton tooltip=\"Edit\" data-testid=\"chat-message-edit\">\n <PencilIcon className=\"size-3\" />\n </SmallIconButton>\n </ActionBarPrimitive.Edit>\n );\n};\n\n/** Regenerate dispatches `run/reload`, so it hides on read-only threads too. */\nconst RegenerateActionButton: FC = () => {\n const readOnly = useMessageActionsReadOnly();\n if (readOnly) return null;\n return (\n <ActionBarPrimitive.Reload asChild>\n <SmallIconButton tooltip=\"Regenerate\">\n <RefreshCwIcon className=\"size-3\" />\n </SmallIconButton>\n </ActionBarPrimitive.Reload>\n );\n};\n\n/**\n * Reveal-on-demand treatment for action bars: invisible and click-through\n * until the surrounding named group is hovered or a control inside receives\n * keyboard focus. The `focus-within` escape hatch is what keeps the hidden\n * controls reachable for keyboard users.\n */\nconst ACTION_BAR_REVEAL_CLASS =\n \"pointer-events-none opacity-0 transition-opacity focus-within:pointer-events-auto focus-within:opacity-100\";\n\n/** Shared chat body; the reveal holds incomplete links until their URL is complete. */\nexport const MarkdownText: FC = () => {\n const revealed = useSmooth(useMessagePartText(), true);\n const isRunning = revealed.status.type === \"running\";\n const text = isRunning ? hideUnterminatedMarkdownLink(revealed.text) : revealed.text;\n return <ChatMessageBody text={text} isRunning={isRunning} />;\n};\n\nconst UserActionBar: FC = () => (\n <ActionBarPrimitive.Root\n autohide=\"never\"\n className={cn(\n \"flex min-h-6 items-center gap-0.5\",\n ACTION_BAR_REVEAL_CLASS,\n \"group-hover/user-message:pointer-events-auto group-hover/user-message:opacity-100\",\n )}\n >\n <CopyActionButton />\n <EditActionButton />\n </ActionBarPrimitive.Root>\n);\n\nexport const UserMessage: FC = () => {\n // A voice delegation's anchor is the ask the live voice model handed to the\n // thread, not words the user typed: it renders as the shared voice-task\n // card on every host instead of a second user bubble under the spoken turn.\n const isVoiceDelegation = useAuiState((s) =>\n isVoiceDelegationMessage({ messageId: s.message.id, custom: s.message.metadata?.custom }),\n );\n if (isVoiceDelegation) {\n return (\n <MessagePrimitive.Root data-message-role=\"user\" className=\"mb-3\">\n <VoiceDelegationMessage />\n </MessagePrimitive.Root>\n );\n }\n return (\n <MessagePrimitive.Root\n data-message-role=\"user\"\n className=\"group/user-message mb-3 flex justify-end\"\n >\n <div className=\"flex min-w-0 max-w-[85%] flex-col items-end gap-1\">\n <div className=\"min-w-0 max-w-full rounded-2xl rounded-br-md bg-muted px-3.5 py-2 text-sm text-foreground\">\n <MessagePrimitive.Content components={{ Text: MarkdownText }} />\n </div>\n <div className=\"flex min-h-6 items-center gap-1\">\n <BranchPicker />\n <UserActionBar />\n </div>\n </div>\n </MessagePrimitive.Root>\n );\n};\n\nexport interface CreateAssistantMessageOptions {\n /** Host-registered card for tools without a dedicated UI. */\n toolFallback: ToolCallMessagePartComponent;\n /** Extra action-bar controls appended after copy/regenerate. */\n extraActions?: ReactNode;\n /**\n * Renders the message body. Hosts that group content into activity\n * timelines supply their own; the default renders markdown and tool cards.\n */\n content?: FC;\n /**\n * Inline affordance rendered inside a runtime-ending card (e.g. a Continue\n * button). Hosts without one leave it unset.\n */\n runtimeMessageAction?: ReactNode;\n}\n\n/**\n * Builds the assistant bubble. Call this once per host (memoized on its\n * inputs) so the returned component identity stays stable across renders.\n */\nexport function createAssistantMessage({\n toolFallback,\n extraActions,\n content: Content,\n runtimeMessageAction,\n}: CreateAssistantMessageOptions): FC {\n const AssistantActionBar: FC = () => {\n // The latest reply keeps its actions visible; older replies reveal them\n // on hover so a long transcript is not a wall of icon rows.\n const isLast = useAuiState((s) => s.message.isLast);\n return (\n <ActionBarPrimitive.Root\n autohide=\"never\"\n className={cn(\n \"mt-1 flex min-h-6 items-center gap-0.5\",\n !isLast && [\n ACTION_BAR_REVEAL_CLASS,\n \"group-hover/assistant-message:pointer-events-auto group-hover/assistant-message:opacity-100\",\n ],\n )}\n >\n <CopyActionButton />\n <RegenerateActionButton />\n {extraActions}\n </ActionBarPrimitive.Root>\n );\n };\n\n // A run-lifecycle marker or handoff summary is a system event, not\n // assistant speech. When it owns the whole row, render the status card in\n // place of the bubble; when it is chunked in with the assistant's own work\n // (or is a handoff whose text IS the closing summary), keep the body and\n // frame it with the card above.\n const RuntimeEnding: FC<{ placement: \"row\" | \"banner\" }> = ({ placement }) => {\n // Select the message (a stable store reference) and derive from it: the\n // reader allocates a fresh object per call, and `useAuiState` compares\n // snapshots with `Object.is`, so selecting the reader's result directly\n // would re-render on every store update and trip React's update-depth\n // guard.\n const message = useAuiState((s) => s.message);\n const runtime = useMemo(() => readRuntimeMessageFromSourceMessages(message), [message]);\n if (!runtime || runtime.silent) return null;\n if (placement === \"row\" && !runtime.isSoleSourceMessage) return null;\n if (placement === \"banner\" && runtime.isSoleSourceMessage && runtime.kind !== \"handoff\") {\n return null;\n }\n return <RuntimeMessageCard message={runtime} action={runtimeMessageAction} />;\n };\n\n const AssistantMessage: FC = () => {\n // An assistant row exists before its first token streams; showing\n // copy/regenerate against nothing looks broken, so wait for content.\n const showActions = useAuiState((state) =>\n hasVisibleContent(state.message.content),\n );\n // Primitive selector: the reader builds a fresh object per call.\n const soleRuntimeKind = useAuiState((s) => readSoleRuntimeMessageKind(s.message));\n const soleRuntimeSilent = useAuiState(\n (s) => readRuntimeMessageFromSourceMessages(s.message)?.silent === true,\n );\n\n if (soleRuntimeKind && soleRuntimeKind !== \"handoff\") {\n if (soleRuntimeSilent) return null;\n return (\n <MessagePrimitive.Root\n data-message-role=\"assistant\"\n className=\"group group/assistant-message mb-3\"\n >\n <div className=\"max-w-[95%]\">\n <RuntimeEnding placement=\"row\" />\n </div>\n </MessagePrimitive.Root>\n );\n }\n\n return (\n <MessagePrimitive.Root\n data-message-role=\"assistant\"\n className=\"group group/assistant-message mb-3\"\n >\n <div className=\"max-w-[95%]\">\n <RuntimeEnding placement=\"banner\" />\n {Content ? (\n <Content />\n ) : (\n <MessagePrimitive.Content\n components={{\n Text: MarkdownText,\n tools: { Fallback: toolFallback },\n }}\n />\n )}\n {showActions ? (\n <div className=\"flex min-h-6 items-center gap-1\">\n <BranchPicker />\n <AssistantActionBar />\n </div>\n ) : null}\n </div>\n </MessagePrimitive.Root>\n );\n };\n\n return AssistantMessage;\n}\n\n/** Panel chrome: the thread card and the header row that sits inside it. */\nexport const THREAD_PANEL_CLASS =\n \"m-1 flex min-h-0 flex-1 flex-col overflow-hidden rounded-[18px] border border-dashed border-amber-500 bg-background shadow-[0_1px_10px_rgba(54,45,33,0.08)]\";\nexport const THREAD_HEADER_CLASS =\n \"flex items-center justify-between gap-2 px-3 py-2\";\nexport const THREAD_HEADER_ACTIONS_CLASS =\n \"flex min-w-0 items-center justify-end gap-1.5\";\n/** Pill used for the header's leading control (agent picker, host label). */\nexport const THREAD_HEADER_PILL_CLASS =\n \"inline-flex h-7 max-w-[170px] items-center gap-1.5 rounded-md border border-neutral-200 bg-white px-2 text-xs font-medium text-neutral-800 shadow-sm\";\nexport const THREAD_HEADER_ICON_CLASS = \"size-[18px]\";\n\n/** Composer chrome: the dock around the composer, its surface and its rows. */\nexport const COMPOSER_DOCK_CLASS = \"bg-background px-2.5 pb-2 pt-1.5\";\nexport const COMPOSER_SURFACE_CLASS =\n \"relative flex flex-col gap-1 rounded-xl border border-neutral-200 bg-white shadow-[0_2px_10px_rgba(54,45,33,0.08)]\";\nexport const COMPOSER_EDITOR_ROW_CLASS = \"px-2.5 pt-1\";\nexport const COMPOSER_TOOLBAR_CLASS =\n \"flex items-center gap-1 border-t border-neutral-100 px-2 py-1.5\";\nexport const THREAD_SCROLL_TO_BOTTOM_CLASS =\n \"inline-flex items-center justify-center rounded-full border bg-background/80 p-1 shadow-sm backdrop-blur transition-opacity hover:bg-accent disabled:invisible\";\n\nconst ComposerStopIcon: FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"size-4\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n >\n <rect width=\"10\" height=\"10\" x=\"3\" y=\"3\" rx=\"2\" />\n </svg>\n);\n\nexport interface ComposerStopButtonProps {\n onStop: () => void;\n disabled?: boolean;\n title?: string;\n}\n\nexport interface ComposerSendButtonProps {\n action: Extract<ComposerAction, \"send\" | \"queue\">;\n onSend: () => void;\n disabled?: boolean;\n title?: string;\n}\n\n/** Stop control shown while a run is in flight and there is nothing queued. */\nexport const ComposerStopButton: FC<ComposerStopButtonProps> = ({\n onStop,\n disabled = false,\n title = \"Stop generation\",\n}) => (\n <button\n type=\"button\"\n onClick={onStop}\n disabled={disabled}\n title={title}\n className={cn(\n \"inline-flex size-8 shrink-0 items-center justify-center rounded-lg bg-foreground text-background shadow-sm transition-colors hover:bg-foreground/80\",\n disabled && \"cursor-not-allowed opacity-60\",\n )}\n >\n <ComposerStopIcon />\n </button>\n);\n/** Send control, which becomes a queue control while a run is in flight. */\nexport const ComposerSendButton: FC<ComposerSendButtonProps> = ({\n action,\n onSend,\n disabled = false,\n title,\n}) => (\n <button\n type=\"button\"\n onClick={onSend}\n disabled={disabled}\n title={title ?? (action === \"queue\" ? \"Queue message\" : \"Send\")}\n className={cn(\n \"inline-flex size-8 shrink-0 items-center justify-center rounded-full shadow-sm transition-colors\",\n disabled\n ? \"cursor-not-allowed bg-muted text-muted-foreground opacity-60\"\n : \"bg-foreground text-background hover:bg-foreground/80\",\n )}\n >\n {action === \"queue\" ? (\n <ListPlusIcon className=\"size-4\" />\n ) : (\n <ArrowUpIcon className=\"size-4\" />\n )}\n </button>\n);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAkE;AAChE,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,OAAO;AAAA,MACP,cAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEH;AAAA,IAAA;AAAA,EAAA;AAGP;AAEO,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAkE;AAChE,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,OAAO;AAAA,MACP,cAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEH;AAAA,IAAA;AAAA,EAAA;AAGP;AAEO,MAAM,eAAmB,MAC9B;AAAA,EAAC,sBAAsB;AAAA,EAAtB;AAAA,IACC,sBAAoB;AAAA,IACpB,WAAU;AAAA,IACV,eAAY;AAAA,IAEZ,UAAA;AAAA,MAAA,oBAAC,sBAAsB,UAAtB,EAA+B,SAAO,MACrC,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,eAAY;AAAA,UAEZ,UAAA,oBAAC,iBAAA,EAAgB,WAAU,SAAA,CAAS;AAAA,QAAA;AAAA,MAAA,GAExC;AAAA,MACA,qBAAC,QAAA,EAAK,WAAU,eAAc,eAAY,qBACxC,UAAA;AAAA,QAAA,oBAAC,sBAAsB,QAAtB,EAA6B;AAAA,QAAE;AAAA,QAAG,oBAAC,sBAAsB,OAAtB,CAAA,CAA4B;AAAA,MAAA,GAClE;AAAA,0BACC,sBAAsB,MAAtB,EAA2B,SAAO,MACjC,UAAA,oBAAC,iBAAA,EAAgB,SAAQ,eAAc,eAAY,oBACjD,UAAA,oBAAC,oBAAiB,WAAU,UAAS,GACvC,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AACF;AAGF,MAAM,mBAAuB,MAC3B,oBAAC,mBAAmB,MAAnB,EAAwB,SAAO,MAC9B,UAAA,qBAAC,iBAAA,EAAgB,SAAQ,QACvB,UAAA;AAAA,EAAA,oBAAC,OAAA,EAAM,WAAW,CAAC,UAAU,MAAM,QAAQ,UACzC,UAAA,oBAAC,WAAA,EAAU,WAAU,SAAA,CAAS,GAChC;AAAA,EACA,oBAAC,OAAA,EAAM,WAAW,CAAC,UAAU,CAAC,MAAM,QAAQ,UAC1C,UAAA,oBAAC,UAAA,EAAS,WAAU,UAAS,EAAA,CAC/B;AAAA,EAAA,CACF,EAAA,CACF;AAWF,MAAM,mBAAuB,MAAM;AACjC,QAAM,YAAY,YAAY,CAAC,MAAM,EAAE,OAAO,aAAa,IAAI;AAC/D,QAAM,YAAY,iBAAA;AAClB,QAAM,WAAW,0BAAA;AACjB,MAAI,CAAC,aAAa,aAAa,SAAU,QAAO;AAChD,6BACG,mBAAmB,MAAnB,EAAwB,SAAO,MAC9B,UAAA,oBAAC,iBAAA,EAAgB,SAAQ,QAAO,eAAY,qBAC1C,UAAA,oBAAC,cAAW,WAAU,SAAA,CAAS,GACjC,GACF;AAEJ;AAGA,MAAM,yBAA6B,MAAM;AACvC,QAAM,WAAW,0BAAA;AACjB,MAAI,SAAU,QAAO;AACrB,SACE,oBAAC,mBAAmB,QAAnB,EAA0B,SAAO,MAChC,UAAA,oBAAC,iBAAA,EAAgB,SAAQ,cACvB,UAAA,oBAAC,eAAA,EAAc,WAAU,SAAA,CAAS,GACpC,GACF;AAEJ;AAQA,MAAM,0BACJ;AAGK,MAAM,eAAmB,MAAM;AACpC,QAAM,WAAW,UAAU,mBAAA,GAAsB,IAAI;AACrD,QAAM,YAAY,SAAS,OAAO,SAAS;AAC3C,QAAM,OAAO,YAAY,6BAA6B,SAAS,IAAI,IAAI,SAAS;AAChF,SAAO,oBAAC,iBAAA,EAAgB,MAAY,UAAA,CAAsB;AAC5D;AAEA,MAAM,gBAAoB,MACxB;AAAA,EAAC,mBAAmB;AAAA,EAAnB;AAAA,IACC,UAAS;AAAA,IACT,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAGF,UAAA;AAAA,MAAA,oBAAC,kBAAA,EAAiB;AAAA,0BACjB,kBAAA,CAAA,CAAiB;AAAA,IAAA;AAAA,EAAA;AACpB;AAGK,MAAM,cAAkB,MAAM;AAInC,QAAM,oBAAoB;AAAA,IAAY,CAAC,MAAA;;AACrC,sCAAyB,EAAE,WAAW,EAAE,QAAQ,IAAI,SAAQ,OAAE,QAAQ,aAAV,mBAAoB,QAAQ;AAAA;AAAA,EAAA;AAE1F,MAAI,mBAAmB;AACrB,WACE,oBAAC,iBAAiB,MAAjB,EAAsB,qBAAkB,QAAO,WAAU,QACxD,UAAA,oBAAC,wBAAA,CAAA,CAAuB,EAAA,CAC1B;AAAA,EAEJ;AACA,SACE;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,qBAAkB;AAAA,MAClB,WAAU;AAAA,MAEV,UAAA,qBAAC,OAAA,EAAI,WAAU,qDACb,UAAA;AAAA,QAAA,oBAAC,OAAA,EAAI,WAAU,6FACb,UAAA,oBAAC,iBAAiB,SAAjB,EAAyB,YAAY,EAAE,MAAM,aAAA,EAAa,CAAG,EAAA,CAChE;AAAA,QACA,qBAAC,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,UAAA,oBAAC,cAAA,EAAa;AAAA,8BACb,eAAA,CAAA,CAAc;AAAA,QAAA,EAAA,CACjB;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAuBO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AACF,GAAsC;AACpC,QAAM,qBAAyB,MAAM;AAGnC,UAAM,SAAS,YAAY,CAAC,MAAM,EAAE,QAAQ,MAAM;AAClD,WACE;AAAA,MAAC,mBAAmB;AAAA,MAAnB;AAAA,QACC,UAAS;AAAA,QACT,WAAW;AAAA,UACT;AAAA,UACA,CAAC,UAAU;AAAA,YACT;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAAA,QAGF,UAAA;AAAA,UAAA,oBAAC,kBAAA,EAAiB;AAAA,8BACjB,wBAAA,EAAuB;AAAA,UACvB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AAOA,QAAM,gBAAqD,CAAC,EAAE,gBAAgB;AAM5E,UAAM,UAAU,YAAY,CAAC,MAAM,EAAE,OAAO;AAC5C,UAAM,UAAU,QAAQ,MAAM,qCAAqC,OAAO,GAAG,CAAC,OAAO,CAAC;AACtF,QAAI,CAAC,WAAW,QAAQ,OAAQ,QAAO;AACvC,QAAI,cAAc,SAAS,CAAC,QAAQ,oBAAqB,QAAO;AAChE,QAAI,cAAc,YAAY,QAAQ,uBAAuB,QAAQ,SAAS,WAAW;AACvF,aAAO;AAAA,IACT;AACA,WAAO,oBAAC,oBAAA,EAAmB,SAAS,SAAS,QAAQ,sBAAsB;AAAA,EAC7E;AAEA,QAAM,mBAAuB,MAAM;AAGjC,UAAM,cAAc;AAAA,MAAY,CAAC,UAC/B,kBAAkB,MAAM,QAAQ,OAAO;AAAA,IAAA;AAGzC,UAAM,kBAAkB,YAAY,CAAC,MAAM,2BAA2B,EAAE,OAAO,CAAC;AAChF,UAAM,oBAAoB;AAAA,MACxB,CAAC,MAAA;;AAAM,2DAAqC,EAAE,OAAO,MAA9C,mBAAiD,YAAW;AAAA;AAAA,IAAA;AAGrE,QAAI,mBAAmB,oBAAoB,WAAW;AACpD,UAAI,kBAAmB,QAAO;AAC9B,aACE;AAAA,QAAC,iBAAiB;AAAA,QAAjB;AAAA,UACC,qBAAkB;AAAA,UAClB,WAAU;AAAA,UAEV,UAAA,oBAAC,SAAI,WAAU,eACb,8BAAC,eAAA,EAAc,WAAU,OAAM,EAAA,CACjC;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAEA,WACE;AAAA,MAAC,iBAAiB;AAAA,MAAjB;AAAA,QACC,qBAAkB;AAAA,QAClB,WAAU;AAAA,QAEV,UAAA,qBAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,UAAA,oBAAC,eAAA,EAAc,WAAU,SAAA,CAAS;AAAA,UACjC,UACC,oBAAC,SAAA,CAAA,CAAQ,IAET;AAAA,YAAC,iBAAiB;AAAA,YAAjB;AAAA,cACC,YAAY;AAAA,gBACV,MAAM;AAAA,gBACN,OAAO,EAAE,UAAU,aAAA;AAAA,cAAa;AAAA,YAClC;AAAA,UAAA;AAAA,UAGH,cACC,qBAAC,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,YAAA,oBAAC,cAAA,EAAa;AAAA,gCACb,oBAAA,CAAA,CAAmB;AAAA,UAAA,EAAA,CACtB,IACE;AAAA,QAAA,EAAA,CACN;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAEA,SAAO;AACT;AAGO,MAAM,qBACX;AACK,MAAM,sBACX;AACK,MAAM,8BACX;AAEK,MAAM,2BACX;AACK,MAAM,2BAA2B;AAGjC,MAAM,sBAAsB;AAC5B,MAAM,yBACX;AACK,MAAM,4BAA4B;AAClC,MAAM,yBACX;AACK,MAAM,gCACX;AAEF,MAAM,mBAAuB,MAC3B;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAY;AAAA,IACZ,WAAU;AAAA,IACV,SAAQ;AAAA,IACR,MAAK;AAAA,IAEL,UAAA,oBAAC,QAAA,EAAK,OAAM,MAAK,QAAO,MAAK,GAAE,KAAI,GAAE,KAAI,IAAG,IAAA,CAAI;AAAA,EAAA;AAClD;AAiBK,MAAM,qBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA,WAAW;AAAA,EACX,QAAQ;AACV,MACE;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA,YAAY;AAAA,IAAA;AAAA,IAGd,8BAAC,kBAAA,CAAA,CAAiB;AAAA,EAAA;AACpB;AAGK,MAAM,qBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AACF,MACE;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA,OAAO,UAAU,WAAW,UAAU,kBAAkB;AAAA,IACxD,WAAW;AAAA,MACT;AAAA,MACA,WACI,iEACA;AAAA,IAAA;AAAA,IAGL,UAAA,WAAW,UACV,oBAAC,cAAA,EAAa,WAAU,UAAS,IAEjC,oBAAC,aAAA,EAAY,WAAU,SAAA,CAAS;AAAA,EAAA;AAEpC;"}
1
+ {"version":3,"file":"message-components.js","sources":["../../../src/chat-ui/messages/message-components.tsx"],"sourcesContent":["import {\n ActionBarPrimitive,\n AuiIf,\n BranchPickerPrimitive,\n MessagePrimitive,\n useAuiState,\n useMessagePartText,\n useSmooth,\n type ToolCallMessagePartComponent,\n} from \"@assistant-ui/react\";\nimport {\n hideUnterminatedMarkdownLink,\n isVoiceDelegationMessage,\n readRuntimeMessageFromSourceMessages,\n readSoleRuntimeMessageKind,\n} from \"@athenaintel/agent-runtime\";\nimport \"@assistant-ui/react-markdown/styles/dot.css\";\nimport {\n ArrowUpIcon,\n CheckIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n CopyIcon,\n ListPlusIcon,\n PencilIcon,\n RefreshCwIcon,\n} from \"lucide-react\";\nimport {\n type ButtonHTMLAttributes,\n type FC,\n type ReactNode,\n useMemo,\n} from \"react\";\nimport { useAthenaRunLive } from \"../../chat/use-athena-run-live\";\nimport type { ComposerAction } from \"../composer/composer-action\";\nimport { cn } from \"../../lib/utils\";\nimport { ChatMessageBody } from \"../rich-text/chat-message-body\";\nimport { useMessageActionsReadOnly } from \"./message-actions-config\";\nimport { RuntimeMessageCard } from \"./runtime-message\";\nimport { hasVisibleContent } from \"./running-indicator\";\nimport { VoiceDelegationMessage } from \"./voice-delegation-card\";\n\nexport function IconButton({\n children,\n tooltip,\n className,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement> & { tooltip: string }) {\n return (\n <button\n type=\"button\"\n title={tooltip}\n aria-label={tooltip}\n className={cn(\n \"inline-flex size-9 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent hover:text-foreground\",\n className,\n )}\n {...props}\n >\n {children}\n </button>\n );\n}\n\nexport function SmallIconButton({\n children,\n tooltip,\n className,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement> & { tooltip: string }) {\n return (\n <button\n type=\"button\"\n title={tooltip}\n aria-label={tooltip}\n className={cn(\n \"inline-flex size-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\",\n className,\n )}\n {...props}\n >\n {children}\n </button>\n );\n}\n\nexport const BranchPicker: FC = () => (\n <BranchPickerPrimitive.Root\n hideWhenSingleBranch\n className=\"inline-flex items-center gap-0.5 text-xs text-muted-foreground\"\n data-testid=\"chat-branch-picker\"\n >\n <BranchPickerPrimitive.Previous asChild>\n <SmallIconButton\n tooltip=\"Previous branch\"\n data-testid=\"chat-branch-previous\"\n >\n <ChevronLeftIcon className=\"size-3\" />\n </SmallIconButton>\n </BranchPickerPrimitive.Previous>\n <span className=\"font-medium\" data-testid=\"chat-branch-count\">\n <BranchPickerPrimitive.Number /> / <BranchPickerPrimitive.Count />\n </span>\n <BranchPickerPrimitive.Next asChild>\n <SmallIconButton tooltip=\"Next branch\" data-testid=\"chat-branch-next\">\n <ChevronRightIcon className=\"size-3\" />\n </SmallIconButton>\n </BranchPickerPrimitive.Next>\n </BranchPickerPrimitive.Root>\n);\n\nconst CopyActionButton: FC = () => (\n <ActionBarPrimitive.Copy asChild>\n <SmallIconButton tooltip=\"Copy\">\n <AuiIf condition={(state) => state.message.isCopied}>\n <CheckIcon className=\"size-3\" />\n </AuiIf>\n <AuiIf condition={(state) => !state.message.isCopied}>\n <CopyIcon className=\"size-3\" />\n </AuiIf>\n </SmallIconButton>\n </ActionBarPrimitive.Copy>\n);\n\n/**\n * The edit primitive does not check the runtime's edit capability itself —\n * clicking it on a runtime without one throws inside onPress, where no error\n * boundary can catch it — so the button must gate on the capability and, to\n * match the rewind semantics of `run/edit`, stay hidden while a run is live.\n * The read-only context covers threads the capability flags cannot: a host's\n * static `edit: true` still applies to fenced legacy conversations.\n */\nconst EditActionButton: FC = () => {\n const allowEdit = useAuiState((s) => s.thread.capabilities.edit);\n const isRunning = useAthenaRunLive();\n const readOnly = useMessageActionsReadOnly();\n if (!allowEdit || isRunning || readOnly) return null;\n return (\n <ActionBarPrimitive.Edit asChild>\n <SmallIconButton tooltip=\"Edit\" data-testid=\"chat-message-edit\">\n <PencilIcon className=\"size-3\" />\n </SmallIconButton>\n </ActionBarPrimitive.Edit>\n );\n};\n\n/** Regenerate dispatches `run/reload`, so it hides on read-only threads too. */\nconst RegenerateActionButton: FC = () => {\n const readOnly = useMessageActionsReadOnly();\n if (readOnly) return null;\n return (\n <ActionBarPrimitive.Reload asChild>\n <SmallIconButton tooltip=\"Regenerate\">\n <RefreshCwIcon className=\"size-3\" />\n </SmallIconButton>\n </ActionBarPrimitive.Reload>\n );\n};\n\n/**\n * Reveal-on-demand treatment for action bars: invisible and click-through\n * until the surrounding named group is hovered or a control inside receives\n * keyboard focus. The `focus-within` escape hatch is what keeps the hidden\n * controls reachable for keyboard users.\n */\nexport const ACTION_BAR_REVEAL_CLASS =\n \"pointer-events-none opacity-0 transition-opacity focus-within:pointer-events-auto focus-within:opacity-100\";\n\n/** Shared chat body; the reveal holds incomplete links until their URL is complete. */\nexport const MarkdownText: FC = () => {\n const revealed = useSmooth(useMessagePartText(), true);\n const isRunning = revealed.status.type === \"running\";\n const text = isRunning ? hideUnterminatedMarkdownLink(revealed.text) : revealed.text;\n return <ChatMessageBody text={text} isRunning={isRunning} />;\n};\n\nconst UserActionBar: FC = () => (\n <ActionBarPrimitive.Root\n autohide=\"never\"\n className={cn(\n \"flex min-h-6 items-center gap-0.5\",\n ACTION_BAR_REVEAL_CLASS,\n \"group-hover/user-message:pointer-events-auto group-hover/user-message:opacity-100\",\n )}\n >\n <CopyActionButton />\n <EditActionButton />\n </ActionBarPrimitive.Root>\n);\n\nexport const UserMessage: FC = () => {\n // A voice delegation's anchor is the ask the live voice model handed to the\n // thread, not words the user typed: it renders as the shared voice-task\n // card on every host instead of a second user bubble under the spoken turn.\n const isVoiceDelegation = useAuiState((s) =>\n isVoiceDelegationMessage({ messageId: s.message.id, custom: s.message.metadata?.custom }),\n );\n if (isVoiceDelegation) {\n return (\n <MessagePrimitive.Root data-message-role=\"user\" className=\"mb-3\">\n <VoiceDelegationMessage />\n </MessagePrimitive.Root>\n );\n }\n return (\n <MessagePrimitive.Root\n data-message-role=\"user\"\n className=\"group/user-message mb-3 flex justify-end\"\n >\n <div className=\"flex min-w-0 max-w-[85%] flex-col items-end gap-1\">\n <div className=\"min-w-0 max-w-full rounded-2xl rounded-br-md bg-muted px-3.5 py-2 text-sm text-foreground\">\n <MessagePrimitive.Content components={{ Text: MarkdownText }} />\n </div>\n <div className=\"flex min-h-6 items-center gap-1\">\n <BranchPicker />\n <UserActionBar />\n </div>\n </div>\n </MessagePrimitive.Root>\n );\n};\n\nexport interface CreateAssistantMessageOptions {\n /** Host-registered card for tools without a dedicated UI. */\n toolFallback: ToolCallMessagePartComponent;\n /** Extra action-bar controls appended after copy/regenerate. */\n extraActions?: ReactNode;\n /**\n * Renders the message body. Hosts that group content into activity\n * timelines supply their own; the default renders markdown and tool cards.\n */\n content?: FC;\n /**\n * Inline affordance rendered inside a runtime-ending card (e.g. a Continue\n * button). Hosts without one leave it unset.\n */\n runtimeMessageAction?: ReactNode;\n}\n\n/**\n * Builds the assistant bubble. Call this once per host (memoized on its\n * inputs) so the returned component identity stays stable across renders.\n */\nexport function createAssistantMessage({\n toolFallback,\n extraActions,\n content: Content,\n runtimeMessageAction,\n}: CreateAssistantMessageOptions): FC {\n const AssistantActionBar: FC = () => {\n // The latest reply keeps its actions visible; older replies reveal them\n // on hover so a long transcript is not a wall of icon rows.\n const isLast = useAuiState((s) => s.message.isLast);\n return (\n <ActionBarPrimitive.Root\n autohide=\"never\"\n className={cn(\n \"mt-1 flex min-h-6 items-center gap-0.5\",\n !isLast && [\n ACTION_BAR_REVEAL_CLASS,\n \"group-hover/assistant-message:pointer-events-auto group-hover/assistant-message:opacity-100\",\n ],\n )}\n >\n <CopyActionButton />\n <RegenerateActionButton />\n {extraActions}\n </ActionBarPrimitive.Root>\n );\n };\n\n // A run-lifecycle marker or handoff summary is a system event, not\n // assistant speech. When it owns the whole row, render the status card in\n // place of the bubble; when it is chunked in with the assistant's own work\n // (or is a handoff whose text IS the closing summary), keep the body and\n // frame it with the card above.\n const RuntimeEnding: FC<{ placement: \"row\" | \"banner\" }> = ({ placement }) => {\n // Select the message (a stable store reference) and derive from it: the\n // reader allocates a fresh object per call, and `useAuiState` compares\n // snapshots with `Object.is`, so selecting the reader's result directly\n // would re-render on every store update and trip React's update-depth\n // guard.\n const message = useAuiState((s) => s.message);\n const runtime = useMemo(() => readRuntimeMessageFromSourceMessages(message), [message]);\n if (!runtime || runtime.silent) return null;\n if (placement === \"row\" && !runtime.isSoleSourceMessage) return null;\n if (placement === \"banner\" && runtime.isSoleSourceMessage && runtime.kind !== \"handoff\") {\n return null;\n }\n return <RuntimeMessageCard message={runtime} action={runtimeMessageAction} />;\n };\n\n const AssistantMessage: FC = () => {\n // An assistant row exists before its first token streams; showing\n // copy/regenerate against nothing looks broken, so wait for content.\n const showActions = useAuiState((state) =>\n hasVisibleContent(state.message.content),\n );\n // Primitive selector: the reader builds a fresh object per call.\n const soleRuntimeKind = useAuiState((s) => readSoleRuntimeMessageKind(s.message));\n const soleRuntimeSilent = useAuiState(\n (s) => readRuntimeMessageFromSourceMessages(s.message)?.silent === true,\n );\n\n if (soleRuntimeKind && soleRuntimeKind !== \"handoff\") {\n if (soleRuntimeSilent) return null;\n return (\n <MessagePrimitive.Root\n data-message-role=\"assistant\"\n className=\"group group/assistant-message mb-3\"\n >\n <div className=\"max-w-[95%]\">\n <RuntimeEnding placement=\"row\" />\n </div>\n </MessagePrimitive.Root>\n );\n }\n\n return (\n <MessagePrimitive.Root\n data-message-role=\"assistant\"\n className=\"group group/assistant-message mb-3\"\n >\n <div className=\"max-w-[95%]\">\n <RuntimeEnding placement=\"banner\" />\n {Content ? (\n <Content />\n ) : (\n <MessagePrimitive.Content\n components={{\n Text: MarkdownText,\n tools: { Fallback: toolFallback },\n }}\n />\n )}\n {showActions ? (\n <div className=\"flex min-h-6 items-center gap-1\">\n <BranchPicker />\n <AssistantActionBar />\n </div>\n ) : null}\n </div>\n </MessagePrimitive.Root>\n );\n };\n\n return AssistantMessage;\n}\n\n/** Panel chrome: the thread card and the header row that sits inside it. */\nexport const THREAD_PANEL_CLASS =\n \"m-1 flex min-h-0 flex-1 flex-col overflow-hidden rounded-[18px] border border-dashed border-amber-500 bg-background shadow-[0_1px_10px_rgba(54,45,33,0.08)]\";\nexport const THREAD_HEADER_CLASS =\n \"flex items-center justify-between gap-2 px-3 py-2\";\nexport const THREAD_HEADER_ACTIONS_CLASS =\n \"flex min-w-0 items-center justify-end gap-1.5\";\n/** Pill used for the header's leading control (agent picker, host label). */\nexport const THREAD_HEADER_PILL_CLASS =\n \"inline-flex h-7 max-w-[170px] items-center gap-1.5 rounded-md border border-neutral-200 bg-white px-2 text-xs font-medium text-neutral-800 shadow-sm\";\nexport const THREAD_HEADER_ICON_CLASS = \"size-[18px]\";\n\n/** Composer chrome: the dock around the composer, its surface and its rows. */\nexport const COMPOSER_DOCK_CLASS = \"bg-background px-2.5 pb-2 pt-1.5\";\nexport const COMPOSER_SURFACE_CLASS =\n \"relative flex flex-col gap-1 rounded-xl border border-neutral-200 bg-white shadow-[0_2px_10px_rgba(54,45,33,0.08)]\";\nexport const COMPOSER_EDITOR_ROW_CLASS = \"px-2.5 pt-1\";\nexport const COMPOSER_TOOLBAR_CLASS =\n \"flex items-center gap-1 border-t border-neutral-100 px-2 py-1.5\";\nexport const THREAD_SCROLL_TO_BOTTOM_CLASS =\n \"inline-flex items-center justify-center rounded-full border bg-background/80 p-1 shadow-sm backdrop-blur transition-opacity hover:bg-accent disabled:invisible\";\n\nconst ComposerStopIcon: FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"size-4\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n >\n <rect width=\"10\" height=\"10\" x=\"3\" y=\"3\" rx=\"2\" />\n </svg>\n);\n\nexport interface ComposerStopButtonProps {\n onStop: () => void;\n disabled?: boolean;\n title?: string;\n}\n\nexport interface ComposerSendButtonProps {\n action: Extract<ComposerAction, \"send\" | \"queue\">;\n onSend: () => void;\n disabled?: boolean;\n title?: string;\n}\n\n/** Stop control shown while a run is in flight and there is nothing queued. */\nexport const ComposerStopButton: FC<ComposerStopButtonProps> = ({\n onStop,\n disabled = false,\n title = \"Stop generation\",\n}) => (\n <button\n type=\"button\"\n onClick={onStop}\n disabled={disabled}\n title={title}\n className={cn(\n \"inline-flex size-8 shrink-0 items-center justify-center rounded-lg bg-foreground text-background shadow-sm transition-colors hover:bg-foreground/80\",\n disabled && \"cursor-not-allowed opacity-60\",\n )}\n >\n <ComposerStopIcon />\n </button>\n);\n/** Send control, which becomes a queue control while a run is in flight. */\nexport const ComposerSendButton: FC<ComposerSendButtonProps> = ({\n action,\n onSend,\n disabled = false,\n title,\n}) => (\n <button\n type=\"button\"\n onClick={onSend}\n disabled={disabled}\n title={title ?? (action === \"queue\" ? \"Queue message\" : \"Send\")}\n className={cn(\n \"inline-flex size-8 shrink-0 items-center justify-center rounded-full shadow-sm transition-colors\",\n disabled\n ? \"cursor-not-allowed bg-muted text-muted-foreground opacity-60\"\n : \"bg-foreground text-background hover:bg-foreground/80\",\n )}\n >\n {action === \"queue\" ? (\n <ListPlusIcon className=\"size-4\" />\n ) : (\n <ArrowUpIcon className=\"size-4\" />\n )}\n </button>\n);\n"],"names":[],"mappings":"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"}
@@ -28,7 +28,6 @@ const CATEGORY_EMOJI = {
28
28
  Ontology: "🗂️",
29
29
  "Task Studio": "📜",
30
30
  "Project Manager": "📋",
31
- VM: "🖥️",
32
31
  Agent: "🤖",
33
32
  Files: "📁",
34
33
  Media: "📸",
@@ -1067,19 +1066,6 @@ const TOOL_DISPLAY_META = {
1067
1066
  category: "Computer",
1068
1067
  icon: "monitor"
1069
1068
  },
1070
- create_virtual_machine_session: {
1071
- displayName: "Create VM",
1072
- activeLabel: "Creating virtual machine",
1073
- category: "VM",
1074
- icon: "cpu"
1075
- },
1076
- vm_use_agent: {
1077
- displayName: "VM Agent",
1078
- activeLabel: "Running VM agent",
1079
- category: "VM",
1080
- icon: "bot",
1081
- emoji: "🤖"
1082
- },
1083
1069
  // ── External drives ──
1084
1070
  search_sharepoint: {
1085
1071
  displayName: "Search SharePoint",
@@ -1 +1 @@
1
- {"version":3,"file":"tool-metadata.cjs","sources":["../../../../../agent-runtime/src/tool-metadata.ts"],"sourcesContent":["/**\n * Tool display metadata — the one registry of how a backend tool is presented\n * to a person: its noun label, its present-tense activity, its category, its\n * icon (as a key the UI layer maps to an icon component), its emoji for\n * text-only surfaces, and how to summarize a call from its arguments.\n *\n * Every tool card, activity timeline, and approval summary on every surface\n * (the React SDK, Olympus, the Chrome extension, the Office add-in, mobile)\n * reads from here, so a tool cannot be \"Web Search\" on one screen and\n * \"Searching the web\" plus a different icon on another. React-free on purpose:\n * mobile shares it, and icon *components* are the UI layer's business.\n *\n * Unknown names never fail: {@link getToolDisplayMeta} derives a readable\n * default from the name, so a new backend tool renders acceptably before it\n * has an entry here. Add the entry when the default copy is not good enough.\n */\n\nexport type ToolCategory =\n | 'Web'\n | 'Email'\n | 'Document'\n | 'Spreadsheet'\n | 'SQL'\n | 'Database'\n | 'Python'\n | 'Spaces'\n | 'Visualization'\n | 'Canvas'\n | 'Presentation'\n | 'UI'\n | 'Notebook'\n | 'AOP'\n | 'Browser'\n | 'Computer'\n | 'Drive'\n | 'Comments'\n | 'Meetings'\n | 'Analysis'\n | 'Memory'\n | 'Brand'\n | 'Playbook'\n | 'GitHub'\n | 'Ontology'\n | 'Task Studio'\n | 'Project Manager'\n | 'VM'\n | 'Agent'\n | 'Files'\n | 'Media'\n | 'Integrations'\n | 'Tool';\n\n/** Icon identifiers the UI layer maps to icon components (lucide on web). */\nexport type ToolIconKey =\n | 'search'\n | 'globe'\n | 'mail'\n | 'calendar'\n | 'file-text'\n | 'pen-line'\n | 'bar-chart'\n | 'table'\n | 'presentation'\n | 'monitor'\n | 'code'\n | 'terminal'\n | 'database'\n | 'book-open'\n | 'brain'\n | 'folder-open'\n | 'folder'\n | 'save'\n | 'wrench'\n | 'image'\n | 'camera'\n | 'trending-up'\n | 'palette'\n | 'microscope'\n | 'message-square'\n | 'hard-drive'\n | 'git-pull-request'\n | 'boxes'\n | 'scroll-text'\n | 'clipboard-list'\n | 'cpu'\n | 'bot'\n | 'link'\n | 'package'\n | 'play'\n | 'trash'\n | 'star'\n | 'sparkles'\n | 'list-checks'\n | 'mouse-pointer'\n | 'scan-search'\n | 'settings'\n | 'phone'\n | 'video'\n | 'users'\n | 'layout-dashboard'\n | 'workflow'\n | 'circle-help'\n | 'flag'\n | 'hash';\n\n/** Summarize a call from its arguments in one line, or nothing when there is nothing salient. */\nexport type ToolArgsDescriber = (args: Record<string, unknown>) => string | undefined;\n\nexport interface ToolDisplayMeta {\n /** Noun label for headers, lists, and completed rows (\"Web Search\"). */\n displayName: string;\n /** Present-tense activity for a running call, without trailing punctuation (\"Searching the web\"). */\n activeLabel: string;\n /**\n * Completed-row copy when the product wording is not the past tense of\n * `activeLabel` (\"Web search complete\"); {@link toolStatusLabel} derives\n * the past tense when this is absent.\n */\n completedLabel?: string;\n /** Copy for a call the user declined at an approval gate (\"Email not sent (rejected)\"). */\n rejectedLabel?: string;\n category: ToolCategory;\n icon: ToolIconKey;\n /** Emoji for text-only surfaces (mobile rows, notifications). */\n emoji: string;\n /** One-line detail from the call's arguments, for a subtitle or the running label. */\n describe?: ToolArgsDescriber;\n /**\n * The tool is not something a person picks — a runtime internal (deepagents\n * built-ins) or a nested SDK sub-call surfaced by programmatic tool calling.\n * Hosts leave these out of tool menus and mention pickers; they still render.\n */\n internal?: boolean;\n}\n\n/** A registry entry; `emoji` defaults to the category's. */\nexport type ToolDisplayMetaEntry = Omit<ToolDisplayMeta, 'emoji'> & { emoji?: string };\n\nexport const CATEGORY_EMOJI: Record<ToolCategory, string> = {\n Web: '🌐',\n Email: '📧',\n Document: '📄',\n Spreadsheet: '📊',\n SQL: '🗄️',\n Database: '🗄️',\n Python: '🐍',\n Spaces: '📂',\n Visualization: '📊',\n Canvas: '🎨',\n Presentation: '📽️',\n UI: '🖥️',\n Notebook: '📓',\n AOP: '📋',\n Browser: '🌐',\n Computer: '💻',\n Drive: '💾',\n Comments: '💬',\n Meetings: '📅',\n Analysis: '🔬',\n Memory: '💾',\n Brand: '🎨',\n Playbook: '📘',\n GitHub: '🔀',\n Ontology: '🗂️',\n 'Task Studio': '📜',\n 'Project Manager': '📋',\n VM: '🖥️',\n Agent: '🤖',\n Files: '📁',\n Media: '📸',\n Integrations: '🔌',\n Tool: '🔧',\n};\n\nconst DEFAULT_EMOJI = CATEGORY_EMOJI.Tool;\n\n// ─── Describers ───────────────────────────────────────────────────────\n\nfunction nonBlank(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nfunction quoted(value: string | undefined): string | undefined {\n return value === undefined ? undefined : `\"${value}\"`;\n}\n\n/** Collapse whitespace to a single-line summary capped at `max` chars. */\nexport function truncateLine(text: string, max = 70): string {\n const oneLine = text.replace(/\\s+/g, ' ').trim();\n return oneLine.length > max ? `${oneLine.slice(0, max)}...` : oneLine;\n}\n\n/** The search term a call carries (`query` / `search_query` / `term`), quoted. */\nexport const describeQuery: ToolArgsDescriber = (args) =>\n quoted(nonBlank(args.query) ?? nonBlank(args.search_query) ?? nonBlank(args.term));\n\n/** The URL a call targets. */\nexport const describeUrl: ToolArgsDescriber = (args) => nonBlank(args.url);\n\n/** The name a call creates or targets (`field`, falling back to `title`), quoted. */\nexport function describeNamed(field = 'name'): ToolArgsDescriber {\n return (args) => quoted(nonBlank(args[field]) ?? nonBlank(args.title));\n}\n\n/** The SQL a call runs (`sql_query` / `query` / `sql`), on one line, quoted. */\nexport const describeSql: ToolArgsDescriber = (args) => {\n const sql = nonBlank(args.sql_query) ?? nonBlank(args.query) ?? nonBlank(args.sql);\n return sql === undefined ? undefined : quoted(truncateLine(sql));\n};\n\n/** A spreadsheet range plus the call's own explanation of the edit. */\nexport const describeRange: ToolArgsDescriber = (args) => {\n const range = nonBlank(args.range);\n const explanation = nonBlank(args.explanation);\n if (range && explanation) return `${range}: ${truncateLine(explanation)}`;\n return range ?? (explanation ? truncateLine(explanation) : undefined);\n};\n\nexport const describeTable: ToolArgsDescriber = (args) => nonBlank(args.table_name);\n\nexport const describePackage: ToolArgsDescriber = (args) =>\n nonBlank(args.package_name) ?? nonBlank(args.package);\n\n/** A workspace file path (`file_path` / `path`). */\nexport const describePath: ToolArgsDescriber = (args) =>\n nonBlank(args.file_path) ?? nonBlank(args.path);\n\n/** The subagent a delegation targets and what it was asked, on one line. */\nexport const describeDelegation: ToolArgsDescriber = (args) => {\n const subagent = nonBlank(args.subagent_type);\n const description = nonBlank(args.description);\n if (subagent && description) return `${subagent}: ${truncateLine(description)}`;\n return subagent ?? (description ? truncateLine(description) : undefined);\n};\n\n// ─── Registry ─────────────────────────────────────────────────────────\n\n/**\n * Keyed by the tool name as it appears on the wire. Grouped by category;\n * within a group, aliases of one capability share copy so history renders the\n * same whatever name the backend used that day.\n */\nexport const TOOL_DISPLAY_META: Record<string, ToolDisplayMetaEntry> = {\n // ── Web search & browse ──\n search: {\n displayName: 'Web Search',\n activeLabel: 'Searching the web',\n completedLabel: 'Web search complete',\n category: 'Web',\n icon: 'search',\n emoji: '🔍',\n describe: describeQuery,\n },\n exa_search: {\n displayName: 'Web Search',\n activeLabel: 'Searching the web',\n category: 'Web',\n icon: 'search',\n emoji: '🔍',\n describe: describeQuery,\n },\n perplexity_search: {\n displayName: 'Web Search',\n activeLabel: 'Searching the web',\n category: 'Web',\n icon: 'search',\n emoji: '🔍',\n describe: describeQuery,\n },\n grounded_search: {\n displayName: 'Grounded Search',\n activeLabel: 'Searching',\n category: 'Web',\n icon: 'search',\n emoji: '🔍',\n describe: describeQuery,\n },\n deep_research: {\n displayName: 'Deep Research',\n activeLabel: 'Researching',\n category: 'Web',\n icon: 'microscope',\n emoji: '🔬',\n describe: describeQuery,\n },\n browse: {\n displayName: 'Browse Web Page',\n activeLabel: 'Reading webpage',\n completedLabel: 'Read webpage',\n category: 'Web',\n icon: 'globe',\n describe: describeUrl,\n },\n open_browser: {\n displayName: 'Open Browser',\n activeLabel: 'Opening browser',\n category: 'Web',\n icon: 'globe',\n describe: describeUrl,\n },\n map_urls_in_website: {\n displayName: 'Map Website',\n activeLabel: 'Mapping website',\n category: 'Web',\n icon: 'globe',\n describe: describeUrl,\n },\n track_website_changes: {\n displayName: 'Track Website Changes',\n activeLabel: 'Tracking website changes',\n category: 'Web',\n icon: 'globe',\n describe: describeUrl,\n },\n get_youtube_transcript: {\n displayName: 'YouTube Transcript',\n activeLabel: 'Fetching transcript',\n category: 'Web',\n icon: 'video',\n emoji: '🎬',\n describe: describeUrl,\n },\n\n // ── Email & calendar ──\n search_email: {\n displayName: 'Search Email',\n activeLabel: 'Searching email',\n completedLabel: 'Email search complete',\n category: 'Email',\n icon: 'mail',\n describe: describeQuery,\n },\n unified_email_search: {\n displayName: 'Search Email',\n activeLabel: 'Searching email',\n completedLabel: 'Email search complete',\n category: 'Email',\n icon: 'mail',\n describe: describeQuery,\n },\n search_gmail: {\n displayName: 'Search Email',\n activeLabel: 'Searching emails',\n category: 'Email',\n icon: 'mail',\n describe: describeQuery,\n },\n send_direct_email: {\n displayName: 'Send Email',\n activeLabel: 'Sending email',\n category: 'Email',\n icon: 'mail',\n emoji: '📤',\n },\n unified_email_send: {\n displayName: 'Send Email',\n activeLabel: 'Sending email',\n completedLabel: 'Email sent',\n rejectedLabel: 'Email not sent (rejected)',\n category: 'Email',\n icon: 'mail',\n emoji: '📤',\n },\n send_email_from_athena: {\n displayName: 'Send Email',\n activeLabel: 'Sending email',\n category: 'Email',\n icon: 'mail',\n emoji: '📤',\n },\n create_email_draft: {\n displayName: 'Create Draft',\n activeLabel: 'Drafting email',\n completedLabel: 'Email drafted',\n category: 'Email',\n icon: 'mail',\n emoji: '✉️',\n },\n unified_email_create_draft: {\n displayName: 'Create Draft',\n activeLabel: 'Drafting email',\n completedLabel: 'Email drafted',\n category: 'Email',\n icon: 'mail',\n emoji: '✉️',\n },\n edit_email_draft: {\n displayName: 'Edit Draft',\n activeLabel: 'Editing email draft',\n completedLabel: 'Draft updated',\n category: 'Email',\n icon: 'pen-line',\n emoji: '✏️',\n },\n unified_email_edit_draft: {\n displayName: 'Edit Draft',\n activeLabel: 'Editing email draft',\n completedLabel: 'Draft updated',\n category: 'Email',\n icon: 'pen-line',\n emoji: '✏️',\n },\n unified_email_get_thread: {\n displayName: 'Get Email Thread',\n activeLabel: 'Loading email thread',\n category: 'Email',\n icon: 'mail',\n },\n unified_email_get_message: {\n displayName: 'Get Email',\n activeLabel: 'Loading email',\n category: 'Email',\n icon: 'mail',\n },\n unified_email_list_accounts: {\n displayName: 'List Email Accounts',\n activeLabel: 'Checking email accounts',\n category: 'Email',\n icon: 'mail',\n },\n email_list_accounts: {\n displayName: 'List Email Accounts',\n activeLabel: 'Checking email accounts',\n category: 'Email',\n icon: 'mail',\n },\n unified_email_set_default: {\n displayName: 'Set Default Account',\n activeLabel: 'Setting default email account',\n category: 'Email',\n icon: 'mail',\n },\n fetch_email_attachments: {\n displayName: 'Fetch Attachments',\n activeLabel: 'Fetching email attachments',\n category: 'Email',\n icon: 'mail',\n emoji: '📎',\n },\n unified_email_fetch_attachments: {\n displayName: 'Fetch Attachments',\n activeLabel: 'Fetching email attachments',\n category: 'Email',\n icon: 'mail',\n emoji: '📎',\n },\n forward_email: {\n displayName: 'Forward Email',\n activeLabel: 'Forwarding email',\n category: 'Email',\n icon: 'mail',\n emoji: '📤',\n },\n unified_email_forward: {\n displayName: 'Forward Email',\n activeLabel: 'Forwarding email',\n completedLabel: 'Email forwarded',\n rejectedLabel: 'Email not forwarded (rejected)',\n category: 'Email',\n icon: 'mail',\n emoji: '📤',\n },\n search_calendar_events: {\n displayName: 'Search Calendar',\n activeLabel: 'Checking calendar',\n category: 'Email',\n icon: 'calendar',\n emoji: '📅',\n describe: describeQuery,\n },\n unified_search_calendar_events: {\n displayName: 'Search Calendar',\n activeLabel: 'Searching calendar',\n category: 'Email',\n icon: 'calendar',\n emoji: '📅',\n describe: describeQuery,\n },\n create_calendar_event_draft: {\n displayName: 'Create Calendar Event Draft',\n activeLabel: 'Creating calendar event',\n completedLabel: 'Calendar event created',\n rejectedLabel: 'Calendar event not created (rejected)',\n category: 'Email',\n icon: 'calendar',\n emoji: '📅',\n },\n unified_create_calendar_event_draft: {\n displayName: 'Create Calendar Event Draft',\n activeLabel: 'Creating calendar event',\n completedLabel: 'Calendar event created',\n rejectedLabel: 'Calendar event not created (rejected)',\n category: 'Email',\n icon: 'calendar',\n emoji: '📅',\n },\n create_google_calendar_event: {\n displayName: 'Create Calendar Event',\n activeLabel: 'Creating calendar event',\n category: 'Email',\n icon: 'calendar',\n emoji: '📅',\n },\n unified_create_calendar_event: {\n displayName: 'Create Calendar Event',\n activeLabel: 'Creating calendar event',\n completedLabel: 'Calendar event created',\n rejectedLabel: 'Calendar event not created (rejected)',\n category: 'Email',\n icon: 'calendar',\n emoji: '📅',\n },\n unified_update_calendar_event: {\n displayName: 'Update Calendar Event',\n activeLabel: 'Updating calendar event',\n category: 'Email',\n icon: 'calendar',\n emoji: '📅',\n },\n unified_calendar_get_event: {\n displayName: 'Get Calendar Event',\n activeLabel: 'Loading calendar event',\n category: 'Email',\n icon: 'calendar',\n emoji: '📅',\n },\n unified_get_free_busy: {\n displayName: 'Check Availability',\n activeLabel: 'Checking availability',\n category: 'Email',\n icon: 'calendar',\n emoji: '📅',\n },\n\n // ── Messaging & meetings ──\n send_slack_message: {\n displayName: 'Send Slack Message',\n activeLabel: 'Sending Slack message',\n category: 'Integrations',\n icon: 'message-square',\n emoji: '💬',\n },\n read_slack_channel: {\n displayName: 'Read Slack Channel',\n activeLabel: 'Reading Slack channel',\n category: 'Integrations',\n icon: 'message-square',\n emoji: '💬',\n },\n send_teams_message: {\n displayName: 'Send Teams Message',\n activeLabel: 'Sending Teams message',\n category: 'Integrations',\n icon: 'message-square',\n emoji: '💬',\n },\n query_meetings: {\n displayName: 'Query Meetings',\n activeLabel: 'Searching meetings',\n category: 'Meetings',\n icon: 'calendar',\n describe: describeQuery,\n },\n\n // ── Documents ──\n create_new_document: {\n displayName: 'Create Document',\n activeLabel: 'Creating document',\n completedLabel: 'Created document',\n category: 'Document',\n icon: 'file-text',\n describe: describeNamed(),\n },\n create_document_from_markdown: {\n displayName: 'Create Document from Markdown',\n activeLabel: 'Creating document',\n completedLabel: 'Created document',\n category: 'Document',\n icon: 'file-text',\n describe: describeNamed(),\n },\n append_markdown_to_athena_document: {\n displayName: 'Append to Document',\n activeLabel: 'Updating document',\n completedLabel: 'Updated document',\n category: 'Document',\n icon: 'pen-line',\n emoji: '📝',\n },\n replace_markdown_in_athena_document: {\n displayName: 'Replace in Document',\n activeLabel: 'Updating document',\n completedLabel: 'Updated document',\n category: 'Document',\n icon: 'pen-line',\n emoji: '📝',\n },\n insert_markdown_before_block: {\n displayName: 'Insert Before Block',\n activeLabel: 'Inserting content',\n category: 'Document',\n icon: 'pen-line',\n emoji: '📝',\n },\n insert_markdown_after_block: {\n displayName: 'Insert After Block',\n activeLabel: 'Inserting content',\n category: 'Document',\n icon: 'pen-line',\n emoji: '📝',\n },\n delete_blocks_from_athena_document: {\n displayName: 'Delete Blocks',\n activeLabel: 'Deleting blocks',\n category: 'Document',\n icon: 'trash',\n emoji: '🗑️',\n },\n clear_athena_document: {\n displayName: 'Clear Document',\n activeLabel: 'Clearing document',\n category: 'Document',\n icon: 'trash',\n emoji: '🗑️',\n },\n execute_word_document_code: {\n displayName: 'Edit Word Document',\n activeLabel: 'Editing Word document',\n category: 'Document',\n icon: 'file-text',\n },\n read_full_asset: {\n displayName: 'Read Asset',\n activeLabel: 'Reviewing asset content',\n completedLabel: 'Asset content reviewed',\n category: 'Spaces',\n icon: 'book-open',\n emoji: '📖',\n },\n read_asset: {\n displayName: 'Read Asset',\n activeLabel: 'Reviewing asset content',\n completedLabel: 'Asset content reviewed',\n category: 'Spaces',\n icon: 'book-open',\n emoji: '📖',\n },\n convert_athena_doc_to_pdf: {\n displayName: 'Convert to PDF',\n activeLabel: 'Converting to PDF',\n completedLabel: 'Converted to PDF',\n category: 'Document',\n icon: 'file-text',\n },\n convert_to_pdf: {\n displayName: 'Convert to PDF',\n activeLabel: 'Converting to PDF',\n completedLabel: 'Converted to PDF',\n category: 'Document',\n icon: 'file-text',\n },\n\n // ── Spreadsheets ──\n create_new_sheet: {\n displayName: 'Create Spreadsheet',\n activeLabel: 'Creating spreadsheet',\n completedLabel: 'Created spreadsheet',\n category: 'Spreadsheet',\n icon: 'bar-chart',\n describe: describeNamed(),\n },\n update_sheet_range: {\n displayName: 'Update Cells',\n activeLabel: 'Updating spreadsheet',\n completedLabel: 'Updated spreadsheet',\n category: 'Spreadsheet',\n icon: 'bar-chart',\n describe: describeRange,\n },\n bulk_format_sheet_range: {\n displayName: 'Format Cells',\n activeLabel: 'Formatting spreadsheet ranges',\n completedLabel: 'Formatted spreadsheet ranges',\n category: 'Spreadsheet',\n icon: 'bar-chart',\n emoji: '🎨',\n describe: describeRange,\n },\n format_sheet_range: {\n displayName: 'Format Cells',\n activeLabel: 'Formatting spreadsheet',\n completedLabel: 'Formatted spreadsheet',\n category: 'Spreadsheet',\n icon: 'bar-chart',\n emoji: '🎨',\n describe: describeRange,\n },\n set_row_column_dimensions: {\n displayName: 'Resize Rows and Columns',\n activeLabel: 'Resizing rows and columns',\n category: 'Spreadsheet',\n icon: 'table',\n },\n query_sheet_range: {\n displayName: 'Query Sheet',\n activeLabel: 'Querying spreadsheet',\n category: 'Spreadsheet',\n icon: 'search',\n emoji: '🔍',\n describe: describeRange,\n },\n create_chart: {\n displayName: 'Create Chart',\n activeLabel: 'Creating chart',\n completedLabel: 'Created chart',\n category: 'Spreadsheet',\n icon: 'trending-up',\n emoji: '📈',\n },\n execute_spreadsheet_code: {\n displayName: 'Execute Spreadsheet Code',\n activeLabel: 'Editing spreadsheet',\n category: 'Spreadsheet',\n icon: 'bar-chart',\n },\n execute_spreadsheet_commands: {\n displayName: 'Edit Spreadsheet',\n activeLabel: 'Editing spreadsheet',\n category: 'Spreadsheet',\n icon: 'bar-chart',\n },\n capture_sheet_screenshot: {\n displayName: 'Capture Sheet',\n activeLabel: 'Capturing sheet screenshot',\n category: 'Spreadsheet',\n icon: 'camera',\n emoji: '📸',\n },\n create_table: {\n displayName: 'Create Table',\n activeLabel: 'Creating table',\n completedLabel: 'Created table',\n category: 'Spreadsheet',\n icon: 'table',\n },\n update_table: {\n displayName: 'Update Table',\n activeLabel: 'Updating table',\n completedLabel: 'Updated table',\n category: 'Spreadsheet',\n icon: 'table',\n },\n table: {\n displayName: 'Table',\n activeLabel: 'Updating table',\n completedLabel: 'Updated table',\n category: 'Spreadsheet',\n icon: 'table',\n },\n update_sheet_cell: {\n displayName: 'Update Cells',\n activeLabel: 'Updating cells',\n completedLabel: 'Updated cells',\n category: 'Spreadsheet',\n icon: 'bar-chart',\n },\n\n // ── SQL & databases ──\n create_new_query_snippet: {\n displayName: 'Create Query',\n activeLabel: 'Creating query',\n category: 'SQL',\n icon: 'database',\n describe: describeNamed(),\n },\n execute_query_snippet: {\n displayName: 'Execute Query',\n activeLabel: 'Executing query',\n category: 'SQL',\n icon: 'play',\n emoji: '▶️',\n },\n update_query_snippet: {\n displayName: 'Update Query',\n activeLabel: 'Updating query',\n category: 'SQL',\n icon: 'pen-line',\n emoji: '✏️',\n },\n get_database_connection_details: {\n displayName: 'Get DB Connection',\n activeLabel: 'Loading connection details',\n category: 'SQL',\n icon: 'database',\n emoji: '🔌',\n },\n run_sql: {\n displayName: 'Run SQL Query',\n activeLabel: 'Running database query',\n completedLabel: 'Query complete',\n category: 'Database',\n icon: 'database',\n describe: describeSql,\n },\n run_database_sql: {\n displayName: 'Run SQL Query',\n activeLabel: 'Running database query',\n completedLabel: 'Query complete',\n category: 'Database',\n icon: 'database',\n describe: describeSql,\n },\n run_sql_query_tool: {\n displayName: 'Run SQL Query',\n activeLabel: 'Running database query',\n completedLabel: 'Query complete',\n category: 'Database',\n icon: 'database',\n describe: describeSql,\n },\n create_database: {\n displayName: 'Create Database',\n activeLabel: 'Setting up database',\n category: 'Database',\n icon: 'database',\n describe: describeNamed(),\n },\n create_database_table: {\n displayName: 'Create Table',\n activeLabel: 'Creating table',\n category: 'Database',\n icon: 'table',\n describe: describeTable,\n },\n describe_database: {\n displayName: 'Describe Database',\n activeLabel: 'Inspecting database',\n category: 'Database',\n icon: 'database',\n },\n list_database_schemas: {\n displayName: 'List Schemas',\n activeLabel: 'Loading schemas',\n category: 'Database',\n icon: 'database',\n },\n list_database_tables: {\n displayName: 'List Tables',\n activeLabel: 'Listing database tables',\n category: 'Database',\n icon: 'database',\n },\n get_database_table_schema: {\n displayName: 'Get Table Schema',\n activeLabel: 'Reading table schema',\n category: 'Database',\n icon: 'database',\n describe: describeTable,\n },\n load_tool_result_to_database: {\n displayName: 'Load Result to Database',\n activeLabel: 'Loading result into database',\n category: 'Database',\n icon: 'database',\n },\n list_databricks_tables: {\n displayName: 'List Databricks Tables',\n activeLabel: 'Listing Databricks tables',\n category: 'Database',\n icon: 'database',\n },\n describe_databricks_table: {\n displayName: 'Describe Databricks Table',\n activeLabel: 'Inspecting Databricks table',\n category: 'Database',\n icon: 'database',\n describe: describeTable,\n },\n execute_databricks_query: {\n displayName: 'Run Databricks Query',\n activeLabel: 'Running Databricks query',\n category: 'Database',\n icon: 'database',\n describe: describeSql,\n },\n\n // ── Python ──\n run_python_code: {\n displayName: 'Run Python',\n activeLabel: 'Running Python code',\n completedLabel: 'Python execution complete',\n category: 'Python',\n icon: 'code',\n },\n install_pip_package: {\n displayName: 'Install Package',\n activeLabel: 'Installing package',\n category: 'Python',\n icon: 'package',\n emoji: '📦',\n describe: describePackage,\n },\n get_installed_packages: {\n displayName: 'List Packages',\n activeLabel: 'Loading installed packages',\n category: 'Python',\n icon: 'package',\n emoji: '📦',\n },\n create_new_python_script: {\n displayName: 'Create Script',\n activeLabel: 'Creating Python script',\n category: 'Python',\n icon: 'code',\n describe: describeNamed(),\n },\n update_python_script: {\n displayName: 'Update Script',\n activeLabel: 'Updating Python script',\n category: 'Python',\n icon: 'code',\n },\n run_python_script: {\n displayName: 'Run Script',\n activeLabel: 'Running Python script',\n category: 'Python',\n icon: 'play',\n emoji: '▶️',\n },\n\n // ── Spaces & assets ──\n open_asset_in_workspace: {\n displayName: 'Open Asset',\n activeLabel: 'Opening in workspace',\n completedLabel: 'Opened in workspace',\n category: 'Spaces',\n icon: 'folder-open',\n },\n list_contents: {\n displayName: 'List Contents',\n activeLabel: 'Browsing files',\n category: 'Spaces',\n icon: 'folder',\n emoji: '📁',\n },\n create_new_folder: {\n displayName: 'Create Folder',\n activeLabel: 'Creating folder',\n category: 'Spaces',\n icon: 'folder',\n emoji: '📁',\n describe: describeNamed(),\n },\n create_new_project: {\n displayName: 'Create Project',\n activeLabel: 'Creating project',\n category: 'Spaces',\n icon: 'clipboard-list',\n emoji: '📋',\n describe: describeNamed(),\n },\n update_project: {\n displayName: 'Update Project',\n activeLabel: 'Updating project',\n category: 'Spaces',\n icon: 'clipboard-list',\n emoji: '📋',\n },\n project_links: {\n displayName: 'Project Links',\n activeLabel: 'Managing project links',\n category: 'Spaces',\n icon: 'link',\n emoji: '🔗',\n },\n search_assets: {\n displayName: 'Search Assets',\n activeLabel: 'Searching files',\n category: 'Spaces',\n icon: 'search',\n emoji: '🔍',\n describe: describeQuery,\n },\n rename_assets: {\n displayName: 'Rename Assets',\n activeLabel: 'Renaming assets',\n category: 'Spaces',\n icon: 'pen-line',\n emoji: '✏️',\n },\n duplicate_asset: {\n displayName: 'Duplicate Asset',\n activeLabel: 'Duplicating asset',\n category: 'Spaces',\n icon: 'folder-open',\n emoji: '📋',\n },\n move_assets_to_folder: {\n displayName: 'Move Assets',\n activeLabel: 'Moving assets',\n category: 'Spaces',\n icon: 'folder-open',\n },\n create_collection: {\n displayName: 'Create Collection',\n activeLabel: 'Creating collection',\n completedLabel: 'Created collection',\n category: 'Spaces',\n icon: 'book-open',\n emoji: '📚',\n describe: describeNamed(),\n },\n update_collection: {\n displayName: 'Update Collection',\n activeLabel: 'Updating collection',\n completedLabel: 'Updated collection',\n category: 'Spaces',\n icon: 'book-open',\n emoji: '📚',\n },\n add_assets_to_collection: {\n displayName: 'Add to Collection',\n activeLabel: 'Organizing assets',\n completedLabel: 'Assets organized',\n category: 'Spaces',\n icon: 'book-open',\n emoji: '📚',\n },\n remove_assets_from_collection: {\n displayName: 'Remove from Collection',\n activeLabel: 'Removing assets',\n category: 'Spaces',\n icon: 'book-open',\n emoji: '📚',\n },\n add_assets_to_favorites: {\n displayName: 'Add to Favorites',\n activeLabel: 'Adding to favorites',\n category: 'Spaces',\n icon: 'star',\n emoji: '⭐',\n },\n\n // ── Visualizations & canvas ──\n create_new_figure: {\n displayName: 'Create Figure',\n activeLabel: 'Creating figure',\n category: 'Visualization',\n icon: 'trending-up',\n describe: describeNamed(),\n },\n create_new_dashboard: {\n displayName: 'Create Dashboard',\n activeLabel: 'Creating dashboard',\n category: 'Visualization',\n icon: 'layout-dashboard',\n describe: describeNamed(),\n },\n update_figure_asset: {\n displayName: 'Update Figure',\n activeLabel: 'Updating figure',\n category: 'Visualization',\n icon: 'trending-up',\n },\n update_dashboard_asset: {\n displayName: 'Update Dashboard',\n activeLabel: 'Updating dashboard',\n category: 'Visualization',\n icon: 'layout-dashboard',\n },\n CreateNewCanvas: {\n displayName: 'Create Canvas',\n activeLabel: 'Creating canvas',\n category: 'Canvas',\n icon: 'palette',\n describe: describeNamed(),\n },\n UpdateCanvasAsset: {\n displayName: 'Update Canvas',\n activeLabel: 'Updating canvas',\n category: 'Canvas',\n icon: 'palette',\n },\n generate_image: {\n displayName: 'Generate Image',\n activeLabel: 'Generating image',\n category: 'Media',\n icon: 'image',\n emoji: '🖼️',\n },\n query_single_image: {\n displayName: 'Analyze Image',\n activeLabel: 'Analyzing image',\n category: 'Media',\n icon: 'image',\n emoji: '🖼️',\n },\n capture_moment: {\n displayName: 'Capture Moment',\n activeLabel: 'Capturing moment',\n completedLabel: 'Moment captured',\n category: 'Media',\n icon: 'camera',\n },\n\n // ── Presentations ──\n create_powerpoint_deck: {\n displayName: 'Create Presentation',\n activeLabel: 'Creating presentation',\n completedLabel: 'Created presentation',\n category: 'Presentation',\n icon: 'presentation',\n describe: describeNamed(),\n },\n create_presentation_pptx_studio: {\n displayName: 'Create Presentation',\n activeLabel: 'Creating presentation',\n completedLabel: 'Created presentation',\n category: 'Presentation',\n icon: 'presentation',\n describe: describeNamed(),\n },\n capture_slide_screenshot: {\n displayName: 'Capture Slide',\n activeLabel: 'Capturing slide',\n completedLabel: 'Slide captured',\n category: 'Presentation',\n icon: 'camera',\n emoji: '📸',\n },\n execute_presentation_code: {\n displayName: 'Execute Presentation Code',\n activeLabel: 'Updating presentation',\n completedLabel: 'Updated presentation',\n category: 'Presentation',\n icon: 'presentation',\n emoji: '▶️',\n },\n get_template_placeholders: {\n displayName: 'Get Placeholders',\n activeLabel: 'Loading template placeholders',\n category: 'Presentation',\n icon: 'presentation',\n },\n\n // ── User interfaces ──\n create_new_user_interface: {\n displayName: 'Create UI',\n activeLabel: 'Creating user interface',\n category: 'UI',\n icon: 'monitor',\n describe: describeNamed(),\n },\n update_user_interface_code: {\n displayName: 'Update UI Code',\n activeLabel: 'Updating UI code',\n category: 'UI',\n icon: 'monitor',\n },\n patch_user_interface_code: {\n displayName: 'Patch UI Code',\n activeLabel: 'Patching UI code',\n category: 'UI',\n icon: 'monitor',\n },\n\n // ── Notebooks ──\n create_new_notebook: {\n displayName: 'Create Notebook',\n activeLabel: 'Creating notebook',\n completedLabel: 'Created notebook',\n category: 'Notebook',\n icon: 'book-open',\n describe: describeNamed(),\n },\n execute_cell: {\n displayName: 'Execute Cell',\n activeLabel: 'Running notebook cell',\n category: 'Notebook',\n icon: 'code',\n emoji: '▶️',\n },\n add_cell_content: {\n displayName: 'Add Cell',\n activeLabel: 'Adding cell',\n category: 'Notebook',\n icon: 'book-open',\n },\n replace_cell_content: {\n displayName: 'Replace Cell',\n activeLabel: 'Replacing cell content',\n category: 'Notebook',\n icon: 'book-open',\n },\n\n // ── Workflows (AOP) ──\n create_new_aop: {\n displayName: 'Create AOP',\n activeLabel: 'Creating workflow',\n category: 'AOP',\n icon: 'brain',\n describe: describeNamed(),\n },\n update_aop: {\n displayName: 'Update AOP',\n activeLabel: 'Updating workflow',\n category: 'AOP',\n icon: 'brain',\n },\n execute_aop: {\n displayName: 'Execute AOP',\n activeLabel: 'Running workflow',\n category: 'AOP',\n icon: 'brain',\n emoji: '▶️',\n },\n\n // ── Browser & computer ──\n create_new_browse_session: {\n displayName: 'Open Browser',\n activeLabel: 'Opening browser session',\n category: 'Browser',\n icon: 'globe',\n },\n go_to_url: {\n displayName: 'Navigate',\n activeLabel: 'Navigating',\n category: 'Browser',\n icon: 'globe',\n describe: describeUrl,\n },\n get_page_text: {\n displayName: 'Read Page',\n activeLabel: 'Reading page content',\n category: 'Browser',\n icon: 'file-text',\n emoji: '📖',\n },\n computer: {\n displayName: 'Computer Action',\n activeLabel: 'Using computer',\n completedLabel: 'Computer action complete',\n category: 'Browser',\n icon: 'mouse-pointer',\n emoji: '🖱️',\n },\n computer_asset_create: {\n displayName: 'Create Computer',\n activeLabel: 'Creating computer asset',\n category: 'Computer',\n icon: 'monitor',\n },\n create_virtual_machine_session: {\n displayName: 'Create VM',\n activeLabel: 'Creating virtual machine',\n category: 'VM',\n icon: 'cpu',\n },\n vm_use_agent: {\n displayName: 'VM Agent',\n activeLabel: 'Running VM agent',\n category: 'VM',\n icon: 'bot',\n emoji: '🤖',\n },\n\n // ── External drives ──\n search_sharepoint: {\n displayName: 'Search SharePoint',\n activeLabel: 'Searching SharePoint',\n category: 'Drive',\n icon: 'search',\n emoji: '🔍',\n describe: describeQuery,\n },\n search_onedrive: {\n displayName: 'Search OneDrive',\n activeLabel: 'Searching OneDrive',\n category: 'Drive',\n icon: 'search',\n emoji: '🔍',\n describe: describeQuery,\n },\n fetch_onedrive_url: {\n displayName: 'Fetch OneDrive File',\n activeLabel: 'Fetching OneDrive file',\n category: 'Drive',\n icon: 'file-text',\n emoji: '📄',\n describe: describeUrl,\n },\n search_google_drive: {\n displayName: 'Search Google Drive',\n activeLabel: 'Searching Google Drive',\n category: 'Drive',\n icon: 'search',\n emoji: '🔍',\n describe: describeQuery,\n },\n\n // ── Comments ──\n list_comment_threads: {\n displayName: 'List Comments',\n activeLabel: 'Loading comments',\n category: 'Comments',\n icon: 'message-square',\n },\n add_comment: {\n displayName: 'Add Comment',\n activeLabel: 'Adding comment',\n category: 'Comments',\n icon: 'message-square',\n },\n reply_to_comment: {\n displayName: 'Reply to Comment',\n activeLabel: 'Replying to comment',\n category: 'Comments',\n icon: 'message-square',\n },\n\n // ── Analysis & memory ──\n in_depth_analysis: {\n displayName: 'In-Depth Analysis',\n activeLabel: 'Analyzing',\n category: 'Analysis',\n icon: 'microscope',\n describe: describeQuery,\n },\n save_preference_as_memory: {\n displayName: 'Save Preference',\n activeLabel: 'Saving preference',\n category: 'Memory',\n icon: 'save',\n },\n search_memory_preferences: {\n displayName: 'Search Preferences',\n activeLabel: 'Searching preferences',\n category: 'Memory',\n icon: 'search',\n emoji: '🔍',\n describe: describeQuery,\n },\n edit_preference_memory: {\n displayName: 'Edit Preference',\n activeLabel: 'Editing preference',\n category: 'Memory',\n icon: 'pen-line',\n emoji: '✏️',\n },\n\n // ── Playbooks, GitHub, ontology, scripts, project manager ──\n create_new_playbook: {\n displayName: 'Create Playbook',\n activeLabel: 'Creating playbook',\n category: 'Playbook',\n icon: 'book-open',\n describe: describeNamed(),\n },\n update_playbook: {\n displayName: 'Update Playbook',\n activeLabel: 'Updating playbook',\n category: 'Playbook',\n icon: 'book-open',\n },\n github_fetch_file: {\n displayName: 'Fetch File',\n activeLabel: 'Fetching file from GitHub',\n category: 'GitHub',\n icon: 'file-text',\n emoji: '📄',\n describe: describePath,\n },\n github_list_directory: {\n displayName: 'List Directory',\n activeLabel: 'Listing GitHub directory',\n category: 'GitHub',\n icon: 'folder',\n emoji: '📁',\n describe: describePath,\n },\n github_get_pull_request: {\n displayName: 'Get Pull Request',\n activeLabel: 'Loading pull request',\n category: 'GitHub',\n icon: 'git-pull-request',\n },\n github_list_pull_requests: {\n displayName: 'List Pull Requests',\n activeLabel: 'Loading pull requests',\n category: 'GitHub',\n icon: 'git-pull-request',\n },\n list_object_types: {\n displayName: 'List Object Types',\n activeLabel: 'Reading object types',\n category: 'Ontology',\n icon: 'boxes',\n },\n create_object_type: {\n displayName: 'Create Object Type',\n activeLabel: 'Creating object type',\n category: 'Ontology',\n icon: 'boxes',\n emoji: '🧩',\n describe: describeNamed(),\n },\n update_object_type: {\n displayName: 'Update Object Type',\n activeLabel: 'Updating object type',\n category: 'Ontology',\n icon: 'boxes',\n emoji: '🧩',\n },\n search_objects: {\n displayName: 'Search Objects',\n activeLabel: 'Searching objects',\n category: 'Ontology',\n icon: 'search',\n emoji: '🔎',\n describe: describeQuery,\n },\n create_object: {\n displayName: 'Create Object',\n activeLabel: 'Creating object',\n category: 'Ontology',\n icon: 'package',\n emoji: '📦',\n describe: describeNamed(),\n },\n create_objects: {\n displayName: 'Create Objects',\n activeLabel: 'Creating objects',\n category: 'Ontology',\n icon: 'package',\n emoji: '📦',\n },\n update_object: {\n displayName: 'Update Object',\n activeLabel: 'Updating object',\n category: 'Ontology',\n icon: 'package',\n emoji: '📦',\n },\n archive_object: {\n displayName: 'Archive Object',\n activeLabel: 'Archiving object',\n category: 'Ontology',\n icon: 'package',\n },\n get_object_links: {\n displayName: 'Get Object Links',\n activeLabel: 'Reading links',\n category: 'Ontology',\n icon: 'link',\n emoji: '🔗',\n },\n link_objects: {\n displayName: 'Link Objects',\n activeLabel: 'Linking objects',\n category: 'Ontology',\n icon: 'link',\n emoji: '🔗',\n },\n unlink_objects: {\n displayName: 'Unlink Objects',\n activeLabel: 'Removing link',\n category: 'Ontology',\n icon: 'link',\n emoji: '🔗',\n },\n create_wm_script: {\n displayName: 'Create Script',\n activeLabel: 'Creating script',\n category: 'Task Studio',\n icon: 'scroll-text',\n describe: describeNamed(),\n },\n execute_wm_script: {\n displayName: 'Execute Script',\n activeLabel: 'Executing script',\n category: 'Task Studio',\n icon: 'play',\n emoji: '▶️',\n },\n create_project_with_manager: {\n displayName: 'Create Managed Project',\n activeLabel: 'Creating managed project',\n category: 'Project Manager',\n icon: 'clipboard-list',\n describe: describeNamed(),\n },\n get_pm_roadmap: {\n displayName: 'Get Roadmap',\n activeLabel: 'Loading roadmap',\n category: 'Project Manager',\n icon: 'clipboard-list',\n emoji: '🗺️',\n },\n\n // ── Voice mode (a run delegated from a live GPT Live conversation) ──\n send_voice_update: {\n displayName: 'Voice Update',\n activeLabel: 'Speaking to you',\n completedLabel: 'Voice update sent',\n category: 'Agent',\n internal: true,\n icon: 'message-square',\n emoji: '🗣️',\n describe: (args) => (typeof args.text === 'string' && args.text ? args.text : undefined),\n },\n\n // ── Agent runtime & workspace files (deepagents built-ins) ──\n task: {\n displayName: 'Delegate to Subagent',\n activeLabel: 'Delegating to a subagent',\n category: 'Agent',\n internal: true,\n icon: 'bot',\n describe: describeDelegation,\n },\n start_async_task: {\n displayName: 'Start Background Task',\n activeLabel: 'Starting background task',\n category: 'Agent',\n internal: true,\n icon: 'bot',\n describe: describeDelegation,\n },\n check_async_task: {\n displayName: 'Check Background Task',\n activeLabel: 'Checking background task',\n category: 'Agent',\n internal: true,\n icon: 'bot',\n },\n update_async_task: {\n displayName: 'Update Background Task',\n activeLabel: 'Updating background task',\n category: 'Agent',\n internal: true,\n icon: 'bot',\n },\n cancel_async_task: {\n displayName: 'Cancel Background Task',\n activeLabel: 'Cancelling background task',\n category: 'Agent',\n internal: true,\n icon: 'bot',\n },\n list_async_tasks: {\n displayName: 'List Background Tasks',\n activeLabel: 'Listing background tasks',\n category: 'Agent',\n internal: true,\n icon: 'bot',\n },\n write_todos: {\n displayName: 'Plan',\n activeLabel: 'Planning',\n category: 'Agent',\n internal: true,\n icon: 'list-checks',\n emoji: '📝',\n },\n ask: {\n displayName: 'Ask a Question',\n activeLabel: 'Waiting for your input',\n completedLabel: 'Input received',\n category: 'Agent',\n internal: true,\n icon: 'circle-help',\n emoji: '❓',\n },\n final_response: {\n displayName: 'Final Response',\n activeLabel: 'Finishing up',\n category: 'Agent',\n internal: true,\n icon: 'flag',\n emoji: '🏁',\n },\n execute: {\n displayName: 'Run Command',\n activeLabel: 'Running a command',\n category: 'Files',\n internal: true,\n icon: 'terminal',\n emoji: '⌨️',\n },\n eval: {\n displayName: 'Evaluate Code',\n activeLabel: 'Evaluating code',\n category: 'Files',\n internal: true,\n icon: 'code',\n },\n read_file: {\n displayName: 'Review Working Files',\n activeLabel: 'Reviewing working files',\n category: 'Files',\n internal: true,\n icon: 'scan-search',\n describe: describePath,\n },\n ls: {\n displayName: 'Check Workspace',\n activeLabel: 'Checking the workspace',\n category: 'Files',\n internal: true,\n icon: 'folder-open',\n describe: describePath,\n },\n write_file: {\n displayName: 'Save Working Files',\n activeLabel: 'Saving working files',\n category: 'Files',\n internal: true,\n icon: 'file-text',\n describe: describePath,\n },\n edit_file: {\n displayName: 'Update Working Files',\n activeLabel: 'Updating working files',\n category: 'Files',\n internal: true,\n icon: 'pen-line',\n describe: describePath,\n },\n glob: {\n displayName: 'Search Working Files',\n activeLabel: 'Searching working files',\n category: 'Files',\n internal: true,\n icon: 'search',\n describe: (args) => nonBlank(args.pattern) ?? nonBlank(args.query) ?? nonBlank(args.path),\n },\n grep: {\n displayName: 'Search Working Files',\n activeLabel: 'Searching working files',\n category: 'Files',\n internal: true,\n icon: 'search',\n describe: (args) => nonBlank(args.pattern) ?? nonBlank(args.query) ?? nonBlank(args.path),\n },\n\n // ── Athena Studio SDK sub-calls (programmatic tool calling) ──\n CreateWorkbook: {\n displayName: 'Create Workbook',\n activeLabel: 'Creating workbook',\n category: 'Spreadsheet',\n internal: true,\n icon: 'bar-chart',\n describe: describeNamed(),\n },\n AddSheet: {\n displayName: 'Add Sheet',\n activeLabel: 'Adding sheet',\n category: 'Spreadsheet',\n internal: true,\n icon: 'table',\n describe: describeNamed(),\n },\n OpenWorkbook: {\n displayName: 'Open Workbook',\n activeLabel: 'Opening workbook',\n category: 'Spreadsheet',\n internal: true,\n icon: 'folder-open',\n },\n WriteCells: {\n displayName: 'Write Cells',\n activeLabel: 'Writing cells',\n category: 'Spreadsheet',\n internal: true,\n icon: 'bar-chart',\n describe: describeRange,\n },\n CreatePresentation: {\n displayName: 'Create Presentation',\n activeLabel: 'Creating presentation',\n category: 'Presentation',\n internal: true,\n icon: 'presentation',\n describe: describeNamed(),\n },\n OpenPresentation: {\n displayName: 'Open Presentation',\n activeLabel: 'Opening presentation',\n category: 'Presentation',\n internal: true,\n icon: 'folder-open',\n },\n AddSlide: {\n displayName: 'Add Slide',\n activeLabel: 'Adding slide',\n category: 'Presentation',\n internal: true,\n icon: 'presentation',\n },\n CreateDocument: {\n displayName: 'Create Document',\n activeLabel: 'Creating document',\n category: 'Document',\n internal: true,\n icon: 'file-text',\n describe: describeNamed(),\n },\n OpenDocument: {\n displayName: 'Open Document',\n activeLabel: 'Opening document',\n category: 'Document',\n internal: true,\n icon: 'folder-open',\n },\n CreateParagraph: {\n displayName: 'Write Paragraph',\n activeLabel: 'Writing paragraph',\n category: 'Document',\n internal: true,\n icon: 'pen-line',\n },\n CreateHeading: {\n displayName: 'Write Heading',\n activeLabel: 'Writing heading',\n category: 'Document',\n internal: true,\n icon: 'pen-line',\n },\n CreateTable: {\n displayName: 'Insert Table',\n activeLabel: 'Inserting table',\n category: 'Document',\n internal: true,\n icon: 'table',\n },\n AddCitation: {\n displayName: 'Add Citation',\n activeLabel: 'Adding citation',\n category: 'Document',\n internal: true,\n icon: 'link',\n },\n\n // ── Chrome extension (device tools) ──\n chrome_tabs_context: {\n displayName: 'Open Tabs',\n activeLabel: 'Checking open tabs',\n completedLabel: 'Checked open tabs',\n category: 'Browser',\n icon: 'globe',\n },\n chrome_tabs_create: {\n displayName: 'New Tab',\n activeLabel: 'Opening a new tab',\n completedLabel: 'Opened a new tab',\n category: 'Browser',\n icon: 'globe',\n },\n chrome_batch: {\n displayName: 'Chrome Actions',\n activeLabel: 'Working in Chrome',\n completedLabel: 'Chrome actions complete',\n category: 'Browser',\n icon: 'list-checks',\n },\n chrome_computer: {\n displayName: 'Page Interaction',\n activeLabel: 'Interacting with the page',\n completedLabel: 'Page interaction complete',\n category: 'Browser',\n icon: 'mouse-pointer',\n emoji: '🖱️',\n },\n chrome_navigate: {\n displayName: 'Navigate Page',\n activeLabel: 'Navigating the page',\n completedLabel: 'Page navigation complete',\n category: 'Browser',\n icon: 'globe',\n },\n chrome_read_page: {\n displayName: 'Read Page',\n activeLabel: 'Reading the page',\n completedLabel: 'Read the page',\n category: 'Browser',\n icon: 'file-text',\n emoji: '📖',\n },\n chrome_find: {\n displayName: 'Find on Page',\n activeLabel: 'Finding page content',\n completedLabel: 'Found page content',\n category: 'Browser',\n icon: 'scan-search',\n emoji: '🔍',\n },\n chrome_form_input: {\n displayName: 'Fill Form',\n activeLabel: 'Filling in the page',\n completedLabel: 'Updated the page',\n category: 'Browser',\n icon: 'pen-line',\n },\n chrome_get_page_text: {\n displayName: 'Page Text',\n activeLabel: 'Reading page text',\n completedLabel: 'Read page text',\n category: 'Browser',\n icon: 'file-text',\n emoji: '📖',\n },\n chrome_javascript: {\n displayName: 'Page JavaScript',\n activeLabel: 'Running page JavaScript',\n completedLabel: 'Page JavaScript complete',\n category: 'Browser',\n icon: 'code',\n },\n chrome_read_console: {\n displayName: 'Browser Console',\n activeLabel: 'Checking the console',\n completedLabel: 'Checked the console',\n category: 'Browser',\n icon: 'terminal',\n },\n chrome_read_network: {\n displayName: 'Network Activity',\n activeLabel: 'Checking network activity',\n completedLabel: 'Checked network activity',\n category: 'Browser',\n icon: 'link',\n },\n chrome_wait_for: {\n displayName: 'Wait for Page',\n activeLabel: 'Waiting for the page',\n completedLabel: 'Page is ready',\n category: 'Browser',\n icon: 'play',\n },\n chrome_gif_creator: {\n displayName: 'Create GIF',\n activeLabel: 'Creating a GIF',\n completedLabel: 'Created a GIF',\n category: 'Browser',\n icon: 'image',\n emoji: '🎞️',\n },\n chrome_shortcuts_list: {\n displayName: 'Browser Shortcuts',\n activeLabel: 'Checking browser shortcuts',\n completedLabel: 'Checked browser shortcuts',\n category: 'Browser',\n icon: 'list-checks',\n },\n chrome_shortcuts_execute: {\n displayName: 'Run Browser Shortcut',\n activeLabel: 'Using a browser shortcut',\n completedLabel: 'Browser shortcut complete',\n category: 'Browser',\n icon: 'play',\n },\n chrome_handle_dialog: {\n displayName: 'Browser Dialog',\n activeLabel: 'Handling the browser dialog',\n completedLabel: 'Handled the browser dialog',\n category: 'Browser',\n icon: 'message-square',\n },\n\n\n // ── Tool management ──\n toggle_toolkit: {\n displayName: 'Toggle Toolkit',\n activeLabel: 'Toggling toolkit',\n category: 'Tool',\n icon: 'settings',\n emoji: '🧰',\n },\n enable_tool_by_id: {\n displayName: 'Enable Tool',\n activeLabel: 'Enabling tool',\n category: 'Tool',\n icon: 'settings',\n emoji: '🧰',\n },\n};\n\n// ─── Public API ────────────────────────────────────────────────────────\n\n/**\n * Humanize a `snake_case` / `camelCase` tool name into a Title Case label\n * (`create_new_sheet` → \"Create New Sheet\", `CreateWorkbook` → \"Create Workbook\").\n */\nexport function formatToolName(toolName: string): string {\n return toolName\n .replace(/_/g, ' ')\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/\\b\\w/g, (char) => char.toUpperCase())\n .trim();\n}\n\n/** The generic presentation for a tool with no registry entry. */\nexport function defaultToolDisplayMeta(toolName: string): ToolDisplayMeta {\n const displayName = formatToolName(toolName);\n return {\n displayName,\n activeLabel: `Running ${displayName}`,\n category: 'Tool',\n icon: 'wrench',\n emoji: DEFAULT_EMOJI,\n };\n}\n\n/** True when the registry has an entry for `toolName`. */\nexport function hasToolDisplayMeta(toolName: string): boolean {\n return Object.hasOwn(TOOL_DISPLAY_META, toolName);\n}\n\n/** Display metadata for `toolName` — the registry entry, else a readable default. Never throws. */\nexport function getToolDisplayMeta(toolName: string): ToolDisplayMeta {\n const entry = TOOL_DISPLAY_META[toolName];\n if (!entry) return defaultToolDisplayMeta(toolName);\n return { ...entry, emoji: entry.emoji ?? CATEGORY_EMOJI[entry.category] };\n}\n\n/** Every tool name with a registry entry. */\nexport function knownToolNames(): string[] {\n return Object.keys(TOOL_DISPLAY_META);\n}\n\n/** The emoji for a category (the wrench for anything unknown). */\nexport function getCategoryEmoji(category: string): string {\n return (CATEGORY_EMOJI as Record<string, string>)[category] ?? DEFAULT_EMOJI;\n}\n\n/**\n * The one-line summary of a call's arguments, when the tool knows how to\n * summarize them (`args` may be undefined or unparsed while streaming).\n */\nexport function describeToolArgs({\n toolName,\n args,\n}: {\n toolName: string;\n args: Record<string, unknown> | undefined;\n}): string | undefined {\n const describe = getToolDisplayMeta(toolName).describe;\n if (!describe || !args) return undefined;\n const summary = describe(args);\n return summary?.trim() ? summary : undefined;\n}\n\n/**\n * The running-row label: the activity plus the call's own summary\n * (\"Searching the web: \\\"quarterly revenue\\\"\"), without trailing punctuation.\n */\nexport function toolActiveLabel({\n toolName,\n args,\n}: {\n toolName: string;\n args: Record<string, unknown> | undefined;\n}): string {\n const meta = getToolDisplayMeta(toolName);\n const summary = describeToolArgs({ toolName, args });\n return summary ? `${meta.activeLabel}: ${summary}` : meta.activeLabel;\n}\n\nconst PAST_TENSE_IRREGULARS: readonly [RegExp, string][] = [\n [/^Taking\\b/, 'Took'],\n [/^Getting\\b/, 'Got'],\n [/^Running\\b/, 'Ran'],\n [/^Reading\\b/, 'Read'],\n [/^Finding\\b/, 'Found'],\n [/^Writing\\b/, 'Wrote'],\n [/^Building\\b/, 'Built'],\n [/^Setting\\b/, 'Set'],\n [/^Sending\\b/, 'Sent'],\n];\n\n/**\n * Turn a present-tense activity label into its completed form\n * (\"Taking screenshot\" → \"Took screenshot\", \"Navigating to x\" → \"Navigated to x\").\n * Labels that do not open with an \"-ing\" verb come back unchanged.\n */\nexport function toolCompletedLabel(activeLabel: string): string {\n for (const [pattern, replacement] of PAST_TENSE_IRREGULARS) {\n if (pattern.test(activeLabel)) return activeLabel.replace(pattern, replacement);\n }\n return activeLabel.replace(/^(\\w+)ing\\b/, (_match, base: string) =>\n /[^aeiou]y$/.test(base) ? `${base.slice(0, -1)}ied` : `${base}ed`,\n );\n}\n\n/** The step states an activity row can be in; the tool card's own states plus the approval outcomes. */\nexport type ToolStatusLabelState =\n | 'running'\n | 'complete'\n | 'rejected'\n | 'cancelled'\n | 'paused'\n | 'error'\n | 'waiting';\n\n/**\n * The status-row copy for a tool call in a given state — the one wording the\n * SDK's activity card, Olympus's, and the Chrome extension's all render:\n *\n * - `running` is the registry activity (\"Searching the web\");\n * - `complete` is the curated `completedLabel` (\"Web search complete\"), else\n * the activity's past tense (\"Created computer asset\"), else the tool's\n * name;\n * - `rejected` is the curated `rejectedLabel` (\"Email not sent (rejected)\"),\n * else \"<name> — rejected\", so a call the user declined never borrows the\n * success wording;\n * - `cancelled` / `paused` / `error` / `waiting` read the same on every\n * surface.\n *\n * `displayName` lets a host with a richer tool catalog (Olympus's registry\n * names) label tools this registry has no entry for; entries always win.\n */\nexport function toolStatusLabel(\n toolName: string,\n state: ToolStatusLabelState,\n displayName?: string,\n): string {\n const known = hasToolDisplayMeta(toolName);\n const meta = getToolDisplayMeta(toolName);\n const name = known ? meta.displayName : (displayName ?? meta.displayName);\n switch (state) {\n case 'running':\n return known || !displayName ? meta.activeLabel : `Running ${displayName}`;\n case 'complete':\n if (meta.completedLabel) return meta.completedLabel;\n return known ? toolCompletedLabel(meta.activeLabel) : name;\n case 'rejected':\n return meta.rejectedLabel ?? `${name} — rejected`;\n case 'cancelled':\n return `${name} — cancelled`;\n case 'paused':\n return `${name} — paused`;\n case 'error':\n return `${name} failed`;\n case 'waiting':\n return 'Waiting for your input';\n }\n}\n"],"names":[],"mappings":";;AA0IO,MAAM,iBAA+C;AAAA,EAC1D,KAAK;AAAA,EACL,OAAO;AAAA,EACP,UAAU;AAAA,EACV,aAAa;AAAA,EACb,KAAK;AAAA,EACL,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,KAAK;AAAA,EACL,SAAS;AAAA,EACT,UAAU;AAAA,EACV,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,cAAc;AAAA,EACd,MAAM;AACR;AAEA,MAAM,gBAAgB,eAAe;AAIrC,SAAS,SAAS,OAAoC;AACpD,SAAO,OAAO,UAAU,YAAY,MAAM,SAAS,MAAM,SAAS;AACpE;AAEA,SAAS,OAAO,OAA+C;AAC7D,SAAO,UAAU,SAAY,SAAY,IAAI,KAAK;AACpD;AAGO,SAAS,aAAa,MAAc,MAAM,IAAY;AAC3D,QAAM,UAAU,KAAK,QAAQ,QAAQ,GAAG,EAAE,KAAA;AAC1C,SAAO,QAAQ,SAAS,MAAM,GAAG,QAAQ,MAAM,GAAG,GAAG,CAAC,QAAQ;AAChE;AAGO,MAAM,gBAAmC,CAAC,SAC/C,OAAO,SAAS,KAAK,KAAK,KAAK,SAAS,KAAK,YAAY,KAAK,SAAS,KAAK,IAAI,CAAC;AAG5E,MAAM,cAAiC,CAAC,SAAS,SAAS,KAAK,GAAG;AAGlE,SAAS,cAAc,QAAQ,QAA2B;AAC/D,SAAO,CAAC,SAAS,OAAO,SAAS,KAAK,KAAK,CAAC,KAAK,SAAS,KAAK,KAAK,CAAC;AACvE;AAGO,MAAM,cAAiC,CAAC,SAAS;AACtD,QAAM,MAAM,SAAS,KAAK,SAAS,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,KAAK,GAAG;AACjF,SAAO,QAAQ,SAAY,SAAY,OAAO,aAAa,GAAG,CAAC;AACjE;AAGO,MAAM,gBAAmC,CAAC,SAAS;AACxD,QAAM,QAAQ,SAAS,KAAK,KAAK;AACjC,QAAM,cAAc,SAAS,KAAK,WAAW;AAC7C,MAAI,SAAS,YAAa,QAAO,GAAG,KAAK,KAAK,aAAa,WAAW,CAAC;AACvE,SAAO,UAAU,cAAc,aAAa,WAAW,IAAI;AAC7D;AAEO,MAAM,gBAAmC,CAAC,SAAS,SAAS,KAAK,UAAU;AAE3E,MAAM,kBAAqC,CAAC,SACjD,SAAS,KAAK,YAAY,KAAK,SAAS,KAAK,OAAO;AAG/C,MAAM,eAAkC,CAAC,SAC9C,SAAS,KAAK,SAAS,KAAK,SAAS,KAAK,IAAI;AAGzC,MAAM,qBAAwC,CAAC,SAAS;AAC7D,QAAM,WAAW,SAAS,KAAK,aAAa;AAC5C,QAAM,cAAc,SAAS,KAAK,WAAW;AAC7C,MAAI,YAAY,YAAa,QAAO,GAAG,QAAQ,KAAK,aAAa,WAAW,CAAC;AAC7E,SAAO,aAAa,cAAc,aAAa,WAAW,IAAI;AAChE;AASO,MAAM,oBAA0D;AAAA;AAAA,EAErE,QAAQ;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,YAAY;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,iBAAiB;AAAA,IACf,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,eAAe;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,QAAQ;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,cAAc;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,qBAAqB;AAAA,IACnB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,uBAAuB;AAAA,IACrB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,wBAAwB;AAAA,IACtB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA;AAAA,EAIZ,cAAc;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,sBAAsB;AAAA,IACpB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,cAAc;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,wBAAwB;AAAA,IACtB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,4BAA4B;AAAA,IAC1B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,kBAAkB;AAAA,IAChB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,0BAA0B;AAAA,IACxB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,0BAA0B;AAAA,IACxB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,2BAA2B;AAAA,IACzB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,6BAA6B;AAAA,IAC3B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,qBAAqB;AAAA,IACnB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,2BAA2B;AAAA,IACzB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,yBAAyB;AAAA,IACvB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,iCAAiC;AAAA,IAC/B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,eAAe;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,uBAAuB;AAAA,IACrB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,wBAAwB;AAAA,IACtB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,gCAAgC;AAAA,IAC9B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,6BAA6B;AAAA,IAC3B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,qCAAqC;AAAA,IACnC,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,8BAA8B;AAAA,IAC5B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,+BAA+B;AAAA,IAC7B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,+BAA+B;AAAA,IAC7B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,4BAA4B;AAAA,IAC1B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,uBAAuB;AAAA,IACrB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA;AAAA,EAIT,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA;AAAA,EAIZ,qBAAqB;AAAA,IACnB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,+BAA+B;AAAA,IAC7B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,oCAAoC;AAAA,IAClC,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,qCAAqC;AAAA,IACnC,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,8BAA8B;AAAA,IAC5B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,6BAA6B;AAAA,IAC3B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,oCAAoC;AAAA,IAClC,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,uBAAuB;AAAA,IACrB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,4BAA4B;AAAA,IAC1B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,iBAAiB;AAAA,IACf,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,YAAY;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,2BAA2B;AAAA,IACzB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA;AAAA,EAIR,kBAAkB;AAAA,IAChB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,yBAAyB;AAAA,IACvB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,2BAA2B;AAAA,IACzB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,cAAc;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,0BAA0B;AAAA,IACxB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,8BAA8B;AAAA,IAC5B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,0BAA0B;AAAA,IACxB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,cAAc;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,cAAc;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,OAAO;AAAA,IACL,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA;AAAA,EAIR,0BAA0B;AAAA,IACxB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,uBAAuB;AAAA,IACrB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,sBAAsB;AAAA,IACpB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,iCAAiC;AAAA,IAC/B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,SAAS;AAAA,IACP,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,kBAAkB;AAAA,IAChB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,iBAAiB;AAAA,IACf,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,uBAAuB;AAAA,IACrB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,uBAAuB;AAAA,IACrB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,sBAAsB;AAAA,IACpB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,2BAA2B;AAAA,IACzB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,8BAA8B;AAAA,IAC5B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,wBAAwB;AAAA,IACtB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,2BAA2B;AAAA,IACzB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,0BAA0B;AAAA,IACxB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA;AAAA,EAIZ,iBAAiB;AAAA,IACf,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,qBAAqB;AAAA,IACnB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,wBAAwB;AAAA,IACtB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,0BAA0B;AAAA,IACxB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,sBAAsB;AAAA,IACpB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA;AAAA,EAIT,yBAAyB;AAAA,IACvB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,eAAe;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,eAAe;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,eAAe;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,eAAe;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,iBAAiB;AAAA,IACf,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,uBAAuB;AAAA,IACrB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,0BAA0B;AAAA,IACxB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,+BAA+B;AAAA,IAC7B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,yBAAyB;AAAA,IACvB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA;AAAA,EAIT,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,sBAAsB;AAAA,IACpB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,qBAAqB;AAAA,IACnB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,wBAAwB;AAAA,IACtB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,iBAAiB;AAAA,IACf,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA;AAAA,EAIR,wBAAwB;AAAA,IACtB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,iCAAiC;AAAA,IAC/B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,0BAA0B;AAAA,IACxB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,2BAA2B;AAAA,IACzB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,2BAA2B;AAAA,IACzB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA;AAAA,EAIR,2BAA2B;AAAA,IACzB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,4BAA4B;AAAA,IAC1B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,2BAA2B;AAAA,IACzB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA;AAAA,EAIR,qBAAqB;AAAA,IACnB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,cAAc;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,kBAAkB;AAAA,IAChB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,sBAAsB;AAAA,IACpB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA;AAAA,EAIR,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,YAAY;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,aAAa;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA;AAAA,EAIT,2BAA2B;AAAA,IACzB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,WAAW;AAAA,IACT,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,eAAe;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,UAAU;AAAA,IACR,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,uBAAuB;AAAA,IACrB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,gCAAgC;AAAA,IAC9B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,cAAc;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA;AAAA,EAIT,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,iBAAiB;AAAA,IACf,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,qBAAqB;AAAA,IACnB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA;AAAA,EAIZ,sBAAsB;AAAA,IACpB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,aAAa;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,kBAAkB;AAAA,IAChB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA;AAAA,EAIR,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,2BAA2B;AAAA,IACzB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,2BAA2B;AAAA,IACzB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,wBAAwB;AAAA,IACtB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA;AAAA,EAIT,qBAAqB;AAAA,IACnB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,iBAAiB;AAAA,IACf,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,uBAAuB;AAAA,IACrB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,yBAAyB;AAAA,IACvB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,2BAA2B;AAAA,IACzB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAAA,EAEZ,eAAe;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,eAAe;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,kBAAkB;AAAA,IAChB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,cAAc;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,kBAAkB;AAAA,IAChB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,6BAA6B;AAAA,IAC3B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA;AAAA,EAIT,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU,CAAC,SAAU,OAAO,KAAK,SAAS,YAAY,KAAK,OAAO,KAAK,OAAO;AAAA,EAAA;AAAA;AAAA,EAIhF,MAAM;AAAA,IACJ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,kBAAkB;AAAA,IAChB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,kBAAkB;AAAA,IAChB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,kBAAkB;AAAA,IAChB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,aAAa;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,KAAK;AAAA,IACH,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,SAAS;AAAA,IACP,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,MAAM;AAAA,IACJ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,WAAW;AAAA,IACT,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,IAAI;AAAA,IACF,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,YAAY;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,WAAW;AAAA,IACT,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,MAAM;AAAA,IACJ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,CAAC,SAAS,SAAS,KAAK,OAAO,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,KAAK,IAAI;AAAA,EAAA;AAAA,EAE1F,MAAM;AAAA,IACJ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,CAAC,SAAS,SAAS,KAAK,OAAO,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,KAAK,IAAI;AAAA,EAAA;AAAA;AAAA,EAI1F,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,UAAU;AAAA,IACR,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,cAAc;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,YAAY;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,kBAAkB;AAAA,IAChB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,UAAU;AAAA,IACR,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU,cAAA;AAAA,EAAc;AAAA,EAE1B,cAAc;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,iBAAiB;AAAA,IACf,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,eAAe;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,aAAa;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,aAAa;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA;AAAA,EAIR,qBAAqB;AAAA,IACnB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,cAAc;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,iBAAiB;AAAA,IACf,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,iBAAiB;AAAA,IACf,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,kBAAkB;AAAA,IAChB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,aAAa;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,sBAAsB;AAAA,IACpB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,qBAAqB;AAAA,IACnB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,qBAAqB;AAAA,IACnB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,iBAAiB;AAAA,IACf,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,uBAAuB;AAAA,IACrB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,0BAA0B;AAAA,IACxB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,sBAAsB;AAAA,IACpB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA;AAAA,EAKR,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAEX;AAQO,SAAS,eAAe,UAA0B;AACvD,SAAO,SACJ,QAAQ,MAAM,GAAG,EACjB,QAAQ,mBAAmB,OAAO,EAClC,QAAQ,SAAS,CAAC,SAAS,KAAK,YAAA,CAAa,EAC7C,KAAA;AACL;AAGO,SAAS,uBAAuB,UAAmC;AACxE,QAAM,cAAc,eAAe,QAAQ;AAC3C,SAAO;AAAA,IACL;AAAA,IACA,aAAa,WAAW,WAAW;AAAA,IACnC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAEX;AAGO,SAAS,mBAAmB,UAA2B;AAC5D,SAAO,OAAO,OAAO,mBAAmB,QAAQ;AAClD;AAGO,SAAS,mBAAmB,UAAmC;AACpE,QAAM,QAAQ,kBAAkB,QAAQ;AACxC,MAAI,CAAC,MAAO,QAAO,uBAAuB,QAAQ;AAClD,SAAO,EAAE,GAAG,OAAO,OAAO,MAAM,SAAS,eAAe,MAAM,QAAQ,EAAA;AACxE;AAgBO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AACF,GAGuB;AACrB,QAAM,WAAW,mBAAmB,QAAQ,EAAE;AAC9C,MAAI,CAAC,YAAY,CAAC,KAAM,QAAO;AAC/B,QAAM,UAAU,SAAS,IAAI;AAC7B,UAAO,mCAAS,UAAS,UAAU;AACrC;AAMO,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AACF,GAGW;AACT,QAAM,OAAO,mBAAmB,QAAQ;AACxC,QAAM,UAAU,iBAAiB,EAAE,UAAU,MAAM;AACnD,SAAO,UAAU,GAAG,KAAK,WAAW,KAAK,OAAO,KAAK,KAAK;AAC5D;AAEA,MAAM,wBAAqD;AAAA,EACzD,CAAC,aAAa,MAAM;AAAA,EACpB,CAAC,cAAc,KAAK;AAAA,EACpB,CAAC,cAAc,KAAK;AAAA,EACpB,CAAC,cAAc,MAAM;AAAA,EACrB,CAAC,cAAc,OAAO;AAAA,EACtB,CAAC,cAAc,OAAO;AAAA,EACtB,CAAC,eAAe,OAAO;AAAA,EACvB,CAAC,cAAc,KAAK;AAAA,EACpB,CAAC,cAAc,MAAM;AACvB;AAOO,SAAS,mBAAmB,aAA6B;AAC9D,aAAW,CAAC,SAAS,WAAW,KAAK,uBAAuB;AAC1D,QAAI,QAAQ,KAAK,WAAW,UAAU,YAAY,QAAQ,SAAS,WAAW;AAAA,EAChF;AACA,SAAO,YAAY;AAAA,IAAQ;AAAA,IAAe,CAAC,QAAQ,SACjD,aAAa,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,EAAE,CAAC,QAAQ,GAAG,IAAI;AAAA,EAAA;AAEjE;AA6BO,SAAS,gBACd,UACA,OACA,aACQ;AACR,QAAM,QAAQ,mBAAmB,QAAQ;AACzC,QAAM,OAAO,mBAAmB,QAAQ;AACxC,QAAM,OAAO,QAAQ,KAAK,cAAe,eAAe,KAAK;AAC7D,UAAQ,OAAA;AAAA,IACN,KAAK;AACH,aAAO,SAAS,CAAC,cAAc,KAAK,cAAc,WAAW,WAAW;AAAA,IAC1E,KAAK;AACH,UAAI,KAAK,eAAgB,QAAO,KAAK;AACrC,aAAO,QAAQ,mBAAmB,KAAK,WAAW,IAAI;AAAA,IACxD,KAAK;AACH,aAAO,KAAK,iBAAiB,GAAG,IAAI;AAAA,IACtC,KAAK;AACH,aAAO,GAAG,IAAI;AAAA,IAChB,KAAK;AACH,aAAO,GAAG,IAAI;AAAA,IAChB,KAAK;AACH,aAAO,GAAG,IAAI;AAAA,IAChB,KAAK;AACH,aAAO;AAAA,EAAA;AAEb;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"tool-metadata.cjs","sources":["../../../../../agent-runtime/src/tool-metadata.ts"],"sourcesContent":["/**\n * Tool display metadata — the one registry of how a backend tool is presented\n * to a person: its noun label, its present-tense activity, its category, its\n * icon (as a key the UI layer maps to an icon component), its emoji for\n * text-only surfaces, and how to summarize a call from its arguments.\n *\n * Every tool card, activity timeline, and approval summary on every surface\n * (the React SDK, Olympus, the Chrome extension, the Office add-in, mobile)\n * reads from here, so a tool cannot be \"Web Search\" on one screen and\n * \"Searching the web\" plus a different icon on another. React-free on purpose:\n * mobile shares it, and icon *components* are the UI layer's business.\n *\n * Unknown names never fail: {@link getToolDisplayMeta} derives a readable\n * default from the name, so a new backend tool renders acceptably before it\n * has an entry here. Add the entry when the default copy is not good enough.\n */\n\nexport type ToolCategory =\n | 'Web'\n | 'Email'\n | 'Document'\n | 'Spreadsheet'\n | 'SQL'\n | 'Database'\n | 'Python'\n | 'Spaces'\n | 'Visualization'\n | 'Canvas'\n | 'Presentation'\n | 'UI'\n | 'Notebook'\n | 'AOP'\n | 'Browser'\n | 'Computer'\n | 'Drive'\n | 'Comments'\n | 'Meetings'\n | 'Analysis'\n | 'Memory'\n | 'Brand'\n | 'Playbook'\n | 'GitHub'\n | 'Ontology'\n | 'Task Studio'\n | 'Project Manager'\n | 'Agent'\n | 'Files'\n | 'Media'\n | 'Integrations'\n | 'Tool';\n\n/** Icon identifiers the UI layer maps to icon components (lucide on web). */\nexport type ToolIconKey =\n | 'search'\n | 'globe'\n | 'mail'\n | 'calendar'\n | 'file-text'\n | 'pen-line'\n | 'bar-chart'\n | 'table'\n | 'presentation'\n | 'monitor'\n | 'code'\n | 'terminal'\n | 'database'\n | 'book-open'\n | 'brain'\n | 'folder-open'\n | 'folder'\n | 'save'\n | 'wrench'\n | 'image'\n | 'camera'\n | 'trending-up'\n | 'palette'\n | 'microscope'\n | 'message-square'\n | 'hard-drive'\n | 'git-pull-request'\n | 'boxes'\n | 'scroll-text'\n | 'clipboard-list'\n | 'cpu'\n | 'bot'\n | 'link'\n | 'package'\n | 'play'\n | 'trash'\n | 'star'\n | 'sparkles'\n | 'list-checks'\n | 'mouse-pointer'\n | 'scan-search'\n | 'settings'\n | 'phone'\n | 'video'\n | 'users'\n | 'layout-dashboard'\n | 'workflow'\n | 'circle-help'\n | 'flag'\n | 'hash';\n\n/** Summarize a call from its arguments in one line, or nothing when there is nothing salient. */\nexport type ToolArgsDescriber = (args: Record<string, unknown>) => string | undefined;\n\nexport interface ToolDisplayMeta {\n /** Noun label for headers, lists, and completed rows (\"Web Search\"). */\n displayName: string;\n /** Present-tense activity for a running call, without trailing punctuation (\"Searching the web\"). */\n activeLabel: string;\n /**\n * Completed-row copy when the product wording is not the past tense of\n * `activeLabel` (\"Web search complete\"); {@link toolStatusLabel} derives\n * the past tense when this is absent.\n */\n completedLabel?: string;\n /** Copy for a call the user declined at an approval gate (\"Email not sent (rejected)\"). */\n rejectedLabel?: string;\n category: ToolCategory;\n icon: ToolIconKey;\n /** Emoji for text-only surfaces (mobile rows, notifications). */\n emoji: string;\n /** One-line detail from the call's arguments, for a subtitle or the running label. */\n describe?: ToolArgsDescriber;\n /**\n * The tool is not something a person picks — a runtime internal (deepagents\n * built-ins) or a nested SDK sub-call surfaced by programmatic tool calling.\n * Hosts leave these out of tool menus and mention pickers; they still render.\n */\n internal?: boolean;\n}\n\n/** A registry entry; `emoji` defaults to the category's. */\nexport type ToolDisplayMetaEntry = Omit<ToolDisplayMeta, 'emoji'> & { emoji?: string };\n\nexport const CATEGORY_EMOJI: Record<ToolCategory, string> = {\n Web: '🌐',\n Email: '📧',\n Document: '📄',\n Spreadsheet: '📊',\n SQL: '🗄️',\n Database: '🗄️',\n Python: '🐍',\n Spaces: '📂',\n Visualization: '📊',\n Canvas: '🎨',\n Presentation: '📽️',\n UI: '🖥️',\n Notebook: '📓',\n AOP: '📋',\n Browser: '🌐',\n Computer: '💻',\n Drive: '💾',\n Comments: '💬',\n Meetings: '📅',\n Analysis: '🔬',\n Memory: '💾',\n Brand: '🎨',\n Playbook: '📘',\n GitHub: '🔀',\n Ontology: '🗂️',\n 'Task Studio': '📜',\n 'Project Manager': '📋',\n Agent: '🤖',\n Files: '📁',\n Media: '📸',\n Integrations: '🔌',\n Tool: '🔧',\n};\n\nconst DEFAULT_EMOJI = CATEGORY_EMOJI.Tool;\n\n// ─── Describers ───────────────────────────────────────────────────────\n\nfunction nonBlank(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nfunction quoted(value: string | undefined): string | undefined {\n return value === undefined ? undefined : `\"${value}\"`;\n}\n\n/** Collapse whitespace to a single-line summary capped at `max` chars. */\nexport function truncateLine(text: string, max = 70): string {\n const oneLine = text.replace(/\\s+/g, ' ').trim();\n return oneLine.length > max ? `${oneLine.slice(0, max)}...` : oneLine;\n}\n\n/** The search term a call carries (`query` / `search_query` / `term`), quoted. */\nexport const describeQuery: ToolArgsDescriber = (args) =>\n quoted(nonBlank(args.query) ?? nonBlank(args.search_query) ?? nonBlank(args.term));\n\n/** The URL a call targets. */\nexport const describeUrl: ToolArgsDescriber = (args) => nonBlank(args.url);\n\n/** The name a call creates or targets (`field`, falling back to `title`), quoted. */\nexport function describeNamed(field = 'name'): ToolArgsDescriber {\n return (args) => quoted(nonBlank(args[field]) ?? nonBlank(args.title));\n}\n\n/** The SQL a call runs (`sql_query` / `query` / `sql`), on one line, quoted. */\nexport const describeSql: ToolArgsDescriber = (args) => {\n const sql = nonBlank(args.sql_query) ?? nonBlank(args.query) ?? nonBlank(args.sql);\n return sql === undefined ? undefined : quoted(truncateLine(sql));\n};\n\n/** A spreadsheet range plus the call's own explanation of the edit. */\nexport const describeRange: ToolArgsDescriber = (args) => {\n const range = nonBlank(args.range);\n const explanation = nonBlank(args.explanation);\n if (range && explanation) return `${range}: ${truncateLine(explanation)}`;\n return range ?? (explanation ? truncateLine(explanation) : undefined);\n};\n\nexport const describeTable: ToolArgsDescriber = (args) => nonBlank(args.table_name);\n\nexport const describePackage: ToolArgsDescriber = (args) =>\n nonBlank(args.package_name) ?? nonBlank(args.package);\n\n/** A workspace file path (`file_path` / `path`). */\nexport const describePath: ToolArgsDescriber = (args) =>\n nonBlank(args.file_path) ?? nonBlank(args.path);\n\n/** The subagent a delegation targets and what it was asked, on one line. */\nexport const describeDelegation: ToolArgsDescriber = (args) => {\n const subagent = nonBlank(args.subagent_type);\n const description = nonBlank(args.description);\n if (subagent && description) return `${subagent}: ${truncateLine(description)}`;\n return subagent ?? (description ? truncateLine(description) : undefined);\n};\n\n// ─── Registry ─────────────────────────────────────────────────────────\n\n/**\n * Keyed by the tool name as it appears on the wire. Grouped by category;\n * within a group, aliases of one capability share copy so history renders the\n * same whatever name the backend used that day.\n */\nexport const TOOL_DISPLAY_META: Record<string, ToolDisplayMetaEntry> = {\n // ── Web search & browse ──\n search: {\n displayName: 'Web Search',\n activeLabel: 'Searching the web',\n completedLabel: 'Web search complete',\n category: 'Web',\n icon: 'search',\n emoji: '🔍',\n describe: describeQuery,\n },\n exa_search: {\n displayName: 'Web Search',\n activeLabel: 'Searching the web',\n category: 'Web',\n icon: 'search',\n emoji: '🔍',\n describe: describeQuery,\n },\n perplexity_search: {\n displayName: 'Web Search',\n activeLabel: 'Searching the web',\n category: 'Web',\n icon: 'search',\n emoji: '🔍',\n describe: describeQuery,\n },\n grounded_search: {\n displayName: 'Grounded Search',\n activeLabel: 'Searching',\n category: 'Web',\n icon: 'search',\n emoji: '🔍',\n describe: describeQuery,\n },\n deep_research: {\n displayName: 'Deep Research',\n activeLabel: 'Researching',\n category: 'Web',\n icon: 'microscope',\n emoji: '🔬',\n describe: describeQuery,\n },\n browse: {\n displayName: 'Browse Web Page',\n activeLabel: 'Reading webpage',\n completedLabel: 'Read webpage',\n category: 'Web',\n icon: 'globe',\n describe: describeUrl,\n },\n open_browser: {\n displayName: 'Open Browser',\n activeLabel: 'Opening browser',\n category: 'Web',\n icon: 'globe',\n describe: describeUrl,\n },\n map_urls_in_website: {\n displayName: 'Map Website',\n activeLabel: 'Mapping website',\n category: 'Web',\n icon: 'globe',\n describe: describeUrl,\n },\n track_website_changes: {\n displayName: 'Track Website Changes',\n activeLabel: 'Tracking website changes',\n category: 'Web',\n icon: 'globe',\n describe: describeUrl,\n },\n get_youtube_transcript: {\n displayName: 'YouTube Transcript',\n activeLabel: 'Fetching transcript',\n category: 'Web',\n icon: 'video',\n emoji: '🎬',\n describe: describeUrl,\n },\n\n // ── Email & calendar ──\n search_email: {\n displayName: 'Search Email',\n activeLabel: 'Searching email',\n completedLabel: 'Email search complete',\n category: 'Email',\n icon: 'mail',\n describe: describeQuery,\n },\n unified_email_search: {\n displayName: 'Search Email',\n activeLabel: 'Searching email',\n completedLabel: 'Email search complete',\n category: 'Email',\n icon: 'mail',\n describe: describeQuery,\n },\n search_gmail: {\n displayName: 'Search Email',\n activeLabel: 'Searching emails',\n category: 'Email',\n icon: 'mail',\n describe: describeQuery,\n },\n send_direct_email: {\n displayName: 'Send Email',\n activeLabel: 'Sending email',\n category: 'Email',\n icon: 'mail',\n emoji: '📤',\n },\n unified_email_send: {\n displayName: 'Send Email',\n activeLabel: 'Sending email',\n completedLabel: 'Email sent',\n rejectedLabel: 'Email not sent (rejected)',\n category: 'Email',\n icon: 'mail',\n emoji: '📤',\n },\n send_email_from_athena: {\n displayName: 'Send Email',\n activeLabel: 'Sending email',\n category: 'Email',\n icon: 'mail',\n emoji: '📤',\n },\n create_email_draft: {\n displayName: 'Create Draft',\n activeLabel: 'Drafting email',\n completedLabel: 'Email drafted',\n category: 'Email',\n icon: 'mail',\n emoji: '✉️',\n },\n unified_email_create_draft: {\n displayName: 'Create Draft',\n activeLabel: 'Drafting email',\n completedLabel: 'Email drafted',\n category: 'Email',\n icon: 'mail',\n emoji: '✉️',\n },\n edit_email_draft: {\n displayName: 'Edit Draft',\n activeLabel: 'Editing email draft',\n completedLabel: 'Draft updated',\n category: 'Email',\n icon: 'pen-line',\n emoji: '✏️',\n },\n unified_email_edit_draft: {\n displayName: 'Edit Draft',\n activeLabel: 'Editing email draft',\n completedLabel: 'Draft updated',\n category: 'Email',\n icon: 'pen-line',\n emoji: '✏️',\n },\n unified_email_get_thread: {\n displayName: 'Get Email Thread',\n activeLabel: 'Loading email thread',\n category: 'Email',\n icon: 'mail',\n },\n unified_email_get_message: {\n displayName: 'Get Email',\n activeLabel: 'Loading email',\n category: 'Email',\n icon: 'mail',\n },\n unified_email_list_accounts: {\n displayName: 'List Email Accounts',\n activeLabel: 'Checking email accounts',\n category: 'Email',\n icon: 'mail',\n },\n email_list_accounts: {\n displayName: 'List Email Accounts',\n activeLabel: 'Checking email accounts',\n category: 'Email',\n icon: 'mail',\n },\n unified_email_set_default: {\n displayName: 'Set Default Account',\n activeLabel: 'Setting default email account',\n category: 'Email',\n icon: 'mail',\n },\n fetch_email_attachments: {\n displayName: 'Fetch Attachments',\n activeLabel: 'Fetching email attachments',\n category: 'Email',\n icon: 'mail',\n emoji: '📎',\n },\n unified_email_fetch_attachments: {\n displayName: 'Fetch Attachments',\n activeLabel: 'Fetching email attachments',\n category: 'Email',\n icon: 'mail',\n emoji: '📎',\n },\n forward_email: {\n displayName: 'Forward Email',\n activeLabel: 'Forwarding email',\n category: 'Email',\n icon: 'mail',\n emoji: '📤',\n },\n unified_email_forward: {\n displayName: 'Forward Email',\n activeLabel: 'Forwarding email',\n completedLabel: 'Email forwarded',\n rejectedLabel: 'Email not forwarded (rejected)',\n category: 'Email',\n icon: 'mail',\n emoji: '📤',\n },\n search_calendar_events: {\n displayName: 'Search Calendar',\n activeLabel: 'Checking calendar',\n category: 'Email',\n icon: 'calendar',\n emoji: '📅',\n describe: describeQuery,\n },\n unified_search_calendar_events: {\n displayName: 'Search Calendar',\n activeLabel: 'Searching calendar',\n category: 'Email',\n icon: 'calendar',\n emoji: '📅',\n describe: describeQuery,\n },\n create_calendar_event_draft: {\n displayName: 'Create Calendar Event Draft',\n activeLabel: 'Creating calendar event',\n completedLabel: 'Calendar event created',\n rejectedLabel: 'Calendar event not created (rejected)',\n category: 'Email',\n icon: 'calendar',\n emoji: '📅',\n },\n unified_create_calendar_event_draft: {\n displayName: 'Create Calendar Event Draft',\n activeLabel: 'Creating calendar event',\n completedLabel: 'Calendar event created',\n rejectedLabel: 'Calendar event not created (rejected)',\n category: 'Email',\n icon: 'calendar',\n emoji: '📅',\n },\n create_google_calendar_event: {\n displayName: 'Create Calendar Event',\n activeLabel: 'Creating calendar event',\n category: 'Email',\n icon: 'calendar',\n emoji: '📅',\n },\n unified_create_calendar_event: {\n displayName: 'Create Calendar Event',\n activeLabel: 'Creating calendar event',\n completedLabel: 'Calendar event created',\n rejectedLabel: 'Calendar event not created (rejected)',\n category: 'Email',\n icon: 'calendar',\n emoji: '📅',\n },\n unified_update_calendar_event: {\n displayName: 'Update Calendar Event',\n activeLabel: 'Updating calendar event',\n category: 'Email',\n icon: 'calendar',\n emoji: '📅',\n },\n unified_calendar_get_event: {\n displayName: 'Get Calendar Event',\n activeLabel: 'Loading calendar event',\n category: 'Email',\n icon: 'calendar',\n emoji: '📅',\n },\n unified_get_free_busy: {\n displayName: 'Check Availability',\n activeLabel: 'Checking availability',\n category: 'Email',\n icon: 'calendar',\n emoji: '📅',\n },\n\n // ── Messaging & meetings ──\n send_slack_message: {\n displayName: 'Send Slack Message',\n activeLabel: 'Sending Slack message',\n category: 'Integrations',\n icon: 'message-square',\n emoji: '💬',\n },\n read_slack_channel: {\n displayName: 'Read Slack Channel',\n activeLabel: 'Reading Slack channel',\n category: 'Integrations',\n icon: 'message-square',\n emoji: '💬',\n },\n send_teams_message: {\n displayName: 'Send Teams Message',\n activeLabel: 'Sending Teams message',\n category: 'Integrations',\n icon: 'message-square',\n emoji: '💬',\n },\n query_meetings: {\n displayName: 'Query Meetings',\n activeLabel: 'Searching meetings',\n category: 'Meetings',\n icon: 'calendar',\n describe: describeQuery,\n },\n\n // ── Documents ──\n create_new_document: {\n displayName: 'Create Document',\n activeLabel: 'Creating document',\n completedLabel: 'Created document',\n category: 'Document',\n icon: 'file-text',\n describe: describeNamed(),\n },\n create_document_from_markdown: {\n displayName: 'Create Document from Markdown',\n activeLabel: 'Creating document',\n completedLabel: 'Created document',\n category: 'Document',\n icon: 'file-text',\n describe: describeNamed(),\n },\n append_markdown_to_athena_document: {\n displayName: 'Append to Document',\n activeLabel: 'Updating document',\n completedLabel: 'Updated document',\n category: 'Document',\n icon: 'pen-line',\n emoji: '📝',\n },\n replace_markdown_in_athena_document: {\n displayName: 'Replace in Document',\n activeLabel: 'Updating document',\n completedLabel: 'Updated document',\n category: 'Document',\n icon: 'pen-line',\n emoji: '📝',\n },\n insert_markdown_before_block: {\n displayName: 'Insert Before Block',\n activeLabel: 'Inserting content',\n category: 'Document',\n icon: 'pen-line',\n emoji: '📝',\n },\n insert_markdown_after_block: {\n displayName: 'Insert After Block',\n activeLabel: 'Inserting content',\n category: 'Document',\n icon: 'pen-line',\n emoji: '📝',\n },\n delete_blocks_from_athena_document: {\n displayName: 'Delete Blocks',\n activeLabel: 'Deleting blocks',\n category: 'Document',\n icon: 'trash',\n emoji: '🗑️',\n },\n clear_athena_document: {\n displayName: 'Clear Document',\n activeLabel: 'Clearing document',\n category: 'Document',\n icon: 'trash',\n emoji: '🗑️',\n },\n execute_word_document_code: {\n displayName: 'Edit Word Document',\n activeLabel: 'Editing Word document',\n category: 'Document',\n icon: 'file-text',\n },\n read_full_asset: {\n displayName: 'Read Asset',\n activeLabel: 'Reviewing asset content',\n completedLabel: 'Asset content reviewed',\n category: 'Spaces',\n icon: 'book-open',\n emoji: '📖',\n },\n read_asset: {\n displayName: 'Read Asset',\n activeLabel: 'Reviewing asset content',\n completedLabel: 'Asset content reviewed',\n category: 'Spaces',\n icon: 'book-open',\n emoji: '📖',\n },\n convert_athena_doc_to_pdf: {\n displayName: 'Convert to PDF',\n activeLabel: 'Converting to PDF',\n completedLabel: 'Converted to PDF',\n category: 'Document',\n icon: 'file-text',\n },\n convert_to_pdf: {\n displayName: 'Convert to PDF',\n activeLabel: 'Converting to PDF',\n completedLabel: 'Converted to PDF',\n category: 'Document',\n icon: 'file-text',\n },\n\n // ── Spreadsheets ──\n create_new_sheet: {\n displayName: 'Create Spreadsheet',\n activeLabel: 'Creating spreadsheet',\n completedLabel: 'Created spreadsheet',\n category: 'Spreadsheet',\n icon: 'bar-chart',\n describe: describeNamed(),\n },\n update_sheet_range: {\n displayName: 'Update Cells',\n activeLabel: 'Updating spreadsheet',\n completedLabel: 'Updated spreadsheet',\n category: 'Spreadsheet',\n icon: 'bar-chart',\n describe: describeRange,\n },\n bulk_format_sheet_range: {\n displayName: 'Format Cells',\n activeLabel: 'Formatting spreadsheet ranges',\n completedLabel: 'Formatted spreadsheet ranges',\n category: 'Spreadsheet',\n icon: 'bar-chart',\n emoji: '🎨',\n describe: describeRange,\n },\n format_sheet_range: {\n displayName: 'Format Cells',\n activeLabel: 'Formatting spreadsheet',\n completedLabel: 'Formatted spreadsheet',\n category: 'Spreadsheet',\n icon: 'bar-chart',\n emoji: '🎨',\n describe: describeRange,\n },\n set_row_column_dimensions: {\n displayName: 'Resize Rows and Columns',\n activeLabel: 'Resizing rows and columns',\n category: 'Spreadsheet',\n icon: 'table',\n },\n query_sheet_range: {\n displayName: 'Query Sheet',\n activeLabel: 'Querying spreadsheet',\n category: 'Spreadsheet',\n icon: 'search',\n emoji: '🔍',\n describe: describeRange,\n },\n create_chart: {\n displayName: 'Create Chart',\n activeLabel: 'Creating chart',\n completedLabel: 'Created chart',\n category: 'Spreadsheet',\n icon: 'trending-up',\n emoji: '📈',\n },\n execute_spreadsheet_code: {\n displayName: 'Execute Spreadsheet Code',\n activeLabel: 'Editing spreadsheet',\n category: 'Spreadsheet',\n icon: 'bar-chart',\n },\n execute_spreadsheet_commands: {\n displayName: 'Edit Spreadsheet',\n activeLabel: 'Editing spreadsheet',\n category: 'Spreadsheet',\n icon: 'bar-chart',\n },\n capture_sheet_screenshot: {\n displayName: 'Capture Sheet',\n activeLabel: 'Capturing sheet screenshot',\n category: 'Spreadsheet',\n icon: 'camera',\n emoji: '📸',\n },\n create_table: {\n displayName: 'Create Table',\n activeLabel: 'Creating table',\n completedLabel: 'Created table',\n category: 'Spreadsheet',\n icon: 'table',\n },\n update_table: {\n displayName: 'Update Table',\n activeLabel: 'Updating table',\n completedLabel: 'Updated table',\n category: 'Spreadsheet',\n icon: 'table',\n },\n table: {\n displayName: 'Table',\n activeLabel: 'Updating table',\n completedLabel: 'Updated table',\n category: 'Spreadsheet',\n icon: 'table',\n },\n update_sheet_cell: {\n displayName: 'Update Cells',\n activeLabel: 'Updating cells',\n completedLabel: 'Updated cells',\n category: 'Spreadsheet',\n icon: 'bar-chart',\n },\n\n // ── SQL & databases ──\n create_new_query_snippet: {\n displayName: 'Create Query',\n activeLabel: 'Creating query',\n category: 'SQL',\n icon: 'database',\n describe: describeNamed(),\n },\n execute_query_snippet: {\n displayName: 'Execute Query',\n activeLabel: 'Executing query',\n category: 'SQL',\n icon: 'play',\n emoji: '▶️',\n },\n update_query_snippet: {\n displayName: 'Update Query',\n activeLabel: 'Updating query',\n category: 'SQL',\n icon: 'pen-line',\n emoji: '✏️',\n },\n get_database_connection_details: {\n displayName: 'Get DB Connection',\n activeLabel: 'Loading connection details',\n category: 'SQL',\n icon: 'database',\n emoji: '🔌',\n },\n run_sql: {\n displayName: 'Run SQL Query',\n activeLabel: 'Running database query',\n completedLabel: 'Query complete',\n category: 'Database',\n icon: 'database',\n describe: describeSql,\n },\n run_database_sql: {\n displayName: 'Run SQL Query',\n activeLabel: 'Running database query',\n completedLabel: 'Query complete',\n category: 'Database',\n icon: 'database',\n describe: describeSql,\n },\n run_sql_query_tool: {\n displayName: 'Run SQL Query',\n activeLabel: 'Running database query',\n completedLabel: 'Query complete',\n category: 'Database',\n icon: 'database',\n describe: describeSql,\n },\n create_database: {\n displayName: 'Create Database',\n activeLabel: 'Setting up database',\n category: 'Database',\n icon: 'database',\n describe: describeNamed(),\n },\n create_database_table: {\n displayName: 'Create Table',\n activeLabel: 'Creating table',\n category: 'Database',\n icon: 'table',\n describe: describeTable,\n },\n describe_database: {\n displayName: 'Describe Database',\n activeLabel: 'Inspecting database',\n category: 'Database',\n icon: 'database',\n },\n list_database_schemas: {\n displayName: 'List Schemas',\n activeLabel: 'Loading schemas',\n category: 'Database',\n icon: 'database',\n },\n list_database_tables: {\n displayName: 'List Tables',\n activeLabel: 'Listing database tables',\n category: 'Database',\n icon: 'database',\n },\n get_database_table_schema: {\n displayName: 'Get Table Schema',\n activeLabel: 'Reading table schema',\n category: 'Database',\n icon: 'database',\n describe: describeTable,\n },\n load_tool_result_to_database: {\n displayName: 'Load Result to Database',\n activeLabel: 'Loading result into database',\n category: 'Database',\n icon: 'database',\n },\n list_databricks_tables: {\n displayName: 'List Databricks Tables',\n activeLabel: 'Listing Databricks tables',\n category: 'Database',\n icon: 'database',\n },\n describe_databricks_table: {\n displayName: 'Describe Databricks Table',\n activeLabel: 'Inspecting Databricks table',\n category: 'Database',\n icon: 'database',\n describe: describeTable,\n },\n execute_databricks_query: {\n displayName: 'Run Databricks Query',\n activeLabel: 'Running Databricks query',\n category: 'Database',\n icon: 'database',\n describe: describeSql,\n },\n\n // ── Python ──\n run_python_code: {\n displayName: 'Run Python',\n activeLabel: 'Running Python code',\n completedLabel: 'Python execution complete',\n category: 'Python',\n icon: 'code',\n },\n install_pip_package: {\n displayName: 'Install Package',\n activeLabel: 'Installing package',\n category: 'Python',\n icon: 'package',\n emoji: '📦',\n describe: describePackage,\n },\n get_installed_packages: {\n displayName: 'List Packages',\n activeLabel: 'Loading installed packages',\n category: 'Python',\n icon: 'package',\n emoji: '📦',\n },\n create_new_python_script: {\n displayName: 'Create Script',\n activeLabel: 'Creating Python script',\n category: 'Python',\n icon: 'code',\n describe: describeNamed(),\n },\n update_python_script: {\n displayName: 'Update Script',\n activeLabel: 'Updating Python script',\n category: 'Python',\n icon: 'code',\n },\n run_python_script: {\n displayName: 'Run Script',\n activeLabel: 'Running Python script',\n category: 'Python',\n icon: 'play',\n emoji: '▶️',\n },\n\n // ── Spaces & assets ──\n open_asset_in_workspace: {\n displayName: 'Open Asset',\n activeLabel: 'Opening in workspace',\n completedLabel: 'Opened in workspace',\n category: 'Spaces',\n icon: 'folder-open',\n },\n list_contents: {\n displayName: 'List Contents',\n activeLabel: 'Browsing files',\n category: 'Spaces',\n icon: 'folder',\n emoji: '📁',\n },\n create_new_folder: {\n displayName: 'Create Folder',\n activeLabel: 'Creating folder',\n category: 'Spaces',\n icon: 'folder',\n emoji: '📁',\n describe: describeNamed(),\n },\n create_new_project: {\n displayName: 'Create Project',\n activeLabel: 'Creating project',\n category: 'Spaces',\n icon: 'clipboard-list',\n emoji: '📋',\n describe: describeNamed(),\n },\n update_project: {\n displayName: 'Update Project',\n activeLabel: 'Updating project',\n category: 'Spaces',\n icon: 'clipboard-list',\n emoji: '📋',\n },\n project_links: {\n displayName: 'Project Links',\n activeLabel: 'Managing project links',\n category: 'Spaces',\n icon: 'link',\n emoji: '🔗',\n },\n search_assets: {\n displayName: 'Search Assets',\n activeLabel: 'Searching files',\n category: 'Spaces',\n icon: 'search',\n emoji: '🔍',\n describe: describeQuery,\n },\n rename_assets: {\n displayName: 'Rename Assets',\n activeLabel: 'Renaming assets',\n category: 'Spaces',\n icon: 'pen-line',\n emoji: '✏️',\n },\n duplicate_asset: {\n displayName: 'Duplicate Asset',\n activeLabel: 'Duplicating asset',\n category: 'Spaces',\n icon: 'folder-open',\n emoji: '📋',\n },\n move_assets_to_folder: {\n displayName: 'Move Assets',\n activeLabel: 'Moving assets',\n category: 'Spaces',\n icon: 'folder-open',\n },\n create_collection: {\n displayName: 'Create Collection',\n activeLabel: 'Creating collection',\n completedLabel: 'Created collection',\n category: 'Spaces',\n icon: 'book-open',\n emoji: '📚',\n describe: describeNamed(),\n },\n update_collection: {\n displayName: 'Update Collection',\n activeLabel: 'Updating collection',\n completedLabel: 'Updated collection',\n category: 'Spaces',\n icon: 'book-open',\n emoji: '📚',\n },\n add_assets_to_collection: {\n displayName: 'Add to Collection',\n activeLabel: 'Organizing assets',\n completedLabel: 'Assets organized',\n category: 'Spaces',\n icon: 'book-open',\n emoji: '📚',\n },\n remove_assets_from_collection: {\n displayName: 'Remove from Collection',\n activeLabel: 'Removing assets',\n category: 'Spaces',\n icon: 'book-open',\n emoji: '📚',\n },\n add_assets_to_favorites: {\n displayName: 'Add to Favorites',\n activeLabel: 'Adding to favorites',\n category: 'Spaces',\n icon: 'star',\n emoji: '⭐',\n },\n\n // ── Visualizations & canvas ──\n create_new_figure: {\n displayName: 'Create Figure',\n activeLabel: 'Creating figure',\n category: 'Visualization',\n icon: 'trending-up',\n describe: describeNamed(),\n },\n create_new_dashboard: {\n displayName: 'Create Dashboard',\n activeLabel: 'Creating dashboard',\n category: 'Visualization',\n icon: 'layout-dashboard',\n describe: describeNamed(),\n },\n update_figure_asset: {\n displayName: 'Update Figure',\n activeLabel: 'Updating figure',\n category: 'Visualization',\n icon: 'trending-up',\n },\n update_dashboard_asset: {\n displayName: 'Update Dashboard',\n activeLabel: 'Updating dashboard',\n category: 'Visualization',\n icon: 'layout-dashboard',\n },\n CreateNewCanvas: {\n displayName: 'Create Canvas',\n activeLabel: 'Creating canvas',\n category: 'Canvas',\n icon: 'palette',\n describe: describeNamed(),\n },\n UpdateCanvasAsset: {\n displayName: 'Update Canvas',\n activeLabel: 'Updating canvas',\n category: 'Canvas',\n icon: 'palette',\n },\n generate_image: {\n displayName: 'Generate Image',\n activeLabel: 'Generating image',\n category: 'Media',\n icon: 'image',\n emoji: '🖼️',\n },\n query_single_image: {\n displayName: 'Analyze Image',\n activeLabel: 'Analyzing image',\n category: 'Media',\n icon: 'image',\n emoji: '🖼️',\n },\n capture_moment: {\n displayName: 'Capture Moment',\n activeLabel: 'Capturing moment',\n completedLabel: 'Moment captured',\n category: 'Media',\n icon: 'camera',\n },\n\n // ── Presentations ──\n create_powerpoint_deck: {\n displayName: 'Create Presentation',\n activeLabel: 'Creating presentation',\n completedLabel: 'Created presentation',\n category: 'Presentation',\n icon: 'presentation',\n describe: describeNamed(),\n },\n create_presentation_pptx_studio: {\n displayName: 'Create Presentation',\n activeLabel: 'Creating presentation',\n completedLabel: 'Created presentation',\n category: 'Presentation',\n icon: 'presentation',\n describe: describeNamed(),\n },\n capture_slide_screenshot: {\n displayName: 'Capture Slide',\n activeLabel: 'Capturing slide',\n completedLabel: 'Slide captured',\n category: 'Presentation',\n icon: 'camera',\n emoji: '📸',\n },\n execute_presentation_code: {\n displayName: 'Execute Presentation Code',\n activeLabel: 'Updating presentation',\n completedLabel: 'Updated presentation',\n category: 'Presentation',\n icon: 'presentation',\n emoji: '▶️',\n },\n get_template_placeholders: {\n displayName: 'Get Placeholders',\n activeLabel: 'Loading template placeholders',\n category: 'Presentation',\n icon: 'presentation',\n },\n\n // ── User interfaces ──\n create_new_user_interface: {\n displayName: 'Create UI',\n activeLabel: 'Creating user interface',\n category: 'UI',\n icon: 'monitor',\n describe: describeNamed(),\n },\n update_user_interface_code: {\n displayName: 'Update UI Code',\n activeLabel: 'Updating UI code',\n category: 'UI',\n icon: 'monitor',\n },\n patch_user_interface_code: {\n displayName: 'Patch UI Code',\n activeLabel: 'Patching UI code',\n category: 'UI',\n icon: 'monitor',\n },\n\n // ── Notebooks ──\n create_new_notebook: {\n displayName: 'Create Notebook',\n activeLabel: 'Creating notebook',\n completedLabel: 'Created notebook',\n category: 'Notebook',\n icon: 'book-open',\n describe: describeNamed(),\n },\n execute_cell: {\n displayName: 'Execute Cell',\n activeLabel: 'Running notebook cell',\n category: 'Notebook',\n icon: 'code',\n emoji: '▶️',\n },\n add_cell_content: {\n displayName: 'Add Cell',\n activeLabel: 'Adding cell',\n category: 'Notebook',\n icon: 'book-open',\n },\n replace_cell_content: {\n displayName: 'Replace Cell',\n activeLabel: 'Replacing cell content',\n category: 'Notebook',\n icon: 'book-open',\n },\n\n // ── Workflows (AOP) ──\n create_new_aop: {\n displayName: 'Create AOP',\n activeLabel: 'Creating workflow',\n category: 'AOP',\n icon: 'brain',\n describe: describeNamed(),\n },\n update_aop: {\n displayName: 'Update AOP',\n activeLabel: 'Updating workflow',\n category: 'AOP',\n icon: 'brain',\n },\n execute_aop: {\n displayName: 'Execute AOP',\n activeLabel: 'Running workflow',\n category: 'AOP',\n icon: 'brain',\n emoji: '▶️',\n },\n\n // ── Browser & computer ──\n create_new_browse_session: {\n displayName: 'Open Browser',\n activeLabel: 'Opening browser session',\n category: 'Browser',\n icon: 'globe',\n },\n go_to_url: {\n displayName: 'Navigate',\n activeLabel: 'Navigating',\n category: 'Browser',\n icon: 'globe',\n describe: describeUrl,\n },\n get_page_text: {\n displayName: 'Read Page',\n activeLabel: 'Reading page content',\n category: 'Browser',\n icon: 'file-text',\n emoji: '📖',\n },\n computer: {\n displayName: 'Computer Action',\n activeLabel: 'Using computer',\n completedLabel: 'Computer action complete',\n category: 'Browser',\n icon: 'mouse-pointer',\n emoji: '🖱️',\n },\n computer_asset_create: {\n displayName: 'Create Computer',\n activeLabel: 'Creating computer asset',\n category: 'Computer',\n icon: 'monitor',\n },\n\n // ── External drives ──\n search_sharepoint: {\n displayName: 'Search SharePoint',\n activeLabel: 'Searching SharePoint',\n category: 'Drive',\n icon: 'search',\n emoji: '🔍',\n describe: describeQuery,\n },\n search_onedrive: {\n displayName: 'Search OneDrive',\n activeLabel: 'Searching OneDrive',\n category: 'Drive',\n icon: 'search',\n emoji: '🔍',\n describe: describeQuery,\n },\n fetch_onedrive_url: {\n displayName: 'Fetch OneDrive File',\n activeLabel: 'Fetching OneDrive file',\n category: 'Drive',\n icon: 'file-text',\n emoji: '📄',\n describe: describeUrl,\n },\n search_google_drive: {\n displayName: 'Search Google Drive',\n activeLabel: 'Searching Google Drive',\n category: 'Drive',\n icon: 'search',\n emoji: '🔍',\n describe: describeQuery,\n },\n\n // ── Comments ──\n list_comment_threads: {\n displayName: 'List Comments',\n activeLabel: 'Loading comments',\n category: 'Comments',\n icon: 'message-square',\n },\n add_comment: {\n displayName: 'Add Comment',\n activeLabel: 'Adding comment',\n category: 'Comments',\n icon: 'message-square',\n },\n reply_to_comment: {\n displayName: 'Reply to Comment',\n activeLabel: 'Replying to comment',\n category: 'Comments',\n icon: 'message-square',\n },\n\n // ── Analysis & memory ──\n in_depth_analysis: {\n displayName: 'In-Depth Analysis',\n activeLabel: 'Analyzing',\n category: 'Analysis',\n icon: 'microscope',\n describe: describeQuery,\n },\n save_preference_as_memory: {\n displayName: 'Save Preference',\n activeLabel: 'Saving preference',\n category: 'Memory',\n icon: 'save',\n },\n search_memory_preferences: {\n displayName: 'Search Preferences',\n activeLabel: 'Searching preferences',\n category: 'Memory',\n icon: 'search',\n emoji: '🔍',\n describe: describeQuery,\n },\n edit_preference_memory: {\n displayName: 'Edit Preference',\n activeLabel: 'Editing preference',\n category: 'Memory',\n icon: 'pen-line',\n emoji: '✏️',\n },\n\n // ── Playbooks, GitHub, ontology, scripts, project manager ──\n create_new_playbook: {\n displayName: 'Create Playbook',\n activeLabel: 'Creating playbook',\n category: 'Playbook',\n icon: 'book-open',\n describe: describeNamed(),\n },\n update_playbook: {\n displayName: 'Update Playbook',\n activeLabel: 'Updating playbook',\n category: 'Playbook',\n icon: 'book-open',\n },\n github_fetch_file: {\n displayName: 'Fetch File',\n activeLabel: 'Fetching file from GitHub',\n category: 'GitHub',\n icon: 'file-text',\n emoji: '📄',\n describe: describePath,\n },\n github_list_directory: {\n displayName: 'List Directory',\n activeLabel: 'Listing GitHub directory',\n category: 'GitHub',\n icon: 'folder',\n emoji: '📁',\n describe: describePath,\n },\n github_get_pull_request: {\n displayName: 'Get Pull Request',\n activeLabel: 'Loading pull request',\n category: 'GitHub',\n icon: 'git-pull-request',\n },\n github_list_pull_requests: {\n displayName: 'List Pull Requests',\n activeLabel: 'Loading pull requests',\n category: 'GitHub',\n icon: 'git-pull-request',\n },\n list_object_types: {\n displayName: 'List Object Types',\n activeLabel: 'Reading object types',\n category: 'Ontology',\n icon: 'boxes',\n },\n create_object_type: {\n displayName: 'Create Object Type',\n activeLabel: 'Creating object type',\n category: 'Ontology',\n icon: 'boxes',\n emoji: '🧩',\n describe: describeNamed(),\n },\n update_object_type: {\n displayName: 'Update Object Type',\n activeLabel: 'Updating object type',\n category: 'Ontology',\n icon: 'boxes',\n emoji: '🧩',\n },\n search_objects: {\n displayName: 'Search Objects',\n activeLabel: 'Searching objects',\n category: 'Ontology',\n icon: 'search',\n emoji: '🔎',\n describe: describeQuery,\n },\n create_object: {\n displayName: 'Create Object',\n activeLabel: 'Creating object',\n category: 'Ontology',\n icon: 'package',\n emoji: '📦',\n describe: describeNamed(),\n },\n create_objects: {\n displayName: 'Create Objects',\n activeLabel: 'Creating objects',\n category: 'Ontology',\n icon: 'package',\n emoji: '📦',\n },\n update_object: {\n displayName: 'Update Object',\n activeLabel: 'Updating object',\n category: 'Ontology',\n icon: 'package',\n emoji: '📦',\n },\n archive_object: {\n displayName: 'Archive Object',\n activeLabel: 'Archiving object',\n category: 'Ontology',\n icon: 'package',\n },\n get_object_links: {\n displayName: 'Get Object Links',\n activeLabel: 'Reading links',\n category: 'Ontology',\n icon: 'link',\n emoji: '🔗',\n },\n link_objects: {\n displayName: 'Link Objects',\n activeLabel: 'Linking objects',\n category: 'Ontology',\n icon: 'link',\n emoji: '🔗',\n },\n unlink_objects: {\n displayName: 'Unlink Objects',\n activeLabel: 'Removing link',\n category: 'Ontology',\n icon: 'link',\n emoji: '🔗',\n },\n create_wm_script: {\n displayName: 'Create Script',\n activeLabel: 'Creating script',\n category: 'Task Studio',\n icon: 'scroll-text',\n describe: describeNamed(),\n },\n execute_wm_script: {\n displayName: 'Execute Script',\n activeLabel: 'Executing script',\n category: 'Task Studio',\n icon: 'play',\n emoji: '▶️',\n },\n create_project_with_manager: {\n displayName: 'Create Managed Project',\n activeLabel: 'Creating managed project',\n category: 'Project Manager',\n icon: 'clipboard-list',\n describe: describeNamed(),\n },\n get_pm_roadmap: {\n displayName: 'Get Roadmap',\n activeLabel: 'Loading roadmap',\n category: 'Project Manager',\n icon: 'clipboard-list',\n emoji: '🗺️',\n },\n\n // ── Voice mode (a run delegated from a live GPT Live conversation) ──\n send_voice_update: {\n displayName: 'Voice Update',\n activeLabel: 'Speaking to you',\n completedLabel: 'Voice update sent',\n category: 'Agent',\n internal: true,\n icon: 'message-square',\n emoji: '🗣️',\n describe: (args) => (typeof args.text === 'string' && args.text ? args.text : undefined),\n },\n\n // ── Agent runtime & workspace files (deepagents built-ins) ──\n task: {\n displayName: 'Delegate to Subagent',\n activeLabel: 'Delegating to a subagent',\n category: 'Agent',\n internal: true,\n icon: 'bot',\n describe: describeDelegation,\n },\n start_async_task: {\n displayName: 'Start Background Task',\n activeLabel: 'Starting background task',\n category: 'Agent',\n internal: true,\n icon: 'bot',\n describe: describeDelegation,\n },\n check_async_task: {\n displayName: 'Check Background Task',\n activeLabel: 'Checking background task',\n category: 'Agent',\n internal: true,\n icon: 'bot',\n },\n update_async_task: {\n displayName: 'Update Background Task',\n activeLabel: 'Updating background task',\n category: 'Agent',\n internal: true,\n icon: 'bot',\n },\n cancel_async_task: {\n displayName: 'Cancel Background Task',\n activeLabel: 'Cancelling background task',\n category: 'Agent',\n internal: true,\n icon: 'bot',\n },\n list_async_tasks: {\n displayName: 'List Background Tasks',\n activeLabel: 'Listing background tasks',\n category: 'Agent',\n internal: true,\n icon: 'bot',\n },\n write_todos: {\n displayName: 'Plan',\n activeLabel: 'Planning',\n category: 'Agent',\n internal: true,\n icon: 'list-checks',\n emoji: '📝',\n },\n ask: {\n displayName: 'Ask a Question',\n activeLabel: 'Waiting for your input',\n completedLabel: 'Input received',\n category: 'Agent',\n internal: true,\n icon: 'circle-help',\n emoji: '❓',\n },\n final_response: {\n displayName: 'Final Response',\n activeLabel: 'Finishing up',\n category: 'Agent',\n internal: true,\n icon: 'flag',\n emoji: '🏁',\n },\n execute: {\n displayName: 'Run Command',\n activeLabel: 'Running a command',\n category: 'Files',\n internal: true,\n icon: 'terminal',\n emoji: '⌨️',\n },\n eval: {\n displayName: 'Evaluate Code',\n activeLabel: 'Evaluating code',\n category: 'Files',\n internal: true,\n icon: 'code',\n },\n read_file: {\n displayName: 'Review Working Files',\n activeLabel: 'Reviewing working files',\n category: 'Files',\n internal: true,\n icon: 'scan-search',\n describe: describePath,\n },\n ls: {\n displayName: 'Check Workspace',\n activeLabel: 'Checking the workspace',\n category: 'Files',\n internal: true,\n icon: 'folder-open',\n describe: describePath,\n },\n write_file: {\n displayName: 'Save Working Files',\n activeLabel: 'Saving working files',\n category: 'Files',\n internal: true,\n icon: 'file-text',\n describe: describePath,\n },\n edit_file: {\n displayName: 'Update Working Files',\n activeLabel: 'Updating working files',\n category: 'Files',\n internal: true,\n icon: 'pen-line',\n describe: describePath,\n },\n glob: {\n displayName: 'Search Working Files',\n activeLabel: 'Searching working files',\n category: 'Files',\n internal: true,\n icon: 'search',\n describe: (args) => nonBlank(args.pattern) ?? nonBlank(args.query) ?? nonBlank(args.path),\n },\n grep: {\n displayName: 'Search Working Files',\n activeLabel: 'Searching working files',\n category: 'Files',\n internal: true,\n icon: 'search',\n describe: (args) => nonBlank(args.pattern) ?? nonBlank(args.query) ?? nonBlank(args.path),\n },\n\n // ── Athena Studio SDK sub-calls (programmatic tool calling) ──\n CreateWorkbook: {\n displayName: 'Create Workbook',\n activeLabel: 'Creating workbook',\n category: 'Spreadsheet',\n internal: true,\n icon: 'bar-chart',\n describe: describeNamed(),\n },\n AddSheet: {\n displayName: 'Add Sheet',\n activeLabel: 'Adding sheet',\n category: 'Spreadsheet',\n internal: true,\n icon: 'table',\n describe: describeNamed(),\n },\n OpenWorkbook: {\n displayName: 'Open Workbook',\n activeLabel: 'Opening workbook',\n category: 'Spreadsheet',\n internal: true,\n icon: 'folder-open',\n },\n WriteCells: {\n displayName: 'Write Cells',\n activeLabel: 'Writing cells',\n category: 'Spreadsheet',\n internal: true,\n icon: 'bar-chart',\n describe: describeRange,\n },\n CreatePresentation: {\n displayName: 'Create Presentation',\n activeLabel: 'Creating presentation',\n category: 'Presentation',\n internal: true,\n icon: 'presentation',\n describe: describeNamed(),\n },\n OpenPresentation: {\n displayName: 'Open Presentation',\n activeLabel: 'Opening presentation',\n category: 'Presentation',\n internal: true,\n icon: 'folder-open',\n },\n AddSlide: {\n displayName: 'Add Slide',\n activeLabel: 'Adding slide',\n category: 'Presentation',\n internal: true,\n icon: 'presentation',\n },\n CreateDocument: {\n displayName: 'Create Document',\n activeLabel: 'Creating document',\n category: 'Document',\n internal: true,\n icon: 'file-text',\n describe: describeNamed(),\n },\n OpenDocument: {\n displayName: 'Open Document',\n activeLabel: 'Opening document',\n category: 'Document',\n internal: true,\n icon: 'folder-open',\n },\n CreateParagraph: {\n displayName: 'Write Paragraph',\n activeLabel: 'Writing paragraph',\n category: 'Document',\n internal: true,\n icon: 'pen-line',\n },\n CreateHeading: {\n displayName: 'Write Heading',\n activeLabel: 'Writing heading',\n category: 'Document',\n internal: true,\n icon: 'pen-line',\n },\n CreateTable: {\n displayName: 'Insert Table',\n activeLabel: 'Inserting table',\n category: 'Document',\n internal: true,\n icon: 'table',\n },\n AddCitation: {\n displayName: 'Add Citation',\n activeLabel: 'Adding citation',\n category: 'Document',\n internal: true,\n icon: 'link',\n },\n\n // ── Chrome extension (device tools) ──\n chrome_tabs_context: {\n displayName: 'Open Tabs',\n activeLabel: 'Checking open tabs',\n completedLabel: 'Checked open tabs',\n category: 'Browser',\n icon: 'globe',\n },\n chrome_tabs_create: {\n displayName: 'New Tab',\n activeLabel: 'Opening a new tab',\n completedLabel: 'Opened a new tab',\n category: 'Browser',\n icon: 'globe',\n },\n chrome_batch: {\n displayName: 'Chrome Actions',\n activeLabel: 'Working in Chrome',\n completedLabel: 'Chrome actions complete',\n category: 'Browser',\n icon: 'list-checks',\n },\n chrome_computer: {\n displayName: 'Page Interaction',\n activeLabel: 'Interacting with the page',\n completedLabel: 'Page interaction complete',\n category: 'Browser',\n icon: 'mouse-pointer',\n emoji: '🖱️',\n },\n chrome_navigate: {\n displayName: 'Navigate Page',\n activeLabel: 'Navigating the page',\n completedLabel: 'Page navigation complete',\n category: 'Browser',\n icon: 'globe',\n },\n chrome_read_page: {\n displayName: 'Read Page',\n activeLabel: 'Reading the page',\n completedLabel: 'Read the page',\n category: 'Browser',\n icon: 'file-text',\n emoji: '📖',\n },\n chrome_find: {\n displayName: 'Find on Page',\n activeLabel: 'Finding page content',\n completedLabel: 'Found page content',\n category: 'Browser',\n icon: 'scan-search',\n emoji: '🔍',\n },\n chrome_form_input: {\n displayName: 'Fill Form',\n activeLabel: 'Filling in the page',\n completedLabel: 'Updated the page',\n category: 'Browser',\n icon: 'pen-line',\n },\n chrome_get_page_text: {\n displayName: 'Page Text',\n activeLabel: 'Reading page text',\n completedLabel: 'Read page text',\n category: 'Browser',\n icon: 'file-text',\n emoji: '📖',\n },\n chrome_javascript: {\n displayName: 'Page JavaScript',\n activeLabel: 'Running page JavaScript',\n completedLabel: 'Page JavaScript complete',\n category: 'Browser',\n icon: 'code',\n },\n chrome_read_console: {\n displayName: 'Browser Console',\n activeLabel: 'Checking the console',\n completedLabel: 'Checked the console',\n category: 'Browser',\n icon: 'terminal',\n },\n chrome_read_network: {\n displayName: 'Network Activity',\n activeLabel: 'Checking network activity',\n completedLabel: 'Checked network activity',\n category: 'Browser',\n icon: 'link',\n },\n chrome_wait_for: {\n displayName: 'Wait for Page',\n activeLabel: 'Waiting for the page',\n completedLabel: 'Page is ready',\n category: 'Browser',\n icon: 'play',\n },\n chrome_gif_creator: {\n displayName: 'Create GIF',\n activeLabel: 'Creating a GIF',\n completedLabel: 'Created a GIF',\n category: 'Browser',\n icon: 'image',\n emoji: '🎞️',\n },\n chrome_shortcuts_list: {\n displayName: 'Browser Shortcuts',\n activeLabel: 'Checking browser shortcuts',\n completedLabel: 'Checked browser shortcuts',\n category: 'Browser',\n icon: 'list-checks',\n },\n chrome_shortcuts_execute: {\n displayName: 'Run Browser Shortcut',\n activeLabel: 'Using a browser shortcut',\n completedLabel: 'Browser shortcut complete',\n category: 'Browser',\n icon: 'play',\n },\n chrome_handle_dialog: {\n displayName: 'Browser Dialog',\n activeLabel: 'Handling the browser dialog',\n completedLabel: 'Handled the browser dialog',\n category: 'Browser',\n icon: 'message-square',\n },\n\n\n // ── Tool management ──\n toggle_toolkit: {\n displayName: 'Toggle Toolkit',\n activeLabel: 'Toggling toolkit',\n category: 'Tool',\n icon: 'settings',\n emoji: '🧰',\n },\n enable_tool_by_id: {\n displayName: 'Enable Tool',\n activeLabel: 'Enabling tool',\n category: 'Tool',\n icon: 'settings',\n emoji: '🧰',\n },\n};\n\n// ─── Public API ────────────────────────────────────────────────────────\n\n/**\n * Humanize a `snake_case` / `camelCase` tool name into a Title Case label\n * (`create_new_sheet` → \"Create New Sheet\", `CreateWorkbook` → \"Create Workbook\").\n */\nexport function formatToolName(toolName: string): string {\n return toolName\n .replace(/_/g, ' ')\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/\\b\\w/g, (char) => char.toUpperCase())\n .trim();\n}\n\n/** The generic presentation for a tool with no registry entry. */\nexport function defaultToolDisplayMeta(toolName: string): ToolDisplayMeta {\n const displayName = formatToolName(toolName);\n return {\n displayName,\n activeLabel: `Running ${displayName}`,\n category: 'Tool',\n icon: 'wrench',\n emoji: DEFAULT_EMOJI,\n };\n}\n\n/** True when the registry has an entry for `toolName`. */\nexport function hasToolDisplayMeta(toolName: string): boolean {\n return Object.hasOwn(TOOL_DISPLAY_META, toolName);\n}\n\n/** Display metadata for `toolName` — the registry entry, else a readable default. Never throws. */\nexport function getToolDisplayMeta(toolName: string): ToolDisplayMeta {\n const entry = TOOL_DISPLAY_META[toolName];\n if (!entry) return defaultToolDisplayMeta(toolName);\n return { ...entry, emoji: entry.emoji ?? CATEGORY_EMOJI[entry.category] };\n}\n\n/** Every tool name with a registry entry. */\nexport function knownToolNames(): string[] {\n return Object.keys(TOOL_DISPLAY_META);\n}\n\n/** The emoji for a category (the wrench for anything unknown). */\nexport function getCategoryEmoji(category: string): string {\n return (CATEGORY_EMOJI as Record<string, string>)[category] ?? DEFAULT_EMOJI;\n}\n\n/**\n * The one-line summary of a call's arguments, when the tool knows how to\n * summarize them (`args` may be undefined or unparsed while streaming).\n */\nexport function describeToolArgs({\n toolName,\n args,\n}: {\n toolName: string;\n args: Record<string, unknown> | undefined;\n}): string | undefined {\n const describe = getToolDisplayMeta(toolName).describe;\n if (!describe || !args) return undefined;\n const summary = describe(args);\n return summary?.trim() ? summary : undefined;\n}\n\n/**\n * The running-row label: the activity plus the call's own summary\n * (\"Searching the web: \\\"quarterly revenue\\\"\"), without trailing punctuation.\n */\nexport function toolActiveLabel({\n toolName,\n args,\n}: {\n toolName: string;\n args: Record<string, unknown> | undefined;\n}): string {\n const meta = getToolDisplayMeta(toolName);\n const summary = describeToolArgs({ toolName, args });\n return summary ? `${meta.activeLabel}: ${summary}` : meta.activeLabel;\n}\n\nconst PAST_TENSE_IRREGULARS: readonly [RegExp, string][] = [\n [/^Taking\\b/, 'Took'],\n [/^Getting\\b/, 'Got'],\n [/^Running\\b/, 'Ran'],\n [/^Reading\\b/, 'Read'],\n [/^Finding\\b/, 'Found'],\n [/^Writing\\b/, 'Wrote'],\n [/^Building\\b/, 'Built'],\n [/^Setting\\b/, 'Set'],\n [/^Sending\\b/, 'Sent'],\n];\n\n/**\n * Turn a present-tense activity label into its completed form\n * (\"Taking screenshot\" → \"Took screenshot\", \"Navigating to x\" → \"Navigated to x\").\n * Labels that do not open with an \"-ing\" verb come back unchanged.\n */\nexport function toolCompletedLabel(activeLabel: string): string {\n for (const [pattern, replacement] of PAST_TENSE_IRREGULARS) {\n if (pattern.test(activeLabel)) return activeLabel.replace(pattern, replacement);\n }\n return activeLabel.replace(/^(\\w+)ing\\b/, (_match, base: string) =>\n /[^aeiou]y$/.test(base) ? `${base.slice(0, -1)}ied` : `${base}ed`,\n );\n}\n\n/** The step states an activity row can be in; the tool card's own states plus the approval outcomes. */\nexport type ToolStatusLabelState =\n | 'running'\n | 'complete'\n | 'rejected'\n | 'cancelled'\n | 'paused'\n | 'error'\n | 'waiting';\n\n/**\n * The status-row copy for a tool call in a given state — the one wording the\n * SDK's activity card, Olympus's, and the Chrome extension's all render:\n *\n * - `running` is the registry activity (\"Searching the web\");\n * - `complete` is the curated `completedLabel` (\"Web search complete\"), else\n * the activity's past tense (\"Created computer asset\"), else the tool's\n * name;\n * - `rejected` is the curated `rejectedLabel` (\"Email not sent (rejected)\"),\n * else \"<name> — rejected\", so a call the user declined never borrows the\n * success wording;\n * - `cancelled` / `paused` / `error` / `waiting` read the same on every\n * surface.\n *\n * `displayName` lets a host with a richer tool catalog (Olympus's registry\n * names) label tools this registry has no entry for; entries always win.\n */\nexport function toolStatusLabel(\n toolName: string,\n state: ToolStatusLabelState,\n displayName?: string,\n): string {\n const known = hasToolDisplayMeta(toolName);\n const meta = getToolDisplayMeta(toolName);\n const name = known ? meta.displayName : (displayName ?? meta.displayName);\n switch (state) {\n case 'running':\n return known || !displayName ? meta.activeLabel : `Running ${displayName}`;\n case 'complete':\n if (meta.completedLabel) return meta.completedLabel;\n return known ? toolCompletedLabel(meta.activeLabel) : name;\n case 'rejected':\n return meta.rejectedLabel ?? `${name} — rejected`;\n case 'cancelled':\n return `${name} — cancelled`;\n case 'paused':\n return `${name} — paused`;\n case 'error':\n return `${name} failed`;\n case 'waiting':\n return 'Waiting for your input';\n }\n}\n"],"names":[],"mappings":"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"}