@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
@@ -61,7 +61,8 @@ import {
61
61
  import type { SetupTabProps } from "./facets/SetupTab.js";
62
62
  import { ExecutionPhase } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
63
63
  import type { RuntimeEnvProvider } from "./runtime-env.js";
64
- import type { SessionAudience } from "./audience.js";
64
+ import type { SessionAudience, SessionPanelMode } from "./audience.js";
65
+ import type { SessionRunConfig } from "./run-config.js";
65
66
 
66
67
  /**
67
68
  * Where the approved plan mounts in the implement execution's workspace —
@@ -226,6 +227,66 @@ export interface SessionViewerProps {
226
227
  * @default "integrator"
227
228
  */
228
229
  readonly audience?: SessionAudience;
230
+ /**
231
+ * Owner-pinned model/tier for every execution sent from this viewer
232
+ * (stigmer/stigmer#664) — for product-embedded conversations where
233
+ * the platform, not the end user, decides what serves the session
234
+ * (pair with `audience="endUser"`). A pinned model wins over the
235
+ * composer, the persisted Console preference, and the last
236
+ * execution's model — follow-ups and retries included — and hides
237
+ * the model picker (a control that has no effect must not render).
238
+ * Ignored for the `"guest"` audience, whose execution config the
239
+ * server-side share policy owns. See {@link SessionRunConfig}.
240
+ */
241
+ readonly runConfig?: SessionRunConfig;
242
+ /**
243
+ * Whether the follow-up composer offers the model picker. `false`
244
+ * hides the picker while keeping the SDK's model sourcing (persisted
245
+ * preference, then the last execution's model) — for hosts whose
246
+ * surrounding surface owns model choice without pinning it. Forced
247
+ * off by a {@link SessionViewerProps.runConfig} model pin and for the
248
+ * `"guest"` audience.
249
+ *
250
+ * @default true
251
+ */
252
+ readonly showModelSelector?: boolean;
253
+ /**
254
+ * Whether the viewer offers the session panel at all. `"none"` removes the
255
+ * panel AND its toggle chip, suppresses plan-mode auto-open, and lets
256
+ * transcript file paths keep their default copy behavior — for hosts whose
257
+ * surrounding surface already renders the workspace — while keeping every
258
+ * composer capability the audience allows. This is the panel half of what
259
+ * `audience="guest"` does, WITHOUT guest's composer strip-down; guest
260
+ * still forces it regardless of this prop. A union (not a boolean) so a
261
+ * future mode (e.g. a host-rendered panel) extends rather than breaks it.
262
+ *
263
+ * @default "auto"
264
+ */
265
+ readonly panel?: SessionPanelMode;
266
+ /**
267
+ * Initial open state of the session panel in uncontrolled mode — a docking
268
+ * host that wants the workspace visible from the first paint passes `true`.
269
+ * Ignored when {@link SessionViewerProps.panelOpen} is provided.
270
+ *
271
+ * @default false
272
+ */
273
+ readonly defaultPanelOpen?: boolean;
274
+ /**
275
+ * Controlled open state of the session panel. When provided, the host owns
276
+ * the panel: the chip toggle, file/plan/artifact opens, and plan-mode
277
+ * auto-open surface through {@link SessionViewerProps.onPanelOpenChange}
278
+ * instead of flipping state, and the panel follows this value. Leave
279
+ * `undefined` for the self-managing default.
280
+ */
281
+ readonly panelOpen?: boolean;
282
+ /**
283
+ * Called on every panel open/close transition, in BOTH modes — pass it
284
+ * alone (uncontrolled) to simply observe the panel, e.g. widening a docked
285
+ * pane when a streaming plan auto-opens it and reclaiming the room on
286
+ * close. See {@link UseSessionPanelOptions.onOpenChange} for the exact
287
+ * request-vs-transition semantics in each mode.
288
+ */
289
+ readonly onPanelOpenChange?: (open: boolean) => void;
229
290
  /**
230
291
  * Slot for host-injected header actions. Rendered in the top-right corner
231
292
  * of the viewer, beside the panel chip. Keeps the SDK organism
@@ -306,15 +367,32 @@ export function SessionViewer({
306
367
  workspaceContentSearcher,
307
368
  getRuntimeEnv,
308
369
  audience = "integrator",
370
+ runConfig,
371
+ showModelSelector = true,
372
+ panel: panelMode = "auto",
373
+ defaultPanelOpen,
374
+ panelOpen,
375
+ onPanelOpenChange,
309
376
  headerActions,
310
377
  accessSlot,
311
378
  onApplied,
312
379
  threadSlots,
313
380
  className,
314
381
  }: SessionViewerProps) {
315
- const flow = useSessionPageFlow({ sessionId, org, getRuntimeEnv, audience });
382
+ const flow = useSessionPageFlow({
383
+ sessionId,
384
+ org,
385
+ getRuntimeEnv,
386
+ audience,
387
+ runConfig,
388
+ });
316
389
  const { conv } = flow;
317
390
  const isGuest = audience === "guest";
391
+ // A pinned model makes the picker a dead control (the pin wins over any
392
+ // choice it could offer), so the pin forces it hidden; the guest strip
393
+ // and the host's explicit opt-out compose with it.
394
+ const modelSelectorVisible =
395
+ showModelSelector && !isGuest && runConfig?.modelName === undefined;
318
396
  // Channel-originated sessions (Slack/WhatsApp conversations owned by the
319
397
  // channel runtime) are read-only for every console caller — the server
320
398
  // grants channel viewers can_view without can_create_execution_in — so the
@@ -326,6 +404,12 @@ export function SessionViewer({
326
404
  // Curated audiences (endUser, guest, observer) lock the agent and hide the
327
405
  // integrator configuration; guest and observer add their own restrictions.
328
406
  const isCurated = audience !== "integrator" || isObserver;
407
+ // The one flag every panel affordance keys on: the host opted out
408
+ // (`panel="none"`) or the audience forbids it (guests have no business
409
+ // with session configuration). Everything the panel touches — the chip,
410
+ // the region, plan auto-open, transcript path clicks — gates on this, so
411
+ // the four affordances can never drift apart.
412
+ const panelEnabled = panelMode !== "none" && !isGuest;
329
413
 
330
414
  const [modelId, setModelId] = flow.model;
331
415
  const [interactionMode, setInteractionMode] = flow.interactionMode;
@@ -405,9 +489,16 @@ export function SessionViewer({
405
489
  const panel = useSessionPanel({
406
490
  phase: hasPhase ? phase : null,
407
491
  hasChanges: hasWriteBacks,
408
- // A streaming plan auto-opens the panel via its key — but guests have
409
- // no panel, so the trigger is suppressed along with the chip.
410
- planKey: isGuest ? null : panelPlanKey,
492
+ // A streaming plan auto-opens the panel via its key — but a viewer
493
+ // without a panel (guest, or panel="none") suppresses the trigger
494
+ // along with the chip.
495
+ planKey: panelEnabled ? panelPlanKey : null,
496
+ // With the panel disabled the controller is pinned controlled-closed
497
+ // and unobserved — airtight inertness, not just hidden UI: no intent
498
+ // can flip state or reach the host's callback.
499
+ open: panelEnabled ? panelOpen : false,
500
+ defaultOpen: defaultPanelOpen,
501
+ onOpenChange: panelEnabled ? onPanelOpenChange : undefined,
411
502
  });
412
503
 
413
504
  const handleBuildFromPlan = useCallback(() => {
@@ -520,10 +611,10 @@ export function SessionViewer({
520
611
  // (which subscribes), never this streaming column.
521
612
  const handleTranscriptFilePathClick = useCallback(
522
613
  (path: string): boolean => {
523
- // Guests have no panel (and no file viewer), so paths keep their
524
- // default copy behavior instead of opening a surface that cannot
525
- // render.
526
- if (isGuest) return false;
614
+ // No panel (guest, or panel="none") means no file viewer, so paths
615
+ // keep their default copy behavior instead of opening a surface that
616
+ // cannot render.
617
+ if (!panelEnabled) return false;
527
618
  const selection = resolveWorkspaceFileSelection(
528
619
  path,
529
620
  flow.workspace.entries,
@@ -533,7 +624,7 @@ export function SessionViewer({
533
624
  panel.openFile(selection.entryId, selection.path);
534
625
  return true;
535
626
  },
536
- [isGuest, flow.workspace.entries, flow.sandboxWorkspaceRoot, panel.openFile],
627
+ [panelEnabled, flow.workspace.entries, flow.sandboxWorkspaceRoot, panel.openFile],
537
628
  );
538
629
 
539
630
  if (conv.isLoading) {
@@ -558,12 +649,12 @@ export function SessionViewer({
558
649
  // Top-right controls: host actions + the panel chip. The chip is the
559
650
  // panel's always-mounted toggle; while collapsed it carries only the
560
651
  // pending-item count. Execution status is never surfaced as header
561
- // chrome — the thread itself communicates run state. Guests get no
562
- // chip: the panel exposes session configuration a visitor has no
563
- // business with, so its only toggle is simply absent.
652
+ // chrome — the thread itself communicates run state. A viewer without
653
+ // a panel (guests session configuration is not a visitor's business
654
+ // or a host's panel="none") has no toggle: it is simply absent.
564
655
  headerActions={headerActions}
565
656
  chip={
566
- !isGuest ? (
657
+ panelEnabled ? (
567
658
  <SessionPanelChip
568
659
  isOpen={panel.isOpen}
569
660
  onToggle={panel.isOpen ? panel.closePanel : panel.openPanel}
@@ -594,11 +685,12 @@ export function SessionViewer({
594
685
  isCurated={isCurated}
595
686
  isGuest={isGuest}
596
687
  isObserver={isObserver}
688
+ modelSelectorVisible={modelSelectorVisible}
597
689
  threadSlots={threadSlots}
598
690
  />
599
691
  }
600
692
  panel={
601
- panel.isOpen && !isGuest ? (
693
+ panel.isOpen && panelEnabled ? (
602
694
  <SessionPanelRegion
603
695
  flow={flow}
604
696
  org={org}
@@ -675,6 +767,13 @@ interface ConversationColumnProps {
675
767
  * stream indicators stay (watching an in-flight turn is the point).
676
768
  */
677
769
  readonly isObserver: boolean;
770
+ /**
771
+ * Whether the composer offers the model picker — the composed result
772
+ * of the host's `showModelSelector`, the guest strip, and a
773
+ * `runConfig` model pin (a pinned model makes the picker a dead
774
+ * control, so the pin forces it hidden).
775
+ */
776
+ readonly modelSelectorVisible: boolean;
678
777
  readonly threadSlots?: MessageThreadSlots;
679
778
  }
