@athenaintel/react 0.18.0 → 0.19.0

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 (101) hide show
  1. package/README.md +106 -4
  2. package/dist/SuperGroupingCard-BsWbHyV_.js +795 -0
  3. package/dist/SuperGroupingCard-BsWbHyV_.js.map +1 -0
  4. package/dist/SuperGroupingCard-CRRFUgjN.cjs +794 -0
  5. package/dist/SuperGroupingCard-CRRFUgjN.cjs.map +1 -0
  6. package/dist/chat/StatewireApprovalCard.d.ts +59 -2
  7. package/dist/chat/StatewireClientToolBridge.d.ts +3 -3
  8. package/dist/chat/StatewireQueuedMessages.d.ts +105 -6
  9. package/dist/chat/statewire-approval.d.ts +1 -1
  10. package/dist/chat/statewire-client-tools.d.ts +15 -21
  11. package/dist/chat/super-grouping/CollapsibleGroup.d.ts +52 -11
  12. package/dist/chat/super-grouping/SuperGroupingCard.d.ts +78 -21
  13. package/dist/chat/super-grouping/activity-timeline.d.ts +91 -0
  14. package/dist/chat/super-grouping/grouping-function.d.ts +13 -10
  15. package/dist/chat/super-grouping/index.d.ts +12 -0
  16. package/dist/chat/super-grouping/toolkit-map.d.ts +8 -1
  17. package/dist/chat/use-statewire-approval-request.d.ts +44 -0
  18. package/dist/chat-ui/header/conversation-history-panel.d.ts +11 -1
  19. package/dist/chat-ui/index.d.ts +7 -1
  20. package/dist/chat-ui/mentions/suggestions/shims.d.ts +0 -4
  21. package/dist/chat-ui/messages/runtime-message.d.ts +2 -3
  22. package/dist/chat-ui/messages/statewire-continue-run.d.ts +48 -7
  23. package/dist/chat-ui/messages/user-edit-composer.d.ts +5 -2
  24. package/dist/chat-ui/statewire.d.ts +19 -0
  25. package/dist/chat-ui/thread/chat-thread-shell.d.ts +7 -1
  26. package/dist/chat-ui/thread/statewire-history-edge.d.ts +52 -0
  27. package/dist/chat-ui-statewire.cjs +25 -0
  28. package/dist/chat-ui-statewire.cjs.map +1 -0
  29. package/dist/chat-ui-statewire.js +25 -0
  30. package/dist/chat-ui-statewire.js.map +1 -0
  31. package/dist/chat-ui.cjs +174 -357
  32. package/dist/chat-ui.cjs.map +1 -1
  33. package/dist/chat-ui.js +173 -355
  34. package/dist/chat-ui.js.map +1 -1
  35. package/dist/diagnostics/athena-diagnostics.d.ts +1 -1
  36. package/dist/diagnostics/errors.d.ts +4 -0
  37. package/dist/index.cjs +2222 -5183
  38. package/dist/index.cjs.map +1 -1
  39. package/dist/index.d.ts +21 -6
  40. package/dist/index.js +4193 -7151
  41. package/dist/index.js.map +1 -1
  42. package/dist/misc-tool-uis-B2e0Okkn.cjs +43 -0
  43. package/dist/misc-tool-uis-B2e0Okkn.cjs.map +1 -0
  44. package/dist/misc-tool-uis-gAiQw0Yl.js +44 -0
  45. package/dist/misc-tool-uis-gAiQw0Yl.js.map +1 -0
  46. package/dist/provider/AthenaProvider.d.ts +4 -2
  47. package/dist/provider/config.d.ts +9 -2
  48. package/dist/provider/statewire-window-context.d.ts +12 -0
  49. package/dist/runtime/statewire-auth-headers.d.ts +38 -0
  50. package/dist/runtime/statewire-lifecycle.d.ts +25 -0
  51. package/dist/runtime/statewire-session-key.d.ts +13 -0
  52. package/dist/runtime/useAthenaStatewireRuntime.d.ts +36 -5
  53. package/dist/statewire-continue-run-D34gS7_1.js +132 -0
  54. package/dist/statewire-continue-run-D34gS7_1.js.map +1 -0
  55. package/dist/statewire-continue-run-nE9VCKUh.cjs +131 -0
  56. package/dist/statewire-continue-run-nE9VCKUh.cjs.map +1 -0
  57. package/dist/statewire-history-edge-C8uyTEjX.cjs +1711 -0
  58. package/dist/statewire-history-edge-C8uyTEjX.cjs.map +1 -0
  59. package/dist/statewire-history-edge-CPohUKMt.js +1712 -0
  60. package/dist/statewire-history-edge-CPohUKMt.js.map +1 -0
  61. package/dist/styles.css +1 -1
  62. package/dist/super-grouping.cjs +22 -0
  63. package/dist/super-grouping.cjs.map +1 -0
  64. package/dist/super-grouping.js +22 -0
  65. package/dist/super-grouping.js.map +1 -0
  66. package/dist/threads/mint-thread-id.d.ts +8 -0
  67. package/dist/threads/statewire-thread-list.d.ts +20 -4
  68. package/dist/tool-fallback-DkQ3DLkn.js +4281 -0
  69. package/dist/tool-fallback-DkQ3DLkn.js.map +1 -0
  70. package/dist/tool-fallback-kfhpJQZa.cjs +4297 -0
  71. package/dist/tool-fallback-kfhpJQZa.cjs.map +1 -0
  72. package/dist/tools/index.d.ts +14 -0
  73. package/dist/tools/misc-tool-uis.d.ts +2 -0
  74. package/dist/tools/primitives.d.ts +41 -0
  75. package/dist/tools/tool-fallback.d.ts +78 -6
  76. package/dist/tools/tool-icons.d.ts +10 -0
  77. package/dist/tools/tool-uis.d.ts +1 -23
  78. package/dist/tools.cjs +41 -0
  79. package/dist/tools.cjs.map +1 -0
  80. package/dist/tools.js +41 -0
  81. package/dist/tools.js.map +1 -0
  82. package/dist/trash-2-B5OaNAL7.cjs +5096 -0
  83. package/dist/trash-2-B5OaNAL7.cjs.map +1 -0
  84. package/dist/trash-2-CCwSURL-.js +5081 -0
  85. package/dist/trash-2-CCwSURL-.js.map +1 -0
  86. package/dist/{use-rest-conversation-history-Dm0rdQgT.cjs → use-rest-conversation-history-Cm8qMRxp.cjs} +445 -5406
  87. package/dist/use-rest-conversation-history-Cm8qMRxp.cjs.map +1 -0
  88. package/dist/{use-rest-conversation-history-Bs5qn5G3.js → use-rest-conversation-history-veDZS-oL.js} +491 -5452
  89. package/dist/use-rest-conversation-history-veDZS-oL.js.map +1 -0
  90. package/dist/wrench-BEf72cyP.cjs +417 -0
  91. package/dist/wrench-BEf72cyP.cjs.map +1 -0
  92. package/dist/wrench-CbrOlVYm.js +418 -0
  93. package/dist/wrench-CbrOlVYm.js.map +1 -0
  94. package/dist/x-Dfd2NzK0.cjs +42 -0
  95. package/dist/x-Dfd2NzK0.cjs.map +1 -0
  96. package/dist/x-_DntAa_a.js +43 -0
  97. package/dist/x-_DntAa_a.js.map +1 -0
  98. package/package.json +29 -11
  99. package/dist/chat/super-grouping/tool-status-labels.d.ts +0 -1
  100. package/dist/use-rest-conversation-history-Bs5qn5G3.js.map +0 -1
  101. package/dist/use-rest-conversation-history-Dm0rdQgT.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-fallback-DkQ3DLkn.js","sources":["../../agent-runtime/src/tool-metadata.ts","../../agent-runtime/src/tool-result.ts","../../../node_modules/@radix-ui/react-primitive/dist/index.mjs","../../../node_modules/@radix-ui/react-context/dist/index.mjs","../../../node_modules/@radix-ui/primitive/dist/index.mjs","../../../node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../../../node_modules/@radix-ui/react-use-effect-event/dist/index.mjs","../../../node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../../../node_modules/@radix-ui/react-presence/dist/index.mjs","../../../node_modules/@radix-ui/react-id/dist/index.mjs","../../../node_modules/@radix-ui/react-collapsible/dist/index.mjs","../../../node_modules/zustand/esm/vanilla.mjs","../../../node_modules/zustand/esm/react.mjs","../../../node_modules/zustand/esm/middleware.mjs","../src/assets/asset-panel-store.ts","../../../node_modules/lucide-react/dist/esm/icons/boxes.js","../../../node_modules/lucide-react/dist/esm/icons/brain.js","../../../node_modules/lucide-react/dist/esm/icons/chart-column.js","../../../node_modules/lucide-react/dist/esm/icons/circle-check.js","../../../node_modules/lucide-react/dist/esm/icons/circle-question-mark.js","../../../node_modules/lucide-react/dist/esm/icons/circle-x.js","../../../node_modules/lucide-react/dist/esm/icons/clipboard-copy.js","../../../node_modules/lucide-react/dist/esm/icons/clipboard-list.js","../../../node_modules/lucide-react/dist/esm/icons/cpu.js","../../../node_modules/lucide-react/dist/esm/icons/external-link.js","../../../node_modules/lucide-react/dist/esm/icons/flag.js","../../../node_modules/lucide-react/dist/esm/icons/folder-open.js","../../../node_modules/lucide-react/dist/esm/icons/git-pull-request.js","../../../node_modules/lucide-react/dist/esm/icons/hash.js","../../../node_modules/lucide-react/dist/esm/icons/link.js","../../../node_modules/lucide-react/dist/esm/icons/list-checks.js","../../../node_modules/lucide-react/dist/esm/icons/loader.js","../../../node_modules/lucide-react/dist/esm/icons/microscope.js","../../../node_modules/lucide-react/dist/esm/icons/mouse-pointer-click.js","../../../node_modules/lucide-react/dist/esm/icons/pen-line.js","../../../node_modules/lucide-react/dist/esm/icons/presentation.js","../../../node_modules/lucide-react/dist/esm/icons/save.js","../../../node_modules/lucide-react/dist/esm/icons/scan-search.js","../../../node_modules/lucide-react/dist/esm/icons/scroll-text.js","../../../node_modules/lucide-react/dist/esm/icons/settings.js","../../../node_modules/lucide-react/dist/esm/icons/shield-alert.js","../../../node_modules/lucide-react/dist/esm/icons/terminal.js","../../../node_modules/lucide-react/dist/esm/icons/trending-up.js","../src/ui/collapsible.tsx","../src/tools/NestedPtcMessages.tsx","../src/tools/primitives.tsx","../src/tools/tool-icons.ts","../src/tools/tool-fallback.tsx"],"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 semantic_search: {\n displayName: 'Semantic Search',\n activeLabel: 'Searching your sources',\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 // ── 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","/**\n * Tool-result classification shared by every tool card and activity timeline\n * (the React SDK fallback, Olympus, the Chrome extension, the Office add-in,\n * mobile). One rule set for \"did this call succeed?\", so a result that reads\n * as a failure on one surface cannot read as a success on another.\n *\n * The rules, in order:\n *\n * 1. An `incomplete` status is a failure; a `cancelled` reason reads as\n * \"Cancelled\".\n * 2. A string result opening with \"⏸️ Interrupted —\" is a **paused** call (the\n * runtime parked it), not a failure.\n * 2b. A result that records the user's refusal at the approval gate (see\n * {@link readRejectedToolResult}) is a **rejected** call — neither a success\n * nor a failure. It is read before the failure rules because the HITL\n * runtime answers a refused call with an error-status tool message whose\n * content is the refusal, which would otherwise read as a plain failure.\n * Never applied to a pass-through payload: page JavaScript relays whatever\n * the page returned, and a `{ status: \"rejected\" }` from a fetched API is\n * the page's business, not a human decision.\n * 3. A result record whose `success` or `ok` is `false` is a failure, with\n * the best message available (`error`, `message`, `reason`, or a\n * `data.humanIntervention` detail). Athena tools report failures this way\n * — the sheet tools answer `{ success: false, message: \"…\" }` — so a bare\n * flag must read as a failure. The one exception is a **pass-through\n * payload** (`passThroughPayload: true`): page JavaScript relays whatever\n * the page returned, and `{ success: false, message: \"Payment required\" }`\n * from a fetched API is the page's business, not the tool failing, so there\n * the flag counts only alongside an error detail (`error`, `errorCode`,\n * `error_code`, or a `humanIntervention` message / reason / code). The\n * Chrome extension opts its `chrome_javascript` tool in; everything else\n * takes the default.\n * 4. A result record with a non-empty `error` string is a failure regardless\n * of flags — every Athena tool contract uses that field only on failure.\n * 5. A plain-string result opening with an explicit error prefix (`Error:`,\n * `Tool execution failed`, `Failed to route tool call`) is a failure —\n * device-tunnel failures arrive in successful ToolMessages, so the prefix\n * is the authoritative signal there. A bare leading \"Error\" word is not\n * (an \"Error handling guide\" is content). A batch report that stopped at a\n * step reads its header and failing step.\n * 6. assistant-ui's own `isError` flag is a failure with the best message\n * available.\n * 7. `requires-action` and a result-less non-complete status read as such;\n * everything else is a success.\n */\n\n/** The status shape a tool-call message part carries (structurally typed so this module stays UI-library-free). */\nexport interface ToolCallStatusLike {\n type: 'running' | 'complete' | 'incomplete' | 'requires-action';\n reason?: string;\n error?: unknown;\n}\n\nexport interface ToolFailure {\n message: string;\n code?: string;\n}\n\nexport type ToolResultClassification =\n | { state: 'running' }\n | { state: 'complete' }\n | { state: 'requires-action' }\n | { state: 'paused'; notice: string }\n | { state: 'rejected'; rejection: RejectedToolResult }\n | { state: 'error'; failure: ToolFailure };\n\nexport type ToolResultState = ToolResultClassification['state'];\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** Parse a JSON string into a record, or `null` when it is not one. */\nexport function parseJsonRecord(value: string): Record<string, unknown> | null {\n try {\n const parsed: unknown = JSON.parse(value);\n return isRecord(parsed) ? parsed : null;\n } catch {\n return null;\n }\n}\n\n/** The result as a record: parsed when it arrived as a JSON string. */\nexport function resultRecord(result: unknown): Record<string, unknown> | null {\n if (typeof result === 'string') return parseJsonRecord(result);\n return isRecord(result) ? result : null;\n}\n\n/** The first non-blank string among `keys` on `record`, or `null`. */\nexport function stringField(\n record: Record<string, unknown> | null | undefined,\n keys: readonly string[],\n): string | null {\n if (!record) return null;\n for (const key of keys) {\n const value = record[key];\n if (typeof value === 'string' && value.trim()) return value;\n }\n return null;\n}\n\n/** The `message` a result carries, when it does (the row's completion summary). */\nexport function resultMessage(result: unknown): string | null {\n return stringField(resultRecord(result), ['message']);\n}\n\nconst FAILURE_DETAIL_KEYS = ['error', 'errorCode', 'error_code'] as const;\nconst INTERVENTION_DETAIL_KEYS = ['message', 'reason', 'errorCode', 'error_code'] as const;\nconst FAILURE_CODE_KEYS = ['errorCode', 'error_code', 'code'] as const;\nconst FAILURE_MESSAGE_KEYS = ['error', 'message', 'reason'] as const;\n\nfunction batchReportFailure(trimmed: string): string | null {\n const lines = trimmed.split('\\n');\n const header = lines[0]?.trim() ?? '';\n if (!/^[\\w.-]*batch: \\d+\\/\\d+ ok — STOPPED at step \\d+/.test(header)) {\n return null;\n }\n const stepError = lines\n .map((line) => line.trim())\n .find(\n (line) =>\n /^\\d+\\.\\s/.test(line) && (line.includes(' ERROR — ') || line.endsWith(' ERROR')),\n );\n return stepError ? `${header}\\n${stepError}` : header;\n}\n\nconst STRING_ERROR_PREFIX = /^(?:Error:|Tool execution failed\\b|Failed to route tool call\\b)\\s*/;\n\nfunction plainStringError(result: unknown): string | null {\n if (typeof result !== 'string') return null;\n const trimmed = result.trim();\n if (!trimmed || parseJsonRecord(trimmed)) return null;\n if (STRING_ERROR_PREFIX.test(trimmed)) {\n return trimmed.replace(STRING_ERROR_PREFIX, '').trim() || trimmed;\n }\n return batchReportFailure(trimmed);\n}\n\nfunction pausedNotice(result: unknown): string | null {\n if (typeof result !== 'string') return null;\n const trimmed = result.trim();\n return /^⏸️?\\s*Interrupted —/.test(trimmed) ? trimmed : null;\n}\n\nfunction stringifyUnknown(value: unknown): string | null {\n if (value == null) return null;\n if (typeof value === 'string') return value;\n if (value instanceof Error) return value.message;\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\n/** The failure a tool call reports, or `null` when it succeeded (rules 1, 3-6). */\nexport function toolFailure({\n status,\n result,\n isError,\n passThroughPayload = false,\n}: {\n status?: ToolCallStatusLike;\n result?: unknown;\n isError?: boolean;\n /** The result is an application payload relayed verbatim (rule 3): a flag needs an error detail to count. */\n passThroughPayload?: boolean;\n}): ToolFailure | null {\n if (status?.type === 'incomplete') {\n const errorText = stringifyUnknown(status.error);\n return {\n message:\n errorText ??\n (status.reason === 'cancelled' ? 'Cancelled' : `Tool stopped: ${status.reason}`),\n };\n }\n\n const record = resultRecord(result);\n const data = isRecord(record?.data) ? record.data : null;\n const humanIntervention = isRecord(data?.humanIntervention) ? data.humanIntervention : null;\n const failureDetail =\n stringField(record, FAILURE_DETAIL_KEYS) ??\n stringField(humanIntervention, INTERVENTION_DETAIL_KEYS);\n const flagged = record?.success === false || record?.ok === false;\n const flaggedFailure = flagged && (!passThroughPayload || failureDetail !== null);\n const errorField = stringField(record, ['error']) !== null;\n const stringError = plainStringError(result);\n\n if (!isError && !flaggedFailure && !errorField && !stringError) return null;\n\n const code =\n stringField(record, FAILURE_CODE_KEYS) ??\n stringField(humanIntervention, FAILURE_CODE_KEYS) ??\n undefined;\n const message =\n stringField(record, FAILURE_MESSAGE_KEYS) ??\n stringField(humanIntervention, FAILURE_MESSAGE_KEYS) ??\n stringError ??\n (typeof result === 'string' && !parseJsonRecord(result) ? result : null) ??\n 'Tool execution failed';\n\n return { message, code };\n}\n\n/** Classify a tool call for rendering (see the module docs for the rules). */\nexport function classifyToolResult({\n status,\n result,\n isError,\n passThroughPayload,\n}: {\n status?: ToolCallStatusLike;\n result?: unknown;\n isError?: boolean;\n /** The result is an application payload relayed verbatim (rule 3): a flag needs an error detail to count. */\n passThroughPayload?: boolean;\n}): ToolResultClassification {\n const notice = pausedNotice(result);\n if (notice) return { state: 'paused', notice };\n\n const rejection = passThroughPayload ? null : readRejectedToolResult(result);\n if (rejection) return { state: 'rejected', rejection };\n\n const failure = toolFailure({ status, result, isError, passThroughPayload });\n if (failure) return { state: 'error', failure };\n if (status?.type === 'requires-action') return { state: 'requires-action' };\n if (result === undefined && status?.type !== 'complete') {\n return { state: 'running' };\n }\n return { state: 'complete' };\n}\n\n/** True when a completed call reads as a success under the shared rules. */\nexport function isToolResultSuccess(result: unknown): boolean {\n return classifyToolResult({ status: { type: 'complete' }, result }).state === 'complete';\n}\n\n/**\n * A gated tool call the user rejected still \"completes\": both HITL runtimes\n * answer the rejected call with a `ToolMessage` whose text is the rejection\n * (\"Tool call rejected by user. Reason: …\"), and device tools may answer with\n * a structured decision (`{ status: 'rejected' }`, `{ action: 'reject' }`,\n * `{ decision: 'rejected' }`). Anything that labels a finished call has to\n * read that, or a rejected email send reports itself as sent. The read is\n * content-based, so it is scoped to where a rejection can appear: the opening\n * of a string result, never deep inside returned content, and never a\n * pass-through page payload (see {@link classifyToolResult}).\n */\nexport interface RejectedToolResult {\n /** The feedback the user typed, when they gave one. */\n reason: string | null;\n}\n\n/**\n * Phrasings the HITL runtimes use for a *human* rejection. Matching on these\n * rather than the word \"reject\" keeps deterministic failures out — argument\n * validation answers a call with \"Tool call rejected — ValidationError: …\",\n * which never involved the user and stays a plain failure.\n */\nconst USER_REJECTION_PATTERNS: readonly RegExp[] = [/rejected by (?:the )?user/i, /user rejected/i];\n\n/**\n * A rejection IS the tool message, so the phrasing opens it: \"The user rejected\n * this action. …\" (`hitl_bridge.py`), \"Tool call rejected by user. Reason: …\",\n * \"Tool 'x' execution rejected by user. …\", \"[INTERRUPT] Custom interrupt\n * '<uuid>' rejected by user. …\". Content a tool merely *returned* — a page read\n * or a document whose text happens to say a user rejected something — carries\n * the phrase deeper in, so only a match starting within this many characters\n * of the first line counts.\n */\nconst USER_REJECTION_LEAD_CHARS = 100;\n\n/** Whether `result` opens with a human-rejection phrasing (see {@link USER_REJECTION_LEAD_CHARS}). */\nfunction opensWithUserRejection(result: string): boolean {\n const firstLine = result.trimStart().split('\\n', 1)[0] ?? '';\n return USER_REJECTION_PATTERNS.some((pattern) => {\n const index = firstLine.search(pattern);\n return index !== -1 && index < USER_REJECTION_LEAD_CHARS;\n });\n}\n\n/** Reject-with-no-feedback placeholder the legacy approval editor sends. */\nconst NO_REASON = 'no reason provided';\n\n/**\n * Model-facing guidance the legacy HITL node appends on the same line after\n * the reason (\"… Reason: <reason> Acknowledge in one short sentence. Do not\n * retry…\"). It is instruction for the model, not the user's feedback.\n */\nconst TRAILING_GUIDANCE = /\\s*Acknowledge in one short sentence\\..*$/i;\n\n/**\n * Read a rejection out of a completed tool call's result, or `null` when the\n * call actually ran (or failed for a non-approval reason).\n */\nexport function readRejectedToolResult(result: unknown): RejectedToolResult | null {\n if (typeof result === 'string') {\n if (!opensWithUserRejection(result)) return null;\n const reason = result\n .match(/Reason:\\s*(.+)/i)?.[1]\n ?.replace(TRAILING_GUIDANCE, '')\n .trim();\n if (!reason || reason.toLowerCase() === NO_REASON) return { reason: null };\n return { reason };\n }\n if (!isRecord(result)) return null;\n if (result.status === 'rejected' || result.action === 'reject' || result.decision === 'rejected') {\n return { reason: stringField(result, ['reason']) };\n }\n return null;\n}\n\n/** True when a completed call's result records that the user rejected it. */\nexport function isRejectedToolResult(result: unknown): boolean {\n return readRejectedToolResult(result) !== null;\n}\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\n__name(dispatchDiscreteCustomEvent, \"dispatchDiscreteCustomEvent\");\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n Context.displayName = rootComponentName + \"Context\";\n const Provider = /* @__PURE__ */ __name((props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n }, \"Provider\");\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, options = {}) {\n const { optional = false } = options;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n if (optional) return void 0;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n __name(useContext2, \"useContext\");\n return [Provider, useContext2];\n}\n__name(createContext2, \"createContext\");\n// @__NO_SIDE_EFFECTS__\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n BaseContext.displayName = rootComponentName + \"Context\";\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = /* @__PURE__ */ __name((props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n }, \"Provider\");\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope, options = {}) {\n const { optional = false } = options;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n if (optional) return void 0;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n __name(useContext2, \"useContext\");\n return [Provider, useContext2];\n }\n __name(createContext3, \"createContext\");\n const createScope = /* @__PURE__ */ __name(() => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return /* @__PURE__ */ __name(function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n }, \"useScope\");\n }, \"createScope\");\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\n__name(createContextScope, \"createContextScope\");\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = /* @__PURE__ */ __name(() => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return /* @__PURE__ */ __name(function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n }, \"useComposedScopes\");\n }, \"createScope\");\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\n__name(composeContextScopes, \"composeContextScopes\");\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/primitive.tsx\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n return /* @__PURE__ */ __name(function handleEvent(event) {\n originalEventHandler?.(event);\n if (checkForDefaultPrevented === false || !event || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n }, \"handleEvent\");\n}\n__name(composeEventHandlers, \"composeEventHandlers\");\nfunction getOwnerWindow(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access window outside of the DOM\");\n }\n return element?.ownerDocument?.defaultView ?? window;\n}\n__name(getOwnerWindow, \"getOwnerWindow\");\nfunction getOwnerDocument(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access document outside of the DOM\");\n }\n return element?.ownerDocument ?? document;\n}\n__name(getOwnerDocument, \"getOwnerDocument\");\nfunction getActiveElement(node, activeDescendant = false) {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n return null;\n }\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n if (activeDescendant) {\n const id = activeElement.getAttribute(\"aria-activedescendant\");\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n return activeElement;\n}\n__name(getActiveElement, \"getActiveElement\");\nfunction isFrame(element) {\n return element.tagName === \"IFRAME\";\n}\n__name(isFrame, \"isFrame\");\nexport {\n canUseDOM,\n composeEventHandlers,\n getActiveElement,\n getOwnerDocument,\n getOwnerWindow,\n isFrame\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-layout-effect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = globalThis?.document ? React.useLayoutEffect : () => {\n};\nexport {\n useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/use-effect-event.tsx\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport * as React from \"react\";\nvar useReactEffectEvent = React[\" useEffectEvent \".trim().toString()];\nvar useReactInsertionEffect = React[\" useInsertionEffect \".trim().toString()];\nfunction useEffectEvent(callback) {\n if (typeof useReactEffectEvent === \"function\") {\n return useReactEffectEvent(callback);\n }\n const ref = React.useRef(() => {\n throw new Error(\"Cannot call an event handler while rendering.\");\n });\n if (typeof useReactInsertionEffect === \"function\") {\n useReactInsertionEffect(() => {\n ref.current = callback;\n });\n } else {\n useLayoutEffect(() => {\n ref.current = callback;\n });\n }\n return React.useMemo(() => ((...args) => ref.current?.(...args)), []);\n}\n__name(useEffectEvent, \"useEffectEvent\");\nexport {\n useEffectEvent\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/use-controllable-state.tsx\nimport * as React from \"react\";\nimport { IS_DEVELOPMENT } from \"@radix-ui/primitive/is-development\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useInsertionEffect = React[\" useInsertionEffect \".trim().toString()] || useLayoutEffect;\nfunction useControllableState({\n prop,\n defaultProp,\n onChange = /* @__PURE__ */ __name(() => {\n }, \"onChange\"),\n caller\n}) {\n const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n defaultProp,\n onChange\n });\n const isControlled = prop !== void 0;\n const value = isControlled ? prop : uncontrolledProp;\n if (IS_DEVELOPMENT) {\n const isControlledRef = React.useRef(prop !== void 0);\n React.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const setValue = React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;\n if (value2 !== prop) {\n onChangeRef.current?.(value2);\n }\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, onChangeRef]\n );\n return [value, setValue];\n}\n__name(useControllableState, \"useControllableState\");\nfunction useUncontrolledState({\n defaultProp,\n onChange\n}) {\n const [value, setValue] = React.useState(defaultProp);\n const prevValueRef = React.useRef(value);\n const onChangeRef = React.useRef(onChange);\n useInsertionEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n onChangeRef.current?.(value);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef]);\n return [value, setValue, onChangeRef];\n}\n__name(useUncontrolledState, \"useUncontrolledState\");\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n__name(isFunction, \"isFunction\");\n\n// src/use-controllable-state-reducer.tsx\nimport * as React2 from \"react\";\nimport { IS_DEVELOPMENT as IS_DEVELOPMENT2 } from \"@radix-ui/primitive/is-development\";\nimport { useEffectEvent } from \"@radix-ui/react-use-effect-event\";\nvar SYNC_STATE = Symbol(\"RADIX:SYNC_STATE\");\nfunction useControllableStateReducer(reducer, userArgs, initialArg, init) {\n const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n const isControlled = controlledState !== void 0;\n const onChange = useEffectEvent(onChangeProp);\n if (IS_DEVELOPMENT2) {\n const isControlledRef = React2.useRef(controlledState !== void 0);\n React2.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const args = [{ ...initialArg, state: defaultProp }];\n if (init) {\n args.push(init);\n }\n const [internalState, dispatch] = React2.useReducer(\n (state2, action) => {\n if (action.type === SYNC_STATE) {\n return { ...state2, state: action.state };\n }\n const next = reducer(state2, action);\n if (isControlled && !Object.is(next.state, state2.state)) {\n onChange(next.state);\n }\n return next;\n },\n ...args\n );\n const uncontrolledState = internalState.state;\n const prevValueRef = React2.useRef(uncontrolledState);\n React2.useEffect(() => {\n if (prevValueRef.current !== uncontrolledState) {\n prevValueRef.current = uncontrolledState;\n if (!isControlled) {\n onChange(uncontrolledState);\n }\n }\n }, [uncontrolledState, prevValueRef, isControlled]);\n const state = React2.useMemo(() => {\n const isControlled2 = controlledState !== void 0;\n if (isControlled2) {\n return { ...internalState, state: controlledState };\n }\n return internalState;\n }, [internalState, controlledState]);\n React2.useEffect(() => {\n if (isControlled && !Object.is(controlledState, internalState.state)) {\n dispatch({ type: SYNC_STATE, state: controlledState });\n }\n }, [controlledState, internalState.state, isControlled]);\n return [state, dispatch];\n}\n__name(useControllableStateReducer, \"useControllableStateReducer\");\nexport {\n useControllableState,\n useControllableStateReducer\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/presence.tsx\nimport * as React2 from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// src/use-state-machine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n__name(useStateMachine, \"useStateMachine\");\n\n// src/presence.tsx\nvar Presence = /* @__PURE__ */ __name((props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n const ref = useStableComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === \"function\";\n return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n}, \"Presence\");\nfunction usePresence(present) {\n const [node, setNode] = React2.useState();\n const stylesRef = React2.useRef(null);\n const prevPresentRef = React2.useRef(present);\n const prevAnimationNameRef = React2.useRef(\"none\");\n const mountAnimationNameRef = React2.useRef(void 0);\n const initialState = present ? \"mounted\" : \"unmounted\";\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: \"unmounted\",\n ANIMATION_OUT: \"unmountSuspended\"\n },\n unmountSuspended: {\n MOUNT: \"mounted\",\n ANIMATION_END: \"unmounted\"\n },\n unmounted: {\n MOUNT: \"mounted\"\n }\n });\n React2.useEffect(() => {\n if (state === \"mounted\") {\n prevAnimationNameRef.current = mountAnimationNameRef.current ?? getAnimationName(stylesRef.current);\n mountAnimationNameRef.current = void 0;\n } else {\n prevAnimationNameRef.current = \"none\";\n }\n }, [state]);\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n if (present) {\n mountAnimationNameRef.current = currentAnimationName;\n send(\"MOUNT\");\n } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n send(\"UNMOUNT\");\n } else {\n const isAnimating = prevAnimationName !== currentAnimationName;\n if (wasPresent && isAnimating) {\n send(\"ANIMATION_OUT\");\n } else {\n send(\"UNMOUNT\");\n }\n }\n prevPresentRef.current = present;\n }\n }, [present, send]);\n useLayoutEffect(() => {\n if (node) {\n let timeoutId;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n const handleAnimationEnd = /* @__PURE__ */ __name((event) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n if (event.target === node && isCurrentAnimation) {\n send(\"ANIMATION_END\");\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = \"forwards\";\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === \"forwards\") {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n }, \"handleAnimationEnd\");\n const handleAnimationStart = /* @__PURE__ */ __name((event) => {\n if (event.target === node) {\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n }, \"handleAnimationStart\");\n node.addEventListener(\"animationstart\", handleAnimationStart);\n node.addEventListener(\"animationcancel\", handleAnimationEnd);\n node.addEventListener(\"animationend\", handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener(\"animationstart\", handleAnimationStart);\n node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n node.removeEventListener(\"animationend\", handleAnimationEnd);\n };\n } else {\n send(\"ANIMATION_END\");\n }\n }, [node, send]);\n return {\n isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n ref: React2.useCallback((node2) => {\n if (node2) {\n const styles = getComputedStyle(node2);\n stylesRef.current = styles;\n mountAnimationNameRef.current = getAnimationName(styles);\n } else {\n stylesRef.current = null;\n }\n setNode(node2);\n }, [])\n };\n}\n__name(usePresence, \"usePresence\");\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\n__name(setRef, \"setRef\");\nfunction useStableComposedRefs(...refs) {\n const refsRef = React2.useRef(refs);\n refsRef.current = refs;\n return React2.useCallback((node) => {\n const currentRefs = refsRef.current;\n let hasCleanup = false;\n const cleanups = currentRefs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup === \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup === \"function\") {\n cleanup();\n } else {\n setRef(currentRefs[i], null);\n }\n }\n };\n }\n }, []);\n}\n__name(useStableComposedRefs, \"useStableComposedRefs\");\nfunction getAnimationName(styles) {\n return styles?.animationName || \"none\";\n}\n__name(getAnimationName, \"getAnimationName\");\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\n__name(getElementRef, \"getElementRef\");\nvar Root = Presence;\nexport {\n Presence,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/id.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useReactId = React[\" useId \".trim().toString()] || (() => void 0);\nvar count = 0;\nfunction useId(deterministicId) {\n const [id, setId] = React.useState(useReactId());\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : \"\");\n}\n__name(useId, \"useId\");\nexport {\n useId\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/collapsible.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar COLLAPSIBLE_NAME = \"Collapsible\";\nvar [createCollapsibleContext, createCollapsibleScope] = createContextScope(COLLAPSIBLE_NAME);\nvar [CollapsibleProvider, useCollapsibleContext] = createCollapsibleContext(COLLAPSIBLE_NAME);\nvar Collapsible = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function Collapsible2(props, forwardedRef) {\n const {\n __scopeCollapsible,\n open: openProp,\n defaultOpen,\n disabled,\n onOpenChange,\n ...collapsibleProps\n } = props;\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: COLLAPSIBLE_NAME\n });\n return /* @__PURE__ */ jsx(\n CollapsibleProvider,\n {\n scope: __scopeCollapsible,\n disabled,\n contentId: useId(),\n open,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(open),\n \"data-disabled\": disabled ? \"\" : void 0,\n ...collapsibleProps,\n ref: forwardedRef\n }\n )\n }\n );\n }, \"Collapsible\")\n);\nvar TRIGGER_NAME = \"CollapsibleTrigger\";\nvar CollapsibleTrigger = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function CollapsibleTrigger2(props, forwardedRef) {\n const { __scopeCollapsible, ...triggerProps } = props;\n const context = useCollapsibleContext(TRIGGER_NAME, __scopeCollapsible);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-controls\": context.open ? context.contentId : void 0,\n \"aria-expanded\": context.open || false,\n \"data-state\": getState(context.open),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n disabled: context.disabled,\n ...triggerProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }, \"CollapsibleTrigger\")\n);\nvar CONTENT_NAME = \"CollapsibleContent\";\nvar CollapsibleContent = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function CollapsibleContent2(props, forwardedRef) {\n const { forceMount, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, props.__scopeCollapsible);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: ({ present }) => /* @__PURE__ */ jsx(CollapsibleContentImpl, { ...contentProps, ref: forwardedRef, present }) });\n }, \"CollapsibleContent\")\n);\nvar CollapsibleContentImpl = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name(function CollapsibleContentImpl2(props, forwardedRef) {\n const { __scopeCollapsible, present, children, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, __scopeCollapsible);\n const [isPresent, setIsPresent] = React.useState(present);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const heightRef = React.useRef(0);\n const height = heightRef.current;\n const widthRef = React.useRef(0);\n const width = widthRef.current;\n const isOpen = context.open || isPresent;\n const isMountAnimationPreventedRef = React.useRef(isOpen);\n const originalStylesRef = React.useRef(void 0);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n useLayoutEffect(() => {\n const node = ref.current;\n if (node) {\n originalStylesRef.current = originalStylesRef.current || {\n transitionDuration: node.style.transitionDuration,\n animationName: node.style.animationName\n };\n node.style.transitionDuration = \"0s\";\n node.style.animationName = \"none\";\n const rect = node.getBoundingClientRect();\n heightRef.current = rect.height;\n widthRef.current = rect.width;\n if (!isMountAnimationPreventedRef.current) {\n node.style.transitionDuration = originalStylesRef.current.transitionDuration;\n node.style.animationName = originalStylesRef.current.animationName;\n }\n setIsPresent(present);\n }\n }, [context.open, present]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n id: context.contentId,\n hidden: !isOpen,\n ...contentProps,\n ref: composedRefs,\n style: {\n [`--radix-collapsible-content-height`]: height ? `${height}px` : void 0,\n [`--radix-collapsible-content-width`]: width ? `${width}px` : void 0,\n ...props.style\n },\n children: isOpen && children\n }\n );\n}, \"CollapsibleContentImpl\"));\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\n__name(getState, \"getState\");\nvar Root = Collapsible;\nvar Trigger = CollapsibleTrigger;\nvar Content = CollapsibleContent;\nexport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n Content,\n Root,\n Trigger,\n createCollapsibleScope\n};\n//# sourceMappingURL=index.mjs.map\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n React.useCallback(() => selector(api.getState()), [api, selector]),\n React.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\nexport { create, useStore };\n","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...args) => api.dispatch(...args), ...initial };\n};\nconst redux = reduxImpl;\n\nconst shouldDispatchFromDevtools = (api) => !!api.dispatchFromDevtools && typeof api.dispatch === \"function\";\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api) return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst removeStoreFromTrackedConnections = (name, store) => {\n if (store === void 0) return;\n const connectionInfo = trackedConnections.get(name);\n if (!connectionInfo) return;\n delete connectionInfo.stores[store];\n if (Object.keys(connectionInfo.stores).length === 0) {\n trackedConnections.delete(name);\n }\n};\nconst v8StackLineRe = /^at (?:new |async )?(.+?) \\(/;\nconst geckoStackLineRe = /^([^@]+)@/;\nfunction findCallerName(stack) {\n var _a, _b, _c;\n if (!stack) return void 0;\n const traceLines = stack.split(\"\\n\");\n const apiSetStateLineIndex = traceLines.findIndex(\n (traceLine) => traceLine.includes(\"api.setState\")\n );\n if (apiSetStateLineIndex < 0) return void 0;\n const callerLine = ((_a = traceLines[apiSetStateLineIndex + 1]) == null ? void 0 : _a.trim()) || \"\";\n return ((_b = v8StackLineRe.exec(callerLine)) == null ? void 0 : _b[1]) || ((_c = geckoStackLineRe.exec(callerLine)) == null ? void 0 : _c[1]);\n}\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = ((state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording) return r;\n const action = nameOrAction === void 0 ? {\n type: anonymousActionType || findCallerName(new Error().stack) || \"anonymous\"\n } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n });\n api.devtools = {\n cleanup: () => {\n if (connection && typeof connection.unsubscribe === \"function\") {\n connection.unsubscribe();\n }\n removeStoreFromTrackedConnections(options.name, store);\n }\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (shouldDispatchFromDevtools(api)) {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...args) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && args[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...args);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format.\n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (shouldDispatchFromDevtools(api)) {\n api.dispatch(action);\n }\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState) return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, fn) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0) fn(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = ((selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n });\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nfunction combine(initialState, create) {\n return (...args) => Object.assign({}, initialState, create(...args));\n}\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(name, JSON.stringify(newValue, options == null ? void 0 : options.replacer)),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst persistImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => window.localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n let hydrationVersion = 0;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n return setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n return setItem();\n },\n get,\n api\n );\n api.getInitialState = () => configResult;\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage) return;\n const currentVersion = ++hydrationVersion;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n const migration = options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n if (migration instanceof Promise) {\n return migration.then((result) => [true, result]);\n }\n return [true, migration];\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return [false, deserializedStorageValue.state];\n }\n }\n return [false, void 0];\n }).then((migrationResult) => {\n var _a2;\n if (currentVersion !== hydrationVersion) {\n return;\n }\n const [migrated, migratedState] = migrationResult;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n if (migrated) {\n return setItem();\n }\n }).then(() => {\n if (currentVersion !== hydrationVersion) {\n return;\n }\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(get(), void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n if (currentVersion !== hydrationVersion) {\n return;\n }\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n ++hydrationVersion;\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persist = persistImpl;\n\nfunction ssrSafe(config, isSSR = typeof window === \"undefined\") {\n return (set, get, api) => {\n if (!isSSR) {\n return config(set, get, api);\n }\n const ssrSet = () => {\n throw new Error(\"Cannot set state of Zustand store in SSR\");\n };\n api.setState = ssrSet;\n return config(ssrSet, get, api);\n };\n}\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector, ssrSafe as unstable_ssrSafe };\n","import { create } from 'zustand';\nimport { createJSONStorage, persist } from 'zustand/middleware';\nimport type { AthenaAssetCitationReference } from './asset-embed-messages';\n\nexport type AssetType = 'presentation' | 'spreadsheet' | 'document' | 'notebook' | 'unknown';\n\nexport type ViewMode = 'tabs' | 'tiled';\n\nexport interface AssetTab {\n id: string;\n name: string | null;\n type: AssetType;\n slideNumber?: number;\n /** The citation target (anchor + excerpt) the tab was last opened at. */\n reference?: AthenaAssetCitationReference;\n}\n\ninterface ThreadAssetState {\n tabs: AssetTab[];\n activeTabId: string | null;\n isOpen: boolean;\n}\n\nexport interface AssetPanelState {\n isOpen: boolean;\n tabs: AssetTab[];\n activeTabId: string | null;\n viewMode: ViewMode;\n isFullscreen: boolean;\n /** The current thread ID. Asset panel state is scoped per thread. */\n currentThreadId: string | null;\n /** Per-thread asset panel state — tabs and active tab persist per thread. */\n threadStates: Record<string, ThreadAssetState>;\n /** Number of registered hosts that can reveal the asset panel. */\n assetPanelHostCount: number;\n /** Generation counter for auto-open tracking — incremented on reset */\n autoOpenGeneration: number;\n /** Tracks which assets have been auto-opened in the current generation */\n autoOpenedAssets: Map<string, number>;\n registerAssetPanelHost: () => void;\n unregisterAssetPanelHost: () => void;\n openAsset: (\n assetId: string,\n meta?: {\n name?: string;\n type?: AssetType;\n slideNumber?: number;\n /** Citation target (anchor + excerpt) the open should navigate to. */\n reference?: AthenaAssetCitationReference;\n /**\n * Swap the active tab for this asset instead of appending another tab.\n * Citation clicks use this: reading references shouldn't accumulate a\n * tab per cited document — the panel behaves as one preview surface.\n * A tab that already exists for the asset is re-targeted either way.\n */\n replaceActiveTab?: boolean;\n },\n ) => void;\n closeTab: (assetId: string) => void;\n setActiveTab: (assetId: string) => void;\n setViewMode: (mode: ViewMode) => void;\n closePanel: () => void;\n toggleFullscreen: () => void;\n /**\n * Switch the active thread. Saves the current thread's asset panel state\n * and restores the new thread's state (if any). Pass null to clear.\n */\n setCurrentThread: (threadId: string | null) => void;\n /** Reset auto-open tracking (increments generation so new assets can auto-open) */\n resetAutoOpen: () => void;\n /** Check if an asset should auto-open, and mark it as opened if so */\n markAutoOpened: (assetId: string) => boolean;\n}\n\nexport const useAssetPanelStore = create<AssetPanelState>()(\n persist(\n (set, get) => ({\n isOpen: false,\n tabs: [],\n activeTabId: null,\n viewMode: 'tabs',\n isFullscreen: false,\n currentThreadId: null,\n threadStates: {},\n assetPanelHostCount: 0,\n autoOpenGeneration: 0,\n autoOpenedAssets: new Map(),\n\n registerAssetPanelHost: () =>\n set((state) => ({ assetPanelHostCount: state.assetPanelHostCount + 1 })),\n\n unregisterAssetPanelHost: () =>\n set((state) => ({ assetPanelHostCount: Math.max(0, state.assetPanelHostCount - 1) })),\n\n openAsset: (assetId, meta) =>\n set((s) => {\n const existing = s.tabs.find((t) => t.id === assetId);\n if (existing) {\n const tabs = meta\n ? s.tabs.map((t) =>\n t.id === assetId\n ? {\n ...t,\n name: meta.name ?? t.name,\n type: meta.type ?? t.type,\n slideNumber:\n 'slideNumber' in meta ? meta.slideNumber : t.slideNumber,\n // A repeat citation click re-targets the open tab: the new\n // reference reaches the iframe (src change -> navigation).\n reference:\n 'reference' in meta ? meta.reference : t.reference,\n }\n : t,\n )\n : s.tabs;\n return { isOpen: true, tabs, activeTabId: assetId };\n }\n const newTab: AssetTab = {\n id: assetId,\n name: meta?.name ?? null,\n type: meta?.type ?? 'unknown',\n slideNumber: meta?.slideNumber,\n reference: meta?.reference,\n };\n if (meta?.replaceActiveTab && s.activeTabId) {\n const activeIndex = s.tabs.findIndex((t) => t.id === s.activeTabId);\n if (activeIndex >= 0) {\n const tabs = s.tabs.slice();\n tabs[activeIndex] = newTab;\n return { isOpen: true, tabs, activeTabId: assetId };\n }\n }\n return { isOpen: true, tabs: [...s.tabs, newTab], activeTabId: assetId };\n }),\n\n closeTab: (assetId) =>\n set((s) => {\n const tabs = s.tabs.filter((t) => t.id !== assetId);\n if (tabs.length === 0) {\n return { isOpen: false, tabs: [], activeTabId: null, isFullscreen: false };\n }\n const activeTabId =\n s.activeTabId === assetId\n ? tabs[Math.min(s.tabs.findIndex((t) => t.id === assetId), tabs.length - 1)]?.id ?? null\n : s.activeTabId;\n return { tabs, activeTabId };\n }),\n\n setActiveTab: (assetId) => set({ activeTabId: assetId, viewMode: 'tabs' }),\n\n setViewMode: (mode) => set({ viewMode: mode }),\n\n closePanel: () =>\n set({ isOpen: false, tabs: [], activeTabId: null, viewMode: 'tabs', isFullscreen: false }),\n\n toggleFullscreen: () => set((s) => ({ isFullscreen: !s.isFullscreen })),\n\n setCurrentThread: (threadId) =>\n set((s) => {\n // No-op if same thread\n if (s.currentThreadId === threadId) {\n return s;\n }\n\n // Save current thread's asset state to the map (if we had one)\n const threadStates = { ...s.threadStates };\n if (s.currentThreadId !== null) {\n threadStates[s.currentThreadId] = {\n tabs: s.tabs,\n activeTabId: s.activeTabId,\n isOpen: s.isOpen,\n };\n }\n\n // Restore the new thread's state (or start fresh)\n const restored = threadId !== null ? threadStates[threadId] : undefined;\n\n return {\n currentThreadId: threadId,\n threadStates,\n tabs: restored?.tabs ?? [],\n activeTabId: restored?.activeTabId ?? null,\n isOpen: restored?.isOpen ?? false,\n // Reset transient UI state on thread switch\n isFullscreen: false,\n viewMode: 'tabs',\n };\n }),\n\n resetAutoOpen: () =>\n set((s) => ({ autoOpenGeneration: s.autoOpenGeneration + 1 })),\n\n markAutoOpened: (assetId: string) => {\n const state = get();\n if (state.autoOpenedAssets.get(assetId) === state.autoOpenGeneration) {\n return false; // already auto-opened in this generation\n }\n state.autoOpenedAssets.set(assetId, state.autoOpenGeneration);\n return true;\n },\n }),\n {\n name: 'athena-react-asset-panel',\n partialize: ({\n isOpen,\n tabs,\n activeTabId,\n viewMode,\n isFullscreen,\n currentThreadId,\n threadStates,\n }) => ({\n isOpen,\n tabs,\n activeTabId,\n viewMode,\n isFullscreen,\n currentThreadId,\n threadStates,\n }),\n storage: createJSONStorage(() => sessionStorage),\n },\n ),\n);\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z\",\n key: \"lc1i9w\"\n }\n ],\n [\"path\", { d: \"m7 16.5-4.74-2.85\", key: \"1o9zyk\" }],\n [\"path\", { d: \"m7 16.5 5-3\", key: \"va8pkn\" }],\n [\"path\", { d: \"M7 16.5v5.17\", key: \"jnp8gn\" }],\n [\n \"path\",\n {\n d: \"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z\",\n key: \"8zsnat\"\n }\n ],\n [\"path\", { d: \"m17 16.5-5-3\", key: \"8arw3v\" }],\n [\"path\", { d: \"m17 16.5 4.74-2.85\", key: \"8rfmw\" }],\n [\"path\", { d: \"M17 16.5v5.17\", key: \"k6z78m\" }],\n [\n \"path\",\n {\n d: \"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z\",\n key: \"1xygjf\"\n }\n ],\n [\"path\", { d: \"M12 8 7.26 5.15\", key: \"1vbdud\" }],\n [\"path\", { d: \"m12 8 4.74-2.85\", key: \"3rx089\" }],\n [\"path\", { d: \"M12 13.5V8\", key: \"1io7kd\" }]\n];\nconst Boxes = createLucideIcon(\"boxes\", __iconNode);\n\nexport { __iconNode, Boxes as default };\n//# sourceMappingURL=boxes.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 18V5\", key: \"adv99a\" }],\n [\"path\", { d: \"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4\", key: \"1e3is1\" }],\n [\"path\", { d: \"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5\", key: \"1gqd8o\" }],\n [\"path\", { d: \"M17.997 5.125a4 4 0 0 1 2.526 5.77\", key: \"iwvgf7\" }],\n [\"path\", { d: \"M18 18a4 4 0 0 0 2-7.464\", key: \"efp6ie\" }],\n [\"path\", { d: \"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517\", key: \"1gq6am\" }],\n [\"path\", { d: \"M6 18a4 4 0 0 1-2-7.464\", key: \"k1g0md\" }],\n [\"path\", { d: \"M6.003 5.125a4 4 0 0 0-2.526 5.77\", key: \"q97ue3\" }]\n];\nconst Brain = createLucideIcon(\"brain\", __iconNode);\n\nexport { __iconNode, Brain as default };\n//# sourceMappingURL=brain.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 3v16a2 2 0 0 0 2 2h16\", key: \"c24i48\" }],\n [\"path\", { d: \"M18 17V9\", key: \"2bz60n\" }],\n [\"path\", { d: \"M13 17V5\", key: \"1frdt8\" }],\n [\"path\", { d: \"M8 17v-3\", key: \"17ska0\" }]\n];\nconst ChartColumn = createLucideIcon(\"chart-column\", __iconNode);\n\nexport { __iconNode, ChartColumn as default };\n//# sourceMappingURL=chart-column.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n];\nconst CircleCheck = createLucideIcon(\"circle-check\", __iconNode);\n\nexport { __iconNode, CircleCheck as default };\n//# sourceMappingURL=circle-check.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst CircleQuestionMark = createLucideIcon(\"circle-question-mark\", __iconNode);\n\nexport { __iconNode, CircleQuestionMark as default };\n//# sourceMappingURL=circle-question-mark.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m15 9-6 6\", key: \"1uzhvr\" }],\n [\"path\", { d: \"m9 9 6 6\", key: \"z0biqf\" }]\n];\nconst CircleX = createLucideIcon(\"circle-x\", __iconNode);\n\nexport { __iconNode, CircleX as default };\n//# sourceMappingURL=circle-x.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"8\", height: \"4\", x: \"8\", y: \"2\", rx: \"1\", ry: \"1\", key: \"tgr4d6\" }],\n [\"path\", { d: \"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2\", key: \"4jdomd\" }],\n [\"path\", { d: \"M16 4h2a2 2 0 0 1 2 2v4\", key: \"3hqy98\" }],\n [\"path\", { d: \"M21 14H11\", key: \"1bme5i\" }],\n [\"path\", { d: \"m15 10-4 4 4 4\", key: \"5dvupr\" }]\n];\nconst ClipboardCopy = createLucideIcon(\"clipboard-copy\", __iconNode);\n\nexport { __iconNode, ClipboardCopy as default };\n//# sourceMappingURL=clipboard-copy.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"8\", height: \"4\", x: \"8\", y: \"2\", rx: \"1\", ry: \"1\", key: \"tgr4d6\" }],\n [\n \"path\",\n {\n d: \"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\",\n key: \"116196\"\n }\n ],\n [\"path\", { d: \"M12 11h4\", key: \"1jrz19\" }],\n [\"path\", { d: \"M12 16h4\", key: \"n85exb\" }],\n [\"path\", { d: \"M8 11h.01\", key: \"1dfujw\" }],\n [\"path\", { d: \"M8 16h.01\", key: \"18s6g9\" }]\n];\nconst ClipboardList = createLucideIcon(\"clipboard-list\", __iconNode);\n\nexport { __iconNode, ClipboardList as default };\n//# sourceMappingURL=clipboard-list.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 20v2\", key: \"1lh1kg\" }],\n [\"path\", { d: \"M12 2v2\", key: \"tus03m\" }],\n [\"path\", { d: \"M17 20v2\", key: \"1rnc9c\" }],\n [\"path\", { d: \"M17 2v2\", key: \"11trls\" }],\n [\"path\", { d: \"M2 12h2\", key: \"1t8f8n\" }],\n [\"path\", { d: \"M2 17h2\", key: \"7oei6x\" }],\n [\"path\", { d: \"M2 7h2\", key: \"asdhe0\" }],\n [\"path\", { d: \"M20 12h2\", key: \"1q8mjw\" }],\n [\"path\", { d: \"M20 17h2\", key: \"1fpfkl\" }],\n [\"path\", { d: \"M20 7h2\", key: \"1o8tra\" }],\n [\"path\", { d: \"M7 20v2\", key: \"4gnj0m\" }],\n [\"path\", { d: \"M7 2v2\", key: \"1i4yhu\" }],\n [\"rect\", { x: \"4\", y: \"4\", width: \"16\", height: \"16\", rx: \"2\", key: \"1vbyd7\" }],\n [\"rect\", { x: \"8\", y: \"8\", width: \"8\", height: \"8\", rx: \"1\", key: \"z9xiuo\" }]\n];\nconst Cpu = createLucideIcon(\"cpu\", __iconNode);\n\nexport { __iconNode, Cpu as default };\n//# sourceMappingURL=cpu.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 3h6v6\", key: \"1q9fwt\" }],\n [\"path\", { d: \"M10 14 21 3\", key: \"gplh6r\" }],\n [\"path\", { d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\", key: \"a6xqqp\" }]\n];\nconst ExternalLink = createLucideIcon(\"external-link\", __iconNode);\n\nexport { __iconNode, ExternalLink as default };\n//# sourceMappingURL=external-link.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528\",\n key: \"1jaruq\"\n }\n ]\n];\nconst Flag = createLucideIcon(\"flag\", __iconNode);\n\nexport { __iconNode, Flag as default };\n//# sourceMappingURL=flag.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2\",\n key: \"usdka0\"\n }\n ]\n];\nconst FolderOpen = createLucideIcon(\"folder-open\", __iconNode);\n\nexport { __iconNode, FolderOpen as default };\n//# sourceMappingURL=folder-open.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"18\", cy: \"18\", r: \"3\", key: \"1xkwt0\" }],\n [\"circle\", { cx: \"6\", cy: \"6\", r: \"3\", key: \"1lh9wr\" }],\n [\"path\", { d: \"M13 6h3a2 2 0 0 1 2 2v7\", key: \"1yeb86\" }],\n [\"line\", { x1: \"6\", x2: \"6\", y1: \"9\", y2: \"21\", key: \"rroup\" }]\n];\nconst GitPullRequest = createLucideIcon(\"git-pull-request\", __iconNode);\n\nexport { __iconNode, GitPullRequest as default };\n//# sourceMappingURL=git-pull-request.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"line\", { x1: \"4\", x2: \"20\", y1: \"9\", y2: \"9\", key: \"4lhtct\" }],\n [\"line\", { x1: \"4\", x2: \"20\", y1: \"15\", y2: \"15\", key: \"vyu0kd\" }],\n [\"line\", { x1: \"10\", x2: \"8\", y1: \"3\", y2: \"21\", key: \"1ggp8o\" }],\n [\"line\", { x1: \"16\", x2: \"14\", y1: \"3\", y2: \"21\", key: \"weycgp\" }]\n];\nconst Hash = createLucideIcon(\"hash\", __iconNode);\n\nexport { __iconNode, Hash as default };\n//# sourceMappingURL=hash.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\", key: \"1cjeqo\" }],\n [\"path\", { d: \"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\", key: \"19qd67\" }]\n];\nconst Link = createLucideIcon(\"link\", __iconNode);\n\nexport { __iconNode, Link as default };\n//# sourceMappingURL=link.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M13 5h8\", key: \"a7qcls\" }],\n [\"path\", { d: \"M13 12h8\", key: \"h98zly\" }],\n [\"path\", { d: \"M13 19h8\", key: \"c3s6r1\" }],\n [\"path\", { d: \"m3 17 2 2 4-4\", key: \"1jhpwq\" }],\n [\"path\", { d: \"m3 7 2 2 4-4\", key: \"1obspn\" }]\n];\nconst ListChecks = createLucideIcon(\"list-checks\", __iconNode);\n\nexport { __iconNode, ListChecks as default };\n//# sourceMappingURL=list-checks.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 2v4\", key: \"3427ic\" }],\n [\"path\", { d: \"m16.2 7.8 2.9-2.9\", key: \"r700ao\" }],\n [\"path\", { d: \"M18 12h4\", key: \"wj9ykh\" }],\n [\"path\", { d: \"m16.2 16.2 2.9 2.9\", key: \"1bxg5t\" }],\n [\"path\", { d: \"M12 18v4\", key: \"jadmvz\" }],\n [\"path\", { d: \"m4.9 19.1 2.9-2.9\", key: \"bwix9q\" }],\n [\"path\", { d: \"M2 12h4\", key: \"j09sii\" }],\n [\"path\", { d: \"m4.9 4.9 2.9 2.9\", key: \"giyufr\" }]\n];\nconst Loader = createLucideIcon(\"loader\", __iconNode);\n\nexport { __iconNode, Loader as default };\n//# sourceMappingURL=loader.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M6 18h8\", key: \"1borvv\" }],\n [\"path\", { d: \"M3 22h18\", key: \"8prr45\" }],\n [\"path\", { d: \"M14 22a7 7 0 1 0 0-14h-1\", key: \"1jwaiy\" }],\n [\"path\", { d: \"M9 14h2\", key: \"197e7h\" }],\n [\"path\", { d: \"M9 12a2 2 0 0 1-2-2V6h6v4a2 2 0 0 1-2 2Z\", key: \"1bmzmy\" }],\n [\"path\", { d: \"M12 6V3a1 1 0 0 0-1-1H9a1 1 0 0 0-1 1v3\", key: \"1drr47\" }]\n];\nconst Microscope = createLucideIcon(\"microscope\", __iconNode);\n\nexport { __iconNode, Microscope as default };\n//# sourceMappingURL=microscope.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M14 4.1 12 6\", key: \"ita8i4\" }],\n [\"path\", { d: \"m5.1 8-2.9-.8\", key: \"1go3kf\" }],\n [\"path\", { d: \"m6 12-1.9 2\", key: \"mnht97\" }],\n [\"path\", { d: \"M7.2 2.2 8 5.1\", key: \"1cfko1\" }],\n [\n \"path\",\n {\n d: \"M9.037 9.69a.498.498 0 0 1 .653-.653l11 4.5a.5.5 0 0 1-.074.949l-4.349 1.041a1 1 0 0 0-.74.739l-1.04 4.35a.5.5 0 0 1-.95.074z\",\n key: \"s0h3yz\"\n }\n ]\n];\nconst MousePointerClick = createLucideIcon(\"mouse-pointer-click\", __iconNode);\n\nexport { __iconNode, MousePointerClick as default };\n//# sourceMappingURL=mouse-pointer-click.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M13 21h8\", key: \"1jsn5i\" }],\n [\n \"path\",\n {\n d: \"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\",\n key: \"1a8usu\"\n }\n ]\n];\nconst PenLine = createLucideIcon(\"pen-line\", __iconNode);\n\nexport { __iconNode, PenLine as default };\n//# sourceMappingURL=pen-line.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M2 3h20\", key: \"91anmk\" }],\n [\"path\", { d: \"M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3\", key: \"2k9sn8\" }],\n [\"path\", { d: \"m7 21 5-5 5 5\", key: \"bip4we\" }]\n];\nconst Presentation = createLucideIcon(\"presentation\", __iconNode);\n\nexport { __iconNode, Presentation as default };\n//# sourceMappingURL=presentation.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z\",\n key: \"1c8476\"\n }\n ],\n [\"path\", { d: \"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7\", key: \"1ydtos\" }],\n [\"path\", { d: \"M7 3v4a1 1 0 0 0 1 1h7\", key: \"t51u73\" }]\n];\nconst Save = createLucideIcon(\"save\", __iconNode);\n\nexport { __iconNode, Save as default };\n//# sourceMappingURL=save.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 7V5a2 2 0 0 1 2-2h2\", key: \"aa7l1z\" }],\n [\"path\", { d: \"M17 3h2a2 2 0 0 1 2 2v2\", key: \"4qcy5o\" }],\n [\"path\", { d: \"M21 17v2a2 2 0 0 1-2 2h-2\", key: \"6vwrx8\" }],\n [\"path\", { d: \"M7 21H5a2 2 0 0 1-2-2v-2\", key: \"ioqczr\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }],\n [\"path\", { d: \"m16 16-1.9-1.9\", key: \"1dq9hf\" }]\n];\nconst ScanSearch = createLucideIcon(\"scan-search\", __iconNode);\n\nexport { __iconNode, ScanSearch as default };\n//# sourceMappingURL=scan-search.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 12h-5\", key: \"r7krc0\" }],\n [\"path\", { d: \"M15 8h-5\", key: \"1khuty\" }],\n [\"path\", { d: \"M19 17V5a2 2 0 0 0-2-2H4\", key: \"zz82l3\" }],\n [\n \"path\",\n {\n d: \"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3\",\n key: \"1ph1d7\"\n }\n ]\n];\nconst ScrollText = createLucideIcon(\"scroll-text\", __iconNode);\n\nexport { __iconNode, ScrollText as default };\n//# sourceMappingURL=scroll-text.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\",\n key: \"1i5ecw\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Settings = createLucideIcon(\"settings\", __iconNode);\n\nexport { __iconNode, Settings as default };\n//# sourceMappingURL=settings.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n key: \"oel41y\"\n }\n ],\n [\"path\", { d: \"M12 8v4\", key: \"1got3b\" }],\n [\"path\", { d: \"M12 16h.01\", key: \"1drbdi\" }]\n];\nconst ShieldAlert = createLucideIcon(\"shield-alert\", __iconNode);\n\nexport { __iconNode, ShieldAlert as default };\n//# sourceMappingURL=shield-alert.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 19h8\", key: \"baeox8\" }],\n [\"path\", { d: \"m4 17 6-6-6-6\", key: \"1yngyt\" }]\n];\nconst Terminal = createLucideIcon(\"terminal\", __iconNode);\n\nexport { __iconNode, Terminal as default };\n//# sourceMappingURL=terminal.js.map\n","/**\n * @license lucide-react v0.575.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M16 7h6v6\", key: \"box55l\" }],\n [\"path\", { d: \"m22 7-8.5 8.5-5-5L2 17\", key: \"1t1m79\" }]\n];\nconst TrendingUp = createLucideIcon(\"trending-up\", __iconNode);\n\nexport { __iconNode, TrendingUp as default };\n//# sourceMappingURL=trending-up.js.map\n","\"use client\"\n\nimport { Collapsible as CollapsiblePrimitive } from \"radix-ui\"\n\nfunction Collapsible({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />\n}\n\nfunction CollapsibleTrigger({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\n return <CollapsiblePrimitive.CollapsibleTrigger data-slot=\"collapsible-trigger\" {...props} />\n}\n\nfunction CollapsibleContent({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\n return <CollapsiblePrimitive.CollapsibleContent data-slot=\"collapsible-content\" {...props} />\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n","\"use client\";\n\nimport { MessagePartPrimitive, MessagePrimitive } from \"@assistant-ui/react\";\nimport {\n createContext,\n useContext,\n useMemo,\n useRef,\n type ComponentProps,\n type FC,\n type PropsWithChildren,\n} from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\n\ntype PartsComponents = ComponentProps<typeof MessagePrimitive.Parts>[\"components\"];\ntype StandardPartsComponents = Extract<\n NonNullable<PartsComponents>,\n { ChainOfThought?: undefined }\n>;\n\nconst NestedPtcComponentsContext = createContext<PartsComponents | null>(null);\n\nexport const NestedPtcComponentsProvider: FC<\n PropsWithChildren<{ components: PartsComponents }>\n> = ({ components, children }) => (\n <NestedPtcComponentsContext.Provider value={components}>\n {children}\n </NestedPtcComponentsContext.Provider>\n);\n\nexport const useNestedPtcComponents = (\n fallback: ToolCallMessagePartComponent\n): PartsComponents => {\n const components = useContext(NestedPtcComponentsContext);\n\n return useMemo(() => {\n const standardComponents =\n components && \"ChainOfThought\" in components && components.ChainOfThought\n ? undefined\n : (components as StandardPartsComponents | null);\n\n return {\n ...(standardComponents ?? {}),\n tools: {\n ...(standardComponents?.tools ?? {}),\n Fallback: fallback,\n },\n } satisfies StandardPartsComponents;\n }, [components, fallback]);\n};\n\nexport interface NestedPtcMessagesProps {\n components: PartsComponents;\n messageClassName?: string;\n}\n\nconst EmptyComponent: FC = () => null;\n\nexport const NestedPtcMessages: FC<NestedPtcMessagesProps> = ({\n components,\n messageClassName,\n}) => {\n const propsRef = useRef({ components, messageClassName });\n propsRef.current = { components, messageClassName };\n\n const messageComponents = useMemo(() => {\n const NestedMessage: FC = () => {\n const { components, messageClassName } = propsRef.current;\n const parts = (\n <MessagePrimitive.Parts\n components={{ Empty: EmptyComponent, ...components }}\n />\n );\n return messageClassName ? (\n <div className={messageClassName}>{parts}</div>\n ) : (\n parts\n );\n };\n\n return { Message: NestedMessage };\n }, []);\n\n return <MessagePartPrimitive.Messages components={messageComponents} />;\n};\n","\"use client\";\n\n/**\n * The shared building blocks every SDK tool card is made of — the card shell\n * (`ToolCard`), the collapsible details section, and the result/text helpers.\n * Kept apart from the tool UI registry so a tool UI module can use them\n * without importing the registry that imports it back.\n */\nimport { useCallback, useState, type ElementType, type ReactNode } from \"react\";\nimport { formatToolName } from \"@athenaintel/agent-runtime\";\nimport {\n AlertCircleIcon,\n CheckCircle2Icon,\n ChevronDownIcon,\n ClipboardCopyIcon,\n LoaderIcon,\n} from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nexport { formatToolName };\n\n/** Parse JSON text into a record, or `null` when it is not one. */\nexport function tryParseJson(text: string): Record<string, unknown> | null {\n try {\n const parsed: unknown = JSON.parse(text);\n return typeof parsed === \"object\" && parsed !== null\n ? (parsed as Record<string, unknown>)\n : null;\n } catch {\n return null;\n }\n}\n\n/** Parse a tool result (handles nested `.result`, string-encoded JSON) into a record. */\nexport function normalizeResult(result: unknown): Record<string, unknown> | null {\n if (!result) return null;\n if (typeof result === \"string\") return tryParseJson(result);\n if (typeof result === \"object\") {\n const obj = result as Record<string, unknown>;\n if (typeof obj.result === \"string\") return tryParseJson(obj.result) ?? obj;\n return obj;\n }\n return null;\n}\n\n/** Truncate a string with an ellipsis. */\nexport function truncate(text: string, max: number): string {\n return text.length > max ? `${text.slice(0, max)}...` : text;\n}\n\nexport type ToolStatus = \"running\" | \"complete\" | \"incomplete\" | \"requires-action\";\n\nexport function ToolCard({\n icon: Icon,\n status,\n title,\n subtitle,\n toolName,\n badge,\n error,\n children,\n args,\n result,\n}: {\n icon: ElementType;\n status: ToolStatus;\n title: string;\n subtitle?: string;\n toolName?: string;\n badge?: string;\n error?: string | null;\n children?: ReactNode;\n args?: Record<string, unknown>;\n result?: unknown;\n}) {\n const isRunning = status === \"running\";\n const isComplete = status === \"complete\";\n const isError = status === \"incomplete\";\n\n return (\n <div className=\"my-3 w-full overflow-hidden rounded-xl border border-border/60 bg-background shadow-sm\">\n <div className=\"flex items-center gap-3 px-4 py-3\">\n <div\n className={cn(\n \"flex size-8 shrink-0 items-center justify-center rounded-lg\",\n isRunning && \"bg-blue-50 text-blue-600\",\n isComplete && \"bg-emerald-50 text-emerald-600\",\n isError && \"bg-destructive/10 text-destructive\",\n )}\n >\n {isRunning ? (\n <LoaderIcon className=\"size-4 animate-spin\" />\n ) : isError ? (\n <AlertCircleIcon className=\"size-4\" />\n ) : (\n <Icon className=\"size-4\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[13px] font-medium text-foreground\">\n {title}\n </span>\n {isComplete && !error && (\n <CheckCircle2Icon className=\"size-3.5 text-emerald-500\" />\n )}\n </div>\n {subtitle && (\n <p className=\"truncate text-[12px] text-muted-foreground\">\n {subtitle}\n </p>\n )}\n </div>\n {toolName && (\n <span className=\"shrink-0 rounded-md bg-muted/60 px-1.5 py-0.5 text-[10px] font-mono text-muted-foreground\">\n {formatToolName(toolName)}\n </span>\n )}\n {badge && (\n <span className=\"shrink-0 rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {badge}\n </span>\n )}\n {isRunning && (\n <div className=\"flex items-center gap-1.5\">\n <div className=\"h-1.5 w-10 animate-pulse rounded-full bg-blue-100\" />\n <div className=\"h-1.5 w-6 animate-pulse rounded-full bg-blue-100\" />\n </div>\n )}\n </div>\n\n {error && (\n <div className=\"border-t border-border/40 bg-destructive/10 px-4 py-2.5\">\n <p className=\"text-[12px] leading-relaxed text-destructive\">\n {error}\n </p>\n </div>\n )}\n\n {children}\n\n {/* Copy tool spec — subtle button at the bottom of every tool card */}\n {toolName && isComplete && (\n <CopyToolSpecButton toolName={toolName} args={args} result={result} />\n )}\n </div>\n );\n}\n\n/** Copies `{ tool_name, arguments, result }` as JSON — the tool spec a support ticket needs. */\nexport function CopyToolSpecButton({\n toolName,\n args,\n argsText,\n result,\n className,\n}: {\n toolName: string;\n args?: Record<string, unknown>;\n argsText?: string;\n result?: unknown;\n className?: string;\n}) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(() => {\n const spec: Record<string, unknown> = { tool_name: toolName };\n if (args) spec.arguments = args;\n else if (argsText) spec.arguments = tryParseJson(argsText) ?? argsText;\n if (result !== undefined) {\n if (typeof result === \"string\") {\n const parsed = tryParseJson(result);\n spec.result = parsed ?? result;\n } else {\n spec.result = result;\n }\n }\n navigator.clipboard.writeText(JSON.stringify(spec, null, 2)).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }, [toolName, args, argsText, result]);\n\n return (\n <div className={cn(\"flex justify-end px-3 pb-1.5\", className)}>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] text-muted-foreground/40 transition-colors hover:bg-muted/50 hover:text-muted-foreground\"\n title=\"Copy tool name, arguments, and result as JSON\"\n >\n <ClipboardCopyIcon className=\"size-2.5\" />\n {copied ? \"Copied!\" : toolName}\n </button>\n </div>\n );\n}\n\nexport function ExpandableSection({\n label,\n children,\n defaultOpen = false,\n}: {\n label?: string;\n children: ReactNode;\n defaultOpen?: boolean;\n}) {\n const [expanded, setExpanded] = useState(defaultOpen);\n\n return (\n <div className=\"border-t border-border/40\">\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className=\"flex w-full items-center gap-2 px-4 py-2 text-left text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/30\"\n >\n <ChevronDownIcon\n className={cn(\n \"size-3.5 shrink-0 transition-transform duration-200\",\n !expanded && \"-rotate-90\",\n )}\n />\n <span>{expanded ? \"Hide details\" : (label ?? \"Show details\")}</span>\n </button>\n {expanded && (\n <div className=\"max-h-72 overflow-y-auto border-t border-border/40 bg-muted/10 px-4 py-3\">\n {children}\n </div>\n )}\n </div>\n );\n}\n","/**\n * The icon component behind each `ToolIconKey` of the shared tool display\n * registry (`@athenaintel/agent-runtime`'s `tool-metadata`). The registry is\n * React-free so mobile can share it; this is the web half.\n */\nimport type { ToolIconKey } from \"@athenaintel/agent-runtime\";\nimport {\n BarChart3Icon,\n BookOpenIcon,\n BotIcon,\n BoxesIcon,\n BrainIcon,\n CalendarIcon,\n CameraIcon,\n CircleHelpIcon,\n ClipboardListIcon,\n CodeIcon,\n CpuIcon,\n DatabaseIcon,\n FileTextIcon,\n FlagIcon,\n FolderIcon,\n FolderOpenIcon,\n GitPullRequestIcon,\n GlobeIcon,\n HardDriveIcon,\n HashIcon,\n ImageIcon,\n LayoutDashboardIcon,\n LinkIcon,\n ListChecksIcon,\n type LucideIcon,\n MailIcon,\n MessageSquareIcon,\n MicroscopeIcon,\n MonitorIcon,\n MousePointerClickIcon,\n PackageIcon,\n PaletteIcon,\n PenLineIcon,\n PhoneIcon,\n PlayIcon,\n PresentationIcon,\n SaveIcon,\n ScanSearchIcon,\n ScrollTextIcon,\n SearchIcon,\n SettingsIcon,\n SparklesIcon,\n StarIcon,\n TableIcon,\n TerminalIcon,\n Trash2Icon,\n TrendingUpIcon,\n UsersIcon,\n VideoIcon,\n WorkflowIcon,\n WrenchIcon,\n} from \"lucide-react\";\n\nexport const TOOL_ICONS: Record<ToolIconKey, LucideIcon> = {\n search: SearchIcon,\n globe: GlobeIcon,\n mail: MailIcon,\n calendar: CalendarIcon,\n \"file-text\": FileTextIcon,\n \"pen-line\": PenLineIcon,\n \"bar-chart\": BarChart3Icon,\n table: TableIcon,\n presentation: PresentationIcon,\n monitor: MonitorIcon,\n code: CodeIcon,\n terminal: TerminalIcon,\n database: DatabaseIcon,\n \"book-open\": BookOpenIcon,\n brain: BrainIcon,\n \"folder-open\": FolderOpenIcon,\n folder: FolderIcon,\n save: SaveIcon,\n wrench: WrenchIcon,\n image: ImageIcon,\n camera: CameraIcon,\n \"trending-up\": TrendingUpIcon,\n palette: PaletteIcon,\n microscope: MicroscopeIcon,\n \"message-square\": MessageSquareIcon,\n \"hard-drive\": HardDriveIcon,\n \"git-pull-request\": GitPullRequestIcon,\n boxes: BoxesIcon,\n \"scroll-text\": ScrollTextIcon,\n \"clipboard-list\": ClipboardListIcon,\n cpu: CpuIcon,\n bot: BotIcon,\n link: LinkIcon,\n package: PackageIcon,\n play: PlayIcon,\n trash: Trash2Icon,\n star: StarIcon,\n sparkles: SparklesIcon,\n \"list-checks\": ListChecksIcon,\n \"mouse-pointer\": MousePointerClickIcon,\n \"scan-search\": ScanSearchIcon,\n settings: SettingsIcon,\n phone: PhoneIcon,\n video: VideoIcon,\n users: UsersIcon,\n \"layout-dashboard\": LayoutDashboardIcon,\n workflow: WorkflowIcon,\n \"circle-help\": CircleHelpIcon,\n flag: FlagIcon,\n hash: HashIcon,\n};\n\n/** The icon component for a registry icon key. */\nexport function toolIcon(key: ToolIconKey): LucideIcon {\n return TOOL_ICONS[key];\n}\n","\"use client\";\n\nimport {\n type ComponentProps,\n type ElementType,\n memo,\n type ReactNode,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n AlertCircleIcon,\n CheckCircle2Icon,\n ChevronDownIcon,\n ExternalLinkIcon,\n LinkIcon,\n LoaderIcon,\n PauseIcon,\n ShieldAlertIcon,\n XCircleIcon,\n} from \"lucide-react\";\nimport {\n useScrollLock,\n type ToolCallMessagePartStatus,\n type ToolCallMessagePartComponent,\n} from \"@assistant-ui/react\";\nimport {\n classifyToolResult,\n describeToolArgs,\n getToolDisplayMeta,\n resultMessage,\n toolStatusLabel,\n type RejectedToolResult,\n type ToolResultClassification,\n} from \"@athenaintel/agent-runtime\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"../ui/collapsible\";\nimport { cn } from \"../lib/utils\";\nimport { useAssetPanelStore, type AssetType } from \"../assets/asset-panel-store\";\nimport { NestedPtcMessages, useNestedPtcComponents } from \"./NestedPtcMessages\";\nimport { CopyToolSpecButton, tryParseJson } from \"./primitives\";\nimport { toolIcon } from \"./tool-icons\";\n\n/**\n * The generic tool-call card every Athena chat surface renders for a tool\n * without a dedicated UI — the SDK's `AthenaChat`, the Chrome side panel, the\n * Office task pane, and Olympus. Names, icons, and running copy come from the\n * shared tool display registry; success/failure comes from the shared result\n * classifier; hosts add what only they know through the seams on\n * {@link ToolFallbackOptions} (a registry-resolved display name, an Excel\n * range jump, a rich result renderer, where \"open asset\" goes).\n *\n * Also exported as composable parts (`ToolFallback.Root` … `.Notice`) for a\n * host that lays its own row out but wants the same pieces.\n */\n\nconst ANIMATION_DURATION = 200;\n\ntype ToolCallPartProps = ComponentProps<ToolCallMessagePartComponent>;\n\n/** What a host slot sees about the call it decorates. */\nexport interface ToolFallbackContext {\n toolName: string;\n args: Record<string, unknown> | undefined;\n argsText: string | undefined;\n result: unknown;\n status: ToolCallMessagePartStatus | undefined;\n classification: ToolResultClassification;\n /** An `asset_…` id found on the result or the arguments, if any. */\n assetId: string | null;\n}\n\nexport interface ToolFallbackOptions {\n /** Row title for a settled call (defaults to the registry's `displayName`). */\n displayName?: string;\n /** Row title while running (defaults to the registry's `activeLabel`). */\n activeLabel?: string;\n /** Row icon (defaults to the registry's icon for the tool). */\n icon?: ElementType;\n /**\n * Hide arguments that are internal identifiers (`asset_id`, `catalog_id`,\n * `workspace_id`, `user_id`, and any `asset_…`-shaped value) from the\n * disclosure. On by default — they mean nothing to a reader; a surface that\n * needs them for review (an approval) turns it off.\n */\n hideInternalIdArgs?: boolean;\n /** An extra control in the header row, outside the toggle (an Excel range jump, a thumbnail). */\n extraAction?: ReactNode | ((context: ToolFallbackContext) => ReactNode);\n /** A notice under the header (a prompt-injection warning, a policy note). */\n notice?: ReactNode;\n /** Replace the default raw result disclosure with a host renderer (Genie SQL, a table). */\n renderResult?: (context: ToolFallbackContext) => ReactNode;\n /** Where \"Open\" / the asset link goes; defaults to the SDK asset panel. */\n onOpenAsset?: (assetId: string, meta: { name?: string; type: AssetType }) => void;\n /** Extra content in the expanded body (a screenshot, a preview). */\n children?: ReactNode;\n /** Start expanded. */\n defaultOpen?: boolean;\n className?: string;\n /** Extra attributes on the card element (`data-testid`, `data-tool-name`). */\n rootProps?: Omit<ComponentProps<\"div\">, \"className\" | \"children\"> &\n Record<`data-${string}`, string | undefined>;\n}\n\nexport type ToolFallbackProps = ToolCallPartProps & ToolFallbackOptions;\n\n// ─── Outcome ─────────────────────────────────────────────────────────\n\n/**\n * A gated call the user refused at the approval gate is neither a success nor\n * a failure: the shared classifier reads the refusal off the tool message\n * first (`rejected`), so a declined call never borrows the success treatment\n * (check mark, completed wording) or the failure one (the red error notice).\n */\nfunction rejectedOutcome(classification: ToolResultClassification): RejectedToolResult | null {\n return classification.state === \"rejected\" ? classification.rejection : null;\n}\n\n// ─── Asset detection ─────────────────────────────────────────────────\n\nfunction extractAssetId(result: unknown): string | null {\n if (!result) return null;\n try {\n const obj = typeof result === \"string\" ? JSON.parse(result) : result;\n if (typeof obj === \"object\" && obj !== null) {\n const record = obj as Record<string, unknown>;\n const id = record.asset_id ?? record.assetId ?? record.id;\n if (typeof id === \"string\" && id.startsWith(\"asset_\")) return id;\n }\n } catch { /* ignore */ }\n return null;\n}\n\n/** Extract asset_id from tool args (e.g. open_asset_in_workspace passes it as an arg). */\nfunction extractAssetIdFromArgs(argsText: string | undefined): string | null {\n if (!argsText) return null;\n const parsed = tryParseJson(argsText);\n if (!parsed) return null;\n const id = (parsed.asset_id ?? parsed.assetId) as string | undefined;\n if (typeof id === \"string\" && id.startsWith(\"asset_\")) return id;\n return null;\n}\n\nfunction toolMetaToAssetType(toolName: string): AssetType {\n const lower = toolName.toLowerCase();\n if (lower.includes(\"presentation\") || lower.includes(\"pptx\") || lower.includes(\"slide\") || lower.includes(\"powerpoint\"))\n return \"presentation\";\n if (lower.includes(\"sheet\") || lower.includes(\"spreadsheet\"))\n return \"spreadsheet\";\n if (lower.includes(\"document\") || lower.includes(\"doc\") || lower.includes(\"markdown\"))\n return \"document\";\n if (lower.includes(\"notebook\"))\n return \"notebook\";\n return \"unknown\";\n}\n\nconst CREATE_ASSET_TOOLS = [\n \"create_powerpoint_deck\",\n \"create_document_from_markdown\",\n \"create_new_document\",\n \"create_new_sheet\",\n \"create_new_notebook\",\n];\n\nfunction isAssetTool(toolName: string, result: unknown): boolean {\n return CREATE_ASSET_TOOLS.includes(toolName.toLowerCase()) || extractAssetId(result) !== null;\n}\n\nfunction extractTitle(argsText: string | undefined, result: unknown): string | null {\n if (argsText) {\n const args = tryParseJson(argsText);\n if (args) {\n const t = (args.title ?? args.name ?? args.filename ?? args.sheet_name) as string | undefined;\n if (t) return t;\n }\n }\n if (result) {\n try {\n const obj = typeof result === \"string\" ? JSON.parse(result) : result;\n if (typeof obj === \"object\" && obj !== null) {\n return ((obj as Record<string, unknown>).title ?? (obj as Record<string, unknown>).name) as string | null;\n }\n } catch { /* ignore */ }\n }\n return null;\n}\n\nexport function clearAutoOpenedAssets() {\n useAssetPanelStore.getState().resetAutoOpen();\n}\n\n/** Keys whose values are internal identifiers a reader gains nothing from. */\nconst HIDDEN_ARG_KEYS = new Set([\"catalog_id\", \"asset_id\", \"workspace_id\", \"user_id\"]);\n\n/** `asset_abc-123…`-shaped values: internal ids, hidden from the disclosure by default. */\nfunction looksLikeInternalId(value: unknown): boolean {\n if (typeof value !== \"string\") return false;\n return /^(asset|catalog|user|workspace)_[a-f0-9-]{8,}$/i.test(value);\n}\n\nfunction useOpenAsset(\n onOpenAsset: ToolFallbackOptions[\"onOpenAsset\"],\n): NonNullable<ToolFallbackOptions[\"onOpenAsset\"]> {\n const storeOpenAsset = useAssetPanelStore((s) => s.openAsset);\n return onOpenAsset ?? storeOpenAsset;\n}\n\n// ─── Composable primitives ───────────────────────────────────────────\n\nexport type ToolFallbackRootProps = Omit<\n React.ComponentProps<typeof Collapsible>,\n \"open\" | \"onOpenChange\"\n> & {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n defaultOpen?: boolean;\n};\n\nfunction ToolFallbackRoot({\n className,\n open: controlledOpen,\n onOpenChange: controlledOnOpenChange,\n defaultOpen = false,\n children,\n ...props\n}: ToolFallbackRootProps) {\n const collapsibleRef = useRef<HTMLDivElement>(null);\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const lockScroll = useScrollLock(collapsibleRef, ANIMATION_DURATION);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : uncontrolledOpen;\n\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (!open) {\n lockScroll();\n }\n if (!isControlled) {\n setUncontrolledOpen(open);\n }\n controlledOnOpenChange?.(open);\n },\n [lockScroll, isControlled, controlledOnOpenChange],\n );\n\n return (\n <Collapsible\n ref={collapsibleRef}\n data-slot=\"tool-fallback-root\"\n open={isOpen}\n onOpenChange={handleOpenChange}\n className={cn(\n \"aui-tool-fallback-root group/tool-fallback-root my-3 w-full rounded-xl border border-border/60 bg-background py-2.5 shadow-sm\",\n className,\n )}\n style={\n {\n \"--animation-duration\": `${ANIMATION_DURATION}ms`,\n } as React.CSSProperties\n }\n {...props}\n >\n {children}\n </Collapsible>\n );\n}\n\nexport interface ToolFallbackTriggerProps\n extends Omit<React.ComponentProps<typeof CollapsibleTrigger>, \"children\"> {\n toolName: string;\n argsText?: string;\n result?: unknown;\n status?: ToolCallMessagePartStatus;\n isError?: boolean;\n /** Pre-computed classification (else derived from status/result/isError). */\n classification?: ToolResultClassification;\n displayName?: string;\n activeLabel?: string;\n icon?: ElementType;\n}\n\nfunction ToolFallbackTrigger({\n toolName,\n argsText,\n result,\n status,\n isError,\n classification: givenClassification,\n displayName,\n activeLabel,\n icon,\n className,\n ...props\n}: ToolFallbackTriggerProps) {\n const classification =\n givenClassification ?? classifyToolResult({ status, result, isError });\n const state = classification.state;\n const isRunning = state === \"running\";\n const isCancelled = status?.type === \"incomplete\" && status.reason === \"cancelled\";\n\n const meta = getToolDisplayMeta(toolName);\n const ToolIcon = icon ?? toolIcon(meta.icon);\n const title = displayName ?? meta.displayName;\n const running = activeLabel ?? meta.activeLabel;\n\n const summary = useMemo(() => {\n if (isRunning || !argsText) return null;\n const parsed = tryParseJson(argsText);\n return parsed ? (describeToolArgs({ toolName, args: parsed }) ?? null) : null;\n }, [toolName, argsText, isRunning]);\n\n const message = useMemo(\n () => (state === \"complete\" ? resultMessage(result) : null),\n [result, state],\n );\n\n const rejection = rejectedOutcome(classification);\n const headline = rejection\n ? toolStatusLabel(toolName, \"rejected\", displayName)\n : state === \"error\"\n ? `Failed: ${title}`\n : state === \"paused\"\n ? `Paused: ${title}`\n : title;\n const secondary = rejection ? rejection.reason : message || summary;\n\n return (\n <CollapsibleTrigger\n data-slot=\"tool-fallback-trigger\"\n data-tool-outcome={state}\n className={cn(\n \"aui-tool-fallback-trigger group/trigger flex w-full items-center gap-2.5 px-3 text-sm transition-colors\",\n className,\n )}\n {...props}\n >\n <div\n className={cn(\n \"flex size-7 shrink-0 items-center justify-center rounded-lg\",\n isRunning && \"bg-blue-50 text-blue-600\",\n state === \"complete\" && \"bg-emerald-50 text-emerald-600\",\n state === \"error\" && \"bg-red-50 text-red-500\",\n (state === \"requires-action\" || state === \"paused\" || state === \"rejected\") &&\n \"bg-amber-50 text-amber-500\",\n )}\n >\n {isRunning ? (\n <LoaderIcon className=\"size-3.5 animate-spin\" />\n ) : rejection ? (\n <XCircleIcon className=\"size-3.5\" />\n ) : state === \"error\" ? (\n isCancelled ? (\n <XCircleIcon className=\"size-3.5\" />\n ) : (\n <AlertCircleIcon className=\"size-3.5\" />\n )\n ) : state === \"paused\" ? (\n <PauseIcon className=\"size-3.5\" />\n ) : state === \"requires-action\" ? (\n <ShieldAlertIcon className=\"size-3.5\" />\n ) : (\n <ToolIcon className=\"size-3.5\" />\n )}\n </div>\n\n <div className=\"flex min-w-0 grow flex-col items-start gap-0.5 text-left\">\n <span\n className={cn(\n \"relative inline-block text-[13px] font-medium leading-tight\",\n isCancelled && \"text-muted-foreground line-through\",\n )}\n >\n <span>{isRunning ? `${running}...` : headline}</span>\n {isRunning && (\n <span\n aria-hidden\n className=\"shimmer pointer-events-none absolute inset-0 motion-reduce:animate-none\"\n >\n {running}...\n </span>\n )}\n </span>\n {!isRunning && secondary && (\n <span className=\"truncate text-xs text-muted-foreground leading-snug max-w-full\">\n {secondary}\n </span>\n )}\n </div>\n\n {state === \"complete\" && (\n <CheckCircle2Icon className=\"size-3.5 shrink-0 text-emerald-500\" />\n )}\n\n <ChevronDownIcon\n className={cn(\n \"size-4 shrink-0 text-muted-foreground\",\n \"transition-transform duration-(--animation-duration) ease-out\",\n \"group-data-[state=closed]/trigger:-rotate-90\",\n \"group-data-[state=open]/trigger:rotate-0\",\n )}\n />\n </CollapsibleTrigger>\n );\n}\n\nfunction ToolFallbackContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof CollapsibleContent>) {\n return (\n <CollapsibleContent\n data-slot=\"tool-fallback-content\"\n className={cn(\n \"aui-tool-fallback-content relative overflow-hidden text-sm outline-none\",\n \"group/collapsible-content ease-out\",\n \"data-[state=closed]:animate-collapsible-up\",\n \"data-[state=open]:animate-collapsible-down\",\n \"data-[state=closed]:fill-mode-forwards\",\n \"data-[state=closed]:pointer-events-none\",\n \"data-[state=open]:duration-(--animation-duration)\",\n \"data-[state=closed]:duration-(--animation-duration)\",\n className,\n )}\n {...props}\n >\n <div className=\"mt-2.5 flex flex-col gap-2 border-t border-border/50 pt-2\">{children}</div>\n </CollapsibleContent>\n );\n}\n\nfunction ToolFallbackArgs({\n argsText,\n hideInternalIdArgs = true,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n argsText?: string;\n hideInternalIdArgs?: boolean;\n}) {\n if (!argsText) return null;\n\n const parsed = tryParseJson(argsText);\n if (!parsed) {\n return (\n <div className={cn(\"px-3\", className)} {...props}>\n <p className=\"text-xs font-medium text-muted-foreground\">Arguments</p>\n <pre className=\"mt-1 whitespace-pre-wrap text-xs text-muted-foreground\">{argsText}</pre>\n </div>\n );\n }\n\n const entries = Object.entries(parsed).filter(\n ([key, value]) =>\n !hideInternalIdArgs || (!HIDDEN_ARG_KEYS.has(key) && !looksLikeInternalId(value)),\n );\n if (entries.length === 0) return null;\n\n return (\n <div\n data-slot=\"tool-fallback-args\"\n className={cn(\"aui-tool-fallback-args flex flex-col gap-1.5 px-3\", className)}\n {...props}\n >\n <p className=\"text-xs font-medium text-muted-foreground\">Arguments</p>\n {entries.map(([key, value]) => {\n const strValue = typeof value === \"string\" ? value : JSON.stringify(value, null, 2);\n const isLong = typeof value === \"string\" && value.length > 80;\n\n return (\n <div key={key}>\n <span className=\"text-xs font-medium text-muted-foreground\">{key}</span>\n {isLong ? (\n <p className=\"mt-0.5 text-xs leading-relaxed text-foreground/80\">{strValue}</p>\n ) : (\n <span className=\"ml-1.5 text-xs text-foreground/80\">{strValue}</span>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction ToolFallbackResult({\n result,\n classification,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n result?: unknown;\n classification?: ToolResultClassification;\n}) {\n const message = resultMessage(result);\n const succeeded =\n (classification ?? classifyToolResult({ status: { type: \"complete\" }, result })).state ===\n \"complete\";\n\n const displayValue = useMemo(() => {\n if (result === undefined) return \"\";\n if (typeof result === \"string\") {\n const parsed = tryParseJson(result);\n return parsed ? JSON.stringify(parsed, null, 2) : result;\n }\n return JSON.stringify(result, null, 2);\n }, [result]);\n\n if (result === undefined) return null;\n // The header already carries a success message; nothing to disclose.\n if (message && succeeded) return null;\n\n return (\n <div\n data-slot=\"tool-fallback-result\"\n className={cn(\"border-t border-dashed border-border/50 px-3 pt-2\", className)}\n {...props}\n >\n <p className=\"text-xs font-medium text-muted-foreground\">Result</p>\n <pre className=\"mt-1 max-h-72 overflow-auto whitespace-pre-wrap break-words rounded-md bg-muted/20 p-2 text-[11px] text-foreground/80\">\n {message ?? displayValue}\n </pre>\n </div>\n );\n}\n\n/**\n * The failure a status-incomplete call carries, for the expanded body. The\n * always-visible failure line is {@link ToolFallbackNotice}; this repeats the\n * raw error text with the details.\n */\nfunction ToolFallbackError({\n status,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n status?: ToolCallMessagePartStatus;\n}) {\n if (status?.type !== \"incomplete\") return null;\n\n const error = status.error;\n const errorText = error\n ? typeof error === \"string\"\n ? error\n : JSON.stringify(error)\n : null;\n\n if (!errorText) return null;\n\n const isCancelled = status.reason === \"cancelled\";\n const headerText = isCancelled ? \"Cancelled\" : \"Error\";\n\n return (\n <div className={cn(\"px-3\", className)} {...props}>\n <p className=\"text-xs font-medium text-destructive\">{headerText}</p>\n <p className=\"mt-0.5 text-xs text-destructive/80\">{errorText}</p>\n </div>\n );\n}\n\n/**\n * The always-visible line under the header for a failed or paused call — the\n * failure's code and message, or the runtime's pause notice — so a reader\n * never has to expand a card to learn a step went wrong.\n */\nfunction ToolFallbackNotice({\n classification,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & { classification: ToolResultClassification }) {\n if (classification.state === \"error\") {\n const { failure } = classification;\n return (\n <div\n data-slot=\"tool-fallback-notice\"\n className={cn(\n \"mt-2 border-t border-red-200/80 px-3 pt-1.5 text-[11px] text-red-700\",\n className,\n )}\n {...props}\n >\n <span className=\"font-medium\">{failure.code ? `${failure.code}: ` : \"Error: \"}</span>\n {failure.message}\n </div>\n );\n }\n if (classification.state === \"paused\") {\n return (\n <div\n data-slot=\"tool-fallback-notice\"\n className={cn(\n \"mt-2 border-t border-amber-200/80 px-3 pt-1.5 text-[11px] text-amber-800\",\n className,\n )}\n {...props}\n >\n {classification.notice}\n </div>\n );\n }\n return null;\n}\n\n// ─── Asset Tool Card ────────────────────────────────────────────────\n\nfunction AssetToolCard({\n toolName,\n argsText,\n result,\n status,\n classification,\n context,\n displayName,\n activeLabel,\n icon,\n hideInternalIdArgs,\n action,\n notice,\n renderResult,\n onOpenAsset,\n children,\n defaultOpen,\n className,\n rootProps,\n}: {\n toolName: string;\n argsText?: string;\n result?: unknown;\n status?: ToolCallMessagePartStatus;\n classification: ToolResultClassification;\n context: ToolFallbackContext;\n displayName?: string;\n activeLabel?: string;\n icon?: ElementType;\n hideInternalIdArgs?: boolean;\n /** The host's `extraAction`, already resolved against the context. */\n action?: ReactNode;\n notice?: ReactNode;\n renderResult?: ToolFallbackOptions[\"renderResult\"];\n onOpenAsset?: ToolFallbackOptions[\"onOpenAsset\"];\n children?: ReactNode;\n defaultOpen?: boolean;\n className?: string;\n rootProps?: ToolFallbackOptions[\"rootProps\"];\n}) {\n const [detailsOpen, setDetailsOpen] = useState(defaultOpen ?? false);\n const openAsset = useOpenAsset(onOpenAsset);\n const meta = getToolDisplayMeta(toolName);\n const ToolIcon = icon ?? toolIcon(meta.icon);\n const title = displayName ?? meta.displayName;\n const state = classification.state;\n const isRunning = state === \"running\";\n const isCancelled = status?.type === \"incomplete\" && status.reason === \"cancelled\";\n const assetId = extractAssetId(result);\n const assetTitle = extractTitle(argsText, result);\n const assetType = toolMetaToAssetType(toolName);\n const rejection = rejectedOutcome(classification);\n\n return (\n <div\n {...rootProps}\n data-slot=\"tool-fallback-root\"\n data-tool-outcome={state}\n className={cn(\n \"aui-tool-fallback-root my-3 w-full rounded-xl border border-border/60 bg-background py-2.5 shadow-sm\",\n isCancelled && \"border-muted-foreground/30 bg-muted/30\",\n className,\n )}\n >\n <div className=\"flex items-center gap-2.5 px-3 text-sm\">\n <div\n className={cn(\n \"flex size-7 shrink-0 items-center justify-center rounded-lg\",\n isRunning && \"bg-blue-50 text-blue-600\",\n state === \"complete\" && \"bg-emerald-50 text-emerald-600\",\n state === \"error\" && \"bg-red-50 text-red-500\",\n state === \"rejected\" && \"bg-amber-50 text-amber-500\",\n )}\n >\n {isRunning ? (\n <LoaderIcon className=\"size-3.5 animate-spin\" />\n ) : rejection ? (\n <XCircleIcon className=\"size-3.5\" />\n ) : state === \"error\" ? (\n <AlertCircleIcon className=\"size-3.5\" />\n ) : (\n <ToolIcon className=\"size-3.5\" />\n )}\n </div>\n\n <div className=\"flex min-w-0 grow flex-col items-start gap-0.5 text-left\">\n <span className=\"leading-tight font-medium\">\n {isRunning\n ? `${activeLabel ?? meta.activeLabel}...`\n : rejection\n ? toolStatusLabel(toolName, \"rejected\", displayName)\n : state === \"error\"\n ? `Failed: ${title}`\n : title}\n </span>\n {!isRunning && assetTitle && (\n <span className=\"max-w-full truncate text-xs leading-snug text-muted-foreground\">\n {assetTitle}\n </span>\n )}\n </div>\n\n {assetId && state === \"complete\" && CREATE_ASSET_TOOLS.includes(toolName.toLowerCase()) && (\n <button\n type=\"button\"\n onClick={() => openAsset(assetId, { name: assetTitle ?? undefined, type: assetType })}\n className=\"flex shrink-0 items-center gap-1 rounded-md border border-border/60 px-2 py-0.5 text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground\"\n >\n <ExternalLinkIcon className=\"size-2.5\" />\n Open\n </button>\n )}\n\n {action}\n\n {state === \"complete\" && (\n <CheckCircle2Icon className=\"size-3.5 shrink-0 text-emerald-500\" />\n )}\n\n {!isCancelled && (\n <button\n type=\"button\"\n onClick={() => setDetailsOpen((o) => !o)}\n className={cn(\n \"flex size-5 shrink-0 items-center justify-center rounded transition-all\",\n detailsOpen\n ? \"bg-primary/5 text-primary\"\n : \"text-muted-foreground/40 hover:bg-muted/50 hover:text-muted-foreground\",\n )}\n title=\"Show details\"\n >\n <ChevronDownIcon\n className={cn(\n \"size-3 transition-transform duration-200\",\n detailsOpen && \"rotate-180\",\n )}\n />\n </button>\n )}\n </div>\n\n {notice}\n <ToolFallbackNotice classification={classification} />\n\n {detailsOpen && !isCancelled && (\n <div className=\"mt-2.5 flex flex-col gap-2 border-t border-border/50 px-3 pt-2\">\n {children}\n <ToolFallbackArgs argsText={argsText} hideInternalIdArgs={hideInternalIdArgs} />\n {renderResult ? (\n renderResult(context)\n ) : (\n <ToolFallbackResult result={result} classification={classification} />\n )}\n <div className=\"flex justify-end pt-1\">\n <CopyToolSpecButton toolName={toolName} argsText={argsText} result={result} className=\"px-0 pb-0\" />\n </div>\n </div>\n )}\n </div>\n );\n}\n\n/** Subtle \"open in panel\" button for any tool that has an asset_id */\nfunction AssetOpenLink({\n assetId,\n toolName,\n onOpenAsset,\n}: {\n assetId: string;\n toolName: string;\n onOpenAsset?: ToolFallbackOptions[\"onOpenAsset\"];\n}) {\n const openAsset = useOpenAsset(onOpenAsset);\n const assetType = toolMetaToAssetType(toolName);\n return (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n openAsset(assetId, { type: assetType });\n }}\n className=\"flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground/50 transition-colors hover:bg-muted/50 hover:text-foreground\"\n title=\"Open asset\"\n >\n <LinkIcon className=\"size-3\" />\n </button>\n );\n}\n\nconst ToolFallbackImpl = ({\n toolName,\n args,\n argsText,\n result,\n status,\n isError,\n displayName,\n activeLabel,\n icon,\n hideInternalIdArgs = true,\n extraAction,\n notice,\n renderResult,\n onOpenAsset,\n children,\n defaultOpen,\n className,\n rootProps,\n}: ToolFallbackProps) => {\n const classification = classifyToolResult({ status, result, isError });\n const isCancelled =\n status?.type === \"incomplete\" && status.reason === \"cancelled\";\n const nestedComponents = useNestedPtcComponents(ToolFallback);\n const resultAssetId = extractAssetId(result);\n const argsAssetId = extractAssetIdFromArgs(argsText);\n const assetId = resultAssetId ?? argsAssetId;\n const context: ToolFallbackContext = {\n toolName,\n args: (args as Record<string, unknown> | undefined) ?? undefined,\n argsText,\n result,\n status,\n classification,\n assetId,\n };\n const action = typeof extraAction === \"function\" ? extraAction(context) : extraAction;\n\n // Use compact AssetToolCard for asset-creating tools\n if (isAssetTool(toolName, result)) {\n return (\n <>\n <AssetToolCard\n toolName={toolName}\n argsText={argsText}\n result={result}\n status={status}\n classification={classification}\n context={context}\n displayName={displayName}\n activeLabel={activeLabel}\n icon={icon}\n hideInternalIdArgs={hideInternalIdArgs}\n action={action}\n notice={notice}\n renderResult={renderResult}\n onOpenAsset={onOpenAsset}\n defaultOpen={defaultOpen}\n className={className}\n rootProps={rootProps}\n >\n {children}\n </AssetToolCard>\n <NestedPtcMessages components={nestedComponents} />\n </>\n );\n }\n\n const isComplete = classification.state === \"complete\";\n\n return (\n <ToolFallbackRoot\n {...rootProps}\n defaultOpen={defaultOpen}\n className={cn(isCancelled && \"border-muted-foreground/30 bg-muted/30\", className)}\n >\n <div className=\"flex items-center\">\n <div className=\"min-w-0 flex-1\">\n <ToolFallbackTrigger\n toolName={toolName}\n argsText={argsText}\n result={result}\n status={status}\n classification={classification}\n displayName={displayName}\n activeLabel={activeLabel}\n icon={icon}\n />\n </div>\n {action ? <div className=\"shrink-0 pr-2\">{action}</div> : null}\n {assetId && isComplete && !action && (\n <div className=\"shrink-0 pr-2\">\n <AssetOpenLink assetId={assetId} toolName={toolName} onOpenAsset={onOpenAsset} />\n </div>\n )}\n </div>\n {notice}\n <ToolFallbackNotice classification={classification} />\n <ToolFallbackContent>\n {children}\n <ToolFallbackError status={status} />\n <ToolFallbackArgs\n argsText={argsText}\n hideInternalIdArgs={hideInternalIdArgs}\n className={cn(isCancelled && \"opacity-60\")}\n />\n {!isCancelled &&\n (renderResult ? (\n renderResult(context)\n ) : (\n <ToolFallbackResult result={result} classification={classification} />\n ))}\n <NestedPtcMessages components={nestedComponents} />\n {!isCancelled && (\n <div className=\"flex justify-end px-3 pt-1\">\n <CopyToolSpecButton\n toolName={toolName}\n argsText={argsText}\n result={result}\n className=\"px-0 pb-0\"\n />\n </div>\n )}\n </ToolFallbackContent>\n </ToolFallbackRoot>\n );\n};\n\nconst ToolFallback = memo(\n ToolFallbackImpl,\n) as unknown as ToolCallMessagePartComponent &\n ((props: ToolFallbackProps) => ReactNode) & {\n Root: typeof ToolFallbackRoot;\n Trigger: typeof ToolFallbackTrigger;\n Content: typeof ToolFallbackContent;\n Args: typeof ToolFallbackArgs;\n Result: typeof ToolFallbackResult;\n Error: typeof ToolFallbackError;\n Notice: typeof ToolFallbackNotice;\n };\n\nToolFallback.displayName = \"ToolFallback\";\nToolFallback.Root = ToolFallbackRoot;\nToolFallback.Trigger = ToolFallbackTrigger;\nToolFallback.Content = ToolFallbackContent;\nToolFallback.Args = ToolFallbackArgs;\nToolFallback.Result = ToolFallbackResult;\nToolFallback.Error = ToolFallbackError;\nToolFallback.Notice = ToolFallbackNotice;\n\nexport {\n ToolFallback,\n ToolFallbackRoot,\n ToolFallbackTrigger,\n ToolFallbackContent,\n ToolFallbackArgs,\n ToolFallbackResult,\n ToolFallbackError,\n ToolFallbackNotice,\n};\n"],"names":["__defProp","__name","useLayoutEffect","React2","Collapsible","CollapsibleTrigger","CollapsibleContent","getState","React","__iconNode","CollapsiblePrimitive.Root","CollapsiblePrimitive.CollapsibleTrigger","CollapsiblePrimitive.CollapsibleContent","components","messageClassName","LoaderIcon","AlertCircleIcon","CheckCircle2Icon","ClipboardCopyIcon","ChevronDownIcon","SearchIcon","GlobeIcon","MailIcon","CalendarIcon","FileTextIcon","PenLineIcon","BarChart3Icon","TableIcon","PresentationIcon","MonitorIcon","CodeIcon","TerminalIcon","DatabaseIcon","BookOpenIcon","BrainIcon","FolderOpenIcon","FolderIcon","SaveIcon","WrenchIcon","ImageIcon","CameraIcon","TrendingUpIcon","PaletteIcon","MicroscopeIcon","MessageSquareIcon","HardDriveIcon","GitPullRequestIcon","BoxesIcon","ScrollTextIcon","ClipboardListIcon","CpuIcon","BotIcon","LinkIcon","PackageIcon","PlayIcon","Trash2Icon","StarIcon","SparklesIcon","ListChecksIcon","MousePointerClickIcon","ScanSearchIcon","SettingsIcon","PhoneIcon","VideoIcon","UsersIcon","LayoutDashboardIcon","WorkflowIcon","CircleHelpIcon","FlagIcon","HashIcon","XCircleIcon","PauseIcon","ShieldAlertIcon","ExternalLinkIcon"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42]}