@stigmer/react 3.12.0 → 3.12.2

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 (738) hide show
  1. package/access/ManageAccessDialog.d.ts.map +1 -1
  2. package/access/ManageAccessDialog.js +7 -2
  3. package/access/ManageAccessDialog.js.map +1 -1
  4. package/activity/format-relative-time.d.ts +11 -9
  5. package/activity/format-relative-time.d.ts.map +1 -1
  6. package/activity/format-relative-time.js +11 -9
  7. package/activity/format-relative-time.js.map +1 -1
  8. package/agent/steps/CapabilitiesStep.js +5 -2
  9. package/agent/steps/CapabilitiesStep.js.map +1 -1
  10. package/agent/steps/IdentityStep.d.ts.map +1 -1
  11. package/agent/steps/IdentityStep.js +6 -5
  12. package/agent/steps/IdentityStep.js.map +1 -1
  13. package/agent-instance/CreateAgentInstanceDialog.d.ts.map +1 -1
  14. package/agent-instance/CreateAgentInstanceDialog.js +10 -2
  15. package/agent-instance/CreateAgentInstanceDialog.js.map +1 -1
  16. package/api-key/ApiKeyCreatedAlert.d.ts.map +1 -1
  17. package/api-key/ApiKeyCreatedAlert.js +12 -20
  18. package/api-key/ApiKeyCreatedAlert.js.map +1 -1
  19. package/api-key/ApiKeyListPanel.d.ts.map +1 -1
  20. package/api-key/ApiKeyListPanel.js +3 -23
  21. package/api-key/ApiKeyListPanel.js.map +1 -1
  22. package/api-key/CreateApiKeyForm.d.ts.map +1 -1
  23. package/api-key/CreateApiKeyForm.js +6 -10
  24. package/api-key/CreateApiKeyForm.js.map +1 -1
  25. package/approval-defaults-context.d.ts +47 -0
  26. package/approval-defaults-context.d.ts.map +1 -0
  27. package/approval-defaults-context.js +27 -0
  28. package/approval-defaults-context.js.map +1 -0
  29. package/attachment/index.d.ts +2 -0
  30. package/attachment/index.d.ts.map +1 -1
  31. package/attachment/index.js +1 -0
  32. package/attachment/index.js.map +1 -1
  33. package/attachment/vision-preflight.d.ts +113 -0
  34. package/attachment/vision-preflight.d.ts.map +1 -0
  35. package/attachment/vision-preflight.js +143 -0
  36. package/attachment/vision-preflight.js.map +1 -0
  37. package/billing/AutoRechargeCard.d.ts.map +1 -1
  38. package/billing/AutoRechargeCard.js +3 -2
  39. package/billing/AutoRechargeCard.js.map +1 -1
  40. package/billing/BillingSection.d.ts.map +1 -1
  41. package/billing/BillingSection.js +3 -2
  42. package/billing/BillingSection.js.map +1 -1
  43. package/channel/ChannelConversationsDialog.d.ts.map +1 -1
  44. package/channel/ChannelConversationsDialog.js +5 -4
  45. package/channel/ChannelConversationsDialog.js.map +1 -1
  46. package/channel/ChannelCredentialsDialog.d.ts.map +1 -1
  47. package/channel/ChannelCredentialsDialog.js +9 -4
  48. package/channel/ChannelCredentialsDialog.js.map +1 -1
  49. package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
  50. package/channel/ChannelTemplatesDialog.js +5 -4
  51. package/channel/ChannelTemplatesDialog.js.map +1 -1
  52. package/channel/ConnectSlackDialog.d.ts.map +1 -1
  53. package/channel/ConnectSlackDialog.js +9 -4
  54. package/channel/ConnectSlackDialog.js.map +1 -1
  55. package/channel/ConnectWhatsAppDialog.d.ts.map +1 -1
  56. package/channel/ConnectWhatsAppDialog.js +9 -4
  57. package/channel/ConnectWhatsAppDialog.js.map +1 -1
  58. package/channel/useChannelSessions.d.ts.map +1 -1
  59. package/channel/useChannelSessions.js.map +1 -1
  60. package/channel-app/ChannelAppDetailPanel.d.ts.map +1 -1
  61. package/channel-app/ChannelAppDetailPanel.js +8 -5
  62. package/channel-app/ChannelAppDetailPanel.js.map +1 -1
  63. package/channel-app/CreateChannelAppForm.d.ts.map +1 -1
  64. package/channel-app/CreateChannelAppForm.js +12 -7
  65. package/channel-app/CreateChannelAppForm.js.map +1 -1
  66. package/channel-app/internal.d.ts +0 -1
  67. package/channel-app/internal.d.ts.map +1 -1
  68. package/channel-app/internal.js +5 -10
  69. package/channel-app/internal.js.map +1 -1
  70. package/composer/ComposerToolbar.js +2 -1
  71. package/composer/ComposerToolbar.js.map +1 -1
  72. package/composer/SessionComposer.d.ts +1 -1
  73. package/composer/SessionComposer.d.ts.map +1 -1
  74. package/composer/SessionComposer.js +120 -13
  75. package/composer/SessionComposer.js.map +1 -1
  76. package/composer/icons.d.ts +0 -1
  77. package/composer/icons.d.ts.map +1 -1
  78. package/composer/icons.js +0 -3
  79. package/composer/icons.js.map +1 -1
  80. package/conversation/ConversationComposer.js +1 -1
  81. package/conversation/ConversationComposer.js.map +1 -1
  82. package/conversation/ConversationListPane.d.ts.map +1 -1
  83. package/conversation/ConversationListPane.js +3 -2
  84. package/conversation/ConversationListPane.js.map +1 -1
  85. package/cursor-accounts/MemberCoverageTable.js +3 -14
  86. package/cursor-accounts/MemberCoverageTable.js.map +1 -1
  87. package/dashboard/DashboardFailedRuns.d.ts.map +1 -1
  88. package/dashboard/DashboardFailedRuns.js +2 -14
  89. package/dashboard/DashboardFailedRuns.js.map +1 -1
  90. package/environment/CreateEnvironmentForm.d.ts.map +1 -1
  91. package/environment/CreateEnvironmentForm.js +4 -8
  92. package/environment/CreateEnvironmentForm.js.map +1 -1
  93. package/environment/EnvVarForm.d.ts.map +1 -1
  94. package/environment/EnvVarForm.js +2 -4
  95. package/environment/EnvVarForm.js.map +1 -1
  96. package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
  97. package/environment/EnvironmentVariableEditor.js +5 -7
  98. package/environment/EnvironmentVariableEditor.js.map +1 -1
  99. package/execution/ArtifactApplyButton.d.ts.map +1 -1
  100. package/execution/ArtifactApplyButton.js +2 -4
  101. package/execution/ArtifactApplyButton.js.map +1 -1
  102. package/execution/ExecutionErrorNotice.d.ts +36 -0
  103. package/execution/ExecutionErrorNotice.d.ts.map +1 -0
  104. package/execution/ExecutionErrorNotice.js +39 -0
  105. package/execution/ExecutionErrorNotice.js.map +1 -0
  106. package/execution/FilePathLink.d.ts.map +1 -1
  107. package/execution/FilePathLink.js +5 -8
  108. package/execution/FilePathLink.js.map +1 -1
  109. package/execution/FileReviewCard.d.ts.map +1 -1
  110. package/execution/FileReviewCard.js +1 -6
  111. package/execution/FileReviewCard.js.map +1 -1
  112. package/execution/FollowUpInput.d.ts.map +1 -1
  113. package/execution/FollowUpInput.js +1 -3
  114. package/execution/FollowUpInput.js.map +1 -1
  115. package/execution/LivenessStatusLine.d.ts +40 -0
  116. package/execution/LivenessStatusLine.d.ts.map +1 -0
  117. package/execution/LivenessStatusLine.js +34 -0
  118. package/execution/LivenessStatusLine.js.map +1 -0
  119. package/execution/MessageEntry.d.ts.map +1 -1
  120. package/execution/MessageEntry.js +31 -3
  121. package/execution/MessageEntry.js.map +1 -1
  122. package/execution/MessageThread.d.ts +25 -0
  123. package/execution/MessageThread.d.ts.map +1 -1
  124. package/execution/MessageThread.js +51 -36
  125. package/execution/MessageThread.js.map +1 -1
  126. package/execution/SetupProgress.d.ts.map +1 -1
  127. package/execution/SetupProgress.js +1 -1
  128. package/execution/SetupProgress.js.map +1 -1
  129. package/execution/SubAgentSection.d.ts.map +1 -1
  130. package/execution/SubAgentSection.js +9 -7
  131. package/execution/SubAgentSection.js.map +1 -1
  132. package/execution/TerminalSession.d.ts +30 -0
  133. package/execution/TerminalSession.d.ts.map +1 -1
  134. package/execution/TerminalSession.js +37 -1
  135. package/execution/TerminalSession.js.map +1 -1
  136. package/execution/ToolCallDetail.d.ts +9 -0
  137. package/execution/ToolCallDetail.d.ts.map +1 -1
  138. package/execution/ToolCallDetail.js +16 -0
  139. package/execution/ToolCallDetail.js.map +1 -1
  140. package/execution/ToolCallItem.d.ts +20 -6
  141. package/execution/ToolCallItem.d.ts.map +1 -1
  142. package/execution/ToolCallItem.js +102 -29
  143. package/execution/ToolCallItem.js.map +1 -1
  144. package/execution/ToolRunGroup.d.ts.map +1 -1
  145. package/execution/ToolRunGroup.js +11 -11
  146. package/execution/ToolRunGroup.js.map +1 -1
  147. package/execution/WriteBackCard.d.ts.map +1 -1
  148. package/execution/WriteBackCard.js +5 -20
  149. package/execution/WriteBackCard.js.map +1 -1
  150. package/execution/index.d.ts +6 -2
  151. package/execution/index.d.ts.map +1 -1
  152. package/execution/index.js +3 -1
  153. package/execution/index.js.map +1 -1
  154. package/execution/tool-categories.d.ts +42 -7
  155. package/execution/tool-categories.d.ts.map +1 -1
  156. package/execution/tool-categories.js +38 -4
  157. package/execution/tool-categories.js.map +1 -1
  158. package/execution/tool-presenter.d.ts +17 -1
  159. package/execution/tool-presenter.d.ts.map +1 -1
  160. package/execution/tool-presenter.js +4 -1
  161. package/execution/tool-presenter.js.map +1 -1
  162. package/execution/useArtifactInspection.d.ts.map +1 -1
  163. package/execution/useArtifactInspection.js +4 -7
  164. package/execution/useArtifactInspection.js.map +1 -1
  165. package/execution/useCreateAgentExecution.d.ts +3 -2
  166. package/execution/useCreateAgentExecution.d.ts.map +1 -1
  167. package/execution/useCreateAgentExecution.js.map +1 -1
  168. package/iam-policy/GrantAccessForm.d.ts.map +1 -1
  169. package/iam-policy/GrantAccessForm.js +2 -4
  170. package/iam-policy/GrantAccessForm.js.map +1 -1
  171. package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
  172. package/iam-policy/OrgMembersPanel.js +3 -5
  173. package/iam-policy/OrgMembersPanel.js.map +1 -1
  174. package/iam-policy/RoleSelector.d.ts.map +1 -1
  175. package/iam-policy/RoleSelector.js +7 -1
  176. package/iam-policy/RoleSelector.js.map +1 -1
  177. package/identity-provider/CreateIdentityProviderForm.d.ts.map +1 -1
  178. package/identity-provider/CreateIdentityProviderForm.js +6 -9
  179. package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
  180. package/identity-provider/IdentityProviderDetailPanel.d.ts.map +1 -1
  181. package/identity-provider/IdentityProviderDetailPanel.js +17 -26
  182. package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
  183. package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
  184. package/identity-provider/IdentityProviderListPanel.js +2 -4
  185. package/identity-provider/IdentityProviderListPanel.js.map +1 -1
  186. package/identity-provider/IdentityProviderWizard.d.ts.map +1 -1
  187. package/identity-provider/IdentityProviderWizard.js +8 -7
  188. package/identity-provider/IdentityProviderWizard.js.map +1 -1
  189. package/identity-provider/SsoLoginPrompt.js +5 -6
  190. package/identity-provider/SsoLoginPrompt.js.map +1 -1
  191. package/index.d.ts +9 -8
  192. package/index.d.ts.map +1 -1
  193. package/index.js +4 -4
  194. package/index.js.map +1 -1
  195. package/internal/DecisionButton.d.ts.map +1 -1
  196. package/internal/DecisionButton.js +1 -6
  197. package/internal/DecisionButton.js.map +1 -1
  198. package/internal/SpinnerIcon.d.ts +22 -0
  199. package/internal/SpinnerIcon.d.ts.map +1 -0
  200. package/internal/SpinnerIcon.js +23 -0
  201. package/internal/SpinnerIcon.js.map +1 -0
  202. package/internal/isUnimplemented.d.ts +17 -0
  203. package/internal/isUnimplemented.d.ts.map +1 -0
  204. package/internal/isUnimplemented.js +26 -0
  205. package/internal/isUnimplemented.js.map +1 -0
  206. package/internal/select-element-text.d.ts +11 -0
  207. package/internal/select-element-text.d.ts.map +1 -0
  208. package/internal/select-element-text.js +19 -0
  209. package/internal/select-element-text.js.map +1 -0
  210. package/internal/thread-card/ThreadCardShell.d.ts +27 -10
  211. package/internal/thread-card/ThreadCardShell.d.ts.map +1 -1
  212. package/internal/thread-card/ThreadCardShell.js +11 -5
  213. package/internal/thread-card/ThreadCardShell.js.map +1 -1
  214. package/internal/thread-card/glyphs.d.ts +11 -2
  215. package/internal/thread-card/glyphs.d.ts.map +1 -1
  216. package/internal/thread-card/glyphs.js +9 -3
  217. package/internal/thread-card/glyphs.js.map +1 -1
  218. package/internal/thread-card/index.d.ts +1 -1
  219. package/internal/thread-card/index.d.ts.map +1 -1
  220. package/internal/thread-card/index.js.map +1 -1
  221. package/internal/useCopyFeedback.d.ts +28 -0
  222. package/internal/useCopyFeedback.d.ts.map +1 -0
  223. package/internal/useCopyFeedback.js +40 -0
  224. package/internal/useCopyFeedback.js.map +1 -0
  225. package/invitation/InvitationCreatedAlert.d.ts.map +1 -1
  226. package/invitation/InvitationCreatedAlert.js +12 -19
  227. package/invitation/InvitationCreatedAlert.js.map +1 -1
  228. package/invitation/InvitationManager.d.ts.map +1 -1
  229. package/invitation/InvitationManager.js +14 -21
  230. package/invitation/InvitationManager.js.map +1 -1
  231. package/invitation/InvitationRedemption.d.ts.map +1 -1
  232. package/invitation/InvitationRedemption.js +2 -4
  233. package/invitation/InvitationRedemption.js.map +1 -1
  234. package/library/useExportResource.d.ts.map +1 -1
  235. package/library/useExportResource.js +16 -27
  236. package/library/useExportResource.js.map +1 -1
  237. package/manifest/ApplyManifestDialog.js +1 -1
  238. package/manifest/EditResourceYamlDialog.js +1 -1
  239. package/mcp-server/DefinitionDriftNotice.d.ts +42 -0
  240. package/mcp-server/DefinitionDriftNotice.d.ts.map +1 -0
  241. package/mcp-server/DefinitionDriftNotice.js +52 -0
  242. package/mcp-server/DefinitionDriftNotice.js.map +1 -0
  243. package/mcp-server/McpServerConnectDialog.js +8 -4
  244. package/mcp-server/McpServerConnectDialog.js.map +1 -1
  245. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  246. package/mcp-server/McpServerDetailView.js +47 -14
  247. package/mcp-server/McpServerDetailView.js.map +1 -1
  248. package/mcp-server/OAuthAppForm.d.ts.map +1 -1
  249. package/mcp-server/OAuthAppForm.js +2 -4
  250. package/mcp-server/OAuthAppForm.js.map +1 -1
  251. package/mcp-server/internal/definitionDrift.d.ts +39 -0
  252. package/mcp-server/internal/definitionDrift.d.ts.map +1 -0
  253. package/mcp-server/internal/definitionDrift.js +122 -0
  254. package/mcp-server/internal/definitionDrift.js.map +1 -0
  255. package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -1
  256. package/mcp-server/internal/mcpServerToInput.js +3 -0
  257. package/mcp-server/internal/mcpServerToInput.js.map +1 -1
  258. package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -1
  259. package/mcp-server/steps/EnvironmentAuthStep.js +8 -4
  260. package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
  261. package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -1
  262. package/mcp-server/steps/IdentityTransportStep.js +5 -4
  263. package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
  264. package/mcp-server/useMcpServerConnect.d.ts +1 -1
  265. package/mcp-server/useMcpServerCredentials.d.ts +38 -10
  266. package/mcp-server/useMcpServerCredentials.d.ts.map +1 -1
  267. package/mcp-server/useMcpServerCredentials.js +50 -7
  268. package/mcp-server/useMcpServerCredentials.js.map +1 -1
  269. package/mcp-server/useMcpServerDefinitionDrift.d.ts +44 -0
  270. package/mcp-server/useMcpServerDefinitionDrift.d.ts.map +1 -0
  271. package/mcp-server/useMcpServerDefinitionDrift.js +61 -0
  272. package/mcp-server/useMcpServerDefinitionDrift.js.map +1 -0
  273. package/mcp-server/useOrgOAuthApp.d.ts +22 -0
  274. package/mcp-server/useOrgOAuthApp.d.ts.map +1 -1
  275. package/mcp-server/useOrgOAuthApp.js +39 -7
  276. package/mcp-server/useOrgOAuthApp.js.map +1 -1
  277. package/models/ModelRegistryContext.d.ts +7 -1
  278. package/models/ModelRegistryContext.d.ts.map +1 -1
  279. package/models/ModelRegistryContext.js.map +1 -1
  280. package/models/ModelSelector.js +9 -1
  281. package/models/ModelSelector.js.map +1 -1
  282. package/models/index.d.ts +2 -2
  283. package/models/index.d.ts.map +1 -1
  284. package/models/index.js +1 -1
  285. package/models/index.js.map +1 -1
  286. package/models/registry.d.ts +88 -6
  287. package/models/registry.d.ts.map +1 -1
  288. package/models/registry.js +133 -27
  289. package/models/registry.js.map +1 -1
  290. package/models/useModelRegistry.d.ts +7 -1
  291. package/models/useModelRegistry.d.ts.map +1 -1
  292. package/models/useModelRegistry.js +3 -2
  293. package/models/useModelRegistry.js.map +1 -1
  294. package/oauth-app/CreateOAuthAppForm.d.ts.map +1 -1
  295. package/oauth-app/CreateOAuthAppForm.js +4 -5
  296. package/oauth-app/CreateOAuthAppForm.js.map +1 -1
  297. package/oauth-app/OAuthAppDetailPanel.d.ts.map +1 -1
  298. package/oauth-app/OAuthAppDetailPanel.js +5 -6
  299. package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
  300. package/organization/CreateOrganizationForm.d.ts.map +1 -1
  301. package/organization/CreateOrganizationForm.js +5 -9
  302. package/organization/CreateOrganizationForm.js.map +1 -1
  303. package/organization/OrgProfilePanel.d.ts.map +1 -1
  304. package/organization/OrgProfilePanel.js +7 -16
  305. package/organization/OrgProfilePanel.js.map +1 -1
  306. package/package.json +4 -4
  307. package/platform-client/CreatePlatformClientForm.d.ts.map +1 -1
  308. package/platform-client/CreatePlatformClientForm.js +5 -6
  309. package/platform-client/CreatePlatformClientForm.js.map +1 -1
  310. package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
  311. package/platform-client/PlatformClientDetailPanel.js +6 -7
  312. package/platform-client/PlatformClientDetailPanel.js.map +1 -1
  313. package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
  314. package/platform-client/PlatformClientListPanel.js +2 -4
  315. package/platform-client/PlatformClientListPanel.js.map +1 -1
  316. package/platform-client/PlatformClientSecretAlert.d.ts.map +1 -1
  317. package/platform-client/PlatformClientSecretAlert.js +18 -25
  318. package/platform-client/PlatformClientSecretAlert.js.map +1 -1
  319. package/provider.d.ts +34 -1
  320. package/provider.d.ts.map +1 -1
  321. package/provider.js +14 -7
  322. package/provider.js.map +1 -1
  323. package/resource-creation/WizardNav.d.ts.map +1 -1
  324. package/resource-creation/WizardNav.js +2 -4
  325. package/resource-creation/WizardNav.js.map +1 -1
  326. package/resource-detail/ConfirmDialog.js +1 -1
  327. package/resource-detail/useCopyResource.d.ts +4 -3
  328. package/resource-detail/useCopyResource.d.ts.map +1 -1
  329. package/resource-detail/useCopyResource.js +10 -19
  330. package/resource-detail/useCopyResource.js.map +1 -1
  331. package/schedule/ScheduleDetailView.d.ts.map +1 -1
  332. package/schedule/ScheduleDetailView.js +2 -4
  333. package/schedule/ScheduleDetailView.js.map +1 -1
  334. package/schedule/ScheduleForm.d.ts.map +1 -1
  335. package/schedule/ScheduleForm.js +6 -7
  336. package/schedule/ScheduleForm.js.map +1 -1
  337. package/session/NewSessionViewer.d.ts +52 -2
  338. package/session/NewSessionViewer.d.ts.map +1 -1
  339. package/session/NewSessionViewer.js +21 -6
  340. package/session/NewSessionViewer.js.map +1 -1
  341. package/session/SessionViewer.d.ts +63 -2
  342. package/session/SessionViewer.d.ts.map +1 -1
  343. package/session/SessionViewer.js +43 -17
  344. package/session/SessionViewer.js.map +1 -1
  345. package/session/audience.d.ts +17 -0
  346. package/session/audience.d.ts.map +1 -1
  347. package/session/index.d.ts +2 -1
  348. package/session/index.d.ts.map +1 -1
  349. package/session/index.js.map +1 -1
  350. package/session/run-config.d.ts +50 -0
  351. package/session/run-config.d.ts.map +1 -0
  352. package/session/run-config.js +15 -0
  353. package/session/run-config.js.map +1 -0
  354. package/session/useNewSessionFlow.d.ts +11 -0
  355. package/session/useNewSessionFlow.d.ts.map +1 -1
  356. package/session/useNewSessionFlow.js +29 -2
  357. package/session/useNewSessionFlow.js.map +1 -1
  358. package/session/useSessionConversation.d.ts +11 -9
  359. package/session/useSessionConversation.d.ts.map +1 -1
  360. package/session/useSessionConversation.js +2 -0
  361. package/session/useSessionConversation.js.map +1 -1
  362. package/session/useSessionPageFlow.d.ts +18 -4
  363. package/session/useSessionPageFlow.d.ts.map +1 -1
  364. package/session/useSessionPageFlow.js +33 -6
  365. package/session/useSessionPageFlow.js.map +1 -1
  366. package/session/useSessionPanel.d.ts +37 -2
  367. package/session/useSessionPanel.d.ts.map +1 -1
  368. package/session/useSessionPanel.js +44 -10
  369. package/session/useSessionPanel.js.map +1 -1
  370. package/settings/ApiKeysSection.d.ts.map +1 -1
  371. package/settings/ApiKeysSection.js +3 -2
  372. package/settings/ApiKeysSection.js.map +1 -1
  373. package/settings/ChannelAppsSection.d.ts.map +1 -1
  374. package/settings/ChannelAppsSection.js +3 -2
  375. package/settings/ChannelAppsSection.js.map +1 -1
  376. package/settings/EnvironmentsSection.js +5 -3
  377. package/settings/EnvironmentsSection.js.map +1 -1
  378. package/settings/IdentityProvidersSection.d.ts.map +1 -1
  379. package/settings/IdentityProvidersSection.js +3 -2
  380. package/settings/IdentityProvidersSection.js.map +1 -1
  381. package/settings/InvitationsSection.d.ts.map +1 -1
  382. package/settings/InvitationsSection.js +3 -1
  383. package/settings/InvitationsSection.js.map +1 -1
  384. package/settings/MembersSection.d.ts.map +1 -1
  385. package/settings/MembersSection.js +3 -1
  386. package/settings/MembersSection.js.map +1 -1
  387. package/settings/OAuthAppsSection.d.ts.map +1 -1
  388. package/settings/OAuthAppsSection.js +3 -2
  389. package/settings/OAuthAppsSection.js.map +1 -1
  390. package/settings/OrgProfileSection.d.ts.map +1 -1
  391. package/settings/OrgProfileSection.js +3 -2
  392. package/settings/OrgProfileSection.js.map +1 -1
  393. package/settings/PlatformClientsSection.d.ts.map +1 -1
  394. package/settings/PlatformClientsSection.js +3 -2
  395. package/settings/PlatformClientsSection.js.map +1 -1
  396. package/settings/UsageSection.d.ts.map +1 -1
  397. package/settings/UsageSection.js +3 -1
  398. package/settings/UsageSection.js.map +1 -1
  399. package/sharing/ShareAgentDialog.d.ts.map +1 -1
  400. package/sharing/ShareAgentDialog.js +18 -7
  401. package/sharing/ShareAgentDialog.js.map +1 -1
  402. package/sidebar/chrome.d.ts +3 -4
  403. package/sidebar/chrome.d.ts.map +1 -1
  404. package/sidebar/chrome.js +5 -4
  405. package/sidebar/chrome.js.map +1 -1
  406. package/skill/SkillDiffDialog.js +1 -1
  407. package/skill/useSkillVersions.d.ts.map +1 -1
  408. package/skill/useSkillVersions.js +1 -9
  409. package/skill/useSkillVersions.js.map +1 -1
  410. package/src/access/ManageAccessDialog.tsx +10 -4
  411. package/src/activity/format-relative-time.ts +11 -9
  412. package/src/agent/steps/CapabilitiesStep.tsx +6 -3
  413. package/src/agent/steps/IdentityStep.tsx +19 -12
  414. package/src/agent-instance/CreateAgentInstanceDialog.tsx +17 -8
  415. package/src/api-key/ApiKeyCreatedAlert.tsx +10 -19
  416. package/src/api-key/ApiKeyListPanel.tsx +3 -39
  417. package/src/api-key/CreateApiKeyForm.tsx +12 -26
  418. package/src/approval-defaults-context.ts +56 -0
  419. package/src/attachment/__tests__/vision-preflight.test.ts +311 -0
  420. package/src/attachment/index.ts +12 -0
  421. package/src/attachment/vision-preflight.ts +236 -0
  422. package/src/billing/AutoRechargeCard.tsx +5 -4
  423. package/src/billing/BillingSection.tsx +4 -3
  424. package/src/channel/ChannelConversationsDialog.tsx +8 -4
  425. package/src/channel/ChannelCredentialsDialog.tsx +14 -4
  426. package/src/channel/ChannelTemplatesDialog.tsx +8 -4
  427. package/src/channel/ConnectSlackDialog.tsx +14 -4
  428. package/src/channel/ConnectWhatsAppDialog.tsx +14 -4
  429. package/src/channel/useChannelSessions.ts +3 -0
  430. package/src/channel-app/ChannelAppDetailPanel.tsx +15 -12
  431. package/src/channel-app/CreateChannelAppForm.tsx +17 -12
  432. package/src/channel-app/internal.tsx +5 -25
  433. package/src/composer/ComposerToolbar.tsx +1 -1
  434. package/src/composer/SessionComposer.tsx +160 -13
  435. package/src/composer/__tests__/SessionComposer-modelCoherence.test.tsx +220 -0
  436. package/src/composer/__tests__/SessionComposer-visionPreflight.test.tsx +222 -0
  437. package/src/composer/icons.tsx +0 -18
  438. package/src/conversation/ConversationComposer.tsx +1 -1
  439. package/src/conversation/ConversationListPane.tsx +4 -3
  440. package/src/cursor-accounts/MemberCoverageTable.tsx +3 -14
  441. package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +2 -10
  442. package/src/dashboard/DashboardFailedRuns.tsx +2 -12
  443. package/src/environment/CreateEnvironmentForm.tsx +8 -27
  444. package/src/environment/EnvVarForm.tsx +2 -18
  445. package/src/environment/EnvironmentVariableEditor.tsx +5 -21
  446. package/src/execution/ArtifactApplyButton.tsx +2 -17
  447. package/src/execution/ExecutionErrorNotice.tsx +99 -0
  448. package/src/execution/FilePathLink.tsx +5 -9
  449. package/src/execution/FileReviewCard.tsx +1 -20
  450. package/src/execution/FollowUpInput.tsx +1 -16
  451. package/src/execution/LivenessStatusLine.tsx +59 -0
  452. package/src/execution/MessageEntry.tsx +136 -25
  453. package/src/execution/MessageThread.tsx +84 -83
  454. package/src/execution/SetupProgress.tsx +5 -1
  455. package/src/execution/SubAgentSection.tsx +9 -20
  456. package/src/execution/TerminalSession.tsx +97 -10
  457. package/src/execution/ToolCallDetail.tsx +19 -0
  458. package/src/execution/ToolCallItem.tsx +157 -37
  459. package/src/execution/ToolRunGroup.tsx +30 -32
  460. package/src/execution/WriteBackCard.tsx +5 -24
  461. package/src/execution/__tests__/MessageEntry-copy.test.tsx +125 -0
  462. package/src/execution/__tests__/MessageThread.test.tsx +97 -0
  463. package/src/execution/__tests__/TerminalSession.test.tsx +71 -1
  464. package/src/execution/__tests__/ToolCallDetail.test.tsx +33 -1
  465. package/src/execution/__tests__/ToolCallItem.test.tsx +299 -11
  466. package/src/execution/__tests__/ToolRunGroup.test.tsx +41 -9
  467. package/src/execution/__tests__/message-thread-slots.test.tsx +92 -0
  468. package/src/execution/__tests__/tool-presenter.test.tsx +41 -4
  469. package/src/execution/index.ts +8 -2
  470. package/src/execution/tool-categories.ts +72 -8
  471. package/src/execution/tool-presenter.ts +22 -1
  472. package/src/execution/useArtifactInspection.ts +4 -8
  473. package/src/execution/useCreateAgentExecution.ts +3 -2
  474. package/src/iam-policy/GrantAccessForm.tsx +2 -18
  475. package/src/iam-policy/OrgMembersPanel.tsx +3 -19
  476. package/src/iam-policy/RoleSelector.tsx +8 -1
  477. package/src/identity-provider/CreateIdentityProviderForm.tsx +13 -31
  478. package/src/identity-provider/IdentityProviderDetailPanel.tsx +24 -49
  479. package/src/identity-provider/IdentityProviderListPanel.tsx +2 -18
  480. package/src/identity-provider/IdentityProviderWizard.tsx +15 -32
  481. package/src/identity-provider/SsoLoginPrompt.tsx +6 -21
  482. package/src/index.ts +23 -1
  483. package/src/internal/DecisionButton.tsx +1 -20
  484. package/src/internal/SpinnerIcon.tsx +42 -0
  485. package/src/internal/__tests__/ThreadCardShell.test.tsx +43 -7
  486. package/src/internal/__tests__/useCopyFeedback.test.ts +92 -0
  487. package/src/internal/isUnimplemented.ts +26 -0
  488. package/src/internal/select-element-text.ts +17 -0
  489. package/src/internal/thread-card/ThreadCardShell.tsx +53 -21
  490. package/src/internal/thread-card/glyphs.tsx +24 -3
  491. package/src/internal/thread-card/index.ts +1 -0
  492. package/src/internal/useCopyFeedback.ts +61 -0
  493. package/src/invitation/InvitationCreatedAlert.tsx +10 -18
  494. package/src/invitation/InvitationManager.tsx +23 -34
  495. package/src/invitation/InvitationRedemption.tsx +2 -18
  496. package/src/library/useExportResource.ts +15 -29
  497. package/src/manifest/ApplyManifestDialog.tsx +1 -1
  498. package/src/manifest/EditResourceYamlDialog.tsx +1 -1
  499. package/src/mcp-server/DefinitionDriftNotice.tsx +120 -0
  500. package/src/mcp-server/McpServerConnectDialog.tsx +30 -12
  501. package/src/mcp-server/McpServerDetailView.tsx +58 -26
  502. package/src/mcp-server/OAuthAppForm.tsx +2 -18
  503. package/src/mcp-server/__tests__/DefinitionDriftNotice.test.tsx +57 -0
  504. package/src/mcp-server/__tests__/VendorApprovalBlocked.surfaces.test.tsx +103 -5
  505. package/src/mcp-server/__tests__/byoaEditionDegradation.test.tsx +323 -0
  506. package/src/mcp-server/__tests__/definitionDrift.test.ts +245 -0
  507. package/src/mcp-server/__tests__/mcpServerToInput.test.ts +201 -0
  508. package/src/mcp-server/__tests__/useMcpServerCredentials.test.tsx +306 -0
  509. package/src/mcp-server/__tests__/useMcpServerDefinitionDrift.test.tsx +173 -0
  510. package/src/mcp-server/internal/definitionDrift.ts +158 -0
  511. package/src/mcp-server/internal/mcpServerToInput.ts +3 -0
  512. package/src/mcp-server/steps/EnvironmentAuthStep.tsx +19 -19
  513. package/src/mcp-server/steps/IdentityTransportStep.tsx +24 -23
  514. package/src/mcp-server/useMcpServerConnect.ts +1 -1
  515. package/src/mcp-server/useMcpServerCredentials.ts +87 -19
  516. package/src/mcp-server/useMcpServerDefinitionDrift.ts +95 -0
  517. package/src/mcp-server/useOrgOAuthApp.ts +54 -8
  518. package/src/models/ModelRegistryContext.ts +7 -1
  519. package/src/models/ModelSelector.tsx +37 -0
  520. package/src/models/__tests__/ModelSelector-visionIndicator.test.tsx +129 -0
  521. package/src/models/__tests__/resolveDefaultModel.test.ts +115 -0
  522. package/src/models/__tests__/useModelRegistry.test.tsx +99 -4
  523. package/src/models/index.ts +2 -2
  524. package/src/models/registry.ts +196 -29
  525. package/src/models/useModelRegistry.ts +10 -2
  526. package/src/oauth-app/CreateOAuthAppForm.tsx +16 -31
  527. package/src/oauth-app/OAuthAppDetailPanel.tsx +16 -31
  528. package/src/organization/CreateOrganizationForm.tsx +10 -29
  529. package/src/organization/OrgProfilePanel.tsx +13 -44
  530. package/src/platform-client/CreatePlatformClientForm.tsx +9 -29
  531. package/src/platform-client/PlatformClientDetailPanel.tsx +10 -30
  532. package/src/platform-client/PlatformClientListPanel.tsx +2 -18
  533. package/src/platform-client/PlatformClientSecretAlert.tsx +26 -55
  534. package/src/provider.tsx +76 -33
  535. package/src/resource-creation/WizardNav.tsx +2 -18
  536. package/src/resource-detail/ConfirmDialog.tsx +1 -1
  537. package/src/resource-detail/useCopyResource.ts +17 -23
  538. package/src/schedule/ScheduleDetailView.tsx +2 -18
  539. package/src/schedule/ScheduleForm.tsx +19 -34
  540. package/src/session/NewSessionViewer.tsx +85 -7
  541. package/src/session/SessionViewer.tsx +120 -17
  542. package/src/session/__tests__/audienceWiring.test.tsx +76 -0
  543. package/src/session/__tests__/panelNegotiation.test.tsx +302 -0
  544. package/src/session/__tests__/useNewSessionFlow.test.tsx +134 -5
  545. package/src/session/__tests__/useSessionPageFlow.autoApprove.test.tsx +74 -0
  546. package/src/session/__tests__/useSessionPageFlow.runConfig.test.tsx +157 -0
  547. package/src/session/__tests__/useSessionPanel.test.ts +114 -0
  548. package/src/session/audience.ts +18 -0
  549. package/src/session/index.ts +2 -1
  550. package/src/session/run-config.ts +59 -0
  551. package/src/session/useNewSessionFlow.ts +39 -2
  552. package/src/session/useSessionConversation.ts +14 -10
  553. package/src/session/useSessionPageFlow.ts +51 -10
  554. package/src/session/useSessionPanel.ts +91 -10
  555. package/src/settings/ApiKeysSection.tsx +4 -3
  556. package/src/settings/ChannelAppsSection.tsx +4 -3
  557. package/src/settings/EnvironmentsSection.tsx +8 -5
  558. package/src/settings/IdentityProvidersSection.tsx +4 -3
  559. package/src/settings/InvitationsSection.tsx +4 -2
  560. package/src/settings/MembersSection.tsx +4 -2
  561. package/src/settings/OAuthAppsSection.tsx +4 -3
  562. package/src/settings/OrgProfileSection.tsx +4 -3
  563. package/src/settings/PlatformClientsSection.tsx +4 -3
  564. package/src/settings/UsageSection.tsx +4 -2
  565. package/src/sharing/ShareAgentDialog.tsx +28 -10
  566. package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -1
  567. package/src/sidebar/chrome.tsx +6 -6
  568. package/src/skill/SkillDiffDialog.tsx +1 -1
  569. package/src/skill/useSkillVersions.ts +1 -11
  570. package/src/styles.css +43 -0
  571. package/src/version-history/VersionTimelineEntry.tsx +1 -21
  572. package/src/workflow/FailedRunsWidget.tsx +2 -9
  573. package/src/workflow/PendingApprovalsWidget.tsx +2 -9
  574. package/src/workflow/ViewYamlDialog.tsx +7 -22
  575. package/src/workflow/WorkflowArchitectDialog.tsx +8 -27
  576. package/src/workflow/WorkflowArtifactDocument.tsx +5 -9
  577. package/src/workflow/WorkflowCanvasEditor.tsx +39 -7
  578. package/src/workflow/WorkflowCanvasInner.tsx +14 -1
  579. package/src/workflow/WorkflowDiffGraph.tsx +7 -1
  580. package/src/workflow/WorkflowExecutionGraph.tsx +26 -1
  581. package/src/workflow/WorkflowExecutionViewer.tsx +115 -24
  582. package/src/workflow/WorkflowExplainDialog.tsx +8 -24
  583. package/src/workflow/WorkflowNode.tsx +5 -2
  584. package/src/workflow/WorkflowOverviewGraph.tsx +9 -1
  585. package/src/workflow/WorkflowRefinePanel.tsx +2 -18
  586. package/src/workflow/WorkflowRepairCard.tsx +2 -18
  587. package/src/workflow/WorkflowRunDialog.tsx +31 -24
  588. package/src/workflow/WorkflowTaskApprovalSummary.tsx +2 -17
  589. package/src/workflow/WorkflowVersionBadge.tsx +4 -13
  590. package/src/workflow/WorkflowVersionTimeline.tsx +1 -25
  591. package/src/workflow/__tests__/WorkflowExecutionViewer.reconciliation.test.tsx +48 -1
  592. package/src/workflow/__tests__/WorkflowNode.test.tsx +93 -0
  593. package/src/workflow/__tests__/WorkflowRunDialog.test.tsx +127 -0
  594. package/src/workflow/__tests__/graph-history.test.ts +103 -0
  595. package/src/workflow/__tests__/overview-graph.test.ts +17 -0
  596. package/src/workflow/__tests__/panelNegotiation.test.tsx +230 -0
  597. package/src/workflow/__tests__/useCanvasKeyboardShortcuts.undo.test.ts +115 -0
  598. package/src/workflow/__tests__/useWorkflowCanvas.dirty.test.tsx +178 -0
  599. package/src/workflow/__tests__/useWorkflowCanvas.drag.test.tsx +224 -0
  600. package/src/workflow/__tests__/useWorkflowCanvas.undo.test.tsx +133 -0
  601. package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +100 -0
  602. package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +7 -11
  603. package/src/workflow/execution-history/ExecutionHistoryTable.tsx +1 -25
  604. package/src/workflow/index.ts +1 -0
  605. package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +17 -8
  606. package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
  607. package/src/workflow/instance/useDeleteWorkflowInstance.ts +9 -4
  608. package/src/workflow/layout/registry-dimensions.ts +2 -5
  609. package/src/workflow/node-shell/NodeShell.tsx +4 -0
  610. package/src/workflow/picker/BranchAddPopover.tsx +4 -3
  611. package/src/workflow/task-type-visual-registry.ts +5 -3
  612. package/src/workflow/templates/WorkflowTemplatePreview.tsx +1 -1
  613. package/src/workflow/useApprovalBoundary.ts +1 -1
  614. package/src/workflow/useCanvasKeyboardShortcuts.ts +33 -3
  615. package/src/workflow/useGraphHistory.ts +22 -41
  616. package/src/workflow/useWorkflowCanvas.ts +126 -21
  617. package/src/workflow/useWorkflowExecutionPanel.ts +95 -13
  618. package/src/workflow/useWorkflowSave.ts +2 -15
  619. package/src/workflow/workflow-graph-conversions.ts +25 -3
  620. package/styles.css +1 -1
  621. package/version-history/VersionTimelineEntry.d.ts.map +1 -1
  622. package/version-history/VersionTimelineEntry.js +1 -23
  623. package/version-history/VersionTimelineEntry.js.map +1 -1
  624. package/workflow/CanvasTransitionEdge.d.ts +1 -1
  625. package/workflow/FailedRunsWidget.d.ts.map +1 -1
  626. package/workflow/FailedRunsWidget.js +2 -11
  627. package/workflow/FailedRunsWidget.js.map +1 -1
  628. package/workflow/PendingApprovalsWidget.d.ts.map +1 -1
  629. package/workflow/PendingApprovalsWidget.js +2 -11
  630. package/workflow/PendingApprovalsWidget.js.map +1 -1
  631. package/workflow/ViewYamlDialog.d.ts.map +1 -1
  632. package/workflow/ViewYamlDialog.js +7 -23
  633. package/workflow/ViewYamlDialog.js.map +1 -1
  634. package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
  635. package/workflow/WorkflowArchitectDialog.js +7 -11
  636. package/workflow/WorkflowArchitectDialog.js.map +1 -1
  637. package/workflow/WorkflowArtifactDocument.d.ts.map +1 -1
  638. package/workflow/WorkflowArtifactDocument.js +5 -8
  639. package/workflow/WorkflowArtifactDocument.js.map +1 -1
  640. package/workflow/WorkflowCanvasEditor.d.ts.map +1 -1
  641. package/workflow/WorkflowCanvasEditor.js +31 -6
  642. package/workflow/WorkflowCanvasEditor.js.map +1 -1
  643. package/workflow/WorkflowCanvasInner.d.ts +4 -2
  644. package/workflow/WorkflowCanvasInner.d.ts.map +1 -1
  645. package/workflow/WorkflowCanvasInner.js +7 -3
  646. package/workflow/WorkflowCanvasInner.js.map +1 -1
  647. package/workflow/WorkflowDiffGraph.js +6 -2
  648. package/workflow/WorkflowDiffGraph.js.map +1 -1
  649. package/workflow/WorkflowExecutionGraph.d.ts.map +1 -1
  650. package/workflow/WorkflowExecutionGraph.js +27 -1
  651. package/workflow/WorkflowExecutionGraph.js.map +1 -1
  652. package/workflow/WorkflowExecutionViewer.d.ts +51 -0
  653. package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
  654. package/workflow/WorkflowExecutionViewer.js +49 -18
  655. package/workflow/WorkflowExecutionViewer.js.map +1 -1
  656. package/workflow/WorkflowExplainDialog.d.ts.map +1 -1
  657. package/workflow/WorkflowExplainDialog.js +6 -8
  658. package/workflow/WorkflowExplainDialog.js.map +1 -1
  659. package/workflow/WorkflowNode.d.ts.map +1 -1
  660. package/workflow/WorkflowNode.js +2 -2
  661. package/workflow/WorkflowNode.js.map +1 -1
  662. package/workflow/WorkflowOverviewGraph.js +8 -2
  663. package/workflow/WorkflowOverviewGraph.js.map +1 -1
  664. package/workflow/WorkflowRefinePanel.d.ts.map +1 -1
  665. package/workflow/WorkflowRefinePanel.js +2 -4
  666. package/workflow/WorkflowRefinePanel.js.map +1 -1
  667. package/workflow/WorkflowRepairCard.d.ts.map +1 -1
  668. package/workflow/WorkflowRepairCard.js +2 -4
  669. package/workflow/WorkflowRepairCard.js.map +1 -1
  670. package/workflow/WorkflowRunDialog.d.ts +11 -1
  671. package/workflow/WorkflowRunDialog.d.ts.map +1 -1
  672. package/workflow/WorkflowRunDialog.js +18 -9
  673. package/workflow/WorkflowRunDialog.js.map +1 -1
  674. package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
  675. package/workflow/WorkflowTaskApprovalSummary.js +2 -4
  676. package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
  677. package/workflow/WorkflowVersionBadge.d.ts.map +1 -1
  678. package/workflow/WorkflowVersionBadge.js +4 -13
  679. package/workflow/WorkflowVersionBadge.js.map +1 -1
  680. package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
  681. package/workflow/WorkflowVersionTimeline.js +1 -26
  682. package/workflow/WorkflowVersionTimeline.js.map +1 -1
  683. package/workflow/execution-comparison/ExecutionComparisonPicker.d.ts.map +1 -1
  684. package/workflow/execution-comparison/ExecutionComparisonPicker.js +7 -15
  685. package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
  686. package/workflow/execution-history/ExecutionHistoryTable.d.ts.map +1 -1
  687. package/workflow/execution-history/ExecutionHistoryTable.js +1 -24
  688. package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
  689. package/workflow/index.d.ts +1 -1
  690. package/workflow/index.d.ts.map +1 -1
  691. package/workflow/index.js.map +1 -1
  692. package/workflow/instance/CreateWorkflowInstanceDialog.d.ts.map +1 -1
  693. package/workflow/instance/CreateWorkflowInstanceDialog.js +10 -2
  694. package/workflow/instance/CreateWorkflowInstanceDialog.js.map +1 -1
  695. package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
  696. package/workflow/instance/WorkflowInstanceDetailPanel.js +1 -1
  697. package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
  698. package/workflow/instance/useDeleteWorkflowInstance.d.ts +9 -4
  699. package/workflow/instance/useDeleteWorkflowInstance.d.ts.map +1 -1
  700. package/workflow/instance/useDeleteWorkflowInstance.js +4 -2
  701. package/workflow/instance/useDeleteWorkflowInstance.js.map +1 -1
  702. package/workflow/layout/registry-dimensions.d.ts.map +1 -1
  703. package/workflow/layout/registry-dimensions.js +2 -5
  704. package/workflow/layout/registry-dimensions.js.map +1 -1
  705. package/workflow/node-shell/NodeShell.js +1 -1
  706. package/workflow/node-shell/NodeShell.js.map +1 -1
  707. package/workflow/picker/BranchAddPopover.d.ts.map +1 -1
  708. package/workflow/picker/BranchAddPopover.js +3 -2
  709. package/workflow/picker/BranchAddPopover.js.map +1 -1
  710. package/workflow/task-type-visual-registry.d.ts.map +1 -1
  711. package/workflow/task-type-visual-registry.js +5 -3
  712. package/workflow/task-type-visual-registry.js.map +1 -1
  713. package/workflow/templates/WorkflowTemplatePreview.js +1 -1
  714. package/workflow/useApprovalBoundary.d.ts +1 -1
  715. package/workflow/useApprovalBoundary.js +1 -1
  716. package/workflow/useCanvasKeyboardShortcuts.d.ts +15 -4
  717. package/workflow/useCanvasKeyboardShortcuts.d.ts.map +1 -1
  718. package/workflow/useCanvasKeyboardShortcuts.js +25 -4
  719. package/workflow/useCanvasKeyboardShortcuts.js.map +1 -1
  720. package/workflow/useGraphHistory.d.ts +16 -9
  721. package/workflow/useGraphHistory.d.ts.map +1 -1
  722. package/workflow/useGraphHistory.js +19 -33
  723. package/workflow/useGraphHistory.js.map +1 -1
  724. package/workflow/useWorkflowCanvas.d.ts +6 -4
  725. package/workflow/useWorkflowCanvas.d.ts.map +1 -1
  726. package/workflow/useWorkflowCanvas.js +115 -23
  727. package/workflow/useWorkflowCanvas.js.map +1 -1
  728. package/workflow/useWorkflowExecutionPanel.d.ts +38 -2
  729. package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -1
  730. package/workflow/useWorkflowExecutionPanel.js +46 -13
  731. package/workflow/useWorkflowExecutionPanel.js.map +1 -1
  732. package/workflow/useWorkflowSave.d.ts.map +1 -1
  733. package/workflow/useWorkflowSave.js +2 -15
  734. package/workflow/useWorkflowSave.js.map +1 -1
  735. package/workflow/workflow-graph-conversions.d.ts +19 -1
  736. package/workflow/workflow-graph-conversions.d.ts.map +1 -1
  737. package/workflow/workflow-graph-conversions.js +17 -3
  738. package/workflow/workflow-graph-conversions.js.map +1 -1
