@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
package/src/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  // Provider and context
2
2
  export { StigmerProvider, type StigmerProviderProps } from "./provider.js";
3
+ export { type ApprovalDefaults } from "./approval-defaults-context.js";
3
4
  export { StigmerContext } from "./context.js";
4
5
 
5
6
  // Runner adapter
@@ -39,7 +40,9 @@ export {
39
40
  modelKey,
40
41
  parseModelKey,
41
42
  fetchModelRegistry,
43
+ fetchModelRegistryDocument,
42
44
  parseRegistryJson,
45
+ parseRegistryDocument,
43
46
  useModelRegistry,
44
47
  ModelRegistryContext,
45
48
  ModelSelector,
@@ -51,6 +54,7 @@ export {
51
54
  } from "./models/index.js";
52
55
  export type {
53
56
  ModelInfo,
57
+ ModelRegistryDocument,
54
58
  ModelRegistryState,
55
59
  ParsedModelKey,
56
60
  Provider,
@@ -60,6 +64,7 @@ export type {
60
64
  ModelSelectorProps,
61
65
  HarnessSelectorProps,
62
66
  HarnessOption,
67
+ VisionLimits,
63
68
  } from "./models/index.js";
64
69
 
65
70
  // Workspace — behavior hooks and styled components
@@ -215,6 +220,7 @@ export type {
215
220
  ExecutionTargetOption,
216
221
  RuntimeEnvProvider,
217
222
  SessionAudience,
223
+ SessionPanelMode,
218
224
  SetupTabProps,
219
225
  SetupTabMutationCallbacks,
220
226
  } from "./session/index.js";
@@ -257,6 +263,7 @@ export {
257
263
  ExecutionPhaseBadge,
258
264
  InteractionModeBadge,
259
265
  SetupProgress,
266
+ LivenessStatusLine,
260
267
  ExecutionProgress,
261
268
  TodoList,
262
269
  TodoCard,
@@ -279,6 +286,7 @@ export {
279
286
  ResultView,
280
287
  summarizeResultView,
281
288
  TerminalSession,
289
+ TerminalTail,
282
290
  useToolPresentation,
283
291
  registerToolPresenter,
284
292
  getToolPresenter,
@@ -296,6 +304,7 @@ export {
296
304
  SubAgentSection,
297
305
  MessageEntry,
298
306
  MessageThread,
307
+ ExecutionErrorNotice,
299
308
  ThreadSkeleton,
300
309
  FollowUpInput,
301
310
  ApprovalCard,
@@ -380,6 +389,7 @@ export type {
380
389
  ExecutionPhaseBadgeProps,
381
390
  InteractionModeBadgeProps,
382
391
  SetupProgressProps,
392
+ LivenessStatusLineProps,
383
393
  ExecutionProgressProps,
384
394
  TodoListProps,
385
395
  TodoCardProps,
@@ -398,6 +408,7 @@ export type {
398
408
  ToolCallDetailProps,
399
409
  ResultViewProps,
400
410
  TerminalSessionProps,
411
+ TerminalTailProps,
401
412
  ToolPresentation,
402
413
  ToolPresenter,
403
414
  ToolDisclosure,
@@ -409,6 +420,8 @@ export type {
409
420
  SubAgentSectionProps,
410
421
  MessageEntryProps,
411
422
  MessageThreadProps,
423
+ MessageThreadSlots,
424
+ ExecutionErrorNoticeProps,
412
425
  ThreadContentColumn,
413
426
  ThreadSkeletonProps,
414
427
  FollowUpInputProps,
@@ -466,13 +479,14 @@ export type { ExecutionArtifact } from "@stigmer/protos/ai/stigmer/agentic/agent
466
479
  export { ExecutionArtifactKind } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
467
480
 
468
481
  // Attachment — file upload behavior hook, styled chip list, clipboard paste,
469
- // and vision-resolution image preparation
482
+ // vision-resolution image preparation, and vision preflight warnings
470
483
  export {
471
484
  useAttachments,
472
485
  AttachmentChipList,
473
486
  MAX_ATTACHMENT_BYTES,
474
487
  MAX_VISION_LONG_EDGE_PX,
475
488
  MAX_VISION_PIXELS,
489
+ assessVisionPreflight,
476
490
  detectContentType,
477
491
  exceedsVisionResolution,
478
492
  extractClipboardFiles,
@@ -481,15 +495,22 @@ export {
481
495
  prepareImageForVision,
482
496
  uniquifyFilename,
483
497
  validateAttachmentSize,
498
+ visionPreflightMessage,
484
499
  } from "./attachment/index.js";
485
500
  export type {
486
501
  AttachmentPhase,
487
502
  AttachmentEntry,
503
+ AssessVisionPreflightOptions,
488
504
  ClipboardFilesSource,
489
505
  UseAttachmentsOptions,
490
506
  UseAttachmentsReturn,
491
507
  AttachmentChipListProps,
492
508
  VisionFitSize,
509
+ VisionPreflight,
510
+ VisionPreflightAttachment,
511
+ VisionPreflightMessageOptions,
512
+ VisionPreflightReason,
513
+ VisionPreflightWarning,
493
514
  } from "./attachment/index.js";
494
515
 
495
516
  // File Reference — workspace file-reference behavior hook and styled chip list
@@ -1868,6 +1889,7 @@ export type {
1868
1889
  WorkflowTaskListProps,
1869
1890
  WorkflowDetailViewProps,
1870
1891
  WorkflowExecutionViewerProps,
1892
+ WorkflowExecutionPanelMode,
1871
1893
  WorkflowExecutionHeaderProps,
1872
1894
  WorkflowExecutionPanelController,
1873
1895
  UseWorkflowExecutionPanelOptions,
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  import { cn } from "@stigmer/theme";
4
+ import { SpinnerIcon } from "../internal/thread-card/glyphs.js";
4
5
 
5
6
  /** The visual weight of a {@link DecisionButton}. */
6
7
  export type DecisionVariant = "primary" | "ghost" | "danger";
@@ -106,23 +107,3 @@ export function DecisionButton({
106
107
  );
107
108
  }
108
109
 
109
- // ---------------------------------------------------------------------------
110
- // Inline SVG icon
111
- // ---------------------------------------------------------------------------
112
-
113
- function SpinnerIcon() {
114
- return (
115
- <svg
116
- width="10"
117
- height="10"
118
- viewBox="0 0 12 12"
119
- fill="none"
120
- stroke="currentColor"
121
- strokeWidth="1.5"
122
- className="stg:animate-spin"
123
- aria-hidden="true"
124
- >
125
- <path d="M6 1.5A4.5 4.5 0 1 1 1.5 6" strokeLinecap="round" />
126
- </svg>
127
- );
128
- }
@@ -0,0 +1,42 @@
1
+ import { cn } from "@stigmer/theme";
2
+
3
+ /**
4
+ * The SDK's canonical in-flight spinner: a three-quarter arc on a 16×16
5
+ * grid, colored by `currentColor` so the consumer's text token drives it
6
+ * (never hardcoded values — Dont-Do #3). Extracted from ~33 identical
7
+ * per-component copies (stigmer-cloud#270); new busy states import this
8
+ * instead of pasting another one.
9
+ *
10
+ * `size` is the rendered box; the glyph scales from the same viewBox, so
11
+ * every size renders the identical shape. Decorative by contract
12
+ * (`aria-hidden`) — pair it with visible or `sr-only` text when the busy
13
+ * state itself must be announced.
14
+ *
15
+ * The thread-card rows deliberately use a finer quarter-arc micro-glyph
16
+ * instead — see `internal/thread-card/glyphs.tsx`.
17
+ *
18
+ * @internal Not part of the public API.
19
+ */
20
+ export function SpinnerIcon({
21
+ size = 16,
22
+ className,
23
+ }: {
24
+ readonly size?: number;
25
+ readonly className?: string;
26
+ } = {}) {
27
+ return (
28
+ <svg
29
+ width={size}
30
+ height={size}
31
+ viewBox="0 0 16 16"
32
+ fill="none"
33
+ stroke="currentColor"
34
+ strokeWidth="2"
35
+ strokeLinecap="round"
36
+ className={cn("stg:animate-spin", className)}
37
+ aria-hidden="true"
38
+ >
39
+ <path d="M8 2a6 6 0 1 0 6 6" />
40
+ </svg>
41
+ );
42
+ }
@@ -1,9 +1,9 @@
1
1
  // Contract tests for the shared thread-card shell (T05/T06): the chrome
2
- // axes (bordered vs divider row, gate accent), the header gestures
3
- // (`expand` / `none` — `select` died with the Inspect drill-down, T06)
4
- // with their ARIA semantics, and the nested-button keydown guard. The two
5
- // consuming threads pin their own compositions; this file pins what they
6
- // share.
2
+ // tiers (card / nested divider row / quiet unboxed line, gate accent), the
3
+ // header gestures (`expand` / `none` — `select` died with the Inspect
4
+ // drill-down, T06) with their ARIA semantics, and the nested-button keydown
5
+ // guard. The two consuming threads pin their own compositions; this file
6
+ // pins what they share.
7
7
 
8
8
  import { describe, it, expect, vi, afterEach } from "vitest";
9
9
  import { render, screen, fireEvent, cleanup } from "@testing-library/react";
@@ -16,7 +16,7 @@ import {
16
16
  afterEach(cleanup);
17
17
 
18
18
  describe("ThreadCardShell chrome", () => {
19
- it("renders a bordered card by default and a divider row when nested", () => {
19
+ it("renders a bordered card by default, a divider row when nested, and no chrome when quiet", () => {
20
20
  const { rerender, container } = render(
21
21
  <ThreadCardShell cursorTarget="row">
22
22
  <ThreadCardHeader>content</ThreadCardHeader>
@@ -27,12 +27,22 @@ describe("ThreadCardShell chrome", () => {
27
27
  expect(root().className).toContain("stg:border-border-prominent");
28
28
 
29
29
  rerender(
30
- <ThreadCardShell cursorTarget="row" bordered={false}>
30
+ <ThreadCardShell cursorTarget="row" variant="row">
31
31
  <ThreadCardHeader>content</ThreadCardHeader>
32
32
  </ThreadCardShell>,
33
33
  );
34
34
  expect(root().className).toContain("stg:border-b");
35
35
  expect(root().className).not.toContain("stg:border-border-prominent");
36
+
37
+ rerender(
38
+ <ThreadCardShell cursorTarget="row" variant="quiet">
39
+ <ThreadCardHeader>content</ThreadCardHeader>
40
+ </ThreadCardShell>,
41
+ );
42
+ // The quiet tier is an unboxed line: no card border, no divider.
43
+ expect(root().className).not.toContain("stg:border-border-prominent");
44
+ expect(root().className).not.toContain("stg:border-b");
45
+ expect(root().className).not.toContain("stg:rounded-lg");
36
46
  });
37
47
 
38
48
  it("carries the gate accent", () => {
@@ -44,6 +54,19 @@ describe("ThreadCardShell chrome", () => {
44
54
  const root = container.querySelector('[data-cursor-target="row"]') as HTMLElement;
45
55
  expect(root.className).toContain("stg:border-l-warning");
46
56
  });
57
+
58
+ it("never draws the gate accent on a quiet shell — escalation is the caller's job", () => {
59
+ // The quiet tier deliberately ignores `accent`: a gated row must be
60
+ // escalated to variant="card" by its component, never rendered as an
61
+ // accented bare line (see ThreadCardVariant).
62
+ const { container } = render(
63
+ <ThreadCardShell cursorTarget="row" variant="quiet" accent="warning">
64
+ <ThreadCardHeader>content</ThreadCardHeader>
65
+ </ThreadCardShell>,
66
+ );
67
+ const root = container.querySelector('[data-cursor-target="row"]') as HTMLElement;
68
+ expect(root.className).not.toContain("stg:border-l-warning");
69
+ });
47
70
  });
48
71
 
49
72
  describe("ThreadCardHeader gestures", () => {
@@ -102,4 +125,17 @@ describe("ThreadCardBody", () => {
102
125
  render(<ThreadCardBody id="detail-1">body</ThreadCardBody>);
103
126
  expect(document.getElementById("detail-1")?.textContent).toBe("body");
104
127
  });
128
+
129
+ it("swaps the card padding for a left rail when the body is quiet-contained", () => {
130
+ const { rerender } = render(<ThreadCardBody id="detail-1">body</ThreadCardBody>);
131
+ const el = () => document.getElementById("detail-1")!;
132
+ expect(el().className).not.toContain("stg:border-l-2");
133
+
134
+ rerender(
135
+ <ThreadCardBody id="detail-1" rail>
136
+ body
137
+ </ThreadCardBody>,
138
+ );
139
+ expect(el().className).toContain("stg:border-l-2");
140
+ });
105
141
  });
@@ -0,0 +1,92 @@
1
+ import { describe, expect, it, vi, beforeEach, afterEach } from "vitest";
2
+ import { act, renderHook } from "@testing-library/react";
3
+ import { useCopyFeedback } from "../useCopyFeedback";
4
+
5
+ describe("useCopyFeedback", () => {
6
+ let writeText: ReturnType<typeof vi.fn>;
7
+
8
+ beforeEach(() => {
9
+ vi.useFakeTimers();
10
+ writeText = vi.fn().mockResolvedValue(undefined);
11
+ vi.stubGlobal("navigator", { clipboard: { writeText } });
12
+ });
13
+
14
+ afterEach(() => {
15
+ vi.unstubAllGlobals();
16
+ vi.useRealTimers();
17
+ });
18
+
19
+ it("resolves true and flashes `copied` for a successful write", async () => {
20
+ const { result } = renderHook(() => useCopyFeedback());
21
+
22
+ let outcome: boolean | undefined;
23
+ await act(async () => {
24
+ outcome = await result.current.copy("hello");
25
+ });
26
+
27
+ expect(outcome).toBe(true);
28
+ expect(writeText).toHaveBeenCalledWith("hello");
29
+ expect(result.current.copied).toBe(true);
30
+
31
+ act(() => {
32
+ vi.advanceTimersByTime(2000);
33
+ });
34
+ expect(result.current.copied).toBe(false);
35
+ });
36
+
37
+ it("resolves false and never claims `copied` for a rejected write", async () => {
38
+ writeText.mockRejectedValue(new Error("denied"));
39
+ const { result } = renderHook(() => useCopyFeedback());
40
+
41
+ let outcome: boolean | undefined;
42
+ await act(async () => {
43
+ outcome = await result.current.copy("secret");
44
+ });
45
+
46
+ expect(outcome).toBe(false);
47
+ expect(result.current.copied).toBe(false);
48
+ });
49
+
50
+ it("restarts the feedback window on a rapid second copy", async () => {
51
+ const { result } = renderHook(() => useCopyFeedback());
52
+
53
+ await act(async () => {
54
+ await result.current.copy("one");
55
+ });
56
+ act(() => {
57
+ vi.advanceTimersByTime(1500);
58
+ });
59
+ await act(async () => {
60
+ await result.current.copy("two");
61
+ });
62
+
63
+ // 1.5s into the second window: still showing feedback.
64
+ act(() => {
65
+ vi.advanceTimersByTime(1500);
66
+ });
67
+ expect(result.current.copied).toBe(true);
68
+
69
+ act(() => {
70
+ vi.advanceTimersByTime(500);
71
+ });
72
+ expect(result.current.copied).toBe(false);
73
+ });
74
+
75
+ it("does not set state after unmount when the timer would fire", async () => {
76
+ const errorSpy = vi.spyOn(console, "error").mockImplementation(() => {});
77
+ const { result, unmount } = renderHook(() => useCopyFeedback());
78
+
79
+ await act(async () => {
80
+ await result.current.copy("bye");
81
+ });
82
+ unmount();
83
+ act(() => {
84
+ vi.advanceTimersByTime(2000);
85
+ });
86
+
87
+ // React warns on setState-after-unmount via console.error; silence means
88
+ // the unmount cleanup cleared the pending timer.
89
+ expect(errorSpy).not.toHaveBeenCalled();
90
+ errorSpy.mockRestore();
91
+ });
92
+ });
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Detect gRPC/Connect UNIMPLEMENTED (code 12) from any error the SDK
3
+ * client can throw.
4
+ *
5
+ * UNIMPLEMENTED is how the shared SDK discovers edition capabilities:
6
+ * the OSS server deliberately leaves hosted-only RPCs unimplemented
7
+ * (e.g. the org-OAuth-app override surface, stigmer/stigmer#558), and
8
+ * hooks probe for it to degrade gracefully instead of surfacing an
9
+ * error. The SDK's generated CODE_MAP does not include Unimplemented —
10
+ * a `StigmerError` wrapping one reports `code: "unknown"` — so
11
+ * detection must go through `connectCode` (or the message shapes used
12
+ * by transports that never produce a structured error).
13
+ *
14
+ * @internal
15
+ */
16
+ export function isUnimplemented(err: unknown): boolean {
17
+ if (!err || typeof err !== "object") return false;
18
+ if (
19
+ "connectCode" in err &&
20
+ (err as { connectCode: unknown }).connectCode === 12
21
+ ) {
22
+ return true;
23
+ }
24
+ const msg = (err as { message?: string }).message ?? "";
25
+ return msg.includes("[unimplemented]") || msg.includes("UNIMPLEMENTED");
26
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Select an element's text content, replacing any existing selection.
3
+ *
4
+ * The honest fallback for one-time secret reveals (API keys, invite URLs,
5
+ * client secrets) when the clipboard write is rejected (insecure context,
6
+ * denied permission): instead of claiming "Copied" for a copy that didn't
7
+ * happen, the revealed value is selected so the user can copy it manually.
8
+ * Pair with `useCopyFeedback` — branch on its `copy()` result.
9
+ */
10
+ export function selectElementText(el: HTMLElement): void {
11
+ const selection = window.getSelection();
12
+ if (!selection) return;
13
+ const range = document.createRange();
14
+ range.selectNodeContents(el);
15
+ selection.removeAllRanges();
16
+ selection.addRange(range);
17
+ }
@@ -14,7 +14,8 @@ import { ChevronIcon } from "./glyphs.js";
14
14
  * Three pieces, composed via children (slots-as-children, never a
15
15
  * mega-prop card — each thread's composition stays explicit):
16
16
  *
17
- * - {@link ThreadCardShell} — the chrome: bordered card vs divider row,
17
+ * - {@link ThreadCardShell} — the chrome tier: bordered card, nested divider
18
+ * row, or quiet unboxed line ({@link ThreadCardVariant}), plus the
18
19
  * pending-gate accent.
19
20
  * - {@link ThreadCardHeader} — the one-line header region with a
20
21
  * primary gesture: `expand` (summary rows, `aria-expanded`, appends
@@ -41,15 +42,25 @@ import { ChevronIcon } from "./glyphs.js";
41
42
  // Shell — the card chrome
42
43
  // ---------------------------------------------------------------------------
43
44
 
45
+ /**
46
+ * The chrome tier of a thread row (the density axis at the shell level):
47
+ *
48
+ * - `"card"` — a self-contained bordered card (the default).
49
+ * - `"row"` — a divider-separated row for rows nested inside a container
50
+ * that already provides the frame (e.g. an expanded `ToolRunGroup` fold),
51
+ * avoiding a card-in-a-card.
52
+ * - `"quiet"` — no chrome at all: an unboxed line for metadata-only rows
53
+ * whose header IS the complete information (reads, listings, thoughts).
54
+ * The gate accent is deliberately not drawn in this tier — a row carrying
55
+ * an accent must be escalated to `"card"` by the caller, never rendered
56
+ * as an accented bare line.
57
+ */
58
+ export type ThreadCardVariant = "card" | "row" | "quiet";
59
+
44
60
  /** Props for {@link ThreadCardShell}. */
45
61
  export interface ThreadCardShellProps {
46
- /**
47
- * Whether the row renders as its own self-contained card (a thin rounded
48
- * border). Set to `false` when nested inside a container that already
49
- * provides the border — e.g. the folded `ToolRunGroup` chip — where the
50
- * row degrades to a divider-separated row to avoid a card-in-a-card.
51
- */
52
- readonly bordered?: boolean;
62
+ /** The chrome tier — see {@link ThreadCardVariant}. Defaults to `"card"`. */
63
+ readonly variant?: ThreadCardVariant;
53
64
  /**
54
65
  * A restrained left accent for a row awaiting a human decision —
55
66
  * `"warning"` for ordinary gates, `"destructive"` for delete gates.
@@ -64,25 +75,31 @@ export interface ThreadCardShellProps {
64
75
  readonly children: ReactNode;
65
76
  }
66
77
 
78
+ const VARIANT_CHROME: Record<Exclude<ThreadCardVariant, "card">, string> = {
79
+ row: "stg:border-b stg:border-border-muted stg:last:border-b-0",
80
+ quiet: "",
81
+ };
82
+
67
83
  /** The thread card's outer chrome. See the module doc for the full contract. */
68
84
  export function ThreadCardShell({
69
- bordered = true,
85
+ variant = "card",
70
86
  accent = null,
71
87
  cursorTarget,
72
88
  className,
73
89
  ref,
74
90
  children,
75
91
  }: ThreadCardShellProps) {
76
- const chrome = bordered
77
- ? cn(
78
- // border-prominent (not border): a transparent card needs a line the
79
- // eye actually catches the default border token is white at 14%
80
- // opacity, which vanishes on the dark thread surface.
81
- "stg:rounded-lg stg:border stg:border-border-prominent stg:overflow-hidden",
82
- accent === "warning" && "stg:border-l-2 stg:border-l-warning",
83
- accent === "destructive" && "stg:border-l-2 stg:border-l-destructive",
84
- )
85
- : "stg:border-b stg:border-border-muted stg:last:border-b-0";
92
+ const chrome =
93
+ variant === "card"
94
+ ? cn(
95
+ // border-prominent (not border): a transparent card needs a line the
96
+ // eye actually catches the default border token is white at 14%
97
+ // opacity, which vanishes on the dark thread surface.
98
+ "stg:rounded-lg stg:border stg:border-border-prominent stg:overflow-hidden",
99
+ accent === "warning" && "stg:border-l-2 stg:border-l-warning",
100
+ accent === "destructive" && "stg:border-l-2 stg:border-l-destructive",
101
+ )
102
+ : VARIANT_CHROME[variant];
86
103
 
87
104
  return (
88
105
  <div ref={ref} data-cursor-target={cursorTarget} className={cn(chrome, className)}>
@@ -176,13 +193,28 @@ export interface ThreadCardBodyProps {
176
193
  readonly id?: string;
177
194
  /** Rendered as `data-cursor-target` for e2e targeting. */
178
195
  readonly cursorTarget?: string;
196
+ /**
197
+ * Body containment for a `"quiet"` shell: with no card border around it, a
198
+ * disclosed body needs its own boundary — a light left rail (the
199
+ * `ThinkingMessage` expanded-state precedent) instead of the card's padding
200
+ * box. Ignored for card/row shells, whose frame already bounds the body.
201
+ */
202
+ readonly rail?: boolean;
179
203
  readonly children: ReactNode;
180
204
  }
181
205
 
182
206
  /** The thread card's body padding contract. */
183
- export function ThreadCardBody({ id, cursorTarget, children }: ThreadCardBodyProps) {
207
+ export function ThreadCardBody({ id, cursorTarget, rail = false, children }: ThreadCardBodyProps) {
184
208
  return (
185
- <div id={id} data-cursor-target={cursorTarget} className="stg:px-2.5 stg:pb-2.5 stg:pt-1">
209
+ <div
210
+ id={id}
211
+ data-cursor-target={cursorTarget}
212
+ className={
213
+ rail
214
+ ? "stg:ml-1.5 stg:border-l-2 stg:border-border-muted stg:py-1 stg:pl-3 stg:pr-2.5"
215
+ : "stg:px-2.5 stg:pb-2.5 stg:pt-1"
216
+ }
217
+ >
186
218
  {children}
187
219
  </div>
188
220
  );
@@ -13,10 +13,31 @@ import { cn } from "@stigmer/theme";
13
13
  * @internal Not part of the public API.
14
14
  */
15
15
 
16
- /** Quarter-arc spinner for an in-flight item. */
17
- export function SpinnerIcon() {
16
+ /**
17
+ * Quarter-arc spinner for an in-flight item. Deliberately finer than the
18
+ * SDK-wide `internal/SpinnerIcon` (1.5 stroke on a 12 grid vs 2 on 16) —
19
+ * the micro-row weight this vocabulary is built around. Card-adjacent
20
+ * surfaces that used to carry their own copies (tool-run groups, file
21
+ * review, decision buttons) size it up via `size` instead.
22
+ */
23
+ export function SpinnerIcon({
24
+ size = 10,
25
+ className,
26
+ }: {
27
+ readonly size?: number;
28
+ readonly className?: string;
29
+ } = {}) {
18
30
  return (
19
- <svg width="10" height="10" viewBox="0 0 12 12" fill="none" stroke="currentColor" strokeWidth="1.5" className="stg:animate-spin">
31
+ <svg
32
+ width={size}
33
+ height={size}
34
+ viewBox="0 0 12 12"
35
+ fill="none"
36
+ stroke="currentColor"
37
+ strokeWidth="1.5"
38
+ className={cn("stg:animate-spin", className)}
39
+ aria-hidden="true"
40
+ >
20
41
  <path d="M6 1.5A4.5 4.5 0 1 1 1.5 6" strokeLinecap="round" />
21
42
  </svg>
22
43
  );
@@ -2,6 +2,7 @@ export {
2
2
  ThreadCardShell,
3
3
  ThreadCardHeader,
4
4
  ThreadCardBody,
5
+ type ThreadCardVariant,
5
6
  type ThreadCardShellProps,
6
7
  type ThreadCardHeaderProps,
7
8
  type ThreadCardHeaderGesture,
@@ -0,0 +1,61 @@
1
+ "use client";
2
+
3
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
+
5
+ /** How long the transient `copied` flag stays true after a successful copy. */
6
+ const COPIED_FEEDBACK_MS = 2000;
7
+
8
+ /** Return value of {@link useCopyFeedback}. */
9
+ export interface UseCopyFeedbackReturn {
10
+ /**
11
+ * Write `text` to the clipboard. Resolves `true` when the write landed and
12
+ * `false` when it was rejected (insecure context, denied permission); a
13
+ * rejected write leaves `copied` false so the affordance never claims a
14
+ * copy that didn't happen. Callers with a manual fallback (e.g. selecting
15
+ * the on-screen text for a hand copy) branch on the result; plain
16
+ * affordances can ignore it.
17
+ */
18
+ readonly copy: (text: string) => Promise<boolean>;
19
+
20
+ /**
21
+ * `true` for a brief window after a successful copy (drives "Copied"
22
+ * affordance feedback), then resets automatically.
23
+ */
24
+ readonly copied: boolean;
25
+ }
26
+
27
+ /**
28
+ * Behavior hook for the copy-with-feedback shape: write locally-held text to
29
+ * the clipboard and flash a transient `copied` flag for the affordance swap.
30
+ *
31
+ * This is the fetch-free sibling of `useArtifactCopy` (which resolves remote
32
+ * artifact bytes at click time); use it wherever the text to copy is already
33
+ * in hand — message content, identifiers, code blocks. One implementation
34
+ * keeps the feedback window and the unmount-safety identical across surfaces.
35
+ */
36
+ export function useCopyFeedback(): UseCopyFeedbackReturn {
37
+ const [copied, setCopied] = useState(false);
38
+
39
+ // Clear the pending "copied" timer on unmount so a resolved copy never sets
40
+ // state on an unmounted component.
41
+ const copiedTimer = useRef<ReturnType<typeof setTimeout> | null>(null);
42
+ useEffect(() => {
43
+ return () => {
44
+ if (copiedTimer.current !== null) clearTimeout(copiedTimer.current);
45
+ };
46
+ }, []);
47
+
48
+ const copy = useCallback(async (text: string) => {
49
+ try {
50
+ await navigator.clipboard.writeText(text);
51
+ } catch {
52
+ return false;
53
+ }
54
+ setCopied(true);
55
+ if (copiedTimer.current !== null) clearTimeout(copiedTimer.current);
56
+ copiedTimer.current = setTimeout(() => setCopied(false), COPIED_FEEDBACK_MS);
57
+ return true;
58
+ }, []);
59
+
60
+ return useMemo(() => ({ copy, copied }), [copy, copied]);
61
+ }