@agent-native/core 0.119.2 → 0.119.4

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 (228) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +19 -0
  3. package/corpus/core/package.json +3 -3
  4. package/corpus/core/src/agent/production-agent.ts +107 -125
  5. package/corpus/core/src/agent/run-manager.ts +45 -2
  6. package/corpus/core/src/agent/thread-data-builder.ts +85 -8
  7. package/corpus/core/src/cli/create.ts +44 -5
  8. package/corpus/core/src/client/AssistantChat.tsx +37 -9
  9. package/corpus/core/src/client/chat/message-components.tsx +9 -1
  10. package/corpus/core/src/client/chat/repo-helpers.ts +77 -0
  11. package/corpus/core/src/client/chat/tool-call-display.tsx +51 -15
  12. package/corpus/core/src/server/agent-chat/framework-prompts.ts +3 -1
  13. package/corpus/core/src/server/agent-chat/plugin-options.ts +9 -0
  14. package/corpus/core/src/server/agent-chat-plugin.ts +12 -3
  15. package/corpus/core/src/templates/chat/.agents/skills/actions/SKILL.md +512 -0
  16. package/corpus/core/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +189 -0
  17. package/corpus/core/src/templates/chat/.agents/skills/agent-native-docs/SKILL.md +115 -0
  18. package/corpus/core/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +177 -0
  19. package/corpus/core/src/templates/chat/.agents/skills/capture-learnings/SKILL.md +89 -0
  20. package/corpus/core/src/templates/chat/.agents/skills/create-skill/SKILL.md +221 -0
  21. package/corpus/core/src/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +220 -0
  22. package/corpus/core/src/templates/chat/.agents/skills/delegate-to-agent/SKILL.md +263 -0
  23. package/corpus/core/src/templates/chat/.agents/skills/feature-flags/SKILL.md +169 -0
  24. package/corpus/core/src/templates/chat/.agents/skills/frontend-design/SKILL.md +160 -0
  25. package/corpus/core/src/templates/chat/.agents/skills/real-time-sync/SKILL.md +232 -0
  26. package/corpus/core/src/templates/chat/.agents/skills/security/SKILL.md +280 -0
  27. package/corpus/core/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +118 -0
  28. package/corpus/core/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +119 -0
  29. package/corpus/core/src/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +100 -0
  30. package/corpus/core/src/templates/chat/.env.example +5 -0
  31. package/corpus/core/src/templates/chat/.ignore +0 -0
  32. package/corpus/core/src/templates/chat/.oxfmtrc.json +8 -0
  33. package/corpus/core/src/templates/chat/AGENTS.md +69 -0
  34. package/corpus/core/src/templates/chat/CHANGELOG.md +10 -0
  35. package/corpus/core/src/templates/chat/DEVELOPING.md +185 -0
  36. package/corpus/core/src/templates/chat/README.md +32 -0
  37. package/corpus/core/src/templates/chat/_gitignore +43 -0
  38. package/corpus/core/src/templates/chat/actions/hello.ts +13 -0
  39. package/corpus/core/src/templates/chat/actions/navigate.ts +41 -0
  40. package/corpus/core/src/templates/chat/actions/run.ts +2 -0
  41. package/corpus/core/src/templates/chat/actions/view-screen.ts +31 -0
  42. package/corpus/core/src/templates/chat/app/components/layout/Header.tsx +60 -0
  43. package/corpus/core/src/templates/chat/app/components/layout/Layout.tsx +185 -0
  44. package/corpus/core/src/templates/chat/app/components/layout/Sidebar.tsx +450 -0
  45. package/corpus/core/src/templates/chat/app/components/ui/button.tsx +1 -0
  46. package/corpus/core/src/templates/chat/app/components/ui/card.tsx +1 -0
  47. package/corpus/core/src/templates/chat/app/components/ui/dropdown-menu.tsx +1 -0
  48. package/corpus/core/src/templates/chat/app/components/ui/input.tsx +1 -0
  49. package/corpus/core/src/templates/chat/app/components/ui/label.tsx +1 -0
  50. package/corpus/core/src/templates/chat/app/components/ui/sheet.tsx +1 -0
  51. package/corpus/core/src/templates/chat/app/components/ui/toolkit-provider.tsx +17 -0
  52. package/corpus/core/src/templates/chat/app/components/ui/tooltip.tsx +1 -0
  53. package/corpus/core/src/templates/chat/app/design-system.ts +3 -0
  54. package/corpus/core/src/templates/chat/app/entry.client.tsx +19 -0
  55. package/corpus/core/src/templates/chat/app/entry.server.tsx +10 -0
  56. package/corpus/core/src/templates/chat/app/global.css +93 -0
  57. package/corpus/core/src/templates/chat/app/hooks/use-navigation-state.ts +93 -0
  58. package/corpus/core/src/templates/chat/app/i18n/ar-SA.ts +68 -0
  59. package/corpus/core/src/templates/chat/app/i18n/de-DE.ts +71 -0
  60. package/corpus/core/src/templates/chat/app/i18n/en-US.ts +70 -0
  61. package/corpus/core/src/templates/chat/app/i18n/es-ES.ts +71 -0
  62. package/corpus/core/src/templates/chat/app/i18n/fr-FR.ts +71 -0
  63. package/corpus/core/src/templates/chat/app/i18n/hi-IN.ts +69 -0
  64. package/corpus/core/src/templates/chat/app/i18n/index.ts +34 -0
  65. package/corpus/core/src/templates/chat/app/i18n/ja-JP.ts +70 -0
  66. package/corpus/core/src/templates/chat/app/i18n/ko-KR.ts +70 -0
  67. package/corpus/core/src/templates/chat/app/i18n/pt-BR.ts +71 -0
  68. package/corpus/core/src/templates/chat/app/i18n/zh-CN.ts +66 -0
  69. package/corpus/core/src/templates/chat/app/i18n/zh-TW.ts +66 -0
  70. package/corpus/core/src/templates/chat/app/i18n-data.ts +556 -0
  71. package/corpus/core/src/templates/chat/app/lib/agent-page.tsx +49 -0
  72. package/corpus/core/src/templates/chat/app/lib/app-config.ts +11 -0
  73. package/corpus/core/src/templates/chat/app/lib/tab-id.ts +1 -0
  74. package/corpus/core/src/templates/chat/app/lib/utils.ts +1 -0
  75. package/corpus/core/src/templates/chat/app/root.tsx +173 -0
  76. package/corpus/core/src/templates/chat/app/routes/_index.tsx +94 -0
  77. package/corpus/core/src/templates/chat/app/routes/agent.tsx +24 -0
  78. package/corpus/core/src/templates/chat/app/routes/chat.$threadId.tsx +1 -0
  79. package/corpus/core/src/templates/chat/app/routes/database.tsx +17 -0
  80. package/corpus/core/src/templates/chat/app/routes/extensions.$id.$slug.tsx +2 -0
  81. package/corpus/core/src/templates/chat/app/routes/extensions.$id.tsx +11 -0
  82. package/corpus/core/src/templates/chat/app/routes/extensions._index.tsx +11 -0
  83. package/corpus/core/src/templates/chat/app/routes/extensions.tsx +5 -0
  84. package/corpus/core/src/templates/chat/app/routes/observability.tsx +19 -0
  85. package/corpus/core/src/templates/chat/app/routes/settings.tsx +89 -0
  86. package/corpus/core/src/templates/chat/app/routes/team.tsx +11 -0
  87. package/corpus/core/src/templates/chat/app/routes.ts +4 -0
  88. package/corpus/core/src/templates/chat/app/vite-env.d.ts +6 -0
  89. package/corpus/core/src/templates/chat/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
  90. package/corpus/core/src/templates/chat/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
  91. package/corpus/core/src/templates/chat/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  92. package/corpus/core/src/templates/chat/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  93. package/corpus/core/src/templates/chat/changelog/2026-06-29-chat-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
  94. package/corpus/core/src/templates/chat/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  95. package/corpus/core/src/templates/chat/changelog/2026-07-10-chat-now-makes-ai-connection-setup-clear-without-shifting-th.md +6 -0
  96. package/corpus/core/src/templates/chat/changelog/2026-07-13-a-full-agent-page-now-brings-context-files-connections-jobs-.md +6 -0
  97. package/corpus/core/src/templates/chat/changelog/2026-07-14-chat-opens-reliably-on-hosted-deployments-instead-of-failing.md +6 -0
  98. package/corpus/core/src/templates/chat/changelog/2026-07-14-fixed-chat-template-startup-with-older-core-versions.md +6 -0
  99. package/corpus/core/src/templates/chat/changelog/2026-07-15-chat-navigation-focuses-on-chat-and-agent.md +6 -0
  100. package/corpus/core/src/templates/chat/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  101. package/corpus/core/src/templates/chat/changelog/2026-07-22-compact-sidebar-footer.md +6 -0
  102. package/corpus/core/src/templates/chat/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
  103. package/corpus/core/src/templates/chat/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
  104. package/corpus/core/src/templates/chat/changelog/2026-07-22-recent-chats-are-easier-to-scan-and-expand.md +6 -0
  105. package/corpus/core/src/templates/chat/changelog/2026-07-23-full-page-chat-is-better-centered-with-quieter-chat-history-.md +6 -0
  106. package/corpus/core/src/templates/chat/components.json +20 -0
  107. package/corpus/core/src/templates/chat/learnings.defaults.md +5 -0
  108. package/corpus/core/src/templates/chat/netlify.toml +10 -0
  109. package/corpus/core/src/templates/chat/package.json +92 -0
  110. package/corpus/core/src/templates/chat/public/agent-native-icon-dark.svg +10 -0
  111. package/corpus/core/src/templates/chat/public/agent-native-icon-light.svg +10 -0
  112. package/corpus/core/src/templates/chat/public/agent-native-logo-dark.svg +21 -0
  113. package/corpus/core/src/templates/chat/public/agent-native-logo-light.svg +21 -0
  114. package/corpus/core/src/templates/chat/public/favicon.svg +1 -0
  115. package/corpus/core/src/templates/chat/public/icon-180.svg +1 -0
  116. package/corpus/core/src/templates/chat/public/icon-192.svg +1 -0
  117. package/corpus/core/src/templates/chat/public/icon-512.svg +1 -0
  118. package/corpus/core/src/templates/chat/public/manifest.json +21 -0
  119. package/corpus/core/src/templates/chat/react-router.config.ts +7 -0
  120. package/corpus/core/src/templates/chat/server/middleware/auth.ts +15 -0
  121. package/corpus/core/src/templates/chat/server/plugins/agent-chat.ts +21 -0
  122. package/corpus/core/src/templates/chat/server/plugins/auth.ts +17 -0
  123. package/corpus/core/src/templates/chat/server/routes/[...page].get.ts +5 -0
  124. package/corpus/core/src/templates/chat/ssr-entry.ts +15 -0
  125. package/corpus/core/src/templates/chat/tsconfig.json +21 -0
  126. package/corpus/core/src/templates/chat/vite.config.ts +19 -0
  127. package/corpus/templates/analytics/AGENTS.md +19 -11
  128. package/corpus/templates/analytics/actions/list-data-dictionary.ts +3 -1
  129. package/corpus/templates/analytics/actions/save-data-dictionary-entry.ts +14 -0
  130. package/corpus/templates/analytics/actions/search-analytics-query-catalog.ts +41 -0
  131. package/corpus/templates/analytics/app/components/dashboard/DashboardPanelSkeleton.tsx +13 -0
  132. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +12 -11
  133. package/corpus/templates/analytics/app/pages/adhoc/DashboardSkeleton.tsx +3 -3
  134. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +7 -1
  135. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +8 -1
  136. package/corpus/templates/analytics/changelog/2026-07-22-fixed-dashboards-and-analyses-missing-a-copyable-share-link.md +6 -0
  137. package/corpus/templates/analytics/changelog/2026-07-23-dashboard-chart-loading-placeholders-are-easier-to-see-in-da.md +6 -0
  138. package/corpus/templates/analytics/changelog/2026-07-23-routine-analytics-lookups-reuse-existing-query-definitions.md +6 -0
  139. package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +1 -12
  140. package/corpus/templates/analytics/server/lib/analytics-query-catalog.ts +405 -0
  141. package/corpus/templates/analytics/server/plugins/agent-chat.ts +11 -16
  142. package/corpus/templates/content/changelog/2026-07-23-database-toolbar-sort-and-filter-controls-open-reliably.md +6 -0
  143. package/corpus/templates/forms/app/lib/public-form-link.ts +14 -0
  144. package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +6 -14
  145. package/corpus/templates/forms/changelog/2026-07-23-published-form-links-can-be-copied-without-being-asked-to-re.md +6 -0
  146. package/corpus/templates/mail/changelog/2026-07-23-scheduled-emails-now-send-only-once-when-multiple-requests-r.md +6 -0
  147. package/corpus/templates/mail/server/lib/jobs.ts +13 -4
  148. package/corpus/templates/mail/server/plugins/mail-jobs.ts +1 -1
  149. package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +7 -18
  150. package/corpus/templates/slides/app/lib/agent-visible-message.ts +28 -0
  151. package/corpus/templates/slides/app/pages/Index.tsx +6 -34
  152. package/corpus/templates/slides/changelog/2026-07-23-full-prompts-stay-visible-in-chat-when-creating-decks-or-add.md +6 -0
  153. package/corpus/toolkit/CHANGELOG.md +13 -0
  154. package/corpus/toolkit/package.json +1 -1
  155. package/corpus/toolkit/src/editor/SharedRichEditor.tsx +23 -2
  156. package/corpus/toolkit/src/editor/SlashCommandMenu.tsx +68 -2
  157. package/corpus/toolkit/src/editor/index.ts +1 -0
  158. package/corpus/toolkit/src/editor.css +75 -0
  159. package/corpus/toolkit/src/ui/button.tsx +3 -2
  160. package/dist/agent/production-agent.d.ts.map +1 -1
  161. package/dist/agent/production-agent.js +96 -115
  162. package/dist/agent/production-agent.js.map +1 -1
  163. package/dist/agent/run-manager.d.ts +9 -1
  164. package/dist/agent/run-manager.d.ts.map +1 -1
  165. package/dist/agent/run-manager.js +26 -0
  166. package/dist/agent/run-manager.js.map +1 -1
  167. package/dist/agent/thread-data-builder.d.ts +2 -0
  168. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  169. package/dist/agent/thread-data-builder.js +69 -9
  170. package/dist/agent/thread-data-builder.js.map +1 -1
  171. package/dist/cli/create.d.ts +2 -1
  172. package/dist/cli/create.d.ts.map +1 -1
  173. package/dist/cli/create.js +43 -6
  174. package/dist/cli/create.js.map +1 -1
  175. package/dist/client/AssistantChat.d.ts.map +1 -1
  176. package/dist/client/AssistantChat.js +32 -10
  177. package/dist/client/AssistantChat.js.map +1 -1
  178. package/dist/client/chat/message-components.d.ts +2 -1
  179. package/dist/client/chat/message-components.d.ts.map +1 -1
  180. package/dist/client/chat/message-components.js +9 -3
  181. package/dist/client/chat/message-components.js.map +1 -1
  182. package/dist/client/chat/repo-helpers.d.ts +4 -0
  183. package/dist/client/chat/repo-helpers.d.ts.map +1 -1
  184. package/dist/client/chat/repo-helpers.js +61 -0
  185. package/dist/client/chat/repo-helpers.js.map +1 -1
  186. package/dist/client/chat/tool-call-display.d.ts +2 -1
  187. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  188. package/dist/client/chat/tool-call-display.js +10 -9
  189. package/dist/client/chat/tool-call-display.js.map +1 -1
  190. package/dist/collab/awareness.d.ts +2 -2
  191. package/dist/collab/awareness.d.ts.map +1 -1
  192. package/dist/collab/routes.d.ts +1 -1
  193. package/dist/collab/struct-routes.d.ts +1 -1
  194. package/dist/notifications/routes.d.ts +2 -2
  195. package/dist/observability/routes.d.ts +3 -3
  196. package/dist/provider-api/actions/custom-provider-registration.d.ts +7 -7
  197. package/dist/provider-api/actions/provider-api.d.ts +7 -7
  198. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  199. package/dist/resources/handlers.d.ts +1 -1
  200. package/dist/secrets/routes.d.ts +9 -9
  201. package/dist/server/agent-chat/framework-prompts.d.ts.map +1 -1
  202. package/dist/server/agent-chat/framework-prompts.js +3 -1
  203. package/dist/server/agent-chat/framework-prompts.js.map +1 -1
  204. package/dist/server/agent-chat/plugin-options.d.ts +9 -0
  205. package/dist/server/agent-chat/plugin-options.d.ts.map +1 -1
  206. package/dist/server/agent-chat/plugin-options.js.map +1 -1
  207. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  208. package/dist/server/agent-chat-plugin.js +11 -2
  209. package/dist/server/agent-chat-plugin.js.map +1 -1
  210. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  211. package/dist/server/realtime-token.d.ts +1 -1
  212. package/dist/server/transcribe-voice.d.ts +1 -1
  213. package/package.json +4 -4
  214. package/src/agent/production-agent.ts +107 -125
  215. package/src/agent/run-manager.ts +45 -2
  216. package/src/agent/thread-data-builder.ts +85 -8
  217. package/src/cli/create.ts +44 -5
  218. package/src/client/AssistantChat.tsx +37 -9
  219. package/src/client/chat/message-components.tsx +9 -1
  220. package/src/client/chat/repo-helpers.ts +77 -0
  221. package/src/client/chat/tool-call-display.tsx +51 -15
  222. package/src/server/agent-chat/framework-prompts.ts +3 -1
  223. package/src/server/agent-chat/plugin-options.ts +9 -0
  224. package/src/server/agent-chat-plugin.ts +12 -3
  225. package/src/templates/chat/actions/hello.spec.ts +0 -23
  226. package/src/templates/chat/actions/navigate.spec.ts +0 -68
  227. package/src/templates/chat/actions/view-screen.spec.ts +0 -40
  228. package/src/templates/chat/app/lib/agent-page.spec.tsx +0 -61
