@stigmer/react 3.12.1 → 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 (658) 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/iam-policy/GrantAccessForm.d.ts.map +1 -1
  166. package/iam-policy/GrantAccessForm.js +2 -4
  167. package/iam-policy/GrantAccessForm.js.map +1 -1
  168. package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
  169. package/iam-policy/OrgMembersPanel.js +3 -5
  170. package/iam-policy/OrgMembersPanel.js.map +1 -1
  171. package/iam-policy/RoleSelector.d.ts.map +1 -1
  172. package/iam-policy/RoleSelector.js +7 -1
  173. package/iam-policy/RoleSelector.js.map +1 -1
  174. package/identity-provider/CreateIdentityProviderForm.d.ts.map +1 -1
  175. package/identity-provider/CreateIdentityProviderForm.js +6 -9
  176. package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
  177. package/identity-provider/IdentityProviderDetailPanel.d.ts.map +1 -1
  178. package/identity-provider/IdentityProviderDetailPanel.js +17 -26
  179. package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
  180. package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
  181. package/identity-provider/IdentityProviderListPanel.js +2 -4
  182. package/identity-provider/IdentityProviderListPanel.js.map +1 -1
  183. package/identity-provider/IdentityProviderWizard.d.ts.map +1 -1
  184. package/identity-provider/IdentityProviderWizard.js +8 -7
  185. package/identity-provider/IdentityProviderWizard.js.map +1 -1
  186. package/identity-provider/SsoLoginPrompt.js +5 -6
  187. package/identity-provider/SsoLoginPrompt.js.map +1 -1
  188. package/index.d.ts +9 -8
  189. package/index.d.ts.map +1 -1
  190. package/index.js +4 -4
  191. package/index.js.map +1 -1
  192. package/internal/DecisionButton.d.ts.map +1 -1
  193. package/internal/DecisionButton.js +1 -6
  194. package/internal/DecisionButton.js.map +1 -1
  195. package/internal/SpinnerIcon.d.ts +22 -0
  196. package/internal/SpinnerIcon.d.ts.map +1 -0
  197. package/internal/SpinnerIcon.js +23 -0
  198. package/internal/SpinnerIcon.js.map +1 -0
  199. package/internal/select-element-text.d.ts +11 -0
  200. package/internal/select-element-text.d.ts.map +1 -0
  201. package/internal/select-element-text.js +19 -0
  202. package/internal/select-element-text.js.map +1 -0
  203. package/internal/thread-card/ThreadCardShell.d.ts +27 -10
  204. package/internal/thread-card/ThreadCardShell.d.ts.map +1 -1
  205. package/internal/thread-card/ThreadCardShell.js +11 -5
  206. package/internal/thread-card/ThreadCardShell.js.map +1 -1
  207. package/internal/thread-card/glyphs.d.ts +11 -2
  208. package/internal/thread-card/glyphs.d.ts.map +1 -1
  209. package/internal/thread-card/glyphs.js +9 -3
  210. package/internal/thread-card/glyphs.js.map +1 -1
  211. package/internal/thread-card/index.d.ts +1 -1
  212. package/internal/thread-card/index.d.ts.map +1 -1
  213. package/internal/thread-card/index.js.map +1 -1
  214. package/internal/useCopyFeedback.d.ts +28 -0
  215. package/internal/useCopyFeedback.d.ts.map +1 -0
  216. package/internal/useCopyFeedback.js +40 -0
  217. package/internal/useCopyFeedback.js.map +1 -0
  218. package/invitation/InvitationCreatedAlert.d.ts.map +1 -1
  219. package/invitation/InvitationCreatedAlert.js +12 -19
  220. package/invitation/InvitationCreatedAlert.js.map +1 -1
  221. package/invitation/InvitationManager.d.ts.map +1 -1
  222. package/invitation/InvitationManager.js +14 -21
  223. package/invitation/InvitationManager.js.map +1 -1
  224. package/invitation/InvitationRedemption.d.ts.map +1 -1
  225. package/invitation/InvitationRedemption.js +2 -4
  226. package/invitation/InvitationRedemption.js.map +1 -1
  227. package/library/useExportResource.d.ts.map +1 -1
  228. package/library/useExportResource.js +16 -27
  229. package/library/useExportResource.js.map +1 -1
  230. package/manifest/ApplyManifestDialog.js +1 -1
  231. package/manifest/EditResourceYamlDialog.js +1 -1
  232. package/mcp-server/DefinitionDriftNotice.d.ts +42 -0
  233. package/mcp-server/DefinitionDriftNotice.d.ts.map +1 -0
  234. package/mcp-server/DefinitionDriftNotice.js +52 -0
  235. package/mcp-server/DefinitionDriftNotice.js.map +1 -0
  236. package/mcp-server/McpServerConnectDialog.js +1 -1
  237. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  238. package/mcp-server/McpServerDetailView.js +47 -14
  239. package/mcp-server/McpServerDetailView.js.map +1 -1
  240. package/mcp-server/OAuthAppForm.d.ts.map +1 -1
  241. package/mcp-server/OAuthAppForm.js +2 -4
  242. package/mcp-server/OAuthAppForm.js.map +1 -1
  243. package/mcp-server/internal/definitionDrift.d.ts +39 -0
  244. package/mcp-server/internal/definitionDrift.d.ts.map +1 -0
  245. package/mcp-server/internal/definitionDrift.js +122 -0
  246. package/mcp-server/internal/definitionDrift.js.map +1 -0
  247. package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -1
  248. package/mcp-server/internal/mcpServerToInput.js +3 -0
  249. package/mcp-server/internal/mcpServerToInput.js.map +1 -1
  250. package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -1
  251. package/mcp-server/steps/EnvironmentAuthStep.js +8 -4
  252. package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
  253. package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -1
  254. package/mcp-server/steps/IdentityTransportStep.js +5 -4
  255. package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
  256. package/mcp-server/useMcpServerConnect.d.ts +1 -1
  257. package/mcp-server/useMcpServerDefinitionDrift.d.ts +44 -0
  258. package/mcp-server/useMcpServerDefinitionDrift.d.ts.map +1 -0
  259. package/mcp-server/useMcpServerDefinitionDrift.js +61 -0
  260. package/mcp-server/useMcpServerDefinitionDrift.js.map +1 -0
  261. package/models/ModelRegistryContext.d.ts +7 -1
  262. package/models/ModelRegistryContext.d.ts.map +1 -1
  263. package/models/ModelRegistryContext.js.map +1 -1
  264. package/models/ModelSelector.js +9 -1
  265. package/models/ModelSelector.js.map +1 -1
  266. package/models/index.d.ts +2 -2
  267. package/models/index.d.ts.map +1 -1
  268. package/models/index.js +1 -1
  269. package/models/index.js.map +1 -1
  270. package/models/registry.d.ts +88 -6
  271. package/models/registry.d.ts.map +1 -1
  272. package/models/registry.js +133 -27
  273. package/models/registry.js.map +1 -1
  274. package/models/useModelRegistry.d.ts +7 -1
  275. package/models/useModelRegistry.d.ts.map +1 -1
  276. package/models/useModelRegistry.js +3 -2
  277. package/models/useModelRegistry.js.map +1 -1
  278. package/oauth-app/CreateOAuthAppForm.d.ts.map +1 -1
  279. package/oauth-app/CreateOAuthAppForm.js +4 -5
  280. package/oauth-app/CreateOAuthAppForm.js.map +1 -1
  281. package/oauth-app/OAuthAppDetailPanel.d.ts.map +1 -1
  282. package/oauth-app/OAuthAppDetailPanel.js +5 -6
  283. package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
  284. package/organization/CreateOrganizationForm.d.ts.map +1 -1
  285. package/organization/CreateOrganizationForm.js +5 -9
  286. package/organization/CreateOrganizationForm.js.map +1 -1
  287. package/organization/OrgProfilePanel.d.ts.map +1 -1
  288. package/organization/OrgProfilePanel.js +7 -16
  289. package/organization/OrgProfilePanel.js.map +1 -1
  290. package/package.json +4 -4
  291. package/platform-client/CreatePlatformClientForm.d.ts.map +1 -1
  292. package/platform-client/CreatePlatformClientForm.js +5 -6
  293. package/platform-client/CreatePlatformClientForm.js.map +1 -1
  294. package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
  295. package/platform-client/PlatformClientDetailPanel.js +6 -7
  296. package/platform-client/PlatformClientDetailPanel.js.map +1 -1
  297. package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
  298. package/platform-client/PlatformClientListPanel.js +2 -4
  299. package/platform-client/PlatformClientListPanel.js.map +1 -1
  300. package/platform-client/PlatformClientSecretAlert.d.ts.map +1 -1
  301. package/platform-client/PlatformClientSecretAlert.js +18 -25
  302. package/platform-client/PlatformClientSecretAlert.js.map +1 -1
  303. package/provider.d.ts +34 -1
  304. package/provider.d.ts.map +1 -1
  305. package/provider.js +14 -7
  306. package/provider.js.map +1 -1
  307. package/resource-creation/WizardNav.d.ts.map +1 -1
  308. package/resource-creation/WizardNav.js +2 -4
  309. package/resource-creation/WizardNav.js.map +1 -1
  310. package/resource-detail/ConfirmDialog.js +1 -1
  311. package/resource-detail/useCopyResource.d.ts +4 -3
  312. package/resource-detail/useCopyResource.d.ts.map +1 -1
  313. package/resource-detail/useCopyResource.js +10 -19
  314. package/resource-detail/useCopyResource.js.map +1 -1
  315. package/schedule/ScheduleDetailView.d.ts.map +1 -1
  316. package/schedule/ScheduleDetailView.js +2 -4
  317. package/schedule/ScheduleDetailView.js.map +1 -1
  318. package/schedule/ScheduleForm.d.ts.map +1 -1
  319. package/schedule/ScheduleForm.js +6 -7
  320. package/schedule/ScheduleForm.js.map +1 -1
  321. package/session/NewSessionViewer.d.ts +52 -2
  322. package/session/NewSessionViewer.d.ts.map +1 -1
  323. package/session/NewSessionViewer.js +21 -6
  324. package/session/NewSessionViewer.js.map +1 -1
  325. package/session/SessionViewer.d.ts +63 -2
  326. package/session/SessionViewer.d.ts.map +1 -1
  327. package/session/SessionViewer.js +43 -17
  328. package/session/SessionViewer.js.map +1 -1
  329. package/session/audience.d.ts +17 -0
  330. package/session/audience.d.ts.map +1 -1
  331. package/session/index.d.ts +2 -1
  332. package/session/index.d.ts.map +1 -1
  333. package/session/index.js.map +1 -1
  334. package/session/run-config.d.ts +50 -0
  335. package/session/run-config.d.ts.map +1 -0
  336. package/session/run-config.js +15 -0
  337. package/session/run-config.js.map +1 -0
  338. package/session/useNewSessionFlow.d.ts +11 -0
  339. package/session/useNewSessionFlow.d.ts.map +1 -1
  340. package/session/useNewSessionFlow.js +29 -2
  341. package/session/useNewSessionFlow.js.map +1 -1
  342. package/session/useSessionConversation.d.ts +7 -7
  343. package/session/useSessionConversation.d.ts.map +1 -1
  344. package/session/useSessionConversation.js +2 -0
  345. package/session/useSessionConversation.js.map +1 -1
  346. package/session/useSessionPageFlow.d.ts +18 -4
  347. package/session/useSessionPageFlow.d.ts.map +1 -1
  348. package/session/useSessionPageFlow.js +33 -6
  349. package/session/useSessionPageFlow.js.map +1 -1
  350. package/session/useSessionPanel.d.ts +37 -2
  351. package/session/useSessionPanel.d.ts.map +1 -1
  352. package/session/useSessionPanel.js +44 -10
  353. package/session/useSessionPanel.js.map +1 -1
  354. package/settings/ApiKeysSection.d.ts.map +1 -1
  355. package/settings/ApiKeysSection.js +3 -2
  356. package/settings/ApiKeysSection.js.map +1 -1
  357. package/settings/ChannelAppsSection.d.ts.map +1 -1
  358. package/settings/ChannelAppsSection.js +3 -2
  359. package/settings/ChannelAppsSection.js.map +1 -1
  360. package/settings/EnvironmentsSection.js +5 -3
  361. package/settings/EnvironmentsSection.js.map +1 -1
  362. package/settings/IdentityProvidersSection.d.ts.map +1 -1
  363. package/settings/IdentityProvidersSection.js +3 -2
  364. package/settings/IdentityProvidersSection.js.map +1 -1
  365. package/settings/InvitationsSection.d.ts.map +1 -1
  366. package/settings/InvitationsSection.js +3 -1
  367. package/settings/InvitationsSection.js.map +1 -1
  368. package/settings/MembersSection.d.ts.map +1 -1
  369. package/settings/MembersSection.js +3 -1
  370. package/settings/MembersSection.js.map +1 -1
  371. package/settings/OAuthAppsSection.d.ts.map +1 -1
  372. package/settings/OAuthAppsSection.js +3 -2
  373. package/settings/OAuthAppsSection.js.map +1 -1
  374. package/settings/OrgProfileSection.d.ts.map +1 -1
  375. package/settings/OrgProfileSection.js +3 -2
  376. package/settings/OrgProfileSection.js.map +1 -1
  377. package/settings/PlatformClientsSection.d.ts.map +1 -1
  378. package/settings/PlatformClientsSection.js +3 -2
  379. package/settings/PlatformClientsSection.js.map +1 -1
  380. package/settings/UsageSection.d.ts.map +1 -1
  381. package/settings/UsageSection.js +3 -1
  382. package/settings/UsageSection.js.map +1 -1
  383. package/sharing/ShareAgentDialog.d.ts.map +1 -1
  384. package/sharing/ShareAgentDialog.js +18 -7
  385. package/sharing/ShareAgentDialog.js.map +1 -1
  386. package/sidebar/chrome.d.ts +3 -4
  387. package/sidebar/chrome.d.ts.map +1 -1
  388. package/sidebar/chrome.js +5 -4
  389. package/sidebar/chrome.js.map +1 -1
  390. package/skill/SkillDiffDialog.js +1 -1
  391. package/src/access/ManageAccessDialog.tsx +10 -4
  392. package/src/activity/format-relative-time.ts +11 -9
  393. package/src/agent/steps/CapabilitiesStep.tsx +6 -3
  394. package/src/agent/steps/IdentityStep.tsx +19 -12
  395. package/src/agent-instance/CreateAgentInstanceDialog.tsx +17 -8
  396. package/src/api-key/ApiKeyCreatedAlert.tsx +10 -19
  397. package/src/api-key/ApiKeyListPanel.tsx +3 -39
  398. package/src/api-key/CreateApiKeyForm.tsx +12 -26
  399. package/src/approval-defaults-context.ts +56 -0
  400. package/src/attachment/__tests__/vision-preflight.test.ts +311 -0
  401. package/src/attachment/index.ts +12 -0
  402. package/src/attachment/vision-preflight.ts +236 -0
  403. package/src/billing/AutoRechargeCard.tsx +5 -4
  404. package/src/billing/BillingSection.tsx +4 -3
  405. package/src/channel/ChannelConversationsDialog.tsx +8 -4
  406. package/src/channel/ChannelCredentialsDialog.tsx +14 -4
  407. package/src/channel/ChannelTemplatesDialog.tsx +8 -4
  408. package/src/channel/ConnectSlackDialog.tsx +14 -4
  409. package/src/channel/ConnectWhatsAppDialog.tsx +14 -4
  410. package/src/channel/useChannelSessions.ts +3 -0
  411. package/src/channel-app/ChannelAppDetailPanel.tsx +15 -12
  412. package/src/channel-app/CreateChannelAppForm.tsx +17 -12
  413. package/src/channel-app/internal.tsx +5 -25
  414. package/src/composer/ComposerToolbar.tsx +1 -1
  415. package/src/composer/SessionComposer.tsx +160 -13
  416. package/src/composer/__tests__/SessionComposer-modelCoherence.test.tsx +220 -0
  417. package/src/composer/__tests__/SessionComposer-visionPreflight.test.tsx +222 -0
  418. package/src/composer/icons.tsx +0 -18
  419. package/src/conversation/ConversationComposer.tsx +1 -1
  420. package/src/conversation/ConversationListPane.tsx +4 -3
  421. package/src/cursor-accounts/MemberCoverageTable.tsx +3 -14
  422. package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +2 -10
  423. package/src/dashboard/DashboardFailedRuns.tsx +2 -12
  424. package/src/environment/CreateEnvironmentForm.tsx +8 -27
  425. package/src/environment/EnvVarForm.tsx +2 -18
  426. package/src/environment/EnvironmentVariableEditor.tsx +5 -21
  427. package/src/execution/ArtifactApplyButton.tsx +2 -17
  428. package/src/execution/ExecutionErrorNotice.tsx +99 -0
  429. package/src/execution/FilePathLink.tsx +5 -9
  430. package/src/execution/FileReviewCard.tsx +1 -20
  431. package/src/execution/FollowUpInput.tsx +1 -16
  432. package/src/execution/LivenessStatusLine.tsx +59 -0
  433. package/src/execution/MessageEntry.tsx +136 -25
  434. package/src/execution/MessageThread.tsx +84 -83
  435. package/src/execution/SetupProgress.tsx +5 -1
  436. package/src/execution/SubAgentSection.tsx +9 -20
  437. package/src/execution/TerminalSession.tsx +97 -10
  438. package/src/execution/ToolCallDetail.tsx +19 -0
  439. package/src/execution/ToolCallItem.tsx +157 -37
  440. package/src/execution/ToolRunGroup.tsx +30 -32
  441. package/src/execution/WriteBackCard.tsx +5 -24
  442. package/src/execution/__tests__/MessageEntry-copy.test.tsx +125 -0
  443. package/src/execution/__tests__/MessageThread.test.tsx +97 -0
  444. package/src/execution/__tests__/TerminalSession.test.tsx +71 -1
  445. package/src/execution/__tests__/ToolCallDetail.test.tsx +33 -1
  446. package/src/execution/__tests__/ToolCallItem.test.tsx +299 -11
  447. package/src/execution/__tests__/ToolRunGroup.test.tsx +41 -9
  448. package/src/execution/__tests__/message-thread-slots.test.tsx +92 -0
  449. package/src/execution/__tests__/tool-presenter.test.tsx +41 -4
  450. package/src/execution/index.ts +8 -2
  451. package/src/execution/tool-categories.ts +72 -8
  452. package/src/execution/tool-presenter.ts +22 -1
  453. package/src/execution/useArtifactInspection.ts +4 -8
  454. package/src/iam-policy/GrantAccessForm.tsx +2 -18
  455. package/src/iam-policy/OrgMembersPanel.tsx +3 -19
  456. package/src/iam-policy/RoleSelector.tsx +8 -1
  457. package/src/identity-provider/CreateIdentityProviderForm.tsx +13 -31
  458. package/src/identity-provider/IdentityProviderDetailPanel.tsx +24 -49
  459. package/src/identity-provider/IdentityProviderListPanel.tsx +2 -18
  460. package/src/identity-provider/IdentityProviderWizard.tsx +15 -32
  461. package/src/identity-provider/SsoLoginPrompt.tsx +6 -21
  462. package/src/index.ts +23 -1
  463. package/src/internal/DecisionButton.tsx +1 -20
  464. package/src/internal/SpinnerIcon.tsx +42 -0
  465. package/src/internal/__tests__/ThreadCardShell.test.tsx +43 -7
  466. package/src/internal/__tests__/useCopyFeedback.test.ts +92 -0
  467. package/src/internal/select-element-text.ts +17 -0
  468. package/src/internal/thread-card/ThreadCardShell.tsx +53 -21
  469. package/src/internal/thread-card/glyphs.tsx +24 -3
  470. package/src/internal/thread-card/index.ts +1 -0
  471. package/src/internal/useCopyFeedback.ts +61 -0
  472. package/src/invitation/InvitationCreatedAlert.tsx +10 -18
  473. package/src/invitation/InvitationManager.tsx +23 -34
  474. package/src/invitation/InvitationRedemption.tsx +2 -18
  475. package/src/library/useExportResource.ts +15 -29
  476. package/src/manifest/ApplyManifestDialog.tsx +1 -1
  477. package/src/manifest/EditResourceYamlDialog.tsx +1 -1
  478. package/src/mcp-server/DefinitionDriftNotice.tsx +120 -0
  479. package/src/mcp-server/McpServerConnectDialog.tsx +1 -1
  480. package/src/mcp-server/McpServerDetailView.tsx +58 -26
  481. package/src/mcp-server/OAuthAppForm.tsx +2 -18
  482. package/src/mcp-server/__tests__/DefinitionDriftNotice.test.tsx +57 -0
  483. package/src/mcp-server/__tests__/definitionDrift.test.ts +245 -0
  484. package/src/mcp-server/__tests__/mcpServerToInput.test.ts +201 -0
  485. package/src/mcp-server/__tests__/useMcpServerDefinitionDrift.test.tsx +173 -0
  486. package/src/mcp-server/internal/definitionDrift.ts +158 -0
  487. package/src/mcp-server/internal/mcpServerToInput.ts +3 -0
  488. package/src/mcp-server/steps/EnvironmentAuthStep.tsx +19 -19
  489. package/src/mcp-server/steps/IdentityTransportStep.tsx +24 -23
  490. package/src/mcp-server/useMcpServerConnect.ts +1 -1
  491. package/src/mcp-server/useMcpServerDefinitionDrift.ts +95 -0
  492. package/src/models/ModelRegistryContext.ts +7 -1
  493. package/src/models/ModelSelector.tsx +37 -0
  494. package/src/models/__tests__/ModelSelector-visionIndicator.test.tsx +129 -0
  495. package/src/models/__tests__/resolveDefaultModel.test.ts +115 -0
  496. package/src/models/__tests__/useModelRegistry.test.tsx +99 -4
  497. package/src/models/index.ts +2 -2
  498. package/src/models/registry.ts +196 -29
  499. package/src/models/useModelRegistry.ts +10 -2
  500. package/src/oauth-app/CreateOAuthAppForm.tsx +16 -31
  501. package/src/oauth-app/OAuthAppDetailPanel.tsx +16 -31
  502. package/src/organization/CreateOrganizationForm.tsx +10 -29
  503. package/src/organization/OrgProfilePanel.tsx +13 -44
  504. package/src/platform-client/CreatePlatformClientForm.tsx +9 -29
  505. package/src/platform-client/PlatformClientDetailPanel.tsx +10 -30
  506. package/src/platform-client/PlatformClientListPanel.tsx +2 -18
  507. package/src/platform-client/PlatformClientSecretAlert.tsx +26 -55
  508. package/src/provider.tsx +76 -33
  509. package/src/resource-creation/WizardNav.tsx +2 -18
  510. package/src/resource-detail/ConfirmDialog.tsx +1 -1
  511. package/src/resource-detail/useCopyResource.ts +17 -23
  512. package/src/schedule/ScheduleDetailView.tsx +2 -18
  513. package/src/schedule/ScheduleForm.tsx +19 -34
  514. package/src/session/NewSessionViewer.tsx +85 -7
  515. package/src/session/SessionViewer.tsx +120 -17
  516. package/src/session/__tests__/audienceWiring.test.tsx +76 -0
  517. package/src/session/__tests__/panelNegotiation.test.tsx +302 -0
  518. package/src/session/__tests__/useNewSessionFlow.test.tsx +134 -5
  519. package/src/session/__tests__/useSessionPageFlow.autoApprove.test.tsx +74 -0
  520. package/src/session/__tests__/useSessionPageFlow.runConfig.test.tsx +157 -0
  521. package/src/session/__tests__/useSessionPanel.test.ts +114 -0
  522. package/src/session/audience.ts +18 -0
  523. package/src/session/index.ts +2 -1
  524. package/src/session/run-config.ts +59 -0
  525. package/src/session/useNewSessionFlow.ts +39 -2
  526. package/src/session/useSessionConversation.ts +10 -8
  527. package/src/session/useSessionPageFlow.ts +51 -10
  528. package/src/session/useSessionPanel.ts +91 -10
  529. package/src/settings/ApiKeysSection.tsx +4 -3
  530. package/src/settings/ChannelAppsSection.tsx +4 -3
  531. package/src/settings/EnvironmentsSection.tsx +8 -5
  532. package/src/settings/IdentityProvidersSection.tsx +4 -3
  533. package/src/settings/InvitationsSection.tsx +4 -2
  534. package/src/settings/MembersSection.tsx +4 -2
  535. package/src/settings/OAuthAppsSection.tsx +4 -3
  536. package/src/settings/OrgProfileSection.tsx +4 -3
  537. package/src/settings/PlatformClientsSection.tsx +4 -3
  538. package/src/settings/UsageSection.tsx +4 -2
  539. package/src/sharing/ShareAgentDialog.tsx +28 -10
  540. package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -1
  541. package/src/sidebar/chrome.tsx +6 -6
  542. package/src/skill/SkillDiffDialog.tsx +1 -1
  543. package/src/styles.css +43 -0
  544. package/src/version-history/VersionTimelineEntry.tsx +1 -21
  545. package/src/workflow/FailedRunsWidget.tsx +2 -9
  546. package/src/workflow/PendingApprovalsWidget.tsx +2 -9
  547. package/src/workflow/ViewYamlDialog.tsx +7 -22
  548. package/src/workflow/WorkflowArchitectDialog.tsx +8 -27
  549. package/src/workflow/WorkflowArtifactDocument.tsx +5 -9
  550. package/src/workflow/WorkflowCanvasEditor.tsx +2 -0
  551. package/src/workflow/WorkflowCanvasInner.tsx +14 -1
  552. package/src/workflow/WorkflowDiffGraph.tsx +7 -1
  553. package/src/workflow/WorkflowExecutionViewer.tsx +88 -11
  554. package/src/workflow/WorkflowExplainDialog.tsx +8 -24
  555. package/src/workflow/WorkflowOverviewGraph.tsx +9 -1
  556. package/src/workflow/WorkflowRefinePanel.tsx +2 -18
  557. package/src/workflow/WorkflowRepairCard.tsx +2 -18
  558. package/src/workflow/WorkflowRunDialog.tsx +3 -23
  559. package/src/workflow/WorkflowTaskApprovalSummary.tsx +2 -17
  560. package/src/workflow/WorkflowVersionBadge.tsx +4 -13
  561. package/src/workflow/WorkflowVersionTimeline.tsx +1 -25
  562. package/src/workflow/__tests__/panelNegotiation.test.tsx +230 -0
  563. package/src/workflow/__tests__/useWorkflowCanvas.dirty.test.tsx +178 -0
  564. package/src/workflow/__tests__/useWorkflowCanvas.drag.test.tsx +224 -0
  565. package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +100 -0
  566. package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +7 -11
  567. package/src/workflow/execution-history/ExecutionHistoryTable.tsx +1 -25
  568. package/src/workflow/index.ts +1 -0
  569. package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +1 -1
  570. package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
  571. package/src/workflow/picker/BranchAddPopover.tsx +4 -3
  572. package/src/workflow/templates/WorkflowTemplatePreview.tsx +1 -1
  573. package/src/workflow/useApprovalBoundary.ts +1 -1
  574. package/src/workflow/useWorkflowCanvas.ts +114 -11
  575. package/src/workflow/useWorkflowExecutionPanel.ts +95 -13
  576. package/styles.css +1 -1
  577. package/version-history/VersionTimelineEntry.d.ts.map +1 -1
  578. package/version-history/VersionTimelineEntry.js +1 -23
  579. package/version-history/VersionTimelineEntry.js.map +1 -1
  580. package/workflow/CanvasTransitionEdge.d.ts +1 -1
  581. package/workflow/FailedRunsWidget.d.ts.map +1 -1
  582. package/workflow/FailedRunsWidget.js +2 -11
  583. package/workflow/FailedRunsWidget.js.map +1 -1
  584. package/workflow/PendingApprovalsWidget.d.ts.map +1 -1
  585. package/workflow/PendingApprovalsWidget.js +2 -11
  586. package/workflow/PendingApprovalsWidget.js.map +1 -1
  587. package/workflow/ViewYamlDialog.d.ts.map +1 -1
  588. package/workflow/ViewYamlDialog.js +7 -23
  589. package/workflow/ViewYamlDialog.js.map +1 -1
  590. package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
  591. package/workflow/WorkflowArchitectDialog.js +7 -11
  592. package/workflow/WorkflowArchitectDialog.js.map +1 -1
  593. package/workflow/WorkflowArtifactDocument.d.ts.map +1 -1
  594. package/workflow/WorkflowArtifactDocument.js +5 -8
  595. package/workflow/WorkflowArtifactDocument.js.map +1 -1
  596. package/workflow/WorkflowCanvasEditor.d.ts.map +1 -1
  597. package/workflow/WorkflowCanvasEditor.js +1 -1
  598. package/workflow/WorkflowCanvasEditor.js.map +1 -1
  599. package/workflow/WorkflowCanvasInner.d.ts +4 -2
  600. package/workflow/WorkflowCanvasInner.d.ts.map +1 -1
  601. package/workflow/WorkflowCanvasInner.js +7 -3
  602. package/workflow/WorkflowCanvasInner.js.map +1 -1
  603. package/workflow/WorkflowDiffGraph.js +6 -2
  604. package/workflow/WorkflowDiffGraph.js.map +1 -1
  605. package/workflow/WorkflowExecutionViewer.d.ts +51 -0
  606. package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
  607. package/workflow/WorkflowExecutionViewer.js +23 -6
  608. package/workflow/WorkflowExecutionViewer.js.map +1 -1
  609. package/workflow/WorkflowExplainDialog.d.ts.map +1 -1
  610. package/workflow/WorkflowExplainDialog.js +6 -8
  611. package/workflow/WorkflowExplainDialog.js.map +1 -1
  612. package/workflow/WorkflowOverviewGraph.js +8 -2
  613. package/workflow/WorkflowOverviewGraph.js.map +1 -1
  614. package/workflow/WorkflowRefinePanel.d.ts.map +1 -1
  615. package/workflow/WorkflowRefinePanel.js +2 -4
  616. package/workflow/WorkflowRefinePanel.js.map +1 -1
  617. package/workflow/WorkflowRepairCard.d.ts.map +1 -1
  618. package/workflow/WorkflowRepairCard.js +2 -4
  619. package/workflow/WorkflowRepairCard.js.map +1 -1
  620. package/workflow/WorkflowRunDialog.d.ts.map +1 -1
  621. package/workflow/WorkflowRunDialog.js +2 -7
  622. package/workflow/WorkflowRunDialog.js.map +1 -1
  623. package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
  624. package/workflow/WorkflowTaskApprovalSummary.js +2 -4
  625. package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
  626. package/workflow/WorkflowVersionBadge.d.ts.map +1 -1
  627. package/workflow/WorkflowVersionBadge.js +4 -13
  628. package/workflow/WorkflowVersionBadge.js.map +1 -1
  629. package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
  630. package/workflow/WorkflowVersionTimeline.js +1 -26
  631. package/workflow/WorkflowVersionTimeline.js.map +1 -1
  632. package/workflow/execution-comparison/ExecutionComparisonPicker.d.ts.map +1 -1
  633. package/workflow/execution-comparison/ExecutionComparisonPicker.js +7 -15
  634. package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
  635. package/workflow/execution-history/ExecutionHistoryTable.d.ts.map +1 -1
  636. package/workflow/execution-history/ExecutionHistoryTable.js +1 -24
  637. package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
  638. package/workflow/index.d.ts +1 -1
  639. package/workflow/index.d.ts.map +1 -1
  640. package/workflow/index.js.map +1 -1
  641. package/workflow/instance/CreateWorkflowInstanceDialog.js +1 -1
  642. package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
  643. package/workflow/instance/WorkflowInstanceDetailPanel.js +1 -1
  644. package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
  645. package/workflow/picker/BranchAddPopover.d.ts.map +1 -1
  646. package/workflow/picker/BranchAddPopover.js +3 -2
  647. package/workflow/picker/BranchAddPopover.js.map +1 -1
  648. package/workflow/templates/WorkflowTemplatePreview.js +1 -1
  649. package/workflow/useApprovalBoundary.d.ts +1 -1
  650. package/workflow/useApprovalBoundary.js +1 -1
  651. package/workflow/useWorkflowCanvas.d.ts +5 -1
  652. package/workflow/useWorkflowCanvas.d.ts.map +1 -1
  653. package/workflow/useWorkflowCanvas.js +99 -13
  654. package/workflow/useWorkflowCanvas.js.map +1 -1
  655. package/workflow/useWorkflowExecutionPanel.d.ts +38 -2
  656. package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -1
  657. package/workflow/useWorkflowExecutionPanel.js +46 -13
  658. package/workflow/useWorkflowExecutionPanel.js.map +1 -1
