@stigmer/react 3.12.0 → 3.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (738) hide show
  1. package/access/ManageAccessDialog.d.ts.map +1 -1
  2. package/access/ManageAccessDialog.js +7 -2
  3. package/access/ManageAccessDialog.js.map +1 -1
  4. package/activity/format-relative-time.d.ts +11 -9
  5. package/activity/format-relative-time.d.ts.map +1 -1
  6. package/activity/format-relative-time.js +11 -9
  7. package/activity/format-relative-time.js.map +1 -1
  8. package/agent/steps/CapabilitiesStep.js +5 -2
  9. package/agent/steps/CapabilitiesStep.js.map +1 -1
  10. package/agent/steps/IdentityStep.d.ts.map +1 -1
  11. package/agent/steps/IdentityStep.js +6 -5
  12. package/agent/steps/IdentityStep.js.map +1 -1
  13. package/agent-instance/CreateAgentInstanceDialog.d.ts.map +1 -1
  14. package/agent-instance/CreateAgentInstanceDialog.js +10 -2
  15. package/agent-instance/CreateAgentInstanceDialog.js.map +1 -1
  16. package/api-key/ApiKeyCreatedAlert.d.ts.map +1 -1
  17. package/api-key/ApiKeyCreatedAlert.js +12 -20
  18. package/api-key/ApiKeyCreatedAlert.js.map +1 -1
  19. package/api-key/ApiKeyListPanel.d.ts.map +1 -1
  20. package/api-key/ApiKeyListPanel.js +3 -23
  21. package/api-key/ApiKeyListPanel.js.map +1 -1
  22. package/api-key/CreateApiKeyForm.d.ts.map +1 -1
  23. package/api-key/CreateApiKeyForm.js +6 -10
  24. package/api-key/CreateApiKeyForm.js.map +1 -1
  25. package/approval-defaults-context.d.ts +47 -0
  26. package/approval-defaults-context.d.ts.map +1 -0
  27. package/approval-defaults-context.js +27 -0
  28. package/approval-defaults-context.js.map +1 -0
  29. package/attachment/index.d.ts +2 -0
  30. package/attachment/index.d.ts.map +1 -1
  31. package/attachment/index.js +1 -0
  32. package/attachment/index.js.map +1 -1
  33. package/attachment/vision-preflight.d.ts +113 -0
  34. package/attachment/vision-preflight.d.ts.map +1 -0
  35. package/attachment/vision-preflight.js +143 -0
  36. package/attachment/vision-preflight.js.map +1 -0
  37. package/billing/AutoRechargeCard.d.ts.map +1 -1
  38. package/billing/AutoRechargeCard.js +3 -2
  39. package/billing/AutoRechargeCard.js.map +1 -1
  40. package/billing/BillingSection.d.ts.map +1 -1
  41. package/billing/BillingSection.js +3 -2
  42. package/billing/BillingSection.js.map +1 -1
  43. package/channel/ChannelConversationsDialog.d.ts.map +1 -1
  44. package/channel/ChannelConversationsDialog.js +5 -4
  45. package/channel/ChannelConversationsDialog.js.map +1 -1
  46. package/channel/ChannelCredentialsDialog.d.ts.map +1 -1
  47. package/channel/ChannelCredentialsDialog.js +9 -4
  48. package/channel/ChannelCredentialsDialog.js.map +1 -1
  49. package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
  50. package/channel/ChannelTemplatesDialog.js +5 -4
  51. package/channel/ChannelTemplatesDialog.js.map +1 -1
  52. package/channel/ConnectSlackDialog.d.ts.map +1 -1
  53. package/channel/ConnectSlackDialog.js +9 -4
  54. package/channel/ConnectSlackDialog.js.map +1 -1
  55. package/channel/ConnectWhatsAppDialog.d.ts.map +1 -1
  56. package/channel/ConnectWhatsAppDialog.js +9 -4
  57. package/channel/ConnectWhatsAppDialog.js.map +1 -1
  58. package/channel/useChannelSessions.d.ts.map +1 -1
  59. package/channel/useChannelSessions.js.map +1 -1
  60. package/channel-app/ChannelAppDetailPanel.d.ts.map +1 -1
  61. package/channel-app/ChannelAppDetailPanel.js +8 -5
  62. package/channel-app/ChannelAppDetailPanel.js.map +1 -1
  63. package/channel-app/CreateChannelAppForm.d.ts.map +1 -1
  64. package/channel-app/CreateChannelAppForm.js +12 -7
  65. package/channel-app/CreateChannelAppForm.js.map +1 -1
  66. package/channel-app/internal.d.ts +0 -1
  67. package/channel-app/internal.d.ts.map +1 -1
  68. package/channel-app/internal.js +5 -10
  69. package/channel-app/internal.js.map +1 -1
  70. package/composer/ComposerToolbar.js +2 -1
  71. package/composer/ComposerToolbar.js.map +1 -1
  72. package/composer/SessionComposer.d.ts +1 -1
  73. package/composer/SessionComposer.d.ts.map +1 -1
  74. package/composer/SessionComposer.js +120 -13
  75. package/composer/SessionComposer.js.map +1 -1
  76. package/composer/icons.d.ts +0 -1
  77. package/composer/icons.d.ts.map +1 -1
  78. package/composer/icons.js +0 -3
  79. package/composer/icons.js.map +1 -1
  80. package/conversation/ConversationComposer.js +1 -1
  81. package/conversation/ConversationComposer.js.map +1 -1
  82. package/conversation/ConversationListPane.d.ts.map +1 -1
  83. package/conversation/ConversationListPane.js +3 -2
  84. package/conversation/ConversationListPane.js.map +1 -1
  85. package/cursor-accounts/MemberCoverageTable.js +3 -14
  86. package/cursor-accounts/MemberCoverageTable.js.map +1 -1
  87. package/dashboard/DashboardFailedRuns.d.ts.map +1 -1
  88. package/dashboard/DashboardFailedRuns.js +2 -14
  89. package/dashboard/DashboardFailedRuns.js.map +1 -1
  90. package/environment/CreateEnvironmentForm.d.ts.map +1 -1
  91. package/environment/CreateEnvironmentForm.js +4 -8
  92. package/environment/CreateEnvironmentForm.js.map +1 -1
  93. package/environment/EnvVarForm.d.ts.map +1 -1
  94. package/environment/EnvVarForm.js +2 -4
  95. package/environment/EnvVarForm.js.map +1 -1
  96. package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
  97. package/environment/EnvironmentVariableEditor.js +5 -7
  98. package/environment/EnvironmentVariableEditor.js.map +1 -1
  99. package/execution/ArtifactApplyButton.d.ts.map +1 -1
  100. package/execution/ArtifactApplyButton.js +2 -4
  101. package/execution/ArtifactApplyButton.js.map +1 -1
  102. package/execution/ExecutionErrorNotice.d.ts +36 -0
  103. package/execution/ExecutionErrorNotice.d.ts.map +1 -0
  104. package/execution/ExecutionErrorNotice.js +39 -0
  105. package/execution/ExecutionErrorNotice.js.map +1 -0
  106. package/execution/FilePathLink.d.ts.map +1 -1
  107. package/execution/FilePathLink.js +5 -8
  108. package/execution/FilePathLink.js.map +1 -1
  109. package/execution/FileReviewCard.d.ts.map +1 -1
  110. package/execution/FileReviewCard.js +1 -6
  111. package/execution/FileReviewCard.js.map +1 -1
  112. package/execution/FollowUpInput.d.ts.map +1 -1
  113. package/execution/FollowUpInput.js +1 -3
  114. package/execution/FollowUpInput.js.map +1 -1
  115. package/execution/LivenessStatusLine.d.ts +40 -0
  116. package/execution/LivenessStatusLine.d.ts.map +1 -0
  117. package/execution/LivenessStatusLine.js +34 -0
  118. package/execution/LivenessStatusLine.js.map +1 -0
  119. package/execution/MessageEntry.d.ts.map +1 -1
  120. package/execution/MessageEntry.js +31 -3
  121. package/execution/MessageEntry.js.map +1 -1
  122. package/execution/MessageThread.d.ts +25 -0
  123. package/execution/MessageThread.d.ts.map +1 -1
  124. package/execution/MessageThread.js +51 -36
  125. package/execution/MessageThread.js.map +1 -1
  126. package/execution/SetupProgress.d.ts.map +1 -1
  127. package/execution/SetupProgress.js +1 -1
  128. package/execution/SetupProgress.js.map +1 -1
  129. package/execution/SubAgentSection.d.ts.map +1 -1
  130. package/execution/SubAgentSection.js +9 -7
  131. package/execution/SubAgentSection.js.map +1 -1
  132. package/execution/TerminalSession.d.ts +30 -0
  133. package/execution/TerminalSession.d.ts.map +1 -1
  134. package/execution/TerminalSession.js +37 -1
  135. package/execution/TerminalSession.js.map +1 -1
  136. package/execution/ToolCallDetail.d.ts +9 -0
  137. package/execution/ToolCallDetail.d.ts.map +1 -1
  138. package/execution/ToolCallDetail.js +16 -0
  139. package/execution/ToolCallDetail.js.map +1 -1
  140. package/execution/ToolCallItem.d.ts +20 -6
  141. package/execution/ToolCallItem.d.ts.map +1 -1
  142. package/execution/ToolCallItem.js +102 -29
  143. package/execution/ToolCallItem.js.map +1 -1
  144. package/execution/ToolRunGroup.d.ts.map +1 -1
  145. package/execution/ToolRunGroup.js +11 -11
  146. package/execution/ToolRunGroup.js.map +1 -1
  147. package/execution/WriteBackCard.d.ts.map +1 -1
  148. package/execution/WriteBackCard.js +5 -20
  149. package/execution/WriteBackCard.js.map +1 -1
  150. package/execution/index.d.ts +6 -2
  151. package/execution/index.d.ts.map +1 -1
  152. package/execution/index.js +3 -1
  153. package/execution/index.js.map +1 -1
  154. package/execution/tool-categories.d.ts +42 -7
  155. package/execution/tool-categories.d.ts.map +1 -1
  156. package/execution/tool-categories.js +38 -4
  157. package/execution/tool-categories.js.map +1 -1
  158. package/execution/tool-presenter.d.ts +17 -1
  159. package/execution/tool-presenter.d.ts.map +1 -1
  160. package/execution/tool-presenter.js +4 -1
  161. package/execution/tool-presenter.js.map +1 -1
  162. package/execution/useArtifactInspection.d.ts.map +1 -1
  163. package/execution/useArtifactInspection.js +4 -7
  164. package/execution/useArtifactInspection.js.map +1 -1
  165. package/execution/useCreateAgentExecution.d.ts +3 -2
  166. package/execution/useCreateAgentExecution.d.ts.map +1 -1
  167. package/execution/useCreateAgentExecution.js.map +1 -1
  168. package/iam-policy/GrantAccessForm.d.ts.map +1 -1
  169. package/iam-policy/GrantAccessForm.js +2 -4
  170. package/iam-policy/GrantAccessForm.js.map +1 -1
  171. package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
  172. package/iam-policy/OrgMembersPanel.js +3 -5
  173. package/iam-policy/OrgMembersPanel.js.map +1 -1
  174. package/iam-policy/RoleSelector.d.ts.map +1 -1
  175. package/iam-policy/RoleSelector.js +7 -1
  176. package/iam-policy/RoleSelector.js.map +1 -1
  177. package/identity-provider/CreateIdentityProviderForm.d.ts.map +1 -1
  178. package/identity-provider/CreateIdentityProviderForm.js +6 -9
  179. package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
  180. package/identity-provider/IdentityProviderDetailPanel.d.ts.map +1 -1
  181. package/identity-provider/IdentityProviderDetailPanel.js +17 -26
  182. package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
  183. package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
  184. package/identity-provider/IdentityProviderListPanel.js +2 -4
  185. package/identity-provider/IdentityProviderListPanel.js.map +1 -1
  186. package/identity-provider/IdentityProviderWizard.d.ts.map +1 -1
  187. package/identity-provider/IdentityProviderWizard.js +8 -7
  188. package/identity-provider/IdentityProviderWizard.js.map +1 -1
  189. package/identity-provider/SsoLoginPrompt.js +5 -6
  190. package/identity-provider/SsoLoginPrompt.js.map +1 -1
  191. package/index.d.ts +9 -8
  192. package/index.d.ts.map +1 -1
  193. package/index.js +4 -4
  194. package/index.js.map +1 -1
  195. package/internal/DecisionButton.d.ts.map +1 -1
  196. package/internal/DecisionButton.js +1 -6
  197. package/internal/DecisionButton.js.map +1 -1
  198. package/internal/SpinnerIcon.d.ts +22 -0
  199. package/internal/SpinnerIcon.d.ts.map +1 -0
  200. package/internal/SpinnerIcon.js +23 -0
  201. package/internal/SpinnerIcon.js.map +1 -0
  202. package/internal/isUnimplemented.d.ts +17 -0
  203. package/internal/isUnimplemented.d.ts.map +1 -0
  204. package/internal/isUnimplemented.js +26 -0
  205. package/internal/isUnimplemented.js.map +1 -0
  206. package/internal/select-element-text.d.ts +11 -0
  207. package/internal/select-element-text.d.ts.map +1 -0
  208. package/internal/select-element-text.js +19 -0
  209. package/internal/select-element-text.js.map +1 -0
  210. package/internal/thread-card/ThreadCardShell.d.ts +27 -10
  211. package/internal/thread-card/ThreadCardShell.d.ts.map +1 -1
  212. package/internal/thread-card/ThreadCardShell.js +11 -5
  213. package/internal/thread-card/ThreadCardShell.js.map +1 -1
  214. package/internal/thread-card/glyphs.d.ts +11 -2
  215. package/internal/thread-card/glyphs.d.ts.map +1 -1
  216. package/internal/thread-card/glyphs.js +9 -3
  217. package/internal/thread-card/glyphs.js.map +1 -1
  218. package/internal/thread-card/index.d.ts +1 -1
  219. package/internal/thread-card/index.d.ts.map +1 -1
  220. package/internal/thread-card/index.js.map +1 -1
  221. package/internal/useCopyFeedback.d.ts +28 -0
  222. package/internal/useCopyFeedback.d.ts.map +1 -0
  223. package/internal/useCopyFeedback.js +40 -0
  224. package/internal/useCopyFeedback.js.map +1 -0
  225. package/invitation/InvitationCreatedAlert.d.ts.map +1 -1
  226. package/invitation/InvitationCreatedAlert.js +12 -19
  227. package/invitation/InvitationCreatedAlert.js.map +1 -1
  228. package/invitation/InvitationManager.d.ts.map +1 -1
  229. package/invitation/InvitationManager.js +14 -21
  230. package/invitation/InvitationManager.js.map +1 -1
  231. package/invitation/InvitationRedemption.d.ts.map +1 -1
  232. package/invitation/InvitationRedemption.js +2 -4
  233. package/invitation/InvitationRedemption.js.map +1 -1
  234. package/library/useExportResource.d.ts.map +1 -1
  235. package/library/useExportResource.js +16 -27
  236. package/library/useExportResource.js.map +1 -1
  237. package/manifest/ApplyManifestDialog.js +1 -1
  238. package/manifest/EditResourceYamlDialog.js +1 -1
  239. package/mcp-server/DefinitionDriftNotice.d.ts +42 -0
  240. package/mcp-server/DefinitionDriftNotice.d.ts.map +1 -0
  241. package/mcp-server/DefinitionDriftNotice.js +52 -0
  242. package/mcp-server/DefinitionDriftNotice.js.map +1 -0
  243. package/mcp-server/McpServerConnectDialog.js +8 -4
  244. package/mcp-server/McpServerConnectDialog.js.map +1 -1
  245. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  246. package/mcp-server/McpServerDetailView.js +47 -14
  247. package/mcp-server/McpServerDetailView.js.map +1 -1
  248. package/mcp-server/OAuthAppForm.d.ts.map +1 -1
  249. package/mcp-server/OAuthAppForm.js +2 -4
  250. package/mcp-server/OAuthAppForm.js.map +1 -1
  251. package/mcp-server/internal/definitionDrift.d.ts +39 -0
  252. package/mcp-server/internal/definitionDrift.d.ts.map +1 -0
  253. package/mcp-server/internal/definitionDrift.js +122 -0
  254. package/mcp-server/internal/definitionDrift.js.map +1 -0
  255. package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -1
  256. package/mcp-server/internal/mcpServerToInput.js +3 -0
  257. package/mcp-server/internal/mcpServerToInput.js.map +1 -1
  258. package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -1
  259. package/mcp-server/steps/EnvironmentAuthStep.js +8 -4
  260. package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
  261. package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -1
  262. package/mcp-server/steps/IdentityTransportStep.js +5 -4
  263. package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
  264. package/mcp-server/useMcpServerConnect.d.ts +1 -1
  265. package/mcp-server/useMcpServerCredentials.d.ts +38 -10
  266. package/mcp-server/useMcpServerCredentials.d.ts.map +1 -1
  267. package/mcp-server/useMcpServerCredentials.js +50 -7
  268. package/mcp-server/useMcpServerCredentials.js.map +1 -1
  269. package/mcp-server/useMcpServerDefinitionDrift.d.ts +44 -0
  270. package/mcp-server/useMcpServerDefinitionDrift.d.ts.map +1 -0
  271. package/mcp-server/useMcpServerDefinitionDrift.js +61 -0
  272. package/mcp-server/useMcpServerDefinitionDrift.js.map +1 -0
  273. package/mcp-server/useOrgOAuthApp.d.ts +22 -0
  274. package/mcp-server/useOrgOAuthApp.d.ts.map +1 -1
  275. package/mcp-server/useOrgOAuthApp.js +39 -7
  276. package/mcp-server/useOrgOAuthApp.js.map +1 -1
  277. package/models/ModelRegistryContext.d.ts +7 -1
  278. package/models/ModelRegistryContext.d.ts.map +1 -1
  279. package/models/ModelRegistryContext.js.map +1 -1
  280. package/models/ModelSelector.js +9 -1
  281. package/models/ModelSelector.js.map +1 -1
  282. package/models/index.d.ts +2 -2
  283. package/models/index.d.ts.map +1 -1
  284. package/models/index.js +1 -1
  285. package/models/index.js.map +1 -1
  286. package/models/registry.d.ts +88 -6
  287. package/models/registry.d.ts.map +1 -1
  288. package/models/registry.js +133 -27
  289. package/models/registry.js.map +1 -1
  290. package/models/useModelRegistry.d.ts +7 -1
  291. package/models/useModelRegistry.d.ts.map +1 -1
  292. package/models/useModelRegistry.js +3 -2
  293. package/models/useModelRegistry.js.map +1 -1
  294. package/oauth-app/CreateOAuthAppForm.d.ts.map +1 -1
  295. package/oauth-app/CreateOAuthAppForm.js +4 -5
  296. package/oauth-app/CreateOAuthAppForm.js.map +1 -1
  297. package/oauth-app/OAuthAppDetailPanel.d.ts.map +1 -1
  298. package/oauth-app/OAuthAppDetailPanel.js +5 -6
  299. package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
  300. package/organization/CreateOrganizationForm.d.ts.map +1 -1
  301. package/organization/CreateOrganizationForm.js +5 -9
  302. package/organization/CreateOrganizationForm.js.map +1 -1
  303. package/organization/OrgProfilePanel.d.ts.map +1 -1
  304. package/organization/OrgProfilePanel.js +7 -16
  305. package/organization/OrgProfilePanel.js.map +1 -1
  306. package/package.json +4 -4
  307. package/platform-client/CreatePlatformClientForm.d.ts.map +1 -1
  308. package/platform-client/CreatePlatformClientForm.js +5 -6
  309. package/platform-client/CreatePlatformClientForm.js.map +1 -1
  310. package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
  311. package/platform-client/PlatformClientDetailPanel.js +6 -7
  312. package/platform-client/PlatformClientDetailPanel.js.map +1 -1
  313. package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
  314. package/platform-client/PlatformClientListPanel.js +2 -4
  315. package/platform-client/PlatformClientListPanel.js.map +1 -1
  316. package/platform-client/PlatformClientSecretAlert.d.ts.map +1 -1
  317. package/platform-client/PlatformClientSecretAlert.js +18 -25
  318. package/platform-client/PlatformClientSecretAlert.js.map +1 -1
  319. package/provider.d.ts +34 -1
  320. package/provider.d.ts.map +1 -1
  321. package/provider.js +14 -7
  322. package/provider.js.map +1 -1
  323. package/resource-creation/WizardNav.d.ts.map +1 -1
  324. package/resource-creation/WizardNav.js +2 -4
  325. package/resource-creation/WizardNav.js.map +1 -1
  326. package/resource-detail/ConfirmDialog.js +1 -1
  327. package/resource-detail/useCopyResource.d.ts +4 -3
  328. package/resource-detail/useCopyResource.d.ts.map +1 -1
  329. package/resource-detail/useCopyResource.js +10 -19
  330. package/resource-detail/useCopyResource.js.map +1 -1
  331. package/schedule/ScheduleDetailView.d.ts.map +1 -1
  332. package/schedule/ScheduleDetailView.js +2 -4
  333. package/schedule/ScheduleDetailView.js.map +1 -1
  334. package/schedule/ScheduleForm.d.ts.map +1 -1
  335. package/schedule/ScheduleForm.js +6 -7
  336. package/schedule/ScheduleForm.js.map +1 -1
  337. package/session/NewSessionViewer.d.ts +52 -2
  338. package/session/NewSessionViewer.d.ts.map +1 -1
  339. package/session/NewSessionViewer.js +21 -6
  340. package/session/NewSessionViewer.js.map +1 -1
  341. package/session/SessionViewer.d.ts +63 -2
  342. package/session/SessionViewer.d.ts.map +1 -1
  343. package/session/SessionViewer.js +43 -17
  344. package/session/SessionViewer.js.map +1 -1
  345. package/session/audience.d.ts +17 -0
  346. package/session/audience.d.ts.map +1 -1
  347. package/session/index.d.ts +2 -1
  348. package/session/index.d.ts.map +1 -1
  349. package/session/index.js.map +1 -1
  350. package/session/run-config.d.ts +50 -0
  351. package/session/run-config.d.ts.map +1 -0
  352. package/session/run-config.js +15 -0
  353. package/session/run-config.js.map +1 -0
  354. package/session/useNewSessionFlow.d.ts +11 -0
  355. package/session/useNewSessionFlow.d.ts.map +1 -1
  356. package/session/useNewSessionFlow.js +29 -2
  357. package/session/useNewSessionFlow.js.map +1 -1
  358. package/session/useSessionConversation.d.ts +11 -9
  359. package/session/useSessionConversation.d.ts.map +1 -1
  360. package/session/useSessionConversation.js +2 -0
  361. package/session/useSessionConversation.js.map +1 -1
  362. package/session/useSessionPageFlow.d.ts +18 -4
  363. package/session/useSessionPageFlow.d.ts.map +1 -1
  364. package/session/useSessionPageFlow.js +33 -6
  365. package/session/useSessionPageFlow.js.map +1 -1
  366. package/session/useSessionPanel.d.ts +37 -2
  367. package/session/useSessionPanel.d.ts.map +1 -1
  368. package/session/useSessionPanel.js +44 -10
  369. package/session/useSessionPanel.js.map +1 -1
  370. package/settings/ApiKeysSection.d.ts.map +1 -1
  371. package/settings/ApiKeysSection.js +3 -2
  372. package/settings/ApiKeysSection.js.map +1 -1
  373. package/settings/ChannelAppsSection.d.ts.map +1 -1
  374. package/settings/ChannelAppsSection.js +3 -2
  375. package/settings/ChannelAppsSection.js.map +1 -1
  376. package/settings/EnvironmentsSection.js +5 -3
  377. package/settings/EnvironmentsSection.js.map +1 -1
  378. package/settings/IdentityProvidersSection.d.ts.map +1 -1
  379. package/settings/IdentityProvidersSection.js +3 -2
  380. package/settings/IdentityProvidersSection.js.map +1 -1
  381. package/settings/InvitationsSection.d.ts.map +1 -1
  382. package/settings/InvitationsSection.js +3 -1
  383. package/settings/InvitationsSection.js.map +1 -1
  384. package/settings/MembersSection.d.ts.map +1 -1
  385. package/settings/MembersSection.js +3 -1
  386. package/settings/MembersSection.js.map +1 -1
  387. package/settings/OAuthAppsSection.d.ts.map +1 -1
  388. package/settings/OAuthAppsSection.js +3 -2
  389. package/settings/OAuthAppsSection.js.map +1 -1
  390. package/settings/OrgProfileSection.d.ts.map +1 -1
  391. package/settings/OrgProfileSection.js +3 -2
  392. package/settings/OrgProfileSection.js.map +1 -1
  393. package/settings/PlatformClientsSection.d.ts.map +1 -1
  394. package/settings/PlatformClientsSection.js +3 -2
  395. package/settings/PlatformClientsSection.js.map +1 -1
  396. package/settings/UsageSection.d.ts.map +1 -1
  397. package/settings/UsageSection.js +3 -1
  398. package/settings/UsageSection.js.map +1 -1
  399. package/sharing/ShareAgentDialog.d.ts.map +1 -1
  400. package/sharing/ShareAgentDialog.js +18 -7
  401. package/sharing/ShareAgentDialog.js.map +1 -1
  402. package/sidebar/chrome.d.ts +3 -4
  403. package/sidebar/chrome.d.ts.map +1 -1
  404. package/sidebar/chrome.js +5 -4
  405. package/sidebar/chrome.js.map +1 -1
  406. package/skill/SkillDiffDialog.js +1 -1
  407. package/skill/useSkillVersions.d.ts.map +1 -1
  408. package/skill/useSkillVersions.js +1 -9
  409. package/skill/useSkillVersions.js.map +1 -1
  410. package/src/access/ManageAccessDialog.tsx +10 -4
  411. package/src/activity/format-relative-time.ts +11 -9
  412. package/src/agent/steps/CapabilitiesStep.tsx +6 -3
  413. package/src/agent/steps/IdentityStep.tsx +19 -12
  414. package/src/agent-instance/CreateAgentInstanceDialog.tsx +17 -8
  415. package/src/api-key/ApiKeyCreatedAlert.tsx +10 -19
  416. package/src/api-key/ApiKeyListPanel.tsx +3 -39
  417. package/src/api-key/CreateApiKeyForm.tsx +12 -26
  418. package/src/approval-defaults-context.ts +56 -0
  419. package/src/attachment/__tests__/vision-preflight.test.ts +311 -0
  420. package/src/attachment/index.ts +12 -0
  421. package/src/attachment/vision-preflight.ts +236 -0
  422. package/src/billing/AutoRechargeCard.tsx +5 -4
  423. package/src/billing/BillingSection.tsx +4 -3
  424. package/src/channel/ChannelConversationsDialog.tsx +8 -4
  425. package/src/channel/ChannelCredentialsDialog.tsx +14 -4
  426. package/src/channel/ChannelTemplatesDialog.tsx +8 -4
  427. package/src/channel/ConnectSlackDialog.tsx +14 -4
  428. package/src/channel/ConnectWhatsAppDialog.tsx +14 -4
  429. package/src/channel/useChannelSessions.ts +3 -0
  430. package/src/channel-app/ChannelAppDetailPanel.tsx +15 -12
  431. package/src/channel-app/CreateChannelAppForm.tsx +17 -12
  432. package/src/channel-app/internal.tsx +5 -25
  433. package/src/composer/ComposerToolbar.tsx +1 -1
  434. package/src/composer/SessionComposer.tsx +160 -13
  435. package/src/composer/__tests__/SessionComposer-modelCoherence.test.tsx +220 -0
  436. package/src/composer/__tests__/SessionComposer-visionPreflight.test.tsx +222 -0
  437. package/src/composer/icons.tsx +0 -18
  438. package/src/conversation/ConversationComposer.tsx +1 -1
  439. package/src/conversation/ConversationListPane.tsx +4 -3
  440. package/src/cursor-accounts/MemberCoverageTable.tsx +3 -14
  441. package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +2 -10
  442. package/src/dashboard/DashboardFailedRuns.tsx +2 -12
  443. package/src/environment/CreateEnvironmentForm.tsx +8 -27
  444. package/src/environment/EnvVarForm.tsx +2 -18
  445. package/src/environment/EnvironmentVariableEditor.tsx +5 -21
  446. package/src/execution/ArtifactApplyButton.tsx +2 -17
  447. package/src/execution/ExecutionErrorNotice.tsx +99 -0
  448. package/src/execution/FilePathLink.tsx +5 -9
  449. package/src/execution/FileReviewCard.tsx +1 -20
  450. package/src/execution/FollowUpInput.tsx +1 -16
  451. package/src/execution/LivenessStatusLine.tsx +59 -0
  452. package/src/execution/MessageEntry.tsx +136 -25
  453. package/src/execution/MessageThread.tsx +84 -83
  454. package/src/execution/SetupProgress.tsx +5 -1
  455. package/src/execution/SubAgentSection.tsx +9 -20
  456. package/src/execution/TerminalSession.tsx +97 -10
  457. package/src/execution/ToolCallDetail.tsx +19 -0
  458. package/src/execution/ToolCallItem.tsx +157 -37
  459. package/src/execution/ToolRunGroup.tsx +30 -32
  460. package/src/execution/WriteBackCard.tsx +5 -24
  461. package/src/execution/__tests__/MessageEntry-copy.test.tsx +125 -0
  462. package/src/execution/__tests__/MessageThread.test.tsx +97 -0
  463. package/src/execution/__tests__/TerminalSession.test.tsx +71 -1
  464. package/src/execution/__tests__/ToolCallDetail.test.tsx +33 -1
  465. package/src/execution/__tests__/ToolCallItem.test.tsx +299 -11
  466. package/src/execution/__tests__/ToolRunGroup.test.tsx +41 -9
  467. package/src/execution/__tests__/message-thread-slots.test.tsx +92 -0
  468. package/src/execution/__tests__/tool-presenter.test.tsx +41 -4
  469. package/src/execution/index.ts +8 -2
  470. package/src/execution/tool-categories.ts +72 -8
  471. package/src/execution/tool-presenter.ts +22 -1
  472. package/src/execution/useArtifactInspection.ts +4 -8
  473. package/src/execution/useCreateAgentExecution.ts +3 -2
  474. package/src/iam-policy/GrantAccessForm.tsx +2 -18
  475. package/src/iam-policy/OrgMembersPanel.tsx +3 -19
  476. package/src/iam-policy/RoleSelector.tsx +8 -1
  477. package/src/identity-provider/CreateIdentityProviderForm.tsx +13 -31
  478. package/src/identity-provider/IdentityProviderDetailPanel.tsx +24 -49
  479. package/src/identity-provider/IdentityProviderListPanel.tsx +2 -18
  480. package/src/identity-provider/IdentityProviderWizard.tsx +15 -32
  481. package/src/identity-provider/SsoLoginPrompt.tsx +6 -21
  482. package/src/index.ts +23 -1
  483. package/src/internal/DecisionButton.tsx +1 -20
  484. package/src/internal/SpinnerIcon.tsx +42 -0
  485. package/src/internal/__tests__/ThreadCardShell.test.tsx +43 -7
  486. package/src/internal/__tests__/useCopyFeedback.test.ts +92 -0
  487. package/src/internal/isUnimplemented.ts +26 -0
  488. package/src/internal/select-element-text.ts +17 -0
  489. package/src/internal/thread-card/ThreadCardShell.tsx +53 -21
  490. package/src/internal/thread-card/glyphs.tsx +24 -3
  491. package/src/internal/thread-card/index.ts +1 -0
  492. package/src/internal/useCopyFeedback.ts +61 -0
  493. package/src/invitation/InvitationCreatedAlert.tsx +10 -18
  494. package/src/invitation/InvitationManager.tsx +23 -34
  495. package/src/invitation/InvitationRedemption.tsx +2 -18
  496. package/src/library/useExportResource.ts +15 -29
  497. package/src/manifest/ApplyManifestDialog.tsx +1 -1
  498. package/src/manifest/EditResourceYamlDialog.tsx +1 -1
  499. package/src/mcp-server/DefinitionDriftNotice.tsx +120 -0
  500. package/src/mcp-server/McpServerConnectDialog.tsx +30 -12
  501. package/src/mcp-server/McpServerDetailView.tsx +58 -26
  502. package/src/mcp-server/OAuthAppForm.tsx +2 -18
  503. package/src/mcp-server/__tests__/DefinitionDriftNotice.test.tsx +57 -0
  504. package/src/mcp-server/__tests__/VendorApprovalBlocked.surfaces.test.tsx +103 -5
  505. package/src/mcp-server/__tests__/byoaEditionDegradation.test.tsx +323 -0
  506. package/src/mcp-server/__tests__/definitionDrift.test.ts +245 -0
  507. package/src/mcp-server/__tests__/mcpServerToInput.test.ts +201 -0
  508. package/src/mcp-server/__tests__/useMcpServerCredentials.test.tsx +306 -0
  509. package/src/mcp-server/__tests__/useMcpServerDefinitionDrift.test.tsx +173 -0
  510. package/src/mcp-server/internal/definitionDrift.ts +158 -0
  511. package/src/mcp-server/internal/mcpServerToInput.ts +3 -0
  512. package/src/mcp-server/steps/EnvironmentAuthStep.tsx +19 -19
  513. package/src/mcp-server/steps/IdentityTransportStep.tsx +24 -23
  514. package/src/mcp-server/useMcpServerConnect.ts +1 -1
  515. package/src/mcp-server/useMcpServerCredentials.ts +87 -19
  516. package/src/mcp-server/useMcpServerDefinitionDrift.ts +95 -0
  517. package/src/mcp-server/useOrgOAuthApp.ts +54 -8
  518. package/src/models/ModelRegistryContext.ts +7 -1
  519. package/src/models/ModelSelector.tsx +37 -0
  520. package/src/models/__tests__/ModelSelector-visionIndicator.test.tsx +129 -0
  521. package/src/models/__tests__/resolveDefaultModel.test.ts +115 -0
  522. package/src/models/__tests__/useModelRegistry.test.tsx +99 -4
  523. package/src/models/index.ts +2 -2
  524. package/src/models/registry.ts +196 -29
  525. package/src/models/useModelRegistry.ts +10 -2
  526. package/src/oauth-app/CreateOAuthAppForm.tsx +16 -31
  527. package/src/oauth-app/OAuthAppDetailPanel.tsx +16 -31
  528. package/src/organization/CreateOrganizationForm.tsx +10 -29
  529. package/src/organization/OrgProfilePanel.tsx +13 -44
  530. package/src/platform-client/CreatePlatformClientForm.tsx +9 -29
  531. package/src/platform-client/PlatformClientDetailPanel.tsx +10 -30
  532. package/src/platform-client/PlatformClientListPanel.tsx +2 -18
  533. package/src/platform-client/PlatformClientSecretAlert.tsx +26 -55
  534. package/src/provider.tsx +76 -33
  535. package/src/resource-creation/WizardNav.tsx +2 -18
  536. package/src/resource-detail/ConfirmDialog.tsx +1 -1
  537. package/src/resource-detail/useCopyResource.ts +17 -23
  538. package/src/schedule/ScheduleDetailView.tsx +2 -18
  539. package/src/schedule/ScheduleForm.tsx +19 -34
  540. package/src/session/NewSessionViewer.tsx +85 -7
  541. package/src/session/SessionViewer.tsx +120 -17
  542. package/src/session/__tests__/audienceWiring.test.tsx +76 -0
  543. package/src/session/__tests__/panelNegotiation.test.tsx +302 -0
  544. package/src/session/__tests__/useNewSessionFlow.test.tsx +134 -5
  545. package/src/session/__tests__/useSessionPageFlow.autoApprove.test.tsx +74 -0
  546. package/src/session/__tests__/useSessionPageFlow.runConfig.test.tsx +157 -0
  547. package/src/session/__tests__/useSessionPanel.test.ts +114 -0
  548. package/src/session/audience.ts +18 -0
  549. package/src/session/index.ts +2 -1
  550. package/src/session/run-config.ts +59 -0
  551. package/src/session/useNewSessionFlow.ts +39 -2
  552. package/src/session/useSessionConversation.ts +14 -10
  553. package/src/session/useSessionPageFlow.ts +51 -10
  554. package/src/session/useSessionPanel.ts +91 -10
  555. package/src/settings/ApiKeysSection.tsx +4 -3
  556. package/src/settings/ChannelAppsSection.tsx +4 -3
  557. package/src/settings/EnvironmentsSection.tsx +8 -5
  558. package/src/settings/IdentityProvidersSection.tsx +4 -3
  559. package/src/settings/InvitationsSection.tsx +4 -2
  560. package/src/settings/MembersSection.tsx +4 -2
  561. package/src/settings/OAuthAppsSection.tsx +4 -3
  562. package/src/settings/OrgProfileSection.tsx +4 -3
  563. package/src/settings/PlatformClientsSection.tsx +4 -3
  564. package/src/settings/UsageSection.tsx +4 -2
  565. package/src/sharing/ShareAgentDialog.tsx +28 -10
  566. package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -1
  567. package/src/sidebar/chrome.tsx +6 -6
  568. package/src/skill/SkillDiffDialog.tsx +1 -1
  569. package/src/skill/useSkillVersions.ts +1 -11
  570. package/src/styles.css +43 -0
  571. package/src/version-history/VersionTimelineEntry.tsx +1 -21
  572. package/src/workflow/FailedRunsWidget.tsx +2 -9
  573. package/src/workflow/PendingApprovalsWidget.tsx +2 -9
  574. package/src/workflow/ViewYamlDialog.tsx +7 -22
  575. package/src/workflow/WorkflowArchitectDialog.tsx +8 -27
  576. package/src/workflow/WorkflowArtifactDocument.tsx +5 -9
  577. package/src/workflow/WorkflowCanvasEditor.tsx +39 -7
  578. package/src/workflow/WorkflowCanvasInner.tsx +14 -1
  579. package/src/workflow/WorkflowDiffGraph.tsx +7 -1
  580. package/src/workflow/WorkflowExecutionGraph.tsx +26 -1
  581. package/src/workflow/WorkflowExecutionViewer.tsx +115 -24
  582. package/src/workflow/WorkflowExplainDialog.tsx +8 -24
  583. package/src/workflow/WorkflowNode.tsx +5 -2
  584. package/src/workflow/WorkflowOverviewGraph.tsx +9 -1
  585. package/src/workflow/WorkflowRefinePanel.tsx +2 -18
  586. package/src/workflow/WorkflowRepairCard.tsx +2 -18
  587. package/src/workflow/WorkflowRunDialog.tsx +31 -24
  588. package/src/workflow/WorkflowTaskApprovalSummary.tsx +2 -17
  589. package/src/workflow/WorkflowVersionBadge.tsx +4 -13
  590. package/src/workflow/WorkflowVersionTimeline.tsx +1 -25
  591. package/src/workflow/__tests__/WorkflowExecutionViewer.reconciliation.test.tsx +48 -1
  592. package/src/workflow/__tests__/WorkflowNode.test.tsx +93 -0
  593. package/src/workflow/__tests__/WorkflowRunDialog.test.tsx +127 -0
  594. package/src/workflow/__tests__/graph-history.test.ts +103 -0
  595. package/src/workflow/__tests__/overview-graph.test.ts +17 -0
  596. package/src/workflow/__tests__/panelNegotiation.test.tsx +230 -0
  597. package/src/workflow/__tests__/useCanvasKeyboardShortcuts.undo.test.ts +115 -0
  598. package/src/workflow/__tests__/useWorkflowCanvas.dirty.test.tsx +178 -0
  599. package/src/workflow/__tests__/useWorkflowCanvas.drag.test.tsx +224 -0
  600. package/src/workflow/__tests__/useWorkflowCanvas.undo.test.tsx +133 -0
  601. package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +100 -0
  602. package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +7 -11
  603. package/src/workflow/execution-history/ExecutionHistoryTable.tsx +1 -25
  604. package/src/workflow/index.ts +1 -0
  605. package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +17 -8
  606. package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
  607. package/src/workflow/instance/useDeleteWorkflowInstance.ts +9 -4
  608. package/src/workflow/layout/registry-dimensions.ts +2 -5
  609. package/src/workflow/node-shell/NodeShell.tsx +4 -0
  610. package/src/workflow/picker/BranchAddPopover.tsx +4 -3
  611. package/src/workflow/task-type-visual-registry.ts +5 -3
  612. package/src/workflow/templates/WorkflowTemplatePreview.tsx +1 -1
  613. package/src/workflow/useApprovalBoundary.ts +1 -1
  614. package/src/workflow/useCanvasKeyboardShortcuts.ts +33 -3
  615. package/src/workflow/useGraphHistory.ts +22 -41
  616. package/src/workflow/useWorkflowCanvas.ts +126 -21
  617. package/src/workflow/useWorkflowExecutionPanel.ts +95 -13
  618. package/src/workflow/useWorkflowSave.ts +2 -15
  619. package/src/workflow/workflow-graph-conversions.ts +25 -3
  620. package/styles.css +1 -1
  621. package/version-history/VersionTimelineEntry.d.ts.map +1 -1
  622. package/version-history/VersionTimelineEntry.js +1 -23
  623. package/version-history/VersionTimelineEntry.js.map +1 -1
  624. package/workflow/CanvasTransitionEdge.d.ts +1 -1
  625. package/workflow/FailedRunsWidget.d.ts.map +1 -1
  626. package/workflow/FailedRunsWidget.js +2 -11
  627. package/workflow/FailedRunsWidget.js.map +1 -1
  628. package/workflow/PendingApprovalsWidget.d.ts.map +1 -1
  629. package/workflow/PendingApprovalsWidget.js +2 -11
  630. package/workflow/PendingApprovalsWidget.js.map +1 -1
  631. package/workflow/ViewYamlDialog.d.ts.map +1 -1
  632. package/workflow/ViewYamlDialog.js +7 -23
  633. package/workflow/ViewYamlDialog.js.map +1 -1
  634. package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
  635. package/workflow/WorkflowArchitectDialog.js +7 -11
  636. package/workflow/WorkflowArchitectDialog.js.map +1 -1
  637. package/workflow/WorkflowArtifactDocument.d.ts.map +1 -1
  638. package/workflow/WorkflowArtifactDocument.js +5 -8
  639. package/workflow/WorkflowArtifactDocument.js.map +1 -1
  640. package/workflow/WorkflowCanvasEditor.d.ts.map +1 -1
  641. package/workflow/WorkflowCanvasEditor.js +31 -6
  642. package/workflow/WorkflowCanvasEditor.js.map +1 -1
  643. package/workflow/WorkflowCanvasInner.d.ts +4 -2
  644. package/workflow/WorkflowCanvasInner.d.ts.map +1 -1
  645. package/workflow/WorkflowCanvasInner.js +7 -3
  646. package/workflow/WorkflowCanvasInner.js.map +1 -1
  647. package/workflow/WorkflowDiffGraph.js +6 -2
  648. package/workflow/WorkflowDiffGraph.js.map +1 -1
  649. package/workflow/WorkflowExecutionGraph.d.ts.map +1 -1
  650. package/workflow/WorkflowExecutionGraph.js +27 -1
  651. package/workflow/WorkflowExecutionGraph.js.map +1 -1
  652. package/workflow/WorkflowExecutionViewer.d.ts +51 -0
  653. package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
  654. package/workflow/WorkflowExecutionViewer.js +49 -18
  655. package/workflow/WorkflowExecutionViewer.js.map +1 -1
  656. package/workflow/WorkflowExplainDialog.d.ts.map +1 -1
  657. package/workflow/WorkflowExplainDialog.js +6 -8
  658. package/workflow/WorkflowExplainDialog.js.map +1 -1
  659. package/workflow/WorkflowNode.d.ts.map +1 -1
  660. package/workflow/WorkflowNode.js +2 -2
  661. package/workflow/WorkflowNode.js.map +1 -1
  662. package/workflow/WorkflowOverviewGraph.js +8 -2
  663. package/workflow/WorkflowOverviewGraph.js.map +1 -1
  664. package/workflow/WorkflowRefinePanel.d.ts.map +1 -1
  665. package/workflow/WorkflowRefinePanel.js +2 -4
  666. package/workflow/WorkflowRefinePanel.js.map +1 -1
  667. package/workflow/WorkflowRepairCard.d.ts.map +1 -1
  668. package/workflow/WorkflowRepairCard.js +2 -4
  669. package/workflow/WorkflowRepairCard.js.map +1 -1
  670. package/workflow/WorkflowRunDialog.d.ts +11 -1
  671. package/workflow/WorkflowRunDialog.d.ts.map +1 -1
  672. package/workflow/WorkflowRunDialog.js +18 -9
  673. package/workflow/WorkflowRunDialog.js.map +1 -1
  674. package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
  675. package/workflow/WorkflowTaskApprovalSummary.js +2 -4
  676. package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
  677. package/workflow/WorkflowVersionBadge.d.ts.map +1 -1
  678. package/workflow/WorkflowVersionBadge.js +4 -13
  679. package/workflow/WorkflowVersionBadge.js.map +1 -1
  680. package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
  681. package/workflow/WorkflowVersionTimeline.js +1 -26
  682. package/workflow/WorkflowVersionTimeline.js.map +1 -1
  683. package/workflow/execution-comparison/ExecutionComparisonPicker.d.ts.map +1 -1
  684. package/workflow/execution-comparison/ExecutionComparisonPicker.js +7 -15
  685. package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
  686. package/workflow/execution-history/ExecutionHistoryTable.d.ts.map +1 -1
  687. package/workflow/execution-history/ExecutionHistoryTable.js +1 -24
  688. package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
  689. package/workflow/index.d.ts +1 -1
  690. package/workflow/index.d.ts.map +1 -1
  691. package/workflow/index.js.map +1 -1
  692. package/workflow/instance/CreateWorkflowInstanceDialog.d.ts.map +1 -1
  693. package/workflow/instance/CreateWorkflowInstanceDialog.js +10 -2
  694. package/workflow/instance/CreateWorkflowInstanceDialog.js.map +1 -1
  695. package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
  696. package/workflow/instance/WorkflowInstanceDetailPanel.js +1 -1
  697. package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
  698. package/workflow/instance/useDeleteWorkflowInstance.d.ts +9 -4
  699. package/workflow/instance/useDeleteWorkflowInstance.d.ts.map +1 -1
  700. package/workflow/instance/useDeleteWorkflowInstance.js +4 -2
  701. package/workflow/instance/useDeleteWorkflowInstance.js.map +1 -1
  702. package/workflow/layout/registry-dimensions.d.ts.map +1 -1
  703. package/workflow/layout/registry-dimensions.js +2 -5
  704. package/workflow/layout/registry-dimensions.js.map +1 -1
  705. package/workflow/node-shell/NodeShell.js +1 -1
  706. package/workflow/node-shell/NodeShell.js.map +1 -1
  707. package/workflow/picker/BranchAddPopover.d.ts.map +1 -1
  708. package/workflow/picker/BranchAddPopover.js +3 -2
  709. package/workflow/picker/BranchAddPopover.js.map +1 -1
  710. package/workflow/task-type-visual-registry.d.ts.map +1 -1
  711. package/workflow/task-type-visual-registry.js +5 -3
  712. package/workflow/task-type-visual-registry.js.map +1 -1
  713. package/workflow/templates/WorkflowTemplatePreview.js +1 -1
  714. package/workflow/useApprovalBoundary.d.ts +1 -1
  715. package/workflow/useApprovalBoundary.js +1 -1
  716. package/workflow/useCanvasKeyboardShortcuts.d.ts +15 -4
  717. package/workflow/useCanvasKeyboardShortcuts.d.ts.map +1 -1
  718. package/workflow/useCanvasKeyboardShortcuts.js +25 -4
  719. package/workflow/useCanvasKeyboardShortcuts.js.map +1 -1
  720. package/workflow/useGraphHistory.d.ts +16 -9
  721. package/workflow/useGraphHistory.d.ts.map +1 -1
  722. package/workflow/useGraphHistory.js +19 -33
  723. package/workflow/useGraphHistory.js.map +1 -1
  724. package/workflow/useWorkflowCanvas.d.ts +6 -4
  725. package/workflow/useWorkflowCanvas.d.ts.map +1 -1
  726. package/workflow/useWorkflowCanvas.js +115 -23
  727. package/workflow/useWorkflowCanvas.js.map +1 -1
  728. package/workflow/useWorkflowExecutionPanel.d.ts +38 -2
  729. package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -1
  730. package/workflow/useWorkflowExecutionPanel.js +46 -13
  731. package/workflow/useWorkflowExecutionPanel.js.map +1 -1
  732. package/workflow/useWorkflowSave.d.ts.map +1 -1
  733. package/workflow/useWorkflowSave.js +2 -15
  734. package/workflow/useWorkflowSave.js.map +1 -1
  735. package/workflow/workflow-graph-conversions.d.ts +19 -1
  736. package/workflow/workflow-graph-conversions.d.ts.map +1 -1
  737. package/workflow/workflow-graph-conversions.js +17 -3
  738. package/workflow/workflow-graph-conversions.js.map +1 -1