@@ -957,3 +957,100 @@ describe("MessageThread", () => {
957
957
  });
958
958
  });
959
959
  });
960
+
961
+ // ---------------------------------------------------------------------------
962
+ // Ambient liveness status line (stigmer#277)
963
+ // ---------------------------------------------------------------------------
964
+
965
+ describe("MessageThread liveness status line", () => {
966
+ const LINE = '[data-cursor-target="liveness-status-line"]';
967
+
968
+ it("anchors the thread's tail while the execution is live between visible events", () => {
969
+ // IN_PROGRESS, has responded (AI content), no running tool, no gate —
970
+ // the model-generation gap where the screen would otherwise be still.
971
+ const active = makeExecution({
972
+ id: "exec-live",
973
+ phase: ExecutionPhase.EXECUTION_IN_PROGRESS,
974
+ aiContent: "Let me look around.",
975
+ });
976
+ const { container } = render(
977
+ <MessageThread executions={[]} activeStreamExecution={active} />,
978
+ );
979
+ expect(container.querySelector(LINE)).not.toBeNull();
980
+ });
981
+
982
+ it("yields to a running tool call — that row carries the live signal", () => {
983
+ const active = makeExecution({
984
+ id: "exec-tool",
985
+ phase: ExecutionPhase.EXECUTION_IN_PROGRESS,
986
+ aiContent: "Running a command.",
987
+ });
988
+ const runningTool = create(ToolCallSchema, {
989
+ id: "tc-run",
990
+ name: "Shell",
991
+ args: { command: "sleep 5" },
992
+ status: ToolCallStatus.TOOL_CALL_RUNNING,
993
+ });
994
+ active.status!.messages[1].toolCalls = [runningTool];
995
+
996
+ const { container } = render(
997
+ <MessageThread executions={[]} activeStreamExecution={active} />,
998
+ );
999
+ expect(container.querySelector(LINE)).toBeNull();
1000
+ });
1001
+
1002
+ it("yields to a pending approval — shimmering 'Working…' at a gate would lie", () => {
1003
+ const active = makeExecutionWithApproval("exec-gated", "tc-1", "write_file");
1004
+ const { container } = render(
1005
+ <MessageThread
1006
+ executions={[]}
1007
+ activeStreamExecution={active}
1008
+ onApprovalSubmit={() => {}}
1009
+ />,
1010
+ );
1011
+ expect(container.querySelector(LINE)).toBeNull();
1012
+ });
1013
+
1014
+ it("disappears the moment the execution settles — phase-driven, never stream-inferred", () => {
1015
+ const done = makeExecution({
1016
+ id: "exec-done",
1017
+ phase: ExecutionPhase.EXECUTION_COMPLETED,
1018
+ aiContent: "All set.",
1019
+ });
1020
+ const { container } = render(
1021
+ <MessageThread executions={[done]} activeStreamExecution={null} />,
1022
+ );
1023
+ expect(container.querySelector(LINE)).toBeNull();
1024
+ });
1025
+
1026
+ it("leaves the pre-first-content window to the setup placeholder", () => {
1027
+ const active = makeExecution({
1028
+ id: "exec-fresh",
1029
+ phase: ExecutionPhase.EXECUTION_IN_PROGRESS,
1030
+ });
1031
+ // No AI content, no tool calls: hasStartedResponding is false.
1032
+ active.status!.messages = [active.status!.messages[0]];
1033
+
1034
+ const { container } = render(
1035
+ <MessageThread executions={[]} activeStreamExecution={active} />,
1036
+ );
1037
+ expect(container.querySelector(LINE)).toBeNull();
1038
+ // The synthetic "Thinking…" setup placeholder owns this window.
1039
+ expect(screen.getByText("Thinking\u2026")).toBeTruthy();
1040
+ });
1041
+
1042
+ it("carries the shared shimmer treatment on its label", () => {
1043
+ const active = makeExecution({
1044
+ id: "exec-live",
1045
+ phase: ExecutionPhase.EXECUTION_IN_PROGRESS,
1046
+ aiContent: "Let me look around.",
1047
+ });
1048
+ const { container } = render(
1049
+ <MessageThread executions={[]} activeStreamExecution={active} />,
1050
+ );
1051
+ const line = container.querySelector(LINE)!;
1052
+ expect(line.querySelector(".stgm-shimmer-label")?.textContent).toBe(
1053
+ "Working\u2026",
1054
+ );
1055
+ });
1056
+ });
@@ -1,6 +1,6 @@
1
1
  import { describe, it, expect, afterEach } from "vitest";