@@ -5,7 +5,7 @@
5
5
  * the result in the {@link StigmerProvider} context. This eliminates the
6
6
  * static JSON file that previously shipped in the npm package.
7
7
  *
8
- * Platform consumers (React SDK, cursor-runner, graphton) all fetch from the
8
+ * Platform consumers (React SDK, the runner) all fetch from the
9
9
  * same endpoint, each with their own local TTL cache.
10
10
  */
11
11
 
@@ -100,6 +100,52 @@ export interface ModelInfo {
100
100
  * not a selectable option.
101
101
  */
102
102
  readonly serviceTiers: readonly string[];
103
+ /**
104
+ * Tri-state vision capability from the registry's `capabilities` block
105
+ * (stigmer/stigmer#386). The registry serializes `capabilities` only for
106
+ * models whose capabilities were actually assessed, so:
107
+ *
108
+ * - `true` — images sent with a turn reach the model
109
+ * - `false` — explicitly assessed as blind; warn at selection/send time
110
+ * - `undefined` — never assessed; **stay silent, never treat as false**
111
+ *
112
+ * Mirrors the runner's `parseVisionCapability` convention
113
+ * (backend/services/runner/src/shared/model-registry.ts) — both sides
114
+ * parse the same document and must agree on what absence means.
115
+ */
116
+ readonly visionCapability?: boolean;
117
+ }
118
+
119
+ /**
120
+ * Document-level vision byte budget advertised by the registry
121
+ * (stigmer/stigmer#365) — the runner's inline-image delivery caps, exposed
122
+ * so clients can warn *before* an upload the runner would degrade to
123
+ * "not viewable inline". Field names match the runner's `VisionBudget`
124
+ * options verbatim (backend/services/runner/src/shared/attachment-vision.ts).
125
+ *
126
+ * ADVERTISED == ENFORCED: the serving side (cloud
127
+ * `ModelRegistryDocumentCodec`) and the runner pin the same literal values
128
+ * in their test suites. Treat an absent block as unassessed — no warnings —
129
+ * exactly like the per-model `capabilities` tri-state.
130
+ */
131
+ export interface VisionLimits {
132
+ /** Per-image raw byte cap for inline vision delivery. */
133
+ readonly maxImageBytes: number;
134
+ /** Per-turn total byte cap across all inline images. */
135
+ readonly maxTotalBytes: number;
136
+ /** Per-turn inline image count cap. */
137
+ readonly maxImages: number;
138
+ }
139
+
140
+ /**
141
+ * Parsed model-registry document: the per-model list plus document-level
142
+ * platform metadata. `visionLimits` is `undefined` when the served document
143
+ * predates the `limits` block (older servers) — consumers must stay silent
144
+ * rather than assume a budget.
145
+ */
146
+ export interface ModelRegistryDocument {
147
+ readonly models: readonly ModelInfo[];
148
+ readonly visionLimits?: VisionLimits;
103
149
  }
