@stigmer/react 3.12.1 → 3.12.3

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 (708) hide show
  1. package/access/ManageAccessDialog.d.ts.map +1 -1
  2. package/access/ManageAccessDialog.js +8 -19
  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 +15 -20
  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/AttachmentImageLightbox.d.ts.map +1 -1
  30. package/attachment/AttachmentImageLightbox.js +8 -23
  31. package/attachment/AttachmentImageLightbox.js.map +1 -1
  32. package/attachment/index.d.ts +2 -0
  33. package/attachment/index.d.ts.map +1 -1
  34. package/attachment/index.js +1 -0
  35. package/attachment/index.js.map +1 -1
  36. package/attachment/vision-preflight.d.ts +113 -0
  37. package/attachment/vision-preflight.d.ts.map +1 -0
  38. package/attachment/vision-preflight.js +143 -0
  39. package/attachment/vision-preflight.js.map +1 -0
  40. package/billing/AutoRechargeCard.d.ts.map +1 -1
  41. package/billing/AutoRechargeCard.js +3 -2
  42. package/billing/AutoRechargeCard.js.map +1 -1
  43. package/billing/BillingSection.d.ts.map +1 -1
  44. package/billing/BillingSection.js +3 -2
  45. package/billing/BillingSection.js.map +1 -1
  46. package/channel/ChannelConversationsDialog.d.ts.map +1 -1
  47. package/channel/ChannelConversationsDialog.js +6 -21
  48. package/channel/ChannelConversationsDialog.js.map +1 -1
  49. package/channel/ChannelCredentialsDialog.d.ts.map +1 -1
  50. package/channel/ChannelCredentialsDialog.js +10 -21
  51. package/channel/ChannelCredentialsDialog.js.map +1 -1
  52. package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
  53. package/channel/ChannelTemplatesDialog.js +7 -22
  54. package/channel/ChannelTemplatesDialog.js.map +1 -1
  55. package/channel/ConnectSlackDialog.d.ts.map +1 -1
  56. package/channel/ConnectSlackDialog.js +10 -23
  57. package/channel/ConnectSlackDialog.js.map +1 -1
  58. package/channel/ConnectWhatsAppDialog.d.ts.map +1 -1
  59. package/channel/ConnectWhatsAppDialog.js +10 -23
  60. package/channel/ConnectWhatsAppDialog.js.map +1 -1
  61. package/channel/useChannelSessions.d.ts.map +1 -1
  62. package/channel/useChannelSessions.js.map +1 -1
  63. package/channel-app/ChannelAppDetailPanel.d.ts.map +1 -1
  64. package/channel-app/ChannelAppDetailPanel.js +8 -5
  65. package/channel-app/ChannelAppDetailPanel.js.map +1 -1
  66. package/channel-app/CreateChannelAppForm.d.ts.map +1 -1
  67. package/channel-app/CreateChannelAppForm.js +12 -7
  68. package/channel-app/CreateChannelAppForm.js.map +1 -1
  69. package/channel-app/internal.d.ts +0 -1
  70. package/channel-app/internal.d.ts.map +1 -1
  71. package/channel-app/internal.js +5 -10
  72. package/channel-app/internal.js.map +1 -1
  73. package/composer/ComposerToolbar.js +2 -1
  74. package/composer/ComposerToolbar.js.map +1 -1
  75. package/composer/SessionComposer.d.ts +1 -1
  76. package/composer/SessionComposer.d.ts.map +1 -1
  77. package/composer/SessionComposer.js +120 -13
  78. package/composer/SessionComposer.js.map +1 -1
  79. package/composer/icons.d.ts +0 -1
  80. package/composer/icons.d.ts.map +1 -1
  81. package/composer/icons.js +0 -3
  82. package/composer/icons.js.map +1 -1
  83. package/conversation/ConversationAttentionBanner.d.ts +23 -6
  84. package/conversation/ConversationAttentionBanner.d.ts.map +1 -1
  85. package/conversation/ConversationAttentionBanner.js +25 -10
  86. package/conversation/ConversationAttentionBanner.js.map +1 -1
  87. package/conversation/ConversationComposer.js +1 -1
  88. package/conversation/ConversationComposer.js.map +1 -1
  89. package/conversation/ConversationListPane.d.ts.map +1 -1
  90. package/conversation/ConversationListPane.js +28 -8
  91. package/conversation/ConversationListPane.js.map +1 -1
  92. package/conversation/ConversationsWorkbench.d.ts.map +1 -1
  93. package/conversation/ConversationsWorkbench.js +1 -1
  94. package/conversation/ConversationsWorkbench.js.map +1 -1
  95. package/cursor-accounts/MemberCoverageTable.js +3 -14
  96. package/cursor-accounts/MemberCoverageTable.js.map +1 -1
  97. package/dashboard/DashboardFailedRuns.d.ts.map +1 -1
  98. package/dashboard/DashboardFailedRuns.js +2 -14
  99. package/dashboard/DashboardFailedRuns.js.map +1 -1
  100. package/environment/CreateEnvironmentForm.d.ts.map +1 -1
  101. package/environment/CreateEnvironmentForm.js +4 -8
  102. package/environment/CreateEnvironmentForm.js.map +1 -1
  103. package/environment/EnvVarForm.d.ts.map +1 -1
  104. package/environment/EnvVarForm.js +2 -4
  105. package/environment/EnvVarForm.js.map +1 -1
  106. package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
  107. package/environment/EnvironmentVariableEditor.js +5 -7
  108. package/environment/EnvironmentVariableEditor.js.map +1 -1
  109. package/execution/ApprovalCard.d.ts.map +1 -1
  110. package/execution/ApprovalCard.js +13 -3
  111. package/execution/ApprovalCard.js.map +1 -1
  112. package/execution/ArtifactApplyButton.d.ts.map +1 -1
  113. package/execution/ArtifactApplyButton.js +2 -4
  114. package/execution/ArtifactApplyButton.js.map +1 -1
  115. package/execution/ArtifactPreviewModal.d.ts.map +1 -1
  116. package/execution/ArtifactPreviewModal.js +11 -17
  117. package/execution/ArtifactPreviewModal.js.map +1 -1
  118. package/execution/ExecutionErrorNotice.d.ts +36 -0
  119. package/execution/ExecutionErrorNotice.d.ts.map +1 -0
  120. package/execution/ExecutionErrorNotice.js +39 -0
  121. package/execution/ExecutionErrorNotice.js.map +1 -0
  122. package/execution/FilePathLink.d.ts.map +1 -1
  123. package/execution/FilePathLink.js +5 -8
  124. package/execution/FilePathLink.js.map +1 -1
  125. package/execution/FileReviewCard.d.ts.map +1 -1
  126. package/execution/FileReviewCard.js +1 -6
  127. package/execution/FileReviewCard.js.map +1 -1
  128. package/execution/FollowUpInput.d.ts.map +1 -1
  129. package/execution/FollowUpInput.js +1 -3
  130. package/execution/FollowUpInput.js.map +1 -1
  131. package/execution/LivenessStatusLine.d.ts +40 -0
  132. package/execution/LivenessStatusLine.d.ts.map +1 -0
  133. package/execution/LivenessStatusLine.js +34 -0
  134. package/execution/LivenessStatusLine.js.map +1 -0
  135. package/execution/MessageEntry.d.ts.map +1 -1
  136. package/execution/MessageEntry.js +31 -3
  137. package/execution/MessageEntry.js.map +1 -1
  138. package/execution/MessageThread.d.ts +25 -0
  139. package/execution/MessageThread.d.ts.map +1 -1
  140. package/execution/MessageThread.js +51 -36
  141. package/execution/MessageThread.js.map +1 -1
  142. package/execution/SetupProgress.d.ts.map +1 -1
  143. package/execution/SetupProgress.js +1 -1
  144. package/execution/SetupProgress.js.map +1 -1
  145. package/execution/SubAgentSection.d.ts.map +1 -1
  146. package/execution/SubAgentSection.js +9 -7
  147. package/execution/SubAgentSection.js.map +1 -1
  148. package/execution/TerminalSession.d.ts +30 -0
  149. package/execution/TerminalSession.d.ts.map +1 -1
  150. package/execution/TerminalSession.js +37 -1
  151. package/execution/TerminalSession.js.map +1 -1
  152. package/execution/ToolCallDetail.d.ts +9 -0
  153. package/execution/ToolCallDetail.d.ts.map +1 -1
  154. package/execution/ToolCallDetail.js +16 -0
  155. package/execution/ToolCallDetail.js.map +1 -1
  156. package/execution/ToolCallItem.d.ts +23 -7
  157. package/execution/ToolCallItem.d.ts.map +1 -1
  158. package/execution/ToolCallItem.js +120 -35
  159. package/execution/ToolCallItem.js.map +1 -1
  160. package/execution/ToolRunGroup.d.ts.map +1 -1
  161. package/execution/ToolRunGroup.js +11 -11
  162. package/execution/ToolRunGroup.js.map +1 -1
  163. package/execution/WriteBackCard.d.ts.map +1 -1
  164. package/execution/WriteBackCard.js +5 -20
  165. package/execution/WriteBackCard.js.map +1 -1
  166. package/execution/index.d.ts +7 -3
  167. package/execution/index.d.ts.map +1 -1
  168. package/execution/index.js +4 -2
  169. package/execution/index.js.map +1 -1
  170. package/execution/tool-categories.d.ts +93 -7
  171. package/execution/tool-categories.d.ts.map +1 -1
  172. package/execution/tool-categories.js +141 -5
  173. package/execution/tool-categories.js.map +1 -1
  174. package/execution/tool-presenter.d.ts +32 -1
  175. package/execution/tool-presenter.d.ts.map +1 -1
  176. package/execution/tool-presenter.js +10 -2
  177. package/execution/tool-presenter.js.map +1 -1
  178. package/execution/useArtifactInspection.d.ts.map +1 -1
  179. package/execution/useArtifactInspection.js +4 -7
  180. package/execution/useArtifactInspection.js.map +1 -1
  181. package/iam-policy/GrantAccessForm.d.ts.map +1 -1
  182. package/iam-policy/GrantAccessForm.js +2 -4
  183. package/iam-policy/GrantAccessForm.js.map +1 -1
  184. package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
  185. package/iam-policy/OrgMembersPanel.js +3 -5
  186. package/iam-policy/OrgMembersPanel.js.map +1 -1
  187. package/iam-policy/RoleSelector.d.ts.map +1 -1
  188. package/iam-policy/RoleSelector.js +7 -1
  189. package/iam-policy/RoleSelector.js.map +1 -1
  190. package/identity-provider/CreateIdentityProviderForm.d.ts.map +1 -1
  191. package/identity-provider/CreateIdentityProviderForm.js +6 -9
  192. package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
  193. package/identity-provider/IdentityProviderDetailPanel.d.ts.map +1 -1
  194. package/identity-provider/IdentityProviderDetailPanel.js +17 -26
  195. package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
  196. package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
  197. package/identity-provider/IdentityProviderListPanel.js +2 -4
  198. package/identity-provider/IdentityProviderListPanel.js.map +1 -1
  199. package/identity-provider/IdentityProviderWizard.d.ts.map +1 -1
  200. package/identity-provider/IdentityProviderWizard.js +8 -7
  201. package/identity-provider/IdentityProviderWizard.js.map +1 -1
  202. package/identity-provider/SsoLoginPrompt.js +5 -6
  203. package/identity-provider/SsoLoginPrompt.js.map +1 -1
  204. package/index.d.ts +9 -8
  205. package/index.d.ts.map +1 -1
  206. package/index.js +4 -4
  207. package/index.js.map +1 -1
  208. package/internal/DecisionButton.d.ts.map +1 -1
  209. package/internal/DecisionButton.js +1 -6
  210. package/internal/DecisionButton.js.map +1 -1
  211. package/internal/DialogShell.d.ts +77 -0
  212. package/internal/DialogShell.d.ts.map +1 -0
  213. package/internal/DialogShell.js +77 -0
  214. package/internal/DialogShell.js.map +1 -0
  215. package/internal/SpinnerIcon.d.ts +22 -0
  216. package/internal/SpinnerIcon.d.ts.map +1 -0
  217. package/internal/SpinnerIcon.js +23 -0
  218. package/internal/SpinnerIcon.js.map +1 -0
  219. package/internal/select-element-text.d.ts +11 -0
  220. package/internal/select-element-text.d.ts.map +1 -0
  221. package/internal/select-element-text.js +19 -0
  222. package/internal/select-element-text.js.map +1 -0
  223. package/internal/thread-card/ThreadCardShell.d.ts +27 -10
  224. package/internal/thread-card/ThreadCardShell.d.ts.map +1 -1
  225. package/internal/thread-card/ThreadCardShell.js +11 -5
  226. package/internal/thread-card/ThreadCardShell.js.map +1 -1
  227. package/internal/thread-card/glyphs.d.ts +11 -2
  228. package/internal/thread-card/glyphs.d.ts.map +1 -1
  229. package/internal/thread-card/glyphs.js +9 -3
  230. package/internal/thread-card/glyphs.js.map +1 -1
  231. package/internal/thread-card/index.d.ts +1 -1
  232. package/internal/thread-card/index.d.ts.map +1 -1
  233. package/internal/thread-card/index.js.map +1 -1
  234. package/internal/useCopyFeedback.d.ts +28 -0
  235. package/internal/useCopyFeedback.d.ts.map +1 -0
  236. package/internal/useCopyFeedback.js +40 -0
  237. package/internal/useCopyFeedback.js.map +1 -0
  238. package/invitation/InvitationCreatedAlert.d.ts.map +1 -1
  239. package/invitation/InvitationCreatedAlert.js +12 -19
  240. package/invitation/InvitationCreatedAlert.js.map +1 -1
  241. package/invitation/InvitationManager.d.ts.map +1 -1
  242. package/invitation/InvitationManager.js +14 -21
  243. package/invitation/InvitationManager.js.map +1 -1
  244. package/invitation/InvitationRedemption.d.ts.map +1 -1
  245. package/invitation/InvitationRedemption.js +2 -4
  246. package/invitation/InvitationRedemption.js.map +1 -1
  247. package/library/useExportResource.d.ts.map +1 -1
  248. package/library/useExportResource.js +16 -27
  249. package/library/useExportResource.js.map +1 -1
  250. package/manifest/ApplyManifestDialog.d.ts.map +1 -1
  251. package/manifest/ApplyManifestDialog.js +7 -17
  252. package/manifest/ApplyManifestDialog.js.map +1 -1
  253. package/manifest/EditResourceYamlDialog.d.ts.map +1 -1
  254. package/manifest/EditResourceYamlDialog.js +3 -19
  255. package/manifest/EditResourceYamlDialog.js.map +1 -1
  256. package/mcp-server/DefinitionDriftNotice.d.ts +42 -0
  257. package/mcp-server/DefinitionDriftNotice.d.ts.map +1 -0
  258. package/mcp-server/DefinitionDriftNotice.js +52 -0
  259. package/mcp-server/DefinitionDriftNotice.js.map +1 -0
  260. package/mcp-server/McpServerConnectDialog.d.ts.map +1 -1
  261. package/mcp-server/McpServerConnectDialog.js +8 -20
  262. package/mcp-server/McpServerConnectDialog.js.map +1 -1
  263. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  264. package/mcp-server/McpServerDetailView.js +50 -28
  265. package/mcp-server/McpServerDetailView.js.map +1 -1
  266. package/mcp-server/OAuthAppForm.d.ts.map +1 -1
  267. package/mcp-server/OAuthAppForm.js +2 -4
  268. package/mcp-server/OAuthAppForm.js.map +1 -1
  269. package/mcp-server/internal/definitionDrift.d.ts +39 -0
  270. package/mcp-server/internal/definitionDrift.d.ts.map +1 -0
  271. package/mcp-server/internal/definitionDrift.js +122 -0
  272. package/mcp-server/internal/definitionDrift.js.map +1 -0
  273. package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -1
  274. package/mcp-server/internal/mcpServerToInput.js +3 -0
  275. package/mcp-server/internal/mcpServerToInput.js.map +1 -1
  276. package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -1
  277. package/mcp-server/steps/EnvironmentAuthStep.js +8 -4
  278. package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
  279. package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -1
  280. package/mcp-server/steps/IdentityTransportStep.js +5 -4
  281. package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
  282. package/mcp-server/useMcpServerConnect.d.ts +1 -1
  283. package/mcp-server/useMcpServerDefinitionDrift.d.ts +44 -0
  284. package/mcp-server/useMcpServerDefinitionDrift.d.ts.map +1 -0
  285. package/mcp-server/useMcpServerDefinitionDrift.js +61 -0
  286. package/mcp-server/useMcpServerDefinitionDrift.js.map +1 -0
  287. package/models/ModelRegistryContext.d.ts +7 -1
  288. package/models/ModelRegistryContext.d.ts.map +1 -1
  289. package/models/ModelRegistryContext.js.map +1 -1
  290. package/models/ModelSelector.js +9 -1
  291. package/models/ModelSelector.js.map +1 -1
  292. package/models/index.d.ts +2 -2
  293. package/models/index.d.ts.map +1 -1
  294. package/models/index.js +1 -1
  295. package/models/index.js.map +1 -1
  296. package/models/registry.d.ts +88 -6
  297. package/models/registry.d.ts.map +1 -1
  298. package/models/registry.js +133 -27
  299. package/models/registry.js.map +1 -1
  300. package/models/useModelRegistry.d.ts +7 -1
  301. package/models/useModelRegistry.d.ts.map +1 -1
  302. package/models/useModelRegistry.js +3 -2
  303. package/models/useModelRegistry.js.map +1 -1
  304. package/oauth-app/CreateOAuthAppForm.d.ts.map +1 -1
  305. package/oauth-app/CreateOAuthAppForm.js +4 -5
  306. package/oauth-app/CreateOAuthAppForm.js.map +1 -1
  307. package/oauth-app/OAuthAppDetailPanel.d.ts.map +1 -1
  308. package/oauth-app/OAuthAppDetailPanel.js +5 -6
  309. package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
  310. package/organization/CreateOrganizationForm.d.ts.map +1 -1
  311. package/organization/CreateOrganizationForm.js +5 -9
  312. package/organization/CreateOrganizationForm.js.map +1 -1
  313. package/organization/OrgProfilePanel.d.ts.map +1 -1
  314. package/organization/OrgProfilePanel.js +7 -16
  315. package/organization/OrgProfilePanel.js.map +1 -1
  316. package/package.json +4 -4
  317. package/platform-client/CreatePlatformClientForm.d.ts.map +1 -1
  318. package/platform-client/CreatePlatformClientForm.js +5 -6
  319. package/platform-client/CreatePlatformClientForm.js.map +1 -1
  320. package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
  321. package/platform-client/PlatformClientDetailPanel.js +6 -7
  322. package/platform-client/PlatformClientDetailPanel.js.map +1 -1
  323. package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
  324. package/platform-client/PlatformClientListPanel.js +2 -4
  325. package/platform-client/PlatformClientListPanel.js.map +1 -1
  326. package/platform-client/PlatformClientSecretAlert.d.ts.map +1 -1
  327. package/platform-client/PlatformClientSecretAlert.js +18 -25
  328. package/platform-client/PlatformClientSecretAlert.js.map +1 -1
  329. package/provider.d.ts +34 -1
  330. package/provider.d.ts.map +1 -1
  331. package/provider.js +14 -7
  332. package/provider.js.map +1 -1
  333. package/resource-creation/WizardNav.d.ts.map +1 -1
  334. package/resource-creation/WizardNav.js +2 -4
  335. package/resource-creation/WizardNav.js.map +1 -1
  336. package/resource-detail/ConfirmDialog.d.ts +2 -3
  337. package/resource-detail/ConfirmDialog.d.ts.map +1 -1
  338. package/resource-detail/ConfirmDialog.js +8 -20
  339. package/resource-detail/ConfirmDialog.js.map +1 -1
  340. package/resource-detail/useCopyResource.d.ts +4 -3
  341. package/resource-detail/useCopyResource.d.ts.map +1 -1
  342. package/resource-detail/useCopyResource.js +10 -19
  343. package/resource-detail/useCopyResource.js.map +1 -1
  344. package/schedule/ScheduleDetailView.d.ts.map +1 -1
  345. package/schedule/ScheduleDetailView.js +2 -4
  346. package/schedule/ScheduleDetailView.js.map +1 -1
  347. package/schedule/ScheduleForm.d.ts.map +1 -1
  348. package/schedule/ScheduleForm.js +6 -7
  349. package/schedule/ScheduleForm.js.map +1 -1
  350. package/session/NewSessionViewer.d.ts +52 -2
  351. package/session/NewSessionViewer.d.ts.map +1 -1
  352. package/session/NewSessionViewer.js +21 -6
  353. package/session/NewSessionViewer.js.map +1 -1
  354. package/session/SessionViewer.d.ts +63 -2
  355. package/session/SessionViewer.d.ts.map +1 -1
  356. package/session/SessionViewer.js +43 -17
  357. package/session/SessionViewer.js.map +1 -1
  358. package/session/audience.d.ts +17 -0
  359. package/session/audience.d.ts.map +1 -1
  360. package/session/index.d.ts +2 -1
  361. package/session/index.d.ts.map +1 -1
  362. package/session/index.js.map +1 -1
  363. package/session/run-config.d.ts +50 -0
  364. package/session/run-config.d.ts.map +1 -0
  365. package/session/run-config.js +15 -0
  366. package/session/run-config.js.map +1 -0
  367. package/session/useNewSessionFlow.d.ts +11 -0
  368. package/session/useNewSessionFlow.d.ts.map +1 -1
  369. package/session/useNewSessionFlow.js +29 -2
  370. package/session/useNewSessionFlow.js.map +1 -1
  371. package/session/useSessionConversation.d.ts +7 -7
  372. package/session/useSessionConversation.d.ts.map +1 -1
  373. package/session/useSessionConversation.js +2 -0
  374. package/session/useSessionConversation.js.map +1 -1
  375. package/session/useSessionPageFlow.d.ts +18 -4
  376. package/session/useSessionPageFlow.d.ts.map +1 -1
  377. package/session/useSessionPageFlow.js +33 -6
  378. package/session/useSessionPageFlow.js.map +1 -1
  379. package/session/useSessionPanel.d.ts +37 -2
  380. package/session/useSessionPanel.d.ts.map +1 -1
  381. package/session/useSessionPanel.js +44 -10
  382. package/session/useSessionPanel.js.map +1 -1
  383. package/settings/ApiKeysSection.d.ts.map +1 -1
  384. package/settings/ApiKeysSection.js +3 -2
  385. package/settings/ApiKeysSection.js.map +1 -1
  386. package/settings/ChannelAppsSection.d.ts.map +1 -1
  387. package/settings/ChannelAppsSection.js +3 -2
  388. package/settings/ChannelAppsSection.js.map +1 -1
  389. package/settings/EnvironmentsSection.js +5 -3
  390. package/settings/EnvironmentsSection.js.map +1 -1
  391. package/settings/IdentityProvidersSection.d.ts.map +1 -1
  392. package/settings/IdentityProvidersSection.js +3 -2
  393. package/settings/IdentityProvidersSection.js.map +1 -1
  394. package/settings/InvitationsSection.d.ts.map +1 -1
  395. package/settings/InvitationsSection.js +3 -1
  396. package/settings/InvitationsSection.js.map +1 -1
  397. package/settings/MembersSection.d.ts.map +1 -1
  398. package/settings/MembersSection.js +3 -1
  399. package/settings/MembersSection.js.map +1 -1
  400. package/settings/OAuthAppsSection.d.ts.map +1 -1
  401. package/settings/OAuthAppsSection.js +3 -2
  402. package/settings/OAuthAppsSection.js.map +1 -1
  403. package/settings/OrgProfileSection.d.ts.map +1 -1
  404. package/settings/OrgProfileSection.js +3 -2
  405. package/settings/OrgProfileSection.js.map +1 -1
  406. package/settings/PlatformClientsSection.d.ts.map +1 -1
  407. package/settings/PlatformClientsSection.js +3 -2
  408. package/settings/PlatformClientsSection.js.map +1 -1
  409. package/settings/UsageSection.d.ts.map +1 -1
  410. package/settings/UsageSection.js +3 -1
  411. package/settings/UsageSection.js.map +1 -1
  412. package/sharing/ShareAgentDialog.d.ts.map +1 -1
  413. package/sharing/ShareAgentDialog.js +19 -26
  414. package/sharing/ShareAgentDialog.js.map +1 -1
  415. package/sidebar/chrome.d.ts +3 -4
  416. package/sidebar/chrome.d.ts.map +1 -1
  417. package/sidebar/chrome.js +5 -4
  418. package/sidebar/chrome.js.map +1 -1
  419. package/skill/SkillDiffDialog.d.ts.map +1 -1
  420. package/skill/SkillDiffDialog.js +5 -21
  421. package/skill/SkillDiffDialog.js.map +1 -1
  422. package/src/access/ManageAccessDialog.tsx +14 -28
  423. package/src/activity/format-relative-time.ts +11 -9
  424. package/src/agent/steps/CapabilitiesStep.tsx +6 -3
  425. package/src/agent/steps/IdentityStep.tsx +19 -12
  426. package/src/agent-instance/CreateAgentInstanceDialog.tsx +29 -33
  427. package/src/api-key/ApiKeyCreatedAlert.tsx +10 -19
  428. package/src/api-key/ApiKeyListPanel.tsx +3 -39
  429. package/src/api-key/CreateApiKeyForm.tsx +12 -26
  430. package/src/approval-defaults-context.ts +56 -0
  431. package/src/attachment/AttachmentImageLightbox.tsx +13 -36
  432. package/src/attachment/__tests__/vision-preflight.test.ts +311 -0
  433. package/src/attachment/index.ts +12 -0
  434. package/src/attachment/vision-preflight.ts +236 -0
  435. package/src/billing/AutoRechargeCard.tsx +5 -4
  436. package/src/billing/BillingSection.tsx +4 -3
  437. package/src/channel/ChannelConversationsDialog.tsx +14 -29
  438. package/src/channel/ChannelCredentialsDialog.tsx +19 -29
  439. package/src/channel/ChannelTemplatesDialog.tsx +16 -31
  440. package/src/channel/ConnectSlackDialog.tsx +19 -31
  441. package/src/channel/ConnectWhatsAppDialog.tsx +19 -31
  442. package/src/channel/useChannelSessions.ts +3 -0
  443. package/src/channel-app/ChannelAppDetailPanel.tsx +15 -12
  444. package/src/channel-app/CreateChannelAppForm.tsx +17 -12
  445. package/src/channel-app/internal.tsx +5 -25
  446. package/src/composer/ComposerToolbar.tsx +1 -1
  447. package/src/composer/SessionComposer.tsx +160 -13
  448. package/src/composer/__tests__/SessionComposer-modelCoherence.test.tsx +220 -0
  449. package/src/composer/__tests__/SessionComposer-visionPreflight.test.tsx +222 -0
  450. package/src/composer/icons.tsx +0 -18
  451. package/src/conversation/ConversationAttentionBanner.tsx +64 -19
  452. package/src/conversation/ConversationComposer.tsx +1 -1
  453. package/src/conversation/ConversationListPane.tsx +46 -20
  454. package/src/conversation/ConversationsWorkbench.tsx +1 -0
  455. package/src/conversation/__tests__/ConversationAttentionBanner.test.tsx +76 -2
  456. package/src/conversation/__tests__/ConversationListPane.test.tsx +15 -4
  457. package/src/cursor-accounts/MemberCoverageTable.tsx +3 -14
  458. package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +2 -10
  459. package/src/dashboard/DashboardFailedRuns.tsx +2 -12
  460. package/src/environment/CreateEnvironmentForm.tsx +8 -27
  461. package/src/environment/EnvVarForm.tsx +2 -18
  462. package/src/environment/EnvironmentVariableEditor.tsx +5 -21
  463. package/src/execution/ApprovalCard.tsx +23 -2
  464. package/src/execution/ArtifactApplyButton.tsx +2 -17
  465. package/src/execution/ArtifactPreviewModal.tsx +15 -27
  466. package/src/execution/ExecutionErrorNotice.tsx +99 -0
  467. package/src/execution/FilePathLink.tsx +5 -9
  468. package/src/execution/FileReviewCard.tsx +1 -20
  469. package/src/execution/FollowUpInput.tsx +1 -16
  470. package/src/execution/LivenessStatusLine.tsx +59 -0
  471. package/src/execution/MessageEntry.tsx +136 -25
  472. package/src/execution/MessageThread.tsx +84 -83
  473. package/src/execution/SetupProgress.tsx +5 -1
  474. package/src/execution/SubAgentSection.tsx +9 -20
  475. package/src/execution/TerminalSession.tsx +97 -10
  476. package/src/execution/ToolCallDetail.tsx +19 -0
  477. package/src/execution/ToolCallItem.tsx +175 -44
  478. package/src/execution/ToolRunGroup.tsx +30 -32
  479. package/src/execution/WriteBackCard.tsx +5 -24
  480. package/src/execution/__tests__/MessageEntry-copy.test.tsx +125 -0
  481. package/src/execution/__tests__/MessageThread.test.tsx +97 -0
  482. package/src/execution/__tests__/TerminalSession.test.tsx +71 -1
  483. package/src/execution/__tests__/ToolCallDetail.test.tsx +33 -1
  484. package/src/execution/__tests__/ToolCallItem.test.tsx +299 -11
  485. package/src/execution/__tests__/ToolRunGroup.test.tsx +41 -9
  486. package/src/execution/__tests__/intent-title.test.tsx +221 -0
  487. package/src/execution/__tests__/message-thread-slots.test.tsx +92 -0
  488. package/src/execution/__tests__/tool-presenter.test.tsx +41 -4
  489. package/src/execution/index.ts +11 -2
  490. package/src/execution/tool-categories.ts +195 -9
  491. package/src/execution/tool-presenter.ts +44 -2
  492. package/src/execution/useArtifactInspection.ts +4 -8
  493. package/src/iam-policy/GrantAccessForm.tsx +2 -18
  494. package/src/iam-policy/OrgMembersPanel.tsx +3 -19
  495. package/src/iam-policy/RoleSelector.tsx +8 -1
  496. package/src/identity-provider/CreateIdentityProviderForm.tsx +13 -31
  497. package/src/identity-provider/IdentityProviderDetailPanel.tsx +24 -49
  498. package/src/identity-provider/IdentityProviderListPanel.tsx +2 -18
  499. package/src/identity-provider/IdentityProviderWizard.tsx +15 -32
  500. package/src/identity-provider/SsoLoginPrompt.tsx +6 -21
  501. package/src/index.ts +26 -1
  502. package/src/internal/DecisionButton.tsx +1 -20
  503. package/src/internal/DialogShell.tsx +169 -0
  504. package/src/internal/SpinnerIcon.tsx +42 -0
  505. package/src/internal/__tests__/DialogShell.test.tsx +223 -0
  506. package/src/internal/__tests__/ThreadCardShell.test.tsx +43 -7
  507. package/src/internal/__tests__/useCopyFeedback.test.ts +92 -0
  508. package/src/internal/select-element-text.ts +17 -0
  509. package/src/internal/thread-card/ThreadCardShell.tsx +53 -21
  510. package/src/internal/thread-card/glyphs.tsx +24 -3
  511. package/src/internal/thread-card/index.ts +1 -0
  512. package/src/internal/useCopyFeedback.ts +61 -0
  513. package/src/invitation/InvitationCreatedAlert.tsx +10 -18
  514. package/src/invitation/InvitationManager.tsx +23 -34
  515. package/src/invitation/InvitationRedemption.tsx +2 -18
  516. package/src/library/useExportResource.ts +15 -29
  517. package/src/manifest/ApplyManifestDialog.tsx +8 -26
  518. package/src/manifest/EditResourceYamlDialog.tsx +4 -31
  519. package/src/mcp-server/DefinitionDriftNotice.tsx +120 -0
  520. package/src/mcp-server/McpServerConnectDialog.tsx +15 -29
  521. package/src/mcp-server/McpServerDetailView.tsx +69 -49
  522. package/src/mcp-server/OAuthAppForm.tsx +2 -18
  523. package/src/mcp-server/__tests__/DefinitionDriftNotice.test.tsx +57 -0
  524. package/src/mcp-server/__tests__/definitionDrift.test.ts +245 -0
  525. package/src/mcp-server/__tests__/mcpServerToInput.test.ts +201 -0
  526. package/src/mcp-server/__tests__/useMcpServerDefinitionDrift.test.tsx +173 -0
  527. package/src/mcp-server/internal/definitionDrift.ts +158 -0
  528. package/src/mcp-server/internal/mcpServerToInput.ts +3 -0
  529. package/src/mcp-server/steps/EnvironmentAuthStep.tsx +19 -19
  530. package/src/mcp-server/steps/IdentityTransportStep.tsx +24 -23
  531. package/src/mcp-server/useMcpServerConnect.ts +1 -1
  532. package/src/mcp-server/useMcpServerDefinitionDrift.ts +95 -0
  533. package/src/models/ModelRegistryContext.ts +7 -1
  534. package/src/models/ModelSelector.tsx +37 -0
  535. package/src/models/__tests__/ModelSelector-visionIndicator.test.tsx +129 -0
  536. package/src/models/__tests__/resolveDefaultModel.test.ts +115 -0
  537. package/src/models/__tests__/useModelRegistry.test.tsx +99 -4
  538. package/src/models/index.ts +2 -2
  539. package/src/models/registry.ts +196 -29
  540. package/src/models/useModelRegistry.ts +10 -2
  541. package/src/oauth-app/CreateOAuthAppForm.tsx +16 -31
  542. package/src/oauth-app/OAuthAppDetailPanel.tsx +16 -31
  543. package/src/organization/CreateOrganizationForm.tsx +10 -29
  544. package/src/organization/OrgProfilePanel.tsx +13 -44
  545. package/src/platform-client/CreatePlatformClientForm.tsx +9 -29
  546. package/src/platform-client/PlatformClientDetailPanel.tsx +10 -30
  547. package/src/platform-client/PlatformClientListPanel.tsx +2 -18
  548. package/src/platform-client/PlatformClientSecretAlert.tsx +26 -55
  549. package/src/provider.tsx +76 -33
  550. package/src/resource-creation/WizardNav.tsx +2 -18
  551. package/src/resource-detail/ConfirmDialog.tsx +9 -30
  552. package/src/resource-detail/useCopyResource.ts +17 -23
  553. package/src/schedule/ScheduleDetailView.tsx +2 -18
  554. package/src/schedule/ScheduleForm.tsx +19 -34
  555. package/src/session/NewSessionViewer.tsx +85 -7
  556. package/src/session/SessionViewer.tsx +120 -17
  557. package/src/session/__tests__/audienceWiring.test.tsx +76 -0
  558. package/src/session/__tests__/panelNegotiation.test.tsx +302 -0
  559. package/src/session/__tests__/useNewSessionFlow.test.tsx +134 -5
  560. package/src/session/__tests__/useSessionPageFlow.autoApprove.test.tsx +74 -0
  561. package/src/session/__tests__/useSessionPageFlow.runConfig.test.tsx +157 -0
  562. package/src/session/__tests__/useSessionPanel.test.ts +114 -0
  563. package/src/session/audience.ts +18 -0
  564. package/src/session/index.ts +2 -1
  565. package/src/session/run-config.ts +59 -0
  566. package/src/session/useNewSessionFlow.ts +39 -2
  567. package/src/session/useSessionConversation.ts +10 -8
  568. package/src/session/useSessionPageFlow.ts +51 -10
  569. package/src/session/useSessionPanel.ts +91 -10
  570. package/src/settings/ApiKeysSection.tsx +4 -3
  571. package/src/settings/ChannelAppsSection.tsx +4 -3
  572. package/src/settings/EnvironmentsSection.tsx +8 -5
  573. package/src/settings/IdentityProvidersSection.tsx +4 -3
  574. package/src/settings/InvitationsSection.tsx +4 -2
  575. package/src/settings/MembersSection.tsx +4 -2
  576. package/src/settings/OAuthAppsSection.tsx +4 -3
  577. package/src/settings/OrgProfileSection.tsx +4 -3
  578. package/src/settings/PlatformClientsSection.tsx +4 -3
  579. package/src/settings/UsageSection.tsx +4 -2
  580. package/src/sharing/ShareAgentDialog.tsx +33 -37
  581. package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -1
  582. package/src/sidebar/chrome.tsx +6 -6
  583. package/src/skill/SkillDiffDialog.tsx +13 -36
  584. package/src/styles.css +43 -0
  585. package/src/version-history/VersionTimelineEntry.tsx +1 -21
  586. package/src/workflow/FailedRunsWidget.tsx +2 -9
  587. package/src/workflow/PendingApprovalsWidget.tsx +2 -9
  588. package/src/workflow/ViewYamlDialog.tsx +21 -55
  589. package/src/workflow/WorkflowArchitectDialog.tsx +17 -68
  590. package/src/workflow/WorkflowArtifactDocument.tsx +5 -9
  591. package/src/workflow/WorkflowCanvasEditor.tsx +2 -0
  592. package/src/workflow/WorkflowCanvasInner.tsx +14 -1
  593. package/src/workflow/WorkflowDiffGraph.tsx +7 -1
  594. package/src/workflow/WorkflowExecutionViewer.tsx +88 -11
  595. package/src/workflow/WorkflowExplainDialog.tsx +18 -60
  596. package/src/workflow/WorkflowGraphFullscreenDialog.tsx +14 -26
  597. package/src/workflow/WorkflowOverviewGraph.tsx +9 -1
  598. package/src/workflow/WorkflowRefinePanel.tsx +2 -18
  599. package/src/workflow/WorkflowRepairCard.tsx +2 -18
  600. package/src/workflow/WorkflowRunDialog.tsx +23 -70
  601. package/src/workflow/WorkflowTaskApprovalSummary.tsx +2 -17
  602. package/src/workflow/WorkflowVersionBadge.tsx +4 -13
  603. package/src/workflow/WorkflowVersionTimeline.tsx +1 -25
  604. package/src/workflow/__tests__/panelNegotiation.test.tsx +230 -0
  605. package/src/workflow/__tests__/useWorkflowCanvas.dirty.test.tsx +178 -0
  606. package/src/workflow/__tests__/useWorkflowCanvas.drag.test.tsx +224 -0
  607. package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +100 -0
  608. package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +20 -41
  609. package/src/workflow/execution-history/ExecutionHistoryTable.tsx +1 -25
  610. package/src/workflow/index.ts +1 -0
  611. package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +14 -27
  612. package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
  613. package/src/workflow/picker/BranchAddPopover.tsx +4 -3
  614. package/src/workflow/templates/WorkflowTemplatePreview.tsx +18 -28
  615. package/src/workflow/useApprovalBoundary.ts +1 -1
  616. package/src/workflow/useWorkflowCanvas.ts +114 -11
  617. package/src/workflow/useWorkflowExecutionPanel.ts +95 -13
  618. package/styles.css +1 -1
  619. package/version-history/VersionTimelineEntry.d.ts.map +1 -1
  620. package/version-history/VersionTimelineEntry.js +1 -23
  621. package/version-history/VersionTimelineEntry.js.map +1 -1
  622. package/workflow/CanvasTransitionEdge.d.ts +1 -1
  623. package/workflow/FailedRunsWidget.d.ts.map +1 -1
  624. package/workflow/FailedRunsWidget.js +2 -11
  625. package/workflow/FailedRunsWidget.js.map +1 -1
  626. package/workflow/PendingApprovalsWidget.d.ts.map +1 -1
  627. package/workflow/PendingApprovalsWidget.js +2 -11
  628. package/workflow/PendingApprovalsWidget.js.map +1 -1
  629. package/workflow/ViewYamlDialog.d.ts.map +1 -1
  630. package/workflow/ViewYamlDialog.js +14 -49
  631. package/workflow/ViewYamlDialog.js.map +1 -1
  632. package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
  633. package/workflow/WorkflowArchitectDialog.js +10 -33
  634. package/workflow/WorkflowArchitectDialog.js.map +1 -1
  635. package/workflow/WorkflowArtifactDocument.d.ts.map +1 -1
  636. package/workflow/WorkflowArtifactDocument.js +5 -8
  637. package/workflow/WorkflowArtifactDocument.js.map +1 -1
  638. package/workflow/WorkflowCanvasEditor.d.ts.map +1 -1
  639. package/workflow/WorkflowCanvasEditor.js +1 -1
  640. package/workflow/WorkflowCanvasEditor.js.map +1 -1
  641. package/workflow/WorkflowCanvasInner.d.ts +4 -2
  642. package/workflow/WorkflowCanvasInner.d.ts.map +1 -1
  643. package/workflow/WorkflowCanvasInner.js +7 -3
  644. package/workflow/WorkflowCanvasInner.js.map +1 -1
  645. package/workflow/WorkflowDiffGraph.js +6 -2
  646. package/workflow/WorkflowDiffGraph.js.map +1 -1
  647. package/workflow/WorkflowExecutionViewer.d.ts +51 -0
  648. package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
  649. package/workflow/WorkflowExecutionViewer.js +23 -6
  650. package/workflow/WorkflowExecutionViewer.js.map +1 -1
  651. package/workflow/WorkflowExplainDialog.d.ts.map +1 -1
  652. package/workflow/WorkflowExplainDialog.js +10 -28
  653. package/workflow/WorkflowExplainDialog.js.map +1 -1
  654. package/workflow/WorkflowGraphFullscreenDialog.d.ts.map +1 -1
  655. package/workflow/WorkflowGraphFullscreenDialog.js +11 -17
  656. package/workflow/WorkflowGraphFullscreenDialog.js.map +1 -1
  657. package/workflow/WorkflowOverviewGraph.js +8 -2
  658. package/workflow/WorkflowOverviewGraph.js.map +1 -1
  659. package/workflow/WorkflowRefinePanel.d.ts.map +1 -1
  660. package/workflow/WorkflowRefinePanel.js +2 -4
  661. package/workflow/WorkflowRefinePanel.js.map +1 -1
  662. package/workflow/WorkflowRepairCard.d.ts.map +1 -1
  663. package/workflow/WorkflowRepairCard.js +2 -4
  664. package/workflow/WorkflowRepairCard.js.map +1 -1
  665. package/workflow/WorkflowRunDialog.d.ts.map +1 -1
  666. package/workflow/WorkflowRunDialog.js +14 -35
  667. package/workflow/WorkflowRunDialog.js.map +1 -1
  668. package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
  669. package/workflow/WorkflowTaskApprovalSummary.js +2 -4
  670. package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
  671. package/workflow/WorkflowVersionBadge.d.ts.map +1 -1
  672. package/workflow/WorkflowVersionBadge.js +4 -13
  673. package/workflow/WorkflowVersionBadge.js.map +1 -1
  674. package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
  675. package/workflow/WorkflowVersionTimeline.js +1 -26
  676. package/workflow/WorkflowVersionTimeline.js.map +1 -1
  677. package/workflow/execution-comparison/ExecutionComparisonPicker.d.ts.map +1 -1
  678. package/workflow/execution-comparison/ExecutionComparisonPicker.js +14 -40
  679. package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
  680. package/workflow/execution-history/ExecutionHistoryTable.d.ts.map +1 -1
  681. package/workflow/execution-history/ExecutionHistoryTable.js +1 -24
  682. package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
  683. package/workflow/index.d.ts +1 -1
  684. package/workflow/index.d.ts.map +1 -1
  685. package/workflow/index.js.map +1 -1
  686. package/workflow/instance/CreateWorkflowInstanceDialog.d.ts.map +1 -1
  687. package/workflow/instance/CreateWorkflowInstanceDialog.js +7 -20
  688. package/workflow/instance/CreateWorkflowInstanceDialog.js.map +1 -1
  689. package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
  690. package/workflow/instance/WorkflowInstanceDetailPanel.js +1 -1
  691. package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
  692. package/workflow/picker/BranchAddPopover.d.ts.map +1 -1
  693. package/workflow/picker/BranchAddPopover.js +3 -2
  694. package/workflow/picker/BranchAddPopover.js.map +1 -1
  695. package/workflow/templates/WorkflowTemplatePreview.d.ts +1 -1
  696. package/workflow/templates/WorkflowTemplatePreview.d.ts.map +1 -1
  697. package/workflow/templates/WorkflowTemplatePreview.js +10 -22
  698. package/workflow/templates/WorkflowTemplatePreview.js.map +1 -1
  699. package/workflow/useApprovalBoundary.d.ts +1 -1
  700. package/workflow/useApprovalBoundary.js +1 -1
  701. package/workflow/useWorkflowCanvas.d.ts +5 -1
  702. package/workflow/useWorkflowCanvas.d.ts.map +1 -1
  703. package/workflow/useWorkflowCanvas.js +99 -13
  704. package/workflow/useWorkflowCanvas.js.map +1 -1
  705. package/workflow/useWorkflowExecutionPanel.d.ts +38 -2
  706. package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -1
  707. package/workflow/useWorkflowExecutionPanel.js +46 -13
  708. package/workflow/useWorkflowExecutionPanel.js.map +1 -1