2
2
  import { render, screen, cleanup } from "@testing-library/react";
3
- import { TerminalSession } from "../TerminalSession";
3
+ import { TerminalSession, TerminalTail } from "../TerminalSession";
4
4
  import { SandboxContext } from "../SandboxContext";
5
5
 
6
6
  afterEach(cleanup);
@@ -70,3 +70,73 @@ describe("TerminalSession", () => {
70
70
  expect(container.textContent).toContain("src/a.ts");
71
71
  });
72
72
  });
73
+
74
+ describe("TerminalTail", () => {
75
+ it("keeps the command at full contrast and dims the output tail", () => {
76
+ const { container } = render(
77
+ <TerminalTail command="echo hi" stdout="hi" exitCode={0} />,
78
+ );
79
+ const tail = container.querySelector('[data-cursor-target="terminal-tail"]')!;
80
+ expect(tail.textContent).toContain("$ echo hi");
81
+ // Intent keeps reading contrast; the tail is one step below it.
82
+ expect(screen.getByText(/echo hi/).className).toContain("stg:text-foreground");
83
+ expect(screen.getByText("hi").className).toContain("stg:text-muted-foreground");
84
+ });
85
+
86
+ it("shows only the last lines, with an honest hidden-line count", () => {
87
+ const stdout = ["one", "two", "three", "four", "five"].join("\n");
88
+ const { container } = render(<TerminalTail command="seq 5" stdout={stdout} />);
89
+ const tail = container.querySelector('[data-cursor-target="terminal-tail"]')!;
90
+ expect(tail.textContent).toContain("three");
91
+ expect(tail.textContent).toContain("five");
92
+ expect(tail.textContent).not.toContain("one");
93
+ expect(tail.textContent).toContain("… +2 lines");
94
+ });
95
+
96
+ it("omits the hidden-count marker when everything fits", () => {
97
+ const { container } = render(
98
+ <TerminalTail command="pwd" stdout="/work\nok" />,
99
+ );
100
+ expect(container.textContent).not.toContain("+");
101
+ expect(container.textContent).toContain("/work");
102
+ expect(container.textContent).toContain("ok");
103
+ });
104
+
105
+ it("appends stderr after stdout in the combined tail", () => {
106
+ const { container } = render(
107
+ <TerminalTail command="build" stdout="step 1\nstep 2" stderr="warning: slow" />,
108
+ );
109
+ const tail = container.querySelector('[data-cursor-target="terminal-tail"]')!;
110
+ // Last three of the combined stream: step 1, step 2, warning.
111
+ expect(tail.textContent).toContain("step 2");
112
+ expect(tail.textContent).toContain("warning: slow");
113
+ });
114
+
115
+ it("keeps the exit badge when a failed session is shown collapsed", () => {
116
+ render(<TerminalTail command="false" stdout="boom" exitCode={2} />);
117
+ expect(screen.getByText("exit 2")).toBeTruthy();
118
+ expect(screen.getByText("Command exited with code 2")).toBeTruthy();
119
+ });
120
+
121
+ it("ignores a trailing newline when slicing the tail", () => {
122
+ const { container } = render(
123
+ <TerminalTail command="x" stdout={"a\nb\nc\nd\n"} />,
124
+ );
125
+ const tail = container.querySelector('[data-cursor-target="terminal-tail"]')!;
126
+ expect(tail.textContent).toContain("d");
127
+ expect(tail.textContent).toContain("… +1 line");
128
+ });
129
+
130
+ it("normalizes absolute sandbox paths like the full session", () => {
131
+ const { container } = render(
132
+ <SandboxContext.Provider value={{ sandboxWorkspaceRoot: "/home/daytona/workspace" }}>
133
+ <TerminalTail
134
+ command="ls /home/daytona/workspace/src"
135
+ stdout="/home/daytona/workspace/src/a.ts"
136
+ />
137
+ </SandboxContext.Provider>,
138
+ );
139
+ expect(container.textContent).not.toContain("/home/daytona/workspace/");
140
+ expect(container.textContent).toContain("$ ls src");
141
+ });
142
+ });
@@ -28,7 +28,9 @@ vi.mock("../useFileChangeContent", () => ({
28
28
  useFileChangeContent: () => mockContent,
29
29
  }));