@@ -7,6 +7,7 @@ import {
7
7
  DEFAULT_CURSOR_MODEL_ID,
8
8
  DISABLED_PROVIDERS,
9
9
  modelKey,
10
+ parseRegistryDocument,
10
11
  parseRegistryJson,
11
12
  } from "../registry";
12
13
  import { ModelRegistryContext } from "../ModelRegistryContext";
@@ -106,6 +107,101 @@ function createWrapper(models: readonly ModelInfo[] = TEST_MODELS) {
106
107
  };
107
108
  }
108
109
 
110
+ describe("parseRegistryDocument vision data (#365, #386)", () => {
111
+ const entry = (overrides: Record<string, unknown>) => ({
112
+ id: "m",
113
+ displayName: "M",
114
+ provider: "anthropic",
115
+ harness: "native",
116
+ costTier: "standard",
117
+ pricing: { inputPricePerMillion: 1, outputPricePerMillion: 2, cacheWritePricePerMillion: 0, cacheReadPricePerMillion: 0 },
118
+ ...overrides,
119
+ });
120
+
121
+ it("parses explicit vision:false into visionCapability", () => {
122
+ const doc = parseRegistryDocument({
123
+ models: [entry({ capabilities: { toolUse: true, vision: false, streaming: true, thinking: false, adaptiveThinking: false } })],
124
+ });
125
+ expect(doc.models[0].visionCapability).toBe(false);
126
+ });
127
+
128
+ it("parses explicit vision:true into visionCapability", () => {
129
+ const doc = parseRegistryDocument({
130
+ models: [entry({ capabilities: { toolUse: true, vision: true, streaming: true, thinking: true, adaptiveThinking: false } })],
131
+ });
132
+ expect(doc.models[0].visionCapability).toBe(true);
133
+ });
134
+
135
+ it("keeps an unassessed model free of the visionCapability key (tri-state, never coerced to false)", () => {
136
+ const doc = parseRegistryDocument({ models: [entry({})] });
137
+ expect(doc.models[0].visionCapability).toBeUndefined();
138
+ expect("visionCapability" in doc.models[0]).toBe(false);
139
+ });
140
+
141
+ it("treats a malformed capabilities block as unassessed", () => {
142
+ const doc = parseRegistryDocument({
143
+ models: [entry({ capabilities: "broken" }), entry({ id: "m2", capabilities: { vision: "yes" } })],
144
+ });
145
+ expect(doc.models[0].visionCapability).toBeUndefined();
146
+ expect(doc.models[1].visionCapability).toBeUndefined();
147
+ });
148
+
149
+ it("parses the document-level limits.vision block", () => {
150
+ const doc = parseRegistryDocument({
151
+ limits: { vision: { maxImageBytes: 3145728, maxTotalBytes: 4194304, maxImages: 10 } },
152
+ models: [entry({})],
153
+ });
154
+ expect(doc.visionLimits).toEqual({
155
+ maxImageBytes: 3145728,
156
+ maxTotalBytes: 4194304,
157
+ maxImages: 10,
158
+ });
159
+ });
160
+
161
+ it("leaves visionLimits undefined for documents predating the limits block", () => {
162
+ const doc = parseRegistryDocument({ models: [entry({})] });
163
+ expect(doc.visionLimits).toBeUndefined();
164
+ });
165
+
166
+ it.each([
167
+ ["missing field", { vision: { maxImageBytes: 1, maxTotalBytes: 2 } }],
168
+ ["non-numeric field", { vision: { maxImageBytes: "3MB", maxTotalBytes: 2, maxImages: 1 } }],
169
+ ["zero cap", { vision: { maxImageBytes: 0, maxTotalBytes: 2, maxImages: 1 } }],
170
+ ["negative cap", { vision: { maxImageBytes: 1, maxTotalBytes: -2, maxImages: 1 } }],
171
+ ["vision not an object", { vision: 42 }],
172
+ ])("rejects a garbled limits block (%s) rather than half-parsing it", (_name, limits) => {
173
+ const doc = parseRegistryDocument({ limits, models: [entry({})] });
174
+ expect(doc.visionLimits).toBeUndefined();
175
+ });
176
+
177
+ it("keeps parseRegistryJson byte-compatible (models only, same rows)", () => {
178
+ const raw = {
179
+ limits: { vision: { maxImageBytes: 1, maxTotalBytes: 2, maxImages: 3 } },
180
+ models: [entry({})],
181
+ };
182
+ expect(parseRegistryJson(raw)).toEqual([...parseRegistryDocument(raw).models]);
183
+ });
184
+ });
185
+
186
+ describe("useModelRegistry visionLimits pass-through (#365)", () => {
187
+ it("exposes visionLimits from context", () => {
188
+ const limits = { maxImageBytes: 3145728, maxTotalBytes: 4194304, maxImages: 10 };
189
+ const state: ModelRegistryState = {
190
+ models: TEST_MODELS, visionLimits: limits, isLoading: false, error: null, refetch: noopRefetch,
191
+ };
192
+ const wrapper = ({ children }: { children: ReactNode }) => (
193
+ <ModelRegistryContext.Provider value={state}>{children}</ModelRegistryContext.Provider>
194
+ );
195
+ const { result } = renderHook(() => useModelRegistry(), { wrapper });
196
+ expect(result.current.visionLimits).toEqual(limits);
197
+ });
198
+
199
+ it("stays undefined when the context has no limits (older server)", () => {
200
+ const { result } = renderHook(() => useModelRegistry(), { wrapper: createWrapper() });
201
+ expect(result.current.visionLimits).toBeUndefined();
202
+ });
203
+ });
204
+
109
205
  describe("parseRegistryJson service tiers (#357)", () => {
110
206
  it("surfaces pricingVariants keys as serviceTiers", () => {
111
207
  const withVariants = TEST_MODELS.find((m) => m.modelId === "claude-4.6-sonnet");
@@ -246,13 +342,12 @@ describe("useModelRegistry", () => {
246
342
  expect(cursorModels).toHaveLength(0);
247
343
  });
248
344
 
249
- it("resolves defaultModel to the first featured native model", () => {
345
+ it("resolves defaultModel to the featured standard-cost native model (what an unpinned execution runs, #663)", () => {
250
346
  const { result } = renderHook(() =>
251
347
  useModelRegistry({ harness: "native" }),
252
348
  { wrapper: createWrapper() });
253
- const featured = result.current.featured;
254
- expect(featured.length).toBeGreaterThan(0);
255
- expect(result.current.defaultModel!.modelId).toBe(featured[0].modelId);
349
+ expect(result.current.defaultModel!.modelId).toBe("claude-sonnet-4.6");
350
+ expect(result.current.defaultModel!.costTier).toBe("standard");
256
351
  });
257
352
  });
258
353
 
@@ -1,6 +1,6 @@
1
- export { DEFAULT_MODEL_ID, DEFAULT_CURSOR_MODEL_ID, DISABLED_PROVIDERS, modelKey, parseModelKey, resolveDefaultModelId, fetchModelRegistry, parseRegistryJson } from "./registry.js";
1
+ export { DEFAULT_MODEL_ID, DEFAULT_CURSOR_MODEL_ID, DISABLED_PROVIDERS, modelKey, parseModelKey, resolveDefaultModelId, fetchModelRegistry, fetchModelRegistryDocument, parseRegistryJson, parseRegistryDocument } from "./registry.js";
2
2
  export type { ParsedModelKey, DefaultModelResolution, DefaultModelSource } from "./registry.js";
3
- export type { ModelInfo, Provider, CostTier, SpeedTier } from "./registry.js";
3
+ export type { ModelInfo, ModelRegistryDocument, Provider, CostTier, SpeedTier, VisionLimits } from "./registry.js";
4
4
  export { useModelRegistry } from "./useModelRegistry.js";
5
5
  export type { UseModelRegistryReturn, UseModelRegistryOptions } from "./useModelRegistry.js";
6
6
  export { ModelRegistryContext, useModelRegistryContext } from "./ModelRegistryContext.js";
@@ -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
- }