104
150
 
105
151
  /**
@@ -166,9 +212,46 @@ interface RegistryJsonEntry {
166
212
  };
167
213
  /** Variant-key → variant pricing block; only the key set matters here. */
168
214
  pricingVariants?: Record<string, unknown>;
215
+ /** Capability flags; present only for capability-assessed models. */
216
+ capabilities?: unknown;
169
217
  $comment?: string;
170
218
  }
171
219
 
220
+ /**
221
+ * Extract `capabilities.vision` preserving the tri-state: a missing or
222
+ * malformed `capabilities` block stays `undefined` (never coerced to
223
+ * false). Byte-for-byte the runner's convention — see
224
+ * `parseVisionCapability` in the runner's `shared/model-registry.ts`.
225
+ */
226
+ function parseVisionCapability(capabilities: unknown): boolean | undefined {
227
+ if (!capabilities || typeof capabilities !== "object") return undefined;
228
+ const vision = (capabilities as Record<string, unknown>).vision;
229
+ return typeof vision === "boolean" ? vision : undefined;
230
+ }
231
+
232
+ /**
233
+ * Parse the document-level `limits.vision` block. Returns `undefined` for
234
+ * documents that predate the block or carry a malformed one — absence
235
+ * means "unassessed", and a partial block must not masquerade as a budget
236
+ * (warning against a garbled cap is worse than staying silent).
237
+ */
238
+ function parseVisionLimits(data: Record<string, unknown>): VisionLimits | undefined {
239
+ const limits = data.limits;
240
+ if (!limits || typeof limits !== "object") return undefined;
241
+ const vision = (limits as Record<string, unknown>).vision;
242
+ if (!vision || typeof vision !== "object") return undefined;
243
+
244
+ const { maxImageBytes, maxTotalBytes, maxImages } = vision as Record<string, unknown>;
245
+ if (
246
+ typeof maxImageBytes !== "number" || maxImageBytes <= 0 ||
247
+ typeof maxTotalBytes !== "number" || maxTotalBytes <= 0 ||
248
+ typeof maxImages !== "number" || maxImages <= 0
249
+ ) {
250
+ return undefined;
251
+ }
252
+ return { maxImageBytes, maxTotalBytes, maxImages };
253
+ }
254
+
172
255
  const VALID_COST_TIERS = new Set(["economy", "standard", "premium"]);
