@stigmer/react 3.12.1 → 3.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (658) hide show
  1. package/access/ManageAccessDialog.d.ts.map +1 -1
  2. package/access/ManageAccessDialog.js +7 -2
  3. package/access/ManageAccessDialog.js.map +1 -1
  4. package/activity/format-relative-time.d.ts +11 -9
  5. package/activity/format-relative-time.d.ts.map +1 -1
  6. package/activity/format-relative-time.js +11 -9
  7. package/activity/format-relative-time.js.map +1 -1
  8. package/agent/steps/CapabilitiesStep.js +5 -2
  9. package/agent/steps/CapabilitiesStep.js.map +1 -1
  10. package/agent/steps/IdentityStep.d.ts.map +1 -1
  11. package/agent/steps/IdentityStep.js +6 -5
  12. package/agent/steps/IdentityStep.js.map +1 -1
  13. package/agent-instance/CreateAgentInstanceDialog.d.ts.map +1 -1
  14. package/agent-instance/CreateAgentInstanceDialog.js +10 -2
  15. package/agent-instance/CreateAgentInstanceDialog.js.map +1 -1
  16. package/api-key/ApiKeyCreatedAlert.d.ts.map +1 -1
  17. package/api-key/ApiKeyCreatedAlert.js +12 -20
  18. package/api-key/ApiKeyCreatedAlert.js.map +1 -1
  19. package/api-key/ApiKeyListPanel.d.ts.map +1 -1
  20. package/api-key/ApiKeyListPanel.js +3 -23
  21. package/api-key/ApiKeyListPanel.js.map +1 -1
  22. package/api-key/CreateApiKeyForm.d.ts.map +1 -1
  23. package/api-key/CreateApiKeyForm.js +6 -10
  24. package/api-key/CreateApiKeyForm.js.map +1 -1
  25. package/approval-defaults-context.d.ts +47 -0
  26. package/approval-defaults-context.d.ts.map +1 -0
  27. package/approval-defaults-context.js +27 -0
  28. package/approval-defaults-context.js.map +1 -0
  29. package/attachment/index.d.ts +2 -0
  30. package/attachment/index.d.ts.map +1 -1
  31. package/attachment/index.js +1 -0
  32. package/attachment/index.js.map +1 -1
  33. package/attachment/vision-preflight.d.ts +113 -0
  34. package/attachment/vision-preflight.d.ts.map +1 -0
  35. package/attachment/vision-preflight.js +143 -0
  36. package/attachment/vision-preflight.js.map +1 -0
  37. package/billing/AutoRechargeCard.d.ts.map +1 -1
  38. package/billing/AutoRechargeCard.js +3 -2
  39. package/billing/AutoRechargeCard.js.map +1 -1
  40. package/billing/BillingSection.d.ts.map +1 -1
  41. package/billing/BillingSection.js +3 -2
  42. package/billing/BillingSection.js.map +1 -1
  43. package/channel/ChannelConversationsDialog.d.ts.map +1 -1
  44. package/channel/ChannelConversationsDialog.js +5 -4
  45. package/channel/ChannelConversationsDialog.js.map +1 -1
  46. package/channel/ChannelCredentialsDialog.d.ts.map +1 -1
  47. package/channel/ChannelCredentialsDialog.js +9 -4
  48. package/channel/ChannelCredentialsDialog.js.map +1 -1
  49. package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
  50. package/channel/ChannelTemplatesDialog.js +5 -4
  51. package/channel/ChannelTemplatesDialog.js.map +1 -1
  52. package/channel/ConnectSlackDialog.d.ts.map +1 -1
  53. package/channel/ConnectSlackDialog.js +9 -4
  54. package/channel/ConnectSlackDialog.js.map +1 -1
  55. package/channel/ConnectWhatsAppDialog.d.ts.map +1 -1
  56. package/channel/ConnectWhatsAppDialog.js +9 -4
  57. package/channel/ConnectWhatsAppDialog.js.map +1 -1
  58. package/channel/useChannelSessions.d.ts.map +1 -1
  59. package/channel/useChannelSessions.js.map +1 -1
  60. package/channel-app/ChannelAppDetailPanel.d.ts.map +1 -1
  61. package/channel-app/ChannelAppDetailPanel.js +8 -5
  62. package/channel-app/ChannelAppDetailPanel.js.map +1 -1
  63. package/channel-app/CreateChannelAppForm.d.ts.map +1 -1
  64. package/channel-app/CreateChannelAppForm.js +12 -7
  65. package/channel-app/CreateChannelAppForm.js.map +1 -1
  66. package/channel-app/internal.d.ts +0 -1
  67. package/channel-app/internal.d.ts.map +1 -1
  68. package/channel-app/internal.js +5 -10
  69. package/channel-app/internal.js.map +1 -1
  70. package/composer/ComposerToolbar.js +2 -1
  71. package/composer/ComposerToolbar.js.map +1 -1
  72. package/composer/SessionComposer.d.ts +1 -1
  73. package/composer/SessionComposer.d.ts.map +1 -1
  74. package/composer/SessionComposer.js +120 -13
  75. package/composer/SessionComposer.js.map +1 -1
  76. package/composer/icons.d.ts +0 -1
  77. package/composer/icons.d.ts.map +1 -1
  78. package/composer/icons.js +0 -3
  79. package/composer/icons.js.map +1 -1
  80. package/conversation/ConversationComposer.js +1 -1
  81. package/conversation/ConversationComposer.js.map +1 -1
  82. package/conversation/ConversationListPane.d.ts.map +1 -1
  83. package/conversation/ConversationListPane.js +3 -2
  84. package/conversation/ConversationListPane.js.map +1 -1
  85. package/cursor-accounts/MemberCoverageTable.js +3 -14
  86. package/cursor-accounts/MemberCoverageTable.js.map +1 -1
  87. package/dashboard/DashboardFailedRuns.d.ts.map +1 -1
  88. package/dashboard/DashboardFailedRuns.js +2 -14
  89. package/dashboard/DashboardFailedRuns.js.map +1 -1
  90. package/environment/CreateEnvironmentForm.d.ts.map +1 -1
  91. package/environment/CreateEnvironmentForm.js +4 -8
  92. package/environment/CreateEnvironmentForm.js.map +1 -1
  93. package/environment/EnvVarForm.d.ts.map +1 -1
  94. package/environment/EnvVarForm.js +2 -4
  95. package/environment/EnvVarForm.js.map +1 -1
  96. package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
  97. package/environment/EnvironmentVariableEditor.js +5 -7
  98. package/environment/EnvironmentVariableEditor.js.map +1 -1
  99. package/execution/ArtifactApplyButton.d.ts.map +1 -1
  100. package/execution/ArtifactApplyButton.js +2 -4
  101. package/execution/ArtifactApplyButton.js.map +1 -1
  102. package/execution/ExecutionErrorNotice.d.ts +36 -0
  103. package/execution/ExecutionErrorNotice.d.ts.map +1 -0
  104. package/execution/ExecutionErrorNotice.js +39 -0
  105. package/execution/ExecutionErrorNotice.js.map +1 -0
  106. package/execution/FilePathLink.d.ts.map +1 -1
  107. package/execution/FilePathLink.js +5 -8
  108. package/execution/FilePathLink.js.map +1 -1
  109. package/execution/FileReviewCard.d.ts.map +1 -1
  110. package/execution/FileReviewCard.js +1 -6
  111. package/execution/FileReviewCard.js.map +1 -1
  112. package/execution/FollowUpInput.d.ts.map +1 -1
  113. package/execution/FollowUpInput.js +1 -3
  114. package/execution/FollowUpInput.js.map +1 -1
  115. package/execution/LivenessStatusLine.d.ts +40 -0
  116. package/execution/LivenessStatusLine.d.ts.map +1 -0
  117. package/execution/LivenessStatusLine.js +34 -0
  118. package/execution/LivenessStatusLine.js.map +1 -0
  119. package/execution/MessageEntry.d.ts.map +1 -1
  120. package/execution/MessageEntry.js +31 -3
  121. package/execution/MessageEntry.js.map +1 -1
  122. package/execution/MessageThread.d.ts +25 -0
  123. package/execution/MessageThread.d.ts.map +1 -1
  124. package/execution/MessageThread.js +51 -36
  125. package/execution/MessageThread.js.map +1 -1
  126. package/execution/SetupProgress.d.ts.map +1 -1
  127. package/execution/SetupProgress.js +1 -1
  128. package/execution/SetupProgress.js.map +1 -1
  129. package/execution/SubAgentSection.d.ts.map +1 -1
  130. package/execution/SubAgentSection.js +9 -7
  131. package/execution/SubAgentSection.js.map +1 -1
  132. package/execution/TerminalSession.d.ts +30 -0
  133. package/execution/TerminalSession.d.ts.map +1 -1
  134. package/execution/TerminalSession.js +37 -1
  135. package/execution/TerminalSession.js.map +1 -1
  136. package/execution/ToolCallDetail.d.ts +9 -0
  137. package/execution/ToolCallDetail.d.ts.map +1 -1
  138. package/execution/ToolCallDetail.js +16 -0
  139. package/execution/ToolCallDetail.js.map +1 -1
  140. package/execution/ToolCallItem.d.ts +20 -6
  141. package/execution/ToolCallItem.d.ts.map +1 -1
  142. package/execution/ToolCallItem.js +102 -29
  143. package/execution/ToolCallItem.js.map +1 -1
  144. package/execution/ToolRunGroup.d.ts.map +1 -1
  145. package/execution/ToolRunGroup.js +11 -11
  146. package/execution/ToolRunGroup.js.map +1 -1
  147. package/execution/WriteBackCard.d.ts.map +1 -1
  148. package/execution/WriteBackCard.js +5 -20
  149. package/execution/WriteBackCard.js.map +1 -1
  150. package/execution/index.d.ts +6 -2
  151. package/execution/index.d.ts.map +1 -1
  152. package/execution/index.js +3 -1
  153. package/execution/index.js.map +1 -1
  154. package/execution/tool-categories.d.ts +42 -7
  155. package/execution/tool-categories.d.ts.map +1 -1
  156. package/execution/tool-categories.js +38 -4
  157. package/execution/tool-categories.js.map +1 -1
  158. package/execution/tool-presenter.d.ts +17 -1
  159. package/execution/tool-presenter.d.ts.map +1 -1
  160. package/execution/tool-presenter.js +4 -1
  161. package/execution/tool-presenter.js.map +1 -1
  162. package/execution/useArtifactInspection.d.ts.map +1 -1
  163. package/execution/useArtifactInspection.js +4 -7
  164. package/execution/useArtifactInspection.js.map +1 -1
  165. package/iam-policy/GrantAccessForm.d.ts.map +1 -1
  166. package/iam-policy/GrantAccessForm.js +2 -4
  167. package/iam-policy/GrantAccessForm.js.map +1 -1
  168. package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
  169. package/iam-policy/OrgMembersPanel.js +3 -5
  170. package/iam-policy/OrgMembersPanel.js.map +1 -1
  171. package/iam-policy/RoleSelector.d.ts.map +1 -1
  172. package/iam-policy/RoleSelector.js +7 -1
  173. package/iam-policy/RoleSelector.js.map +1 -1
  174. package/identity-provider/CreateIdentityProviderForm.d.ts.map +1 -1
  175. package/identity-provider/CreateIdentityProviderForm.js +6 -9
  176. package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
  177. package/identity-provider/IdentityProviderDetailPanel.d.ts.map +1 -1
  178. package/identity-provider/IdentityProviderDetailPanel.js +17 -26
  179. package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
  180. package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
  181. package/identity-provider/IdentityProviderListPanel.js +2 -4
  182. package/identity-provider/IdentityProviderListPanel.js.map +1 -1
  183. package/identity-provider/IdentityProviderWizard.d.ts.map +1 -1
  184. package/identity-provider/IdentityProviderWizard.js +8 -7
  185. package/identity-provider/IdentityProviderWizard.js.map +1 -1
  186. package/identity-provider/SsoLoginPrompt.js +5 -6
  187. package/identity-provider/SsoLoginPrompt.js.map +1 -1
  188. package/index.d.ts +9 -8
  189. package/index.d.ts.map +1 -1
  190. package/index.js +4 -4
  191. package/index.js.map +1 -1
  192. package/internal/DecisionButton.d.ts.map +1 -1
  193. package/internal/DecisionButton.js +1 -6
  194. package/internal/DecisionButton.js.map +1 -1
  195. package/internal/SpinnerIcon.d.ts +22 -0
  196. package/internal/SpinnerIcon.d.ts.map +1 -0
  197. package/internal/SpinnerIcon.js +23 -0
  198. package/internal/SpinnerIcon.js.map +1 -0
  199. package/internal/select-element-text.d.ts +11 -0
  200. package/internal/select-element-text.d.ts.map +1 -0
  201. package/internal/select-element-text.js +19 -0
  202. package/internal/select-element-text.js.map +1 -0
  203. package/internal/thread-card/ThreadCardShell.d.ts +27 -10
  204. package/internal/thread-card/ThreadCardShell.d.ts.map +1 -1
  205. package/internal/thread-card/ThreadCardShell.js +11 -5
  206. package/internal/thread-card/ThreadCardShell.js.map +1 -1
  207. package/internal/thread-card/glyphs.d.ts +11 -2
  208. package/internal/thread-card/glyphs.d.ts.map +1 -1
  209. package/internal/thread-card/glyphs.js +9 -3
  210. package/internal/thread-card/glyphs.js.map +1 -1
  211. package/internal/thread-card/index.d.ts +1 -1
  212. package/internal/thread-card/index.d.ts.map +1 -1
  213. package/internal/thread-card/index.js.map +1 -1
  214. package/internal/useCopyFeedback.d.ts +28 -0
  215. package/internal/useCopyFeedback.d.ts.map +1 -0
  216. package/internal/useCopyFeedback.js +40 -0
  217. package/internal/useCopyFeedback.js.map +1 -0
  218. package/invitation/InvitationCreatedAlert.d.ts.map +1 -1
  219. package/invitation/InvitationCreatedAlert.js +12 -19
  220. package/invitation/InvitationCreatedAlert.js.map +1 -1
  221. package/invitation/InvitationManager.d.ts.map +1 -1
  222. package/invitation/InvitationManager.js +14 -21
  223. package/invitation/InvitationManager.js.map +1 -1
  224. package/invitation/InvitationRedemption.d.ts.map +1 -1
  225. package/invitation/InvitationRedemption.js +2 -4
  226. package/invitation/InvitationRedemption.js.map +1 -1
  227. package/library/useExportResource.d.ts.map +1 -1
  228. package/library/useExportResource.js +16 -27
  229. package/library/useExportResource.js.map +1 -1
  230. package/manifest/ApplyManifestDialog.js +1 -1
  231. package/manifest/EditResourceYamlDialog.js +1 -1
  232. package/mcp-server/DefinitionDriftNotice.d.ts +42 -0
  233. package/mcp-server/DefinitionDriftNotice.d.ts.map +1 -0
  234. package/mcp-server/DefinitionDriftNotice.js +52 -0
  235. package/mcp-server/DefinitionDriftNotice.js.map +1 -0
  236. package/mcp-server/McpServerConnectDialog.js +1 -1
  237. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  238. package/mcp-server/McpServerDetailView.js +47 -14
  239. package/mcp-server/McpServerDetailView.js.map +1 -1
  240. package/mcp-server/OAuthAppForm.d.ts.map +1 -1
  241. package/mcp-server/OAuthAppForm.js +2 -4
  242. package/mcp-server/OAuthAppForm.js.map +1 -1
  243. package/mcp-server/internal/definitionDrift.d.ts +39 -0
  244. package/mcp-server/internal/definitionDrift.d.ts.map +1 -0
  245. package/mcp-server/internal/definitionDrift.js +122 -0
  246. package/mcp-server/internal/definitionDrift.js.map +1 -0
  247. package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -1
  248. package/mcp-server/internal/mcpServerToInput.js +3 -0
  249. package/mcp-server/internal/mcpServerToInput.js.map +1 -1
  250. package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -1
  251. package/mcp-server/steps/EnvironmentAuthStep.js +8 -4
  252. package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
  253. package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -1
  254. package/mcp-server/steps/IdentityTransportStep.js +5 -4
  255. package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
  256. package/mcp-server/useMcpServerConnect.d.ts +1 -1
  257. package/mcp-server/useMcpServerDefinitionDrift.d.ts +44 -0
  258. package/mcp-server/useMcpServerDefinitionDrift.d.ts.map +1 -0
  259. package/mcp-server/useMcpServerDefinitionDrift.js +61 -0
  260. package/mcp-server/useMcpServerDefinitionDrift.js.map +1 -0
  261. package/models/ModelRegistryContext.d.ts +7 -1
  262. package/models/ModelRegistryContext.d.ts.map +1 -1
  263. package/models/ModelRegistryContext.js.map +1 -1
  264. package/models/ModelSelector.js +9 -1
  265. package/models/ModelSelector.js.map +1 -1
  266. package/models/index.d.ts +2 -2
  267. package/models/index.d.ts.map +1 -1
  268. package/models/index.js +1 -1
  269. package/models/index.js.map +1 -1
  270. package/models/registry.d.ts +88 -6
  271. package/models/registry.d.ts.map +1 -1
  272. package/models/registry.js +133 -27
  273. package/models/registry.js.map +1 -1
  274. package/models/useModelRegistry.d.ts +7 -1
  275. package/models/useModelRegistry.d.ts.map +1 -1
  276. package/models/useModelRegistry.js +3 -2
  277. package/models/useModelRegistry.js.map +1 -1
  278. package/oauth-app/CreateOAuthAppForm.d.ts.map +1 -1
  279. package/oauth-app/CreateOAuthAppForm.js +4 -5
  280. package/oauth-app/CreateOAuthAppForm.js.map +1 -1
  281. package/oauth-app/OAuthAppDetailPanel.d.ts.map +1 -1
  282. package/oauth-app/OAuthAppDetailPanel.js +5 -6
  283. package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
  284. package/organization/CreateOrganizationForm.d.ts.map +1 -1
  285. package/organization/CreateOrganizationForm.js +5 -9
  286. package/organization/CreateOrganizationForm.js.map +1 -1
  287. package/organization/OrgProfilePanel.d.ts.map +1 -1
  288. package/organization/OrgProfilePanel.js +7 -16
  289. package/organization/OrgProfilePanel.js.map +1 -1
  290. package/package.json +4 -4
  291. package/platform-client/CreatePlatformClientForm.d.ts.map +1 -1
  292. package/platform-client/CreatePlatformClientForm.js +5 -6
  293. package/platform-client/CreatePlatformClientForm.js.map +1 -1
  294. package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
  295. package/platform-client/PlatformClientDetailPanel.js +6 -7
  296. package/platform-client/PlatformClientDetailPanel.js.map +1 -1
  297. package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
  298. package/platform-client/PlatformClientListPanel.js +2 -4
  299. package/platform-client/PlatformClientListPanel.js.map +1 -1
  300. package/platform-client/PlatformClientSecretAlert.d.ts.map +1 -1
  301. package/platform-client/PlatformClientSecretAlert.js +18 -25
  302. package/platform-client/PlatformClientSecretAlert.js.map +1 -1
  303. package/provider.d.ts +34 -1
  304. package/provider.d.ts.map +1 -1
  305. package/provider.js +14 -7
  306. package/provider.js.map +1 -1
  307. package/resource-creation/WizardNav.d.ts.map +1 -1
  308. package/resource-creation/WizardNav.js +2 -4
  309. package/resource-creation/WizardNav.js.map +1 -1
  310. package/resource-detail/ConfirmDialog.js +1 -1
  311. package/resource-detail/useCopyResource.d.ts +4 -3
  312. package/resource-detail/useCopyResource.d.ts.map +1 -1
  313. package/resource-detail/useCopyResource.js +10 -19
  314. package/resource-detail/useCopyResource.js.map +1 -1
  315. package/schedule/ScheduleDetailView.d.ts.map +1 -1
  316. package/schedule/ScheduleDetailView.js +2 -4
  317. package/schedule/ScheduleDetailView.js.map +1 -1
  318. package/schedule/ScheduleForm.d.ts.map +1 -1
  319. package/schedule/ScheduleForm.js +6 -7
  320. package/schedule/ScheduleForm.js.map +1 -1
  321. package/session/NewSessionViewer.d.ts +52 -2
  322. package/session/NewSessionViewer.d.ts.map +1 -1
  323. package/session/NewSessionViewer.js +21 -6
  324. package/session/NewSessionViewer.js.map +1 -1
  325. package/session/SessionViewer.d.ts +63 -2
  326. package/session/SessionViewer.d.ts.map +1 -1
  327. package/session/SessionViewer.js +43 -17
  328. package/session/SessionViewer.js.map +1 -1
  329. package/session/audience.d.ts +17 -0
  330. package/session/audience.d.ts.map +1 -1
  331. package/session/index.d.ts +2 -1
  332. package/session/index.d.ts.map +1 -1
  333. package/session/index.js.map +1 -1
  334. package/session/run-config.d.ts +50 -0
  335. package/session/run-config.d.ts.map +1 -0
  336. package/session/run-config.js +15 -0
  337. package/session/run-config.js.map +1 -0
  338. package/session/useNewSessionFlow.d.ts +11 -0
  339. package/session/useNewSessionFlow.d.ts.map +1 -1
  340. package/session/useNewSessionFlow.js +29 -2
  341. package/session/useNewSessionFlow.js.map +1 -1
  342. package/session/useSessionConversation.d.ts +7 -7
  343. package/session/useSessionConversation.d.ts.map +1 -1
  344. package/session/useSessionConversation.js +2 -0
  345. package/session/useSessionConversation.js.map +1 -1
  346. package/session/useSessionPageFlow.d.ts +18 -4
  347. package/session/useSessionPageFlow.d.ts.map +1 -1
  348. package/session/useSessionPageFlow.js +33 -6
  349. package/session/useSessionPageFlow.js.map +1 -1
  350. package/session/useSessionPanel.d.ts +37 -2
  351. package/session/useSessionPanel.d.ts.map +1 -1
  352. package/session/useSessionPanel.js +44 -10
  353. package/session/useSessionPanel.js.map +1 -1
  354. package/settings/ApiKeysSection.d.ts.map +1 -1
  355. package/settings/ApiKeysSection.js +3 -2
  356. package/settings/ApiKeysSection.js.map +1 -1
  357. package/settings/ChannelAppsSection.d.ts.map +1 -1
  358. package/settings/ChannelAppsSection.js +3 -2
  359. package/settings/ChannelAppsSection.js.map +1 -1
  360. package/settings/EnvironmentsSection.js +5 -3
  361. package/settings/EnvironmentsSection.js.map +1 -1
  362. package/settings/IdentityProvidersSection.d.ts.map +1 -1
  363. package/settings/IdentityProvidersSection.js +3 -2
  364. package/settings/IdentityProvidersSection.js.map +1 -1
  365. package/settings/InvitationsSection.d.ts.map +1 -1
  366. package/settings/InvitationsSection.js +3 -1
  367. package/settings/InvitationsSection.js.map +1 -1
  368. package/settings/MembersSection.d.ts.map +1 -1
  369. package/settings/MembersSection.js +3 -1
  370. package/settings/MembersSection.js.map +1 -1
  371. package/settings/OAuthAppsSection.d.ts.map +1 -1
  372. package/settings/OAuthAppsSection.js +3 -2
  373. package/settings/OAuthAppsSection.js.map +1 -1
  374. package/settings/OrgProfileSection.d.ts.map +1 -1
  375. package/settings/OrgProfileSection.js +3 -2
  376. package/settings/OrgProfileSection.js.map +1 -1
  377. package/settings/PlatformClientsSection.d.ts.map +1 -1
  378. package/settings/PlatformClientsSection.js +3 -2
  379. package/settings/PlatformClientsSection.js.map +1 -1
  380. package/settings/UsageSection.d.ts.map +1 -1
  381. package/settings/UsageSection.js +3 -1
  382. package/settings/UsageSection.js.map +1 -1
  383. package/sharing/ShareAgentDialog.d.ts.map +1 -1
  384. package/sharing/ShareAgentDialog.js +18 -7
  385. package/sharing/ShareAgentDialog.js.map +1 -1
  386. package/sidebar/chrome.d.ts +3 -4
  387. package/sidebar/chrome.d.ts.map +1 -1
  388. package/sidebar/chrome.js +5 -4
  389. package/sidebar/chrome.js.map +1 -1
  390. package/skill/SkillDiffDialog.js +1 -1
  391. package/src/access/ManageAccessDialog.tsx +10 -4
  392. package/src/activity/format-relative-time.ts +11 -9
  393. package/src/agent/steps/CapabilitiesStep.tsx +6 -3
  394. package/src/agent/steps/IdentityStep.tsx +19 -12
  395. package/src/agent-instance/CreateAgentInstanceDialog.tsx +17 -8
  396. package/src/api-key/ApiKeyCreatedAlert.tsx +10 -19
  397. package/src/api-key/ApiKeyListPanel.tsx +3 -39
  398. package/src/api-key/CreateApiKeyForm.tsx +12 -26
  399. package/src/approval-defaults-context.ts +56 -0
  400. package/src/attachment/__tests__/vision-preflight.test.ts +311 -0
  401. package/src/attachment/index.ts +12 -0
  402. package/src/attachment/vision-preflight.ts +236 -0
  403. package/src/billing/AutoRechargeCard.tsx +5 -4
  404. package/src/billing/BillingSection.tsx +4 -3
  405. package/src/channel/ChannelConversationsDialog.tsx +8 -4
  406. package/src/channel/ChannelCredentialsDialog.tsx +14 -4
  407. package/src/channel/ChannelTemplatesDialog.tsx +8 -4
  408. package/src/channel/ConnectSlackDialog.tsx +14 -4
  409. package/src/channel/ConnectWhatsAppDialog.tsx +14 -4
  410. package/src/channel/useChannelSessions.ts +3 -0
  411. package/src/channel-app/ChannelAppDetailPanel.tsx +15 -12
  412. package/src/channel-app/CreateChannelAppForm.tsx +17 -12
  413. package/src/channel-app/internal.tsx +5 -25
  414. package/src/composer/ComposerToolbar.tsx +1 -1
  415. package/src/composer/SessionComposer.tsx +160 -13
  416. package/src/composer/__tests__/SessionComposer-modelCoherence.test.tsx +220 -0
  417. package/src/composer/__tests__/SessionComposer-visionPreflight.test.tsx +222 -0
  418. package/src/composer/icons.tsx +0 -18
  419. package/src/conversation/ConversationComposer.tsx +1 -1
  420. package/src/conversation/ConversationListPane.tsx +4 -3
  421. package/src/cursor-accounts/MemberCoverageTable.tsx +3 -14
  422. package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +2 -10
  423. package/src/dashboard/DashboardFailedRuns.tsx +2 -12
  424. package/src/environment/CreateEnvironmentForm.tsx +8 -27
  425. package/src/environment/EnvVarForm.tsx +2 -18
  426. package/src/environment/EnvironmentVariableEditor.tsx +5 -21
  427. package/src/execution/ArtifactApplyButton.tsx +2 -17
  428. package/src/execution/ExecutionErrorNotice.tsx +99 -0
  429. package/src/execution/FilePathLink.tsx +5 -9
  430. package/src/execution/FileReviewCard.tsx +1 -20
  431. package/src/execution/FollowUpInput.tsx +1 -16
  432. package/src/execution/LivenessStatusLine.tsx +59 -0
  433. package/src/execution/MessageEntry.tsx +136 -25
  434. package/src/execution/MessageThread.tsx +84 -83
  435. package/src/execution/SetupProgress.tsx +5 -1
  436. package/src/execution/SubAgentSection.tsx +9 -20
  437. package/src/execution/TerminalSession.tsx +97 -10
  438. package/src/execution/ToolCallDetail.tsx +19 -0
  439. package/src/execution/ToolCallItem.tsx +157 -37
  440. package/src/execution/ToolRunGroup.tsx +30 -32
  441. package/src/execution/WriteBackCard.tsx +5 -24
  442. package/src/execution/__tests__/MessageEntry-copy.test.tsx +125 -0
  443. package/src/execution/__tests__/MessageThread.test.tsx +97 -0
  444. package/src/execution/__tests__/TerminalSession.test.tsx +71 -1
  445. package/src/execution/__tests__/ToolCallDetail.test.tsx +33 -1
  446. package/src/execution/__tests__/ToolCallItem.test.tsx +299 -11
  447. package/src/execution/__tests__/ToolRunGroup.test.tsx +41 -9
  448. package/src/execution/__tests__/message-thread-slots.test.tsx +92 -0
  449. package/src/execution/__tests__/tool-presenter.test.tsx +41 -4
  450. package/src/execution/index.ts +8 -2
  451. package/src/execution/tool-categories.ts +72 -8
  452. package/src/execution/tool-presenter.ts +22 -1
  453. package/src/execution/useArtifactInspection.ts +4 -8
  454. package/src/iam-policy/GrantAccessForm.tsx +2 -18
  455. package/src/iam-policy/OrgMembersPanel.tsx +3 -19
  456. package/src/iam-policy/RoleSelector.tsx +8 -1
  457. package/src/identity-provider/CreateIdentityProviderForm.tsx +13 -31
  458. package/src/identity-provider/IdentityProviderDetailPanel.tsx +24 -49
  459. package/src/identity-provider/IdentityProviderListPanel.tsx +2 -18
  460. package/src/identity-provider/IdentityProviderWizard.tsx +15 -32
  461. package/src/identity-provider/SsoLoginPrompt.tsx +6 -21
  462. package/src/index.ts +23 -1
  463. package/src/internal/DecisionButton.tsx +1 -20
  464. package/src/internal/SpinnerIcon.tsx +42 -0
  465. package/src/internal/__tests__/ThreadCardShell.test.tsx +43 -7
  466. package/src/internal/__tests__/useCopyFeedback.test.ts +92 -0
  467. package/src/internal/select-element-text.ts +17 -0
  468. package/src/internal/thread-card/ThreadCardShell.tsx +53 -21
  469. package/src/internal/thread-card/glyphs.tsx +24 -3
  470. package/src/internal/thread-card/index.ts +1 -0
  471. package/src/internal/useCopyFeedback.ts +61 -0
  472. package/src/invitation/InvitationCreatedAlert.tsx +10 -18
  473. package/src/invitation/InvitationManager.tsx +23 -34
  474. package/src/invitation/InvitationRedemption.tsx +2 -18
  475. package/src/library/useExportResource.ts +15 -29
  476. package/src/manifest/ApplyManifestDialog.tsx +1 -1
  477. package/src/manifest/EditResourceYamlDialog.tsx +1 -1
  478. package/src/mcp-server/DefinitionDriftNotice.tsx +120 -0
  479. package/src/mcp-server/McpServerConnectDialog.tsx +1 -1
  480. package/src/mcp-server/McpServerDetailView.tsx +58 -26
  481. package/src/mcp-server/OAuthAppForm.tsx +2 -18
  482. package/src/mcp-server/__tests__/DefinitionDriftNotice.test.tsx +57 -0
  483. package/src/mcp-server/__tests__/definitionDrift.test.ts +245 -0
  484. package/src/mcp-server/__tests__/mcpServerToInput.test.ts +201 -0
  485. package/src/mcp-server/__tests__/useMcpServerDefinitionDrift.test.tsx +173 -0
  486. package/src/mcp-server/internal/definitionDrift.ts +158 -0
  487. package/src/mcp-server/internal/mcpServerToInput.ts +3 -0
  488. package/src/mcp-server/steps/EnvironmentAuthStep.tsx +19 -19
  489. package/src/mcp-server/steps/IdentityTransportStep.tsx +24 -23
  490. package/src/mcp-server/useMcpServerConnect.ts +1 -1
  491. package/src/mcp-server/useMcpServerDefinitionDrift.ts +95 -0
  492. package/src/models/ModelRegistryContext.ts +7 -1
  493. package/src/models/ModelSelector.tsx +37 -0
  494. package/src/models/__tests__/ModelSelector-visionIndicator.test.tsx +129 -0
  495. package/src/models/__tests__/resolveDefaultModel.test.ts +115 -0
  496. package/src/models/__tests__/useModelRegistry.test.tsx +99 -4
  497. package/src/models/index.ts +2 -2
  498. package/src/models/registry.ts +196 -29
  499. package/src/models/useModelRegistry.ts +10 -2
  500. package/src/oauth-app/CreateOAuthAppForm.tsx +16 -31
  501. package/src/oauth-app/OAuthAppDetailPanel.tsx +16 -31
  502. package/src/organization/CreateOrganizationForm.tsx +10 -29
  503. package/src/organization/OrgProfilePanel.tsx +13 -44
  504. package/src/platform-client/CreatePlatformClientForm.tsx +9 -29
  505. package/src/platform-client/PlatformClientDetailPanel.tsx +10 -30
  506. package/src/platform-client/PlatformClientListPanel.tsx +2 -18
  507. package/src/platform-client/PlatformClientSecretAlert.tsx +26 -55
  508. package/src/provider.tsx +76 -33
  509. package/src/resource-creation/WizardNav.tsx +2 -18
  510. package/src/resource-detail/ConfirmDialog.tsx +1 -1
  511. package/src/resource-detail/useCopyResource.ts +17 -23
  512. package/src/schedule/ScheduleDetailView.tsx +2 -18
  513. package/src/schedule/ScheduleForm.tsx +19 -34
  514. package/src/session/NewSessionViewer.tsx +85 -7
  515. package/src/session/SessionViewer.tsx +120 -17
  516. package/src/session/__tests__/audienceWiring.test.tsx +76 -0
  517. package/src/session/__tests__/panelNegotiation.test.tsx +302 -0
  518. package/src/session/__tests__/useNewSessionFlow.test.tsx +134 -5
  519. package/src/session/__tests__/useSessionPageFlow.autoApprove.test.tsx +74 -0
  520. package/src/session/__tests__/useSessionPageFlow.runConfig.test.tsx +157 -0
  521. package/src/session/__tests__/useSessionPanel.test.ts +114 -0
  522. package/src/session/audience.ts +18 -0
  523. package/src/session/index.ts +2 -1
  524. package/src/session/run-config.ts +59 -0
  525. package/src/session/useNewSessionFlow.ts +39 -2
  526. package/src/session/useSessionConversation.ts +10 -8
  527. package/src/session/useSessionPageFlow.ts +51 -10
  528. package/src/session/useSessionPanel.ts +91 -10
  529. package/src/settings/ApiKeysSection.tsx +4 -3
  530. package/src/settings/ChannelAppsSection.tsx +4 -3
  531. package/src/settings/EnvironmentsSection.tsx +8 -5
  532. package/src/settings/IdentityProvidersSection.tsx +4 -3
  533. package/src/settings/InvitationsSection.tsx +4 -2
  534. package/src/settings/MembersSection.tsx +4 -2
  535. package/src/settings/OAuthAppsSection.tsx +4 -3
  536. package/src/settings/OrgProfileSection.tsx +4 -3
  537. package/src/settings/PlatformClientsSection.tsx +4 -3
  538. package/src/settings/UsageSection.tsx +4 -2
  539. package/src/sharing/ShareAgentDialog.tsx +28 -10
  540. package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -1
  541. package/src/sidebar/chrome.tsx +6 -6
  542. package/src/skill/SkillDiffDialog.tsx +1 -1
  543. package/src/styles.css +43 -0
  544. package/src/version-history/VersionTimelineEntry.tsx +1 -21
  545. package/src/workflow/FailedRunsWidget.tsx +2 -9
  546. package/src/workflow/PendingApprovalsWidget.tsx +2 -9
  547. package/src/workflow/ViewYamlDialog.tsx +7 -22
  548. package/src/workflow/WorkflowArchitectDialog.tsx +8 -27
  549. package/src/workflow/WorkflowArtifactDocument.tsx +5 -9
  550. package/src/workflow/WorkflowCanvasEditor.tsx +2 -0
  551. package/src/workflow/WorkflowCanvasInner.tsx +14 -1
  552. package/src/workflow/WorkflowDiffGraph.tsx +7 -1
  553. package/src/workflow/WorkflowExecutionViewer.tsx +88 -11
  554. package/src/workflow/WorkflowExplainDialog.tsx +8 -24
  555. package/src/workflow/WorkflowOverviewGraph.tsx +9 -1
  556. package/src/workflow/WorkflowRefinePanel.tsx +2 -18
  557. package/src/workflow/WorkflowRepairCard.tsx +2 -18
  558. package/src/workflow/WorkflowRunDialog.tsx +3 -23
  559. package/src/workflow/WorkflowTaskApprovalSummary.tsx +2 -17
  560. package/src/workflow/WorkflowVersionBadge.tsx +4 -13
  561. package/src/workflow/WorkflowVersionTimeline.tsx +1 -25
  562. package/src/workflow/__tests__/panelNegotiation.test.tsx +230 -0
  563. package/src/workflow/__tests__/useWorkflowCanvas.dirty.test.tsx +178 -0
  564. package/src/workflow/__tests__/useWorkflowCanvas.drag.test.tsx +224 -0
  565. package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +100 -0
  566. package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +7 -11
  567. package/src/workflow/execution-history/ExecutionHistoryTable.tsx +1 -25
  568. package/src/workflow/index.ts +1 -0
  569. package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +1 -1
  570. package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
  571. package/src/workflow/picker/BranchAddPopover.tsx +4 -3
  572. package/src/workflow/templates/WorkflowTemplatePreview.tsx +1 -1
  573. package/src/workflow/useApprovalBoundary.ts +1 -1
  574. package/src/workflow/useWorkflowCanvas.ts +114 -11
  575. package/src/workflow/useWorkflowExecutionPanel.ts +95 -13
  576. package/styles.css +1 -1
  577. package/version-history/VersionTimelineEntry.d.ts.map +1 -1
  578. package/version-history/VersionTimelineEntry.js +1 -23
  579. package/version-history/VersionTimelineEntry.js.map +1 -1
  580. package/workflow/CanvasTransitionEdge.d.ts +1 -1
  581. package/workflow/FailedRunsWidget.d.ts.map +1 -1
  582. package/workflow/FailedRunsWidget.js +2 -11
  583. package/workflow/FailedRunsWidget.js.map +1 -1
  584. package/workflow/PendingApprovalsWidget.d.ts.map +1 -1
  585. package/workflow/PendingApprovalsWidget.js +2 -11
  586. package/workflow/PendingApprovalsWidget.js.map +1 -1
  587. package/workflow/ViewYamlDialog.d.ts.map +1 -1
  588. package/workflow/ViewYamlDialog.js +7 -23
  589. package/workflow/ViewYamlDialog.js.map +1 -1
  590. package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
  591. package/workflow/WorkflowArchitectDialog.js +7 -11
  592. package/workflow/WorkflowArchitectDialog.js.map +1 -1
  593. package/workflow/WorkflowArtifactDocument.d.ts.map +1 -1
  594. package/workflow/WorkflowArtifactDocument.js +5 -8
  595. package/workflow/WorkflowArtifactDocument.js.map +1 -1
  596. package/workflow/WorkflowCanvasEditor.d.ts.map +1 -1
  597. package/workflow/WorkflowCanvasEditor.js +1 -1
  598. package/workflow/WorkflowCanvasEditor.js.map +1 -1
  599. package/workflow/WorkflowCanvasInner.d.ts +4 -2
  600. package/workflow/WorkflowCanvasInner.d.ts.map +1 -1
  601. package/workflow/WorkflowCanvasInner.js +7 -3
  602. package/workflow/WorkflowCanvasInner.js.map +1 -1
  603. package/workflow/WorkflowDiffGraph.js +6 -2
  604. package/workflow/WorkflowDiffGraph.js.map +1 -1
  605. package/workflow/WorkflowExecutionViewer.d.ts +51 -0
  606. package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
  607. package/workflow/WorkflowExecutionViewer.js +23 -6
  608. package/workflow/WorkflowExecutionViewer.js.map +1 -1
  609. package/workflow/WorkflowExplainDialog.d.ts.map +1 -1
  610. package/workflow/WorkflowExplainDialog.js +6 -8
  611. package/workflow/WorkflowExplainDialog.js.map +1 -1
  612. package/workflow/WorkflowOverviewGraph.js +8 -2
  613. package/workflow/WorkflowOverviewGraph.js.map +1 -1
  614. package/workflow/WorkflowRefinePanel.d.ts.map +1 -1
  615. package/workflow/WorkflowRefinePanel.js +2 -4
  616. package/workflow/WorkflowRefinePanel.js.map +1 -1
  617. package/workflow/WorkflowRepairCard.d.ts.map +1 -1
  618. package/workflow/WorkflowRepairCard.js +2 -4
  619. package/workflow/WorkflowRepairCard.js.map +1 -1
  620. package/workflow/WorkflowRunDialog.d.ts.map +1 -1
  621. package/workflow/WorkflowRunDialog.js +2 -7
  622. package/workflow/WorkflowRunDialog.js.map +1 -1
  623. package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
  624. package/workflow/WorkflowTaskApprovalSummary.js +2 -4
  625. package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
  626. package/workflow/WorkflowVersionBadge.d.ts.map +1 -1
  627. package/workflow/WorkflowVersionBadge.js +4 -13
  628. package/workflow/WorkflowVersionBadge.js.map +1 -1
  629. package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
  630. package/workflow/WorkflowVersionTimeline.js +1 -26
  631. package/workflow/WorkflowVersionTimeline.js.map +1 -1
  632. package/workflow/execution-comparison/ExecutionComparisonPicker.d.ts.map +1 -1
  633. package/workflow/execution-comparison/ExecutionComparisonPicker.js +7 -15
  634. package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
  635. package/workflow/execution-history/ExecutionHistoryTable.d.ts.map +1 -1
  636. package/workflow/execution-history/ExecutionHistoryTable.js +1 -24
  637. package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
  638. package/workflow/index.d.ts +1 -1
  639. package/workflow/index.d.ts.map +1 -1
  640. package/workflow/index.js.map +1 -1
  641. package/workflow/instance/CreateWorkflowInstanceDialog.js +1 -1
  642. package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
  643. package/workflow/instance/WorkflowInstanceDetailPanel.js +1 -1
  644. package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
  645. package/workflow/picker/BranchAddPopover.d.ts.map +1 -1
  646. package/workflow/picker/BranchAddPopover.js +3 -2
  647. package/workflow/picker/BranchAddPopover.js.map +1 -1
  648. package/workflow/templates/WorkflowTemplatePreview.js +1 -1
  649. package/workflow/useApprovalBoundary.d.ts +1 -1
  650. package/workflow/useApprovalBoundary.js +1 -1
  651. package/workflow/useWorkflowCanvas.d.ts +5 -1
  652. package/workflow/useWorkflowCanvas.d.ts.map +1 -1
  653. package/workflow/useWorkflowCanvas.js +99 -13
  654. package/workflow/useWorkflowCanvas.js.map +1 -1
  655. package/workflow/useWorkflowExecutionPanel.d.ts +38 -2
  656. package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -1
  657. package/workflow/useWorkflowExecutionPanel.js +46 -13
  658. package/workflow/useWorkflowExecutionPanel.js.map +1 -1
