@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
@@ -15,9 +15,11 @@ import { withTimeout } from "../internal/withTimeout.js";
15
15
  import { useCreateAgentExecution } from "../execution/useCreateAgentExecution.js";
16
16
  import type { ExecutionTargetOption } from "./execution-target.js";
17
17
  import { useExecutionTarget } from "../execution-target-context.js";
18
+ import { useApprovalDefaults } from "../approval-defaults-context.js";
18
19
  import { useRunnerAdapter } from "../runner-adapter.js";
19
20
  import { resolveExecutionRuntimeEnv, type RuntimeEnvProvider } from "./runtime-env.js";
20
21
  import type { SessionAudience } from "./audience.js";
22
+ import { assertValidRunConfig, type SessionRunConfig } from "./run-config.js";
21
23
 
22
24
  const DEFAULT_AGENT_TIMEOUT_MS = 10_000;
23
25
 
@@ -141,6 +143,16 @@ export interface UseNewSessionFlowOptions {
141
143
  * or Environment resources. Large values bloat every prompt.
142
144
  */
143
145
  readonly sessionContext?: string;
146
+ /**
147
+ * Owner-pinned model/tier for the session's first execution
148
+ * (stigmer/stigmer#664). Stamped at submit, winning over the
149
+ * composer's selection and the restored Console preference. Pair
150
+ * with the same pin on the conversation surface
151
+ * (`useSessionPageFlow` / `SessionViewer`) so follow-ups match.
152
+ * Ignored for the `"guest"` audience (the platform share policy owns
153
+ * guest execution config). See {@link SessionRunConfig}.
154
+ */
155
+ readonly runConfig?: SessionRunConfig;
144
156
  }
145
157
 
146
158
  /** Return value of {@link useNewSessionFlow}. */
@@ -257,9 +269,24 @@ export function useNewSessionFlow(
257
269
  sessionContext,
258
270
  } = options;
259
271
  const isGuest = options.audience === "guest";
272
+ // Guests never carry a client pin: guest execution config is owned by
273
+ // the server-side share policy (GUEST_HARNESS reasoning). Validated at
274
+ // render so a statically-wrong pin (fast tier, no model) fails in the
275
+ // embedder's dev loop, not as the end user's failed send.
276
+ const runConfig = isGuest ? undefined : options.runConfig;
277
+ if (runConfig) assertValidRunConfig(runConfig);
278
+ const pinnedModelName = runConfig?.modelName;
279
+ const pinnedServiceTier = runConfig?.serviceTier;
260
280
  const contextTarget = useExecutionTarget();
261
281
  const executionTarget = options.executionTarget ?? contextTarget;
262
282
  const adapter = useRunnerAdapter();
283
+ // Host approval default (#302): pre-arm auto_approve_all on the bootstrap
284
+ // create when the provider says so. Guests never inherit it — a share-link
285
+ // visitor is not the operator the host's trust judgment covers (the
286
+ // GUEST_HARNESS fixed-platform-policy reasoning).
287
+ const approvalDefaults = useApprovalDefaults();
288
+ const autoApproveAll =
289
+ (!isGuest && approvalDefaults?.autoApproveAll) || undefined;
263
290
 
