@stigmer/react 3.9.0 → 3.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1356) hide show
  1. package/access/ManageAccessButton.js +1 -1
  2. package/access/ManageAccessButton.js.map +1 -1
  3. package/access/ManageAccessDialog.js +3 -3
  4. package/access/ManageAccessDialog.js.map +1 -1
  5. package/action-menu/ActionMenu.js +3 -3
  6. package/action-menu/ActionMenu.js.map +1 -1
  7. package/activity/useRecentActivity.d.ts +6 -1
  8. package/activity/useRecentActivity.d.ts.map +1 -1
  9. package/activity/useRecentActivity.js +6 -1
  10. package/activity/useRecentActivity.js.map +1 -1
  11. package/agent/AgentDetailView.js +21 -21
  12. package/agent/AgentDetailView.js.map +1 -1
  13. package/agent/AgentPicker.js +8 -8
  14. package/agent/AgentPicker.js.map +1 -1
  15. package/agent/steps/CapabilitiesStep.js +3 -3
  16. package/agent/steps/CapabilitiesStep.js.map +1 -1
  17. package/agent/steps/IdentityStep.js +6 -6
  18. package/agent/steps/IdentityStep.js.map +1 -1
  19. package/agent/steps/ReviewStep.js +3 -3
  20. package/agent/steps/ReviewStep.js.map +1 -1
  21. package/agent-instance/AgentInstanceDetailPanel.js +2 -2
  22. package/agent-instance/AgentInstanceDetailPanel.js.map +1 -1
  23. package/agent-instance/AgentInstanceList.js +4 -4
  24. package/agent-instance/AgentInstanceList.js.map +1 -1
  25. package/agent-instance/CreateAgentInstanceDialog.js +1 -1
  26. package/agent-instance/CreateAgentInstanceDialog.js.map +1 -1
  27. package/api-key/ApiKeyCreatedAlert.js +1 -1
  28. package/api-key/ApiKeyCreatedAlert.js.map +1 -1
  29. package/api-key/ApiKeyListPanel.js +9 -9
  30. package/api-key/ApiKeyListPanel.js.map +1 -1
  31. package/api-key/CreateApiKeyForm.js +5 -5
  32. package/api-key/CreateApiKeyForm.js.map +1 -1
  33. package/attachment/AttachmentChipList.d.ts +16 -4
  34. package/attachment/AttachmentChipList.d.ts.map +1 -1
  35. package/attachment/AttachmentChipList.js +103 -37
  36. package/attachment/AttachmentChipList.js.map +1 -1
  37. package/attachment/AttachmentImageLightbox.d.ts +39 -0
  38. package/attachment/AttachmentImageLightbox.d.ts.map +1 -0
  39. package/attachment/AttachmentImageLightbox.js +57 -0
  40. package/attachment/AttachmentImageLightbox.js.map +1 -0
  41. package/attachment/attachment-utils.d.ts +8 -5
  42. package/attachment/attachment-utils.d.ts.map +1 -1
  43. package/attachment/attachment-utils.js +8 -5
  44. package/attachment/attachment-utils.js.map +1 -1
  45. package/attachment/useObjectUrl.d.ts +15 -0
  46. package/attachment/useObjectUrl.d.ts.map +1 -0
  47. package/attachment/useObjectUrl.js +25 -0
  48. package/attachment/useObjectUrl.js.map +1 -0
  49. package/billing/AutoRechargeCard.js +2 -2
  50. package/billing/AutoRechargeCard.js.map +1 -1
  51. package/billing/BillingSection.js +6 -6
  52. package/billing/BillingSection.js.map +1 -1
  53. package/billing/CreditBalanceCard.js +4 -4
  54. package/billing/CreditBalanceCard.js.map +1 -1
  55. package/billing/CreditLedgerTable.js +13 -13
  56. package/billing/CreditLedgerTable.js.map +1 -1
  57. package/billing/CreditPackGrid.js +2 -2
  58. package/billing/CreditPackGrid.js.map +1 -1
  59. package/billing/LowBalanceBanner.js +4 -4
  60. package/billing/LowBalanceBanner.js.map +1 -1
  61. package/billing/PaymentMethodCard.js +2 -2
  62. package/billing/PaymentMethodCard.js.map +1 -1
  63. package/button/Button.js +7 -7
  64. package/button/Button.js.map +1 -1
  65. package/channel/AgentChannelsPanel.js +12 -12
  66. package/channel/AgentChannelsPanel.js.map +1 -1
  67. package/channel/ChannelConversationsDialog.js +6 -6
  68. package/channel/ChannelConversationsDialog.js.map +1 -1
  69. package/channel/ChannelCredentialsDialog.js +2 -2
  70. package/channel/ChannelCredentialsDialog.js.map +1 -1
  71. package/channel/ChannelTemplatesDialog.js +13 -13
  72. package/channel/ChannelTemplatesDialog.js.map +1 -1
  73. package/channel/ChannelToolCredentials.js +3 -3
  74. package/channel/ChannelToolCredentials.js.map +1 -1
  75. package/channel/ConnectSlackDialog.js +13 -13
  76. package/channel/ConnectSlackDialog.js.map +1 -1
  77. package/channel/ConnectWhatsAppDialog.js +8 -8
  78. package/channel/ConnectWhatsAppDialog.js.map +1 -1
  79. package/channel/connect/ServingAppSection.js +5 -5
  80. package/channel/connect/ServingAppSection.js.map +1 -1
  81. package/channel/connect/ToolCredentialsSection.js +1 -1
  82. package/channel/connect/ToolCredentialsSection.js.map +1 -1
  83. package/channel/connect/VerbatimRefusal.js +1 -1
  84. package/channel/connect/VerbatimRefusal.js.map +1 -1
  85. package/channel/connect/icons.js +1 -1
  86. package/channel/connect/icons.js.map +1 -1
  87. package/channel-app/ChannelAppDetailPanel.js +3 -3
  88. package/channel-app/ChannelAppDetailPanel.js.map +1 -1
  89. package/channel-app/ChannelAppListPanel.js +5 -5
  90. package/channel-app/ChannelAppListPanel.js.map +1 -1
  91. package/channel-app/CreateChannelAppForm.js +6 -6
  92. package/channel-app/CreateChannelAppForm.js.map +1 -1
  93. package/channel-app/internal.js +7 -7
  94. package/channel-app/internal.js.map +1 -1
  95. package/composer/ComposerToolbar.js +4 -4
  96. package/composer/ComposerToolbar.js.map +1 -1
  97. package/composer/ConfigureMenu.js +4 -4
  98. package/composer/ConfigureMenu.js.map +1 -1
  99. package/composer/ContextChip.js +4 -4
  100. package/composer/ContextChip.js.map +1 -1
  101. package/composer/ContextPopover.js +4 -4
  102. package/composer/ContextPopover.js.map +1 -1
  103. package/composer/InteractionModePicker.js +5 -5
  104. package/composer/InteractionModePicker.js.map +1 -1
  105. package/composer/SessionComposer.js +8 -8
  106. package/composer/SessionComposer.js.map +1 -1
  107. package/composer/icons.js +3 -3
  108. package/composer/icons.js.map +1 -1
  109. package/conversation/ConversationAttentionBanner.js +2 -2
  110. package/conversation/ConversationAttentionBanner.js.map +1 -1
  111. package/conversation/ConversationComposer.js +2 -2
  112. package/conversation/ConversationComposer.js.map +1 -1
  113. package/conversation/ConversationControlBanner.js +5 -5
  114. package/conversation/ConversationControlBanner.js.map +1 -1
  115. package/conversation/ConversationListPane.js +12 -12
  116. package/conversation/ConversationListPane.js.map +1 -1
  117. package/conversation/ConversationMediaAttachment.d.ts +45 -0
  118. package/conversation/ConversationMediaAttachment.d.ts.map +1 -0
  119. package/conversation/ConversationMediaAttachment.js +153 -0
  120. package/conversation/ConversationMediaAttachment.js.map +1 -0
  121. package/conversation/ConversationTimelineView.d.ts +18 -1
  122. package/conversation/ConversationTimelineView.d.ts.map +1 -1
  123. package/conversation/ConversationTimelineView.js +24 -15
  124. package/conversation/ConversationTimelineView.js.map +1 -1
  125. package/conversation/ConversationsWorkbench.d.ts.map +1 -1
  126. package/conversation/ConversationsWorkbench.js +3 -3
  127. package/conversation/ConversationsWorkbench.js.map +1 -1
  128. package/conversation/conversationPresentation.d.ts +10 -3
  129. package/conversation/conversationPresentation.d.ts.map +1 -1
  130. package/conversation/conversationPresentation.js +10 -3
  131. package/conversation/conversationPresentation.js.map +1 -1
  132. package/conversation/index.d.ts +2 -0
  133. package/conversation/index.d.ts.map +1 -1
  134. package/conversation/index.js +1 -0
  135. package/conversation/index.js.map +1 -1
  136. package/conversation/useConversationMediaUrl.d.ts +65 -0
  137. package/conversation/useConversationMediaUrl.d.ts.map +1 -0
  138. package/conversation/useConversationMediaUrl.js +61 -0
  139. package/conversation/useConversationMediaUrl.js.map +1 -0
  140. package/cursor-accounts/CursorAccountEditor.js +1 -1
  141. package/cursor-accounts/CursorAccountEditor.js.map +1 -1
  142. package/cursor-accounts/CursorAccountsAccessNotice.js +1 -1
  143. package/cursor-accounts/CursorAccountsAccessNotice.js.map +1 -1
  144. package/cursor-accounts/CursorAccountsConsole.js +9 -9
  145. package/cursor-accounts/CursorAccountsConsole.js.map +1 -1
  146. package/cursor-accounts/MemberCoverageTable.js +7 -7
  147. package/cursor-accounts/MemberCoverageTable.js.map +1 -1
  148. package/cursor-accounts/MemberKeysPanel.js +3 -3
  149. package/cursor-accounts/MemberKeysPanel.js.map +1 -1
  150. package/cursor-accounts/badges.js +1 -1
  151. package/cursor-accounts/badges.js.map +1 -1
  152. package/dashboard/DashboardFailedRuns.js +4 -4
  153. package/dashboard/DashboardFailedRuns.js.map +1 -1
  154. package/dashboard/DashboardKPICards.js +7 -7
  155. package/dashboard/DashboardKPICards.js.map +1 -1
  156. package/dashboard/OperationalDashboard.js +1 -1
  157. package/dashboard/OperationalDashboard.js.map +1 -1
  158. package/datastore/CollectionRecordsBrowser.js +10 -10
  159. package/datastore/CollectionRecordsBrowser.js.map +1 -1
  160. package/datastore/CollectionSchemaView.js +4 -4
  161. package/datastore/CollectionSchemaView.js.map +1 -1
  162. package/datastore/DatastoreDetailView.js +4 -4
  163. package/datastore/DatastoreDetailView.js.map +1 -1
  164. package/datastore/DatastoreSyncReport.js +1 -1
  165. package/datastore/DatastoreSyncReport.js.map +1 -1
  166. package/datastore/DeleteDatastoreDialog.js +1 -1
  167. package/datastore/DeleteDatastoreDialog.js.map +1 -1
  168. package/datastore/FieldValueControl.js +2 -2
  169. package/datastore/FieldValueControl.js.map +1 -1
  170. package/datastore/RecordFilterBuilder.js +4 -4
  171. package/datastore/RecordFilterBuilder.js.map +1 -1
  172. package/datastore/RecordFormPanel.js +5 -5
  173. package/datastore/RecordFormPanel.js.map +1 -1
  174. package/dependency-graph/DependencyGraph.js +1 -1
  175. package/dependency-graph/DependencyGraph.js.map +1 -1
  176. package/dependency-graph/DependencyTreeNode.js +8 -8
  177. package/dependency-graph/DependencyTreeNode.js.map +1 -1
  178. package/empty-state/EmptyState.js +3 -3
  179. package/empty-state/EmptyState.js.map +1 -1
  180. package/empty-state/useEmptyState.js +1 -1
  181. package/empty-state/useEmptyState.js.map +1 -1
  182. package/environment/CreateEnvironmentForm.js +2 -2
  183. package/environment/CreateEnvironmentForm.js.map +1 -1
  184. package/environment/EnvVarForm.js +4 -4
  185. package/environment/EnvVarForm.js.map +1 -1
  186. package/environment/EnvironmentListPanel.js +9 -9
  187. package/environment/EnvironmentListPanel.js.map +1 -1
  188. package/environment/EnvironmentPicker.js +4 -4
  189. package/environment/EnvironmentPicker.js.map +1 -1
  190. package/environment/EnvironmentVariableEditor.js +17 -17
  191. package/environment/EnvironmentVariableEditor.js.map +1 -1
  192. package/error/ErrorMessage.js +1 -1
  193. package/error/ErrorMessage.js.map +1 -1
  194. package/error/SecretFlowErrorGuide.js +1 -1
  195. package/error/SecretFlowErrorGuide.js.map +1 -1
  196. package/execution/ApprovalCard.js +8 -8
  197. package/execution/ApprovalCard.js.map +1 -1
  198. package/execution/ArtifactApplyButton.js +4 -4
  199. package/execution/ArtifactApplyButton.js.map +1 -1
  200. package/execution/ArtifactContentBody.js +3 -3
  201. package/execution/ArtifactContentBody.js.map +1 -1
  202. package/execution/ArtifactContentRenderer.js +19 -19
  203. package/execution/ArtifactContentRenderer.js.map +1 -1
  204. package/execution/ArtifactDocument.js +10 -10
  205. package/execution/ArtifactDocument.js.map +1 -1
  206. package/execution/ArtifactFileContent.js +4 -4
  207. package/execution/ArtifactFileContent.js.map +1 -1
  208. package/execution/ArtifactPreviewModal.js +11 -11
  209. package/execution/ArtifactPreviewModal.js.map +1 -1
  210. package/execution/ArtifactRowView.js +2 -2
  211. package/execution/ArtifactRowView.js.map +1 -1
  212. package/execution/ArtifactsWidget.js +1 -1
  213. package/execution/ArtifactsWidget.js.map +1 -1
  214. package/execution/ContextGauge.js +9 -9
  215. package/execution/ContextGauge.js.map +1 -1
  216. package/execution/EmptyChangeNotice.js +1 -1
  217. package/execution/EmptyChangeNotice.js.map +1 -1
  218. package/execution/ExecutionPhaseBadge.js +10 -10
  219. package/execution/ExecutionPhaseBadge.js.map +1 -1
  220. package/execution/ExecutionProgress.js +1 -1
  221. package/execution/ExecutionProgress.js.map +1 -1
  222. package/execution/FileChangeProgressBar.js +3 -3
  223. package/execution/FileChangeProgressBar.js.map +1 -1
  224. package/execution/FileChangesView.js +5 -5
  225. package/execution/FileChangesView.js.map +1 -1
  226. package/execution/FilePathLink.js +6 -6
  227. package/execution/FilePathLink.js.map +1 -1
  228. package/execution/FileReviewAtoms.js +7 -7
  229. package/execution/FileReviewAtoms.js.map +1 -1
  230. package/execution/FileReviewCard.js +18 -18
  231. package/execution/FileReviewCard.js.map +1 -1
  232. package/execution/FileReviewDock.js +1 -1
  233. package/execution/FileReviewDock.js.map +1 -1
  234. package/execution/FollowUpInput.js +3 -3
  235. package/execution/FollowUpInput.js.map +1 -1
  236. package/execution/InteractionModeBadge.js +1 -1
  237. package/execution/InteractionModeBadge.js.map +1 -1
  238. package/execution/McpToolDetail.js +12 -12
  239. package/execution/McpToolDetail.js.map +1 -1
  240. package/execution/MessageAttachments.d.ts +52 -0
  241. package/execution/MessageAttachments.d.ts.map +1 -0
  242. package/execution/MessageAttachments.js +142 -0
  243. package/execution/MessageAttachments.js.map +1 -0
  244. package/execution/MessageEntry.d.ts +18 -0
  245. package/execution/MessageEntry.d.ts.map +1 -1
  246. package/execution/MessageEntry.js +12 -11
  247. package/execution/MessageEntry.js.map +1 -1
  248. package/execution/MessageThread.d.ts +15 -2
  249. package/execution/MessageThread.d.ts.map +1 -1
  250. package/execution/MessageThread.js +34 -17
  251. package/execution/MessageThread.js.map +1 -1
  252. package/execution/PlanArtifactCard.js +8 -8
  253. package/execution/PlanArtifactCard.js.map +1 -1
  254. package/execution/PlanCompletionCard.js +2 -2
  255. package/execution/PlanCompletionCard.js.map +1 -1
  256. package/execution/PlanDocumentMessage.js +2 -2
  257. package/execution/PlanDocumentMessage.js.map +1 -1
  258. package/execution/PlanStreamingCard.js +3 -3
  259. package/execution/PlanStreamingCard.js.map +1 -1
  260. package/execution/ResultView.js +17 -17
  261. package/execution/ResultView.js.map +1 -1
  262. package/execution/SessionVariablesInput.js +6 -6
  263. package/execution/SessionVariablesInput.js.map +1 -1
  264. package/execution/SetupProgress.js +2 -2
  265. package/execution/SetupProgress.js.map +1 -1
  266. package/execution/SubAgentSection.js +19 -19
  267. package/execution/SubAgentSection.js.map +1 -1
  268. package/execution/SummarizationBadge.js +3 -3
  269. package/execution/SummarizationBadge.js.map +1 -1
  270. package/execution/SummarizationCard.js +2 -2
  271. package/execution/SummarizationCard.js.map +1 -1
  272. package/execution/TerminalSession.js +2 -2
  273. package/execution/TerminalSession.js.map +1 -1
  274. package/execution/ThreadSkeleton.js +1 -1
  275. package/execution/ThreadSkeleton.js.map +1 -1
  276. package/execution/TodoCard.js +3 -3
  277. package/execution/TodoCard.js.map +1 -1
  278. package/execution/TodoList.js +8 -8
  279. package/execution/TodoList.js.map +1 -1
  280. package/execution/ToolArgsView.js +4 -4
  281. package/execution/ToolArgsView.js.map +1 -1
  282. package/execution/ToolCallDetail.js +4 -4
  283. package/execution/ToolCallDetail.js.map +1 -1
  284. package/execution/ToolCallGroup.js +1 -1
  285. package/execution/ToolCallGroup.js.map +1 -1
  286. package/execution/ToolCallItem.js +16 -16
  287. package/execution/ToolCallItem.js.map +1 -1
  288. package/execution/ToolRunGroup.js +9 -9
  289. package/execution/ToolRunGroup.js.map +1 -1
  290. package/execution/UsageWidget.js +3 -3
  291. package/execution/UsageWidget.js.map +1 -1
  292. package/execution/WriteBackCard.js +16 -16
  293. package/execution/WriteBackCard.js.map +1 -1
  294. package/execution/WriteBacksWidget.js +1 -1
  295. package/execution/WriteBacksWidget.js.map +1 -1
  296. package/execution/index.d.ts +2 -0
  297. package/execution/index.d.ts.map +1 -1
  298. package/execution/index.js +1 -0
  299. package/execution/index.js.map +1 -1
  300. package/execution/tool-rendering-primitives.js +5 -5
  301. package/execution/tool-rendering-primitives.js.map +1 -1
  302. package/feedback/StigmerToaster.d.ts.map +1 -1
  303. package/feedback/StigmerToaster.js +9 -5
  304. package/feedback/StigmerToaster.js.map +1 -1
  305. package/file-reference/FileReferenceChipList.js +3 -3
  306. package/file-reference/FileReferenceChipList.js.map +1 -1
  307. package/github/GitHubRepoPicker.js +26 -26
  308. package/github/GitHubRepoPicker.js.map +1 -1
  309. package/github/decodeGitHubContent.d.ts +10 -5
  310. package/github/decodeGitHubContent.d.ts.map +1 -1
  311. package/github/decodeGitHubContent.js +21 -7
  312. package/github/decodeGitHubContent.js.map +1 -1
  313. package/github/useGitHubFileReader.d.ts.map +1 -1
  314. package/github/useGitHubFileReader.js +5 -5
  315. package/github/useGitHubFileReader.js.map +1 -1
  316. package/iam-policy/GrantAccessForm.js +2 -2
  317. package/iam-policy/GrantAccessForm.js.map +1 -1
  318. package/iam-policy/OrgMembersPanel.js +11 -11
  319. package/iam-policy/OrgMembersPanel.js.map +1 -1
  320. package/iam-policy/PeopleWithAccess.js +4 -4
  321. package/iam-policy/PeopleWithAccess.js.map +1 -1
  322. package/iam-policy/PrincipalPicker.js +6 -6
  323. package/iam-policy/PrincipalPicker.js.map +1 -1
  324. package/iam-policy/ProviderBadge.js +1 -1
  325. package/iam-policy/ProviderBadge.js.map +1 -1
  326. package/iam-policy/RoleSelector.js +4 -4
  327. package/iam-policy/RoleSelector.js.map +1 -1
  328. package/iam-policy/SharePanel.js +1 -1
  329. package/iam-policy/SharePanel.js.map +1 -1
  330. package/identity-provider/CreateIdentityProviderForm.js +6 -6
  331. package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
  332. package/identity-provider/IdentityProviderDetailPanel.js +11 -11
  333. package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
  334. package/identity-provider/IdentityProviderListPanel.js +8 -8
  335. package/identity-provider/IdentityProviderListPanel.js.map +1 -1
  336. package/identity-provider/IdentityProviderWizard.js +16 -16
  337. package/identity-provider/IdentityProviderWizard.js.map +1 -1
  338. package/identity-provider/ProviderPicker.js +11 -11
  339. package/identity-provider/ProviderPicker.js.map +1 -1
  340. package/identity-provider/SsoLoginPrompt.js +7 -7
  341. package/identity-provider/SsoLoginPrompt.js.map +1 -1
  342. package/index.d.ts +4 -4
  343. package/index.d.ts.map +1 -1
  344. package/index.js +3 -3
  345. package/index.js.map +1 -1
  346. package/inline-edit/InlineEditImage.js +5 -5
  347. package/inline-edit/InlineEditImage.js.map +1 -1
  348. package/inline-edit/InlineEditKeyValue.js +3 -3
  349. package/inline-edit/InlineEditKeyValue.js.map +1 -1
  350. package/inline-edit/InlineEditResourceList.js +8 -8
  351. package/inline-edit/InlineEditResourceList.js.map +1 -1
  352. package/inline-edit/InlineEditSelect.js +8 -8
  353. package/inline-edit/InlineEditSelect.js.map +1 -1
  354. package/inline-edit/InlineEditText.js +6 -6
  355. package/inline-edit/InlineEditText.js.map +1 -1
  356. package/inline-edit/InlineEditTextarea.js +4 -4
  357. package/inline-edit/InlineEditTextarea.js.map +1 -1
  358. package/internal/ApprovalPeekBar.js +3 -3
  359. package/internal/ApprovalPeekBar.js.map +1 -1
  360. package/internal/BoundedContent.d.ts +1 -1
  361. package/internal/BoundedContent.d.ts.map +1 -1
  362. package/internal/BoundedContent.js +2 -2
  363. package/internal/BoundedContent.js.map +1 -1
  364. package/internal/CloudFeatureNotice.js +1 -1
  365. package/internal/CloudFeatureNotice.js.map +1 -1
  366. package/internal/DecisionButton.js +6 -6
  367. package/internal/DecisionButton.js.map +1 -1
  368. package/internal/InCardDecisionError.js +1 -1
  369. package/internal/InCardDecisionError.js.map +1 -1
  370. package/internal/JumpToLatestButton.js +3 -3
  371. package/internal/JumpToLatestButton.js.map +1 -1
  372. package/internal/MermaidDiagram.js +2 -2
  373. package/internal/MermaidDiagram.js.map +1 -1
  374. package/internal/Pagination.js +2 -2
  375. package/internal/Pagination.js.map +1 -1
  376. package/internal/ResizableSplit.d.ts +28 -6
  377. package/internal/ResizableSplit.d.ts.map +1 -1
  378. package/internal/ResizableSplit.js +18 -4
  379. package/internal/ResizableSplit.js.map +1 -1
  380. package/internal/RevealToggle.js +2 -2
  381. package/internal/RevealToggle.js.map +1 -1
  382. package/internal/ScrollFade.js +2 -2
  383. package/internal/ScrollFade.js.map +1 -1
  384. package/internal/VirtualizedThread.js +2 -2
  385. package/internal/VirtualizedThread.js.map +1 -1
  386. package/internal/file-icons/index.js +2 -2
  387. package/internal/file-icons/index.js.map +1 -1
  388. package/internal/file-tree/FileTreeNode.js +3 -3
  389. package/internal/file-tree/FileTreeNode.js.map +1 -1
  390. package/internal/form-primitives.d.ts +15 -0
  391. package/internal/form-primitives.d.ts.map +1 -1
  392. package/internal/form-primitives.js +17 -2
  393. package/internal/form-primitives.js.map +1 -1
  394. package/internal/markdown-components.js +23 -23
  395. package/internal/markdown-components.js.map +1 -1
  396. package/internal/menu.js +5 -5
  397. package/internal/menu.js.map +1 -1
  398. package/internal/scroll-area.js +1 -1
  399. package/internal/scroll-area.js.map +1 -1
  400. package/internal/thread-card/ThreadCardShell.js +7 -7
  401. package/internal/thread-card/ThreadCardShell.js.map +1 -1
  402. package/internal/thread-card/glyphs.js +2 -2
  403. package/internal/thread-card/glyphs.js.map +1 -1
  404. package/internal/tooltip.d.ts.map +1 -1
  405. package/internal/tooltip.js +4 -6
  406. package/internal/tooltip.js.map +1 -1
  407. package/invitation/InvitationCreatedAlert.js +1 -1
  408. package/invitation/InvitationCreatedAlert.js.map +1 -1
  409. package/invitation/InvitationManager.js +23 -23
  410. package/invitation/InvitationManager.js.map +1 -1
  411. package/invitation/InvitationRedemption.js +12 -12
  412. package/invitation/InvitationRedemption.js.map +1 -1
  413. package/library/ResourceCountCard.js +4 -4
  414. package/library/ResourceCountCard.js.map +1 -1
  415. package/library/ScopeToggle.js +4 -4
  416. package/library/ScopeToggle.js.map +1 -1
  417. package/library/VisibilityOptionRow.d.ts +1 -1
  418. package/library/VisibilityOptionRow.d.ts.map +1 -1
  419. package/library/VisibilityOptionRow.js +22 -22
  420. package/library/VisibilityOptionRow.js.map +1 -1
  421. package/library/VisibilitySelector.js +5 -5
  422. package/library/VisibilitySelector.js.map +1 -1
  423. package/manifest/ApplyManifestDialog.js +6 -6
  424. package/manifest/ApplyManifestDialog.js.map +1 -1
  425. package/manifest/EditResourceYamlDialog.js +2 -2
  426. package/manifest/EditResourceYamlDialog.js.map +1 -1
  427. package/manifest/RedactedSecretsNotice.js +1 -1
  428. package/manifest/RedactedSecretsNotice.js.map +1 -1
  429. package/manifest/YamlEditor.js +1 -1
  430. package/manifest/YamlEditor.js.map +1 -1
  431. package/mcp-server/McpServerConfigPanel.js +22 -22
  432. package/mcp-server/McpServerConfigPanel.js.map +1 -1
  433. package/mcp-server/McpServerConnectDialog.js +43 -17
  434. package/mcp-server/McpServerConnectDialog.js.map +1 -1
  435. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  436. package/mcp-server/McpServerDetailView.js +112 -63
  437. package/mcp-server/McpServerDetailView.js.map +1 -1
  438. package/mcp-server/McpServerPicker.js +16 -16
  439. package/mcp-server/McpServerPicker.js.map +1 -1
  440. package/mcp-server/McpToolSelector.js +4 -4
  441. package/mcp-server/McpToolSelector.js.map +1 -1
  442. package/mcp-server/OAuthAppForm.js +2 -2
  443. package/mcp-server/OAuthAppForm.js.map +1 -1
  444. package/mcp-server/OAuthCallbackHandler.js +4 -4
  445. package/mcp-server/OAuthCallbackHandler.js.map +1 -1
  446. package/mcp-server/OAuthRequiredNotice.js +1 -1
  447. package/mcp-server/OAuthRequiredNotice.js.map +1 -1
  448. package/mcp-server/StdioSandboxNotice.js +1 -1
  449. package/mcp-server/StdioSandboxNotice.js.map +1 -1
  450. package/mcp-server/index.d.ts +1 -1
  451. package/mcp-server/index.d.ts.map +1 -1
  452. package/mcp-server/index.js +1 -1
  453. package/mcp-server/index.js.map +1 -1
  454. package/mcp-server/steps/EnvironmentAuthStep.js +4 -4
  455. package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
  456. package/mcp-server/steps/IdentityTransportStep.js +8 -8
  457. package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
  458. package/mcp-server/steps/ReviewStep.js +3 -3
  459. package/mcp-server/steps/ReviewStep.js.map +1 -1
  460. package/mcp-server/useMcpServerOAuthConnect.d.ts +29 -0
  461. package/mcp-server/useMcpServerOAuthConnect.d.ts.map +1 -1
  462. package/mcp-server/useMcpServerOAuthConnect.js +49 -10
  463. package/mcp-server/useMcpServerOAuthConnect.js.map +1 -1
  464. package/models/HarnessSelector.js +8 -8
  465. package/models/HarnessSelector.js.map +1 -1
  466. package/models/ModelSelector.js +11 -11
  467. package/models/ModelSelector.js.map +1 -1
  468. package/oauth-app/CreateOAuthAppForm.js +4 -4
  469. package/oauth-app/CreateOAuthAppForm.js.map +1 -1
  470. package/oauth-app/OAuthAppDetailPanel.js +8 -8
  471. package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
  472. package/oauth-app/OAuthAppListPanel.js +6 -6
  473. package/oauth-app/OAuthAppListPanel.js.map +1 -1
  474. package/organization/CreateOrganizationForm.js +4 -4
  475. package/organization/CreateOrganizationForm.js.map +1 -1
  476. package/organization/OrgProfilePanel.js +10 -10
  477. package/organization/OrgProfilePanel.js.map +1 -1
  478. package/organization/OrgSwitcher.js +5 -5
  479. package/organization/OrgSwitcher.js.map +1 -1
  480. package/package.json +4 -4
  481. package/platform-client/CreatePlatformClientForm.js +5 -5
  482. package/platform-client/CreatePlatformClientForm.js.map +1 -1
  483. package/platform-client/PlatformClientDetailPanel.js +8 -8
  484. package/platform-client/PlatformClientDetailPanel.js.map +1 -1
  485. package/platform-client/PlatformClientListPanel.js +10 -10
  486. package/platform-client/PlatformClientListPanel.js.map +1 -1
  487. package/platform-client/PlatformClientSecretAlert.js +2 -2
  488. package/platform-client/PlatformClientSecretAlert.js.map +1 -1
  489. package/portal-container.d.ts +34 -9
  490. package/portal-container.d.ts.map +1 -1
  491. package/portal-container.js +33 -8
  492. package/portal-container.js.map +1 -1
  493. package/pricing-governance/BaselineEditor.js +5 -5
  494. package/pricing-governance/BaselineEditor.js.map +1 -1
  495. package/pricing-governance/ModelCatalogPanel.js +5 -5
  496. package/pricing-governance/ModelCatalogPanel.js.map +1 -1
  497. package/pricing-governance/ModelGovernanceDetail.js +7 -7
  498. package/pricing-governance/ModelGovernanceDetail.js.map +1 -1
  499. package/pricing-governance/OperatorAccessNotice.js +1 -1
  500. package/pricing-governance/OperatorAccessNotice.js.map +1 -1
  501. package/pricing-governance/PricingGovernanceConsole.js +8 -8
  502. package/pricing-governance/PricingGovernanceConsole.js.map +1 -1
  503. package/pricing-governance/PricingGovernancePanel.js +4 -4
  504. package/pricing-governance/PricingGovernancePanel.js.map +1 -1
  505. package/pricing-governance/RetireConfirm.js +1 -1
  506. package/pricing-governance/RetireConfirm.js.map +1 -1
  507. package/pricing-governance/governance-primitives.js +6 -6
  508. package/pricing-governance/governance-primitives.js.map +1 -1
  509. package/resource-creation/CreationPicker.js +7 -7
  510. package/resource-creation/CreationPicker.js.map +1 -1
  511. package/resource-creation/StepIndicator.js +4 -4
  512. package/resource-creation/StepIndicator.js.map +1 -1
  513. package/resource-creation/TemplateCard.js +15 -15
  514. package/resource-creation/TemplateCard.js.map +1 -1
  515. package/resource-creation/TemplateGallery.js +5 -5
  516. package/resource-creation/TemplateGallery.js.map +1 -1
  517. package/resource-creation/WizardNav.js +2 -2
  518. package/resource-creation/WizardNav.js.map +1 -1
  519. package/resource-creation/WizardShell.js +2 -2
  520. package/resource-creation/WizardShell.js.map +1 -1
  521. package/resource-detail/ConfirmDialog.js +3 -3
  522. package/resource-detail/ConfirmDialog.js.map +1 -1
  523. package/resource-detail/ResourceActionBar.js +2 -2
  524. package/resource-detail/ResourceActionBar.js.map +1 -1
  525. package/resource-detail/ResourceDetailShell.js +3 -3
  526. package/resource-detail/ResourceDetailShell.js.map +1 -1
  527. package/resource-detail/Section.js +1 -1
  528. package/resource-detail/Section.js.map +1 -1
  529. package/resource-workbench/components/BulkActionBar.js +4 -4
  530. package/resource-workbench/components/BulkActionBar.js.map +1 -1
  531. package/resource-workbench/components/ColumnHeader.js +3 -3
  532. package/resource-workbench/components/ColumnHeader.js.map +1 -1
  533. package/resource-workbench/components/FilterBar.js +3 -3
  534. package/resource-workbench/components/FilterBar.js.map +1 -1
  535. package/resource-workbench/components/ResourceAvatar.js +18 -18
  536. package/resource-workbench/components/ResourceAvatar.js.map +1 -1
  537. package/resource-workbench/components/ResourceCards.js +2 -2
  538. package/resource-workbench/components/ResourceCards.js.map +1 -1
  539. package/resource-workbench/components/ResourceInspector.js +1 -1
  540. package/resource-workbench/components/ResourceInspector.js.map +1 -1
  541. package/resource-workbench/components/ResourceList.js +2 -2
  542. package/resource-workbench/components/ResourceList.js.map +1 -1
  543. package/resource-workbench/components/ResourceTable.js +5 -5
  544. package/resource-workbench/components/ResourceTable.js.map +1 -1
  545. package/resource-workbench/components/ResourceWorkbench.js +11 -11
  546. package/resource-workbench/components/ResourceWorkbench.js.map +1 -1
  547. package/resource-workbench/components/SelectionCheckbox.js +1 -1
  548. package/resource-workbench/components/SelectionCheckbox.js.map +1 -1
  549. package/resource-workbench/components/StatusBadge.js +16 -16
  550. package/resource-workbench/components/StatusBadge.js.map +1 -1
  551. package/resource-workbench/components/ViewSwitcher.js +4 -4
  552. package/resource-workbench/components/ViewSwitcher.js.map +1 -1
  553. package/schedule/CadenceField.js +14 -14
  554. package/schedule/CadenceField.js.map +1 -1
  555. package/schedule/ScheduleDetailView.js +39 -39
  556. package/schedule/ScheduleDetailView.js.map +1 -1
  557. package/schedule/ScheduleForm.js +9 -9
  558. package/schedule/ScheduleForm.js.map +1 -1
  559. package/schedule/ScheduleRowActions.js +1 -1
  560. package/schedule/ScheduleRowActions.js.map +1 -1
  561. package/schedule/ScheduleRunsTable.js +17 -17
  562. package/schedule/ScheduleRunsTable.js.map +1 -1
  563. package/schedule/TimeZoneField.js +5 -5
  564. package/schedule/TimeZoneField.js.map +1 -1
  565. package/schedule/scheduleColumns.js +5 -5
  566. package/schedule/scheduleColumns.js.map +1 -1
  567. package/session/NewSessionViewer.js +3 -3
  568. package/session/NewSessionViewer.js.map +1 -1
  569. package/session/PlanEditor.js +9 -9
  570. package/session/PlanEditor.js.map +1 -1
  571. package/session/PlanStreamingDocument.js +2 -2
  572. package/session/PlanStreamingDocument.js.map +1 -1
  573. package/session/SessionViewer.js +21 -21
  574. package/session/SessionViewer.js.map +1 -1
  575. package/session/SessionViewerLayout.d.ts +11 -8
  576. package/session/SessionViewerLayout.d.ts.map +1 -1
  577. package/session/SessionViewerLayout.js +1 -1
  578. package/session/SessionViewerLayout.js.map +1 -1
  579. package/session/facets/ArtifactsTab.js +2 -2
  580. package/session/facets/ArtifactsTab.js.map +1 -1
  581. package/session/facets/ChangesTab.js +3 -3
  582. package/session/facets/ChangesTab.js.map +1 -1
  583. package/session/facets/SetupTab.js +11 -11
  584. package/session/facets/SetupTab.js.map +1 -1
  585. package/session/facets/UsageTab.js +1 -1
  586. package/session/facets/UsageTab.js.map +1 -1
  587. package/session/useSessionConversation.d.ts +8 -0
  588. package/session/useSessionConversation.d.ts.map +1 -1
  589. package/session/useSessionConversation.js +12 -2
  590. package/session/useSessionConversation.js.map +1 -1
  591. package/settings/ApiKeysSection.js +1 -1
  592. package/settings/ApiKeysSection.js.map +1 -1
  593. package/settings/ChannelAppsSection.js +1 -1
  594. package/settings/ChannelAppsSection.js.map +1 -1
  595. package/settings/EnvironmentsSection.js +4 -4
  596. package/settings/EnvironmentsSection.js.map +1 -1
  597. package/settings/IdentityProvidersSection.js +1 -1
  598. package/settings/IdentityProvidersSection.js.map +1 -1
  599. package/settings/InvitationsSection.js +1 -1
  600. package/settings/InvitationsSection.js.map +1 -1
  601. package/settings/MembersSection.js +1 -1
  602. package/settings/MembersSection.js.map +1 -1
  603. package/settings/OAuthAppsSection.js +1 -1
  604. package/settings/OAuthAppsSection.js.map +1 -1
  605. package/settings/OrgProfileSection.js +1 -1
  606. package/settings/OrgProfileSection.js.map +1 -1
  607. package/settings/PlatformClientsSection.js +1 -1
  608. package/settings/PlatformClientsSection.js.map +1 -1
  609. package/settings/UsageSection.js +1 -1
  610. package/settings/UsageSection.js.map +1 -1
  611. package/sharing/AgentShareList.js +5 -5
  612. package/sharing/AgentShareList.js.map +1 -1
  613. package/sharing/ShareAgentDialog.js +30 -30
  614. package/sharing/ShareAgentDialog.js.map +1 -1
  615. package/sharing/SharedAgentChat.js +6 -6
  616. package/sharing/SharedAgentChat.js.map +1 -1
  617. package/sidebar/SettingsSidebar.js +5 -5
  618. package/sidebar/SettingsSidebar.js.map +1 -1
  619. package/sidebar/WorkspaceSidebar.js +13 -13
  620. package/sidebar/WorkspaceSidebar.js.map +1 -1
  621. package/sidebar/chrome.js +5 -5
  622. package/sidebar/chrome.js.map +1 -1
  623. package/skill/SkillDetailView.js +13 -13
  624. package/skill/SkillDetailView.js.map +1 -1
  625. package/skill/SkillDiffDialog.js +2 -2
  626. package/skill/SkillDiffDialog.js.map +1 -1
  627. package/skill/SkillFileBrowser.js +4 -4
  628. package/skill/SkillFileBrowser.js.map +1 -1
  629. package/skill/SkillPicker.js +10 -10
  630. package/skill/SkillPicker.js.map +1 -1
  631. package/skill/SkillUploader.js +8 -8
  632. package/skill/SkillUploader.js.map +1 -1
  633. package/src/__tests__/helpers/compile-sdk-styles.ts +33 -0
  634. package/src/__tests__/portal-container.test.tsx +97 -0
  635. package/src/__tests__/preflight-parity.layout.test.tsx +156 -0
  636. package/src/__tests__/scope-unprefixed.test.ts +86 -0
  637. package/src/__tests__/styles-border-layer-invariant.test.ts +86 -58
  638. package/src/__tests__/styles-dist-isolation.test.ts +195 -0
  639. package/src/__tests__/styles-host-isolation.layout.test.tsx +204 -0
  640. package/src/access/ManageAccessButton.tsx +3 -3
  641. package/src/access/ManageAccessDialog.tsx +19 -19
  642. package/src/action-menu/ActionMenu.tsx +8 -8
  643. package/src/activity/useRecentActivity.ts +6 -1
  644. package/src/agent/AgentDetailView.tsx +112 -112
  645. package/src/agent/AgentPicker.tsx +26 -26
  646. package/src/agent/steps/CapabilitiesStep.tsx +36 -36
  647. package/src/agent/steps/IdentityStep.tsx +45 -45
  648. package/src/agent/steps/ReviewStep.tsx +18 -18
  649. package/src/agent-instance/AgentInstanceDetailPanel.tsx +45 -45
  650. package/src/agent-instance/AgentInstanceList.tsx +36 -36
  651. package/src/agent-instance/CreateAgentInstanceDialog.tsx +35 -35
  652. package/src/agent-instance/__tests__/AgentInstanceList.test.tsx +0 -6
  653. package/src/api-key/ApiKeyCreatedAlert.tsx +15 -15
  654. package/src/api-key/ApiKeyListPanel.tsx +28 -28
  655. package/src/api-key/CreateApiKeyForm.tsx +25 -25
  656. package/src/attachment/AttachmentChipList.tsx +321 -75
  657. package/src/attachment/AttachmentImageLightbox.tsx +154 -0
  658. package/src/attachment/__tests__/AttachmentChipList.test.tsx +240 -17
  659. package/src/attachment/attachment-utils.ts +8 -5
  660. package/src/attachment/useObjectUrl.ts +28 -0
  661. package/src/billing/AutoRechargeCard.tsx +26 -26
  662. package/src/billing/BillingSection.tsx +14 -14
  663. package/src/billing/CreditBalanceCard.tsx +7 -7
  664. package/src/billing/CreditLedgerTable.tsx +27 -27
  665. package/src/billing/CreditPackGrid.tsx +13 -13
  666. package/src/billing/LowBalanceBanner.tsx +6 -6
  667. package/src/billing/PaymentMethodCard.tsx +13 -13
  668. package/src/button/Button.tsx +10 -10
  669. package/src/button/__tests__/Button.test.tsx +9 -9
  670. package/src/channel/AgentChannelsPanel.tsx +33 -33
  671. package/src/channel/ChannelConversationsDialog.tsx +21 -21
  672. package/src/channel/ChannelCredentialsDialog.tsx +13 -13
  673. package/src/channel/ChannelTemplatesDialog.tsx +34 -34
  674. package/src/channel/ChannelToolCredentials.tsx +5 -5
  675. package/src/channel/ConnectSlackDialog.tsx +48 -48
  676. package/src/channel/ConnectWhatsAppDialog.tsx +42 -42
  677. package/src/channel/__tests__/AgentChannelsPanel.test.tsx +4 -9
  678. package/src/channel/connect/ServingAppSection.tsx +14 -14
  679. package/src/channel/connect/ToolCredentialsSection.tsx +5 -5
  680. package/src/channel/connect/VerbatimRefusal.tsx +1 -1
  681. package/src/channel/connect/icons.tsx +1 -1
  682. package/src/channel-app/ChannelAppDetailPanel.tsx +44 -44
  683. package/src/channel-app/ChannelAppListPanel.tsx +15 -15
  684. package/src/channel-app/CreateChannelAppForm.tsx +37 -37
  685. package/src/channel-app/internal.tsx +21 -21
  686. package/src/composer/ComposerToolbar.tsx +15 -15
  687. package/src/composer/ConfigureMenu.tsx +22 -22
  688. package/src/composer/ContextChip.tsx +12 -12
  689. package/src/composer/ContextPopover.tsx +8 -8
  690. package/src/composer/InteractionModePicker.tsx +14 -14
  691. package/src/composer/SessionComposer.tsx +24 -24
  692. package/src/composer/__tests__/SessionComposer-lockAgent.test.tsx +16 -15
  693. package/src/composer/__tests__/SessionComposer-serviceTier.test.tsx +2 -7
  694. package/src/composer/icons.tsx +5 -5
  695. package/src/conversation/ConversationAttentionBanner.tsx +6 -6
  696. package/src/conversation/ConversationComposer.tsx +13 -13
  697. package/src/conversation/ConversationControlBanner.tsx +11 -11
  698. package/src/conversation/ConversationListPane.tsx +38 -38
  699. package/src/conversation/ConversationMediaAttachment.tsx +308 -0
  700. package/src/conversation/ConversationTimelineView.tsx +102 -52
  701. package/src/conversation/ConversationsWorkbench.tsx +12 -10
  702. package/src/conversation/__tests__/ConversationComposer.test.tsx +1 -1
  703. package/src/conversation/__tests__/ConversationTimelineView.test.tsx +233 -6
  704. package/src/conversation/__tests__/a11y/conversation-surfaces.a11y.test.tsx +67 -1
  705. package/src/conversation/__tests__/useConversationMediaUrl.test.tsx +66 -0
  706. package/src/conversation/conversationPresentation.ts +10 -3
  707. package/src/conversation/index.ts +6 -0
  708. package/src/conversation/useConversationMediaUrl.ts +121 -0
  709. package/src/cursor-accounts/CursorAccountEditor.tsx +13 -13
  710. package/src/cursor-accounts/CursorAccountsAccessNotice.tsx +3 -3
  711. package/src/cursor-accounts/CursorAccountsConsole.tsx +35 -35
  712. package/src/cursor-accounts/MemberCoverageTable.tsx +29 -29
  713. package/src/cursor-accounts/MemberKeysPanel.tsx +17 -17
  714. package/src/cursor-accounts/badges.tsx +4 -4
  715. package/src/dashboard/DashboardFailedRuns.tsx +17 -17
  716. package/src/dashboard/DashboardKPICards.tsx +12 -12
  717. package/src/dashboard/OperationalDashboard.tsx +2 -2
  718. package/src/datastore/CollectionRecordsBrowser.tsx +35 -35
  719. package/src/datastore/CollectionSchemaView.tsx +43 -43
  720. package/src/datastore/DatastoreDetailView.tsx +18 -18
  721. package/src/datastore/DatastoreSyncReport.tsx +13 -13
  722. package/src/datastore/DeleteDatastoreDialog.tsx +21 -21
  723. package/src/datastore/FieldValueControl.tsx +7 -7
  724. package/src/datastore/RecordFilterBuilder.tsx +35 -35
  725. package/src/datastore/RecordFormPanel.tsx +35 -35
  726. package/src/dependency-graph/DependencyGraph.tsx +6 -6
  727. package/src/dependency-graph/DependencyTreeNode.tsx +21 -21
  728. package/src/empty-state/EmptyState.tsx +7 -7
  729. package/src/empty-state/useEmptyState.ts +1 -1
  730. package/src/environment/CreateEnvironmentForm.tsx +24 -24
  731. package/src/environment/EnvVarForm.tsx +40 -40
  732. package/src/environment/EnvironmentListPanel.tsx +19 -19
  733. package/src/environment/EnvironmentPicker.tsx +22 -22
  734. package/src/environment/EnvironmentVariableEditor.tsx +53 -53
  735. package/src/error/ErrorMessage.tsx +22 -22
  736. package/src/error/SecretFlowErrorGuide.tsx +19 -19
  737. package/src/execution/ApprovalCard.tsx +19 -19
  738. package/src/execution/ArtifactApplyButton.tsx +7 -7
  739. package/src/execution/ArtifactContentBody.tsx +11 -11
  740. package/src/execution/ArtifactContentRenderer.tsx +29 -29
  741. package/src/execution/ArtifactDocument.tsx +22 -22
  742. package/src/execution/ArtifactFileContent.tsx +6 -6
  743. package/src/execution/ArtifactPreviewModal.tsx +33 -33
  744. package/src/execution/ArtifactRowView.tsx +13 -13
  745. package/src/execution/ArtifactsWidget.tsx +4 -4
  746. package/src/execution/ContextGauge.tsx +24 -24
  747. package/src/execution/EmptyChangeNotice.tsx +1 -1
  748. package/src/execution/ExecutionPhaseBadge.tsx +12 -12
  749. package/src/execution/ExecutionProgress.tsx +2 -2
  750. package/src/execution/FileChangeProgressBar.tsx +9 -9
  751. package/src/execution/FileChangesView.tsx +12 -12
  752. package/src/execution/FilePathLink.tsx +10 -10
  753. package/src/execution/FileReviewAtoms.tsx +9 -9
  754. package/src/execution/FileReviewCard.tsx +37 -37
  755. package/src/execution/FileReviewDock.tsx +2 -2
  756. package/src/execution/FollowUpInput.tsx +9 -9
  757. package/src/execution/InteractionModeBadge.tsx +2 -2
  758. package/src/execution/McpToolDetail.tsx +28 -28
  759. package/src/execution/MessageAttachments.tsx +364 -0
  760. package/src/execution/MessageEntry.tsx +60 -22
  761. package/src/execution/MessageThread.tsx +72 -32
  762. package/src/execution/PlanArtifactCard.tsx +22 -22
  763. package/src/execution/PlanCompletionCard.tsx +10 -10
  764. package/src/execution/PlanDocumentMessage.tsx +6 -6
  765. package/src/execution/PlanStreamingCard.tsx +11 -11
  766. package/src/execution/ResultView.tsx +44 -44
  767. package/src/execution/SessionVariablesInput.tsx +38 -38
  768. package/src/execution/SetupProgress.tsx +5 -5
  769. package/src/execution/SubAgentSection.tsx +42 -42
  770. package/src/execution/SummarizationBadge.tsx +15 -15
  771. package/src/execution/SummarizationCard.tsx +11 -11
  772. package/src/execution/TerminalSession.tsx +7 -7
  773. package/src/execution/ThreadSkeleton.tsx +10 -10
  774. package/src/execution/TodoCard.tsx +11 -11
  775. package/src/execution/TodoList.tsx +13 -13
  776. package/src/execution/ToolArgsView.tsx +8 -8
  777. package/src/execution/ToolCallDetail.tsx +7 -7
  778. package/src/execution/ToolCallGroup.tsx +1 -1
  779. package/src/execution/ToolCallItem.tsx +28 -28
  780. package/src/execution/ToolRunGroup.tsx +16 -16
  781. package/src/execution/UsageWidget.tsx +12 -12
  782. package/src/execution/WriteBackCard.tsx +30 -30
  783. package/src/execution/WriteBacksWidget.tsx +4 -4
  784. package/src/execution/__tests__/ApprovalCard.test.tsx +12 -12
  785. package/src/execution/__tests__/ArtifactContentRenderer.test.tsx +3 -3
  786. package/src/execution/__tests__/FileChangesView.test.tsx +2 -2
  787. package/src/execution/__tests__/FilePathLink.test.tsx +1 -1
  788. package/src/execution/__tests__/FileReviewDock.test.tsx +1 -1
  789. package/src/execution/__tests__/MessageEntry-attachments.test.tsx +228 -0
  790. package/src/execution/__tests__/MessageThread.test.tsx +1 -1
  791. package/src/execution/__tests__/TerminalSession.test.tsx +1 -1
  792. package/src/execution/__tests__/ToolCallDetail.test.tsx +1 -1
  793. package/src/execution/__tests__/ToolCallGroup.test.tsx +4 -4
  794. package/src/execution/__tests__/ToolCallItem.test.tsx +9 -9
  795. package/src/execution/__tests__/ToolRunGroup.test.tsx +6 -6
  796. package/src/execution/__tests__/WriteBackCard.test.tsx +4 -4
  797. package/src/execution/__tests__/buildThreadItems-attachments.test.ts +174 -0
  798. package/src/execution/__tests__/message-entry.test.tsx +8 -8
  799. package/src/execution/__tests__/thread-memoization.test.ts +2 -2
  800. package/src/execution/__tests__/thread-skeleton.test.tsx +1 -1
  801. package/src/execution/__tests__/virtualized-thread.test.tsx +1 -1
  802. package/src/execution/index.ts +6 -0
  803. package/src/execution/tool-rendering-primitives.tsx +12 -12
  804. package/src/feedback/StigmerToaster.tsx +8 -5
  805. package/src/file-reference/FileReferenceChipList.tsx +5 -5
  806. package/src/github/GitHubRepoPicker.tsx +60 -60
  807. package/src/github/__tests__/decodeGitHubContent.test.ts +42 -1
  808. package/src/github/decodeGitHubContent.ts +22 -5
  809. package/src/github/useGitHubFileReader.ts +13 -3
  810. package/src/iam-policy/GrantAccessForm.tsx +11 -11
  811. package/src/iam-policy/OrgMembersPanel.tsx +48 -48
  812. package/src/iam-policy/PeopleWithAccess.tsx +23 -23
  813. package/src/iam-policy/PrincipalPicker.tsx +34 -34
  814. package/src/iam-policy/ProviderBadge.tsx +2 -2
  815. package/src/iam-policy/RoleSelector.tsx +9 -9
  816. package/src/iam-policy/SharePanel.tsx +5 -5
  817. package/src/identity-provider/CreateIdentityProviderForm.tsx +47 -47
  818. package/src/identity-provider/IdentityProviderDetailPanel.tsx +73 -73
  819. package/src/identity-provider/IdentityProviderListPanel.tsx +33 -33
  820. package/src/identity-provider/IdentityProviderWizard.tsx +72 -72
  821. package/src/identity-provider/ProviderPicker.tsx +17 -17
  822. package/src/identity-provider/SsoLoginPrompt.tsx +39 -39
  823. package/src/index.ts +6 -0
  824. package/src/inline-edit/InlineEditImage.tsx +26 -26
  825. package/src/inline-edit/InlineEditKeyValue.tsx +44 -44
  826. package/src/inline-edit/InlineEditResourceList.tsx +48 -48
  827. package/src/inline-edit/InlineEditSelect.tsx +22 -22
  828. package/src/inline-edit/InlineEditText.tsx +29 -29
  829. package/src/inline-edit/InlineEditTextarea.tsx +27 -27
  830. package/src/internal/ApprovalPeekBar.tsx +9 -9
  831. package/src/internal/BoundedContent.tsx +3 -3
  832. package/src/internal/CloudFeatureNotice.tsx +3 -3
  833. package/src/internal/DecisionButton.tsx +10 -10
  834. package/src/internal/InCardDecisionError.tsx +1 -1
  835. package/src/internal/JumpToLatestButton.tsx +9 -9
  836. package/src/internal/MermaidDiagram.tsx +5 -5
  837. package/src/internal/Pagination.tsx +5 -5
  838. package/src/internal/ResizableSplit.tsx +61 -20
  839. package/src/internal/RevealToggle.tsx +5 -5
  840. package/src/internal/ScrollFade.tsx +2 -2
  841. package/src/internal/VirtualizedThread.tsx +6 -6
  842. package/src/internal/__tests__/BoundedContent.test.tsx +1 -1
  843. package/src/internal/__tests__/DecisionButton.test.tsx +14 -14
  844. package/src/internal/__tests__/ResizableSplit.layout.test.tsx +136 -0
  845. package/src/internal/__tests__/ResizableSplit.test.tsx +49 -2
  846. package/src/internal/__tests__/ThreadCardShell.test.tsx +4 -4
  847. package/src/internal/__tests__/markdown-components.test.tsx +2 -2
  848. package/src/internal/__tests__/thread-animation.test.tsx +6 -6
  849. package/src/internal/file-icons/index.tsx +2 -2
  850. package/src/internal/file-tree/FileTreeNode.tsx +9 -9
  851. package/src/internal/file-tree/__tests__/FileTreeNode-explorer.test.tsx +1 -1
  852. package/src/internal/form-primitives.tsx +22 -6
  853. package/src/internal/markdown-components.tsx +24 -24
  854. package/src/internal/menu.tsx +18 -18
  855. package/src/internal/scroll-area.tsx +6 -6
  856. package/src/internal/thread-card/ThreadCardShell.tsx +10 -10
  857. package/src/internal/thread-card/glyphs.tsx +3 -3
  858. package/src/internal/tooltip.tsx +9 -11
  859. package/src/invitation/InvitationCreatedAlert.tsx +15 -15
  860. package/src/invitation/InvitationManager.tsx +79 -79
  861. package/src/invitation/InvitationRedemption.tsx +49 -49
  862. package/src/library/ResourceCountCard.tsx +7 -7
  863. package/src/library/ScopeToggle.tsx +7 -7
  864. package/src/library/VisibilityOptionRow.tsx +30 -30
  865. package/src/library/VisibilitySelector.tsx +19 -19
  866. package/src/library/__tests__/VisibilitySelector.test.tsx +0 -6
  867. package/src/manifest/ApplyManifestDialog.tsx +36 -36
  868. package/src/manifest/EditResourceYamlDialog.tsx +32 -32
  869. package/src/manifest/RedactedSecretsNotice.tsx +2 -2
  870. package/src/manifest/YamlEditor.tsx +1 -1
  871. package/src/mcp-server/McpServerConfigPanel.tsx +70 -70
  872. package/src/mcp-server/McpServerConnectDialog.tsx +80 -53
  873. package/src/mcp-server/McpServerDetailView.tsx +325 -224
  874. package/src/mcp-server/McpServerPicker.tsx +50 -50
  875. package/src/mcp-server/McpToolSelector.tsx +26 -26
  876. package/src/mcp-server/OAuthAppForm.tsx +32 -32
  877. package/src/mcp-server/OAuthCallbackHandler.tsx +11 -11
  878. package/src/mcp-server/OAuthRequiredNotice.tsx +3 -3
  879. package/src/mcp-server/StdioSandboxNotice.tsx +3 -3
  880. package/src/mcp-server/__tests__/McpServerDetailView.test.tsx +162 -7
  881. package/src/mcp-server/__tests__/useMcpServerOAuthConnect.test.tsx +159 -0
  882. package/src/mcp-server/index.ts +4 -1
  883. package/src/mcp-server/steps/EnvironmentAuthStep.tsx +71 -71
  884. package/src/mcp-server/steps/IdentityTransportStep.tsx +94 -94
  885. package/src/mcp-server/steps/ReviewStep.tsx +17 -17
  886. package/src/mcp-server/useMcpServerOAuthConnect.ts +65 -10
  887. package/src/models/HarnessSelector.tsx +8 -8
  888. package/src/models/ModelSelector.tsx +58 -58
  889. package/src/models/__tests__/ModelSelector-serviceTier.test.tsx +2 -7
  890. package/src/oauth-app/CreateOAuthAppForm.tsx +28 -28
  891. package/src/oauth-app/OAuthAppDetailPanel.tsx +51 -51
  892. package/src/oauth-app/OAuthAppListPanel.tsx +14 -14
  893. package/src/organization/CreateOrganizationForm.tsx +37 -37
  894. package/src/organization/OrgProfilePanel.tsx +65 -65
  895. package/src/organization/OrgSwitcher.tsx +33 -33
  896. package/src/platform-client/CreatePlatformClientForm.tsx +59 -59
  897. package/src/platform-client/PlatformClientDetailPanel.tsx +107 -107
  898. package/src/platform-client/PlatformClientListPanel.tsx +38 -38
  899. package/src/platform-client/PlatformClientSecretAlert.tsx +18 -18
  900. package/src/portal-container.ts +36 -9
  901. package/src/pricing-governance/BaselineEditor.tsx +29 -29
  902. package/src/pricing-governance/ModelCatalogPanel.tsx +28 -28
  903. package/src/pricing-governance/ModelGovernanceDetail.tsx +35 -35
  904. package/src/pricing-governance/OperatorAccessNotice.tsx +3 -3
  905. package/src/pricing-governance/PricingGovernanceConsole.tsx +31 -31
  906. package/src/pricing-governance/PricingGovernancePanel.tsx +19 -19
  907. package/src/pricing-governance/RetireConfirm.tsx +7 -7
  908. package/src/pricing-governance/governance-primitives.tsx +12 -12
  909. package/src/resource-creation/CreationPicker.tsx +23 -23
  910. package/src/resource-creation/StepIndicator.tsx +17 -17
  911. package/src/resource-creation/TemplateCard.tsx +23 -23
  912. package/src/resource-creation/TemplateGallery.tsx +13 -13
  913. package/src/resource-creation/WizardNav.tsx +19 -19
  914. package/src/resource-creation/WizardShell.tsx +7 -7
  915. package/src/resource-detail/ConfirmDialog.tsx +16 -16
  916. package/src/resource-detail/ResourceActionBar.tsx +6 -6
  917. package/src/resource-detail/ResourceDetailShell.tsx +14 -14
  918. package/src/resource-detail/Section.tsx +10 -10
  919. package/src/resource-workbench/components/BulkActionBar.tsx +13 -13
  920. package/src/resource-workbench/components/ColumnHeader.tsx +9 -9
  921. package/src/resource-workbench/components/FilterBar.tsx +9 -9
  922. package/src/resource-workbench/components/ResourceAvatar.tsx +19 -19
  923. package/src/resource-workbench/components/ResourceCards.tsx +8 -8
  924. package/src/resource-workbench/components/ResourceInspector.tsx +8 -8
  925. package/src/resource-workbench/components/ResourceList.tsx +7 -7
  926. package/src/resource-workbench/components/ResourceTable.tsx +12 -12
  927. package/src/resource-workbench/components/ResourceWorkbench.tsx +42 -42
  928. package/src/resource-workbench/components/SelectionCheckbox.tsx +2 -2
  929. package/src/resource-workbench/components/StatusBadge.tsx +17 -17
  930. package/src/resource-workbench/components/ViewSwitcher.tsx +7 -7
  931. package/src/schedule/CadenceField.tsx +36 -36
  932. package/src/schedule/ScheduleDetailView.tsx +105 -105
  933. package/src/schedule/ScheduleForm.tsx +49 -49
  934. package/src/schedule/ScheduleRowActions.tsx +4 -4
  935. package/src/schedule/ScheduleRunsTable.tsx +43 -43
  936. package/src/schedule/TimeZoneField.tsx +12 -12
  937. package/src/schedule/__tests__/scheduleCreation.test.tsx +0 -7
  938. package/src/schedule/scheduleColumns.tsx +7 -7
  939. package/src/session/NewSessionViewer.tsx +5 -5
  940. package/src/session/PlanEditor.tsx +37 -37
  941. package/src/session/PlanStreamingDocument.tsx +8 -8
  942. package/src/session/SessionViewer.tsx +49 -48
  943. package/src/session/SessionViewerLayout.tsx +14 -11
  944. package/src/session/__tests__/NewSessionViewer.test.tsx +4 -4
  945. package/src/session/__tests__/PlanEditor.test.tsx +2 -2
  946. package/src/session/__tests__/SessionViewerLayout.test.tsx +20 -8
  947. package/src/session/__tests__/useSessionConversation.test.tsx +62 -0
  948. package/src/session/facets/ArtifactsTab.tsx +3 -3
  949. package/src/session/facets/ChangesTab.tsx +5 -5
  950. package/src/session/facets/SetupTab.tsx +26 -26
  951. package/src/session/facets/UsageTab.tsx +2 -2
  952. package/src/session/useSessionConversation.ts +21 -2
  953. package/src/settings/ApiKeysSection.tsx +6 -6
  954. package/src/settings/ChannelAppsSection.tsx +6 -6
  955. package/src/settings/EnvironmentsSection.tsx +15 -15
  956. package/src/settings/IdentityProvidersSection.tsx +7 -7
  957. package/src/settings/InvitationsSection.tsx +4 -4
  958. package/src/settings/MembersSection.tsx +5 -5
  959. package/src/settings/OAuthAppsSection.tsx +6 -6
  960. package/src/settings/OrgProfileSection.tsx +3 -3
  961. package/src/settings/PlatformClientsSection.tsx +7 -7
  962. package/src/settings/UsageSection.tsx +3 -3
  963. package/src/sharing/AgentShareList.tsx +39 -39
  964. package/src/sharing/ShareAgentDialog.tsx +149 -149
  965. package/src/sharing/SharedAgentChat.tsx +24 -24
  966. package/src/sharing/__tests__/AgentShareList.test.tsx +0 -7
  967. package/src/sidebar/SettingsSidebar.tsx +7 -7
  968. package/src/sidebar/WorkspaceSidebar.tsx +25 -25
  969. package/src/sidebar/__tests__/SettingsSidebar.test.tsx +3 -7
  970. package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -11
  971. package/src/sidebar/chrome.tsx +16 -16
  972. package/src/skill/SkillDetailView.tsx +54 -54
  973. package/src/skill/SkillDiffDialog.tsx +25 -25
  974. package/src/skill/SkillFileBrowser.tsx +22 -22
  975. package/src/skill/SkillPicker.tsx +28 -28
  976. package/src/skill/SkillUploader.tsx +67 -67
  977. package/src/styles.css +136 -15
  978. package/src/switch/Switch.tsx +9 -9
  979. package/src/switch/__tests__/Switch.test.tsx +3 -3
  980. package/src/tabs/Tabs.tsx +11 -11
  981. package/src/usage/AgentBreakdownList.tsx +18 -18
  982. package/src/usage/CreditRunwayIndicator.tsx +4 -4
  983. package/src/usage/ExportButton.tsx +8 -8
  984. package/src/usage/HarnessSplitCard.tsx +14 -14
  985. package/src/usage/OrgUsagePanel.tsx +71 -71
  986. package/src/user/UserMenu.tsx +13 -13
  987. package/src/version-history/DiffFileList.tsx +13 -13
  988. package/src/version-history/DiffSummary.tsx +3 -3
  989. package/src/version-history/DiffViewer.tsx +14 -14
  990. package/src/version-history/MultiFileDiffView.tsx +6 -6
  991. package/src/version-history/UnifiedDiffView.tsx +4 -4
  992. package/src/version-history/VersionTimeline.tsx +21 -21
  993. package/src/version-history/VersionTimelineEntry.tsx +28 -28
  994. package/src/version-history/__tests__/UnifiedDiffView.test.tsx +2 -2
  995. package/src/workflow/ApprovalFormBuilder.tsx +48 -48
  996. package/src/workflow/BranchConditionBuilder.tsx +21 -21
  997. package/src/workflow/CanvasContextMenu.tsx +10 -10
  998. package/src/workflow/CanvasTransitionEdge.tsx +16 -16
  999. package/src/workflow/CostByWorkflowChart.tsx +18 -18
  1000. package/src/workflow/ExecutionActiveTaskIndicator.tsx +13 -13
  1001. package/src/workflow/ExecutionSummaryWidget.tsx +29 -29
  1002. package/src/workflow/ExecutionTrendChart.tsx +25 -25
  1003. package/src/workflow/FailedRunsWidget.tsx +14 -14
  1004. package/src/workflow/PendingApprovalsWidget.tsx +19 -19
  1005. package/src/workflow/TaskConfigForm.tsx +32 -32
  1006. package/src/workflow/TaskPickerPopover.tsx +22 -22
  1007. package/src/workflow/ViewYamlDialog.tsx +12 -12
  1008. package/src/workflow/WorkflowAgentCallTranscript.tsx +15 -15
  1009. package/src/workflow/WorkflowApprovalList.tsx +3 -3
  1010. package/src/workflow/WorkflowArchitectDialog.tsx +80 -80
  1011. package/src/workflow/WorkflowArtifactDocument.tsx +17 -17
  1012. package/src/workflow/WorkflowCanvasEditor.tsx +22 -22
  1013. package/src/workflow/WorkflowCanvasInner.tsx +3 -3
  1014. package/src/workflow/WorkflowCodePreviewGraph.tsx +2 -2
  1015. package/src/workflow/WorkflowDashboard.tsx +2 -2
  1016. package/src/workflow/WorkflowDetailView.tsx +50 -50
  1017. package/src/workflow/WorkflowDiffGraph.tsx +5 -5
  1018. package/src/workflow/WorkflowEditorView.tsx +58 -58
  1019. package/src/workflow/WorkflowExecutionGraph.tsx +15 -15
  1020. package/src/workflow/WorkflowExecutionHeader.tsx +14 -14
  1021. package/src/workflow/WorkflowExecutionPhaseBadge.tsx +11 -11
  1022. package/src/workflow/WorkflowExecutionViewer.tsx +39 -39
  1023. package/src/workflow/WorkflowExplainDialog.tsx +30 -30
  1024. package/src/workflow/WorkflowFileReviewList.tsx +3 -3
  1025. package/src/workflow/WorkflowGraphFullscreenDialog.tsx +11 -11
  1026. package/src/workflow/WorkflowNode.tsx +2 -2
  1027. package/src/workflow/WorkflowNodePopover.tsx +15 -15
  1028. package/src/workflow/WorkflowOverviewGraph.tsx +9 -9
  1029. package/src/workflow/WorkflowOverviewSummary.tsx +12 -12
  1030. package/src/workflow/WorkflowRefinePanel.tsx +49 -49
  1031. package/src/workflow/WorkflowRepairCard.tsx +53 -53
  1032. package/src/workflow/WorkflowRunDialog.tsx +20 -20
  1033. package/src/workflow/WorkflowRunForm.tsx +19 -19
  1034. package/src/workflow/WorkflowTaskApprovalCard.tsx +19 -19
  1035. package/src/workflow/WorkflowTaskApprovalSummary.tsx +23 -23
  1036. package/src/workflow/WorkflowTaskList.tsx +11 -11
  1037. package/src/workflow/WorkflowTaskPalette.tsx +23 -23
  1038. package/src/workflow/WorkflowTaskReviewGate.tsx +10 -10
  1039. package/src/workflow/WorkflowVersionBadge.tsx +7 -7
  1040. package/src/workflow/WorkflowVersionDiffViewer.tsx +24 -24
  1041. package/src/workflow/WorkflowVersionTimeline.tsx +32 -32
  1042. package/src/workflow/WorkflowVersionsTab.tsx +7 -7
  1043. package/src/workflow/__tests__/WorkflowAgentCallTranscript.test.tsx +2 -2
  1044. package/src/workflow/__tests__/WorkflowExecutionViewer.reconciliation.test.tsx +6 -6
  1045. package/src/workflow/__tests__/WorkflowTaskApprovalCard.test.tsx +15 -15
  1046. package/src/workflow/__tests__/WorkflowTaskApprovalSummary.test.tsx +1 -1
  1047. package/src/workflow/__tests__/node-shell.test.ts +2 -0
  1048. package/src/workflow/__tests__/task-type-visual-registry.test.ts +2 -0
  1049. package/src/workflow/diff/DiffSummaryBar.tsx +5 -5
  1050. package/src/workflow/execution-comparison/ComparisonSummaryCards.tsx +11 -11
  1051. package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +20 -20
  1052. package/src/workflow/execution-comparison/ExecutionComparisonView.tsx +16 -16
  1053. package/src/workflow/execution-comparison/TaskComparisonTable.tsx +44 -44
  1054. package/src/workflow/execution-history/ExecutionFilterBar.tsx +12 -12
  1055. package/src/workflow/execution-history/ExecutionHistoryTable.tsx +25 -25
  1056. package/src/workflow/execution-history/FailureAnalysisPanel.tsx +18 -18
  1057. package/src/workflow/execution-history/HealthMetricsStrip.tsx +16 -16
  1058. package/src/workflow/execution-history/WorkflowExecutionHistory.tsx +1 -1
  1059. package/src/workflow/facets/WorkflowArtifactsTab.tsx +3 -3
  1060. package/src/workflow/facets/WorkflowChangesTab.tsx +8 -8
  1061. package/src/workflow/facets/WorkflowUsageTab.tsx +24 -24
  1062. package/src/workflow/inspector/EdgeInspector.tsx +14 -14
  1063. package/src/workflow/inspector/InspectorHeader.tsx +18 -18
  1064. package/src/workflow/inspector/InspectorShell.tsx +6 -6
  1065. package/src/workflow/inspector/NestedTaskList.tsx +11 -11
  1066. package/src/workflow/inspector/SentinelInspector.tsx +3 -3
  1067. package/src/workflow/inspector/WorkflowSummaryPanel.tsx +33 -33
  1068. package/src/workflow/inspector/forms/AgentCallForm.tsx +48 -48
  1069. package/src/workflow/inspector/forms/HttpCallForm.tsx +22 -22
  1070. package/src/workflow/inspector/tabs/AdvancedTab.tsx +12 -12
  1071. package/src/workflow/inspector/tabs/BranchesTab.tsx +36 -36
  1072. package/src/workflow/inspector/tabs/CatchTab.tsx +23 -23
  1073. package/src/workflow/inspector/tabs/ConfigureTab.tsx +3 -3
  1074. package/src/workflow/inspector/tabs/DataTab.tsx +6 -6
  1075. package/src/workflow/inspector/tabs/DocsTab.tsx +11 -11
  1076. package/src/workflow/inspector/tabs/IterationTab.tsx +25 -25
  1077. package/src/workflow/inspector/tabs/RuntimeTab.tsx +16 -16
  1078. package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +35 -35
  1079. package/src/workflow/instance/RunVisibilityControl.tsx +10 -10
  1080. package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +45 -45
  1081. package/src/workflow/instance/WorkflowInstanceList.tsx +32 -32
  1082. package/src/workflow/instance/__tests__/WorkflowInstanceList.test.tsx +0 -6
  1083. package/src/workflow/node-shell/BranchBadge.tsx +9 -9
  1084. package/src/workflow/node-shell/DiffBadge.tsx +4 -4
  1085. package/src/workflow/node-shell/ExecutionBadge.tsx +17 -17
  1086. package/src/workflow/node-shell/NodeActions.tsx +15 -15
  1087. package/src/workflow/node-shell/NodeContent.tsx +9 -9
  1088. package/src/workflow/node-shell/NodeHandles.tsx +5 -5
  1089. package/src/workflow/node-shell/NodeShell.tsx +27 -27
  1090. package/src/workflow/picker/BranchAddPopover.tsx +16 -16
  1091. package/src/workflow/task-detail/StructuredDataViewer.tsx +34 -34
  1092. package/src/workflow/templates/WorkflowTemplateCard.tsx +32 -32
  1093. package/src/workflow/templates/WorkflowTemplateGallery.tsx +13 -13
  1094. package/src/workflow/templates/WorkflowTemplatePreview.tsx +29 -29
  1095. package/src/workflow/thread/WorkflowTaskThread.tsx +36 -36
  1096. package/src/workspace/EditorTabs.tsx +8 -8
  1097. package/src/workspace/ExplorerTree.tsx +17 -17
  1098. package/src/workspace/FileViewer.tsx +139 -30
  1099. package/src/workspace/PanelChip.tsx +4 -4
  1100. package/src/workspace/WorkspaceContentSearch.tsx +26 -26
  1101. package/src/workspace/WorkspaceEditor.tsx +44 -44
  1102. package/src/workspace/WorkspaceFileReader.ts +55 -1
  1103. package/src/workspace/WorkspaceFileSearch.tsx +22 -22
  1104. package/src/workspace/WorkspaceSummary.tsx +6 -6
  1105. package/src/workspace/WorkspaceSurface.tsx +42 -42
  1106. package/src/workspace/__tests__/FileViewer.test.tsx +99 -1
  1107. package/src/workspace/__tests__/WorkspaceContentSearch.test.tsx +5 -5
  1108. package/src/workspace/__tests__/WorkspaceFileSearch.test.tsx +3 -3
  1109. package/src/workspace/__tests__/WorkspaceSurface.test.tsx +6 -6
  1110. package/src/workspace/index.ts +2 -0
  1111. package/styles.css +1 -1
  1112. package/switch/Switch.js +2 -2
  1113. package/switch/Switch.js.map +1 -1
  1114. package/tabs/Tabs.js +7 -7
  1115. package/tabs/Tabs.js.map +1 -1
  1116. package/usage/AgentBreakdownList.js +4 -4
  1117. package/usage/AgentBreakdownList.js.map +1 -1
  1118. package/usage/CreditRunwayIndicator.js +1 -1
  1119. package/usage/CreditRunwayIndicator.js.map +1 -1
  1120. package/usage/ExportButton.js +2 -2
  1121. package/usage/ExportButton.js.map +1 -1
  1122. package/usage/HarnessSplitCard.js +6 -6
  1123. package/usage/HarnessSplitCard.js.map +1 -1
  1124. package/usage/OrgUsagePanel.js +15 -15
  1125. package/usage/OrgUsagePanel.js.map +1 -1
  1126. package/user/UserMenu.js +3 -3
  1127. package/user/UserMenu.js.map +1 -1
  1128. package/version-history/DiffFileList.js +8 -8
  1129. package/version-history/DiffFileList.js.map +1 -1
  1130. package/version-history/DiffSummary.js +1 -1
  1131. package/version-history/DiffSummary.js.map +1 -1
  1132. package/version-history/DiffViewer.js +11 -11
  1133. package/version-history/DiffViewer.js.map +1 -1
  1134. package/version-history/MultiFileDiffView.js +2 -2
  1135. package/version-history/MultiFileDiffView.js.map +1 -1
  1136. package/version-history/UnifiedDiffView.js +1 -1
  1137. package/version-history/UnifiedDiffView.js.map +1 -1
  1138. package/version-history/VersionTimeline.js +4 -4
  1139. package/version-history/VersionTimeline.js.map +1 -1
  1140. package/version-history/VersionTimelineEntry.js +9 -9
  1141. package/version-history/VersionTimelineEntry.js.map +1 -1
  1142. package/workflow/ApprovalFormBuilder.js +15 -15
  1143. package/workflow/ApprovalFormBuilder.js.map +1 -1
  1144. package/workflow/BranchConditionBuilder.js +8 -8
  1145. package/workflow/BranchConditionBuilder.js.map +1 -1
  1146. package/workflow/CanvasContextMenu.js +6 -6
  1147. package/workflow/CanvasContextMenu.js.map +1 -1
  1148. package/workflow/CanvasTransitionEdge.js +11 -11
  1149. package/workflow/CanvasTransitionEdge.js.map +1 -1
  1150. package/workflow/CostByWorkflowChart.js +4 -4
  1151. package/workflow/CostByWorkflowChart.js.map +1 -1
  1152. package/workflow/ExecutionActiveTaskIndicator.js +8 -8
  1153. package/workflow/ExecutionActiveTaskIndicator.js.map +1 -1
  1154. package/workflow/ExecutionSummaryWidget.js +15 -15
  1155. package/workflow/ExecutionSummaryWidget.js.map +1 -1
  1156. package/workflow/ExecutionTrendChart.js +10 -10
  1157. package/workflow/ExecutionTrendChart.js.map +1 -1
  1158. package/workflow/FailedRunsWidget.js +3 -3
  1159. package/workflow/FailedRunsWidget.js.map +1 -1
  1160. package/workflow/PendingApprovalsWidget.js +3 -3
  1161. package/workflow/PendingApprovalsWidget.js.map +1 -1
  1162. package/workflow/TaskConfigForm.js +12 -12
  1163. package/workflow/TaskConfigForm.js.map +1 -1
  1164. package/workflow/TaskPickerPopover.js +5 -5
  1165. package/workflow/TaskPickerPopover.js.map +1 -1
  1166. package/workflow/ViewYamlDialog.js +2 -2
  1167. package/workflow/ViewYamlDialog.js.map +1 -1
  1168. package/workflow/WorkflowAgentCallTranscript.js +2 -2
  1169. package/workflow/WorkflowAgentCallTranscript.js.map +1 -1
  1170. package/workflow/WorkflowApprovalList.js +2 -2
  1171. package/workflow/WorkflowApprovalList.js.map +1 -1
  1172. package/workflow/WorkflowArchitectDialog.js +9 -9
  1173. package/workflow/WorkflowArchitectDialog.js.map +1 -1
  1174. package/workflow/WorkflowArtifactDocument.js +7 -7
  1175. package/workflow/WorkflowArtifactDocument.js.map +1 -1
  1176. package/workflow/WorkflowCanvasEditor.js +6 -6
  1177. package/workflow/WorkflowCanvasEditor.js.map +1 -1
  1178. package/workflow/WorkflowCanvasInner.js +1 -1
  1179. package/workflow/WorkflowCanvasInner.js.map +1 -1
  1180. package/workflow/WorkflowCodePreviewGraph.js +2 -2
  1181. package/workflow/WorkflowCodePreviewGraph.js.map +1 -1
  1182. package/workflow/WorkflowDashboard.js +1 -1
  1183. package/workflow/WorkflowDashboard.js.map +1 -1
  1184. package/workflow/WorkflowDetailView.js +15 -15
  1185. package/workflow/WorkflowDetailView.js.map +1 -1
  1186. package/workflow/WorkflowDiffGraph.js +3 -3
  1187. package/workflow/WorkflowDiffGraph.js.map +1 -1
  1188. package/workflow/WorkflowEditorView.js +13 -13
  1189. package/workflow/WorkflowEditorView.js.map +1 -1
  1190. package/workflow/WorkflowExecutionGraph.js +6 -6
  1191. package/workflow/WorkflowExecutionGraph.js.map +1 -1
  1192. package/workflow/WorkflowExecutionHeader.js +4 -4
  1193. package/workflow/WorkflowExecutionHeader.js.map +1 -1
  1194. package/workflow/WorkflowExecutionPhaseBadge.js +9 -9
  1195. package/workflow/WorkflowExecutionPhaseBadge.js.map +1 -1
  1196. package/workflow/WorkflowExecutionViewer.js +16 -16
  1197. package/workflow/WorkflowExecutionViewer.js.map +1 -1
  1198. package/workflow/WorkflowExplainDialog.js +2 -2
  1199. package/workflow/WorkflowExplainDialog.js.map +1 -1
  1200. package/workflow/WorkflowFileReviewList.js +2 -2
  1201. package/workflow/WorkflowFileReviewList.js.map +1 -1
  1202. package/workflow/WorkflowGraphFullscreenDialog.js +1 -1
  1203. package/workflow/WorkflowGraphFullscreenDialog.js.map +1 -1
  1204. package/workflow/WorkflowNode.js +1 -1
  1205. package/workflow/WorkflowNode.js.map +1 -1
  1206. package/workflow/WorkflowNodePopover.js +2 -2
  1207. package/workflow/WorkflowNodePopover.js.map +1 -1
  1208. package/workflow/WorkflowOverviewGraph.js +4 -4
  1209. package/workflow/WorkflowOverviewGraph.js.map +1 -1
  1210. package/workflow/WorkflowOverviewSummary.js +8 -8
  1211. package/workflow/WorkflowOverviewSummary.js.map +1 -1
  1212. package/workflow/WorkflowRefinePanel.js +5 -5
  1213. package/workflow/WorkflowRefinePanel.js.map +1 -1
  1214. package/workflow/WorkflowRepairCard.js +5 -5
  1215. package/workflow/WorkflowRepairCard.js.map +1 -1
  1216. package/workflow/WorkflowRunDialog.js +2 -2
  1217. package/workflow/WorkflowRunDialog.js.map +1 -1
  1218. package/workflow/WorkflowRunForm.js +10 -10
  1219. package/workflow/WorkflowRunForm.js.map +1 -1
  1220. package/workflow/WorkflowTaskApprovalCard.js +1 -1
  1221. package/workflow/WorkflowTaskApprovalCard.js.map +1 -1
  1222. package/workflow/WorkflowTaskApprovalSummary.js +8 -8
  1223. package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
  1224. package/workflow/WorkflowTaskList.js +4 -4
  1225. package/workflow/WorkflowTaskList.js.map +1 -1
  1226. package/workflow/WorkflowTaskPalette.js +5 -5
  1227. package/workflow/WorkflowTaskPalette.js.map +1 -1
  1228. package/workflow/WorkflowTaskReviewGate.js +3 -3
  1229. package/workflow/WorkflowTaskReviewGate.js.map +1 -1
  1230. package/workflow/WorkflowVersionBadge.js +1 -1
  1231. package/workflow/WorkflowVersionBadge.js.map +1 -1
  1232. package/workflow/WorkflowVersionDiffViewer.js +12 -12
  1233. package/workflow/WorkflowVersionDiffViewer.js.map +1 -1
  1234. package/workflow/WorkflowVersionTimeline.js +7 -7
  1235. package/workflow/WorkflowVersionTimeline.js.map +1 -1
  1236. package/workflow/WorkflowVersionsTab.js +1 -1
  1237. package/workflow/WorkflowVersionsTab.js.map +1 -1
  1238. package/workflow/diff/DiffSummaryBar.js +2 -2
  1239. package/workflow/diff/DiffSummaryBar.js.map +1 -1
  1240. package/workflow/execution-comparison/ComparisonSummaryCards.js +1 -1
  1241. package/workflow/execution-comparison/ComparisonSummaryCards.js.map +1 -1
  1242. package/workflow/execution-comparison/ExecutionComparisonPicker.js +7 -7
  1243. package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
  1244. package/workflow/execution-comparison/ExecutionComparisonView.js +4 -4
  1245. package/workflow/execution-comparison/ExecutionComparisonView.js.map +1 -1
  1246. package/workflow/execution-comparison/TaskComparisonTable.js +22 -22
  1247. package/workflow/execution-comparison/TaskComparisonTable.js.map +1 -1
  1248. package/workflow/execution-history/ExecutionFilterBar.js +5 -5
  1249. package/workflow/execution-history/ExecutionFilterBar.js.map +1 -1
  1250. package/workflow/execution-history/ExecutionHistoryTable.js +11 -11
  1251. package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
  1252. package/workflow/execution-history/FailureAnalysisPanel.js +4 -4
  1253. package/workflow/execution-history/FailureAnalysisPanel.js.map +1 -1
  1254. package/workflow/execution-history/HealthMetricsStrip.js +8 -8
  1255. package/workflow/execution-history/HealthMetricsStrip.js.map +1 -1
  1256. package/workflow/execution-history/WorkflowExecutionHistory.js +1 -1
  1257. package/workflow/execution-history/WorkflowExecutionHistory.js.map +1 -1
  1258. package/workflow/facets/WorkflowArtifactsTab.js +2 -2
  1259. package/workflow/facets/WorkflowArtifactsTab.js.map +1 -1
  1260. package/workflow/facets/WorkflowChangesTab.js +5 -5
  1261. package/workflow/facets/WorkflowChangesTab.js.map +1 -1
  1262. package/workflow/facets/WorkflowUsageTab.js +6 -6
  1263. package/workflow/facets/WorkflowUsageTab.js.map +1 -1
  1264. package/workflow/inspector/EdgeInspector.js +1 -1
  1265. package/workflow/inspector/EdgeInspector.js.map +1 -1
  1266. package/workflow/inspector/InspectorHeader.js +7 -7
  1267. package/workflow/inspector/InspectorHeader.js.map +1 -1
  1268. package/workflow/inspector/InspectorShell.js +2 -2
  1269. package/workflow/inspector/InspectorShell.js.map +1 -1
  1270. package/workflow/inspector/NestedTaskList.js +2 -2
  1271. package/workflow/inspector/NestedTaskList.js.map +1 -1
  1272. package/workflow/inspector/SentinelInspector.js +1 -1
  1273. package/workflow/inspector/SentinelInspector.js.map +1 -1
  1274. package/workflow/inspector/WorkflowSummaryPanel.js +5 -5
  1275. package/workflow/inspector/WorkflowSummaryPanel.js.map +1 -1
  1276. package/workflow/inspector/forms/AgentCallForm.js +9 -9
  1277. package/workflow/inspector/forms/AgentCallForm.js.map +1 -1
  1278. package/workflow/inspector/forms/HttpCallForm.js +4 -4
  1279. package/workflow/inspector/forms/HttpCallForm.js.map +1 -1
  1280. package/workflow/inspector/tabs/AdvancedTab.js +2 -2
  1281. package/workflow/inspector/tabs/AdvancedTab.js.map +1 -1
  1282. package/workflow/inspector/tabs/BranchesTab.js +6 -6
  1283. package/workflow/inspector/tabs/BranchesTab.js.map +1 -1
  1284. package/workflow/inspector/tabs/CatchTab.js +2 -2
  1285. package/workflow/inspector/tabs/CatchTab.js.map +1 -1
  1286. package/workflow/inspector/tabs/ConfigureTab.js +3 -3
  1287. package/workflow/inspector/tabs/ConfigureTab.js.map +1 -1
  1288. package/workflow/inspector/tabs/DataTab.js +1 -1
  1289. package/workflow/inspector/tabs/DataTab.js.map +1 -1
  1290. package/workflow/inspector/tabs/DocsTab.js +1 -1
  1291. package/workflow/inspector/tabs/DocsTab.js.map +1 -1
  1292. package/workflow/inspector/tabs/IterationTab.js +3 -3
  1293. package/workflow/inspector/tabs/IterationTab.js.map +1 -1
  1294. package/workflow/inspector/tabs/RuntimeTab.js +9 -9
  1295. package/workflow/inspector/tabs/RuntimeTab.js.map +1 -1
  1296. package/workflow/instance/CreateWorkflowInstanceDialog.js +1 -1
  1297. package/workflow/instance/CreateWorkflowInstanceDialog.js.map +1 -1
  1298. package/workflow/instance/RunVisibilityControl.js +5 -5
  1299. package/workflow/instance/RunVisibilityControl.js.map +1 -1
  1300. package/workflow/instance/WorkflowInstanceDetailPanel.js +2 -2
  1301. package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
  1302. package/workflow/instance/WorkflowInstanceList.js +4 -4
  1303. package/workflow/instance/WorkflowInstanceList.js.map +1 -1
  1304. package/workflow/node-shell/BranchBadge.js +3 -3
  1305. package/workflow/node-shell/BranchBadge.js.map +1 -1
  1306. package/workflow/node-shell/DiffBadge.js +4 -4
  1307. package/workflow/node-shell/DiffBadge.js.map +1 -1
  1308. package/workflow/node-shell/ExecutionBadge.js +10 -10
  1309. package/workflow/node-shell/ExecutionBadge.js.map +1 -1
  1310. package/workflow/node-shell/NodeActions.js +3 -3
  1311. package/workflow/node-shell/NodeActions.js.map +1 -1
  1312. package/workflow/node-shell/NodeContent.js +5 -5
  1313. package/workflow/node-shell/NodeContent.js.map +1 -1
  1314. package/workflow/node-shell/NodeHandles.js +5 -5
  1315. package/workflow/node-shell/NodeHandles.js.map +1 -1
  1316. package/workflow/node-shell/NodeShell.js +14 -14
  1317. package/workflow/node-shell/NodeShell.js.map +1 -1
  1318. package/workflow/picker/BranchAddPopover.js +2 -2
  1319. package/workflow/picker/BranchAddPopover.js.map +1 -1
  1320. package/workflow/task-detail/StructuredDataViewer.js +12 -12
  1321. package/workflow/task-detail/StructuredDataViewer.js.map +1 -1
  1322. package/workflow/templates/WorkflowTemplateCard.js +17 -17
  1323. package/workflow/templates/WorkflowTemplateCard.js.map +1 -1
  1324. package/workflow/templates/WorkflowTemplateGallery.js +5 -5
  1325. package/workflow/templates/WorkflowTemplateGallery.js.map +1 -1
  1326. package/workflow/templates/WorkflowTemplatePreview.js +5 -5
  1327. package/workflow/templates/WorkflowTemplatePreview.js.map +1 -1
  1328. package/workflow/thread/WorkflowTaskThread.js +16 -16
  1329. package/workflow/thread/WorkflowTaskThread.js.map +1 -1
  1330. package/workspace/EditorTabs.js +5 -5
  1331. package/workspace/EditorTabs.js.map +1 -1
  1332. package/workspace/ExplorerTree.js +6 -6
  1333. package/workspace/ExplorerTree.js.map +1 -1
  1334. package/workspace/FileViewer.d.ts.map +1 -1
  1335. package/workspace/FileViewer.js +55 -17
  1336. package/workspace/FileViewer.js.map +1 -1
  1337. package/workspace/PanelChip.js +1 -1
  1338. package/workspace/PanelChip.js.map +1 -1
  1339. package/workspace/WorkspaceContentSearch.js +11 -11
  1340. package/workspace/WorkspaceContentSearch.js.map +1 -1
  1341. package/workspace/WorkspaceEditor.js +10 -10
  1342. package/workspace/WorkspaceEditor.js.map +1 -1
  1343. package/workspace/WorkspaceFileReader.d.ts +29 -1
  1344. package/workspace/WorkspaceFileReader.d.ts.map +1 -1
  1345. package/workspace/WorkspaceFileReader.js +42 -0
  1346. package/workspace/WorkspaceFileReader.js.map +1 -1
  1347. package/workspace/WorkspaceFileSearch.js +9 -9
  1348. package/workspace/WorkspaceFileSearch.js.map +1 -1
  1349. package/workspace/WorkspaceSummary.js +3 -3
  1350. package/workspace/WorkspaceSummary.js.map +1 -1
  1351. package/workspace/WorkspaceSurface.js +22 -22
  1352. package/workspace/WorkspaceSurface.js.map +1 -1
  1353. package/workspace/index.d.ts +1 -1
  1354. package/workspace/index.d.ts.map +1 -1
  1355. package/workspace/index.js +1 -1
  1356. package/workspace/index.js.map +1 -1