680
779
 
@@ -699,6 +798,7 @@ const ConversationColumn = memo(function ConversationColumn({
699
798
  isCurated,
700
799
  isGuest,
701
800
  isObserver,
801
+ modelSelectorVisible,
702
802
  threadSlots,
703
803
  }: ConversationColumnProps) {
704
804
  const { conv } = flow;
@@ -891,7 +991,7 @@ const ConversationColumn = memo(function ConversationColumn({
891
991
  interactionMode={interactionMode}
892
992
  onInteractionModeChange={setInteractionMode}
893
993
  showInteractionModePicker={!isGuest}
894
- showModelSelector={!isGuest}
994
+ showModelSelector={modelSelectorVisible}
895
995
  enableAttachments={!isGuest}
896
996
  workspace={isGuest ? undefined : flow.workspace}
897
997
  gitHubConnection={isGuest ? undefined : gitHubConnection}
@@ -1290,7 +1390,10 @@ function SessionStarting() {
1290
1390
  * Low-weight, always-visible indicator shown while the session-scoped
1291
1391
  * auto-approve preference is active. The "Turn off" control reverts the
1292
1392
  * preference in one click — the safety affordance for "Approve & don't ask
1293
- * again". Nothing about approvals appears until the user opts in at a gate.
1393
+ * again". Visible from the first render when the host pre-armed the
1394
+ * preference via `StigmerProvider`'s `approvalDefaults` (#302); otherwise
1395
+ * nothing about approvals appears until the user opts in at a gate. Either
1396
+ * way the user keeps the last word.
1294
1397
  */
1295
1398
  function AutoApproveIndicator({ onTurnOff }: { onTurnOff: () => void }) {
1296
1399
  return (
@@ -441,3 +441,79 @@ describe("SessionViewer — audience wiring", () => {
441
441
  expect(alert.textContent).toContain("token mint failed");
442
442
  });
443
443
  });
444
+
445
+ describe("owner-pinned runConfig wiring (#664)", () => {
446
+ const PIN = { modelName: "pinned-model", serviceTier: "fast" } as const;
447
+
448
+ it("SessionViewer forwards runConfig to the flow and hides the model picker (no dead controls)", () => {
449
+ render(
450
+ <SessionViewer sessionId="ses_1" org="acme" audience="endUser" runConfig={PIN} />,
451
+ );
452
+
453
+ expect(mockUseSessionPageFlow).toHaveBeenCalledWith(
454
+ expect.objectContaining({ runConfig: PIN }),
455
+ );
456
+ expect(lastComposerProps().showModelSelector).toBe(false);
457
+ });
458
+
459
+ it("SessionViewer keeps the picker for endUser without a pin (the #167 curation contract)", () => {
460
+ render(<SessionViewer sessionId="ses_1" org="acme" audience="endUser" />);
461
+
462
+ expect(lastComposerProps().showModelSelector).toBe(true);
463
+ });
464
+
465
+ it("SessionViewer honors showModelSelector={false} alone — hidden picker, no pin", () => {
466
+ render(
467
+ <SessionViewer sessionId="ses_1" org="acme" showModelSelector={false} />,
468
+ );
469
+
470
+ expect(mockUseSessionPageFlow).toHaveBeenCalledWith(
471
+ expect.objectContaining({ runConfig: undefined }),
472
+ );
473
+ expect(lastComposerProps().showModelSelector).toBe(false);
474
+ });
475
+
476
+ it("SessionViewer: a tier-only pin (no model) keeps the picker — nothing pins the model", () => {
477
+ // The flow hook itself rejects this shape at render (fail-fast, covered
478
+ // by its own suite); the wiring contract here is only that picker
479
+ // visibility keys on the MODEL pin, never on the tier.
480
+ render(
481
+ <SessionViewer
482
+ sessionId="ses_1"
483
+ org="acme"
484
+ runConfig={{ serviceTier: "standard" }}
485
+ />,
486
+ );
487
+
488
+ expect(lastComposerProps().showModelSelector).toBe(true);
489
+ });
490
+
491
+ it("NewSessionViewer forwards runConfig to the flow and hides the model picker (DD-016 parity)", () => {
492
+ render(
493
+ <NewSessionViewer
494
+ org="acme"
495
+ onSessionCreated={vi.fn()}
496
+ audience="endUser"
497
+ initialAgentRef={AGENT_REF}
498
+ runConfig={PIN}
499
+ />,
500
+ );
501
+
502
+ expect(mockUseNewSessionFlow).toHaveBeenCalledWith(
503
+ expect.objectContaining({ runConfig: PIN }),
504
+ );
505
+ expect(lastComposerProps().showModelSelector).toBe(false);
506
+ });
507
+
508
+ it("NewSessionViewer honors showModelSelector={false} alone (DD-016 parity)", () => {
509
+ render(
510
+ <NewSessionViewer
511
+ org="acme"
512
+ onSessionCreated={vi.fn()}
513
+ showModelSelector={false}
514
+ />,
515
+ );
516
+
517
+ expect(lastComposerProps().showModelSelector).toBe(false);
518
+ });
519
+ });
@@ -0,0 +1,302 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
+ import { render, screen, cleanup, fireEvent } from "@testing-library/react";
3
+
4
+ // ---------------------------------------------------------------------------
5
+ // Wiring-contract tests for the session panel's host-negotiation surface
6
+ // (issue #300): `panel="none"` omission, `defaultPanelOpen`, and the
7
+ // controlled/observed `panelOpen` + `onPanelOpenChange` pair on both session
8
+ // organisms.
9
+ //
10
+ // The contract under test is the one the PanelChip's aria labels already
11
+ // promise ("Show panel"/"Hide panel") — the same seam the issue's filer
12
+ // watched with a MutationObserver. These tests are what retires that
13
+ // workaround: every open/close beat must reach `onPanelOpenChange`.
14
+ //
15
+ // Same probe/stub setup as audienceWiring.test.tsx: the composer and thread
16
+ // are prop-capturing probes; the flow hooks are stubbed to a loaded state.
17
+ // ---------------------------------------------------------------------------
18
+
19
+ type CapturedProps = Record<string, unknown>;
20
+
21
+ const composerProps: CapturedProps[] = [];
22
+ vi.mock("../../composer", async (importOriginal) => {
23
+ const actual = await importOriginal<typeof import("../../composer")>();
24
+ return {
25
+ ...actual,
26
+ SessionComposer: (props: CapturedProps) => {
27
+ composerProps.push(props);
28
+ return <div data-testid="composer-probe" />;
29
+ },
30
+ };
31
+ });
32
+
33
+ vi.mock("../facets/SetupTab", () => ({
34
+ SetupTab: () => <div data-testid="setup-probe" />,
35
+ }));
36
+
37
+ vi.mock("../../execution/MessageThread", () => ({
38
+ MessageThread: () => <div data-testid="thread-probe" />,
39
+ }));
40
+
41
+ const stubWorkspace = {
42
+ entries: [],
43
+ hasEntries: false,
44
+ toInput: vi.fn().mockReturnValue([]),
45
+ addGitRepo: vi.fn(),
46
+ addLocalPath: vi.fn(),
47
+ removeEntry: vi.fn(),
48
+ clear: vi.fn(),
49
+ };
50
+
51
+ const stubSessionVariables = { entries: [], isEmpty: true, clear: vi.fn() };
52
+
53
+ const stubNewSessionFlow = {
54
+ harness: "native" as const,
55
+ setHarness: vi.fn(),
56
+ modelId: undefined,
57
+ setModelId: vi.fn(),
58
+ agentRef: { org: "acme", slug: "support-bot" },
59
+ setAgentRef: vi.fn(),
60
+ resolution: null,
61
+ setResolution: vi.fn(),
62
+ mcpServerUsages: [],
63
+ setMcpServerUsages: vi.fn(),
64
+ skillRefs: [],
65
+ setSkillRefs: vi.fn(),
66
+ workspace: stubWorkspace,
67
+ sessionVariables: stubSessionVariables,
68
+ isSubmitting: false,
69
+ submitError: null,
70
+ submit: vi.fn(),
71
+ };
72
+ vi.mock("../useNewSessionFlow", () => ({
73
+ useNewSessionFlow: () => stubNewSessionFlow,
74
+ }));
75
+
76
+ const stubConv = {
77
+ session: { spec: {} },
78
+ isLoading: false,
79
+ loadError: null,
80
+ completedExecutions: [],
81
+ activeStreamExecution: null,
82
+ activePhase: null,
83
+ isStreaming: false,
84
+ isConnecting: false,
85
+ sendFollowUp: vi.fn(),
86
+ canSendFollowUp: true,
87
+ isSending: false,
88
+ sendError: null,
89
+ clearSendError: vi.fn(),
90
+ retryLastSend: vi.fn(),
91
+ pendingUserMessage: null,
92
+ workspaceEntries: [],
93
+ mcpServerUsages: [],
94
+ skillRefs: [],
95
+ pendingApprovals: [],
96
+ submitApproval: vi.fn(),
97
+ submittingApprovalIds: new Set<string>(),
98
+ fileChangeSets: [],
99
+ submitFileDecision: vi.fn(),
100
+ submittingFileDecisionKeys: new Set<string>(),
101
+ fileDecisionErrors: new Map<string, Error>(),
102
+ streamError: null,
103
+ reconnectStream: vi.fn(),
104
+ approvalError: null,
105
+ };
106
+
107
+ const stubSessionPageFlow = {
108
+ conv: stubConv,
109
+ harness: "native" as const,
110
+ executionTarget: undefined,
111
+ model: [undefined, vi.fn()] as const,
112
+ interactionMode: ["agent" as const, vi.fn()] as const,
113
+ agentRef: { org: "acme", slug: "support-bot" },
114
+ setAgentRef: vi.fn(),
115
+ resolution: null,
116
+ setResolution: vi.fn(),
117
+ isDefaultAgent: false,
118
+ mcpServerUsages: [],
119
+ setMcpServerUsages: vi.fn(),
120
+ skillRefs: [],
121
+ setSkillRefs: vi.fn(),
122
+ workspace: stubWorkspace,
123
+ sessionVariables: stubSessionVariables,
124
+ autoApproveAll: false,
125
+ setAutoApproveAll: vi.fn(),
126
+ submitApproval: vi.fn(),
127
+ handleSubmit: vi.fn(),
128
+ submitError: null as Error | null,
129
+ displayExecution: null,
130
+ allExecutions: [],
131
+ sandboxWorkspaceRoot: undefined,
132
+ };
133
+ vi.mock("../useSessionPageFlow", () => ({
134
+ useSessionPageFlow: () => stubSessionPageFlow,
135
+ }));
136
+
137
+ vi.mock("../../hooks", () => ({
138
+ useStigmer: () => ({
139
+ agentExecution: {
140
+ uploadAttachment: vi.fn(),
141
+ getArtifactContent: vi.fn(),
142
+ },
143
+ }),
144
+ }));
145
+
146
+ import { NewSessionViewer } from "../NewSessionViewer";
147
+ import { SessionViewer } from "../SessionViewer";
148
+
149
+ function lastComposerProps(): CapturedProps {
150
+ expect(composerProps.length).toBeGreaterThan(0);
151
+ return composerProps.at(-1)!;
152
+ }
153
+
154
+ function chipButton(): HTMLElement | null {
155
+ return (
156
+ screen.queryByRole("button", { name: "Show panel" }) ??
157
+ screen.queryByRole("button", { name: "Hide panel" })
158
+ );
159
+ }
160
+
161
+ beforeEach(() => {
162
+ composerProps.length = 0;
163
+ });
164
+
165
+ afterEach(() => {
166
+ cleanup();
167
+ vi.clearAllMocks();
168
+ });
169
+
170
+ describe("SessionViewer — panel=\"none\"", () => {
171
+ it("removes the chip and never renders the panel", () => {
172
+ render(<SessionViewer sessionId="ses_1" org="acme" panel="none" />);
173
+ expect(chipButton()).toBeNull();
174
+ });
175
+
176
+ it("keeps every composer capability the audience allows — the guest contrast", () => {
177
+ // The point of panel="none": omission WITHOUT audience="guest"'s
178
+ // composer strip-down. Assert the exact capabilities guest removes.
179
+ render(<SessionViewer sessionId="ses_1" org="acme" panel="none" />);
180
+
181
+ const props = lastComposerProps();
182
+ expect(props.showInteractionModePicker).toBe(true);
183
+ expect(props.showModelSelector).toBe(true);
184
+ expect(props.enableAttachments).toBe(true);
185
+ expect(props.lockAgent).toBe(false);
186
+ expect(props.onMcpServerUsagesChange).toBeDefined();
187
+ });
188
+
189
+ it("keeps controlled props inert — panelOpen cannot force a surface that does not exist", () => {
190
+ const onPanelOpenChange = vi.fn();
191
+ render(
192
+ <SessionViewer
193
+ sessionId="ses_1"
194
+ org="acme"
195
+ panel="none"
196
+ panelOpen={true}
197
+ onPanelOpenChange={onPanelOpenChange}
198
+ />,
199
+ );
200
+ expect(chipButton()).toBeNull();
201
+ expect(onPanelOpenChange).not.toHaveBeenCalled();
202
+ });
203
+ });
204
+
205
+ describe("SessionViewer — observed panel state (uncontrolled + onPanelOpenChange)", () => {
206
+ it("reports chip toggles — the seam that retires the aria-expanded MutationObserver", () => {
207
+ const seen: boolean[] = [];
208
+ render(
209
+ <SessionViewer
210
+ sessionId="ses_1"
211
+ org="acme"
212
+ onPanelOpenChange={(open) => seen.push(open)}
213
+ />,
214
+ );
215
+
216
+ fireEvent.click(screen.getByRole("button", { name: "Show panel" }));
217
+ expect(seen).toEqual([true]);
218
+ fireEvent.click(screen.getByRole("button", { name: "Hide panel" }));
219
+ expect(seen).toEqual([true, false]);
220
+ });
221
+
222
+ it("starts open with defaultPanelOpen, without a spurious notification", () => {
223
+ const onPanelOpenChange = vi.fn();
224
+ render(
225
+ <SessionViewer
226
+ sessionId="ses_1"
227
+ org="acme"
228
+ defaultPanelOpen
229
+ onPanelOpenChange={onPanelOpenChange}
230
+ />,
231
+ );
232
+
233
+ expect(screen.getByRole("button", { name: "Hide panel" })).toBeDefined();
234
+ expect(onPanelOpenChange).not.toHaveBeenCalled();
235
+ });
236
+ });
237
+
238
+ describe("SessionViewer — controlled panel state", () => {
239
+ it("follows panelOpen and surfaces the chip's request without applying it", () => {
240
+ const seen: boolean[] = [];
241
+ const onPanelOpenChange = (open: boolean) => seen.push(open);
242
+ const { rerender } = render(
243
+ <SessionViewer
244
+ sessionId="ses_1"
245
+ org="acme"
246
+ panelOpen={false}
247
+ onPanelOpenChange={onPanelOpenChange}
248
+ />,
249
+ );
250
+
251
+ // The chip requests; the host owns the state — nothing moves yet.
252
+ fireEvent.click(screen.getByRole("button", { name: "Show panel" }));
253
+ expect(seen).toEqual([true]);
254
+ expect(screen.getByRole("button", { name: "Show panel" })).toBeDefined();
255
+
256
+ // The host grants the request: the panel opens and the chip flips.
257
+ rerender(
258
+ <SessionViewer
259
+ sessionId="ses_1"
260
+ org="acme"
261
+ panelOpen={true}
262
+ onPanelOpenChange={onPanelOpenChange}
263
+ />,
264
+ );
265
+ expect(screen.getByRole("button", { name: "Hide panel" })).toBeDefined();
266
+ });
267
+ });
268
+
269
+ describe("NewSessionViewer — panel negotiation (DD-016 parity)", () => {
270
+ it("panel=\"none\" removes the chip while the composer keeps its capabilities", () => {
271
+ render(
272
+ <NewSessionViewer org="acme" onSessionCreated={vi.fn()} panel="none" />,
273
+ );
274
+
275
+ expect(chipButton()).toBeNull();
276
+ const props = lastComposerProps();
277
+ expect(props.showInteractionModePicker).toBe(true);
278
+ expect(props.lockAgent).toBe(false);
279
+ });
280
+
281
+ it("reports chip toggles through onPanelOpenChange", () => {
282
+ const seen: boolean[] = [];
283
+ render(
284
+ <NewSessionViewer
285
+ org="acme"
286
+ onSessionCreated={vi.fn()}
287
+ onPanelOpenChange={(open) => seen.push(open)}
288
+ />,
289
+ );
290
+
291
+ fireEvent.click(screen.getByRole("button", { name: "Show panel" }));
292
+ fireEvent.click(screen.getByRole("button", { name: "Hide panel" }));
293
+ expect(seen).toEqual([true, false]);
294
+ });
295
+
296
+ it("starts open with defaultPanelOpen", () => {
297
+ render(
298
+ <NewSessionViewer org="acme" onSessionCreated={vi.fn()} defaultPanelOpen />,
299
+ );
300
+ expect(screen.getByRole("button", { name: "Hide panel" })).toBeDefined();
301
+ });
302
+ });