@@ -1 +1 @@
1
- {"version":3,"file":"tool-call-display.js","sourceRoot":"","sources":["../../../src/client/chat/tool-call-display.tsx"],"names":[],"mappings":"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","sourcesContent":["// Owns: tool-payload formatting helpers, ToolCallDisplay, ToolCallFallback,\n// and ReconnectStreamMessage used by AssistantChat.\n\nimport type { ToolCallMessagePartProps } from \"@assistant-ui/react\";\nimport {\n IconLoader2,\n IconCircleX,\n IconCheck,\n IconChevronRight,\n IconCopy,\n IconCode,\n IconBrandSlack,\n IconTerminal2,\n IconDatabase,\n IconSearch,\n IconFileCode,\n IconShieldCheck,\n IconX,\n} from \"@tabler/icons-react\";\nimport React, {\n useState,\n useEffect,\n useCallback,\n useLayoutEffect,\n useRef,\n} from \"react\";\n\nimport type { A2AAgentActivitySnapshot } from \"../../a2a/activity.js\";\nimport type { ActionChatUIConfig } from \"../../action-ui.js\";\nimport type { AgentMcpAppPayload } from \"../../mcp-client/app-result.js\";\nimport { AgentTaskCard } from \"../AgentTaskCard.js\";\nimport { writeClipboardText } from \"../clipboard.js\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover.js\";\nimport { ConnectBuilderCard } from \"../ConnectBuilderCard.js\";\nimport { useT } from \"../i18n.js\";\nimport { McpAppRenderer } from \"../mcp-apps/McpAppRenderer.js\";\nimport type { AgentCallProgress, ContentPart } from \"../sse-event-processor.js\";\nimport {\n BashCell,\n EditCell,\n WriteCell,\n FilesChangedSummary,\n} from \"../tool-cells/index.js\";\nimport {\n humanizeToolName,\n isCallAgentToolCallShadowed,\n} from \"../tool-display.js\";\nimport { cn } from \"../utils.js\";\nimport { ActionChatUiSurface } from \"./action-chat-ui-surface.js\";\nimport {\n SmoothMarkdownText,\n HighlightedCodeBlock,\n useSmoothStreamingText,\n} from \"./markdown-renderer.js\";\nimport { resolveToolRenderer } from \"./tool-render-registry.js\";\nimport {\n isBuiltinDataWidgetActionRenderer,\n resolveBuiltinActionChatRenderer,\n resolveBuiltinFallbackToolRenderer,\n} from \"./widgets/builtin-tool-renderers.js\";\n\n// Exported so AssistantChatInner can provide a context value.\nexport const ChatRunningContext = React.createContext(false);\nexport const ChatRunDurationContext = React.createContext<number | null>(null);\nexport const ASSISTANT_VISIBLE_TOOL_CALL_LIMIT = 3;\n\n/**\n * Human-in-the-loop approval bridge. `AssistantChatInner` provides a value that\n * re-issues the turn approving a specific paused tool call (opt-in\n * `needsApproval` actions). When null, the Approve button is not rendered.\n * Deny defaults to local-only (the action stays un-run) unless `onDeny` is\n * provided, and \"Always allow\" only renders when `onAlwaysAllow` is provided\n * — both are additive so existing action-approval consumers are unaffected.\n */\nexport type ApprovalContextValue = {\n /** Re-issue the turn so the server runs the approved call. */\n onApprove: (approvalKey: string) => void;\n /**\n * Optional host hook invoked in addition to the local \"denied\" state, e.g.\n * so a Code session can also resolve its own pending approval as denied.\n */\n onDeny?: (approvalKey: string) => void;\n /**\n * Optional host hook that persists this exact call so future occurrences\n * skip the approval gate. When absent, no \"Always allow\" button renders.\n */\n onAlwaysAllow?: (approvalKey: string) => void;\n};\nexport const ApprovalContext = React.createContext<ApprovalContextValue | null>(\n null,\n);\n\nexport const TOOL_LONG_RUNNING_HINT_DELAY_MS = 45_000;\n\nexport function ToolActivityPresentation({\n toolName,\n isRunning,\n isActiveTail,\n children,\n}: {\n toolName: string;\n isRunning: boolean;\n isActiveTail: boolean;\n children: React.ReactNode;\n}) {\n const [showLongRunningHint, setShowLongRunningHint] = useState(false);\n // A batched update can first reveal a tool with its result already attached.\n // Presentation follows the active chat tail rather than execution state so\n // that newly revealed completed tools still get their entrance motion.\n const [animateEntry] = useState(isActiveTail);\n\n useEffect(() => {\n if (!isRunning) {\n setShowLongRunningHint(false);\n return;\n }\n setShowLongRunningHint(false);\n const timeout = window.setTimeout(() => {\n setShowLongRunningHint(true);\n }, TOOL_LONG_RUNNING_HINT_DELAY_MS);\n return () => window.clearTimeout(timeout);\n }, [isRunning, toolName]);\n\n return (\n <div\n className={cn(\n \"agent-tool-call\",\n animateEntry && \"agent-tool-call--entering\",\n )}\n data-running={isRunning ? \"true\" : undefined}\n >\n {children}\n {isRunning && showLongRunningHint && (\n <div className=\"mt-0.5 px-2.5 pb-2 text-[11px] leading-snug text-muted-foreground/80\">\n Still working. Large updates can take a minute or two.\n </div>\n )}\n </div>\n );\n}\n\n// ─── Tool-payload formatting ──────────────────────────────────────────────────\n\ntype ToolDetailSection = \"input\" | \"result\";\nexport type ToolDetailPayload = {\n section: ToolDetailSection;\n title: string;\n text: string;\n copyText: string;\n lang: string;\n};\n\nfunction stringifyToolValue(value: unknown, pretty = false): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value, null, pretty ? 2 : 0);\n } catch {\n return String(value ?? \"\");\n }\n}\n\nfunction looksLikeSql(text: string): boolean {\n return /^\\s*(select|with|insert|update|delete|merge|create|alter|drop|explain|declare|begin)\\b/i.test(\n text,\n );\n}\n\nfunction parseJsonText(text: string): unknown | null {\n const trimmed = text.trim();\n if (!trimmed || !/^[{[]/.test(trimmed)) return null;\n try {\n return JSON.parse(trimmed);\n } catch {\n return null;\n }\n}\n\nfunction inferToolTextLanguage(\n text: string,\n key?: string,\n toolName?: string,\n): string {\n const keyName = (key ?? \"\").toLowerCase();\n const tool = (toolName ?? \"\").toLowerCase();\n if (\n keyName === \"code\" &&\n (tool.includes(\"run-code\") || tool.includes(\"run_code\"))\n ) {\n return \"javascript\";\n }\n if (\n keyName === \"sql\" ||\n keyName.endsWith(\"sql\") ||\n keyName === \"query\" ||\n tool.includes(\"bigquery\") ||\n tool.includes(\"db-query\") ||\n looksLikeSql(text)\n ) {\n return \"sql\";\n }\n return parseJsonText(text) ? \"json\" : \"text\";\n}\n\nfunction formatToolTextValue(\n value: unknown,\n key?: string,\n toolName?: string,\n): { text: string; lang: string } {\n if (typeof value === \"string\") {\n const parsed = parseJsonText(value);\n if (parsed) {\n return { text: JSON.stringify(parsed, null, 2), lang: \"json\" };\n }\n return {\n text: value,\n lang: inferToolTextLanguage(value, key, toolName),\n };\n }\n return { text: stringifyToolValue(value, true), lang: \"json\" };\n}\n\nexport function toolInputPayload(\n toolName: string,\n args: Record<string, unknown>,\n): ToolDetailPayload | null {\n const entries = Object.entries(args);\n if (entries.length === 0) return null;\n if (entries.length === 1) {\n const [key, value] = entries[0]!;\n const formatted = formatToolTextValue(value, key, toolName);\n const normalizedKey = key.toLowerCase();\n const keyLabel =\n normalizedKey === \"sql\" || normalizedKey.endsWith(\"sql\") ? \"SQL\" : key;\n return {\n section: \"input\",\n title: `Input - ${keyLabel}`,\n text: formatted.text,\n copyText:\n typeof value === \"string\" ? value : stringifyToolValue(value, true),\n lang: formatted.lang,\n };\n }\n return {\n section: \"input\",\n title: \"Input\",\n text: JSON.stringify(args, null, 2),\n copyText: JSON.stringify(args, null, 2),\n lang: \"json\",\n };\n}\n\nexport function toolResultPayload(\n result: string | undefined,\n): ToolDetailPayload | null {\n if (result === undefined) return null;\n const formatted = formatToolTextValue(result);\n return {\n section: \"result\",\n title: \"Result\",\n text: formatted.text,\n copyText: result,\n lang: formatted.lang,\n };\n}\n\n// ─── Tool icon helpers ────────────────────────────────────────────────────────\n\ntype ToolIconComponent = React.ComponentType<{\n className?: string;\n size?: number | string;\n}>;\n\nfunction resolveToolIcon(toolName: string): ToolIconComponent {\n const name = toolName.toLowerCase();\n if (name.includes(\"slack\")) return IconBrandSlack;\n if (\n name.includes(\"bash\") ||\n name.includes(\"shell\") ||\n name.includes(\"terminal\") ||\n name.includes(\"run-code\") ||\n name.includes(\"exec\")\n ) {\n return IconTerminal2;\n }\n if (\n name.includes(\"sql\") ||\n name.includes(\"bigquery\") ||\n name.includes(\"db-query\") ||\n name.includes(\"query\")\n ) {\n return IconDatabase;\n }\n if (\n name.includes(\"search\") ||\n name.includes(\"find\") ||\n name.includes(\"grep\")\n ) {\n return IconSearch;\n }\n if (\n name.includes(\"file\") ||\n name.includes(\"read\") ||\n name.includes(\"write\") ||\n name.includes(\"edit\")\n ) {\n return IconFileCode;\n }\n return IconCode;\n}\n\n// ─── Simple code viewer (Codex-style gray box) ────────────────────────────────\n\nfunction SimpleCodeViewer({\n text,\n lang,\n className,\n maxHeightClass = \"max-h-56\",\n}: {\n text: string;\n lang: string;\n className?: string;\n maxHeightClass?: string;\n}) {\n return (\n <div\n className={cn(\n \"agent-tool-code overflow-auto rounded-md bg-muted/70 font-mono text-[11px] leading-relaxed text-foreground\",\n maxHeightClass,\n className,\n )}\n >\n {lang !== \"text\" && (\n <div className=\"sticky top-0 z-[1] flex items-center justify-between border-b border-border/40 bg-muted/90 px-2.5 py-1\">\n <span className=\"font-mono text-[10px] uppercase tracking-wide text-muted-foreground/80\">\n {lang}\n </span>\n </div>\n )}\n <HighlightedCodeBlock code={text} lang={lang} />\n </div>\n );\n}\n\nfunction ToolOutputPopover({\n open,\n onOpenChange,\n title,\n payload,\n children,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n payload: ToolDetailPayload;\n children: React.ReactNode;\n}) {\n const [copied, setCopied] = useState(false);\n const copyResetRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (copyResetRef.current) clearTimeout(copyResetRef.current);\n };\n }, []);\n\n const copyValue = useCallback(async () => {\n try {\n if (await writeClipboardText(payload.copyText)) {\n setCopied(true);\n if (copyResetRef.current) clearTimeout(copyResetRef.current);\n copyResetRef.current = setTimeout(() => setCopied(false), 1200);\n }\n } catch {\n // Clipboard failures should not interrupt chat rendering.\n }\n }, [payload.copyText]);\n\n return (\n <Popover open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>{children}</PopoverTrigger>\n <PopoverContent\n align=\"start\"\n side=\"bottom\"\n sideOffset={6}\n collisionPadding={12}\n className=\"flex max-h-[min(calc(100vh-2rem),var(--radix-popover-content-available-height,75vh))] w-[min(calc(100vw-2rem),var(--radix-popover-content-available-width,760px),760px)] flex-col gap-0 overflow-hidden p-0\"\n >\n <div className=\"flex shrink-0 items-center justify-between gap-3 border-b border-border px-4 py-3\">\n <div className=\"truncate text-sm font-medium\">{title}</div>\n <button\n type=\"button\"\n onClick={copyValue}\n className=\"inline-flex h-7 items-center gap-1.5 rounded-md px-2 text-xs text-muted-foreground hover:bg-accent hover:text-foreground\"\n >\n {copied ? <IconCheck size={13} /> : <IconCopy size={13} />}\n {copied ? \"Copied\" : \"Copy\"}\n </button>\n </div>\n <div className=\"min-h-0 flex-1 overflow-hidden p-3\">\n <SimpleCodeViewer\n text={payload.text}\n lang={payload.lang}\n maxHeightClass=\"max-h-[min(70vh,calc(var(--radix-popover-content-available-height,75vh)-4.5rem))]\"\n />\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\n// ─── Collapsible height animation ─────────────────────────────────────────────\n\nexport function AnimatedCollapse({\n open,\n children,\n}: {\n open: boolean;\n children: React.ReactNode;\n}) {\n const [mounted, setMounted] = useState(open);\n\n useLayoutEffect(() => {\n if (open) setMounted(true);\n }, [open]);\n\n const onTransitionEnd = useCallback(\n (event: React.TransitionEvent<HTMLDivElement>) => {\n if (event.propertyName !== \"grid-template-rows\" || open) return;\n setMounted(false);\n },\n [open],\n );\n\n if (!mounted) return null;\n\n return (\n <div\n className=\"agent-chat-collapse\"\n data-state={open ? \"open\" : \"closed\"}\n aria-hidden={!open}\n onTransitionEnd={onTransitionEnd}\n >\n <div className=\"agent-chat-collapse__content\">{children}</div>\n </div>\n );\n}\n\n// ─── Human-in-the-loop approval affordance ────────────────────────────────────\n\n/**\n * Inline Approve/Deny prompt rendered when a `needsApproval` action paused the\n * turn. Approve re-issues the turn with the call's `approvalKey`; Deny dismisses\n * the prompt locally (the action stays un-run).\n */\nfunction ApprovalAffordance({\n toolName,\n approval,\n}: {\n toolName: string;\n approval: { approvalKey: string; dismissed?: boolean };\n}) {\n const ctx = React.useContext(ApprovalContext);\n const [approved, setApproved] = useState(false);\n const [denied, setDenied] = useState(false);\n\n // Once approved, the turn is re-issued; collapse to a quiet note so the user\n // can't double-fire the approval.\n if (approved) {\n return (\n <div className=\"mt-1.5 text-xs text-muted-foreground\">\n Approved. Re-running {toolName}...\n </div>\n );\n }\n // Deny defaults to local-only (the action simply stays un-run). When the\n // host also provided `onDeny` (e.g. a Code session resolving its own\n // pending approval), it fires alongside the local state.\n if (denied) {\n return (\n <div className=\"mt-1.5 text-xs text-muted-foreground\">\n Denied. {toolName} did not run.\n </div>\n );\n }\n return (\n <div className=\"mt-1.5 flex items-center gap-2 rounded-md border border-border bg-muted/40 px-2.5 py-1.5\">\n <IconShieldCheck className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n <span className=\"mr-auto text-xs text-muted-foreground\">\n Approve to run {toolName}?\n </span>\n {ctx && (\n <button\n type=\"button\"\n onClick={() => {\n setApproved(true);\n ctx.onApprove(approval.approvalKey);\n }}\n className={cn(\n \"inline-flex items-center gap-1 rounded-md px-2.5 py-1 text-xs font-medium transition-colors\",\n \"bg-foreground text-background hover:bg-foreground/90\",\n )}\n >\n <IconCheck className=\"h-3.5 w-3.5\" />\n Approve\n </button>\n )}\n {ctx?.onAlwaysAllow && (\n <button\n type=\"button\"\n onClick={() => {\n setApproved(true);\n ctx.onAlwaysAllow?.(approval.approvalKey);\n }}\n title=\"Approve and always allow this exact command\"\n className={cn(\n \"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1 text-xs font-medium transition-colors\",\n \"text-foreground hover:bg-muted\",\n )}\n >\n <IconShieldCheck className=\"h-3.5 w-3.5\" />\n Always allow\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => {\n setDenied(true);\n ctx?.onDeny?.(approval.approvalKey);\n }}\n className={cn(\n \"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1 text-xs font-medium transition-colors\",\n \"text-foreground hover:bg-muted\",\n )}\n >\n <IconX className=\"h-3.5 w-3.5\" />\n Deny\n </button>\n </div>\n );\n}\n\n// ─── ToolCallDisplay ──────────────────────────────────────────────────────────\n\nexport function ToolCallDisplay({\n toolName,\n argsText,\n args,\n result,\n mcpApp,\n chatUI,\n isRunning,\n structuredMeta,\n approval,\n repeatCount,\n isLatestRunning = isRunning,\n isActiveTail,\n}: {\n toolName: string;\n argsText?: string;\n args: Record<string, unknown>;\n result?: string;\n mcpApp?: AgentMcpAppPayload;\n chatUI?: ActionChatUIConfig;\n isRunning: boolean;\n structuredMeta?: Record<string, unknown>;\n approval?: { approvalKey: string; dismissed?: boolean };\n repeatCount?: number;\n /** The latest tool shown while the overall chat turn is still active. */\n isActiveTail?: boolean;\n /** @deprecated Use isActiveTail. */\n isLatestRunning?: boolean;\n}) {\n const showActiveTail = isActiveTail ?? isLatestRunning;\n // Delegate to bespoke cells when structured metadata is present.\n // These must be separate components so hook order in ToolCallDisplayGeneric\n // is always stable (no conditional hook calls).\n const toolKind = structuredMeta?.toolKind as string | undefined;\n const wrapToolDisplay = (children: React.ReactNode) => (\n <ToolActivityPresentation\n toolName={toolName}\n isRunning={isRunning}\n isActiveTail={showActiveTail}\n >\n {children}\n </ToolActivityPresentation>\n );\n if (toolKind === \"bash\") {\n return wrapToolDisplay(\n <BashCell\n meta={\n structuredMeta as unknown as Parameters<typeof BashCell>[0][\"meta\"]\n }\n output={result}\n isRunning={isRunning}\n />,\n );\n }\n if (toolKind === \"edit\") {\n return wrapToolDisplay(\n <EditCell\n meta={\n structuredMeta as unknown as Parameters<typeof EditCell>[0][\"meta\"]\n }\n isRunning={isRunning}\n />,\n );\n }\n if (toolKind === \"write\") {\n return wrapToolDisplay(\n <WriteCell\n meta={\n structuredMeta as unknown as Parameters<typeof WriteCell>[0][\"meta\"]\n }\n isRunning={isRunning}\n />,\n );\n }\n return wrapToolDisplay(\n <ToolCallDisplayGeneric\n toolName={toolName}\n argsText={argsText}\n args={args}\n result={result}\n mcpApp={mcpApp}\n chatUI={chatUI}\n isRunning={isRunning}\n isActiveTail={showActiveTail}\n structuredMeta={structuredMeta}\n approval={approval}\n repeatCount={repeatCount}\n />,\n );\n}\n\nfunction ToolCallDisplayGeneric({\n toolName,\n argsText,\n args,\n result,\n mcpApp,\n chatUI,\n isRunning,\n isActiveTail,\n structuredMeta,\n approval,\n repeatCount,\n}: {\n toolName: string;\n argsText?: string;\n args: Record<string, unknown>;\n result?: string;\n mcpApp?: AgentMcpAppPayload;\n chatUI?: ActionChatUIConfig;\n isRunning: boolean;\n isActiveTail: boolean;\n structuredMeta?: Record<string, unknown>;\n approval?: { approvalKey: string; dismissed?: boolean };\n repeatCount?: number;\n}) {\n const isRawCallAgent = toolName === \"call-agent\";\n const isAgentCall = toolName.startsWith(\"agent:\") || isRawCallAgent;\n const [expanded, setExpanded] = useState(isAgentCall);\n const [outputOpen, setOutputOpen] = useState(false);\n const agentName = toolName.startsWith(\"agent:\")\n ? toolName.slice(6)\n : typeof args.agent === \"string\"\n ? args.agent\n : null;\n const isAgentError = isAgentCall && result === \"Error calling agent\";\n const agentStreamText = isRawCallAgent\n ? (result ?? \"\")\n : isAgentCall\n ? (argsText ?? \"\")\n : \"\";\n const agentActivity = structuredMeta?.agentActivity as\n | A2AAgentActivitySnapshot\n | undefined;\n const agentProgress = structuredMeta?.agentProgress as\n | AgentCallProgress\n | undefined;\n const hasStreamText = agentStreamText.length > 0;\n const hasArgs = !isAgentCall && Object.keys(args).length > 0;\n\n // Render connect-builder as ConnectBuilderCard once the result is available\n if (toolName === \"connect-builder\" && result) {\n try {\n const parsed = JSON.parse(result);\n if (parsed?.kind === \"connect-builder-card\") {\n return (\n <ConnectBuilderCard\n configured={!!parsed.configured}\n builderEnabled={parsed.builderEnabled !== false}\n // Ignore saved cliAuthUrl values from older tool results. They\n // contain signed callback state and can expire while a chat sits\n // open; the card's hook fetches a fresh signed URL on mount/click.\n connectUrl={parsed.connectUrl || \"\"}\n orgName={parsed.orgName ?? null}\n prompt={typeof parsed.prompt === \"string\" ? parsed.prompt : \"\"}\n />\n );\n }\n } catch {\n // fall through to default pill rendering\n }\n }\n\n // Render agent-teams spawn as AgentTaskCard once the result is available\n if (\n toolName === \"agent-teams\" &&\n (args as Record<string, string>)?.action === \"spawn\" &&\n result\n ) {\n try {\n const parsed = JSON.parse(result);\n if (parsed.taskId && parsed.threadId) {\n return (\n <AgentTaskCard\n taskId={parsed.taskId}\n threadId={parsed.threadId}\n description={\n parsed.description ||\n (args as Record<string, string>)?.task ||\n \"Sub-agent task\"\n }\n onOpen={(tid) => {\n window.dispatchEvent(\n new CustomEvent(\"agent-task-open\", {\n detail: {\n threadId: tid,\n description:\n parsed.description ||\n (args as Record<string, string>)?.task ||\n \"\",\n name: parsed.name || \"\",\n },\n }),\n );\n }}\n />\n );\n }\n } catch {\n // Fall through to default pill rendering\n }\n }\n\n const parsedResult = result ? parseJsonText(result) : null;\n const nativeToolContext = {\n toolName,\n args,\n resultText: result,\n resultJson: parsedResult,\n isRunning,\n isActiveTail,\n chatUI,\n };\n const skipRegistryRenderer =\n !isAgentCall && isBuiltinDataWidgetActionRenderer(nativeToolContext);\n const NativeToolRenderer = isAgentCall\n ? null\n : (resolveBuiltinActionChatRenderer(nativeToolContext) ??\n (skipRegistryRenderer ? null : resolveToolRenderer(nativeToolContext)) ??\n resolveBuiltinFallbackToolRenderer(nativeToolContext));\n if (NativeToolRenderer) {\n return (\n <ActionChatUiSurface\n context={nativeToolContext}\n isBuiltinDataWidget={isBuiltinDataWidgetActionRenderer(\n nativeToolContext,\n )}\n >\n <NativeToolRenderer context={nativeToolContext} />\n </ActionChatUiSurface>\n );\n }\n\n const inputPayload = hasArgs ? toolInputPayload(toolName, args) : null;\n const resultPayload = toolResultPayload(result);\n\n const displayName = isAgentCall\n ? isRunning\n ? `Asking ${agentName}...`\n : isAgentError\n ? `Error asking ${agentName}`\n : `Asked ${agentName}`\n : humanizeToolName(toolName);\n\n const canExpand = isAgentCall\n ? hasStreamText\n : hasArgs || result !== undefined;\n const isExpanded = isAgentCall ? hasStreamText && expanded : expanded;\n const ToolIcon = resolveToolIcon(toolName);\n const outputTitle = `Raw ${toolName} tool call output`;\n\n if (isAgentCall) {\n return (\n <AgentCallCell\n agentName={agentName ?? \"agent\"}\n activity={agentActivity}\n progress={agentProgress}\n responseText={agentStreamText}\n isRunning={isRunning}\n isError={isAgentError}\n durationMs={\n typeof structuredMeta?.agentDurationMs === \"number\"\n ? structuredMeta.agentDurationMs\n : agentActivity?.durationMs\n }\n />\n );\n }\n\n return (\n <div className=\"group/tool my-0.5 w-full overflow-hidden\">\n {mcpApp && <McpAppRenderer app={mcpApp} className=\"mb-1.5\" />}\n <button\n type=\"button\"\n onClick={() => canExpand && setExpanded(!isExpanded)}\n aria-expanded={canExpand ? isExpanded : undefined}\n className={cn(\n \"flex w-full items-center gap-1.5 rounded-md py-0.5 text-left text-[13px] text-muted-foreground transition-colors\",\n canExpand && \"hover:text-foreground\",\n isRunning && \"text-muted-foreground\",\n )}\n >\n <span className=\"relative flex size-4 shrink-0 items-center justify-center\">\n {isRunning ? (\n <IconLoader2 className=\"size-3.5 animate-spin\" />\n ) : isAgentError ? (\n <IconCircleX className=\"size-3.5 text-destructive\" />\n ) : (\n <>\n <ToolIcon\n className={cn(\n \"size-3.5 transition-opacity\",\n canExpand && \"group-hover/tool:opacity-0\",\n )}\n />\n {canExpand && (\n <IconChevronRight\n className={cn(\n \"absolute size-3.5 opacity-0 transition-[opacity,transform] group-hover/tool:opacity-100\",\n isExpanded && \"rotate-90\",\n )}\n />\n )}\n </>\n )}\n </span>\n <span\n className={cn(\n \"min-w-0 truncate font-normal\",\n isActiveTail && \"agent-running-shimmer\",\n )}\n >\n {displayName}\n </span>\n {repeatCount && repeatCount > 1 && (\n <span\n className=\"shrink-0 rounded border border-border/60 px-1.5 py-0.5 text-[10px] leading-none text-muted-foreground\"\n title={`Repeated ${repeatCount} times`}\n >\n {repeatCount}x\n </span>\n )}\n </button>\n <AnimatedCollapse\n open={isExpanded && !isAgentCall && (hasArgs || result !== undefined)}\n >\n <div className=\"mt-1 space-y-2 pl-5\">\n {inputPayload && (\n <SimpleCodeViewer\n text={inputPayload.text}\n lang={inputPayload.lang}\n />\n )}\n {resultPayload && (\n <ToolOutputPopover\n open={outputOpen}\n onOpenChange={setOutputOpen}\n title={outputTitle}\n payload={resultPayload}\n >\n <button\n type=\"button\"\n aria-label={`View ${toolName} output`}\n className=\"inline-flex size-6 items-center justify-center rounded-md text-muted-foreground/70 transition-colors hover:bg-accent hover:text-foreground\"\n >\n <IconCode className=\"size-3.5\" />\n </button>\n </ToolOutputPopover>\n )}\n </div>\n </AnimatedCollapse>\n {approval && (\n <ApprovalAffordance toolName={toolName} approval={approval} />\n )}\n </div>\n );\n}\n\nfunction AgentCallCell({\n agentName,\n activity,\n progress,\n responseText,\n isRunning,\n isError,\n durationMs,\n}: {\n agentName: string;\n activity?: A2AAgentActivitySnapshot;\n progress?: AgentCallProgress;\n responseText: string;\n isRunning: boolean;\n isError: boolean;\n durationMs?: number;\n}) {\n const t = useT();\n const [open, setOpen] = useState(true);\n const finalText = isRunning\n ? activity?.responseText || responseText\n : responseText || activity?.responseText;\n const work = activity?.reasoning?.length || activity?.toolCalls?.length;\n const workItemCount = Math.max(\n activity?.reasoning?.length ?? 0,\n activity?.toolCalls?.length ?? 0,\n );\n const label = isRunning\n ? t(\"agentPanel.delegatedAgent.asking\", { name: agentName })\n : isError\n ? t(\"agentPanel.delegatedAgent.error\", { name: agentName })\n : t(\"agentPanel.delegatedAgent.asked\", { name: agentName });\n const workContent = work ? (\n <div className=\"space-y-1 ps-5\">\n {Array.from({ length: workItemCount }, (_, index) => {\n const reasoningText = activity?.reasoning?.[index];\n const tool = activity?.toolCalls?.[index];\n return (\n <React.Fragment key={`activity-${index}`}>\n {reasoningText && (\n <ReasoningCell\n text={reasoningText}\n isStreaming={\n isRunning &&\n activity.activePhase === \"reasoning\" &&\n index === activity.reasoning.length - 1\n }\n defaultOpen={index === activity.reasoning.length - 1}\n collapseWhenReplaced={index < activity.toolCalls.length}\n />\n )}\n {tool && (\n <ToolCallDisplay\n toolName={tool.name}\n args={{}}\n argsText=\"\"\n isRunning={tool.status === \"running\"}\n result={\n tool.status === \"failed\"\n ? \"Failed\"\n : tool.status === \"completed\"\n ? \"Done\"\n : undefined\n }\n isActiveTail={\n isRunning && index === activity.toolCalls.length - 1\n }\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n ) : null;\n const progressState = progress?.state.replaceAll(/[-_]+/g, \" \");\n const progressText =\n isRunning && !activity && progress && progressState\n ? [\n progressState.charAt(0).toUpperCase() + progressState.slice(1),\n t(\"agentPanel.delegatedAgent.elapsed\", {\n duration: formatWorkedDuration(progress.elapsedSeconds * 1000),\n }),\n progress.detail,\n ]\n .filter(Boolean)\n .join(\" · \")\n : null;\n return (\n <div className=\"group/tool my-0.5 w-full\">\n <button\n type=\"button\"\n onClick={() => setOpen((value) => !value)}\n aria-expanded={open}\n className=\"flex w-full items-center gap-1.5 rounded-md py-0.5 text-left text-[13px] text-muted-foreground transition-colors hover:text-foreground\"\n >\n {isRunning ? (\n <IconLoader2 className=\"size-3.5 animate-spin\" />\n ) : isError ? (\n <IconCircleX className=\"size-3.5 text-destructive\" />\n ) : (\n <IconChevronRight\n className={cn(\"size-3.5 transition-transform\", open && \"rotate-90\")}\n />\n )}\n <span\n className={cn(\n \"min-w-0 truncate font-normal\",\n isRunning && \"agent-running-shimmer\",\n )}\n >\n {label}\n </span>\n </button>\n <AnimatedCollapse open={open}>\n <div className=\"ms-1 border-s border-border/50 ps-2 pt-1\">\n {workContent &&\n (isRunning ? (\n workContent\n ) : (\n <WorkedForSummary durationMs={durationMs}>\n {workContent}\n </WorkedForSummary>\n ))}\n {progressText && (\n <p\n className=\"ps-5 pb-1 text-xs text-muted-foreground\"\n data-testid=\"agent-call-progress\"\n aria-live=\"polite\"\n >\n {progressText}\n </p>\n )}\n {finalText && (\n <div className=\"ps-5 pb-1\">\n <SmoothMarkdownText\n text={finalText}\n streaming={isRunning}\n resetKey={`agent-response-${agentName}`}\n statusType={isRunning ? \"running\" : \"complete\"}\n />\n </div>\n )}\n </div>\n </AnimatedCollapse>\n </div>\n );\n}\n\n// ─── ToolCallFallback ──────────────────────────────────────────────────────────\n\nexport function ToolCallFallback({\n toolName,\n args,\n argsText,\n result,\n ...rest\n}: ToolCallMessagePartProps & {\n mcpApp?: AgentMcpAppPayload;\n chatUI?: ActionChatUIConfig;\n structuredMeta?: Record<string, unknown>;\n activity?: boolean;\n approval?: { approvalKey: string; dismissed?: boolean };\n repeatCount?: number;\n isLatestRunning?: boolean;\n isActiveTail?: boolean;\n}) {\n const chatRunning = React.useContext(ChatRunningContext);\n const isRunning =\n result === undefined && (chatRunning || rest.activity === true);\n return (\n <ToolCallDisplay\n toolName={toolName}\n args={args as Record<string, unknown>}\n argsText={argsText}\n result={\n typeof result === \"string\"\n ? result\n : result !== undefined\n ? JSON.stringify(result)\n : undefined\n }\n mcpApp={rest.mcpApp}\n chatUI={rest.chatUI}\n structuredMeta={rest.structuredMeta}\n isRunning={isRunning}\n isActiveTail={rest.isActiveTail}\n isLatestRunning={rest.isLatestRunning}\n approval={rest.approval}\n repeatCount={rest.repeatCount}\n />\n );\n}\n\n// ─── ReconnectStreamMessage ────────────────────────────────────────────────────\n// Renders the agent's in-progress response during reconnection (outside\n// assistant-ui's runtime). Uses the same visual styling as normal messages.\n\nexport function ReconnectStreamMessage({\n content,\n}: {\n content: ContentPart[];\n}) {\n const chatRunning = React.useContext(ChatRunningContext);\n const toolSummary = getReconnectToolSummaryInfo(content);\n const latestReasoningPartIndex = content.reduce(\n (latestIndex, part, index) =>\n part.type === \"reasoning\" ? index : latestIndex,\n -1,\n );\n const streamingTextPartIndex =\n content.at(-1)?.type === \"text\" ? content.length - 1 : -1;\n const streamingReasoningPartIndex =\n content.at(-1)?.type === \"reasoning\" ? content.length - 1 : -1;\n const latestActiveToolIndex = content.reduce(\n (latestIndex, part, index) =>\n part.type === \"tool-call\" &&\n !isCallAgentToolCallShadowed(content, index) &&\n (chatRunning || part.activity === true)\n ? index\n : latestIndex,\n -1,\n );\n\n const renderPart = (part: ContentPart, i: number) => {\n if (isCallAgentToolCallShadowed(content, i)) return null;\n if (part.type === \"text\") {\n const partStreaming = chatRunning && i === streamingTextPartIndex;\n return (\n <SmoothMarkdownText\n key={`reconnect-text-${i}`}\n text={part.text}\n streaming={partStreaming}\n resetKey={`reconnect-text-${i}`}\n statusType={partStreaming ? \"running\" : \"complete\"}\n />\n );\n }\n if (part.type === \"reasoning\") {\n return (\n <ReasoningCell\n key={`reconnect-reasoning-${i}`}\n text={part.text}\n isStreaming={chatRunning && i === streamingReasoningPartIndex}\n resetKey={`reconnect-reasoning-${i}`}\n defaultOpen={i === latestReasoningPartIndex}\n collapseWhenReplaced={i < latestReasoningPartIndex}\n />\n );\n }\n return (\n <ToolCallDisplay\n key={`reconnect-tool-${i}`}\n toolName={part.toolName}\n argsText={part.argsText}\n args={part.args}\n result={part.result}\n mcpApp={part.mcpApp}\n chatUI={part.chatUI}\n structuredMeta={part.structuredMeta}\n isRunning={\n part.result === undefined && (chatRunning || part.activity === true)\n }\n isActiveTail={i === latestActiveToolIndex}\n approval={part.approval}\n repeatCount={part.repeatCount}\n />\n );\n };\n\n const renderedParts: React.ReactNode[] = [];\n let summaryStartIndex = -1;\n let summaryToolCount = 0;\n const flushSummary = (endIndex: number) => {\n if (summaryStartIndex < 0) return;\n renderedParts.push(\n <RanToolsSummary\n key={`reconnect-tool-summary-${summaryStartIndex}`}\n toolCount={summaryToolCount}\n >\n {content\n .slice(summaryStartIndex, endIndex)\n .map((part, offset) => renderPart(part, summaryStartIndex + offset))}\n </RanToolsSummary>,\n );\n summaryStartIndex = -1;\n summaryToolCount = 0;\n };\n\n for (let i = 0; i < content.length; i++) {\n const part = content[i]!;\n if (isCallAgentToolCallShadowed(content, i)) continue;\n const isOlderToolWork =\n toolSummary.startIndex >= 0 &&\n i < toolSummary.startIndex &&\n isReconnectToolSummaryPart(content, i, toolSummary.startIndex);\n if (isOlderToolWork) {\n summaryStartIndex = summaryStartIndex < 0 ? i : summaryStartIndex;\n if (part.type === \"tool-call\") summaryToolCount++;\n continue;\n }\n flushSummary(i);\n renderedParts.push(renderPart(part, i));\n }\n flushSummary(content.length);\n\n return (\n <div className=\"flex justify-start\">\n <div className=\"w-full max-w-[95%] text-sm leading-relaxed text-foreground space-y-1\">\n {renderedParts}\n </div>\n </div>\n );\n}\n\nfunction getReconnectToolSummaryInfo(content: readonly ContentPart[]) {\n const toolCallIndices = content.reduce<number[]>((indices, part, index) => {\n if (\n part.type === \"tool-call\" &&\n !isCallAgentToolCallShadowed(content, index) &&\n isReconnectSummarizablePart(part)\n ) {\n indices.push(index);\n }\n return indices;\n }, []);\n if (toolCallIndices.length <= ASSISTANT_VISIBLE_TOOL_CALL_LIMIT) {\n return { startIndex: -1 };\n }\n return {\n startIndex:\n toolCallIndices[\n toolCallIndices.length - ASSISTANT_VISIBLE_TOOL_CALL_LIMIT\n ]!,\n };\n}\n\nfunction isReconnectSummarizablePart(part: ContentPart): boolean {\n return (\n part.type === \"reasoning\" ||\n (part.type === \"tool-call\" &&\n part.toolName !== \"connect-builder\" &&\n part.chatUI === undefined &&\n part.mcpApp === undefined)\n );\n}\n\nfunction isReconnectToolSummaryPart(\n content: readonly ContentPart[],\n index: number,\n startIndex: number,\n): boolean {\n if (startIndex < 0 || index >= startIndex) return false;\n if (\n isCallAgentToolCallShadowed(content, index) ||\n !isReconnectSummarizablePart(content[index]!)\n ) {\n return false;\n }\n\n let segmentStart = index;\n while (\n segmentStart > 0 &&\n !isCallAgentToolCallShadowed(content, segmentStart - 1) &&\n isReconnectSummarizablePart(content[segmentStart - 1]!)\n ) {\n segmentStart--;\n }\n\n let segmentEnd = index + 1;\n while (\n segmentEnd < startIndex &&\n !isCallAgentToolCallShadowed(content, segmentEnd) &&\n isReconnectSummarizablePart(content[segmentEnd]!)\n ) {\n segmentEnd++;\n }\n\n return content\n .slice(segmentStart, segmentEnd)\n .some((candidate) => candidate.type === \"tool-call\");\n}\n\n// ─── Reasoning / Thinking cell ────────────────────────────────────────────────\n\n/**\n * Completed reasoning and tool calls share one outer \"Worked for…\"\n * disclosure. Reasoning cells inside it render their prose directly so\n * opening that summary never reveals a redundant second disclosure.\n */\nconst WorkSummaryContentContext = React.createContext(false);\n\nexport function ReasoningCell({\n text,\n isStreaming = false,\n resetKey,\n defaultOpen,\n autoCollapse = false,\n collapseWhenReplaced = false,\n durationMs,\n}: {\n text: string;\n isStreaming?: boolean;\n /** Stable identity used to restart the reveal when a new reasoning part mounts. */\n resetKey?: string;\n defaultOpen?: boolean;\n /** Animate closed when a live reasoning segment finishes during a run. */\n autoCollapse?: boolean;\n /** Animate closed when a newer reasoning segment replaces this one. */\n collapseWhenReplaced?: boolean;\n /**\n * Elapsed thinking time in ms, once known. Only meaningful once streaming\n * has finished — callers that track live timing (see ReasoningMessagePart)\n * pass this so the label can read \"Thought for Xs\" instead of \"Thought\".\n * Historical messages with no live timing simply omit it.\n */\n durationMs?: number | null;\n}) {\n const embeddedInWorkSummary = React.useContext(WorkSummaryContentContext);\n const [open, setOpen] = useState(defaultOpen ?? true);\n const wasStreamingRef = useRef(isStreaming);\n const wasReplacedRef = useRef(collapseWhenReplaced);\n const trimmed = text.trim();\n const visibleText = useSmoothStreamingText(\n trimmed,\n isStreaming,\n resetKey ?? \"reasoning\",\n );\n\n useEffect(() => {\n if (autoCollapse && wasStreamingRef.current && !isStreaming) {\n setOpen(false);\n }\n wasStreamingRef.current = isStreaming;\n }, [autoCollapse, isStreaming]);\n\n useEffect(() => {\n if (collapseWhenReplaced && !wasReplacedRef.current) {\n setOpen(false);\n }\n wasReplacedRef.current = collapseWhenReplaced;\n }, [collapseWhenReplaced]);\n\n if (!trimmed && !isStreaming) return null;\n\n if (embeddedInWorkSummary) {\n return (\n <div className=\"pb-1 pl-5 text-[13px] leading-relaxed text-muted-foreground whitespace-pre-wrap\">\n {visibleText || (isStreaming ? \"…\" : \"\")}\n </div>\n );\n }\n\n const label = isStreaming\n ? \"Thinking\"\n : durationMs != null\n ? `Thought for ${formatWorkedDuration(durationMs)}`\n : \"Thought\";\n // Only clamp to a scroll-free \"tail\" view while actively streaming and\n // expanded — once the run finishes the full text is shown, unclamped.\n const showTail = isStreaming && open;\n\n return (\n <div className=\"my-0.5 w-full\">\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n aria-expanded={open}\n className=\"flex items-center gap-1.5 py-0.5 text-[13px] text-muted-foreground transition-colors hover:text-foreground\"\n >\n <IconChevronRight\n className={cn(\n \"size-3.5 shrink-0 transition-transform\",\n open && \"rotate-90\",\n )}\n />\n {isStreaming ? (\n <span className=\"agent-thinking-indicator__text\">{label}</span>\n ) : (\n <span>{label}</span>\n )}\n </button>\n <AnimatedCollapse open={open}>\n <div className={cn(\"pl-5 pb-1\", showTail && \"reasoning-cell-tail\")}>\n <div className=\"text-[13px] leading-relaxed text-muted-foreground whitespace-pre-wrap\">\n {visibleText || (isStreaming ? \"…\" : \"\")}\n </div>\n </div>\n </AnimatedCollapse>\n </div>\n );\n}\n\n// ─── Worked-for duration helpers ──────────────────────────────────────────────\n\nexport function formatWorkedDuration(ms: number): string {\n const totalSeconds = Math.max(0, Math.round(ms / 1000));\n if (totalSeconds < 60) {\n return totalSeconds <= 1 ? \"1s\" : `${totalSeconds}s`;\n }\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n if (minutes < 60) {\n if (seconds === 0) return `${minutes}m`;\n return `${minutes}m ${seconds}s`;\n }\n const hours = Math.floor(minutes / 60);\n const remMinutes = minutes % 60;\n if (remMinutes === 0) return `${hours}h`;\n return `${hours}h ${remMinutes}m`;\n}\n\nexport function WorkedForSummary({\n durationMs,\n defaultOpen = false,\n autoCollapse = false,\n children,\n}: {\n durationMs?: number | null;\n /** Keep completed work visible when the turn contains interactive UI. */\n defaultOpen?: boolean;\n /** When true, close the summary after a run has completed. */\n autoCollapse?: boolean;\n children: React.ReactNode;\n}) {\n // Ordinary completed work starts closed so a remount never flashes details\n // while auto-collapse settles. Interactive UI opts into an open summary.\n const [open, setOpen] = useState(defaultOpen);\n\n useEffect(() => {\n if (defaultOpen) {\n setOpen(true);\n } else if (autoCollapse) {\n setOpen(false);\n }\n }, [autoCollapse, defaultOpen]);\n\n const label =\n durationMs != null && durationMs >= 1000\n ? `Worked for ${formatWorkedDuration(durationMs)}`\n : \"Worked\";\n\n return (\n <div className=\"my-1 w-full\">\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n aria-expanded={open}\n className=\"flex items-center gap-1.5 py-0.5 text-[13px] text-muted-foreground transition-colors hover:text-foreground\"\n >\n <span>{label}</span>\n <IconChevronRight\n className={cn(\n \"size-3.5 shrink-0 transition-transform\",\n open && \"rotate-90\",\n )}\n />\n </button>\n <AnimatedCollapse open={open}>\n <WorkSummaryContentContext.Provider value>\n <div className=\"pt-1\">{children}</div>\n </WorkSummaryContentContext.Provider>\n </AnimatedCollapse>\n </div>\n );\n}\n\nexport function RanToolsSummary({\n toolCount,\n children,\n}: {\n toolCount: number;\n children: React.ReactNode;\n}) {\n const [open, setOpen] = useState(false);\n const label = `Ran ${toolCount} ${toolCount === 1 ? \"tool\" : \"tools\"}`;\n\n return (\n <div className=\"my-1 w-full\">\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n aria-expanded={open}\n className=\"flex items-center gap-1.5 py-0.5 text-[13px] text-muted-foreground transition-colors hover:text-foreground\"\n >\n <span>{label}</span>\n <IconChevronRight\n className={cn(\n \"size-3.5 shrink-0 transition-transform\",\n open && \"rotate-90\",\n )}\n />\n </button>\n <AnimatedCollapse open={open}>\n <div className=\"pt-1\">{children}</div>\n </AnimatedCollapse>\n </div>\n );\n}\n\n// ─── Re-export for AssistantMessage ───────────────────────────────────────────\n// AssistantMessage in AssistantChat.tsx uses FilesChangedSummary directly, so\n// re-export it so AssistantChat.tsx can import from one place.\nexport { FilesChangedSummary };\n"]}
1
+ {"version":3,"file":"tool-call-display.js","sourceRoot":"","sources":["../../../src/client/chat/tool-call-display.tsx"],"names":[],"mappings":"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","sourcesContent":["// Owns: tool-payload formatting helpers, ToolCallDisplay, ToolCallFallback,\n// and ReconnectStreamMessage used by AssistantChat.\n\nimport type { ToolCallMessagePartProps } from \"@assistant-ui/react\";\nimport {\n IconLoader2,\n IconCircleX,\n IconCheck,\n IconChevronRight,\n IconCopy,\n IconCode,\n IconBrandSlack,\n IconTerminal2,\n IconDatabase,\n IconSearch,\n IconFileCode,\n IconShieldCheck,\n IconX,\n} from \"@tabler/icons-react\";\nimport React, {\n useState,\n useEffect,\n useCallback,\n useLayoutEffect,\n useRef,\n} from \"react\";\n\nimport type {\n A2AAgentActivitySnapshot,\n A2AAgentActivityToolCall,\n} from \"../../a2a/activity.js\";\nimport type { ActionChatUIConfig } from \"../../action-ui.js\";\nimport type { AgentMcpAppPayload } from \"../../mcp-client/app-result.js\";\nimport { AgentTaskCard } from \"../AgentTaskCard.js\";\nimport { writeClipboardText } from \"../clipboard.js\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover.js\";\nimport { ConnectBuilderCard } from \"../ConnectBuilderCard.js\";\nimport { useT } from \"../i18n.js\";\nimport { McpAppRenderer } from \"../mcp-apps/McpAppRenderer.js\";\nimport type { AgentCallProgress, ContentPart } from \"../sse-event-processor.js\";\nimport {\n BashCell,\n EditCell,\n WriteCell,\n FilesChangedSummary,\n} from \"../tool-cells/index.js\";\nimport {\n humanizeToolName,\n isCallAgentToolCallShadowed,\n} from \"../tool-display.js\";\nimport { cn } from \"../utils.js\";\nimport { ActionChatUiSurface } from \"./action-chat-ui-surface.js\";\nimport {\n SmoothMarkdownText,\n HighlightedCodeBlock,\n useSmoothStreamingText,\n} from \"./markdown-renderer.js\";\nimport { resolveToolRenderer } from \"./tool-render-registry.js\";\nimport {\n isBuiltinDataWidgetActionRenderer,\n resolveBuiltinActionChatRenderer,\n resolveBuiltinFallbackToolRenderer,\n} from \"./widgets/builtin-tool-renderers.js\";\n\n// Exported so AssistantChatInner can provide a context value.\nexport const ChatRunningContext = React.createContext(false);\nexport const ChatRunDurationContext = React.createContext<number | null>(null);\nexport const ASSISTANT_VISIBLE_TOOL_CALL_LIMIT = 3;\n\n/**\n * Human-in-the-loop approval bridge. `AssistantChatInner` provides a value that\n * re-issues the turn approving a specific paused tool call (opt-in\n * `needsApproval` actions). When null, the Approve button is not rendered.\n * Deny defaults to local-only (the action stays un-run) unless `onDeny` is\n * provided, and \"Always allow\" only renders when `onAlwaysAllow` is provided\n * — both are additive so existing action-approval consumers are unaffected.\n */\nexport type ApprovalContextValue = {\n /** Re-issue the turn so the server runs the approved call. */\n onApprove: (approvalKey: string) => void;\n /**\n * Optional host hook invoked in addition to the local \"denied\" state, e.g.\n * so a Code session can also resolve its own pending approval as denied.\n */\n onDeny?: (approvalKey: string) => void;\n /**\n * Optional host hook that persists this exact call so future occurrences\n * skip the approval gate. When absent, no \"Always allow\" button renders.\n */\n onAlwaysAllow?: (approvalKey: string) => void;\n};\nexport const ApprovalContext = React.createContext<ApprovalContextValue | null>(\n null,\n);\n\nexport const TOOL_LONG_RUNNING_HINT_DELAY_MS = 45_000;\n\nexport function ToolActivityPresentation({\n toolName,\n isRunning,\n isActiveTail,\n suppressLongRunningHint = false,\n children,\n}: {\n toolName: string;\n isRunning: boolean;\n isActiveTail: boolean;\n suppressLongRunningHint?: boolean;\n children: React.ReactNode;\n}) {\n const [showLongRunningHint, setShowLongRunningHint] = useState(false);\n // A batched update can first reveal a tool with its result already attached.\n // Presentation follows the active chat tail rather than execution state so\n // that newly revealed completed tools still get their entrance motion.\n const [animateEntry] = useState(isActiveTail);\n\n useEffect(() => {\n if (!isRunning || suppressLongRunningHint) {\n setShowLongRunningHint(false);\n return;\n }\n setShowLongRunningHint(false);\n const timeout = window.setTimeout(() => {\n setShowLongRunningHint(true);\n }, TOOL_LONG_RUNNING_HINT_DELAY_MS);\n return () => window.clearTimeout(timeout);\n }, [isRunning, suppressLongRunningHint, toolName]);\n\n return (\n <div\n className={cn(\n \"agent-tool-call\",\n animateEntry && \"agent-tool-call--entering\",\n )}\n data-running={isRunning ? \"true\" : undefined}\n >\n {children}\n {isRunning && showLongRunningHint && (\n <div className=\"mt-0.5 px-2.5 pb-2 text-[11px] leading-snug text-muted-foreground/80\">\n Still working. Large updates can take a minute or two.\n </div>\n )}\n </div>\n );\n}\n\n// ─── Tool-payload formatting ──────────────────────────────────────────────────\n\ntype ToolDetailSection = \"input\" | \"result\";\nexport type ToolDetailPayload = {\n section: ToolDetailSection;\n title: string;\n text: string;\n copyText: string;\n lang: string;\n};\n\nfunction stringifyToolValue(value: unknown, pretty = false): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value, null, pretty ? 2 : 0);\n } catch {\n return String(value ?? \"\");\n }\n}\n\nfunction looksLikeSql(text: string): boolean {\n return /^\\s*(select|with|insert|update|delete|merge|create|alter|drop|explain|declare|begin)\\b/i.test(\n text,\n );\n}\n\nfunction parseJsonText(text: string): unknown | null {\n const trimmed = text.trim();\n if (!trimmed || !/^[{[]/.test(trimmed)) return null;\n try {\n return JSON.parse(trimmed);\n } catch {\n return null;\n }\n}\n\nfunction inferToolTextLanguage(\n text: string,\n key?: string,\n toolName?: string,\n): string {\n const keyName = (key ?? \"\").toLowerCase();\n const tool = (toolName ?? \"\").toLowerCase();\n if (\n keyName === \"code\" &&\n (tool.includes(\"run-code\") || tool.includes(\"run_code\"))\n ) {\n return \"javascript\";\n }\n if (\n keyName === \"sql\" ||\n keyName.endsWith(\"sql\") ||\n keyName === \"query\" ||\n tool.includes(\"bigquery\") ||\n tool.includes(\"db-query\") ||\n looksLikeSql(text)\n ) {\n return \"sql\";\n }\n return parseJsonText(text) ? \"json\" : \"text\";\n}\n\nfunction formatToolTextValue(\n value: unknown,\n key?: string,\n toolName?: string,\n): { text: string; lang: string } {\n if (typeof value === \"string\") {\n const parsed = parseJsonText(value);\n if (parsed) {\n return { text: JSON.stringify(parsed, null, 2), lang: \"json\" };\n }\n return {\n text: value,\n lang: inferToolTextLanguage(value, key, toolName),\n };\n }\n return { text: stringifyToolValue(value, true), lang: \"json\" };\n}\n\nexport function toolInputPayload(\n toolName: string,\n args: Record<string, unknown>,\n): ToolDetailPayload | null {\n const entries = Object.entries(args);\n if (entries.length === 0) return null;\n if (entries.length === 1) {\n const [key, value] = entries[0]!;\n const formatted = formatToolTextValue(value, key, toolName);\n const normalizedKey = key.toLowerCase();\n const keyLabel =\n normalizedKey === \"sql\" || normalizedKey.endsWith(\"sql\") ? \"SQL\" : key;\n return {\n section: \"input\",\n title: `Input - ${keyLabel}`,\n text: formatted.text,\n copyText:\n typeof value === \"string\" ? value : stringifyToolValue(value, true),\n lang: formatted.lang,\n };\n }\n return {\n section: \"input\",\n title: \"Input\",\n text: JSON.stringify(args, null, 2),\n copyText: JSON.stringify(args, null, 2),\n lang: \"json\",\n };\n}\n\nexport function toolResultPayload(\n result: string | undefined,\n): ToolDetailPayload | null {\n if (result === undefined) return null;\n const formatted = formatToolTextValue(result);\n return {\n section: \"result\",\n title: \"Result\",\n text: formatted.text,\n copyText: result,\n lang: formatted.lang,\n };\n}\n\n// ─── Tool icon helpers ────────────────────────────────────────────────────────\n\ntype ToolIconComponent = React.ComponentType<{\n className?: string;\n size?: number | string;\n}>;\n\nfunction resolveToolIcon(toolName: string): ToolIconComponent {\n const name = toolName.toLowerCase();\n if (name.includes(\"slack\")) return IconBrandSlack;\n if (\n name.includes(\"bash\") ||\n name.includes(\"shell\") ||\n name.includes(\"terminal\") ||\n name.includes(\"run-code\") ||\n name.includes(\"exec\")\n ) {\n return IconTerminal2;\n }\n if (\n name.includes(\"sql\") ||\n name.includes(\"bigquery\") ||\n name.includes(\"db-query\") ||\n name.includes(\"query\")\n ) {\n return IconDatabase;\n }\n if (\n name.includes(\"search\") ||\n name.includes(\"find\") ||\n name.includes(\"grep\")\n ) {\n return IconSearch;\n }\n if (\n name.includes(\"file\") ||\n name.includes(\"read\") ||\n name.includes(\"write\") ||\n name.includes(\"edit\")\n ) {\n return IconFileCode;\n }\n return IconCode;\n}\n\n// ─── Simple code viewer (Codex-style gray box) ────────────────────────────────\n\nfunction SimpleCodeViewer({\n text,\n lang,\n className,\n maxHeightClass = \"max-h-56\",\n}: {\n text: string;\n lang: string;\n className?: string;\n maxHeightClass?: string;\n}) {\n return (\n <div\n className={cn(\n \"agent-tool-code overflow-auto rounded-md bg-muted/70 font-mono text-[11px] leading-relaxed text-foreground\",\n maxHeightClass,\n className,\n )}\n >\n {lang !== \"text\" && (\n <div className=\"sticky top-0 z-[1] flex items-center justify-between border-b border-border/40 bg-muted/90 px-2.5 py-1\">\n <span className=\"font-mono text-[10px] uppercase tracking-wide text-muted-foreground/80\">\n {lang}\n </span>\n </div>\n )}\n <HighlightedCodeBlock code={text} lang={lang} />\n </div>\n );\n}\n\nfunction ToolOutputPopover({\n open,\n onOpenChange,\n title,\n payload,\n children,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n payload: ToolDetailPayload;\n children: React.ReactNode;\n}) {\n const [copied, setCopied] = useState(false);\n const copyResetRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (copyResetRef.current) clearTimeout(copyResetRef.current);\n };\n }, []);\n\n const copyValue = useCallback(async () => {\n try {\n if (await writeClipboardText(payload.copyText)) {\n setCopied(true);\n if (copyResetRef.current) clearTimeout(copyResetRef.current);\n copyResetRef.current = setTimeout(() => setCopied(false), 1200);\n }\n } catch {\n // Clipboard failures should not interrupt chat rendering.\n }\n }, [payload.copyText]);\n\n return (\n <Popover open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>{children}</PopoverTrigger>\n <PopoverContent\n align=\"start\"\n side=\"bottom\"\n sideOffset={6}\n collisionPadding={12}\n className=\"flex max-h-[min(calc(100vh-2rem),var(--radix-popover-content-available-height,75vh))] w-[min(calc(100vw-2rem),var(--radix-popover-content-available-width,760px),760px)] flex-col gap-0 overflow-hidden p-0\"\n >\n <div className=\"flex shrink-0 items-center justify-between gap-3 border-b border-border px-4 py-3\">\n <div className=\"truncate text-sm font-medium\">{title}</div>\n <button\n type=\"button\"\n onClick={copyValue}\n className=\"inline-flex h-7 items-center gap-1.5 rounded-md px-2 text-xs text-muted-foreground hover:bg-accent hover:text-foreground\"\n >\n {copied ? <IconCheck size={13} /> : <IconCopy size={13} />}\n {copied ? \"Copied\" : \"Copy\"}\n </button>\n </div>\n <div className=\"min-h-0 flex-1 overflow-hidden p-3\">\n <SimpleCodeViewer\n text={payload.text}\n lang={payload.lang}\n maxHeightClass=\"max-h-[min(70vh,calc(var(--radix-popover-content-available-height,75vh)-4.5rem))]\"\n />\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\n// ─── Collapsible height animation ─────────────────────────────────────────────\n\nexport function AnimatedCollapse({\n open,\n children,\n}: {\n open: boolean;\n children: React.ReactNode;\n}) {\n const [mounted, setMounted] = useState(open);\n\n useLayoutEffect(() => {\n if (open) setMounted(true);\n }, [open]);\n\n const onTransitionEnd = useCallback(\n (event: React.TransitionEvent<HTMLDivElement>) => {\n if (event.propertyName !== \"grid-template-rows\" || open) return;\n setMounted(false);\n },\n [open],\n );\n\n if (!mounted) return null;\n\n return (\n <div\n className=\"agent-chat-collapse\"\n data-state={open ? \"open\" : \"closed\"}\n aria-hidden={!open}\n onTransitionEnd={onTransitionEnd}\n >\n <div className=\"agent-chat-collapse__content\">{children}</div>\n </div>\n );\n}\n\n// ─── Human-in-the-loop approval affordance ────────────────────────────────────\n\n/**\n * Inline Approve/Deny prompt rendered when a `needsApproval` action paused the\n * turn. Approve re-issues the turn with the call's `approvalKey`; Deny dismisses\n * the prompt locally (the action stays un-run).\n */\nfunction ApprovalAffordance({\n toolName,\n approval,\n}: {\n toolName: string;\n approval: { approvalKey: string; dismissed?: boolean };\n}) {\n const ctx = React.useContext(ApprovalContext);\n const [approved, setApproved] = useState(false);\n const [denied, setDenied] = useState(false);\n\n // Once approved, the turn is re-issued; collapse to a quiet note so the user\n // can't double-fire the approval.\n if (approved) {\n return (\n <div className=\"mt-1.5 text-xs text-muted-foreground\">\n Approved. Re-running {toolName}...\n </div>\n );\n }\n // Deny defaults to local-only (the action simply stays un-run). When the\n // host also provided `onDeny` (e.g. a Code session resolving its own\n // pending approval), it fires alongside the local state.\n if (denied) {\n return (\n <div className=\"mt-1.5 text-xs text-muted-foreground\">\n Denied. {toolName} did not run.\n </div>\n );\n }\n return (\n <div className=\"mt-1.5 flex items-center gap-2 rounded-md border border-border bg-muted/40 px-2.5 py-1.5\">\n <IconShieldCheck className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n <span className=\"mr-auto text-xs text-muted-foreground\">\n Approve to run {toolName}?\n </span>\n {ctx && (\n <button\n type=\"button\"\n onClick={() => {\n setApproved(true);\n ctx.onApprove(approval.approvalKey);\n }}\n className={cn(\n \"inline-flex items-center gap-1 rounded-md px-2.5 py-1 text-xs font-medium transition-colors\",\n \"bg-foreground text-background hover:bg-foreground/90\",\n )}\n >\n <IconCheck className=\"h-3.5 w-3.5\" />\n Approve\n </button>\n )}\n {ctx?.onAlwaysAllow && (\n <button\n type=\"button\"\n onClick={() => {\n setApproved(true);\n ctx.onAlwaysAllow?.(approval.approvalKey);\n }}\n title=\"Approve and always allow this exact command\"\n className={cn(\n \"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1 text-xs font-medium transition-colors\",\n \"text-foreground hover:bg-muted\",\n )}\n >\n <IconShieldCheck className=\"h-3.5 w-3.5\" />\n Always allow\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => {\n setDenied(true);\n ctx?.onDeny?.(approval.approvalKey);\n }}\n className={cn(\n \"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1 text-xs font-medium transition-colors\",\n \"text-foreground hover:bg-muted\",\n )}\n >\n <IconX className=\"h-3.5 w-3.5\" />\n Deny\n </button>\n </div>\n );\n}\n\n// ─── ToolCallDisplay ──────────────────────────────────────────────────────────\n\nexport function ToolCallDisplay({\n toolName,\n argsText,\n args,\n result,\n mcpApp,\n chatUI,\n isRunning,\n structuredMeta,\n approval,\n repeatCount,\n isLatestRunning = isRunning,\n isActiveTail,\n}: {\n toolName: string;\n argsText?: string;\n args: Record<string, unknown>;\n result?: string;\n mcpApp?: AgentMcpAppPayload;\n chatUI?: ActionChatUIConfig;\n isRunning: boolean;\n structuredMeta?: Record<string, unknown>;\n approval?: { approvalKey: string; dismissed?: boolean };\n repeatCount?: number;\n /** The latest tool shown while the overall chat turn is still active. */\n isActiveTail?: boolean;\n /** @deprecated Use isActiveTail. */\n isLatestRunning?: boolean;\n}) {\n const showActiveTail = isActiveTail ?? isLatestRunning;\n // Delegate to bespoke cells when structured metadata is present.\n // These must be separate components so hook order in ToolCallDisplayGeneric\n // is always stable (no conditional hook calls).\n const toolKind = structuredMeta?.toolKind as string | undefined;\n const wrapToolDisplay = (children: React.ReactNode) => (\n <ToolActivityPresentation\n toolName={toolName}\n isRunning={isRunning}\n isActiveTail={showActiveTail}\n suppressLongRunningHint={\n toolName === \"call-agent\" || toolName.startsWith(\"agent:\")\n }\n >\n {children}\n </ToolActivityPresentation>\n );\n if (toolKind === \"bash\") {\n return wrapToolDisplay(\n <BashCell\n meta={\n structuredMeta as unknown as Parameters<typeof BashCell>[0][\"meta\"]\n }\n output={result}\n isRunning={isRunning}\n />,\n );\n }\n if (toolKind === \"edit\") {\n return wrapToolDisplay(\n <EditCell\n meta={\n structuredMeta as unknown as Parameters<typeof EditCell>[0][\"meta\"]\n }\n isRunning={isRunning}\n />,\n );\n }\n if (toolKind === \"write\") {\n return wrapToolDisplay(\n <WriteCell\n meta={\n structuredMeta as unknown as Parameters<typeof WriteCell>[0][\"meta\"]\n }\n isRunning={isRunning}\n />,\n );\n }\n return wrapToolDisplay(\n <ToolCallDisplayGeneric\n toolName={toolName}\n argsText={argsText}\n args={args}\n result={result}\n mcpApp={mcpApp}\n chatUI={chatUI}\n isRunning={isRunning}\n isActiveTail={showActiveTail}\n structuredMeta={structuredMeta}\n approval={approval}\n repeatCount={repeatCount}\n />,\n );\n}\n\nfunction ToolCallDisplayGeneric({\n toolName,\n argsText,\n args,\n result,\n mcpApp,\n chatUI,\n isRunning,\n isActiveTail,\n structuredMeta,\n approval,\n repeatCount,\n}: {\n toolName: string;\n argsText?: string;\n args: Record<string, unknown>;\n result?: string;\n mcpApp?: AgentMcpAppPayload;\n chatUI?: ActionChatUIConfig;\n isRunning: boolean;\n isActiveTail: boolean;\n structuredMeta?: Record<string, unknown>;\n approval?: { approvalKey: string; dismissed?: boolean };\n repeatCount?: number;\n}) {\n const isRawCallAgent = toolName === \"call-agent\";\n const isAgentCall = toolName.startsWith(\"agent:\") || isRawCallAgent;\n const [expanded, setExpanded] = useState(isAgentCall);\n const [outputOpen, setOutputOpen] = useState(false);\n const agentName = toolName.startsWith(\"agent:\")\n ? toolName.slice(6)\n : typeof args.agent === \"string\"\n ? args.agent\n : null;\n const isAgentError = isAgentCall && result === \"Error calling agent\";\n const agentStreamText = isRawCallAgent\n ? (result ?? \"\")\n : isAgentCall\n ? (argsText ?? \"\")\n : \"\";\n const agentActivity = structuredMeta?.agentActivity as\n | A2AAgentActivitySnapshot\n | undefined;\n const agentProgress = structuredMeta?.agentProgress as\n | AgentCallProgress\n | undefined;\n const hasStreamText = agentStreamText.length > 0;\n const hasArgs = !isAgentCall && Object.keys(args).length > 0;\n\n // Render connect-builder as ConnectBuilderCard once the result is available\n if (toolName === \"connect-builder\" && result) {\n try {\n const parsed = JSON.parse(result);\n if (parsed?.kind === \"connect-builder-card\") {\n return (\n <ConnectBuilderCard\n configured={!!parsed.configured}\n builderEnabled={parsed.builderEnabled !== false}\n // Ignore saved cliAuthUrl values from older tool results. They\n // contain signed callback state and can expire while a chat sits\n // open; the card's hook fetches a fresh signed URL on mount/click.\n connectUrl={parsed.connectUrl || \"\"}\n orgName={parsed.orgName ?? null}\n prompt={typeof parsed.prompt === \"string\" ? parsed.prompt : \"\"}\n />\n );\n }\n } catch {\n // fall through to default pill rendering\n }\n }\n\n // Render agent-teams spawn as AgentTaskCard once the result is available\n if (\n toolName === \"agent-teams\" &&\n (args as Record<string, string>)?.action === \"spawn\" &&\n result\n ) {\n try {\n const parsed = JSON.parse(result);\n if (parsed.taskId && parsed.threadId) {\n return (\n <AgentTaskCard\n taskId={parsed.taskId}\n threadId={parsed.threadId}\n description={\n parsed.description ||\n (args as Record<string, string>)?.task ||\n \"Sub-agent task\"\n }\n onOpen={(tid) => {\n window.dispatchEvent(\n new CustomEvent(\"agent-task-open\", {\n detail: {\n threadId: tid,\n description:\n parsed.description ||\n (args as Record<string, string>)?.task ||\n \"\",\n name: parsed.name || \"\",\n },\n }),\n );\n }}\n />\n );\n }\n } catch {\n // Fall through to default pill rendering\n }\n }\n\n const parsedResult = result ? parseJsonText(result) : null;\n const nativeToolContext = {\n toolName,\n args,\n resultText: result,\n resultJson: parsedResult,\n isRunning,\n isActiveTail,\n chatUI,\n };\n const skipRegistryRenderer =\n !isAgentCall && isBuiltinDataWidgetActionRenderer(nativeToolContext);\n const NativeToolRenderer = isAgentCall\n ? null\n : (resolveBuiltinActionChatRenderer(nativeToolContext) ??\n (skipRegistryRenderer ? null : resolveToolRenderer(nativeToolContext)) ??\n resolveBuiltinFallbackToolRenderer(nativeToolContext));\n if (NativeToolRenderer) {\n return (\n <ActionChatUiSurface\n context={nativeToolContext}\n isBuiltinDataWidget={isBuiltinDataWidgetActionRenderer(\n nativeToolContext,\n )}\n >\n <NativeToolRenderer context={nativeToolContext} />\n </ActionChatUiSurface>\n );\n }\n\n const inputPayload = hasArgs ? toolInputPayload(toolName, args) : null;\n const resultPayload = toolResultPayload(result);\n\n const displayName = isAgentCall\n ? isRunning\n ? `Asking ${agentName}...`\n : isAgentError\n ? `Error asking ${agentName}`\n : `Asked ${agentName}`\n : humanizeToolName(toolName);\n\n const canExpand = isAgentCall\n ? hasStreamText\n : hasArgs || result !== undefined;\n const isExpanded = isAgentCall ? hasStreamText && expanded : expanded;\n const ToolIcon = resolveToolIcon(toolName);\n const outputTitle = `Raw ${toolName} tool call output`;\n\n if (isAgentCall) {\n return (\n <AgentCallCell\n agentName={agentName ?? \"agent\"}\n activity={agentActivity}\n progress={agentProgress}\n responseText={agentStreamText}\n isRunning={isRunning}\n isError={isAgentError}\n durationMs={\n typeof structuredMeta?.agentDurationMs === \"number\"\n ? structuredMeta.agentDurationMs\n : agentActivity?.durationMs\n }\n />\n );\n }\n\n return (\n <div className=\"group/tool my-0.5 w-full overflow-hidden\">\n {mcpApp && <McpAppRenderer app={mcpApp} className=\"mb-1.5\" />}\n <button\n type=\"button\"\n onClick={() => canExpand && setExpanded(!isExpanded)}\n aria-expanded={canExpand ? isExpanded : undefined}\n className={cn(\n \"flex w-full items-center gap-1.5 rounded-md py-0.5 text-left text-[13px] text-muted-foreground transition-colors\",\n canExpand && \"hover:text-foreground\",\n isRunning && \"text-muted-foreground\",\n )}\n >\n <span className=\"relative flex size-4 shrink-0 items-center justify-center\">\n {isRunning ? (\n <IconLoader2 className=\"size-3.5 animate-spin\" />\n ) : isAgentError ? (\n <IconCircleX className=\"size-3.5 text-destructive\" />\n ) : (\n <>\n <ToolIcon\n className={cn(\n \"size-3.5 transition-opacity\",\n canExpand && \"group-hover/tool:opacity-0\",\n )}\n />\n {canExpand && (\n <IconChevronRight\n className={cn(\n \"absolute size-3.5 opacity-0 transition-[opacity,transform] group-hover/tool:opacity-100\",\n isExpanded && \"rotate-90\",\n )}\n />\n )}\n </>\n )}\n </span>\n <span\n className={cn(\n \"min-w-0 truncate font-normal\",\n isActiveTail && \"agent-running-shimmer\",\n )}\n >\n {displayName}\n </span>\n {repeatCount && repeatCount > 1 && (\n <span\n className=\"shrink-0 rounded border border-border/60 px-1.5 py-0.5 text-[10px] leading-none text-muted-foreground\"\n title={`Repeated ${repeatCount} times`}\n >\n {repeatCount}x\n </span>\n )}\n </button>\n <AnimatedCollapse\n open={isExpanded && !isAgentCall && (hasArgs || result !== undefined)}\n >\n <div className=\"mt-1 space-y-2 pl-5\">\n {inputPayload && (\n <SimpleCodeViewer\n text={inputPayload.text}\n lang={inputPayload.lang}\n />\n )}\n {resultPayload && (\n <ToolOutputPopover\n open={outputOpen}\n onOpenChange={setOutputOpen}\n title={outputTitle}\n payload={resultPayload}\n >\n <button\n type=\"button\"\n aria-label={`View ${toolName} output`}\n className=\"inline-flex size-6 items-center justify-center rounded-md text-muted-foreground/70 transition-colors hover:bg-accent hover:text-foreground\"\n >\n <IconCode className=\"size-3.5\" />\n </button>\n </ToolOutputPopover>\n )}\n </div>\n </AnimatedCollapse>\n {approval && (\n <ApprovalAffordance toolName={toolName} approval={approval} />\n )}\n </div>\n );\n}\n\nfunction AgentCallCell({\n agentName,\n activity,\n progress,\n responseText,\n isRunning,\n isError,\n durationMs,\n}: {\n agentName: string;\n activity?: A2AAgentActivitySnapshot;\n progress?: AgentCallProgress;\n responseText: string;\n isRunning: boolean;\n isError: boolean;\n durationMs?: number;\n}) {\n const t = useT();\n const [open, setOpen] = useState(true);\n const finalText = isRunning\n ? activity?.responseText || responseText\n : responseText || activity?.responseText;\n const work = activity?.reasoning?.length || activity?.toolCalls?.length;\n const workItemCount = Math.max(\n activity?.reasoning?.length ?? 0,\n activity?.toolCalls?.length ?? 0,\n );\n const label = isRunning\n ? t(\"agentPanel.delegatedAgent.asking\", { name: agentName })\n : isError\n ? t(\"agentPanel.delegatedAgent.error\", { name: agentName })\n : t(\"agentPanel.delegatedAgent.asked\", { name: agentName });\n const workContent = work ? (\n <div className=\"space-y-1 ps-5\">\n {Array.from({ length: workItemCount }, (_, index) => {\n const reasoningText = activity?.reasoning?.[index];\n const tool = activity?.toolCalls?.[index];\n return (\n <React.Fragment key={`activity-${index}`}>\n {reasoningText && (\n <ReasoningCell\n text={reasoningText}\n isStreaming={\n isRunning &&\n activity.activePhase === \"reasoning\" &&\n index === activity.reasoning.length - 1\n }\n defaultOpen={index === activity.reasoning.length - 1}\n collapseWhenReplaced={index < activity.toolCalls.length}\n />\n )}\n {tool && (\n <AgentActivityToolCallRow\n tool={tool}\n isActiveTail={\n isRunning && index === activity.toolCalls.length - 1\n }\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n ) : null;\n const progressState = progress?.state.replaceAll(/[-_]+/g, \" \");\n const progressText =\n isRunning && !activity && progress && progressState\n ? [\n progressState.charAt(0).toUpperCase() + progressState.slice(1),\n t(\"agentPanel.delegatedAgent.elapsed\", {\n duration: formatWorkedDuration(progress.elapsedSeconds * 1000),\n }),\n progress.detail,\n ]\n .filter(Boolean)\n .join(\" · \")\n : null;\n return (\n <div className=\"group/tool my-0.5 w-full\">\n <button\n type=\"button\"\n onClick={() => setOpen((value) => !value)}\n aria-expanded={open}\n className=\"flex w-full items-center gap-1.5 rounded-md py-0.5 text-left text-[13px] text-muted-foreground transition-colors hover:text-foreground\"\n >\n {isRunning ? (\n <IconLoader2 className=\"size-3.5 animate-spin\" />\n ) : isError ? (\n <IconCircleX className=\"size-3.5 text-destructive\" />\n ) : (\n <IconChevronRight\n className={cn(\"size-3.5 transition-transform\", open && \"rotate-90\")}\n />\n )}\n <span\n className={cn(\n \"min-w-0 truncate font-normal\",\n isRunning && \"agent-running-shimmer\",\n )}\n >\n {label}\n </span>\n </button>\n <AnimatedCollapse open={open}>\n <div className=\"ms-1 border-s border-border/50 ps-2 pt-1\">\n {workContent &&\n (isRunning ? (\n workContent\n ) : (\n <WorkedForSummary durationMs={durationMs}>\n {workContent}\n </WorkedForSummary>\n ))}\n {progressText && (\n <p\n className=\"ps-5 pb-1 text-xs text-muted-foreground\"\n data-testid=\"agent-call-progress\"\n aria-live=\"polite\"\n >\n {progressText}\n </p>\n )}\n {finalText && (\n <div className=\"ps-5 pb-1\">\n <SmoothMarkdownText\n text={finalText}\n streaming={isRunning}\n resetKey={`agent-response-${agentName}`}\n statusType={isRunning ? \"running\" : \"complete\"}\n />\n </div>\n )}\n </div>\n </AnimatedCollapse>\n </div>\n );\n}\n\nfunction AgentActivityToolCallRow({\n tool,\n isActiveTail,\n}: {\n tool: A2AAgentActivityToolCall;\n isActiveTail: boolean;\n}) {\n const isRunning = tool.status === \"running\";\n const ToolIcon = resolveToolIcon(tool.name);\n\n return (\n <ToolActivityPresentation\n toolName={tool.name}\n isRunning={isRunning}\n isActiveTail={isActiveTail}\n suppressLongRunningHint\n >\n <div className=\"my-0.5 flex w-full items-center gap-1.5 rounded-md py-0.5 text-left text-[13px] text-muted-foreground\">\n <span className=\"flex size-4 shrink-0 items-center justify-center\">\n {isRunning ? (\n <IconLoader2 className=\"size-3.5 animate-spin\" />\n ) : (\n <ToolIcon className=\"size-3.5\" />\n )}\n </span>\n <span\n className={cn(\n \"min-w-0 truncate font-normal\",\n isActiveTail && \"agent-running-shimmer\",\n )}\n >\n {humanizeToolName(tool.name)}\n </span>\n </div>\n </ToolActivityPresentation>\n );\n}\n\n// ─── ToolCallFallback ──────────────────────────────────────────────────────────\n\nexport function ToolCallFallback({\n toolName,\n args,\n argsText,\n result,\n ...rest\n}: ToolCallMessagePartProps & {\n mcpApp?: AgentMcpAppPayload;\n chatUI?: ActionChatUIConfig;\n structuredMeta?: Record<string, unknown>;\n activity?: boolean;\n approval?: { approvalKey: string; dismissed?: boolean };\n repeatCount?: number;\n isLatestRunning?: boolean;\n isActiveTail?: boolean;\n}) {\n const chatRunning = React.useContext(ChatRunningContext);\n const isRunning =\n result === undefined && (chatRunning || rest.activity === true);\n return (\n <ToolCallDisplay\n toolName={toolName}\n args={args as Record<string, unknown>}\n argsText={argsText}\n result={\n typeof result === \"string\"\n ? result\n : result !== undefined\n ? JSON.stringify(result)\n : undefined\n }\n mcpApp={rest.mcpApp}\n chatUI={rest.chatUI}\n structuredMeta={rest.structuredMeta}\n isRunning={isRunning}\n isActiveTail={rest.isActiveTail}\n isLatestRunning={rest.isLatestRunning}\n approval={rest.approval}\n repeatCount={rest.repeatCount}\n />\n );\n}\n\n// ─── ReconnectStreamMessage ────────────────────────────────────────────────────\n// Renders the agent's in-progress response during reconnection (outside\n// assistant-ui's runtime). Uses the same visual styling as normal messages.\n\nexport function ReconnectStreamMessage({\n content,\n}: {\n content: ContentPart[];\n}) {\n const chatRunning = React.useContext(ChatRunningContext);\n const toolSummary = getReconnectToolSummaryInfo(content);\n const latestReasoningPartIndex = content.reduce(\n (latestIndex, part, index) =>\n part.type === \"reasoning\" ? index : latestIndex,\n -1,\n );\n const streamingTextPartIndex =\n content.at(-1)?.type === \"text\" ? content.length - 1 : -1;\n const streamingReasoningPartIndex =\n content.at(-1)?.type === \"reasoning\" ? content.length - 1 : -1;\n const latestActiveToolIndex = content.reduce(\n (latestIndex, part, index) =>\n part.type === \"tool-call\" &&\n !isCallAgentToolCallShadowed(content, index) &&\n (chatRunning || part.activity === true)\n ? index\n : latestIndex,\n -1,\n );\n\n const renderPart = (part: ContentPart, i: number) => {\n if (isCallAgentToolCallShadowed(content, i)) return null;\n if (part.type === \"text\") {\n const partStreaming = chatRunning && i === streamingTextPartIndex;\n return (\n <SmoothMarkdownText\n key={`reconnect-text-${i}`}\n text={part.text}\n streaming={partStreaming}\n resetKey={`reconnect-text-${i}`}\n statusType={partStreaming ? \"running\" : \"complete\"}\n />\n );\n }\n if (part.type === \"reasoning\") {\n return (\n <ReasoningCell\n key={`reconnect-reasoning-${i}`}\n text={part.text}\n isStreaming={chatRunning && i === streamingReasoningPartIndex}\n resetKey={`reconnect-reasoning-${i}`}\n defaultOpen={i === latestReasoningPartIndex}\n collapseWhenReplaced={i < latestReasoningPartIndex}\n />\n );\n }\n return (\n <ToolCallDisplay\n key={`reconnect-tool-${i}`}\n toolName={part.toolName}\n argsText={part.argsText}\n args={part.args}\n result={part.result}\n mcpApp={part.mcpApp}\n chatUI={part.chatUI}\n structuredMeta={part.structuredMeta}\n isRunning={\n part.result === undefined && (chatRunning || part.activity === true)\n }\n isActiveTail={i === latestActiveToolIndex}\n approval={part.approval}\n repeatCount={part.repeatCount}\n />\n );\n };\n\n const renderedParts: React.ReactNode[] = [];\n let summaryStartIndex = -1;\n let summaryToolCount = 0;\n const flushSummary = (endIndex: number) => {\n if (summaryStartIndex < 0) return;\n renderedParts.push(\n <RanToolsSummary\n key={`reconnect-tool-summary-${summaryStartIndex}`}\n toolCount={summaryToolCount}\n >\n {content\n .slice(summaryStartIndex, endIndex)\n .map((part, offset) => renderPart(part, summaryStartIndex + offset))}\n </RanToolsSummary>,\n );\n summaryStartIndex = -1;\n summaryToolCount = 0;\n };\n\n for (let i = 0; i < content.length; i++) {\n const part = content[i]!;\n if (isCallAgentToolCallShadowed(content, i)) continue;\n const isOlderToolWork =\n toolSummary.startIndex >= 0 &&\n i < toolSummary.startIndex &&\n isReconnectToolSummaryPart(content, i, toolSummary.startIndex);\n if (isOlderToolWork) {\n summaryStartIndex = summaryStartIndex < 0 ? i : summaryStartIndex;\n if (part.type === \"tool-call\") summaryToolCount++;\n continue;\n }\n flushSummary(i);\n renderedParts.push(renderPart(part, i));\n }\n flushSummary(content.length);\n\n return (\n <div className=\"flex justify-start\">\n <div className=\"w-full max-w-[95%] text-sm leading-relaxed text-foreground space-y-1\">\n {renderedParts}\n </div>\n </div>\n );\n}\n\nfunction getReconnectToolSummaryInfo(content: readonly ContentPart[]) {\n const toolCallIndices = content.reduce<number[]>((indices, part, index) => {\n if (\n part.type === \"tool-call\" &&\n !isCallAgentToolCallShadowed(content, index) &&\n isReconnectSummarizablePart(part)\n ) {\n indices.push(index);\n }\n return indices;\n }, []);\n if (toolCallIndices.length <= ASSISTANT_VISIBLE_TOOL_CALL_LIMIT) {\n return { startIndex: -1 };\n }\n return {\n startIndex:\n toolCallIndices[\n toolCallIndices.length - ASSISTANT_VISIBLE_TOOL_CALL_LIMIT\n ]!,\n };\n}\n\nfunction isReconnectSummarizablePart(part: ContentPart): boolean {\n return (\n part.type === \"reasoning\" ||\n (part.type === \"tool-call\" &&\n part.toolName !== \"connect-builder\" &&\n part.chatUI === undefined &&\n part.mcpApp === undefined)\n );\n}\n\nfunction isReconnectToolSummaryPart(\n content: readonly ContentPart[],\n index: number,\n startIndex: number,\n): boolean {\n if (startIndex < 0 || index >= startIndex) return false;\n if (\n isCallAgentToolCallShadowed(content, index) ||\n !isReconnectSummarizablePart(content[index]!)\n ) {\n return false;\n }\n\n let segmentStart = index;\n while (\n segmentStart > 0 &&\n !isCallAgentToolCallShadowed(content, segmentStart - 1) &&\n isReconnectSummarizablePart(content[segmentStart - 1]!)\n ) {\n segmentStart--;\n }\n\n let segmentEnd = index + 1;\n while (\n segmentEnd < startIndex &&\n !isCallAgentToolCallShadowed(content, segmentEnd) &&\n isReconnectSummarizablePart(content[segmentEnd]!)\n ) {\n segmentEnd++;\n }\n\n return content\n .slice(segmentStart, segmentEnd)\n .some((candidate) => candidate.type === \"tool-call\");\n}\n\n// ─── Reasoning / Thinking cell ────────────────────────────────────────────────\n\n/**\n * Completed reasoning and tool calls share one outer \"Worked for…\"\n * disclosure. Reasoning cells inside it render their prose directly so\n * opening that summary never reveals a redundant second disclosure.\n */\nconst WorkSummaryContentContext = React.createContext(false);\n\nexport function ReasoningCell({\n text,\n isStreaming = false,\n resetKey,\n defaultOpen,\n autoCollapse = false,\n collapseWhenReplaced = false,\n durationMs,\n}: {\n text: string;\n isStreaming?: boolean;\n /** Stable identity used to restart the reveal when a new reasoning part mounts. */\n resetKey?: string;\n defaultOpen?: boolean;\n /** Animate closed when a live reasoning segment finishes during a run. */\n autoCollapse?: boolean;\n /** Animate closed when a newer reasoning segment replaces this one. */\n collapseWhenReplaced?: boolean;\n /**\n * Elapsed thinking time in ms, once known. Only meaningful once streaming\n * has finished — callers that track live timing (see ReasoningMessagePart)\n * pass this so the label can read \"Thought for Xs\" instead of \"Thought\".\n * Historical messages with no live timing simply omit it.\n */\n durationMs?: number | null;\n}) {\n const embeddedInWorkSummary = React.useContext(WorkSummaryContentContext);\n const [open, setOpen] = useState(defaultOpen ?? true);\n const wasStreamingRef = useRef(isStreaming);\n const wasReplacedRef = useRef(collapseWhenReplaced);\n const trimmed = text.trim();\n const visibleText = useSmoothStreamingText(\n trimmed,\n isStreaming,\n resetKey ?? \"reasoning\",\n );\n\n useEffect(() => {\n if (autoCollapse && wasStreamingRef.current && !isStreaming) {\n setOpen(false);\n }\n wasStreamingRef.current = isStreaming;\n }, [autoCollapse, isStreaming]);\n\n useEffect(() => {\n if (collapseWhenReplaced && !wasReplacedRef.current) {\n setOpen(false);\n }\n wasReplacedRef.current = collapseWhenReplaced;\n }, [collapseWhenReplaced]);\n\n if (!trimmed && !isStreaming) return null;\n\n if (embeddedInWorkSummary) {\n return (\n <div className=\"pb-1 pl-5 text-[13px] leading-relaxed text-muted-foreground whitespace-pre-wrap\">\n {visibleText || (isStreaming ? \"…\" : \"\")}\n </div>\n );\n }\n\n const label = isStreaming\n ? \"Thinking\"\n : durationMs != null\n ? `Thought for ${formatWorkedDuration(durationMs)}`\n : \"Thought\";\n // Only clamp to a scroll-free \"tail\" view while actively streaming and\n // expanded — once the run finishes the full text is shown, unclamped.\n const showTail = isStreaming && open;\n\n return (\n <div className=\"my-0.5 w-full\">\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n aria-expanded={open}\n className=\"flex items-center gap-1.5 py-0.5 text-[13px] text-muted-foreground transition-colors hover:text-foreground\"\n >\n <IconChevronRight\n className={cn(\n \"size-3.5 shrink-0 transition-transform\",\n open && \"rotate-90\",\n )}\n />\n {isStreaming ? (\n <span className=\"agent-thinking-indicator__text\">{label}</span>\n ) : (\n <span>{label}</span>\n )}\n </button>\n <AnimatedCollapse open={open}>\n <div className={cn(\"pl-5 pb-1\", showTail && \"reasoning-cell-tail\")}>\n <div className=\"text-[13px] leading-relaxed text-muted-foreground whitespace-pre-wrap\">\n {visibleText || (isStreaming ? \"…\" : \"\")}\n </div>\n </div>\n </AnimatedCollapse>\n </div>\n );\n}\n\n// ─── Worked-for duration helpers ──────────────────────────────────────────────\n\nexport function formatWorkedDuration(ms: number): string {\n const totalSeconds = Math.max(0, Math.round(ms / 1000));\n if (totalSeconds < 60) {\n return totalSeconds <= 1 ? \"1s\" : `${totalSeconds}s`;\n }\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n if (minutes < 60) {\n if (seconds === 0) return `${minutes}m`;\n return `${minutes}m ${seconds}s`;\n }\n const hours = Math.floor(minutes / 60);\n const remMinutes = minutes % 60;\n if (remMinutes === 0) return `${hours}h`;\n return `${hours}h ${remMinutes}m`;\n}\n\nexport function WorkedForSummary({\n durationMs,\n defaultOpen = false,\n autoCollapse = false,\n children,\n}: {\n durationMs?: number | null;\n /** Keep completed work visible when the turn contains interactive UI. */\n defaultOpen?: boolean;\n /** When true, close the summary after a run has completed. */\n autoCollapse?: boolean;\n children: React.ReactNode;\n}) {\n // Ordinary completed work starts closed so a remount never flashes details\n // while auto-collapse settles. Interactive UI opts into an open summary.\n const [open, setOpen] = useState(defaultOpen);\n\n useEffect(() => {\n if (defaultOpen) {\n setOpen(true);\n } else if (autoCollapse) {\n setOpen(false);\n }\n }, [autoCollapse, defaultOpen]);\n\n const label =\n durationMs != null && durationMs >= 1000\n ? `Worked for ${formatWorkedDuration(durationMs)}`\n : \"Worked\";\n\n return (\n <div className=\"my-1 w-full\">\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n aria-expanded={open}\n className=\"flex items-center gap-1.5 py-0.5 text-[13px] text-muted-foreground transition-colors hover:text-foreground\"\n >\n <span>{label}</span>\n <IconChevronRight\n className={cn(\n \"size-3.5 shrink-0 transition-transform\",\n open && \"rotate-90\",\n )}\n />\n </button>\n <AnimatedCollapse open={open}>\n <WorkSummaryContentContext.Provider value>\n <div className=\"pt-1\">{children}</div>\n </WorkSummaryContentContext.Provider>\n </AnimatedCollapse>\n </div>\n );\n}\n\nexport function RanToolsSummary({\n toolCount,\n children,\n}: {\n toolCount: number;\n children: React.ReactNode;\n}) {\n const [open, setOpen] = useState(false);\n const label = `Ran ${toolCount} ${toolCount === 1 ? \"tool\" : \"tools\"}`;\n\n return (\n <div className=\"my-1 w-full\">\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n aria-expanded={open}\n className=\"flex items-center gap-1.5 py-0.5 text-[13px] text-muted-foreground transition-colors hover:text-foreground\"\n >\n <span>{label}</span>\n <IconChevronRight\n className={cn(\n \"size-3.5 shrink-0 transition-transform\",\n open && \"rotate-90\",\n )}\n />\n </button>\n <AnimatedCollapse open={open}>\n <div className=\"pt-1\">{children}</div>\n </AnimatedCollapse>\n </div>\n );\n}\n\n// ─── Re-export for AssistantMessage ───────────────────────────────────────────\n// AssistantMessage in AssistantChat.tsx uses FilesChangedSummary directly, so\n// re-export it so AssistantChat.tsx can import from one place.\nexport { FilesChangedSummary };\n"]}
@@ -62,11 +62,11 @@ export declare const postAwareness: import("h3").EventHandlerWithFetch<import("h
62
62
  error: string;
63
63
  states?: undefined;
64
64
  } | {
65
- error?: undefined;
66
65
  states: {
67
66
  clientId: number;
68
67
  state: string;
69
68
  }[];
69
+ error?: undefined;
70
70
  }>>;