30
30
 
31
- const { ToolCallDetail } = await import("../ToolCallDetail");
31
+ const { ToolCallDetail, formatDuration, formatHeaderDuration } = await import(
32
+ "../ToolCallDetail"
33
+ );
32
34
  const { FileReviewContext } = await import("../FileReviewContext");
33
35
 
34
36
  beforeEach(() => {
@@ -379,3 +381,33 @@ describe("ToolCallDetail — write body", () => {
379
381
  expect(container.querySelector(CLAMP)).not.toBeNull();
380
382
  });
381
383
  });
384
+
385
+ // ---------------------------------------------------------------------------
386
+ // Duration formatting — the exact helper vs the >= 1s header-chip variant
387
+ // ---------------------------------------------------------------------------
388
+
389
+ describe("formatHeaderDuration", () => {
390
+ const T0 = "2026-08-13T10:00:00.000Z";
391
+ const at = (ms: number) => new Date(Date.parse(T0) + ms).toISOString();
392
+
393
+ it("suppresses sub-second durations that formatDuration would render", () => {
394
+ // The exact helper keeps its public contract...
395
+ expect(formatDuration(T0, at(400))).toBe("400ms");
396
+ // ...while the header-chip variant treats the same span as noise.
397
+ expect(formatHeaderDuration(T0, at(400))).toBeNull();
398
+ });
399
+
400
+ it("passes through everything from one second up, exactly as formatDuration renders it", () => {
401
+ const cases = [1000, 2500, 61_000, 180_000];
402
+ for (const ms of cases) {
403
+ expect(formatHeaderDuration(T0, at(ms))).toBe(formatDuration(T0, at(ms)));
404
+ expect(formatHeaderDuration(T0, at(ms))).not.toBeNull();
405
+ }
406
+ });
407
+
408
+ it("stays null for missing or invalid timestamps, like the exact helper", () => {
409
+ expect(formatHeaderDuration("", at(400))).toBeNull();
410
+ expect(formatHeaderDuration(T0, "")).toBeNull();
411
+ expect(formatHeaderDuration("not-a-date", at(2000))).toBeNull();
412
+ });
413
+ });
@@ -37,6 +37,8 @@ function makeToolCall(opts: {
37
37
  mcpServerSlug?: string;
38
38
  status?: ToolCallStatus;
39
39
  fileChangeSetId?: string;
40
+ startedAt?: string;
41
+ completedAt?: string;
40
42
  }): ToolCall {
41
43
  return create(ToolCallSchema, {
42
44
  id: opts.id ?? opts.name,
@@ -46,6 +48,8 @@ function makeToolCall(opts: {
46
48
  mcpServerSlug: opts.mcpServerSlug ?? "",
47
49
  status: opts.status ?? ToolCallStatus.TOOL_CALL_COMPLETED,
48
50
  fileChangeSetId: opts.fileChangeSetId ?? "",
51
+ startedAt: opts.startedAt ?? "",
52
+ completedAt: opts.completedAt ?? "",
49
53
  });
50
54
  }
51
55
 
@@ -190,10 +194,10 @@ describe("ToolCallItem disclosure", () => {
190
194
  expect(container.querySelector("table")).not.toBeNull();
191
195
  });
192
196
 
193
- it("renders a settled shell as an always-visible terminal session, no chevron", () => {
194
- // Shell is a `preview` category: its output IS the information. The body
195
- // reads as one terminal session — the `$ command` prompt line leads, with
196
- // its output below visible without any disclosure click.
197
+ it("settles a successful shell into a collapsed dimmed tail behind a chevron", () => {
198
+ // Shell is the `tail` category: a settled success collapses to the
199
+ // TerminalTail teaser — the `$ command` line plus the last output lines at
200
+ // reduced contrastwith the header chevron as the expand control.
197
201
  const { container } = render(
198
202
  <ToolCallItem
199
203
  toolCall={makeToolCall({
@@ -203,13 +207,17 @@ describe("ToolCallItem disclosure", () => {
203
207
  })}
204
208
  />,
205
209
  );
206
- expect(hasHeaderChevron(container)).toBe(false);
207
- expect(previewBody(container)).not.toBeNull();
210
+ expect(hasHeaderChevron(container)).toBe(true);
211
+ expect(isExpanded(container)).toBe(false);
212
+ expect(
213
+ container.querySelector('[data-cursor-target="terminal-tail"]'),
214
+ ).not.toBeNull();
215
+ expect(
216
+ container.querySelector('[data-cursor-target="terminal-session"]'),
217
+ ).toBeNull();
218
+ // The teaser still carries the evidence: intent and last output.
208
219
  expect(container.textContent).toContain("$ echo hello");
209
220
  expect(screen.getByText("hello")).toBeTruthy();
210
- expect(
211
- container.querySelectorAll('[data-cursor-target="terminal-session"]'),
212
- ).toHaveLength(1);
213
221
  });
214
222
 
215
223
  it("renders a settled MCP tool's result inline with no chevron", () => {
@@ -248,7 +256,10 @@ describe("ToolCallItem disclosure", () => {
248
256
  expect(container.textContent).toContain("exit 2");
249
257
  });
250
258
 
251
- it("renders a running shell as a single terminal session block, no chevron", () => {
259
+ it("streams a running shell's full session in view (force-open, collapsible)", () => {
260
+ // The auto-open-while-running behaviour is untouched by the tail settle:
261
+ // an active command shows its output streaming. The chevron is present —
262
+ // a user may collapse a noisy long-running command, and their choice wins.
252
263
  const { container } = render(
253
264
  <ToolCallItem
254
265
  toolCall={makeToolCall({
@@ -259,12 +270,105 @@ describe("ToolCallItem disclosure", () => {
259
270
  })}
260
271
  />,
261
272
  );
262
- expect(hasHeaderChevron(container)).toBe(false);
273
+ expect(hasHeaderChevron(container)).toBe(true);
274
+ expect(isExpanded(container)).toBe(true);
263
275
  expect(
264
276
  container.querySelectorAll('[data-cursor-target="terminal-session"]'),
265
277
  ).toHaveLength(1);
266
278
  });
267
279
 
280
+ // --- Tail settle lifecycle (issue #275) ------------------------------------
281
+
282
+ it("collapses a running shell to the dimmed tail the moment it succeeds", () => {
283
+ const running = makeToolCall({
284
+ id: "tc-sh",
285
+ name: "Shell",
286
+ args: { command: "make build" },
287
+ result: "compiling…",
288
+ status: ToolCallStatus.TOOL_CALL_RUNNING,
289
+ });
290
+ const { container, rerender } = render(<ToolCallItem toolCall={running} />);
291
+ expect(isExpanded(container)).toBe(true);
292
+
293
+ rerender(
294
+ <ToolCallItem
295
+ toolCall={makeToolCall({
296
+ id: "tc-sh",
297
+ name: "Shell",
298
+ args: { command: "make build" },
299
+ result: "compiling…\nBUILD OK",
300
+ status: ToolCallStatus.TOOL_CALL_COMPLETED,
301
+ })}
302
+ />,
303
+ );
304
+ expect(isExpanded(container)).toBe(false);
305
+ expect(
306
+ container.querySelector('[data-cursor-target="terminal-tail"]'),
307
+ ).not.toBeNull();
308
+ expect(container.textContent).toContain("BUILD OK");
309
+ });
310
+
311
+ it("keeps a failed shell open — error output is content, not context", () => {
312
+ // A non-zero exit means the output is what the user needs next; the row
313
+ // must never settle into the dimmed teaser. The exit marker in the result
314
+ // string is the failure signal (status stays COMPLETED on the wire).
315
+ const { container } = render(
316
+ <ToolCallItem
317
+ toolCall={makeToolCall({
318
+ name: "Shell",
319
+ args: { command: "make build" },
320
+ result: "error: no rule\n[Command failed with exit code 2]",
321
+ })}
322
+ />,
323
+ );
324
+ expect(hasHeaderChevron(container)).toBe(true);
325
+ expect(isExpanded(container)).toBe(true);
326
+ expect(
327
+ container.querySelector('[data-cursor-target="terminal-session"]'),
328
+ ).not.toBeNull();
329
+ expect(container.textContent).toContain("exit 2");
330
+ });
331
+
332
+ it("keeps only the last lines in the collapsed tail, with an honest hidden-count", () => {
333
+ const output = ["one", "two", "three", "four", "five"].join("\n");
334
+ const { container } = render(
335
+ <ToolCallItem
336
+ toolCall={makeToolCall({
337
+ name: "Shell",
338
+ args: { command: "seq 5" },
339
+ result: output,
340
+ })}
341
+ />,
342
+ );
343
+ const tail = container.querySelector('[data-cursor-target="terminal-tail"]')!;
344
+ expect(tail.textContent).toContain("five");
345
+ expect(tail.textContent).toContain("three");
346
+ expect(tail.textContent).not.toContain("one");
347
+ expect(tail.textContent).toContain("+2 lines");
348
+ });
349
+
350
+ it("expands a collapsed tail to the full session on click, and the choice sticks", () => {
351
+ const settled = makeToolCall({
352
+ id: "tc-sh2",
353
+ name: "Shell",
354
+ args: { command: "echo hi" },
355
+ result: "hi",
356
+ });
357
+ const { container, rerender } = render(<ToolCallItem toolCall={settled} />);
358
+ expect(isExpanded(container)).toBe(false);
359
+
360
+ fireEvent.click(rowHeaderToggle(container)!);
361
+ expect(isExpanded(container)).toBe(true);
362
+ expect(
363
+ container.querySelector('[data-cursor-target="terminal-session"]'),
364
+ ).not.toBeNull();
365
+
366
+ // A stream frame re-rendering the same settled call never recollapses a
367
+ // row the user opened (useAutoDisclosure: the manual toggle wins).
368
+ rerender(<ToolCallItem toolCall={settled} />);
369
+ expect(isExpanded(container)).toBe(true);
370
+ });
371
+
268
372
  it("suppresses the body for a content-bearing tool that produced nothing", () => {
269
373
  // The regression guard: a preview-category tool whose result normalizes to
270
374
  // `empty` (no output) must stay a clean one-line row, never an empty padded
@@ -473,6 +577,190 @@ describe("ToolCallItem disclosure", () => {
473
577
  });
474
578
  });
475
579
 
580
+ // ---------------------------------------------------------------------------
581
+ // Density tier — quiet unboxed lines for metadata-only rows (stigmer#274)
582
+ // ---------------------------------------------------------------------------
583
+
584
+ function rowRoot(container: HTMLElement): HTMLElement {
585
+ return container.querySelector('[data-cursor-target="tool-call-row"]')!;
586
+ }
587
+ function isQuietLine(container: HTMLElement): boolean {
588
+ const cls = rowRoot(container).className;
589
+ return !cls.includes("stg:rounded-lg") && !cls.includes("stg:border-b");
590
+ }
591
+
592
+ describe("ToolCallItem density tier", () => {
593
+ it("renders metadata-only rows as quiet unboxed lines (read / list / search / think)", () => {
594
+ const cases: ToolCall[] = [
595
+ makeToolCall({ name: "Read", args: { path: "/a.ts" } }),
596
+ makeToolCall({ name: "ls", args: { path: "/src" } }),
597
+ makeToolCall({ name: "Grep", args: { pattern: "foo" }, result: "2 matches" }),
598
+ makeToolCall({ name: "think", args: { thought: "considering options" } }),
599
+ ];
600
+ for (const tc of cases) {
601
+ const { container, unmount } = render(<ToolCallItem toolCall={tc} />);
602
+ expect(isQuietLine(container), `${tc.name} should be a quiet line`).toBe(true);
603
+ unmount();
604
+ }
605
+ });
606
+
607
+ it("keeps content-bearing rows as cards (shell / edit)", () => {
608
+ const cases: ToolCall[] = [
609
+ makeToolCall({ name: "Shell", args: { command: "echo hi" }, result: "hi" }),
610
+ makeToolCall({
611
+ name: "StrReplace",
612
+ args: { path: "/a.ts", old_string: "a", new_string: "b" },
613
+ }),
614
+ ];
615
+ for (const tc of cases) {
616
+ const { container, unmount } = render(<ToolCallItem toolCall={tc} />);
617
+ expect(rowRoot(container).className, `${tc.name} should stay a card`).toContain(
618
+ "stg:border-border-prominent",
619
+ );
620
+ unmount();
621
+ }
622
+ });
623
+
624
+ it("escalates a quiet row to a card when it fails — error output is content", () => {
625
+ const failed = makeToolCall({
626
+ name: "Read",
627
+ args: { path: "/a.ts" },
628
+ status: ToolCallStatus.TOOL_CALL_FAILED,
629
+ result: '{"status":"error","message":"permission denied"}',
630
+ });
631
+ const { container } = render(<ToolCallItem toolCall={failed} />);
632
+ expect(rowRoot(container).className).toContain("stg:border-border-prominent");
633
+ });
634
+
635
+ it("escalates a quiet row to a card while gated — a decision surface is never frameless", () => {
636
+ const gated = makeToolCall({
637
+ id: "tc-read-gated",
638
+ name: "Read",
639
+ args: { path: "/secret" },
640
+ status: ToolCallStatus.TOOL_CALL_WAITING_APPROVAL,
641
+ });
642
+ const approval: PendingApproval = create(PendingApprovalSchema, {
643
+ toolCallId: "tc-read-gated",
644
+ toolName: "Read",
645
+ argsPreview: '{"path":"/secret"}',
646
+ });
647
+ const ctx: ApprovalContextValue = {
648
+ approvalsByToolCallId: new Map([["tc-read-gated", approval]]),
649
+ onSubmit: () => {},
650
+ submittingIds: new Set(),
651
+ errorsByToolCallId: new Map(),
652
+ };
653
+ const { container } = render(
654
+ <ApprovalContext.Provider value={ctx}>
655
+ <ToolCallItem toolCall={gated} />
656
+ </ApprovalContext.Provider>,
657
+ );
658
+ const cls = rowRoot(container).className;
659
+ expect(cls).toContain("stg:border-border-prominent");
660
+ expect(cls).toContain("stg:border-l-warning");
661
+ });
662
+
663
+ it("stays a quiet line while running — the in-flight state rides the label, not a frame", () => {
664
+ const running = makeToolCall({
665
+ name: "Read",
666
+ args: { path: "/a.ts" },
667
+ status: ToolCallStatus.TOOL_CALL_RUNNING,
668
+ });
669
+ const { container } = render(<ToolCallItem toolCall={running} />);
670
+ expect(isQuietLine(container)).toBe(true);
671
+ expect(container.querySelector(".stg\\:animate-spin")).not.toBeNull();
672
+ });
673
+
674
+ it("sweeps the running label with the ambient-liveness shimmer, settled labels stay static", () => {
675
+ const running = makeToolCall({
676
+ name: "Shell",
677
+ args: { command: "sleep 5" },
678
+ status: ToolCallStatus.TOOL_CALL_RUNNING,
679
+ });
680
+ const { container, rerender } = render(<ToolCallItem toolCall={running} />);
681
+ expect(container.querySelector(".stgm-shimmer-label")?.textContent).toBe("Shell");
682
+
683
+ const settled = makeToolCall({
684
+ name: "Shell",
685
+ args: { command: "sleep 5" },
686
+ result: "done",
687
+ });
688
+ rerender(<ToolCallItem toolCall={settled} />);
689
+ expect(container.querySelector(".stgm-shimmer-label")).toBeNull();
690
+ });
691
+
692
+ it("contains a quiet row's disclosed body under a left rail instead of a border", () => {
693
+ // Grep is a summary category with a real result body: expanding the quiet
694
+ // line must bound the body with the rail (the ThinkingMessage precedent),
695
+ // never leave it bleeding into the thread.
696
+ const tc = makeToolCall({
697
+ name: "Grep",
698
+ args: { pattern: "foo" },
699
+ result: "src/a.ts:1: foo",
700
+ });
701
+ const { container } = render(<ToolCallItem toolCall={tc} />);
702
+ fireEvent.click(rowHeaderToggle(container)!);
703
+ expect(container.querySelector(".stg\\:border-l-2")).not.toBeNull();
704
+ });
705
+ });
706
+
707
+ // ---------------------------------------------------------------------------
708
+ // Status vocabulary — success is silent, everything visible carries signal
709
+ // ---------------------------------------------------------------------------
710
+
711
+ describe("ToolCallItem status vocabulary", () => {
712
+ it("renders no status icon on a completed row — success is the silent default", () => {
713
+ const { container } = render(
714
+ <ToolCallItem
715
+ toolCall={makeToolCall({ name: "Shell", args: { command: "echo hi" }, result: "hi" })}
716
+ />,
717
+ );
718
+ expect(container.querySelector(".stg\\:text-success")).toBeNull();
719
+ });
720
+
721
+ it("keeps the failed icon — failure shouts", () => {
722
+ const { container } = render(
723
+ <ToolCallItem
724
+ toolCall={makeToolCall({
725
+ name: "Shell",
726
+ args: { command: "false" },
727
+ status: ToolCallStatus.TOOL_CALL_FAILED,
728
+ })}
729
+ />,
730
+ );
731
+ expect(container.querySelector(".stg\\:text-destructive")).not.toBeNull();
732
+ });
733
+ });
734
+
735
+ // ---------------------------------------------------------------------------
736
+ // Duration chips — shown only when they carry information (>= 1s)
737
+ // ---------------------------------------------------------------------------
738
+
739
+ describe("ToolCallItem duration chip", () => {
740
+ it("suppresses a sub-second duration — the chip would be noise", () => {
741
+ const tc = makeToolCall({
742
+ name: "Read",
743
+ args: { path: "/a.ts" },
744
+ startedAt: "2026-08-13T10:00:00.000Z",
745
+ completedAt: "2026-08-13T10:00:00.400Z",
746
+ });
747
+ render(<ToolCallItem toolCall={tc} />);
748
+ expect(screen.queryByText("400ms")).toBeNull();
749
+ });
750
+
751
+ it("shows a duration of a second or more — it carries information", () => {
752
+ const tc = makeToolCall({
753
+ name: "Shell",
754
+ args: { command: "sleep 2" },
755
+ result: "",
756
+ startedAt: "2026-08-13T10:00:00.000Z",
757
+ completedAt: "2026-08-13T10:00:02.500Z",
758
+ });
759
+ render(<ToolCallItem toolCall={tc} />);
760
+ expect(screen.getByText("2.5s")).toBeTruthy();
761
+ });
762
+ });
763
+
476
764
  // ---------------------------------------------------------------------------
477
765
  // File-review badge — a stamped edit row's live review state
478
766
  // ---------------------------------------------------------------------------
@@ -90,9 +90,12 @@ describe("ToolRunGroup", () => {
90
90
  );
91
91
  expect(container.querySelector(".stg\\:animate-spin")).toBeNull();
92
92
  expect(chipExpanded(container)).toBe(false);
93
- // The aggregate resolves to the terminal branch (completed chip in
94
- // text-success), not the non-terminal pending fallback (muted dot).
95
- expect(container.querySelector(".stg\\:text-success")).not.toBeNull();
93
+ // The aggregate resolves to the terminal branch which is silent
94
+ // (completed renders NO status icon, stigmer#274) — not the non-terminal
95
+ // pending fallback, which renders its muted dot as a third header svg
96
+ // beside the category icon and chevron.
97
+ const headerSvgs = container.querySelectorAll("button svg");
98
+ expect(headerSvgs.length).toBe(2);
96
99
  expect(screen.getByText("Read 2 files")).toBeTruthy();
97
100
  });
98
101
 
@@ -121,7 +124,7 @@ describe("ToolRunGroup", () => {
121
124
  expect(screen.getByLabelText("Approve")).toBeTruthy();
122
125
  });
123
126
 
124
- it("is a bordered card whose expanded children are borderless divider rows", () => {
127
+ it("is a quiet unboxed line whose expanded children sit under a left rail as divider rows", () => {
125
128
  const { container } = render(
126
129
  <ToolRunGroup
127
130
  category="read"
@@ -129,15 +132,20 @@ describe("ToolRunGroup", () => {
129
132
  />,
130
133
  );
131
134
 
135
+ // Quiet chrome (stigmer#274): the fold is metadata-only by construction,
136
+ // so the chip must never render as a bordered card shouting over the
137
+ // conversation. Class presence only — actual rendering is guarded by the
138
+ // layer-invariant + e2e computed-style tests (happy-dom does not resolve
139
+ // `@layer`).
132
140
  const chip = container.querySelector('[data-cursor-target="tool-run-group"]')!;
133
- expect(chip.className).toContain("stg:rounded-lg");
134
- // Class presence only — actual rendering is guarded by the layer-invariant +
135
- // e2e computed-style tests (happy-dom does not resolve `@layer`).
136
- expect(chip.className).toContain("stg:border-border-prominent");
141
+ expect(chip.className).not.toContain("stg:rounded-lg");
142
+ expect(chip.className).not.toContain("stg:border-border-prominent");
137
143
 
138
144
  fireEvent.click(screen.getByText("Read 2 files"));
139
145
 
140
- // The chip is the card; its child rows are dividers, never nested cards.
146
+ // With no card frame, the rail container owns the boundary; child rows
147
+ // are dividers, never nested cards.
148
+ expect(container.querySelector(".stg\\:border-l-2")).not.toBeNull();
141
149
  const rows = container.querySelectorAll('[data-cursor-target="tool-call-row"]');
142
150
  expect(rows.length).toBe(2);
143
151
  for (const row of rows) {
@@ -146,6 +154,30 @@ describe("ToolRunGroup", () => {
146
154
  }
147
155
  });
148
156
 
157
+ it("renders no status icon once the run settles successfully — success is silent", () => {
158
+ const { container } = render(
159
+ <ToolRunGroup
160
+ category="read"
161
+ toolCalls={[makeRead("r1", "/a.ts"), makeRead("r2", "/b.ts")]}
162
+ />,
163
+ );
164
+ // Header svgs: the category icon and the chevron — no green check.
165
+ expect(container.querySelectorAll("button svg").length).toBe(2);
166
+ });
167
+
168
+ it("keeps the failed icon when a folded call failed — failure shouts", () => {
169
+ const { container } = render(
170
+ <ToolRunGroup
171
+ category="read"
172
+ toolCalls={[
173
+ makeRead("r1", "/a.ts"),
174
+ makeRead("r2", "/b.ts", ToolCallStatus.TOOL_CALL_FAILED),
175
+ ]}
176
+ />,
177
+ );
178
+ expect(container.querySelector(".stg\\:text-destructive")).not.toBeNull();
179
+ });
180
+
149
181
  it("honours a custom label formatter", () => {
150
182
  render(
151
183
  <ToolRunGroup