@@ -1,10 +1,11 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useState, type FormEvent } from "react";
3
+ import { useCallback, useId, useState, type FormEvent } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
5
  import { getUserMessage } from "@stigmer/sdk";
6
6
  import type { ApiKey } from "@stigmer/protos/ai/stigmer/iam/apikey/v1/api_pb";
7
7
  import { useCreateApiKey } from "./useCreateApiKey.js";
8
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
8
9
 
9
10
  // ---------------------------------------------------------------------------
10
11
  // Public API
@@ -61,6 +62,7 @@ export function CreateApiKeyForm({
61
62
  className,
62
63
  }: CreateApiKeyFormProps) {
63
64
  const { create, isCreating, error, clearError } = useCreateApiKey();
65
+ const baseId = useId();
64
66
 
65
67
  const [name, setName] = useState(initialName);
66
68
  const [expiry, setExpiry] = useState<ExpiryOption>("never");
@@ -96,13 +98,13 @@ export function CreateApiKeyForm({
96
98
  {/* Name */}
97
99
  <div className="stg:space-y-1">
98
100
  <label
99
- htmlFor="stgm-new-apikey-name"
101
+ htmlFor={`${baseId}-name`}
100
102
  className="stg:text-xs stg:font-medium stg:text-foreground"
101
103
  >
102
104
  Name
103
105
  </label>
104
106
  <input
105
- id="stgm-new-apikey-name"
107
+ id={`${baseId}-name`}
106
108
  type="text"
107
109
  value={name}
108
110
  onChange={(e) => setName(e.target.value)}
@@ -125,9 +127,12 @@ export function CreateApiKeyForm({
125
127
  Expiration
126
128
  </legend>
127
129
  <div className="stg:flex stg:flex-wrap stg:gap-2">
130
+ {/* The radio-group name is minted per mount: a hardcoded name
131
+ would merge two mounted forms into one keyboard group. */}
128
132
  {EXPIRY_OPTIONS.map(({ value, label }) => (
129
133
  <ExpiryRadio
130
134
  key={value}
135
+ name={`${baseId}-expiry`}
131
136
  value={value}
132
137
  label={label}
133
138
  checked={expiry === value}
@@ -155,7 +160,7 @@ export function CreateApiKeyForm({
155
160
  "stg:disabled:pointer-events-none stg:disabled:opacity-40",
156
161
  )}
157
162
  >
158
- {isCreating && <SpinnerIcon />}
163
+ {isCreating && <SpinnerIcon size={12} />}
159
164
  Create API key
160
165
  </button>
161
166
 
@@ -200,12 +205,14 @@ function daysFromNow(days: number): Date {
200
205
  // ---------------------------------------------------------------------------
201
206
 
202
207
  function ExpiryRadio({
208
+ name,
203
209
  value,
204
210
  label,
205
211
  checked,
206
212
  disabled,
207
213
  onChange,
208
214
  }: {
215
+ name: string;
209
216
  value: ExpiryOption;
210
217
  label: string;
211
218
  checked: boolean;
@@ -224,7 +231,7 @@ function ExpiryRadio({
224
231
  >
225
232
  <input
226
233
  type="radio"
227
- name="stgm-apikey-expiry"
234
+ name={name}
228
235
  value={value}
229
236
  checked={checked}
230
237
  disabled={disabled}
@@ -236,24 +243,3 @@ function ExpiryRadio({
236
243
  );
237
244
  }
238
245
 
239
- // ---------------------------------------------------------------------------
240
- // Icons
241
- // ---------------------------------------------------------------------------
242
-
243
- function SpinnerIcon() {
244
- return (
245
- <svg
246
- width="12"
247
- height="12"
248
- viewBox="0 0 16 16"
249
- fill="none"
250
- stroke="currentColor"
251
- strokeWidth="2"
252
- strokeLinecap="round"
253
- className="stg:animate-spin"
254
- aria-hidden="true"
255
- >
256
- <path d="M8 2a6 6 0 1 0 6 6" />
257
- </svg>
258
- );
259
- }
@@ -0,0 +1,56 @@
1
+ "use client";
2
+
3
+ import { createContext, useContext } from "react";
4
+
5
+ /**
6
+ * App-level approval defaults for interactive sessions (#302).
7
+ *
8
+ * These are the *host's* defaults, not the platform's: an embedding product
9
+ * that has judged its whole surface trusted — e.g. a desktop app whose
10
+ * sessions operate on the user's own local folder, where the apply-then-
11
+ * review file ledger is the safety net — can pre-arm what a user would
12
+ * otherwise opt into at the first approval gate. The user always keeps the
13
+ * last word: the session UI shows its "Auto-approving tool calls" notice
14
+ * from the first render, with the same "Turn off" affordance as a
15
+ * gate-armed preference.
16
+ */
17
+ export interface ApprovalDefaults {
18
+ /**
19
+ * Start interactive sessions with the session-scoped auto-approve
20
+ * preference armed, and create their bootstrap executions with
21
+ * `auto_approve_all` set.
22
+ *
23
+ * Equivalent to the user clicking "Approve & don't ask again" before the
24
+ * first gate, applied as a product decision. Defaults to off — omitting
25
+ * the provider prop keeps today's fail-closed behavior exactly.
26
+ */
27
+ readonly autoApproveAll?: boolean;
28
+ }
29
+
30
+ /**
31
+ * React context for app-level approval defaults.
32
+ *
33
+ * Separated from the provider to mirror the `ExecutionTargetContext`
34
+ * pattern and avoid circular imports.
35
+ *
36
+ * `undefined` means the host configured nothing — every approval default
37
+ * stays platform-standard (fail-closed gates, opt-in at the gate).
38
+ */
39
+ export const ApprovalDefaultsContext = createContext<
40
+ ApprovalDefaults | undefined
41
+ >(undefined);
42
+
43
+ /**
44
+ * Read the app-level approval defaults from the nearest `StigmerProvider`.
45
+ *
46
+ * Consumed by the interactive-session surface only: `useNewSessionFlow`
47
+ * (bootstrap execution create) and `useSessionPageFlow` (session-scoped
48
+ * preference initializer). Deliberately NOT consumed by the lower-level
49
+ * `useCreateSession` / `useCreateAgentExecution` primitives — those are
50
+ * shared by specialized flows (workflow architect/explain/diagnose) and by
51
+ * headless callers, which pass `autoApproveAll` explicitly when they mean
52
+ * it.
53
+ */
54
+ export function useApprovalDefaults(): ApprovalDefaults | undefined {
55
+ return useContext(ApprovalDefaultsContext);
56
+ }
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useEffect, useRef } from "react";
3
+ import { useCallback } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
+ import { DialogShell } from "../internal/DialogShell.js";
5
6
 
6
7
  /** Props for {@link AttachmentImageLightbox}. */
7
8
  export interface AttachmentImageLightboxProps {
@@ -48,47 +49,23 @@ export function AttachmentImageLightbox({
48
49
  onClose,
49
50
  className,
50
51
  }: AttachmentImageLightboxProps) {
51
- const dialogRef = useRef<HTMLDialogElement>(null);
52
-
53
- useEffect(() => {
54
- const dialog = dialogRef.current;
55
- if (!dialog) return;
56
-
57
- if (open && !dialog.open) {
58
- dialog.showModal();
59
- } else if (!open && dialog.open) {
60
- dialog.close();
61
- }
62
- }, [open]);
63
-
64
- // Escape arrives as the native `cancel` event; intercept it so the
65
- // caller's `open` prop stays the single source of truth for visibility.
66
- const handleCancel = useCallback(
67
- (e: React.SyntheticEvent) => {
68
- e.preventDefault();
69
- onClose();
70
- },
71
- [onClose],
72
- );
73
-
74
- const handleBackdropClick = useCallback(
75
- (e: React.MouseEvent<HTMLDialogElement>) => {
76
- if (e.target === dialogRef.current) {
77
- onClose();
78
- }
52
+ const handleOpenChange = useCallback(
53
+ (nextOpen: boolean) => {
54
+ if (!nextOpen) onClose();
79
55
  },
80
56
  [onClose],
81
57
  );
82
58
 
83
59
  return (
84
- <dialog
85
- ref={dialogRef}
86
- onCancel={handleCancel}
87
- onClick={handleBackdropClick}
60
+ <DialogShell
61
+ open={open}
62
+ onOpenChange={handleOpenChange}
63
+ dismissOnBackdrop
88
64
  aria-label={`Preview ${filename}`}
65
+ // Lightbox outlier: viewport-relative sizing (not a width preset) and
66
+ // the background surface for image content.
89
67
  className={cn(
90
- "stg:fixed stg:inset-0 stg:m-auto stg:max-h-[85vh] stg:max-w-[85vw] stg:rounded-lg stg:border stg:border-border stg:bg-background stg:p-0 stg:text-foreground stg:shadow-lg stg:outline-none",
91
- "stg:backdrop:bg-backdrop",
68
+ "stg:w-auto stg:max-h-[85vh] stg:max-w-[85vw] stg:bg-background stg:text-foreground stg:outline-none",
92
69
  className,
93
70
  )}
94
71
  >
@@ -127,7 +104,7 @@ export function AttachmentImageLightbox({
127
104
  </div>
128
105
  </div>
129
106
  )}
130
- </dialog>
107
+ </DialogShell>
131
108
  );
132
109
  }
133
110
 
@@ -0,0 +1,311 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import {
3
+ assessVisionPreflight,
4
+ visionPreflightMessage,
5
+ type VisionPreflightAttachment,
6
+ } from "../vision-preflight";
7
+ import type { ModelInfo, VisionLimits } from "../../models/registry";
8
+
9
+ /** The production budget the registry advertises (3 MiB / 4 MiB / 10). */
10
+ const LIMITS: VisionLimits = {
11
+ maxImageBytes: 3 * 1024 * 1024,
12
+ maxTotalBytes: 4 * 1024 * 1024,
13
+ maxImages: 10,
14
+ };
15
+
16
+ function image(name: string, sizeBytes: number, contentType = "image/png"): VisionPreflightAttachment {
17
+ return { name, sizeBytes, contentType };
18
+ }
19
+
20
+ function model(overrides?: Partial<ModelInfo>): ModelInfo {
21
+ return {
22
+ modelId: "test-model",
23
+ provider: "anthropic",
24
+ displayName: "Test Model",
25
+ shortDescription: "",
26
+ speedTier: "fast",
27
+ costTier: "standard",
28
+ harness: "native",
29
+ featured: false,
30
+ serviceTiers: [],
31
+ ...overrides,
32
+ };
33
+ }
34
+
35
+ describe("assessVisionPreflight — tri-state silence", () => {
36
+ it("warns about nothing when limits are absent (older server)", () => {
37
+ const result = assessVisionPreflight([image("huge.png", 50 * 1024 * 1024)], {
38
+ model: model(),
39
+ });
40
+ expect(result.warnings).toEqual([]);
41
+ expect(result.modelCannotSeeImages).toBe(false);
42
+ });
43
+
44
+ it("stays silent on an unassessed model (visionCapability undefined)", () => {
45
+ const result = assessVisionPreflight([image("a.png", 100)], {
46
+ model: model(),
47
+ limits: LIMITS,
48
+ });
49
+ expect(result.warnings).toEqual([]);
50
+ });
51
+
52
+ it("never treats an unknown model as blind", () => {
53
+ const result = assessVisionPreflight([image("a.png", 100)], { limits: LIMITS });
54
+ expect(result.modelCannotSeeImages).toBe(false);
55
+ });
56
+
57
+ it("returns no warnings for zero attachments", () => {
58
+ expect(assessVisionPreflight([], { model: model(), limits: LIMITS }).warnings).toEqual([]);
59
+ });
60
+ });
61
+
62
+ describe("assessVisionPreflight — vision candidates", () => {
63
+ it("ignores non-image attachments entirely, even huge ones", () => {
64
+ const result = assessVisionPreflight(
65
+ [
66
+ { name: "big.pdf", sizeBytes: 50 * 1024 * 1024, contentType: "application/pdf" },
67
+ { name: "big.zip", sizeBytes: 50 * 1024 * 1024, contentType: "application/zip" },
68
+ ],
69
+ { model: model({ visionCapability: false }), limits: LIMITS },
70
+ );
71
+ expect(result.warnings).toEqual([]);
72
+ expect(result.modelCannotSeeImages).toBe(false);
73
+ });
74
+
75
+ it("ignores SVG — image/* but not a runner vision type", () => {
76
+ const result = assessVisionPreflight(
77
+ [image("diagram.svg", 50 * 1024 * 1024, "image/svg+xml")],
78
+ { model: model(), limits: LIMITS },
79
+ );
80
+ expect(result.warnings).toEqual([]);
81
+ });
82
+
83
+ it("assesses all four runner vision types, case-insensitively", () => {
84
+ const oversized = LIMITS.maxImageBytes + 1;
85
+ const result = assessVisionPreflight(
86
+ [
87
+ image("a.png", oversized, "image/png"),
88
+ image("b.jpg", oversized, "image/JPEG"),
89
+ image("c.webp", oversized, "image/webp"),
90
+ image("d.gif", oversized, "image/gif"),
91
+ ],
92
+ { limits: LIMITS },
93
+ );
94
+ expect(result.warnings.map((w) => w.reason)).toEqual([
95
+ "too_large", "too_large", "too_large", "too_large",
96
+ ]);
97
+ });
98
+ });
99
+
100
+ describe("assessVisionPreflight — per-image cap (too_large)", () => {
101
+ it("accepts an image exactly at the cap", () => {
102
+ const result = assessVisionPreflight([image("edge.png", LIMITS.maxImageBytes)], {
103
+ limits: LIMITS,
104
+ });
105
+ expect(result.warnings).toEqual([]);
106
+ });
107
+
108
+ it("degrades an image one byte over the cap", () => {
109
+ const result = assessVisionPreflight([image("over.png", LIMITS.maxImageBytes + 1)], {
110
+ limits: LIMITS,
111
+ });
112
+ expect(result.warnings).toEqual([
113
+ { name: "over.png", sizeBytes: LIMITS.maxImageBytes + 1, reason: "too_large" },
114
+ ]);
115
+ });
116
+
117
+ it("mirrors the production regression: a 3.59 MiB PNG warns", () => {
118
+ // The prod-verified case from stigmer/stigmer#365 — this image uploaded
119
+ // fine and then surprised the user with a disclosure after the turn.
120
+ const bytes = Math.round(3.59 * 1024 * 1024);
121
+ const result = assessVisionPreflight([image("photo.png", bytes)], { limits: LIMITS });
122
+ expect(result.warnings[0]?.reason).toBe("too_large");
123
+ });
124
+ });
125
+
126
+ describe("assessVisionPreflight — per-turn budget (budget_exhausted)", () => {
127
+ it("replicates the runner's admission: an oversized image does NOT consume budget", () => {
128
+ // 3.5 MiB is over the per-image cap (degraded, not counted); the two
129
+ // 1.9 MiB images then fit the 4 MiB total exactly like the runner
130
+ // would admit them. A naive sum (7.3 MiB) would wrongly warn on all.
131
+ const result = assessVisionPreflight(
132
+ [
133
+ image("oversized.png", 3.5 * 1024 * 1024),
134
+ image("ok-1.png", 1.9 * 1024 * 1024),
135
+ image("ok-2.png", 1.9 * 1024 * 1024),
136
+ ],
137
+ { limits: LIMITS },
138
+ );
139
+ expect(result.warnings).toEqual([
140
+ { name: "oversized.png", sizeBytes: 3.5 * 1024 * 1024, reason: "too_large" },
141
+ ]);
142
+ });
143
+
144
+ it("degrades the image that would cross the total-byte budget, in attachment order", () => {
145
+ const twoMib = 2 * 1024 * 1024;
146
+ const result = assessVisionPreflight(
147
+ [image("a.png", twoMib), image("b.png", twoMib), image("c.png", twoMib)],
148
+ { limits: LIMITS },
149
+ );
150
+ // a (2 MiB) + b (2 MiB) = 4 MiB exactly; c would cross.
151
+ expect(result.warnings).toEqual([
152
+ { name: "c.png", sizeBytes: twoMib, reason: "budget_exhausted" },
153
+ ]);
154
+ });
155
+
156
+ it("degrades images past the count cap", () => {
157
+ const tiny = 1024;
158
+ const images = Array.from({ length: 12 }, (_, i) => image(`img-${i}.png`, tiny));
159
+ const result = assessVisionPreflight(images, { limits: LIMITS });
160
+ expect(result.warnings.map((w) => w.name)).toEqual(["img-10.png", "img-11.png"]);
161
+ expect(result.warnings.every((w) => w.reason === "budget_exhausted")).toBe(true);
162
+ });
163
+
164
+ it("admits a smaller later image after an earlier refusal (runner semantics: sequential offers, no reservation)", () => {
165
+ // The runner offers every image in order and never reserves budget for
166
+ // a refused one; the preflight must not be cleverer or dumber than the
167
+ // enforcement it predicts.
168
+ const result = assessVisionPreflight(
169
+ [
170
+ image("big.png", 3 * 1024 * 1024),
171
+ image("medium.png", 2 * 1024 * 1024), // 3+2 > 4 → refused
172
+ image("small.png", 512 * 1024), // 3+0.5 ≤ 4 → admitted
173
+ ],
174
+ { limits: LIMITS },
175
+ );
176
+ expect(result.warnings).toEqual([
177
+ { name: "medium.png", sizeBytes: 2 * 1024 * 1024, reason: "budget_exhausted" },
178
+ ]);
179
+ });
180
+ });
181
+
182
+ describe("assessVisionPreflight — blind model (model_no_vision)", () => {
183
+ it("short-circuits the byte math: every image warns model_no_vision, sizes irrelevant", () => {
184
+ const result = assessVisionPreflight(
185
+ [image("tiny.png", 10), image("huge.png", 50 * 1024 * 1024)],
186
+ { model: model({ visionCapability: false }), limits: LIMITS },
187
+ );
188
+ expect(result.modelCannotSeeImages).toBe(true);
189
+ expect(result.warnings).toEqual([
190
+ { name: "tiny.png", sizeBytes: 10, reason: "model_no_vision" },
191
+ { name: "huge.png", sizeBytes: 50 * 1024 * 1024, reason: "model_no_vision" },
192
+ ]);
193
+ });
194
+
195
+ it("applies the capability verdict even without limits (older server)", () => {
196
+ const result = assessVisionPreflight([image("a.png", 10)], {
197
+ model: model({ visionCapability: false }),
198
+ });
199
+ expect(result.modelCannotSeeImages).toBe(true);
200
+ });
201
+
202
+ it("an explicitly sighted model gets the normal byte assessment", () => {
203
+ const result = assessVisionPreflight([image("a.png", LIMITS.maxImageBytes + 1)], {
204
+ model: model({ visionCapability: true }),
205
+ limits: LIMITS,
206
+ });
207
+ expect(result.modelCannotSeeImages).toBe(false);
208
+ expect(result.warnings[0]?.reason).toBe("too_large");
209
+ });
210
+ });
211
+
212
+ describe("visionPreflightMessage", () => {
213
+ it("returns null for a clean preflight", () => {
214
+ expect(
215
+ visionPreflightMessage({ warnings: [], modelCannotSeeImages: false }),
216
+ ).toBeNull();
217
+ });
218
+
219
+ it("leads with the model for a blind-model preflight, never file advice", () => {
220
+ const preflight = assessVisionPreflight([image("a.png", 10)], {
221
+ model: model({ visionCapability: false, displayName: "Kimi K3" }),
222
+ limits: LIMITS,
223
+ });
224
+ const message = visionPreflightMessage(preflight, {
225
+ limits: LIMITS,
226
+ modelDisplayName: "Kimi K3",
227
+ });
228
+ expect(message).toBe(
229
+ "Kimi K3 can't view images — attached images will reach the agent as files only.",
230
+ );
231
+ });
232
+
233
+ it("names a single oversized file with its size and the actual cap", () => {
234
+ const preflight = assessVisionPreflight(
235
+ [image("screenshot.png", Math.round(3.6 * 1024 * 1024))],
236
+ { limits: LIMITS },
237
+ );
238
+ const message = visionPreflightMessage(preflight, { limits: LIMITS });
239
+ expect(message).toBe(
240
+ "screenshot.png (3.6 MB) exceeds the 3.0 MB inline-image limit and will reach the agent as a file, not an image.",
241
+ );
242
+ });
243
+
244
+ it("names two oversized files, then switches to a count for more", () => {
245
+ const over = LIMITS.maxImageBytes + 1;
246
+ const two = assessVisionPreflight(
247
+ [image("a.png", over), image("b.png", over)],
248
+ { limits: LIMITS },
249
+ );
250
+ expect(visionPreflightMessage(two, { limits: LIMITS })).toContain(
251
+ "a.png and b.png exceed",
252
+ );
253
+
254
+ const three = assessVisionPreflight(
255
+ [image("a.png", over), image("b.png", over), image("c.png", over)],
256
+ { limits: LIMITS },
257
+ );
258
+ expect(visionPreflightMessage(three, { limits: LIMITS })).toContain(
259
+ "3 images exceed",
260
+ );
261
+ });
262
+
263
+ it("explains the per-turn budget for budget_exhausted", () => {
264
+ const twoMib = 2 * 1024 * 1024;
265
+ const preflight = assessVisionPreflight(
266
+ [image("a.png", twoMib), image("b.png", twoMib), image("c.png", twoMib)],
267
+ { limits: LIMITS },
268
+ );
269
+ const message = visionPreflightMessage(preflight, { limits: LIMITS });
270
+ expect(message).toBe(
271
+ "c.png is over this turn's inline-image budget (10 images, 4.0 MB total) and will reach the agent as a file.",
272
+ );
273
+ });
274
+
275
+ it("joins mixed too_large and budget_exhausted reasons into one line", () => {
276
+ const preflight = {
277
+ warnings: [
278
+ { name: "big.png", sizeBytes: 4 * 1024 * 1024, reason: "too_large" as const },
279
+ { name: "late.png", sizeBytes: 1024, reason: "budget_exhausted" as const },
280
+ ],
281
+ modelCannotSeeImages: false,
282
+ };
283
+ const message = visionPreflightMessage(preflight, { limits: LIMITS });
284
+ expect(message).toContain("big.png");
285
+ expect(message).toContain("late.png");
286
+ expect(message).toContain("; ");
287
+ });
288
+
289
+ it("degrades copy gracefully when limits are unknown", () => {
290
+ const preflight = {
291
+ warnings: [
292
+ { name: "big.png", sizeBytes: 4 * 1024 * 1024, reason: "too_large" as const },
293
+ ],
294
+ modelCannotSeeImages: false,
295
+ };
296
+ const message = visionPreflightMessage(preflight);
297
+ expect(message).toBe(
298
+ "big.png (4.0 MB) exceeds the inline-image size limit and will reach the agent as a file, not an image.",
299
+ );
300
+ });
301
+
302
+ it("falls back to generic wording when the blind model has no display name", () => {
303
+ const preflight = {
304
+ warnings: [{ name: "a.png", sizeBytes: 10, reason: "model_no_vision" as const }],
305
+ modelCannotSeeImages: true,
306
+ };
307
+ expect(visionPreflightMessage(preflight)).toBe(
308
+ "The selected model can't view images — attached images will reach the agent as files only.",
309
+ );
310
+ });
311
+ });
@@ -21,6 +21,18 @@ export { extractClipboardFiles } from "./clipboard.js";
21
21
  export type { ClipboardFilesSource } from "./clipboard.js";
22
22
 
23
23
  export { prepareImageForVision } from "./prepare-image.js";
24
+ export {
25
+ assessVisionPreflight,
26
+ visionPreflightMessage,
27
+ } from "./vision-preflight.js";
28
+ export type {
29
+ AssessVisionPreflightOptions,
30
+ VisionPreflight,
31
+ VisionPreflightAttachment,
32
+ VisionPreflightMessageOptions,
33
+ VisionPreflightReason,
34
+ VisionPreflightWarning,
35
+ } from "./vision-preflight.js";
24
36
  export {
25
37
  MAX_VISION_LONG_EDGE_PX,
26
38
  MAX_VISION_PIXELS,