71
71
  /**
72
72
  * GET /_agent-native/collab/:docId/users
@@ -77,10 +77,10 @@ export declare const getActiveUsers: import("h3").EventHandlerWithFetch<import("
77
77
  error: string;
78
78
  users?: undefined;
79
79
  } | {
80
- error?: undefined;
81
80
  users: {
82
81
  clientId: number;
83
82
  lastSeen: number;
84
83
  }[];
84
+ error?: undefined;
85
85
  }>>;
86
86
  //# sourceMappingURL=awareness.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"awareness.d.ts","sourceRoot":"","sources":["../../src/collab/awareness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgB3C,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAOD,eAAO,MAAM,sBAAsB,EAAG,kBAA2B,CAAC;AAElE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,MAAM,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAOD,wBAAgB,mBAAmB,IAAI,YAAY,CAElD;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,cAAc,GAAG,SAAS,GAChC,IAAI,CAON;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAClD,KAAK,CAAC,EAAE,cAAc,GACrB,IAAI,CAgBN;AAoBD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAmB,GAC7B,IAAI,CAON;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE1E;AAiBD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAO1E;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,IAAI,CAOnE;AAkCD;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa;;;;;;kBAwDa,MAAM;eAAS,MAAM;;GAoB1D,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;kBAYM,MAAM;kBAAY,MAAM;;GAMvD,CAAC"}
1
+ {"version":3,"file":"awareness.d.ts","sourceRoot":"","sources":["../../src/collab/awareness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgB3C,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAOD,eAAO,MAAM,sBAAsB,EAAG,kBAA2B,CAAC;AAElE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,MAAM,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAOD,wBAAgB,mBAAmB,IAAI,YAAY,CAElD;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,cAAc,GAAG,SAAS,GAChC,IAAI,CAON;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAClD,KAAK,CAAC,EAAE,cAAc,GACrB,IAAI,CAgBN;AAoBD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAmB,GAC7B,IAAI,CAON;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE1E;AAiBD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAO1E;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,IAAI,CAOnE;AAkCD;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa;;;;;kBAwDa,MAAM;eAAS,MAAM;;;GAoB1D,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;kBAYM,MAAM;kBAAY,MAAM;;;GAMvD,CAAC"}
@@ -26,8 +26,8 @@ export declare const getCollabState: import("h3").EventHandlerWithFetch<import("
26
26
  * Body: { update: string (base64), requestSource?: string }
27
27
  */