264
291
  const [harness, setHarnessRaw] = useState<HarnessOption>(() => {
265
292
  // Guests get the fixed platform policy (see GUEST_HARNESS) and never
@@ -385,12 +412,19 @@ export function useNewSessionFlow(
385
412
  const executionFields = {
386
413
  org,
387
414
  message,
388
- modelName: selectedModel ?? validModelId,
415
+ // The owner pin wins over the composer and the restored
416
+ // preference (#664); the pinned tier is stamped only as
417
+ // "fast" — standard stays off the wire, preserving the #357
418
+ // UNSPECIFIED-vs-explicit telemetry distinction.
419
+ modelName: pinnedModelName ?? selectedModel ?? validModelId,
389
420
  runtimeEnv,
390
421
  attachments: context?.attachments,
391
422
  interactionMode: context?.interactionMode,
392
- serviceTier: context?.serviceTier,
423
+ serviceTier: pinnedModelName
424
+ ? (pinnedServiceTier === "fast" ? "fast" : undefined)
425
+ : context?.serviceTier,
393
426
  workspaceFileRefs: context?.workspaceFileRefs,
427
+ autoApproveAll,
394
428
  };
395
429
 
396
430
  // Resolve which agent the bootstrapped session runs against: an
@@ -477,9 +511,12 @@ export function useNewSessionFlow(
477
511
  isGuest,
478
512
  harness,
479
513
  executionTarget,
514
+ autoApproveAll,
480
515
  adapter,
481
516
  getRuntimeEnv,
482
517
  validModelId,
518
+ pinnedModelName,
519
+ pinnedServiceTier,
483
520
  workspace,
484
521
  mcpServerUsages,
485
522
  skillRefs,
@@ -21,7 +21,9 @@ import type { ServiceTierOption } from "../models/service-tier.js";
21
21
  import { useStigmer } from "../hooks.js";
22
22
  import { toError } from "../internal/toError.js";
23
23
  import { useConversationStoreRef } from "../internal/store/index.js";
24
- import { useCreateAgentExecution } from "../execution/useCreateAgentExecution.js";
24
+ // Type-only import so the SharedAgentExecutionFields doc links below resolve;
25
+ // the strict tsdoc gate (tsdoc:check) guards it against removal.
26
+ import { useCreateAgentExecution, type SharedAgentExecutionFields } from "../execution/useCreateAgentExecution.js";
25
27
  import { useExecutionStream } from "../execution/useExecutionStream.js";
26
28
  import { useAgentExecutionActions } from "../execution/useAgentExecutionActions.js";
27
29
  import { useSubmitApproval } from "../execution/useSubmitApproval.js";
@@ -79,7 +81,7 @@ export interface SendFollowUpOptions {
79
81
  * instance. Keys must be declared in the agent's env declarations
80
82
  * (a whitelist, not a value source) or they are dropped.
81
83
  *
82
- * @see {@link CreateAgentExecutionInput.runtimeEnv}
84
+ * @see {@link SharedAgentExecutionFields.runtimeEnv}
83
85
  */
84
86
  readonly runtimeEnv?: Record<string, EnvVarInput>;
85
87
  /**
@@ -89,7 +91,7 @@ export interface SendFollowUpOptions {
89
91
  * `agentExecution.uploadAttachment()`. Forwarded directly to
90
92
  * execution creation.
91
93
  *
92
- * @see {@link CreateAgentExecutionInput.attachments}
94
+ * @see {@link SharedAgentExecutionFields.attachments}
93
95
  */
94
96
  readonly attachments?: AttachmentInput[];
95
97
  /**
@@ -106,19 +108,19 @@ export interface SendFollowUpOptions {
106
108
  * the unspecified-vs-explicit distinction (unset resolves to standard on
107
109
  * the platform side — never the provider account default).
108
110
  *
109
- * @see {@link CreateAgentExecutionInput.serviceTier}
111
+ * @see {@link SharedAgentExecutionFields.serviceTier}
110
112
  */
111
113
  readonly serviceTier?: ServiceTierOption;
112
114
  /**
113
115
  * Marks this execution as a Build-from-plan turn.
114
116
  *
115
- * @see {@link CreateAgentExecutionInput.buildFromPlan}
117
+ * @see {@link SharedAgentExecutionFields.buildFromPlan}
116
118
  */
117
119
  readonly buildFromPlan?: boolean;
118
120
  /**
119
121
  * Auto-approve every tool call for this execution (bypass the HITL gate).
120
122
  *
121
- * @see {@link CreateAgentExecutionInput.autoApproveAll}
123
+ * @see {@link SharedAgentExecutionFields.autoApproveAll}
122
124
  */
123
125
  readonly autoApproveAll?: boolean;
124
126
  /**
@@ -127,7 +129,7 @@ export interface SendFollowUpOptions {
127
129
  * Lightweight "attention" signals — no upload, no injection. The agent
128
130
  * reads these files directly from the workspace filesystem.
129
131
  *
130
- * @see {@link CreateAgentExecutionInput.workspaceFileRefs}
132
+ * @see {@link SharedAgentExecutionFields.workspaceFileRefs}
131
133
  */
132
134
  readonly workspaceFileRefs?: string[];
133
135
  /**
@@ -136,7 +138,7 @@ export interface SendFollowUpOptions {
136
138
  * The conversation read model hides the superseded execution so the
137
139
  * edited message replaces the original in place.
138
140
  *
139
- * @see {@link CreateAgentExecutionInput.supersedesExecutionId}
141
+ * @see {@link SharedAgentExecutionFields.supersedesExecutionId}
140
142
  */
141
143
  readonly supersedesExecutionId?: string;
142
144
  }
@@ -6,6 +6,7 @@ import { ApprovalAction } from "@stigmer/protos/ai/stigmer/agentic/agentexecutio
6
6
  import type { AgentResolution } from "../agent/index.js";
7
7
  import { useDefaultAgent } from "../agent/index.js";
8
8
  import { useStigmer } from "../hooks.js";
9
+ import { useApprovalDefaults } from "../approval-defaults-context.js";
9
10
  import { useWorkspaceEntries, type UseWorkspaceEntriesReturn } from "../workspace/index.js";
10
11
  import { useSessionVariables, type UseSessionVariablesReturn } from "../execution/useSessionVariables.js";
11
12
  import type { SessionComposerSubmitContext, InteractionModeOption } from "../composer/index.js";
@@ -19,6 +20,7 @@ import { useAgentRefFromSession } from "./useAgentRefFromSession.js";
19
20
  import { usePersistedModel, type UsePersistedModelReturn } from "./usePersistedModel.js";
20
21
  import { specMcpUsagesToInput, specSkillRefsToInput } from "./session-spec-converters.js";
21
22
  import type { SessionAudience } from "./audience.js";
23
+ import { assertValidRunConfig, type SessionRunConfig } from "./run-config.js";
22
24
 
23
25
  /**
24
26
  * Well-known Daytona sandbox workspace root. Used as the SDK safety-net
@@ -56,6 +58,16 @@ export interface UseSessionPageFlowOptions {
56
58
  * @default "integrator"
57
59
  */
58
60
  readonly audience?: SessionAudience;
61
+ /**
62
+ * Owner-pinned model/tier for every follow-up on this surface
63
+ * (stigmer/stigmer#664). Stamped at submit — after the composer, so
64
+ * it wins over composer state, the persisted Console preference, and
65
+ * the last execution's model — and therefore also covers retries,
66
+ * which re-enter the same submit path. Ignored for the `"guest"`
67
+ * audience (the server-side share policy owns guest execution
68
+ * config). See {@link SessionRunConfig}.
69
+ */
70
+ readonly runConfig?: SessionRunConfig;
59
71
  }
60
72
 
61
73
  /** Return value of {@link useSessionPageFlow}. */
@@ -130,10 +142,13 @@ export interface UseSessionPageFlowReturn {
130
142
  /**
131
143
  * Session-scoped "auto-approve tool calls" preference.
132
144
  *
133
- * `false` by default. Flipped to `true` when the user chooses
134
- * "Approve & don't ask again" at an approval gate (see {@link submitApproval}),
135
- * and carried into every subsequent follow-up via {@link handleSubmit}. Held in
136
- * memory only reset on reload / new session, never persisted server-side.
145
+ * `false` by default; a host can pre-arm it app-wide via
146
+ * `StigmerProvider`'s `approvalDefaults` (#302, guests excluded). Flipped
147
+ * to `true` when the user chooses "Approve & don't ask again" at an
148
+ * approval gate (see {@link submitApproval}), and carried into every
149
+ * subsequent follow-up via {@link handleSubmit}. Held in memory only —
150
+ * reset on reload / new session back to the host default, never persisted
151
+ * server-side.
137
152
  */
138
153
  readonly autoApproveAll: boolean;
139
154
  /**
@@ -240,6 +255,18 @@ export function useSessionPageFlow(
240
255
  ): UseSessionPageFlowReturn {
241
256
  const { sessionId, org, getRuntimeEnv } = options;
242
257
  const isGuest = options.audience === "guest";
258
+ // Guests never carry a client pin: guest execution config is owned by
259
+ // the server-side share policy, and the no-modelName guest invariant
260
+ // is test-pinned.
261
+ const runConfig = isGuest ? undefined : options.runConfig;
262
+ // Render-time, not submit-time: the pin is static host configuration,
263
+ // so a statically-wrong shape (fast tier, no model) should fail at
264
+ // mount in the embedder's dev loop — not as an end user's failed send.
265
+ if (runConfig) assertValidRunConfig(runConfig);
266
+ // Scalars, not the object: hosts pass inline literals, and the submit
267
+ // callback's identity must not churn on every render (DD-010).
268
+ const pinnedModelName = runConfig?.modelName;
269
+ const pinnedServiceTier = runConfig?.serviceTier;
243
270
 
244
271
  const stigmer = useStigmer();
245
272
  const conv = useSessionConversation(sessionId, org);
@@ -294,9 +321,17 @@ export function useSessionPageFlow(
294
321
  const [skillRefs, setSkillRefs] = useState<ResourceRef[]>([]);
295
322
  const initialSyncDone = useRef(false);
296
323
 
297
- // Session-scoped auto-approve, set at the approval gate (not pre-armed in the
298
- // composer). Lives only in memory for the life of this page — reset on reload.
299
- const [autoApproveAll, setAutoApproveAll] = useState(false);
324
+ // Session-scoped auto-approve. Armed either at the approval gate ("Approve &
325
+ // don't ask again") or from the host's provider-level approvalDefaults
326
+ // (#302) — an app-level trust judgment, so it seeds the INITIAL state only;
327
+ // the user's in-session "Turn off" always wins from then on. Guests never
328
+ // inherit the host default (a share-link visitor is not the operator the
329
+ // host's trust judgment covers). Lives only in memory for the life of this
330
+ // page — reset on reload re-applies the host default, never a user choice.
331
+ const approvalDefaults = useApprovalDefaults();
332
+ const [autoApproveAll, setAutoApproveAll] = useState(
333
+ () => !isGuest && (approvalDefaults?.autoApproveAll ?? false),
334
+ );
300
335
 
301
336
  const submitApproval = useCallback<UseSessionConversationReturn["submitApproval"]>(
302
337
  async (toolCallId, action, comment) => {
@@ -429,7 +464,11 @@ export function useSessionPageFlow(
429
464
 
430
465
  conv.sendFollowUp(message, {
431
466
  agentInstanceId: agentInstanceIdOverride,
432
- modelName: selectedModel ?? modelId,
467
+ // The owner pin wins over everything the user or the SDK
468
+ // resolved (#664); the pinned tier is stamped only as "fast" —
469
+ // an untouched/standard tier stays off the wire, preserving the
470
+ // #357 UNSPECIFIED-vs-explicit telemetry distinction.
471
+ modelName: pinnedModelName ?? selectedModel ?? modelId,
433
472
  workspaceEntries: workspace.hasEntries
434
473
  ? workspace.toInput()
435
474
  : undefined,
@@ -438,7 +477,9 @@ export function useSessionPageFlow(
438
477
  runtimeEnv,
439
478
  attachments: context?.attachments,
440
479
  interactionMode: context?.interactionMode,
441
- serviceTier: context?.serviceTier,
480
+ serviceTier: pinnedModelName
481
+ ? (pinnedServiceTier === "fast" ? "fast" : undefined)
482
+ : context?.serviceTier,
442
483
  buildFromPlan: context?.buildFromPlan,
443
484
  // Sourced from the session-scoped preference set at the approval gate,
444
485
  // not from the composer (the pre-arm toggle was removed).
@@ -449,7 +490,7 @@ export function useSessionPageFlow(
449
490
 
450
491
  sessionVariables.clear();
451
492
  },
452
- [conv.sendFollowUp, modelId, workspace, mcpServerUsages, skillRefs, sessionVariables.clear, resolution, agentRef, sessionInstanceId, stigmer, autoApproveAll, getRuntimeEnv],
493
+ [conv.sendFollowUp, modelId, pinnedModelName, pinnedServiceTier, workspace, mcpServerUsages, skillRefs, sessionVariables.clear, resolution, agentRef, sessionInstanceId, stigmer, autoApproveAll, getRuntimeEnv],
453
494
  );
454
495
 
455
496
  // -------------------------------------------------------------------------
@@ -58,6 +58,37 @@ export interface UseSessionPanelOptions {
58
58
  * @default "files"
59
59
  */
60
60
  readonly defaultView?: string;
61
+ /**
62
+ * Controlled open state. When provided, the host owns whether the panel is
63
+ * expanded: internal open intents (the chip toggle, a file/artifact/plan
64
+ * open, plan auto-open) no longer flip state themselves — they surface
65
+ * through {@link UseSessionPanelOptions.onOpenChange} and the panel follows
66
+ * this value. Leave `undefined` for the self-managing default.
67
+ */
68
+ readonly open?: boolean;
69
+ /**
70
+ * Initial open state in uncontrolled mode. Ignored when
71
+ * {@link UseSessionPanelOptions.open} is provided.
72
+ *
73
+ * @default false
74
+ */
75
+ readonly defaultOpen?: boolean;
76
+ /**
77
+ * Called on every effective open/close transition — in BOTH modes, unlike
78
+ * `useDetailTabs`'s DD-T05A-001 convention of swallowing the callback when
79
+ * uncontrolled. The difference is principled, not stylistic: tabs change
80
+ * only through user clicks, so an uncontrolled host loses nothing by not
81
+ * hearing about them — but this panel opens ITSELF (`openFile`,
82
+ * `openArtifact`, `openPlanDocument`, and the plan-key auto-open all expand
83
+ * a collapsed panel), and an embedding host that must react to those
84
+ * moments (widen a dock, make room for a streaming plan) has no other seam.
85
+ * Passing only this callback observes the panel without controlling it.
86
+ *
87
+ * In controlled mode this fires once per open/close REQUEST (the host may
88
+ * decline by not updating `open` — a later identical request re-fires); in
89
+ * uncontrolled mode it fires once per actual transition.
90
+ */
91
+ readonly onOpenChange?: (open: boolean) => void;
61
92
  }
62
93
 
63
94
  /**
@@ -81,7 +112,11 @@ export interface UseSessionPanelOptions {
81
112
  export interface SessionPanelController {
82
113
  /** The open-editor group store; subscribe with `useWorkspaceEditors`. */
83
114
  readonly editorsStore: WorkspaceEditorsStore;
84
- /** Whether the panel is expanded (chat narrow) or collapsed to the chip. */
115
+ /**
116
+ * Whether the panel is expanded (chat narrow) or collapsed to the chip.
117
+ * In controlled mode ({@link UseSessionPanelOptions.open}) this mirrors
118
+ * the host's value.
119
+ */
85
120
  readonly isOpen: boolean;
86
121
  /** The active rail view id (`"files"`, `"search"`, or an injected facet). */
87
122
  readonly view: string;
@@ -149,9 +184,49 @@ export function useSessionPanel({
149
184
  hasChanges,
150
185
  planKey = null,
151
186
  defaultView = "files",
187
+ open,
188
+ defaultOpen = false,
189
+ onOpenChange,
152
190
  }: UseSessionPanelOptions): SessionPanelController {
153
191
  const editorsStore = useWorkspaceEditorsStoreRef();
154
- const [isOpen, setIsOpen] = useState(false);
192
+
193
+ // Uncontrolled-by-default / controlled-when-`open`-is-provided (React's own
194
+ // value/defaultValue convention — presence of the value prop decides, so an
195
+ // observe-only host can pass just `onOpenChange`). Everything below reads
196
+ // the EFFECTIVE value: the render-adjust triggers (first write-back) and
197
+ // the returned controller must agree with the host's state, never a stale
198
+ // internal one.
199
+ const isControlled = open !== undefined;
200
+ const [internalIsOpen, setInternalIsOpen] = useState(defaultOpen);
201
+ const isOpen = isControlled ? open : internalIsOpen;
202
+
203
+ // Latest-ref idiom (see YamlEditor's onChangeRef): the host's callback and
204
+ // the mode/value mirrors live in refs so `requestOpenChange` — and every
205
+ // action callback built on it — stays referentially stable regardless of
206
+ // how the host authored `onOpenChange` (DD-010: an inline lambda must not
207
+ // churn the memoized controller and re-render the panel subtree).
208
+ const onOpenChangeRef = useRef(onOpenChange);
209
+ onOpenChangeRef.current = onOpenChange;
210
+ const isControlledRef = useRef(isControlled);
211
+ isControlledRef.current = isControlled;
212
+ const isOpenRef = useRef(isOpen);
213
+ isOpenRef.current = isOpen;
214
+
215
+ // The single seam every open/close intent routes through — the chip
216
+ // toggle, file/artifact/plan opens, the surface's collapse affordance, and
217
+ // the plan-key auto-open. Uncontrolled: apply + notify (the ref is updated
218
+ // eagerly so two same-tick intents produce one notification). Controlled:
219
+ // notify only — the host owns the state, and the panel follows the `open`
220
+ // prop; the ref is NOT updated, so a declined request stays re-fireable.
221
+ const requestOpenChange = useCallback((next: boolean) => {
222
+ if (isOpenRef.current === next) return;
223
+ if (!isControlledRef.current) {
224
+ isOpenRef.current = next;
225
+ setInternalIsOpen(next);
226
+ }
227
+ onOpenChangeRef.current?.(next);
228
+ }, []);
229
+
155
230
  const [view, setViewState] = useState(defaultView);
156
231
 
157
232
  // Sticky explicit pick (rail click) — auto-switching yields to it until a
@@ -184,8 +259,8 @@ export function useSessionPanel({
184
259
 
185
260
  const openPlanDocument = useCallback(() => {
186
261
  editorsStore.openPinned(PLAN_DOCUMENT_ENTRY_ID, PLAN_DOCUMENT_PATH);
187
- setIsOpen(true);
188
- }, [editorsStore]);
262
+ requestOpenChange(true);
263
+ }, [editorsStore, requestOpenChange]);
189
264
 
190
265
  // A new plan arrived (first plan, or a refinement superseding it) → open the
191
266
  // plan document tab, expanding a collapsed panel (see the planKey option doc
@@ -204,9 +279,15 @@ export function useSessionPanel({
204
279
  }
205
280
  }, [planKey, openPlanDocument]);
206
281
 
207
- const openPanel = useCallback(() => setIsOpen(true), []);
282
+ const openPanel = useCallback(
283
+ () => requestOpenChange(true),
284
+ [requestOpenChange],
285
+ );
208
286
 
209
- const closePanel = useCallback(() => setIsOpen(false), []);
287
+ const closePanel = useCallback(
288
+ () => requestOpenChange(false),
289
+ [requestOpenChange],
290
+ );
210
291
 
211
292
  const setView = useCallback((viewId: string) => {
212
293
  userPickedViewRef.current = true;
@@ -216,17 +297,17 @@ export function useSessionPanel({
216
297
  const openFile = useCallback(
217
298
  (entryId: string, path: string, options?: OpenFileOptions) => {
218
299
  editorsStore.openPreview(entryId, path, options);
219
- setIsOpen(true);
300
+ requestOpenChange(true);
220
301
  },
221
- [editorsStore],
302
+ [editorsStore, requestOpenChange],
222
303
  );
223
304
 
224
305
  const openArtifact = useCallback(
225
306
  (artifact: ExecutionArtifact) => {
226
307
  editorsStore.openPreview(ARTIFACT_DOCUMENT_ENTRY_ID, artifactKey(artifact));
227
- setIsOpen(true);
308
+ requestOpenChange(true);
228
309
  },
229
- [editorsStore],
310
+ [editorsStore, requestOpenChange],
230
311
  );
231
312
 
232
313
  const pinArtifact = useCallback(
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useRef, useState } from "react";
3
+ import { useCallback, useId, useRef, useState } from "react";
4
4
  import type { ApiKey } from "@stigmer/protos/ai/stigmer/iam/apikey/v1/api_pb";
5
5
  import { ApiKeyListPanel } from "../api-key/ApiKeyListPanel.js";
6
6
  import { CreateApiKeyForm } from "../api-key/CreateApiKeyForm.js";
@@ -16,6 +16,7 @@ type FlowState =
16
16
 
17
17
  /** Settings section for listing and creating organization API keys. */
18
18
  export function ApiKeysSection() {
19
+ const headingId = useId();
19
20
  const org = useActiveOrgSlug();
20
21
  const apiKeysAvailable = useResourceAvailable(ApiResourceKind.api_key);
21
22
  const [flow, setFlow] = useState<FlowState>({ phase: "idle" });
@@ -37,10 +38,10 @@ export function ApiKeysSection() {
37
38
  }, []);
38
39
 
39
40
  return (
40
- <section aria-labelledby="api-keys-heading">
41
+ <section aria-labelledby={headingId}>
41
42
  <div className="stg:mb-3 stg:flex stg:items-center stg:justify-between">
42
43
  <h2
43
- id="api-keys-heading"
44
+ id={headingId}
44
45
  className="stg:text-foreground stg:text-sm stg:font-semibold"
45
46
  >
46
47
  API Keys
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useRef, useState } from "react";
3
+ import { useCallback, useId, useRef, useState } from "react";
4
4
  import type { ChannelApp } from "@stigmer/protos/ai/stigmer/agentic/channelapp/v1/api_pb";
5
5
  import { ChannelAppListPanel } from "../channel-app/ChannelAppListPanel.js";
6
6
  import {
@@ -38,6 +38,7 @@ type FlowState =
38
38
  * Channels tab offers it as the serving app.
39
39
  */
40
40
  export function ChannelAppsSection() {
41
+ const headingId = useId();
41
42
  const org = useActiveOrgSlug();
42
43
  // Channel installs (the consumer of these credentials) are cloud-only;
43
44
  // gate the whole section the way the Channels tab gates connects.
@@ -72,10 +73,10 @@ export function ChannelAppsSection() {
72
73
  }, []);
73
74
 
74
75
  return (
75
- <section aria-labelledby="channel-apps-heading">
76
+ <section aria-labelledby={headingId}>
76
77
  <div className="stg:mb-3 stg:flex stg:items-center stg:justify-between">
77
78
  <h2
78
- id="channel-apps-heading"
79
+ id={headingId}
79
80
  className="stg:text-foreground stg:text-sm stg:font-semibold"
80
81
  >
81
82
  Channel Apps
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useEffect, useRef, useState } from "react";
3
+ import { useCallback, useEffect, useId, useRef, useState } from "react";
4
4
  import { getUserMessage } from "@stigmer/sdk";
5
5
  import { usePersonalEnvironment } from "../environment/usePersonalEnvironment.js";
6
6
  import { EnvironmentVariableEditor } from "../environment/EnvironmentVariableEditor.js";
@@ -47,12 +47,13 @@ function PersonalEnvironmentCard({ org }: { org: string }) {
47
47
  }, [org, isLoading, environment, getOrCreate]);
48
48
 
49
49
  const environmentId = environment?.metadata?.id;
50
+ const headingId = useId();
50
51
 
51
52
  return (
52
- <section aria-labelledby="personal-env-heading">
53
+ <section aria-labelledby={headingId}>
53
54
  <div className="stg:mb-3 stg:flex stg:items-baseline stg:gap-2">
54
55
  <h2
55
- id="personal-env-heading"
56
+ id={headingId}
56
57
  className="stg:text-foreground stg:text-sm stg:font-semibold"
57
58
  >
58
59
  Personal Environment
@@ -97,11 +98,13 @@ function EnvironmentsCard({ org }: { org: string }) {
97
98
  listRefetchRef.current?.();
98
99
  }, []);
99
100
 
101
+ const headingId = useId();
102
+
100
103
  return (
101
- <section aria-labelledby="org-env-heading">
104
+ <section aria-labelledby={headingId}>
102
105
  <div className="stg:mb-3 stg:flex stg:items-center stg:justify-between">
103
106
  <h2
104
- id="org-env-heading"
107
+ id={headingId}
105
108
  className="stg:text-foreground stg:text-sm stg:font-semibold"
106
109
  >
107
110
  Environments
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useRef, useState } from "react";
3
+ import { useCallback, useId, useRef, useState } from "react";
4
4
  import type { IdentityProvider } from "@stigmer/protos/ai/stigmer/iam/identityprovider/v1/api_pb";
5
5
  import { IdentityProviderListPanel } from "../identity-provider/IdentityProviderListPanel.js";
6
6
  import { IdentityProviderWizard } from "../identity-provider/IdentityProviderWizard.js";
@@ -28,6 +28,7 @@ type FlowState =
28
28
  export function IdentityProvidersSection({
29
29
  ssoLoginBaseUrl,
30
30
  }: IdentityProvidersSectionProps = {}) {
31
+ const headingId = useId();
31
32
  const { activeOrg } = useOrg();
32
33
  const idpAvailable = useResourceAvailable(ApiResourceKind.identity_provider);
33
34
  const orgSlug = activeOrg?.metadata?.slug ?? "";
@@ -54,10 +55,10 @@ export function IdentityProvidersSection({
54
55
  (typeof window !== "undefined" ? window.location.origin : "");
55
56
 
56
57
  return (
57
- <section aria-labelledby="identity-providers-heading">
58
+ <section aria-labelledby={headingId}>
58
59
  <div className="stg:mb-3 stg:flex stg:items-center stg:justify-between">
59
60
  <h2
60
- id="identity-providers-heading"
61
+ id={headingId}
61
62
  className="stg:text-foreground stg:text-sm stg:font-semibold"
62
63
  >
63
64
  Identity Providers
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
 
3
+ import { useId } from "react";
3
4
  import { InvitationManager } from "../invitation/InvitationManager.js";
4
5
  import { useResourceAvailable, ApiResourceKind } from "../deployment-mode.js";
5
6
  import { CloudFeatureNotice } from "../internal/CloudFeatureNotice.js";
@@ -7,14 +8,15 @@ import { useActiveOrgSlug } from "../organization/OrgProvider.js";
7
8
 
8
9
  /** Settings section for creating and managing organization invitations. */
9
10
  export function InvitationsSection() {
11
+ const headingId = useId();
10
12
  const org = useActiveOrgSlug();
11
13
  const invitationsAvailable = useResourceAvailable(ApiResourceKind.invitation);
12
14
 
13
15
  return (
14
- <section aria-labelledby="invitations-heading">
16
+ <section aria-labelledby={headingId}>
15
17
  <div className="stg:mb-3">
16
18
  <h2
17
- id="invitations-heading"
19
+ id={headingId}
18
20
  className="stg:text-foreground stg:text-sm stg:font-semibold"
19
21
  >
20
22
  Invitations
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
 
3
+ import { useId } from "react";
3
4
  import { OrgMembersPanel } from "../iam-policy/OrgMembersPanel.js";
4
5
  import { useResourceAvailable, ApiResourceKind } from "../deployment-mode.js";
5
6
  import { CloudFeatureNotice } from "../internal/CloudFeatureNotice.js";
@@ -8,6 +9,7 @@ import { useIdentityProviderList } from "../identity-provider/useIdentityProvide
8
9
 
9
10
  /** Settings section for organization membership and role management. */
10
11
  export function MembersSection() {
12
+ const headingId = useId();
11
13
  const { activeOrg } = useOrg();
12
14
  const membersAvailable = useResourceAvailable(ApiResourceKind.iam_policy);
13
15
  const idpAvailable = useResourceAvailable(ApiResourceKind.identity_provider);
@@ -23,9 +25,9 @@ export function MembersSection() {
23
25
  );
24
26
 
25
27
  return (
26
- <section aria-labelledby="members-heading">
28
+ <section aria-labelledby={headingId}>
27
29
  <h2
28
- id="members-heading"
30
+ id={headingId}
29
31
  className="stg:text-foreground stg:mb-1 stg:text-sm stg:font-semibold"
30
32
  >
31
33
  Members
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useRef, useState } from "react";
3
+ import { useCallback, useId, useRef, useState } from "react";
4
4
  import type { OAuthApp } from "@stigmer/protos/ai/stigmer/iam/oauthapp/v1/api_pb";
5
5
  import { OAuthAppListPanel } from "../oauth-app/OAuthAppListPanel.js";
6
6
  import { CreateOAuthAppForm } from "../oauth-app/CreateOAuthAppForm.js";
@@ -16,6 +16,7 @@ type FlowState =
16
16
 
17
17
  /** Settings section for organization OAuth app credentials. */
18
18
  export function OAuthAppsSection() {
19
+ const headingId = useId();
19
20
  const org = useActiveOrgSlug();
20
21
  const oauthAppsAvailable = useResourceAvailable(ApiResourceKind.oauth_app);
21
22
 
@@ -42,10 +43,10 @@ export function OAuthAppsSection() {
42
43
  }, []);
43
44
 
44
45
  return (
45
- <section aria-labelledby="oauth-apps-heading">
46
+ <section aria-labelledby={headingId}>
46
47
  <div className="stg:mb-3 stg:flex stg:items-center stg:justify-between">
47
48
  <h2
48
- id="oauth-apps-heading"
49
+ id={headingId}
49
50
  className="stg:text-foreground stg:text-sm stg:font-semibold"
50
51
  >
51
52
  OAuth Apps