@@ -5,6 +5,8 @@ import { DEFAULT_MODEL_ID, DEFAULT_CURSOR_MODEL_ID, parseRegistryJson } from "..
5
5
  import { ModelRegistryContext } from "../../models/ModelRegistryContext";
6
6
  import type { ModelRegistryState } from "../../models/ModelRegistryContext";
7
7
  import { ExecutionTargetContext } from "../../execution-target-context";
8
+ import { ApprovalDefaultsContext } from "../../approval-defaults-context";
9
+ import type { ApprovalDefaults } from "../../approval-defaults-context";
8
10
  import { RunnerAdapterContext } from "../../runner-adapter";
9
11
  import type { RunnerAdapter } from "../../runner-adapter";
10
12
  const mockGetByReference = vi.fn();
@@ -71,16 +73,19 @@ const TEST_MODELS = parseRegistryJson({
71
73
  function createWrapper(
72
74
  executionTarget?: "local" | "cloud",
73
75
  adapter: RunnerAdapter | null = null,
76
+ approvalDefaults?: ApprovalDefaults,
74
77
  ) {
75
78
  const state: ModelRegistryState = { models: TEST_MODELS, isLoading: false, error: null, refetch: () => {} };
76
79
  return function Wrapper({ children }: { children: ReactNode }) {
77
80
  return (
78
81
  <ExecutionTargetContext.Provider value={executionTarget}>
79
- <RunnerAdapterContext.Provider value={adapter}>
80
- <ModelRegistryContext.Provider value={state}>
81
- {children}
82
- </ModelRegistryContext.Provider>
83
- </RunnerAdapterContext.Provider>
82
+ <ApprovalDefaultsContext.Provider value={approvalDefaults}>
83
+ <RunnerAdapterContext.Provider value={adapter}>
84
+ <ModelRegistryContext.Provider value={state}>
85
+ {children}
86
+ </ModelRegistryContext.Provider>
87
+ </RunnerAdapterContext.Provider>
88
+ </ApprovalDefaultsContext.Provider>
84
89
  </ExecutionTargetContext.Provider>
85
90
  );
86
91
  };
@@ -291,6 +296,86 @@ describe("useNewSessionFlow", () => {
291
296
  });
292
297
  });
293
298
 
299
+ describe("submit — owner-pinned runConfig (#664)", () => {
300
+ it("stamps the pinned model and fast tier over the composer's selection and the restored preference", async () => {
301
+ localStorage.setItem(STORAGE_KEY_MODEL_NATIVE, DEFAULT_MODEL_ID);
302
+ const { result } = renderHook(
303
+ () =>
304
+ useNewSessionFlow({
305
+ ...defaultOptions(),
306
+ runConfig: { modelName: "pinned-model", serviceTier: "fast" },
307
+ }),
308
+ { wrapper: createWrapper() },
309
+ );
310
+
311
+ await act(async () => {
312
+ await result.current.submit("Hello", "user-picked-model");
313
+ });
314
+
315
+ const execInput = mockCreateExecution.mock.calls[0][0];
316
+ expect(execInput.modelName).toBe("pinned-model");
317
+ expect(execInput.serviceTier).toBe("fast");
318
+ });
319
+
320
+ it("a model-only pin suppresses a composer-armed fast tier (the pin owns the whole run config)", async () => {
321
+ const { result } = renderHook(
322
+ () =>
323
+ useNewSessionFlow({
324
+ ...defaultOptions(),
325
+ runConfig: { modelName: "pinned-model" },
326
+ }),
327
+ { wrapper: createWrapper() },
328
+ );
329
+
330
+ await act(async () => {
331
+ await result.current.submit("Hello", undefined, { serviceTier: "fast" });
332
+ });
333
+
334
+ const execInput = mockCreateExecution.mock.calls[0][0];
335
+ expect(execInput.modelName).toBe("pinned-model");
336
+ expect(execInput.serviceTier).toBeUndefined();
337
+ });
338
+
339
+ it("ignores the pin entirely for guests — the platform share policy owns guest config", async () => {
340
+ const { result } = renderHook(
341
+ () =>
342
+ useNewSessionFlow({
343
+ ...defaultOptions(),
344
+ audience: "guest",
345
+ runConfig: { modelName: "pinned-model", serviceTier: "fast" },
346
+ }),
347
+ { wrapper: createWrapper() },
348
+ );
349
+
350
+ // Guests submit against an explicitly pinned shared agent.
351
+ act(() => {
352
+ result.current.setAgentRef({ org: "acme", slug: "shared-agent" });
353
+ result.current.setResolution({ mode: "saved", instanceId: "inst-shared" });
354
+ });
355
+
356
+ await act(async () => {
357
+ await result.current.submit("Hello");
358
+ });
359
+
360
+ const execInput = mockCreateExecution.mock.calls[0][0];
361
+ expect(execInput.modelName).toBeUndefined();
362
+ expect(execInput.serviceTier).toBeUndefined();
363
+ });
364
+
365
+ it("throws at render for the statically-wrong pin (fast tier, no model)", () => {
366
+ expect(() =>
367
+ renderHook(
368
+ () =>
369
+ useNewSessionFlow({
370
+ ...defaultOptions(),
371
+ runConfig: { serviceTier: "fast" },
372
+ }),
373
+ { wrapper: createWrapper() },
374
+ ),
375
+ ).toThrowError(/serviceTier "fast" requires modelName/);
376
+ });
377
+ });
378
+
294
379
  describe("submit — one-call bootstrap", () => {
295
380
  it("creates the execution with an embedded sessionSpec in a single call", async () => {
296
381
  const opts = defaultOptions();
@@ -320,6 +405,32 @@ describe("useNewSessionFlow", () => {
320
405
  expect(execInput.sessionSpec.harness).toBe("native");
321
406
  });
322
407
 
408
+ it("omits autoApproveAll by default (fail-closed gates unchanged)", async () => {
409
+ const opts = defaultOptions();
410
+ const { result } = renderHook(() => useNewSessionFlow(opts), { wrapper: createWrapper() });
411
+
412
+ await act(async () => {
413
+ await result.current.submit("Hello");
414
+ });
415
+
416
+ const execInput = mockCreateExecution.mock.calls[0][0];
417
+ expect(execInput.autoApproveAll).toBeUndefined();
418
+ });
419
+
420
+ it("forwards the host approval default into the bootstrap create (#302)", async () => {
421
+ const opts = defaultOptions();
422
+ const { result } = renderHook(() => useNewSessionFlow(opts), {
423
+ wrapper: createWrapper(undefined, null, { autoApproveAll: true }),
424
+ });
425
+
426
+ await act(async () => {
427
+ await result.current.submit("Hello");
428
+ });
429
+
430
+ const execInput = mockCreateExecution.mock.calls[0][0];
431
+ expect(execInput.autoApproveAll).toBe(true);
432
+ });
433
+
323
434
  it("passes cursor harness in the sessionSpec after switching", async () => {
324
435
  const opts = defaultOptions();
325
436
  const { result } = renderHook(() => useNewSessionFlow(opts), { wrapper: createWrapper() });
@@ -844,6 +955,24 @@ describe("useNewSessionFlow", () => {
844
955
  expect(result.current.harness).toBe("cursor");
845
956
  });
846
957
 
958
+ it("never inherits the host approval default — guests get platform policy (#302)", async () => {
959
+ const opts = { ...defaultOptions(), audience: "guest" as const };
960
+ const { result } = renderHook(() => useNewSessionFlow(opts), {
961
+ wrapper: createWrapper(undefined, null, { autoApproveAll: true }),
962
+ });
963
+
964
+ act(() => {
965
+ result.current.setAgentRef({ org: "acme", slug: "support-bot" });
966
+ result.current.setResolution({ mode: "saved", instanceId: "shared-inst" });
967
+ });
968
+ await act(async () => {
969
+ await result.current.submit("Hello");
970
+ });
971
+
972
+ const execInput = mockCreateExecution.mock.calls[0][0];
973
+ expect(execInput.autoApproveAll).toBeUndefined();
974
+ });
975
+
847
976
  it("ignores the embedder's defaultHarness — guests get platform policy", () => {
848
977
  const opts = {
849
978
  ...defaultOptions(),
@@ -62,10 +62,23 @@ vi.mock("../useAgentRefFromSession", () => ({
62
62
  useAgentRefFromSession: () => ({ agentRef: null }),
63
63
  }));
64
64
 
65
+ import type { ReactNode } from "react";
65
66
  import { useSessionPageFlow } from "../useSessionPageFlow";
67
+ import { ApprovalDefaultsContext } from "../../approval-defaults-context";
66
68
 
67
69
  const OPTS = { sessionId: "ses_1", org: "acme" };
68
70
 
71
+ /** Renders the hook under a provider-level host approval default (#302). */
72
+ function hostDefaultWrapper(autoApproveAll: boolean) {
73
+ return function Wrapper({ children }: { children: ReactNode }) {
74
+ return (
75
+ <ApprovalDefaultsContext.Provider value={{ autoApproveAll }}>
76
+ {children}
77
+ </ApprovalDefaultsContext.Provider>
78
+ );
79
+ };
80
+ }
81
+
69
82
  describe("useSessionPageFlow — gate-driven auto-approve", () => {
70
83
  beforeEach(() => {
71
84
  mockSubmitApproval.mockResolvedValue(undefined);
@@ -147,3 +160,64 @@ describe("useSessionPageFlow — gate-driven auto-approve", () => {
147
160
  expect(followUpOpts.autoApproveAll).toBeUndefined();
148
161
  });
149
162
  });
163
+
164
+ describe("useSessionPageFlow — host-set approval default (#302)", () => {
165
+ beforeEach(() => {
166
+ mockSubmitApproval.mockResolvedValue(undefined);
167
+ });
168
+ afterEach(() => {
169
+ vi.clearAllMocks();
170
+ });
171
+
172
+ it("arms autoApproveAll from the provider default, before any gate", () => {
173
+ const { result } = renderHook(() => useSessionPageFlow(OPTS), {
174
+ wrapper: hostDefaultWrapper(true),
175
+ });
176
+ expect(result.current.autoApproveAll).toBe(true);
177
+ });
178
+
179
+ it("carries the host default into the very first follow-up", async () => {
180
+ const { result } = renderHook(() => useSessionPageFlow(OPTS), {
181
+ wrapper: hostDefaultWrapper(true),
182
+ });
183
+
184
+ await act(async () => {
185
+ await result.current.handleSubmit("first message");
186
+ });
187
+
188
+ const followUpOpts = mockSendFollowUp.mock.calls[0][1];
189
+ expect(followUpOpts.autoApproveAll).toBe(true);
190
+ });
191
+
192
+ it("the user's Turn off beats the host default for the rest of the session", async () => {
193
+ const { result } = renderHook(() => useSessionPageFlow(OPTS), {
194
+ wrapper: hostDefaultWrapper(true),
195
+ });
196
+
197
+ act(() => {
198
+ result.current.setAutoApproveAll(false);
199
+ });
200
+ expect(result.current.autoApproveAll).toBe(false);
201
+
202
+ await act(async () => {
203
+ await result.current.handleSubmit("after turn off");
204
+ });
205
+ const followUpOpts = mockSendFollowUp.mock.calls.at(-1)?.[1];
206
+ expect(followUpOpts.autoApproveAll).toBeUndefined();
207
+ });
208
+
209
+ it("guests never inherit the host default", () => {
210
+ const { result } = renderHook(
211
+ () => useSessionPageFlow({ ...OPTS, audience: "guest" }),
212
+ { wrapper: hostDefaultWrapper(true) },
213
+ );
214
+ expect(result.current.autoApproveAll).toBe(false);
215
+ });
216
+
217
+ it("an explicit false default changes nothing", () => {
218
+ const { result } = renderHook(() => useSessionPageFlow(OPTS), {
219
+ wrapper: hostDefaultWrapper(false),
220
+ });
221
+ expect(result.current.autoApproveAll).toBe(false);
222
+ });
223
+ });
@@ -0,0 +1,157 @@
1
+ import { describe, it, expect, vi, afterEach } from "vitest";
2
+ import { renderHook, act } from "@testing-library/react";
3
+
4
+ // ---------------------------------------------------------------------------
5
+ // Owner-pinned run config for useSessionPageFlow (stigmer/stigmer#664).
6
+ //
7
+ // A platform-billed embedder pins the model/tier once and every follow-up
8
+ // carries it — winning over the composer's selection, the persisted
9
+ // Console preference, and the last execution's model — including retries,
10
+ // which re-enter the same submit path. Guests never carry a pin: their
11
+ // execution config is owned by the server-side share policy.
12
+ // ---------------------------------------------------------------------------
13
+
14
+ const mockSendFollowUp = vi.fn();
15
+
16
+ const mockConv = {
17
+ session: { spec: { agentInstanceId: "inst_bound" } },
18
+ isLoading: false,
19
+ completedExecutions: [] as unknown[],
20
+ activeStreamExecution: null,
21
+ workspaceEntries: [] as unknown[],
22
+ submitApproval: vi.fn(),
23
+ sendFollowUp: mockSendFollowUp,
24
+ };
25
+ vi.mock("../useSessionConversation", () => ({
26
+ useSessionConversation: () => mockConv,
27
+ }));
28
+
29
+ vi.mock("../../hooks", () => ({
30
+ useStigmer: () => ({ agent: { getByReference: vi.fn() } }),
31
+ }));
32
+
33
+ vi.mock("../../agent", () => ({
34
+ useDefaultAgent: () => ({ agent: null, isLoading: false, error: null }),
35
+ }));
36
+
37
+ const mockWorkspace = {
38
+ entries: [],
39
+ hasEntries: false,
40
+ toInput: vi.fn().mockReturnValue([]),
41
+ addGitRepo: vi.fn(),
42
+ addLocalPath: vi.fn(),
43
+ removeEntry: vi.fn(),
44
+ clear: vi.fn(),
45
+ };
46
+ vi.mock("../../workspace", () => ({
47
+ useWorkspaceEntries: () => mockWorkspace,
48
+ }));
49
+
50
+ vi.mock("../../execution/useSessionVariables", () => ({
51
+ useSessionVariables: () => ({ variables: [], isEmpty: true, clear: vi.fn() }),
52
+ }));
53
+
54
+ // Honors `enabled` like the real hook (contract pinned by its own tests).
55
+ vi.mock("../usePersistedModel", () => ({
56
+ usePersistedModel: (opts?: { enabled?: boolean }) =>
57
+ (opts?.enabled === false
58
+ ? ([undefined, vi.fn()] as const)
59
+ : (["persisted-model", vi.fn()] as const)),
60
+ }));
61
+
62
+ vi.mock("../useAgentRefFromSession", () => ({
63
+ useAgentRefFromSession: () => ({ agentRef: null }),
64
+ }));
65
+
66
+ import { useSessionPageFlow } from "../useSessionPageFlow";
67
+
68
+ const OPTS = { sessionId: "ses_1", org: "acme" };
69
+ const PIN = { modelName: "pinned-model", serviceTier: "fast" } as const;
70
+
71
+ describe("useSessionPageFlow — owner-pinned runConfig (#664)", () => {
72
+ afterEach(() => {
73
+ vi.clearAllMocks();
74
+ });
75
+
76
+ it("stamps the pinned model and fast tier on a composer follow-up, over the composer's own selection", async () => {
77
+ const { result } = renderHook(() =>
78
+ useSessionPageFlow({ ...OPTS, runConfig: PIN }),
79
+ );
80
+
81
+ await act(async () => {
82
+ await result.current.handleSubmit("follow up", "user-picked-model", {
83
+ serviceTier: undefined,
84
+ });
85
+ });
86
+
87
+ const options = mockSendFollowUp.mock.calls[0][1];
88
+ expect(options.modelName).toBe("pinned-model");
89
+ expect(options.serviceTier).toBe("fast");
90
+ });
91
+
92
+ it("stamps the pin on a bare re-submit (the execution-retry path passes no composer args)", async () => {
93
+ const { result } = renderHook(() =>
94
+ useSessionPageFlow({ ...OPTS, runConfig: PIN }),
95
+ );
96
+
97
+ await act(async () => {
98
+ await result.current.handleSubmit("retry me");
99
+ });
100
+
101
+ const options = mockSendFollowUp.mock.calls[0][1];
102
+ expect(options.modelName).toBe("pinned-model");
103
+ expect(options.serviceTier).toBe("fast");
104
+ });
105
+
106
+ it("a model-only pin suppresses a composer-armed fast tier (the pin owns the whole run config)", async () => {
107
+ const { result } = renderHook(() =>
108
+ useSessionPageFlow({ ...OPTS, runConfig: { modelName: "pinned-model" } }),
109
+ );
110
+
111
+ await act(async () => {
112
+ await result.current.handleSubmit("follow up", undefined, {
113
+ serviceTier: "fast",
114
+ });
115
+ });
116
+
117
+ const options = mockSendFollowUp.mock.calls[0][1];
118
+ expect(options.modelName).toBe("pinned-model");
119
+ expect(options.serviceTier).toBeUndefined();
120
+ });
121
+
122
+ it("keeps the unpinned behavior byte-identical when no runConfig is given", async () => {
123
+ const { result } = renderHook(() => useSessionPageFlow(OPTS));
124
+
125
+ await act(async () => {
126
+ await result.current.handleSubmit("follow up", "user-picked-model", {
127
+ serviceTier: "fast",
128
+ });
129
+ });
130
+
131
+ const options = mockSendFollowUp.mock.calls[0][1];
132
+ expect(options.modelName).toBe("user-picked-model");
133
+ expect(options.serviceTier).toBe("fast");
134
+ });
135
+
136
+ it("ignores the pin entirely for guests — their no-modelName invariant survives a misconfigured embed", async () => {
137
+ const { result } = renderHook(() =>
138
+ useSessionPageFlow({ ...OPTS, audience: "guest", runConfig: PIN }),
139
+ );
140
+
141
+ await act(async () => {
142
+ await result.current.handleSubmit("follow up");
143
+ });
144
+
145
+ const options = mockSendFollowUp.mock.calls[0][1];
146
+ expect(options.modelName).toBeUndefined();
147
+ expect(options.serviceTier).toBeUndefined();
148
+ });
149
+
150
+ it("throws at render for the statically-wrong pin (fast tier, no model)", () => {
151
+ expect(() =>
152
+ renderHook(() =>
153
+ useSessionPageFlow({ ...OPTS, runConfig: { serviceTier: "fast" } }),
154
+ ),
155
+ ).toThrowError(/serviceTier "fast" requires modelName/);
156
+ });
157
+ });
@@ -278,6 +278,120 @@ describe("useSessionPanel — artifact document tabs", () => {
278
278
  });
279
279
  });
280
280
 
281
+ describe("useSessionPanel — observed open state (uncontrolled + onOpenChange)", () => {
282
+ // The panel opens ITSELF (file/artifact/plan opens, plan auto-open), so —
283
+ // unlike useDetailTabs' user-driven-only tabs — onOpenChange fires in BOTH
284
+ // modes: passing only the callback observes the panel without controlling
285
+ // it (the issue-#300 docking-host case).
286
+ it("reports the chip toggle without taking control", () => {
287
+ const seen: boolean[] = [];
288
+ const { result } = renderPanel({ onOpenChange: (o) => seen.push(o) });
289
+ act(() => result.current.openPanel());
290
+ expect(result.current.isOpen).toBe(true);
291
+ act(() => result.current.closePanel());
292
+ expect(result.current.isOpen).toBe(false);
293
+ expect(seen).toEqual([true, false]);
294
+ });
295
+
296
+ it("reports internal open intents (openFile), once per actual transition", () => {
297
+ const seen: boolean[] = [];
298
+ const { result } = renderPanel({ onOpenChange: (o) => seen.push(o) });
299
+ act(() => result.current.openFile("e1", "a.ts"));
300
+ // Already open — a second open intent is not a transition.
301
+ act(() => result.current.openFile("e1", "b.ts"));
302
+ act(() => result.current.openPanel());
303
+ expect(seen).toEqual([true]);
304
+ });
305
+
306
+ it("reports the plan auto-open — the beat a docking host makes room for", () => {
307
+ const seen: boolean[] = [];
308
+ const onOpenChange = (o: boolean) => seen.push(o);
309
+ const { rerender } = renderPanel({ onOpenChange });
310
+ rerender({ phase: null, hasChanges: false, planKey: "e1:streaming", onOpenChange });
311
+ expect(seen).toEqual([true]);
312
+ });
313
+
314
+ it("starts open when defaultOpen is set, without a spurious notification", () => {
315
+ const seen: boolean[] = [];
316
+ const { result } = renderPanel({
317
+ defaultOpen: true,
318
+ onOpenChange: (o) => seen.push(o),
319
+ });
320
+ expect(result.current.isOpen).toBe(true);
321
+ expect(seen).toEqual([]);
322
+ });
323
+ });
324
+
325
+ describe("useSessionPanel — controlled open state", () => {
326
+ it("follows the host's open value and ignores defaultOpen", () => {
327
+ const { result, rerender } = renderPanel({ open: false, defaultOpen: true });
328
+ expect(result.current.isOpen).toBe(false);
329
+ rerender({ phase: null, hasChanges: false, open: true, defaultOpen: true });
330
+ expect(result.current.isOpen).toBe(true);
331
+ });
332
+
333
+ it("surfaces intents through onOpenChange without flipping state itself", () => {
334
+ const seen: boolean[] = [];
335
+ const onOpenChange = (o: boolean) => seen.push(o);
336
+ const { result, rerender } = renderPanel({ open: false, onOpenChange });
337
+ act(() => result.current.openPanel());
338
+ expect(seen).toEqual([true]);
339
+ expect(result.current.isOpen).toBe(false);
340
+ // The host grants the request.
341
+ rerender({ phase: null, hasChanges: false, open: true, onOpenChange });
342
+ expect(result.current.isOpen).toBe(true);
343
+ act(() => result.current.closePanel());
344
+ expect(seen).toEqual([true, false]);
345
+ expect(result.current.isOpen).toBe(true);
346
+ });
347
+
348
+ it("re-fires a declined request (once per request, not per transition)", () => {
349
+ const seen: boolean[] = [];
350
+ const onOpenChange = (o: boolean) => seen.push(o);
351
+ const { result } = renderPanel({ open: false, onOpenChange });
352
+ act(() => result.current.openFile("e1", "a.ts"));
353
+ // The host declined (open stayed false) — a later intent must re-fire,
354
+ // not be swallowed by a stale "already requested" memory.
355
+ act(() => result.current.openFile("e1", "b.ts"));
356
+ expect(seen).toEqual([true, true]);
357
+ });
358
+
359
+ it("plan auto-open is reported, not applied — but the tab is pinned and ready", () => {
360
+ const seen: boolean[] = [];
361
+ const onOpenChange = (o: boolean) => seen.push(o);
362
+ const { result, rerender } = renderPanel({ open: false, onOpenChange });
363
+ rerender({
364
+ phase: null,
365
+ hasChanges: false,
366
+ planKey: "e1:hash-a",
367
+ open: false,
368
+ onOpenChange,
369
+ });
370
+ expect(seen).toEqual([true]);
371
+ expect(result.current.isOpen).toBe(false);
372
+ // View state stays SDK-owned: the plan tab is pinned regardless, so the
373
+ // moment the host opens the panel the plan is what greets the user.
374
+ expect(result.current.editorsStore.getSnapshot().editors).toEqual([
375
+ { entryId: PLAN_DOCUMENT_ENTRY_ID, path: PLAN_DOCUMENT_PATH, preview: false },
376
+ ]);
377
+ });
378
+
379
+ it("auto-surfaces Changes against the HOST's open state, not the internal one", () => {
380
+ // The first-write-back trigger reads the effective open value: a
381
+ // controlled-open panel (whose internal state was never touched) must
382
+ // still surface Changes…
383
+ const { result, rerender } = renderPanel({ open: true });
384
+ rerender({ phase: null, hasChanges: true, open: true });
385
+ expect(result.current.view).toBe("changes");
386
+ });
387
+
388
+ it("…and a controlled-closed panel must not", () => {
389
+ const { result, rerender } = renderPanel({ open: false });
390
+ rerender({ phase: null, hasChanges: true, open: false });
391
+ expect(result.current.view).toBe("files");
392
+ });
393
+ });
394
+
281
395
  describe("useSessionPanel — defaultView (home view)", () => {
282
396
  it("seeds the view to the provided defaultView (launcher homes on Config)", () => {
283
397
  const { result } = renderPanel({ defaultView: "configure" });
@@ -45,3 +45,21 @@
45
45
  * presentation means without breaking embedders.
46
46
  */
47
47
  export type SessionAudience = "integrator" | "endUser" | "guest" | "observer";
48
+
49
+ /**
50
+ * Whether the session organisms offer the session panel surface.
51
+ *
52
+ * - `"auto"` (default) — the panel and its toggle chip are available
53
+ * whenever the audience allows them (every audience except `"guest"`).
54
+ * - `"none"` — the panel and chip are absent entirely: plan-mode
55
+ * auto-open is suppressed and transcript file paths keep their default
56
+ * copy behavior. For hosts whose surrounding surface already renders
57
+ * the workspace — the composer keeps every capability the audience
58
+ * allows, which is what separates this from `audience="guest"`.
59
+ *
60
+ * Orthogonal to {@link SessionAudience} on purpose: audience is who is
61
+ * looking, panel mode is what the host's geometry has room for. A union
62
+ * (not a boolean) so a future mode — e.g. a host-rendered panel fed by
63
+ * the SDK's controller — extends the vocabulary instead of breaking it.
64
+ */
65
+ export type SessionPanelMode = "auto" | "none";
@@ -2,7 +2,8 @@ export { toProtoExecutionTarget, fromProtoExecutionTarget } from "./execution-ta
2
2
  export type { ExecutionTargetOption } from "./execution-target.js";
3
3
 
4
4
  export type { RuntimeEnvProvider } from "./runtime-env.js";
5
- export type { SessionAudience } from "./audience.js";
5
+ export type { SessionAudience, SessionPanelMode } from "./audience.js";
6
+ export type { SessionRunConfig } from "./run-config.js";
6
7
  export {
7
8
  CHANNEL_SESSION_LABELS,
8
9
  isChannelOriginSession,
@@ -0,0 +1,59 @@
1
+ import type { ServiceTierOption } from "../models/service-tier.js";
2
+
3
+ /**
4
+ * Owner-pinned execution config for a session surface
5
+ * (stigmer/stigmer#664) — the client-side subset of the platform
6
+ * `RunConfig` that AgentShare and AgentChannel specs pin server-side
7
+ * (stigmer/stigmer#360). Budget clamps (`max_cost_usd`,
8
+ * `max_tool_rounds`) are deliberately absent: those are enforcement,
9
+ * which only the server can own.
10
+ *
11
+ * Passed to `SessionViewer` / `NewSessionViewer` (or the underlying
12
+ * flow hooks) by embedders whose product — not the end user — decides
13
+ * what serves the conversation: every execution on the surface (first
14
+ * message, follow-ups, retries) carries the pinned values, and the
15
+ * model picker hides automatically (a control that has no effect must
16
+ * not render).
17
+ *
18
+ * This is presentation-level pinning for product-embedded sessions,
19
+ * not a security boundary — a caller with the session's credentials
20
+ * can still create executions directly. Share/channel surfaces, where
21
+ * the audience is untrusted, get the server-enforced `RunConfig` on
22
+ * their specs instead.
23
+ *
24
+ * Ignored entirely for the `"guest"` audience: guest execution config
25
+ * is owned by the server-side share policy, and guest sends carrying
26
+ * no `modelName` is a pinned invariant.
27
+ */
28
+ export interface SessionRunConfig {
29
+ /**
30
+ * Model every execution runs, as a plain `modelId` from the model
31
+ * registry. Wins over the composer's selection, the persisted
32
+ * Console preference, and the last execution's model.
33
+ */
34
+ readonly modelName?: string;
35
+ /**
36
+ * Service tier for every execution. `"fast"` requires
37
+ * {@link modelName}: the fast tier is a per-model price (the server
38
+ * refuses it fail-closed for Auto), so a tier pin without a model
39
+ * pin is a host configuration error and throws at submit.
40
+ */
41
+ readonly serviceTier?: ServiceTierOption;
42
+ }
43
+
44
+ /**
45
+ * Fail fast on the one statically-wrong shape: `serviceTier: "fast"`
46
+ * with no pinned model. Every layer below (composer gate, server
47
+ * validation) would refuse it anyway — but those surface as an end
48
+ * user's failed send, while this names the embedder's bug at the
49
+ * seam where it was written.
50
+ */
51
+ export function assertValidRunConfig(runConfig: SessionRunConfig): void {
52
+ if (runConfig.serviceTier === "fast" && !runConfig.modelName) {
53
+ throw new Error(
54
+ "SessionRunConfig: serviceTier \"fast\" requires modelName — the fast "
55
+ + "tier is a per-model price and Auto (no pinned model) has no tier "
56
+ + "dimension. Pin the model the surface should run.",
57
+ );
58
+ }
59
+ }