28
28
  export declare const postCollabUpdate: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
29
- ok?: undefined;
30
29
  error: string;
30
+ ok?: undefined;
31
31
  } | {
32
32
  error?: undefined;
33
33
  ok: boolean;
@@ -13,8 +13,8 @@
13
13
  * Body: { json: any, fieldName?: string, type?: "map"|"array", requestSource?: string }
14
14
  */
15
15
  export declare const postCollabJson: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
16
- error: string;
17
16
  ok?: undefined;
17
+ error: string;
18
18
  } | {
19
19
  error?: undefined;
20
20
  ok: boolean;
@@ -13,13 +13,13 @@
13
13
  export declare function createNotificationsHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<"" | import("./types.js").Notification[] | {
14
14
  count: number;
15
15
  updated?: undefined;
16
- ok?: undefined;
17
16
  error?: undefined;
17
+ ok?: undefined;
18
18
  } | {
19
19
  count?: undefined;
20
20
  updated: number;
21
- ok?: undefined;
22
21
  error?: undefined;
22
+ ok?: undefined;
23
23
  } | {
24
24
  count?: undefined;
25
25
  updated?: undefined;
@@ -41,16 +41,16 @@ export declare function createObservabilityHandler(): import("h3").EventHandlerW
41
41
  thumbsUpRate: number;
42
42
  avgEvalScore: number;
43
43
  } | {
44
- error?: undefined;
45
44
  summary: import("./types.js").TraceSummary;
46
45
  spans: import("./types.js").TraceSpan[];
47
46
  id?: undefined;
47
+ error?: undefined;
48
48
  ok?: undefined;
49
49
  } | {
50
- error?: undefined;
51
50
  summary?: undefined;
52
51
  spans?: undefined;
53
52
  id: string;
53
+ error?: undefined;
54
54
  ok?: undefined;
55
55
  } | {
56
56
  summary?: undefined;
@@ -59,10 +59,10 @@ export declare function createObservabilityHandler(): import("h3").EventHandlerW
59
59
  error: any;
60
60
  ok?: undefined;
61
61
  } | {
62
- error?: undefined;
63
62
  summary?: undefined;
64
63
  spans?: undefined;
65
64
  id?: undefined;
65
+ error?: undefined;
66
66
  ok: boolean;
67
67
  }>>;
68
68
  //# sourceMappingURL=routes.d.ts.map
@@ -76,7 +76,7 @@ export declare function createCustomProviderRegistrationAction<TSchema extends Z
76
76
  }>>;