@@ -17,6 +17,7 @@ import {
17
17
  TooltipTrigger,
18
18
  } from "../internal/tooltip.js";
19
19
  import { useAutoScroll } from "../internal/useAutoScroll.js";
20
+ import { ConversationMediaAttachment } from "./ConversationMediaAttachment.js";
20
21
  import {
21
22
  authorKindOf,
22
23
  inboundPlaceholderOf,
@@ -30,6 +31,23 @@ import {
30
31
  export interface ConversationTimelineViewProps {
31
32
  /** Timeline items in chronological order (from `useConversationTimeline`). */
32
33
  readonly items: readonly ConversationTimelineItem[];
34
+ /**
35
+ * AgentChannel the conversation belongs to. Together with
36
+ * `conversationKey`, this is the opt-in for media rendering: items
37
+ * carrying `media` render an inline thumbnail or document chip whose
38
+ * bytes are fetched via `getMediaDownloadUrl` — which is addressed by
39
+ * (channel, conversation, item), so the view cannot fetch media
40
+ * without the address.
41
+ *
42
+ * When either identity prop is absent, media items keep the typed
43
+ * placeholder ("Photo", "Document") — and, load-bearing for
44
+ * provider-less hosts (documentation fixtures, visual tests): nothing
45
+ * that needs a `StigmerProvider` mounts, so the view stays purely
46
+ * presentational exactly as before these props existed.
47
+ */
48
+ readonly agentChannelId?: string;
49
+ /** Conversation key within the channel (see `agentChannelId`). */
50
+ readonly conversationKey?: string;
33
51
  /** `true` only during the first load. */
34
52
  readonly isLoading: boolean;
35
53
  /** Error from the timeline read, or `null`. */
@@ -71,6 +89,8 @@ export interface ConversationTimelineViewProps {
71
89
  */
72
90
  export function ConversationTimelineView({
73
91
  items,
92
+ agentChannelId,
93
+ conversationKey,
74
94
  isLoading,
75
95
  error,
76
96
  hasOlder,
@@ -93,15 +113,15 @@ export function ConversationTimelineView({
93
113
  <TooltipProvider>
94
114
  <div
95
115
  aria-label="Conversation timeline"
96
- className={cn("relative flex min-h-0 flex-1 flex-col", className)}
116
+ className={cn("stg:relative stg:flex stg:min-h-0 stg:flex-1 stg:flex-col", className)}
97
117
  >
98
118
  <div
99
119
  ref={scrollRef}
100
- className="min-h-0 flex-1 overflow-y-auto [overflow-anchor:none] px-4 py-3"
120
+ className="stg:min-h-0 stg:flex-1 stg:overflow-y-auto stg:[overflow-anchor:none] stg:px-4 stg:py-3"
101
121
  >
102
122
  {!showsCustomerMessages && descriptor && (
103
- <div className="mb-3 flex items-start gap-2 rounded-md border border-border bg-muted-faint px-3 py-2 text-xs text-muted-foreground">
104
- <Info aria-hidden="true" className="mt-0.5 size-3.5 shrink-0" />
123
+ <div className="stg:mb-3 stg:flex stg:items-start stg:gap-2 stg:rounded-md stg:border stg:border-border stg:bg-muted-faint stg:px-3 stg:py-2 stg:text-xs stg:text-muted-foreground">
124
+ <Info aria-hidden="true" className="stg:mt-0.5 stg:size-3.5 stg:shrink-0" />
105
125
  <p>
106
126
  Customer messages on {descriptor.label} channels aren&apos;t shown
107
127
  here yet — this thread has replies, sends, and internal events only.
@@ -112,20 +132,20 @@ export function ConversationTimelineView({
112
132
  {isLoading ? (
113
133
  <TimelineSkeleton />
114
134
  ) : error ? (
115
- <p className="px-2 py-6 text-center text-sm text-destructive">
135
+ <p className="stg:px-2 stg:py-6 stg:text-center stg:text-sm stg:text-destructive">
116
136
  {getUserMessage(error)}
117
137
  </p>
118
138
  ) : items.length === 0 ? (
119
139
  <EmptyState
120
140
  variant="first-use"
121
- icon={<MessageSquare className="size-8" />}
141
+ icon={<MessageSquare className="stg:size-8" />}
122
142
  title="No messages yet"
123
143
  description="The conversation's messages appear here as they happen."
124
144
  />
125
145
  ) : (
126
146
  <div ref={contentRef}>
127
147
  {hasOlder && (
128
- <div className="flex justify-center pb-2">
148
+ <div className="stg:flex stg:justify-center stg:pb-2">
129
149
  <Button
130
150
  variant="ghost"
131
151
  size="xs"
@@ -139,14 +159,19 @@ export function ConversationTimelineView({
139
159
  {days.map((day) => (
140
160
  <div key={day.label}>
141
161
  <div
142
- className="my-2 text-center text-xs text-muted-foreground-faint"
162
+ className="stg:my-2 stg:text-center stg:text-xs stg:text-muted-foreground-faint"
143
163
  role="separator"
144
164
  >
145
165
  {day.label}
146
166
  </div>
147
- <ul className="space-y-1.5">
167
+ <ul className="stg:space-y-1.5">
148
168
  {day.items.map((item) => (
149
- <TimelineItemRow key={item.itemId} item={item} />
169
+ <TimelineItemRow
170
+ key={item.itemId}
171
+ item={item}
172
+ agentChannelId={agentChannelId}
173
+ conversationKey={conversationKey}
174
+ />
150
175
  ))}
151
176
  </ul>
152
177
  </div>
@@ -170,8 +195,12 @@ const BUSINESS_CAPTION: Record<Exclude<ConversationAuthorKind, "customer">, stri
170
195
 
171
196
  const TimelineItemRow = memo(function TimelineItemRow({
172
197
  item,
198
+ agentChannelId,
199
+ conversationKey,
173
200
  }: {
174
201
  readonly item: ConversationTimelineItem;
202
+ readonly agentChannelId?: string;
203
+ readonly conversationKey?: string;
175
204
  }) {
176
205
  if (isInternalItem(item)) {
177
206
  return <InternalEventRow item={item} />;
@@ -179,7 +208,17 @@ const TimelineItemRow = memo(function TimelineItemRow({
179
208
 
180
209
  const author = authorKindOf(item);
181
210
  const isCustomer = author === "customer";
182
- const body = item.text || inboundPlaceholderOf(item);
211
+
212
+ // Ingested media renders as the real thing — an inline thumbnail or
213
+ // document chip — ONLY when the view holds the conversation address
214
+ // (getMediaDownloadUrl's addressing; see the identity props' contract).
215
+ // Without the address, and on media the platform declined to ingest,
216
+ // the typed placeholder keeps telling staff what arrived.
217
+ const mediaAddress =
218
+ item.media !== undefined && agentChannelId && conversationKey
219
+ ? { agentChannelId, conversationKey, itemId: item.itemId }
220
+ : null;
221
+ const body = item.text || (mediaAddress !== null ? "" : inboundPlaceholderOf(item));
183
222
 
184
223
  // DD-014 D-c (amended at the Sitting 2 gate, R-1): the provider's
185
224
  // failure explanation is decision-bearing — window closed vs bad
@@ -199,28 +238,39 @@ const TimelineItemRow = memo(function TimelineItemRow({
199
238
  : null;
200
239
 
201
240
  return (
202
- <li className={cn("flex", isCustomer ? "justify-start" : "justify-end")}>
241
+ <li className={cn("stg:flex", isCustomer ? "stg:justify-start" : "stg:justify-end")}>
203
242
  <div
204
243
  className={cn(
205
- "max-w-[80%] rounded-lg px-3 py-2",
206
- isCustomer ? "bg-muted-subtle" : "bg-primary-subtle",
244
+ "stg:max-w-[80%] stg:rounded-lg stg:px-3 stg:py-2",
245
+ isCustomer ? "stg:bg-muted-subtle" : "stg:bg-primary-subtle",
207
246
  )}
208
247
  >
209
248
  {!isCustomer && (
210
- <p className="text-xs font-medium text-muted-foreground">
249
+ <p className="stg:text-xs stg:font-medium stg:text-muted-foreground">
211
250
  {BUSINESS_CAPTION[author]}
212
251
  </p>
213
252
  )}
214
- <p
215
- className={cn(
216
- "whitespace-pre-wrap break-words text-sm text-foreground",
217
- !item.text && "italic text-muted-foreground",
218
- )}
219
- >
220
- {body || "Message content unavailable"}
221
- </p>
253
+ {mediaAddress !== null && item.media !== undefined && (
254
+ <ConversationMediaAttachment
255
+ media={item.media}
256
+ address={mediaAddress}
257
+ className={item.text ? "stg:mb-1.5" : undefined}
258
+ />
259
+ )}
260
+ {/* A media item without a caption is complete as its media —
261
+ no body, and no "unavailable" apology under the thumbnail. */}
262
+ {(body || mediaAddress === null) && (
263
+ <p
264
+ className={cn(
265
+ "stg:whitespace-pre-wrap stg:break-words stg:text-sm stg:text-foreground",
266
+ !item.text && "stg:italic stg:text-muted-foreground",
267
+ )}
268
+ >
269
+ {body || "Message content unavailable"}
270
+ </p>
271
+ )}
222
272
  {receiptExplanation !== null && (
223
- <p className="mt-1 break-words text-xs text-destructive">
273
+ <p className="stg:mt-1 stg:break-words stg:text-xs stg:text-destructive">
224
274
  {receiptExplanation}
225
275
  </p>
226
276
  )}
@@ -273,30 +323,30 @@ function ItemFooter({ item }: { readonly item: ConversationTimelineItem }) {
273
323
  : "";
274
324
 
275
325
  return (
276
- <p className="mt-1 flex items-center justify-end gap-1 text-xs text-muted-foreground-faint">
326
+ <p className="stg:mt-1 stg:flex stg:items-center stg:justify-end stg:gap-1 stg:text-xs stg:text-muted-foreground-faint">
277
327
  <span>{time}</span>
278
328
  {attempt === "failed" && (
279
329
  <StatusHint
280
330
  hint="The platform could not deliver this message"
281
- className="flex items-center gap-0.5 text-destructive"
331
+ className="stg:flex stg:items-center stg:gap-0.5 stg:text-destructive"
282
332
  >
283
- <TriangleAlert aria-hidden="true" className="size-3" />
333
+ <TriangleAlert aria-hidden="true" className="stg:size-3" />
284
334
  Not delivered
285
335
  </StatusHint>
286
336
  )}
287
337
  {attempt === "suppressed" && (
288
338
  <StatusHint
289
339
  hint="Withheld because a human had the conversation when it came due"
290
- className="flex items-center gap-0.5"
340
+ className="stg:flex stg:items-center stg:gap-0.5"
291
341
  >
292
- <Ban aria-hidden="true" className="size-3" />
342
+ <Ban aria-hidden="true" className="stg:size-3" />
293
343
  Held
294
344
  </StatusHint>
295
345
  )}
296
346
  {(attempt === "pending" || attempt === "delivering") && (
297
- <StatusHint hint="Sending" className="flex items-center gap-0.5">
298
- <Clock aria-hidden="true" className="size-3" />
299
- <span className="sr-only">Sending</span>
347
+ <StatusHint hint="Sending" className="stg:flex stg:items-center stg:gap-0.5">
348
+ <Clock aria-hidden="true" className="stg:size-3" />
349
+ <span className="stg:sr-only">Sending</span>
300
350
  </StatusHint>
301
351
  )}
302
352
  {attempt === "delivered" && <ReceiptTicks item={item} />}
@@ -316,34 +366,34 @@ function ReceiptTicks({ item }: { readonly item: ConversationTimelineItem }) {
316
366
  return (
317
367
  <StatusHint
318
368
  hint="The provider accepted this message but could not deliver it"
319
- className="flex items-center gap-0.5 text-destructive"
369
+ className="stg:flex stg:items-center stg:gap-0.5 stg:text-destructive"
320
370
  >
321
- <TriangleAlert aria-hidden="true" className="size-3" />
371
+ <TriangleAlert aria-hidden="true" className="stg:size-3" />
322
372
  Delivery failed
323
373
  </StatusHint>
324
374
  );
325
375
  }
326
376
  if (receipt === "read") {
327
377
  return (
328
- <StatusHint hint="Read by the customer" className="text-primary">
329
- <CheckCheck aria-hidden="true" className="size-3.5" />
330
- <span className="sr-only">Read</span>
378
+ <StatusHint hint="Read by the customer" className="stg:text-primary">
379
+ <CheckCheck aria-hidden="true" className="stg:size-3.5" />
380
+ <span className="stg:sr-only">Read</span>
331
381
  </StatusHint>
332
382
  );
333
383
  }
334
384
  if (receipt === "delivered") {
335
385
  return (
336
386
  <StatusHint hint="Delivered to the customer's device">
337
- <CheckCheck aria-hidden="true" className="size-3.5" />
338
- <span className="sr-only">Delivered</span>
387
+ <CheckCheck aria-hidden="true" className="stg:size-3.5" />
388
+ <span className="stg:sr-only">Delivered</span>
339
389
  </StatusHint>
340
390
  );
341
391
  }
342
392
  // Handed to the provider; no (further) receipt yet.
343
393
  return (
344
394
  <StatusHint hint="Sent">
345
- <Check aria-hidden="true" className="size-3.5" />
346
- <span className="sr-only">Sent</span>
395
+ <Check aria-hidden="true" className="stg:size-3.5" />
396
+ <span className="stg:sr-only">Sent</span>
347
397
  </StatusHint>
348
398
  );
349
399
  }
@@ -359,25 +409,25 @@ function InternalEventRow({ item }: { readonly item: ConversationTimelineItem })
359
409
  const isEscalation = author === "agent" && item.text !== "";
360
410
 
361
411
  return (
362
- <li className="flex justify-center">
412
+ <li className="stg:flex stg:justify-center">
363
413
  <div
364
414
  className={cn(
365
- "flex max-w-[90%] items-start gap-1.5 rounded-md px-3 py-1.5 text-center text-xs",
415
+ "stg:flex stg:max-w-[90%] stg:items-start stg:gap-1.5 stg:rounded-md stg:px-3 stg:py-1.5 stg:text-center stg:text-xs",
366
416
  isEscalation
367
- ? "bg-destructive-subtle text-destructive"
368
- : "bg-muted-faint text-muted-foreground",
417
+ ? "stg:bg-destructive-subtle stg:text-destructive"
418
+ : "stg:bg-muted-faint stg:text-muted-foreground",
369
419
  )}
370
420
  >
371
421
  {isEscalation ? (
372
422
  <>
373
- <TriangleAlert aria-hidden="true" className="mt-0.5 size-3.5 shrink-0" />
374
- <span className="min-w-0 break-words">
423
+ <TriangleAlert aria-hidden="true" className="stg:mt-0.5 stg:size-3.5 stg:shrink-0" />
424
+ <span className="stg:min-w-0 stg:break-words">
375
425
  Agent escalated to a human — “{item.text}”
376
426
  </span>
377
427
  </>
378
428
  ) : item.text !== "" ? (
379
429
  // A future internal note flows through with zero code change.
380
- <span className="min-w-0 break-words">{item.text}</span>
430
+ <span className="stg:min-w-0 stg:break-words">{item.text}</span>
381
431
  ) : (
382
432
  <span>A teammate resolved the attention flag</span>
383
433
  )}
@@ -388,10 +438,10 @@ function InternalEventRow({ item }: { readonly item: ConversationTimelineItem })
388
438
 
389
439
  function TimelineSkeleton() {
390
440
  return (
391
- <div className="space-y-2" aria-hidden="true">
392
- <div className="h-10 w-3/5 animate-pulse rounded-lg bg-muted-faint" />
393
- <div className="ml-auto h-10 w-3/5 animate-pulse rounded-lg bg-muted-faint" />
394
- <div className="h-10 w-2/5 animate-pulse rounded-lg bg-muted-faint" />
441
+ <div className="stg:space-y-2" aria-hidden="true">
442
+ <div className="stg:h-10 stg:w-3/5 stg:animate-pulse stg:rounded-lg stg:bg-muted-faint" />
443
+ <div className="stg:ml-auto stg:h-10 stg:w-3/5 stg:animate-pulse stg:rounded-lg stg:bg-muted-faint" />
444
+ <div className="stg:h-10 stg:w-2/5 stg:animate-pulse stg:rounded-lg stg:bg-muted-faint" />
395
445
  </div>
396
446
  );
397
447
  }
@@ -265,10 +265,10 @@ export function ConversationsWorkbench({
265
265
  return (
266
266
  <div
267
267
  aria-label="Conversations workbench"
268
- className={cn("flex min-h-0 flex-1", className)}
268
+ className={cn("stg:flex stg:min-h-0 stg:flex-1", className)}
269
269
  >
270
270
  <ConversationListPane
271
- className="w-80 shrink-0 border-r border-border"
271
+ className="stg:w-80 stg:shrink-0 stg:border-r stg:border-border"
272
272
  conversations={list.conversations}
273
273
  isLoading={list.isLoading}
274
274
  error={list.error}
@@ -286,10 +286,10 @@ export function ConversationsWorkbench({
286
286
  />
287
287
 
288
288
  {selected === null ? (
289
- <div className="flex min-w-0 flex-1 items-center justify-center p-6">
289
+ <div className="stg:flex stg:min-w-0 stg:flex-1 stg:items-center stg:justify-center stg:p-6">
290
290
  <EmptyState
291
291
  variant="first-use"
292
- icon={<MessagesSquare className="size-8" />}
292
+ icon={<MessagesSquare className="stg:size-8" />}
293
293
  title="Select a conversation"
294
294
  description="Pick a conversation to read its thread, reply as your business, or take over from the agent."
295
295
  />
@@ -305,15 +305,15 @@ export function ConversationsWorkbench({
305
305
  // Channel ids never contain ":", so the joined key is unambiguous.
306
306
  <div
307
307
  key={`${selected.agentChannelId}:${selected.conversationKey}`}
308
- className="flex min-w-0 flex-1 flex-col"
308
+ className="stg:flex stg:min-w-0 stg:flex-1 stg:flex-col"
309
309
  >
310
- <div className="flex items-center justify-between gap-2 border-b border-border px-4 py-2.5">
311
- <div className="min-w-0">
312
- <h2 className="truncate text-sm font-semibold text-foreground">
310
+ <div className="stg:flex stg:items-center stg:justify-between stg:gap-2 stg:border-b stg:border-border stg:px-4 stg:py-2.5">
311
+ <div className="stg:min-w-0">
312
+ <h2 className="stg:truncate stg:text-sm stg:font-semibold stg:text-foreground">
313
313
  {detailLabel}
314
314
  </h2>
315
315
  {(detailContact !== null || channelName) && (
316
- <p className="truncate text-xs text-muted-foreground">
316
+ <p className="stg:truncate stg:text-xs stg:text-muted-foreground">
317
317
  {detailContact}
318
318
  {detailContact !== null && channelName && " · "}
319
319
  {channelName &&
@@ -323,7 +323,7 @@ export function ConversationsWorkbench({
323
323
  (selectedChannelHref ? (
324
324
  <a
325
325
  href={selectedChannelHref}
326
- className="hover:text-foreground hover:underline"
326
+ className="stg:hover:text-foreground stg:hover:underline"
327
327
  >
328
328
  {channelName}
329
329
  </a>
@@ -354,6 +354,8 @@ export function ConversationsWorkbench({
354
354
 
355
355
  <ConversationTimelineView
356
356
  items={timeline.items}
357
+ agentChannelId={selected.agentChannelId}
358
+ conversationKey={selected.conversationKey}
357
359
  isLoading={timeline.isLoading}
358
360
  error={timeline.error}
359
361
  hasOlder={timeline.hasOlder}
@@ -85,7 +85,7 @@ describe("ConversationComposer", () => {
85
85
  expect(button.textContent).toContain("Sending…");
86
86
  // The house in-flight glyph (the session composer's pattern): the
87
87
  // static Send icon must not render while the reply is in flight.
88
- expect(button.querySelector("svg.animate-spin")).not.toBeNull();
88
+ expect(button.querySelector("svg.stg\\:animate-spin")).not.toBeNull();
89
89
  expect(
90
90
  (screen.getByLabelText("Reply to the customer") as HTMLTextAreaElement).disabled,
91
91
  ).toBe(true);
@@ -1,8 +1,10 @@
1
- import { describe, it, expect, vi, afterEach } from "vitest";
2
- import { cleanup, render, screen } from "@testing-library/react";
1
+ import { describe, it, expect, vi, beforeAll, afterEach } from "vitest";
2
+ import { cleanup, fireEvent, render, screen, waitFor } from "@testing-library/react";
3
3
  import userEvent from "@testing-library/user-event";
4
+ import type { ReactElement } from "react";
4
5
  import { create } from "@bufbuild/protobuf";
5
6
  import { timestampFromDate } from "@bufbuild/protobuf/wkt";
7
+ import type { Stigmer } from "@stigmer/sdk";
6
8
  import {
7
9
  ConversationItemAuthor,
8
10
  ConversationLane,
@@ -10,6 +12,7 @@ import {
10
12
  } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/conversation_io_pb";
11
13
  import { ChannelDeliveryStatus } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/delivery_pb";
12
14
  import { ChannelReceiptState } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/outbound_pb";
15
+ import { StigmerContext } from "../../context";
13
16
  import { ConversationTimelineView } from "../ConversationTimelineView";
14
17
 
15
18
  const NOW = new Date("2026-08-07T12:00:00Z");
@@ -308,10 +311,14 @@ describe("ConversationTimelineView", () => {
308
311
  expect(screen.getByText("Held")).toBeDefined();
309
312
  expect(screen.getByText("Delivery failed")).toBeDefined();
310
313
  // Zero new tab stops: seven focusable glyphs per screen of messages
311
- // would be an accessibility regression dressed as a fix. Nothing
312
- // inside a message row may be focusable — the Jump-to-latest
313
- // affordance (which manages its own tabIndex) lives outside the
314
- // rows and stays the surface's only interactive element.
314
+ // would be an accessibility regression dressed as a fix. No status
315
+ // or metadata element inside a message row may be focusable — the
316
+ // Jump-to-latest affordance (which manages its own tabIndex) lives
317
+ // outside the rows. Media affordances (thumbnail preview, document
318
+ // open) are the one deliberate exception: they are the row's
319
+ // CONTENT action, which keyboard users must reach — covered in the
320
+ // "inbound media" suite below. These fixtures carry none, so the
321
+ // row-wide assertion holds here.
315
322
  expect(container.querySelectorAll("li [tabindex]")).toHaveLength(0);
316
323
  expect(container.querySelectorAll("li button")).toHaveLength(0);
317
324
  });
@@ -403,3 +410,223 @@ describe("ConversationTimelineView", () => {
403
410
  expect(screen.getByText("stitch failed")).toBeDefined();
404
411
  });
405
412
  });
413
+
414
+ // ---------------------------------------------------------------------------
415
+ // Inbound media (stigmer/stigmer#367): items carrying ingested media render
416
+ // the real thing — an inline thumbnail or a document chip whose bytes are
417
+ // fetched through getMediaDownloadUrl — instead of the typed placeholder.
418
+ // The real hook runs against a mocked Stigmer client, so these cover the
419
+ // full wiring: the item address on the RPC, the presigned URL on the
420
+ // <img>, and the click-time mint on documents.
421
+ // ---------------------------------------------------------------------------
422
+
423
+ describe("ConversationTimelineView inbound media", () => {
424
+ // happy-dom does not implement the native dialog show/close methods.
425
+ beforeAll(() => {
426
+ HTMLDialogElement.prototype.showModal = function showModal() {
427
+ this.open = true;
428
+ };
429
+ HTMLDialogElement.prototype.close = function close() {
430
+ this.open = false;
431
+ };
432
+ });
433
+
434
+ afterEach(() => cleanup());
435
+
436
+ const identityProps = {
437
+ agentChannelId: "ach-1",
438
+ conversationKey: "15551234567",
439
+ };
440
+
441
+ const photoMedia = {
442
+ filename: "kitchen-leak.jpg",
443
+ contentType: "image/jpeg",
444
+ sizeBytes: BigInt(204800),
445
+ };
446
+
447
+ const documentMedia = {
448
+ filename: "lease-agreement.pdf",
449
+ contentType: "application/pdf",
450
+ sizeBytes: BigInt(1048576),
451
+ };
452
+
453
+ function renderWithClient(ui: ReactElement, getMediaDownloadUrl: ReturnType<typeof vi.fn>) {
454
+ const stigmer = { agentChannel: { getMediaDownloadUrl } } as unknown as Stigmer;
455
+ return render(
456
+ <StigmerContext.Provider value={stigmer}>{ui}</StigmerContext.Provider>,
457
+ );
458
+ }
459
+
460
+ it("renders an inbound photo as a thumbnail with click-to-open lightbox", async () => {
461
+ const mint = vi.fn().mockResolvedValue({ url: "https://r2.example/presigned/photo" });
462
+ const { container } = renderWithClient(
463
+ <ConversationTimelineView
464
+ {...baseProps()}
465
+ {...identityProps}
466
+ items={[
467
+ item("wa:1", {
468
+ author: ConversationItemAuthor.author_customer,
469
+ providerMessageType: "image",
470
+ media: photoMedia,
471
+ }),
472
+ ]}
473
+ />,
474
+ mint,
475
+ );
476
+
477
+ // The URL is minted from the item's full conversation address —
478
+ // never a storage key (whatsapp-media DD-001 D4).
479
+ await waitFor(() => {
480
+ const img = container.querySelector("img[aria-hidden='true']");
481
+ expect(img?.getAttribute("src")).toBe("https://r2.example/presigned/photo");
482
+ });
483
+ const req = mint.mock.calls[0][0];
484
+ expect(req.agentChannelId).toBe("ach-1");
485
+ expect(req.conversationKey).toBe("15551234567");
486
+ expect(req.itemId).toBe("wa:1");
487
+
488
+ // The placeholder gave way to the real thing.
489
+ expect(screen.queryByText("Photo")).toBeNull();
490
+
491
+ // Click-to-open: the shared lightbox mounts with the full image.
492
+ fireEvent.click(screen.getByRole("button", { name: "Preview kitchen-leak.jpg" }));
493
+ const dialog = container.querySelector("dialog");
494
+ expect(dialog).toBeTruthy();
495
+ expect(dialog!.getAttribute("aria-label")).toBe("Preview kitchen-leak.jpg");
496
+ });
497
+
498
+ it("renders a photo's caption beside it, and no apology when there is none", async () => {
499
+ const mint = vi.fn().mockResolvedValue({ url: "https://r2.example/presigned/photo" });
500
+ renderWithClient(
501
+ <ConversationTimelineView
502
+ {...baseProps()}
503
+ {...identityProps}
504
+ items={[
505
+ item("wa:1", {
506
+ author: ConversationItemAuthor.author_customer,
507
+ providerMessageType: "image",
508
+ text: "here's the leak under the sink",
509
+ media: photoMedia,
510
+ }),
511
+ ]}
512
+ />,
513
+ mint,
514
+ );
515
+
516
+ expect(screen.getByText("here's the leak under the sink")).toBeDefined();
517
+ // A caption-less media item is complete as its media — never the
518
+ // "Message content unavailable" apology (that copy is for items
519
+ // with neither text nor media nor a typed placeholder).
520
+ expect(screen.queryByText("Message content unavailable")).toBeNull();
521
+ });
522
+
523
+ it("renders an inbound document as a chip; a click mints a fresh URL and opens it", async () => {
524
+ const mint = vi.fn().mockResolvedValue({ url: "https://r2.example/presigned/doc" });
525
+ const anchorClick = vi
526
+ .spyOn(HTMLAnchorElement.prototype, "click")
527
+ .mockImplementation(() => {});
528
+ renderWithClient(
529
+ <ConversationTimelineView
530
+ {...baseProps()}
531
+ {...identityProps}
532
+ items={[
533
+ item("wa:2", {
534
+ author: ConversationItemAuthor.author_customer,
535
+ providerMessageType: "document",
536
+ media: documentMedia,
537
+ }),
538
+ ]}
539
+ />,
540
+ mint,
541
+ );
542
+
543
+ // The chip carries the operator's decision facts: name and size.
544
+ expect(screen.getByText("lease-agreement.pdf")).toBeDefined();
545
+ expect(screen.getByText("1.0 MB")).toBeDefined();
546
+ // No render-time mint for documents — the URL is minted fresh at
547
+ // click time (presigned URLs expire; the item address does not).
548
+ expect(mint).not.toHaveBeenCalled();
549
+
550
+ fireEvent.click(screen.getByRole("button", { name: "Open lease-agreement.pdf" }));
551
+ await waitFor(() => expect(anchorClick).toHaveBeenCalled());
552
+ const req = mint.mock.calls[0][0];
553
+ expect(req.agentChannelId).toBe("ach-1");
554
+ expect(req.conversationKey).toBe("15551234567");
555
+ expect(req.itemId).toBe("wa:2");
556
+ anchorClick.mockRestore();
557
+ });
558
+
559
+ it("degrades a photo whose URL cannot be minted to the document treatment", async () => {
560
+ const mint = vi
561
+ .fn()
562
+ .mockRejectedValue(new Error("no downloadable media at this timeline item"));
563
+ const { container } = renderWithClient(
564
+ <ConversationTimelineView
565
+ {...baseProps()}
566
+ {...identityProps}
567
+ items={[
568
+ item("wa:1", {
569
+ author: ConversationItemAuthor.author_customer,
570
+ providerMessageType: "image",
571
+ media: photoMedia,
572
+ }),
573
+ ]}
574
+ />,
575
+ mint,
576
+ );
577
+
578
+ // Never a broken-image glyph — the file stays reachable as a chip.
579
+ await waitFor(() =>
580
+ expect(screen.getByRole("button", { name: "Open kitchen-leak.jpg" })).toBeDefined(),
581
+ );
582
+ expect(container.querySelector("img")).toBeNull();
583
+ });
584
+
585
+ it("reports a failed document open under the chip, never a silent dead click", async () => {
586
+ const mint = vi
587
+ .fn()
588
+ .mockRejectedValue(new Error("no downloadable media at this timeline item"));
589
+ renderWithClient(
590
+ <ConversationTimelineView
591
+ {...baseProps()}
592
+ {...identityProps}
593
+ items={[
594
+ item("wa:2", {
595
+ author: ConversationItemAuthor.author_customer,
596
+ providerMessageType: "document",
597
+ media: documentMedia,
598
+ }),
599
+ ]}
600
+ />,
601
+ mint,
602
+ );
603
+
604
+ fireEvent.click(screen.getByRole("button", { name: "Open lease-agreement.pdf" }));
605
+ await waitFor(() =>
606
+ expect(screen.getByText(/no downloadable media/)).toBeDefined(),
607
+ );
608
+ });
609
+
610
+ it("keeps the typed placeholder without the conversation address — and stays provider-free", () => {
611
+ // Deliberately NO StigmerProvider: without the identity props the
612
+ // media arm must not mount anything that needs one — the view's
613
+ // presentational contract for fixture-driven hosts (documentation
614
+ // tours, visual tests) predates media and must survive it.
615
+ const { container } = render(
616
+ <ConversationTimelineView
617
+ {...baseProps()}
618
+ items={[
619
+ item("wa:1", {
620
+ author: ConversationItemAuthor.author_customer,
621
+ providerMessageType: "image",
622
+ media: photoMedia,
623
+ }),
624
+ ]}
625
+ />,
626
+ );
627
+
628
+ expect(screen.getByText("Photo")).toBeDefined();
629
+ expect(container.querySelector("img")).toBeNull();
630
+ expect(container.querySelectorAll("li button")).toHaveLength(0);
631
+ });
632
+ });