173
256
  const VALID_SPEED_TIERS = new Set(["fastest", "fast", "balanced", "slow"]);
174
257
  const VALID_HARNESSES = new Set(["native", "cursor", "copilot", "claude_code", "codex", "devin"]);
@@ -184,49 +267,76 @@ function isModelEntry(entry: RegistryJsonEntry): entry is Required<Pick<Registry
184
267
  }
185
268
 
186
269
  /**
187
- * Parse raw registry JSON (from the API or a static file) into `ModelInfo[]`.
270
+ * Parse a raw registry document (from the API or a static file) into the
271
+ * per-model list plus document-level metadata.
188
272
  *
189
- * Expects the shape `{ models: RegistryJsonEntry[] }`. Filters out comment
190
- * entries and invalid rows, then maps to the `ModelInfo` interface.
273
+ * Expects the shape `{ models: RegistryJsonEntry[], limits?: {...} }`.
274
+ * Filters out comment entries and invalid rows. Unknown top-level fields
275
+ * are ignored (the document contract is additive).
191
276
  */
192
- export function parseRegistryJson(data: unknown): ModelInfo[] {
193
- if (!data || typeof data !== "object") return [];
194
- const models = (data as Record<string, unknown>).models;
195
- if (!Array.isArray(models)) return [];
277
+ export function parseRegistryDocument(data: unknown): ModelRegistryDocument {
278
+ if (!data || typeof data !== "object") return { models: [] };
279
+ const root = data as Record<string, unknown>;
280
+ const models = root.models;
281
+ if (!Array.isArray(models)) return { models: [] };
196
282
 
197
- return (models as RegistryJsonEntry[])
283
+ const parsed = (models as RegistryJsonEntry[])
198
284
  .filter(isModelEntry)
199
- .map((m) => ({
200
- modelId: m.id,
201
- provider: m.provider as Provider,
202
- displayName: m.displayName,
203
- shortDescription: m.shortDescription ?? "",
204
- speedTier: (VALID_SPEED_TIERS.has(m.speedTier ?? "") ? m.speedTier : "fast") as SpeedTier,
205
- costTier: m.costTier as CostTier,
206
- harness: m.harness as HarnessOption,
207
- featured: m.featured ?? false,
208
- serviceTiers:
209
- m.pricingVariants && typeof m.pricingVariants === "object"
210
- ? Object.keys(m.pricingVariants).sort()
211
- : [],
212
- }));
285
+ .map((m) => {
286
+ const visionCapability = parseVisionCapability(m.capabilities);
287
+ return {
288
+ modelId: m.id,
289
+ provider: m.provider as Provider,
290
+ displayName: m.displayName,
291
+ shortDescription: m.shortDescription ?? "",
292
+ speedTier: (VALID_SPEED_TIERS.has(m.speedTier ?? "") ? m.speedTier : "fast") as SpeedTier,
293
+ costTier: m.costTier as CostTier,
294
+ harness: m.harness as HarnessOption,
295
+ featured: m.featured ?? false,
296
+ serviceTiers:
297
+ m.pricingVariants && typeof m.pricingVariants === "object"
298
+ ? Object.keys(m.pricingVariants).sort()
299
+ : [],
300
+ // Conditional spread keeps unassessed models free of the key
301
+ // (tri-state absence, not an explicit undefined).
302
+ ...(visionCapability !== undefined ? { visionCapability } : {}),
303
+ };
304
+ });
305
+
306
+ const visionLimits = parseVisionLimits(root);
307
+ return {
308
+ models: parsed,
309
+ ...(visionLimits !== undefined ? { visionLimits } : {}),
310
+ };
213
311
  }
214
312
 
215
313
  /**
216
- * Fetch the model registry from the authenticated API endpoint.
314
+ * Parse raw registry JSON into `ModelInfo[]`.
315
+ *
316
+ * Thin compatibility wrapper over {@link parseRegistryDocument} — prefer
317
+ * the document parser when the caller also needs document-level metadata
318
+ * such as {@link VisionLimits}.
319
+ */
320
+ export function parseRegistryJson(data: unknown): ModelInfo[] {
321
+ return [...parseRegistryDocument(data).models];
322
+ }
323
+
324
+ /**
325
+ * Fetch the model-registry document from the authenticated API endpoint.
217
326
  *
218
327
  * @param apiUrl - Base URL of the Stigmer Cloud API (e.g. `https://api.stigmer.ai`)
219
328
  * @param token - Bearer token for authentication (from `client.getAuthCredential()`)
220
329
  * @param customFetch - Optional custom `fetch` implementation. Required in
221
330
  * Tauri where the global `fetch` is restricted by webview CSP/CORS policies.
222
331
  * When omitted, the global `fetch` is used.
223
- * @returns Parsed `ModelInfo[]`.
332
+ * @returns Parsed {@link ModelRegistryDocument} — models plus document-level
333
+ * metadata like {@link VisionLimits}.
224
334
  */
225
- export async function fetchModelRegistry(
335
+ export async function fetchModelRegistryDocument(
226
336
  apiUrl: string,
227
337
  token: string | null,
228
338
  customFetch?: typeof globalThis.fetch,
229
- ): Promise<ModelInfo[]> {
339
+ ): Promise<ModelRegistryDocument> {
230
340
  const doFetch = customFetch ?? globalThis.fetch;
231
341
  const headers: Record<string, string> = {};
232
342
  if (token) {
@@ -235,7 +345,25 @@ export async function fetchModelRegistry(
235
345
  const res = await doFetch(`${apiUrl}/v1/proxy/model-registry`, { headers });
236
346
  if (!res.ok) throw new Error(`Model registry fetch failed: ${res.status}`);
237
347
  const data: unknown = await res.json();
238
- return parseRegistryJson(data);
348
+ return parseRegistryDocument(data);
349
+ }
350
+
351
+ /**
352
+ * Fetch the model registry from the authenticated API endpoint.
353
+ *
354
+ * Thin compatibility wrapper over {@link fetchModelRegistryDocument} —
355
+ * prefer the document fetch when the caller also needs document-level
356
+ * metadata such as {@link VisionLimits}.
357
+ *
358
+ * @returns Parsed `ModelInfo[]`.
359
+ */
360
+ export async function fetchModelRegistry(
361
+ apiUrl: string,
362
+ token: string | null,
363
+ customFetch?: typeof globalThis.fetch,
364
+ ): Promise<ModelInfo[]> {
365
+ const document = await fetchModelRegistryDocument(apiUrl, token, customFetch);
366
+ return [...document.models];
239
367
  }
240
368
 
241
369
  /**
@@ -274,11 +402,28 @@ export interface DefaultModelResolution {
274
402
  *
275
403
  * Priority (Phase 1 — no backend):
276
404
  * 1. localStorage user preference (passed in as `userPreference`)
277
- * 2. First featured model for the harness from the registry
405
+ * 2. What the platform actually runs when nothing is pinned (see below)
278
406
  * 3. Hardcoded platform fallback
279
407
  *
280
408
  * Future phases will add org-level and agent-level defaults between
281
409
  * user preference and harness default.
410
+ *
411
+ * **The harness-default arm is a contract, not a suggestion**
412
+ * (stigmer/stigmer#663): this resolution feeds the composer's model pill,
413
+ * and the submission adopts what the pill displays — so the default MUST
414
+ * be the model the platform would run for an unpinned execution, or the
415
+ * pill promises one model while a different one serves the request.
416
+ * Concretely:
417
+ *
418
+ * - `cursor` — the registry's Auto entry ({@link DEFAULT_CURSOR_MODEL_ID}):
419
+ * the runner coerces an empty `model_name` to `"default"` (Auto), so
420
+ * suggesting Auto and sending it explicitly are byte-identical to the
421
+ * pre-#663 empty send. Auto prices no fast variant, so the fast-tier
422
+ * switch correctly never renders for a fresh composer.
423
+ * - `native` — the runner's own `getDefaultModel()` rule: featured AND
424
+ * standard cost, then any standard-cost model. A first-featured pick
425
+ * with no cost filter (the pre-#663 behavior) could suggest — and now
426
+ * would run — a premium model for users who never opened the picker.
282
427
  */
283
428
  export function resolveDefaultModelId(
284
429
  harness: HarnessOption,
@@ -310,6 +455,28 @@ export function resolveDefaultModelId(
310
455
  if (model) return { modelId: model.modelId, source: "agent_default" };
311
456
  }
312
457
 
458
+ if (harness === "cursor") {
459
+ const auto = models.find(
460
+ (m) => m.harness === harness && m.modelId === DEFAULT_CURSOR_MODEL_ID,
461
+ );
462
+ if (auto) return { modelId: auto.modelId, source: "harness_default" };
463
+ } else {
464
+ // Mirrors the runner's unpinned resolution (featured+standard, then
465
+ // any standard). Deliberately NOT extracted to share with the runner:
466
+ // the runner reads its own registry snapshot on another process.
467
+ const standardDefault =
468
+ models.find(
469
+ (m) => m.harness === harness && m.featured && m.costTier === "standard",
470
+ )
471
+ ?? models.find((m) => m.harness === harness && m.costTier === "standard");
472
+ if (standardDefault) {
473
+ return { modelId: standardDefault.modelId, source: "harness_default" };
474
+ }
475
+ }
476
+
477
+ // Degenerate registries only (no Auto entry / no standard-cost model):
478
+ // fall back to the old first-featured pick before the hardcoded id, so
479
+ // the suggestion at least names a model that exists.
313
480
  const featured = models.find(
314
481
  (m) => m.harness === harness && m.featured,
315
482
  );
@@ -9,6 +9,7 @@ import {
9
9
  modelKey,
10
10
  type ModelInfo,
11
11
  type Provider,
12
+ type VisionLimits,
12
13
  } from "./registry.js";
13
14
  import type { HarnessOption } from "./harness.js";
14
15
  import { useModelRegistryContext } from "./ModelRegistryContext.js";
@@ -51,6 +52,12 @@ export interface UseModelRegistryReturn {
51
52
  * Always unambiguous, even in unified mode.
52
53
  */
53
54
  readonly getByKey: (key: string) => ModelInfo | undefined;
55
+ /**
56
+ * Document-level vision byte budget advertised by the registry
57
+ * (stigmer/stigmer#365). `undefined` while loading or when the server
58
+ * predates the `limits` block — treat as unassessed and stay silent.
59
+ */
60
+ readonly visionLimits: VisionLimits | undefined;
54
61
  /** `true` while the model registry is being fetched from the API. */
55
62
  readonly isLoading: boolean;
56
63
  /** Non-null if the API fetch failed. Models will be empty in this case. */
@@ -87,7 +94,7 @@ export interface UseModelRegistryReturn {
87
94
  */
88
95
  export function useModelRegistry(options?: UseModelRegistryOptions): UseModelRegistryReturn {
89
96
  const harness = options?.harness;
90
- const { models: allModels, isLoading, error, refetch } = useModelRegistryContext();
97
+ const { models: allModels, visionLimits, isLoading, error, refetch } = useModelRegistryContext();
91
98
 
92
99
  return useMemo(() => {
93
100
  const isUnified = harness === undefined;
@@ -143,9 +150,10 @@ export function useModelRegistry(options?: UseModelRegistryOptions): UseModelReg
143
150
  providers,
144
151
  featured: featuredModels,
145
152
  getByKey: (key: string) => byCompoundKey.get(key),
153
+ visionLimits,
146
154
  isLoading,
147
155
  error,
148
156
  refetch,
149
157
  };
150
- }, [harness, allModels, isLoading, error, refetch]);
158
+ }, [harness, allModels, visionLimits, isLoading, error, refetch]);
151
159
  }
@@ -1,11 +1,12 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useState, type FormEvent } from "react";
3
+ import { type FormEvent, useCallback, useId, useState } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
5
  import { getUserMessage } from "@stigmer/sdk";
6
6
  import type { OAuthApp } from "@stigmer/protos/ai/stigmer/iam/oauthapp/v1/api_pb";
7
7
  import { VendorApprovalStatus } from "@stigmer/protos/ai/stigmer/iam/oauthapp/v1/spec_pb";
8
8
  import { useCreateOAuthApp } from "./useCreateOAuthApp.js";
9
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
9
10
 
10
11
  // ---------------------------------------------------------------------------
11
12
  // Public API
@@ -56,6 +57,7 @@ export function CreateOAuthAppForm({
56
57
  onCancel,
57
58
  className,
58
59
  }: CreateOAuthAppFormProps) {
60
+ const baseId = useId();
59
61
  const { create, isCreating, error, clearError } = useCreateOAuthApp();
60
62
 
61
63
  const [name, setName] = useState("");
@@ -151,7 +153,7 @@ export function CreateOAuthAppForm({
151
153
  <form onSubmit={handleSubmit} className={cn("stg:space-y-3", className)}>
152
154
  <div className="stg:space-y-3">
153
155
  <FormField
154
- id="stgm-oauth-name"
156
+ id={`${baseId}-name`}
155
157
  label="Name"
156
158
  value={name}
157
159
  onChange={setName}
@@ -161,7 +163,7 @@ export function CreateOAuthAppForm({
161
163
  />
162
164
 
163
165
  <FormField
164
- id="stgm-oauth-provider"
166
+ id={`${baseId}-provider`}
165
167
  label="Provider"
166
168
  value={provider}
167
169
  onChange={setProvider}
@@ -172,7 +174,7 @@ export function CreateOAuthAppForm({
172
174
  />
173
175
 
174
176
  <FormField
175
- id="stgm-oauth-client-id"
177
+ id={`${baseId}-client-id`}
176
178
  label="Client ID"
177
179
  value={clientId}
178
180
  onChange={setClientId}
@@ -182,7 +184,7 @@ export function CreateOAuthAppForm({
182
184
  />
183
185
 
184
186
  <FormField
185
- id="stgm-oauth-client-secret"
187
+ id={`${baseId}-client-secret`}
186
188
  label="Client secret"
187
189
  value={clientSecret}
188
190
  onChange={setClientSecret}
@@ -193,7 +195,7 @@ export function CreateOAuthAppForm({
193
195
  />
194
196
 
195
197
  <FormField
196
- id="stgm-oauth-auth-url"
198
+ id={`${baseId}-auth-url`}
197
199
  label="Authorization URL"
198
200
  value={authorizationUrl}
199
201
  onChange={setAuthorizationUrl}
@@ -204,7 +206,7 @@ export function CreateOAuthAppForm({
204
206
  />
205
207
 
206
208
  <FormField
207
- id="stgm-oauth-token-url"
209
+ id={`${baseId}-token-url`}
208
210
  label="Token URL"
209
211
  value={tokenUrl}
210
212
  onChange={setTokenUrl}
@@ -228,7 +230,7 @@ export function CreateOAuthAppForm({
228
230
  {showAdvanced && (
229
231
  <div className="stg:mt-2 stg:space-y-3 stg:border-l-2 stg:border-border-muted stg:pl-3">
230
232
  <FormField
231
- id="stgm-oauth-scopes"
233
+ id={`${baseId}-scopes`}
232
234
  label="Scopes"
233
235
  value={scopes}
234
236
  onChange={setScopes}
@@ -238,7 +240,7 @@ export function CreateOAuthAppForm({
238
240
  />
239
241
 
240
242
  <FormField
241
- id="stgm-oauth-userinfo-url"
243
+ id={`${baseId}-userinfo-url`}
242
244
  label="Userinfo URL"
243
245
  value={userinfoUrl}
244
246
  onChange={setUserinfoUrl}
@@ -248,7 +250,7 @@ export function CreateOAuthAppForm({
248
250
  />
249
251
 
250
252
  <FormField
251
- id="stgm-oauth-scope-param"
253
+ id={`${baseId}-scope-param`}
252
254
  label="Scope parameter name"
253
255
  value={scopeParameterName}
254
256
  onChange={setScopeParameterName}
@@ -259,13 +261,13 @@ export function CreateOAuthAppForm({
259
261
 
260
262
  <div className="stg:space-y-1">
261
263
  <label
262
- htmlFor="stgm-oauth-approval-status"
264
+ htmlFor={`${baseId}-approval-status`}
263
265
  className="stg:text-xs stg:font-medium stg:text-foreground"
264
266
  >
265
267
  Vendor approval status
266
268
  </label>
267
269
  <select
268
- id="stgm-oauth-approval-status"
270
+ id={`${baseId}-approval-status`}
269
271
  value={vendorApprovalStatus}
270
272
  onChange={(e) =>
271
273
  setVendorApprovalStatus(
@@ -290,7 +292,7 @@ export function CreateOAuthAppForm({
290
292
  </div>
291
293
 
292
294
  <FormField
293
- id="stgm-oauth-approval-docs"
295
+ id={`${baseId}-approval-docs`}
294
296
  label="Vendor approval docs URL"
295
297
  value={vendorApprovalDocsUrl}
296
298
  onChange={setVendorApprovalDocsUrl}
@@ -319,7 +321,7 @@ export function CreateOAuthAppForm({
319
321
  "stg:disabled:pointer-events-none stg:disabled:opacity-40",
320
322
  )}
321
323
  >
322
- {isCreating && <SpinnerIcon />}
324
+ {isCreating && <SpinnerIcon size={12} />}
323
325
  Create OAuth app
324
326
  </button>
325
327
 
@@ -430,20 +432,3 @@ function ChevronIcon({ expanded }: { expanded: boolean }) {
430
432
  );
431
433
  }
432
434
 
433
- function SpinnerIcon() {
434
- return (
435
- <svg
436
- width="12"
437
- height="12"
438
- viewBox="0 0 16 16"
439
- fill="none"
440
- stroke="currentColor"
441
- strokeWidth="2"
442
- strokeLinecap="round"
443
- className="stg:animate-spin"
444
- aria-hidden="true"
445
- >
446
- <path d="M8 2a6 6 0 1 0 6 6" />
447
- </svg>
448
- );
449
- }
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useState, type FormEvent } from "react";
3
+ import { type FormEvent, useCallback, useId, useState } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
5
  import { getUserMessage } from "@stigmer/sdk";
6
6
  import type { OAuthApp } from "@stigmer/protos/ai/stigmer/iam/oauthapp/v1/api_pb";
@@ -8,6 +8,7 @@ import { VendorApprovalStatus } from "@stigmer/protos/ai/stigmer/iam/oauthapp/v1
8
8
  import { timestampDate, type Timestamp } from "@bufbuild/protobuf/wkt";
9
9
  import { useUpdateOAuthApp } from "./useUpdateOAuthApp.js";
10
10
  import { useDeleteOAuthApp } from "./useDeleteOAuthApp.js";
11
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
11
12
 
12
13
  // ---------------------------------------------------------------------------
13
14
  // Public API
@@ -61,6 +62,7 @@ export function OAuthAppDetailPanel({
61
62
  onBack,
62
63
  className,
63
64
  }: OAuthAppDetailPanelProps) {
65
+ const baseId = useId();
64
66
  const spec = oauthApp.spec;
65
67
  const meta = oauthApp.metadata;
66
68
 
@@ -265,7 +267,7 @@ export function OAuthAppDetailPanel({
265
267
  "stg:disabled:pointer-events-none stg:disabled:opacity-40",
266
268
  )}
267
269
  >
268
- {isDeleting && <SpinnerIcon />}
270
+ {isDeleting && <SpinnerIcon size={12} />}
269
271
  Delete permanently
270
272
  </button>
271
273
  <button
@@ -297,7 +299,7 @@ export function OAuthAppDetailPanel({
297
299
  ) : (
298
300
  <form onSubmit={handleSave} className="stg:space-y-3">
299
301
  <FieldInput
300
- id="stgm-oauth-edit-provider"
302
+ id={`${baseId}-provider`}
301
303
  label="Provider"
302
304
  value={provider}
303
305
  onChange={setProvider}
@@ -306,7 +308,7 @@ export function OAuthAppDetailPanel({
306
308
  required
307
309
  />
308
310
  <FieldInput
309
- id="stgm-oauth-edit-client-id"
311
+ id={`${baseId}-client-id`}
310
312
  label="Client ID"
311
313
  value={clientId}
312
314
  onChange={setClientId}
@@ -315,7 +317,7 @@ export function OAuthAppDetailPanel({
315
317
  required
316
318
  />
317
319
  <FieldInput
318
- id="stgm-oauth-edit-client-secret"
320
+ id={`${baseId}-client-secret`}
319
321
  label="Client secret"
320
322
  value={clientSecret}
321
323
  onChange={setClientSecret}
@@ -325,7 +327,7 @@ export function OAuthAppDetailPanel({
325
327
  disabled={isUpdating}
326
328
  />
327
329
  <FieldInput
328
- id="stgm-oauth-edit-auth-url"
330
+ id={`${baseId}-auth-url`}
329
331
  label="Authorization URL"
330
332
  value={authorizationUrl}
331
333
  onChange={setAuthorizationUrl}
@@ -334,7 +336,7 @@ export function OAuthAppDetailPanel({
334
336
  required
335
337
  />
336
338
  <FieldInput
337
- id="stgm-oauth-edit-token-url"
339
+ id={`${baseId}-token-url`}
338
340
  label="Token URL"
339
341
  value={tokenUrl}
340
342
  onChange={setTokenUrl}
@@ -343,7 +345,7 @@ export function OAuthAppDetailPanel({
343
345
  required
344
346
  />
345
347
  <FieldInput
346
- id="stgm-oauth-edit-scopes"
348
+ id={`${baseId}-scopes`}
347
349
  label="Scopes"
348
350
  value={scopes}
349
351
  onChange={setScopes}
@@ -352,7 +354,7 @@ export function OAuthAppDetailPanel({
352
354
  disabled={isUpdating}
353
355
  />
354
356
  <FieldInput
355
- id="stgm-oauth-edit-userinfo-url"
357
+ id={`${baseId}-userinfo-url`}
356
358
  label="Userinfo URL"
357
359
  value={userinfoUrl}
358
360
  onChange={setUserinfoUrl}
@@ -361,7 +363,7 @@ export function OAuthAppDetailPanel({
361
363
  disabled={isUpdating}
362
364
  />
363
365
  <FieldInput
364
- id="stgm-oauth-edit-scope-param"
366
+ id={`${baseId}-scope-param`}
365
367
  label="Scope parameter name"
366
368
  value={scopeParameterName}
367
369
  onChange={setScopeParameterName}
@@ -372,13 +374,13 @@ export function OAuthAppDetailPanel({
372
374
 
373
375
  <div className="stg:space-y-1">
374
376
  <label
375
- htmlFor="stgm-oauth-edit-approval-status"
377
+ htmlFor={`${baseId}-approval-status`}
376
378
  className="stg:text-xs stg:font-medium stg:text-foreground"
377
379
  >
378
380
  Vendor approval status
379
381
  </label>
380
382
  <select
381
- id="stgm-oauth-edit-approval-status"
383
+ id={`${baseId}-approval-status`}
382
384
  value={vendorApprovalStatus}
383
385
  onChange={(e) =>
384
386
  setVendorApprovalStatus(
@@ -400,7 +402,7 @@ export function OAuthAppDetailPanel({
400
402
  </div>
401
403
 
402
404
  <FieldInput
403
- id="stgm-oauth-edit-approval-docs"
405
+ id={`${baseId}-approval-docs`}
404
406
  label="Vendor approval docs URL"
405
407
  value={vendorApprovalDocsUrl}
406
408
  onChange={setVendorApprovalDocsUrl}
@@ -425,7 +427,7 @@ export function OAuthAppDetailPanel({
425
427
  "stg:disabled:pointer-events-none stg:disabled:opacity-40",
426
428
  )}
427
429
  >
428
- {isUpdating && <SpinnerIcon />}
430
+ {isUpdating && <SpinnerIcon size={12} />}
429
431
  Save changes
430
432
  </button>
431
433
  <button
@@ -652,20 +654,3 @@ function ArrowLeftIcon() {
652
654
  );
653
655
  }
654
656
 
655
- function SpinnerIcon() {
656
- return (
657
- <svg
658
- width="12"
659
- height="12"
660
- viewBox="0 0 16 16"
661
- fill="none"
662
- stroke="currentColor"
663
- strokeWidth="2"
664
- strokeLinecap="round"
665
- className="stg:animate-spin"
666
- aria-hidden="true"
667
- >
668
- <path d="M8 2a6 6 0 1 0 6 6" />
669
- </svg>
670
- );
671
- }