77
77
  }, z.core.$strip>>, {
78
78
  id?: undefined;
79
- found?: undefined;
79
+ message?: undefined;
80
80
  deleted?: undefined;
81
81
  providers: {
82
82
  id: string;
@@ -89,11 +89,12 @@ export declare function createCustomProviderRegistrationAction<TSchema extends Z
89
89
  }[];
90
90
  count: number;
91
91
  provider?: undefined;
92
+ found?: undefined;
92
93
  registered?: undefined;
93
94
  label?: undefined;
94
- message?: undefined;
95
95
  } | {
96
96
  id?: undefined;
97
+ message?: undefined;
97
98
  deleted?: undefined;
98
99
  providers?: undefined;
99
100
  count?: undefined;
@@ -101,8 +102,8 @@ export declare function createCustomProviderRegistrationAction<TSchema extends Z
101
102
  provider: import("../custom-registry.js").CustomProviderConfig;
102
103
  registered?: undefined;
103
104
  label?: undefined;
104
- message?: undefined;
105
105
  } | {
106
+ message?: undefined;
106
107
  deleted?: undefined;
107
108
  providers?: undefined;
108
109
  count?: undefined;
@@ -111,23 +112,22 @@ export declare function createCustomProviderRegistrationAction<TSchema extends Z
111
112
  id: string;
112
113
  registered?: undefined;
113
114
  label?: undefined;
114
- message?: undefined;
115
115
  } | {
116
- found?: undefined;
116
+ message?: undefined;
117
117
  providers?: undefined;
118
118
  count?: undefined;
119
119
  provider?: undefined;
120
+ found?: undefined;
120
121
  deleted: boolean;
121
122
  id: string;
122
123
  registered?: undefined;
123
124
  label?: undefined;
124
- message?: undefined;
125
125
  } | {
126
- found?: undefined;
127
126
  deleted?: undefined;
128
127
  providers?: undefined;
129
128
  count?: undefined;
130
129
  provider?: undefined;
130
+ found?: undefined;
131
131
  registered: boolean;
132
132
  id: string;
133
133
  label: string;
@@ -309,10 +309,8 @@ export declare function createProviderApiActions(runtime: Pick<ProviderApiRuntim
309
309
  notes?: string | undefined;
310
310
  scope?: "org" | "user" | undefined;
311
311
  }, {
312
- deleted?: undefined;
313
312
  id?: undefined;
314
- provider?: undefined;
315
- found?: undefined;
313
+ deleted?: undefined;
316
314
  providers: {
317
315
  id: string;
318
316
  label: string;
@@ -323,13 +321,15 @@ export declare function createProviderApiActions(runtime: Pick<ProviderApiRuntim
323
321
  updatedAt: number;
324
322
  }[];
325
323
  count: number;
324
+ provider?: undefined;
325
+ found?: undefined;
326
326
  registered?: undefined;
327
327
  label?: undefined;
328
328
  message?: undefined;
329
329
  } | {
330
+ id?: undefined;
330
331
  deleted?: undefined;
331
332
  count?: undefined;
332
- id?: undefined;
333
333
  providers?: undefined;
334
334
  found: boolean;
335
335
  provider: import("../custom-registry.js").CustomProviderConfig;
@@ -339,8 +339,8 @@ export declare function createProviderApiActions(runtime: Pick<ProviderApiRuntim
339
339
  } | {
340
340
  deleted?: undefined;
341
341
  count?: undefined;
342
- provider?: undefined;
343
342
  providers?: undefined;
343
+ provider?: undefined;
344
344
  found: boolean;
345
345
  id: string;
346
346
  registered?: undefined;
@@ -348,9 +348,9 @@ export declare function createProviderApiActions(runtime: Pick<ProviderApiRuntim
348
348
  message?: undefined;
349
349
  } | {
350
350
  count?: undefined;
351
+ providers?: undefined;
351
352
  provider?: undefined;
352
353
  found?: undefined;
353
- providers?: undefined;
354
354
  deleted: boolean;
355
355
  id: string;
356
356
  registered?: undefined;
@@ -359,9 +359,9 @@ export declare function createProviderApiActions(runtime: Pick<ProviderApiRuntim
359
359
  } | {
360
360
  deleted?: undefined;
361
361
  count?: undefined;
362
+ providers?: undefined;
362
363
  provider?: undefined;
363
364
  found?: undefined;
364
- providers?: undefined;
365
365
  registered: boolean;
366
366
  id: string;
367
367
  label: string;