@stigmer/react 3.12.3 → 3.12.5

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 (493) hide show
  1. package/agent/steps/IdentityStep.d.ts.map +1 -1
  2. package/agent/steps/IdentityStep.js +2 -1
  3. package/agent/steps/IdentityStep.js.map +1 -1
  4. package/agent-instance/AgentInstanceDetailPanel.d.ts.map +1 -1
  5. package/agent-instance/AgentInstanceDetailPanel.js +2 -1
  6. package/agent-instance/AgentInstanceDetailPanel.js.map +1 -1
  7. package/api-key/CreateApiKeyForm.d.ts.map +1 -1
  8. package/api-key/CreateApiKeyForm.js +2 -1
  9. package/api-key/CreateApiKeyForm.js.map +1 -1
  10. package/attachment/AttachmentChipList.js +16 -6
  11. package/attachment/AttachmentChipList.js.map +1 -1
  12. package/attachment/index.d.ts +1 -1
  13. package/attachment/index.d.ts.map +1 -1
  14. package/attachment/index.js.map +1 -1
  15. package/attachment/useAttachments.d.ts +51 -8
  16. package/attachment/useAttachments.d.ts.map +1 -1
  17. package/attachment/useAttachments.js +74 -3
  18. package/attachment/useAttachments.js.map +1 -1
  19. package/channel/ChannelConversationsDialog.d.ts.map +1 -1
  20. package/channel/ChannelConversationsDialog.js +2 -1
  21. package/channel/ChannelConversationsDialog.js.map +1 -1
  22. package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
  23. package/channel/ChannelTemplatesDialog.js +2 -1
  24. package/channel/ChannelTemplatesDialog.js.map +1 -1
  25. package/channel/ConnectSlackDialog.d.ts.map +1 -1
  26. package/channel/ConnectSlackDialog.js +2 -1
  27. package/channel/ConnectSlackDialog.js.map +1 -1
  28. package/channel/connect/ServingAppSection.d.ts.map +1 -1
  29. package/channel/connect/ServingAppSection.js +2 -1
  30. package/channel/connect/ServingAppSection.js.map +1 -1
  31. package/channel-app/CreateChannelAppForm.d.ts.map +1 -1
  32. package/channel-app/CreateChannelAppForm.js +2 -1
  33. package/channel-app/CreateChannelAppForm.js.map +1 -1
  34. package/composer/SessionComposer.d.ts.map +1 -1
  35. package/composer/SessionComposer.js +17 -10
  36. package/composer/SessionComposer.js.map +1 -1
  37. package/conversation/ConversationComposer.d.ts +19 -3
  38. package/conversation/ConversationComposer.d.ts.map +1 -1
  39. package/conversation/ConversationComposer.js +4 -4
  40. package/conversation/ConversationComposer.js.map +1 -1
  41. package/conversation/ConversationListPane.d.ts.map +1 -1
  42. package/conversation/ConversationListPane.js +2 -1
  43. package/conversation/ConversationListPane.js.map +1 -1
  44. package/conversation/ConversationTemplatePickerDialog.d.ts +63 -0
  45. package/conversation/ConversationTemplatePickerDialog.d.ts.map +1 -0
  46. package/conversation/ConversationTemplatePickerDialog.js +151 -0
  47. package/conversation/ConversationTemplatePickerDialog.js.map +1 -0
  48. package/conversation/ConversationTimelineView.d.ts.map +1 -1
  49. package/conversation/ConversationTimelineView.js +2 -1
  50. package/conversation/ConversationTimelineView.js.map +1 -1
  51. package/conversation/ConversationsWorkbench.d.ts.map +1 -1
  52. package/conversation/ConversationsWorkbench.js +16 -5
  53. package/conversation/ConversationsWorkbench.js.map +1 -1
  54. package/conversation/index.d.ts +3 -1
  55. package/conversation/index.d.ts.map +1 -1
  56. package/conversation/index.js +1 -0
  57. package/conversation/index.js.map +1 -1
  58. package/conversation/useConversationParticipation.d.ts +41 -4
  59. package/conversation/useConversationParticipation.d.ts.map +1 -1
  60. package/conversation/useConversationParticipation.js +13 -2
  61. package/conversation/useConversationParticipation.js.map +1 -1
  62. package/cursor-accounts/CursorAccountsConsole.d.ts.map +1 -1
  63. package/cursor-accounts/CursorAccountsConsole.js +2 -1
  64. package/cursor-accounts/CursorAccountsConsole.js.map +1 -1
  65. package/cursor-accounts/MemberKeysPanel.d.ts.map +1 -1
  66. package/cursor-accounts/MemberKeysPanel.js +2 -1
  67. package/cursor-accounts/MemberKeysPanel.js.map +1 -1
  68. package/dashboard/DashboardFailedRuns.d.ts.map +1 -1
  69. package/dashboard/DashboardFailedRuns.js +2 -1
  70. package/dashboard/DashboardFailedRuns.js.map +1 -1
  71. package/dependency-graph/DependencyGraph.d.ts.map +1 -1
  72. package/dependency-graph/DependencyGraph.js +2 -1
  73. package/dependency-graph/DependencyGraph.js.map +1 -1
  74. package/dependency-graph/DependencyTreeNode.d.ts.map +1 -1
  75. package/dependency-graph/DependencyTreeNode.js +2 -1
  76. package/dependency-graph/DependencyTreeNode.js.map +1 -1
  77. package/environment/EnvironmentPicker.d.ts.map +1 -1
  78. package/environment/EnvironmentPicker.js +2 -1
  79. package/environment/EnvironmentPicker.js.map +1 -1
  80. package/error/SecretFlowErrorGuide.d.ts.map +1 -1
  81. package/error/SecretFlowErrorGuide.js +2 -1
  82. package/error/SecretFlowErrorGuide.js.map +1 -1
  83. package/execution/ArtifactContentBody.d.ts.map +1 -1
  84. package/execution/ArtifactContentBody.js +2 -1
  85. package/execution/ArtifactContentBody.js.map +1 -1
  86. package/execution/ArtifactsWidget.d.ts.map +1 -1
  87. package/execution/ArtifactsWidget.js +2 -1
  88. package/execution/ArtifactsWidget.js.map +1 -1
  89. package/execution/FileChangeProgressBar.d.ts.map +1 -1
  90. package/execution/FileChangeProgressBar.js +2 -1
  91. package/execution/FileChangeProgressBar.js.map +1 -1
  92. package/execution/TodoList.d.ts.map +1 -1
  93. package/execution/TodoList.js +2 -1
  94. package/execution/TodoList.js.map +1 -1
  95. package/execution/WriteBacksWidget.d.ts.map +1 -1
  96. package/execution/WriteBacksWidget.js +2 -1
  97. package/execution/WriteBacksWidget.js.map +1 -1
  98. package/execution/tool-categories.d.ts +5 -22
  99. package/execution/tool-categories.d.ts.map +1 -1
  100. package/execution/tool-categories.js +8 -38
  101. package/execution/tool-categories.js.map +1 -1
  102. package/iam-policy/PeopleWithAccess.d.ts.map +1 -1
  103. package/iam-policy/PeopleWithAccess.js +2 -1
  104. package/iam-policy/PeopleWithAccess.js.map +1 -1
  105. package/iam-policy/PrincipalPicker.d.ts.map +1 -1
  106. package/iam-policy/PrincipalPicker.js +2 -1
  107. package/iam-policy/PrincipalPicker.js.map +1 -1
  108. package/iam-policy/RoleSelector.d.ts.map +1 -1
  109. package/iam-policy/RoleSelector.js +2 -1
  110. package/iam-policy/RoleSelector.js.map +1 -1
  111. package/identity-account/AccountPreferencesPanel.d.ts +35 -0
  112. package/identity-account/AccountPreferencesPanel.d.ts.map +1 -0
  113. package/identity-account/AccountPreferencesPanel.js +187 -0
  114. package/identity-account/AccountPreferencesPanel.js.map +1 -0
  115. package/identity-account/index.d.ts +8 -0
  116. package/identity-account/index.d.ts.map +1 -1
  117. package/identity-account/index.js +4 -0
  118. package/identity-account/index.js.map +1 -1
  119. package/identity-account/useAccountExecutionDefaults.d.ts +36 -0
  120. package/identity-account/useAccountExecutionDefaults.d.ts.map +1 -0
  121. package/identity-account/useAccountExecutionDefaults.js +46 -0
  122. package/identity-account/useAccountExecutionDefaults.js.map +1 -0
  123. package/identity-account/useMyIdentityAccount.d.ts +55 -0
  124. package/identity-account/useMyIdentityAccount.d.ts.map +1 -0
  125. package/identity-account/useMyIdentityAccount.js +37 -0
  126. package/identity-account/useMyIdentityAccount.js.map +1 -0
  127. package/identity-account/useUpdateIdentityAccount.d.ts +42 -0
  128. package/identity-account/useUpdateIdentityAccount.d.ts.map +1 -0
  129. package/identity-account/useUpdateIdentityAccount.js +53 -0
  130. package/identity-account/useUpdateIdentityAccount.js.map +1 -0
  131. package/identity-provider/CreateIdentityProviderForm.d.ts.map +1 -1
  132. package/identity-provider/CreateIdentityProviderForm.js +2 -1
  133. package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
  134. package/identity-provider/IdentityProviderDetailPanel.d.ts.map +1 -1
  135. package/identity-provider/IdentityProviderDetailPanel.js +2 -1
  136. package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
  137. package/identity-provider/IdentityProviderWizard.d.ts.map +1 -1
  138. package/identity-provider/IdentityProviderWizard.js +2 -1
  139. package/identity-provider/IdentityProviderWizard.js.map +1 -1
  140. package/index.d.ts +14 -10
  141. package/index.d.ts.map +1 -1
  142. package/index.js +11 -5
  143. package/index.js.map +1 -1
  144. package/internal/StandingContextField.d.ts +37 -0
  145. package/internal/StandingContextField.d.ts.map +1 -0
  146. package/internal/StandingContextField.js +24 -0
  147. package/internal/StandingContextField.js.map +1 -0
  148. package/internal/element-resets.d.ts +17 -0
  149. package/internal/element-resets.d.ts.map +1 -0
  150. package/internal/element-resets.js +32 -0
  151. package/internal/element-resets.js.map +1 -0
  152. package/internal/file-tree/FileTreeNode.d.ts.map +1 -1
  153. package/internal/file-tree/FileTreeNode.js +2 -1
  154. package/internal/file-tree/FileTreeNode.js.map +1 -1
  155. package/internal/markdown-components.d.ts +7 -0
  156. package/internal/markdown-components.d.ts.map +1 -1
  157. package/internal/markdown-components.js +15 -5
  158. package/internal/markdown-components.js.map +1 -1
  159. package/invitation/InvitationManager.d.ts.map +1 -1
  160. package/invitation/InvitationManager.js +2 -1
  161. package/invitation/InvitationManager.js.map +1 -1
  162. package/library/InstanceVisibilitySelector.d.ts.map +1 -1
  163. package/library/InstanceVisibilitySelector.js +9 -2
  164. package/library/InstanceVisibilitySelector.js.map +1 -1
  165. package/library/ResourceVisibilityControl.d.ts +13 -3
  166. package/library/ResourceVisibilityControl.d.ts.map +1 -1
  167. package/library/ResourceVisibilityControl.js +33 -5
  168. package/library/ResourceVisibilityControl.js.map +1 -1
  169. package/library/VisibilityOptionRow.d.ts +6 -0
  170. package/library/VisibilityOptionRow.d.ts.map +1 -1
  171. package/library/VisibilityOptionRow.js +11 -1
  172. package/library/VisibilityOptionRow.js.map +1 -1
  173. package/library/VisibilitySelector.d.ts.map +1 -1
  174. package/library/VisibilitySelector.js +14 -2
  175. package/library/VisibilitySelector.js.map +1 -1
  176. package/library/index.d.ts +4 -2
  177. package/library/index.d.ts.map +1 -1
  178. package/library/index.js +2 -1
  179. package/library/index.js.map +1 -1
  180. package/library/useCanSetPublicVisibility.d.ts +30 -0
  181. package/library/useCanSetPublicVisibility.d.ts.map +1 -0
  182. package/library/useCanSetPublicVisibility.js +41 -0
  183. package/library/useCanSetPublicVisibility.js.map +1 -0
  184. package/library/visibilityLevels.d.ts +32 -1
  185. package/library/visibilityLevels.d.ts.map +1 -1
  186. package/library/visibilityLevels.js +34 -14
  187. package/library/visibilityLevels.js.map +1 -1
  188. package/manifest/ApplyManifestDialog.d.ts.map +1 -1
  189. package/manifest/ApplyManifestDialog.js +2 -1
  190. package/manifest/ApplyManifestDialog.js.map +1 -1
  191. package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -1
  192. package/mcp-server/steps/IdentityTransportStep.js +2 -1
  193. package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
  194. package/mcp-server/useMcpServerConnect.d.ts +8 -5
  195. package/mcp-server/useMcpServerConnect.d.ts.map +1 -1
  196. package/mcp-server/useMcpServerConnect.js +2 -1
  197. package/mcp-server/useMcpServerConnect.js.map +1 -1
  198. package/mcp-server/useMcpServerOAuthConnect.d.ts.map +1 -1
  199. package/mcp-server/useMcpServerOAuthConnect.js +7 -2
  200. package/mcp-server/useMcpServerOAuthConnect.js.map +1 -1
  201. package/oauth-app/CreateOAuthAppForm.d.ts +2 -2
  202. package/oauth-app/CreateOAuthAppForm.d.ts.map +1 -1
  203. package/oauth-app/CreateOAuthAppForm.js +13 -4
  204. package/oauth-app/CreateOAuthAppForm.js.map +1 -1
  205. package/oauth-app/OAuthAppDetailPanel.d.ts.map +1 -1
  206. package/oauth-app/OAuthAppDetailPanel.js +32 -5
  207. package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
  208. package/organization/OrgPreferencesPanel.d.ts +32 -0
  209. package/organization/OrgPreferencesPanel.d.ts.map +1 -0
  210. package/organization/OrgPreferencesPanel.js +90 -0
  211. package/organization/OrgPreferencesPanel.js.map +1 -0
  212. package/organization/OrgProfilePanel.d.ts.map +1 -1
  213. package/organization/OrgProfilePanel.js +5 -4
  214. package/organization/OrgProfilePanel.js.map +1 -1
  215. package/organization/index.d.ts +2 -0
  216. package/organization/index.d.ts.map +1 -1
  217. package/organization/index.js +1 -0
  218. package/organization/index.js.map +1 -1
  219. package/package.json +4 -4
  220. package/platform-client/CreatePlatformClientForm.d.ts.map +1 -1
  221. package/platform-client/CreatePlatformClientForm.js +2 -1
  222. package/platform-client/CreatePlatformClientForm.js.map +1 -1
  223. package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
  224. package/platform-client/PlatformClientDetailPanel.js +2 -1
  225. package/platform-client/PlatformClientDetailPanel.js.map +1 -1
  226. package/pricing-governance/BaselineEditor.d.ts.map +1 -1
  227. package/pricing-governance/BaselineEditor.js +2 -1
  228. package/pricing-governance/BaselineEditor.js.map +1 -1
  229. package/pricing-governance/PricingGovernanceConsole.d.ts.map +1 -1
  230. package/pricing-governance/PricingGovernanceConsole.js +2 -1
  231. package/pricing-governance/PricingGovernanceConsole.js.map +1 -1
  232. package/provider-standing/ProviderStandingAccessNotice.d.ts +11 -0
  233. package/provider-standing/ProviderStandingAccessNotice.d.ts.map +1 -0
  234. package/provider-standing/ProviderStandingAccessNotice.js +14 -0
  235. package/provider-standing/ProviderStandingAccessNotice.js.map +1 -0
  236. package/provider-standing/ProviderStandingConsole.d.ts +24 -0
  237. package/provider-standing/ProviderStandingConsole.d.ts.map +1 -0
  238. package/provider-standing/ProviderStandingConsole.js +98 -0
  239. package/provider-standing/ProviderStandingConsole.js.map +1 -0
  240. package/provider-standing/index.d.ts +6 -0
  241. package/provider-standing/index.d.ts.map +1 -0
  242. package/provider-standing/index.js +6 -0
  243. package/provider-standing/index.js.map +1 -0
  244. package/provider-standing/useProviderStanding.d.ts +34 -0
  245. package/provider-standing/useProviderStanding.d.ts.map +1 -0
  246. package/provider-standing/useProviderStanding.js +26 -0
  247. package/provider-standing/useProviderStanding.js.map +1 -0
  248. package/provider.d.ts +12 -0
  249. package/provider.d.ts.map +1 -1
  250. package/provider.js +12 -0
  251. package/provider.js.map +1 -1
  252. package/resource-creation/StepIndicator.d.ts.map +1 -1
  253. package/resource-creation/StepIndicator.js +2 -1
  254. package/resource-creation/StepIndicator.js.map +1 -1
  255. package/schedule/ScheduleDetailView.d.ts.map +1 -1
  256. package/schedule/ScheduleDetailView.js +3 -2
  257. package/schedule/ScheduleDetailView.js.map +1 -1
  258. package/schedule/ScheduleRunsTable.d.ts.map +1 -1
  259. package/schedule/ScheduleRunsTable.js +2 -1
  260. package/schedule/ScheduleRunsTable.js.map +1 -1
  261. package/session/NewSessionViewer.d.ts +10 -1
  262. package/session/NewSessionViewer.d.ts.map +1 -1
  263. package/session/NewSessionViewer.js +2 -1
  264. package/session/NewSessionViewer.js.map +1 -1
  265. package/session/facets/ArtifactsTab.d.ts.map +1 -1
  266. package/session/facets/ArtifactsTab.js +2 -1
  267. package/session/facets/ArtifactsTab.js.map +1 -1
  268. package/session/facets/ChangesTab.d.ts.map +1 -1
  269. package/session/facets/ChangesTab.js +2 -1
  270. package/session/facets/ChangesTab.js.map +1 -1
  271. package/session/facets/UsageTab.d.ts +10 -3
  272. package/session/facets/UsageTab.d.ts.map +1 -1
  273. package/session/facets/UsageTab.js +42 -6
  274. package/session/facets/UsageTab.js.map +1 -1
  275. package/session/index.d.ts +1 -1
  276. package/session/index.d.ts.map +1 -1
  277. package/session/index.js.map +1 -1
  278. package/session/useNewSessionFlow.d.ts +27 -1
  279. package/session/useNewSessionFlow.d.ts.map +1 -1
  280. package/session/useNewSessionFlow.js +45 -8
  281. package/session/useNewSessionFlow.js.map +1 -1
  282. package/session/useSessionUsage.d.ts +25 -0
  283. package/session/useSessionUsage.d.ts.map +1 -1
  284. package/session/useSessionUsage.js +11 -0
  285. package/session/useSessionUsage.js.map +1 -1
  286. package/settings/AccountPreferencesSection.d.ts +3 -0
  287. package/settings/AccountPreferencesSection.d.ts.map +1 -0
  288. package/settings/AccountPreferencesSection.js +10 -0
  289. package/settings/AccountPreferencesSection.js.map +1 -0
  290. package/settings/OrgPreferencesSection.d.ts +3 -0
  291. package/settings/OrgPreferencesSection.d.ts.map +1 -0
  292. package/settings/OrgPreferencesSection.js +13 -0
  293. package/settings/OrgPreferencesSection.js.map +1 -0
  294. package/settings/index.d.ts +2 -0
  295. package/settings/index.d.ts.map +1 -1
  296. package/settings/index.js +2 -0
  297. package/settings/index.js.map +1 -1
  298. package/settings/settings-nav.d.ts.map +1 -1
  299. package/settings/settings-nav.js +23 -1
  300. package/settings/settings-nav.js.map +1 -1
  301. package/settings/useSettingsNavGroups.d.ts.map +1 -1
  302. package/settings/useSettingsNavGroups.js +4 -1
  303. package/settings/useSettingsNavGroups.js.map +1 -1
  304. package/sharing/ShareAgentDialog.d.ts.map +1 -1
  305. package/sharing/ShareAgentDialog.js +2 -1
  306. package/sharing/ShareAgentDialog.js.map +1 -1
  307. package/sidebar/WorkspaceSidebar.d.ts.map +1 -1
  308. package/sidebar/WorkspaceSidebar.js +2 -1
  309. package/sidebar/WorkspaceSidebar.js.map +1 -1
  310. package/skill/SkillFileBrowser.d.ts.map +1 -1
  311. package/skill/SkillFileBrowser.js +2 -1
  312. package/skill/SkillFileBrowser.js.map +1 -1
  313. package/skill/internal/fetchAndUnpackArtifact.d.ts +1 -1
  314. package/skill/internal/fetchAndUnpackArtifact.d.ts.map +1 -1
  315. package/skill/internal/fetchAndUnpackArtifact.js +47 -3
  316. package/skill/internal/fetchAndUnpackArtifact.js.map +1 -1
  317. package/skill/useSkillDiff.d.ts.map +1 -1
  318. package/skill/useSkillDiff.js +7 -1
  319. package/skill/useSkillDiff.js.map +1 -1
  320. package/skill/useSkillUpload.d.ts.map +1 -1
  321. package/skill/useSkillUpload.js +22 -4
  322. package/skill/useSkillUpload.js.map +1 -1
  323. package/src/__tests__/bare-host-resets.layout.test.tsx +184 -0
  324. package/src/agent/steps/IdentityStep.tsx +2 -1
  325. package/src/agent-instance/AgentInstanceDetailPanel.tsx +2 -1
  326. package/src/api-key/CreateApiKeyForm.tsx +2 -1
  327. package/src/attachment/AttachmentChipList.tsx +19 -8
  328. package/src/attachment/__tests__/AttachmentChipList.test.tsx +12 -0
  329. package/src/attachment/__tests__/useAttachments.test.ts +293 -0
  330. package/src/attachment/index.ts +1 -0
  331. package/src/attachment/useAttachments.ts +143 -11
  332. package/src/channel/ChannelConversationsDialog.tsx +2 -1
  333. package/src/channel/ChannelTemplatesDialog.tsx +2 -1
  334. package/src/channel/ConnectSlackDialog.tsx +2 -1
  335. package/src/channel/connect/ServingAppSection.tsx +2 -1
  336. package/src/channel-app/CreateChannelAppForm.tsx +2 -1
  337. package/src/composer/SessionComposer.tsx +23 -14
  338. package/src/conversation/ConversationComposer.tsx +38 -4
  339. package/src/conversation/ConversationListPane.tsx +2 -5
  340. package/src/conversation/ConversationTemplatePickerDialog.tsx +441 -0
  341. package/src/conversation/ConversationTimelineView.tsx +2 -1
  342. package/src/conversation/ConversationsWorkbench.tsx +40 -4
  343. package/src/conversation/__tests__/ConversationComposer.test.tsx +56 -1
  344. package/src/conversation/__tests__/ConversationTemplatePickerDialog.test.tsx +224 -0
  345. package/src/conversation/__tests__/useConversationParticipation.test.tsx +45 -4
  346. package/src/conversation/index.ts +4 -0
  347. package/src/conversation/useConversationParticipation.ts +58 -6
  348. package/src/cursor-accounts/CursorAccountsConsole.tsx +2 -1
  349. package/src/cursor-accounts/MemberKeysPanel.tsx +2 -1
  350. package/src/dashboard/DashboardFailedRuns.tsx +2 -1
  351. package/src/dependency-graph/DependencyGraph.tsx +2 -1
  352. package/src/dependency-graph/DependencyTreeNode.tsx +2 -1
  353. package/src/environment/EnvironmentPicker.tsx +2 -1
  354. package/src/error/SecretFlowErrorGuide.tsx +3 -2
  355. package/src/execution/ArtifactContentBody.tsx +2 -1
  356. package/src/execution/ArtifactsWidget.tsx +2 -1
  357. package/src/execution/FileChangeProgressBar.tsx +2 -1
  358. package/src/execution/TodoList.tsx +2 -1
  359. package/src/execution/WriteBacksWidget.tsx +2 -1
  360. package/src/execution/tool-categories.ts +17 -41
  361. package/src/iam-policy/PeopleWithAccess.tsx +2 -1
  362. package/src/iam-policy/PrincipalPicker.tsx +2 -0
  363. package/src/iam-policy/RoleSelector.tsx +2 -1
  364. package/src/identity-account/AccountPreferencesPanel.tsx +446 -0
  365. package/src/identity-account/__tests__/AccountPreferencesPanel.test.tsx +233 -0
  366. package/src/identity-account/__tests__/useAccountExecutionDefaults.test.tsx +116 -0
  367. package/src/identity-account/__tests__/useMyIdentityAccount.test.tsx +121 -0
  368. package/src/identity-account/index.ts +11 -0
  369. package/src/identity-account/useAccountExecutionDefaults.ts +63 -0
  370. package/src/identity-account/useMyIdentityAccount.ts +75 -0
  371. package/src/identity-account/useUpdateIdentityAccount.ts +73 -0
  372. package/src/identity-provider/CreateIdentityProviderForm.tsx +2 -1
  373. package/src/identity-provider/IdentityProviderDetailPanel.tsx +2 -1
  374. package/src/identity-provider/IdentityProviderWizard.tsx +2 -1
  375. package/src/index.ts +37 -2
  376. package/src/internal/StandingContextField.tsx +92 -0
  377. package/src/internal/element-resets.ts +33 -0
  378. package/src/internal/file-tree/FileTreeNode.tsx +2 -1
  379. package/src/internal/markdown-components.tsx +15 -5
  380. package/src/invitation/InvitationManager.tsx +3 -2
  381. package/src/library/InstanceVisibilitySelector.tsx +9 -2
  382. package/src/library/ResourceVisibilityControl.tsx +46 -13
  383. package/src/library/VisibilityOptionRow.tsx +28 -6
  384. package/src/library/VisibilitySelector.tsx +14 -2
  385. package/src/library/__tests__/VisibilitySelector.test.tsx +48 -1
  386. package/src/library/__tests__/visibilityLevels.test.ts +67 -1
  387. package/src/library/index.ts +6 -1
  388. package/src/library/useCanSetPublicVisibility.ts +56 -0
  389. package/src/library/visibilityLevels.ts +65 -14
  390. package/src/manifest/ApplyManifestDialog.tsx +2 -1
  391. package/src/mcp-server/__tests__/useMcpServerConnect.asyncLane.test.tsx +117 -0
  392. package/src/mcp-server/steps/IdentityTransportStep.tsx +3 -2
  393. package/src/mcp-server/useMcpServerConnect.ts +9 -6
  394. package/src/mcp-server/useMcpServerOAuthConnect.ts +7 -2
  395. package/src/oauth-app/CreateOAuthAppForm.tsx +58 -3
  396. package/src/oauth-app/OAuthAppDetailPanel.tsx +84 -3
  397. package/src/organization/OrgPreferencesPanel.tsx +221 -0
  398. package/src/organization/OrgProfilePanel.tsx +5 -4
  399. package/src/organization/__tests__/OrgPreferencesPanel.test.tsx +145 -0
  400. package/src/organization/__tests__/OrgProfilePanel.test.tsx +108 -0
  401. package/src/organization/index.ts +2 -0
  402. package/src/platform-client/CreatePlatformClientForm.tsx +4 -3
  403. package/src/platform-client/PlatformClientDetailPanel.tsx +4 -3
  404. package/src/pricing-governance/BaselineEditor.tsx +3 -2
  405. package/src/pricing-governance/PricingGovernanceConsole.tsx +2 -1
  406. package/src/provider-standing/ProviderStandingAccessNotice.tsx +36 -0
  407. package/src/provider-standing/ProviderStandingConsole.tsx +216 -0
  408. package/src/provider-standing/__tests__/ProviderStandingConsole.test.tsx +143 -0
  409. package/src/provider-standing/index.ts +8 -0
  410. package/src/provider-standing/useProviderStanding.ts +50 -0
  411. package/src/provider.tsx +12 -0
  412. package/src/resource-creation/StepIndicator.tsx +2 -1
  413. package/src/schedule/ScheduleDetailView.tsx +3 -2
  414. package/src/schedule/ScheduleRunsTable.tsx +2 -1
  415. package/src/session/NewSessionViewer.tsx +12 -0
  416. package/src/session/__tests__/UsageTab.test.tsx +136 -0
  417. package/src/session/__tests__/useNewSessionFlow.test.tsx +151 -0
  418. package/src/session/__tests__/useSessionUsage.test.ts +19 -0
  419. package/src/session/facets/ArtifactsTab.tsx +2 -1
  420. package/src/session/facets/ChangesTab.tsx +2 -1
  421. package/src/session/facets/UsageTab.tsx +98 -6
  422. package/src/session/index.ts +1 -0
  423. package/src/session/useNewSessionFlow.ts +76 -9
  424. package/src/session/useSessionUsage.ts +37 -0
  425. package/src/settings/AccountPreferencesSection.tsx +25 -0
  426. package/src/settings/OrgPreferencesSection.tsx +35 -0
  427. package/src/settings/__tests__/settings-nav.test.ts +27 -0
  428. package/src/settings/__tests__/useSettingsNavGroups.test.tsx +11 -1
  429. package/src/settings/index.ts +2 -0
  430. package/src/settings/settings-nav.ts +25 -0
  431. package/src/settings/useSettingsNavGroups.ts +8 -1
  432. package/src/sharing/ShareAgentDialog.tsx +2 -1
  433. package/src/sidebar/WorkspaceSidebar.tsx +2 -1
  434. package/src/skill/SkillFileBrowser.tsx +2 -1
  435. package/src/skill/__tests__/SkillFileBrowser.test.tsx +10 -2
  436. package/src/skill/__tests__/fetchAndUnpackArtifact.test.ts +90 -0
  437. package/src/skill/__tests__/useSkillUpload.test.ts +69 -0
  438. package/src/skill/internal/fetchAndUnpackArtifact.ts +54 -4
  439. package/src/skill/useSkillDiff.ts +7 -1
  440. package/src/skill/useSkillUpload.ts +25 -6
  441. package/src/workflow/ApprovalFormBuilder.tsx +5 -27
  442. package/src/workflow/FailedRunsWidget.tsx +2 -1
  443. package/src/workflow/PendingApprovalsWidget.tsx +2 -1
  444. package/src/workflow/facets/WorkflowArtifactsTab.tsx +2 -1
  445. package/src/workflow/facets/WorkflowUsageTab.tsx +2 -1
  446. package/src/workflow/inspector/WorkflowSummaryPanel.tsx +2 -1
  447. package/src/workflow/inspector/tabs/BranchesTab.tsx +2 -1
  448. package/src/workflow/inspector/tabs/IterationTab.tsx +2 -1
  449. package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
  450. package/src/workspace/ExplorerTree.tsx +2 -1
  451. package/src/workspace/WorkspaceContentSearch.tsx +2 -1
  452. package/src/workspace/WorkspaceFileSearch.tsx +2 -1
  453. package/src/workspace/WorkspaceSummary.tsx +2 -1
  454. package/styles.css +1 -1
  455. package/workflow/ApprovalFormBuilder.d.ts.map +1 -1
  456. package/workflow/ApprovalFormBuilder.js +8 -5
  457. package/workflow/ApprovalFormBuilder.js.map +1 -1
  458. package/workflow/FailedRunsWidget.d.ts.map +1 -1
  459. package/workflow/FailedRunsWidget.js +2 -1
  460. package/workflow/FailedRunsWidget.js.map +1 -1
  461. package/workflow/PendingApprovalsWidget.d.ts.map +1 -1
  462. package/workflow/PendingApprovalsWidget.js +2 -1
  463. package/workflow/PendingApprovalsWidget.js.map +1 -1
  464. package/workflow/facets/WorkflowArtifactsTab.d.ts.map +1 -1
  465. package/workflow/facets/WorkflowArtifactsTab.js +2 -1
  466. package/workflow/facets/WorkflowArtifactsTab.js.map +1 -1
  467. package/workflow/facets/WorkflowUsageTab.d.ts.map +1 -1
  468. package/workflow/facets/WorkflowUsageTab.js +2 -1
  469. package/workflow/facets/WorkflowUsageTab.js.map +1 -1
  470. package/workflow/inspector/WorkflowSummaryPanel.d.ts.map +1 -1
  471. package/workflow/inspector/WorkflowSummaryPanel.js +2 -1
  472. package/workflow/inspector/WorkflowSummaryPanel.js.map +1 -1
  473. package/workflow/inspector/tabs/BranchesTab.d.ts.map +1 -1
  474. package/workflow/inspector/tabs/BranchesTab.js +2 -1
  475. package/workflow/inspector/tabs/BranchesTab.js.map +1 -1
  476. package/workflow/inspector/tabs/IterationTab.d.ts.map +1 -1
  477. package/workflow/inspector/tabs/IterationTab.js +2 -1
  478. package/workflow/inspector/tabs/IterationTab.js.map +1 -1
  479. package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
  480. package/workflow/instance/WorkflowInstanceDetailPanel.js +2 -1
  481. package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
  482. package/workspace/ExplorerTree.d.ts.map +1 -1
  483. package/workspace/ExplorerTree.js +2 -1
  484. package/workspace/ExplorerTree.js.map +1 -1
  485. package/workspace/WorkspaceContentSearch.d.ts.map +1 -1
  486. package/workspace/WorkspaceContentSearch.js +2 -1
  487. package/workspace/WorkspaceContentSearch.js.map +1 -1
  488. package/workspace/WorkspaceFileSearch.d.ts.map +1 -1
  489. package/workspace/WorkspaceFileSearch.js +2 -1
  490. package/workspace/WorkspaceFileSearch.js.map +1 -1
  491. package/workspace/WorkspaceSummary.d.ts.map +1 -1
  492. package/workspace/WorkspaceSummary.js +2 -1
  493. package/workspace/WorkspaceSummary.js.map +1 -1
@@ -0,0 +1,73 @@
1
+ "use client";
2
+
3
+ import { useCallback, useState } from "react";
4
+ import type { IdentityAccountInput } from "@stigmer/sdk";
5
+ import type { IdentityAccount } from "@stigmer/protos/ai/stigmer/iam/identityaccount/v1/api_pb";
6
+ import { useStigmer } from "../hooks.js";
7
+ import { toError } from "../internal/toError.js";
8
+
9
+ /** Return value of {@link useUpdateIdentityAccount}. */
10
+ export interface UseUpdateIdentityAccountReturn {
11
+ /** Submit an {@link IdentityAccountInput} to update an identity account. Resolves with the updated resource. */
12
+ readonly update: (input: IdentityAccountInput) => Promise<IdentityAccount>;
13
+ /** `true` while the update request is in flight. */
14
+ readonly isUpdating: boolean;
15
+ /** Error from the last failed update, or `null` when healthy. */
16
+ readonly error: Error | null;
17
+ /** Reset `error` to `null`. */
18
+ readonly clearError: () => void;
19
+ }
20
+
21
+ /**
22
+ * Mutation hook that wraps `identityAccount.update()` with loading and
23
+ * error state.
24
+ *
25
+ * The update RPC is a full-spec replacement addressed by `org` + `slug`
26
+ * (the generated input carries no id). Build the input from the loaded
27
+ * resource with `toIdentityAccountUpdateInput` from `@stigmer/sdk` and
28
+ * override only the fields being edited — sending a partial input wipes
29
+ * the unsent spec fields. The same rule applies INSIDE nested messages:
30
+ * override `preferences` by spreading the mapper's complete value first,
31
+ * or the untouched preference fields wipe.
32
+ *
33
+ * Self-service: a user can always update their own account (`can_edit`
34
+ * via the self-ownership relationship written at account creation).
35
+ *
36
+ * @example
37
+ * ```tsx
38
+ * const { update, isUpdating, error } = useUpdateIdentityAccount();
39
+ *
40
+ * const mapped = toIdentityAccountUpdateInput(account);
41
+ * await update({
42
+ * ...mapped,
43
+ * preferences: { ...mapped.preferences, standingContext: "Keep answers terse." },
44
+ * });
45
+ * refetch(); // re-sync the editor
46
+ * ```
47
+ */
48
+ export function useUpdateIdentityAccount(): UseUpdateIdentityAccountReturn {
49
+ const stigmer = useStigmer();
50
+ const [isUpdating, setIsUpdating] = useState(false);
51
+ const [error, setError] = useState<Error | null>(null);
52
+
53
+ const clearError = useCallback(() => setError(null), []);
54
+
55
+ const update = useCallback(
56
+ async (input: IdentityAccountInput): Promise<IdentityAccount> => {
57
+ setIsUpdating(true);
58
+ setError(null);
59
+
60
+ try {
61
+ return await stigmer.identityAccount.update(input);
62
+ } catch (err) {
63
+ setError(toError(err));
64
+ throw err;
65
+ } finally {
66
+ setIsUpdating(false);
67
+ }
68
+ },
69
+ [stigmer],
70
+ );
71
+
72
+ return { update, isUpdating, error, clearError };
73
+ }
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { type FormEvent, useCallback, useId, useState } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
+ import { UNSTYLED_FIELDSET } from "../internal/element-resets.js";
5
6
  import { getUserMessage } from "@stigmer/sdk";
6
7
  import type { IdentityProvider } from "@stigmer/protos/ai/stigmer/iam/identityprovider/v1/api_pb";
7
8
  import { IamRole } from "@stigmer/protos/ai/stigmer/iam/v1/enum_pb";
@@ -388,7 +389,7 @@ function JitSection({
388
389
  }
389
390
 
390
391
  return (
391
- <fieldset className="stg:space-y-2.5" disabled={disabled}>
392
+ <fieldset className={cn(UNSTYLED_FIELDSET, "stg:space-y-2.5")} disabled={disabled}>
392
393
  <hr className="stg:border-border-muted" />
393
394
  <legend className="stg:text-xs stg:font-medium stg:text-foreground">
394
395
  JIT provisioning
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { type FormEvent, useCallback, useId, useRef, useState } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
+ import { UNSTYLED_FIELDSET } from "../internal/element-resets.js";
5
6
  import { getUserMessage } from "@stigmer/sdk";
6
7
  import type { IdentityProvider } from "@stigmer/protos/ai/stigmer/iam/identityprovider/v1/api_pb";
7
8
  import { IamRole } from "@stigmer/protos/ai/stigmer/iam/v1/enum_pb";
@@ -674,7 +675,7 @@ function JitEditSection({
674
675
  }
675
676
 
676
677
  return (
677
- <fieldset className="stg:space-y-2.5" disabled={disabled}>
678
+ <fieldset className={cn(UNSTYLED_FIELDSET, "stg:space-y-2.5")} disabled={disabled}>
678
679
  <hr className="stg:border-border-muted" />
679
680
  <legend className="stg:text-xs stg:font-medium stg:text-foreground">
680
681
  JIT provisioning
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { type FormEvent, useCallback, useId, useState } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
+ import { UNSTYLED_FIELDSET } from "../internal/element-resets.js";
5
6
  import { getUserMessage } from "@stigmer/sdk";
6
7
  import type { IdentityProvider } from "@stigmer/protos/ai/stigmer/iam/identityprovider/v1/api_pb";
7
8
  import { IamRole } from "@stigmer/protos/ai/stigmer/iam/v1/enum_pb";
@@ -838,7 +839,7 @@ function JitProvisioningSection({
838
839
  }
839
840
 
840
841
  return (
841
- <fieldset className="stg:space-y-2.5" disabled={disabled}>
842
+ <fieldset className={cn(UNSTYLED_FIELDSET, "stg:space-y-2.5")} disabled={disabled}>
842
843
  <hr className="stg:border-border-muted" />
843
844
  <legend className="stg:text-xs stg:font-medium stg:text-foreground">
844
845
  JIT provisioning
package/src/index.ts CHANGED
@@ -196,6 +196,7 @@ export type {
196
196
  UseSessionFileChangesReturn,
197
197
  ModelCostEntry,
198
198
  UseSessionUsageReturn,
199
+ ExecutionUsageEntry,
199
200
  UseAgentRefFromSessionReturn,
200
201
  UseNewSessionFlowOptions,
201
202
  UseNewSessionFlowReturn,
@@ -501,6 +502,7 @@ export {
501
502
  visionPreflightMessage,
502
503
  } from "./attachment/index.js";
503
504
  export type {
505
+ AddFilesOptions,
504
506
  AttachmentPhase,
505
507
  AttachmentEntry,
506
508
  AssessVisionPreflightOptions,
@@ -832,13 +834,23 @@ export type {
832
834
  ToolCredentialsReadiness,
833
835
  } from "./environment/index.js";
834
836
 
835
- // Identity Account — gate hook for ensuring the caller's identity account exists before app render
837
+ // Identity Account — gate hook, self-account data/mutation hooks, the
838
+ // account preferences editor, and the composer-seeding execution defaults
836
839
  export {
837
840
  useIdentityAccountGate,
841
+ useMyIdentityAccount,
842
+ useAccountExecutionDefaults,
843
+ useUpdateIdentityAccount,
844
+ AccountPreferencesPanel,
838
845
  } from "./identity-account/index.js";
839
846
  export type {
840
847
  IdentityAccountGateState,
841
848
  UseIdentityAccountGateReturn,
849
+ UseMyIdentityAccountOptions,
850
+ UseMyIdentityAccountReturn,
851
+ AccountExecutionDefaults,
852
+ UseUpdateIdentityAccountReturn,
853
+ AccountPreferencesPanelProps,
842
854
  } from "./identity-account/index.js";
843
855
 
844
856
  // IAM Policy — data hooks, behavior hooks, headless hook, and styled components for access management
@@ -920,6 +932,7 @@ export {
920
932
  useUpdateOrganization,
921
933
  CreateOrganizationForm,
922
934
  OrgProfilePanel,
935
+ OrgPreferencesPanel,
923
936
  OrgSwitcher,
924
937
  } from "./organization/index.js";
925
938
  export type {
@@ -932,6 +945,7 @@ export type {
932
945
  UseUpdateOrganizationReturn,
933
946
  CreateOrganizationFormProps,
934
947
  OrgProfilePanelProps,
948
+ OrgPreferencesPanelProps,
935
949
  OrgSwitcherProps,
936
950
  } from "./organization/index.js";
937
951
 
@@ -1042,6 +1056,18 @@ export type {
1042
1056
  CursorAccountEditorProps,
1043
1057
  } from "./cursor-accounts/index.js";
1044
1058
 
1059
+ // Provider standing — read-only platform-operator view of the platform's
1060
+ // LLM provider account health (canary-probe verdicts, cloud#447)
1061
+ export {
1062
+ useProviderStanding,
1063
+ ProviderStandingConsole,
1064
+ ProviderStandingAccessNotice,
1065
+ } from "./provider-standing/index.js";
1066
+ export type {
1067
+ UseProviderStandingReturn,
1068
+ ProviderStandingConsoleProps,
1069
+ } from "./provider-standing/index.js";
1070
+
1045
1071
  // Settings — navigation structure + section components shared across app shells
1046
1072
  export {
1047
1073
  SETTINGS_NAV_GROUPS,
@@ -1052,6 +1078,8 @@ export type { SettingsNavItem, SettingsNavGroup } from "./settings/index.js";
1052
1078
  export { ApiKeysSection } from "./settings/index.js";
1053
1079
  export { MembersSection } from "./settings/index.js";
1054
1080
  export { OrgProfileSection } from "./settings/index.js";
1081
+ export { OrgPreferencesSection } from "./settings/index.js";
1082
+ export { AccountPreferencesSection } from "./settings/index.js";
1055
1083
  export { EnvironmentsSection } from "./settings/index.js";
1056
1084
  export { InvitationsSection } from "./settings/index.js";
1057
1085
  export { IdentityProvidersSection } from "./settings/index.js";
@@ -1322,6 +1350,7 @@ export {
1322
1350
  ConversationControlBanner,
1323
1351
  ConversationAttentionBanner,
1324
1352
  ConversationComposer,
1353
+ ConversationTemplatePickerDialog,
1325
1354
  useConversation,
1326
1355
  useConversationList,
1327
1356
  useConversationMediaUrl,
@@ -1351,6 +1380,8 @@ export type {
1351
1380
  ConversationControlBannerProps,
1352
1381
  ConversationAttentionBannerProps,
1353
1382
  ConversationComposerProps,
1383
+ ConversationTemplatePickerDialogProps,
1384
+ ConversationReplyPayload,
1354
1385
  UseConversationOptions,
1355
1386
  UseConversationReturn,
1356
1387
  UseConversationListOptions,
@@ -1409,9 +1440,11 @@ export {
1409
1440
  VisibilitySelector,
1410
1441
  VisibilityBadge,
1411
1442
  blueprintVisibilityLevels,
1412
- INSTANCE_VISIBILITY_LEVELS,
1443
+ instanceVisibilityLevels,
1444
+ PUBLIC_LOCKED_REASON,
1413
1445
  visibilityLabel,
1414
1446
  useUpdateVisibility,
1447
+ useCanSetPublicVisibility,
1415
1448
  } from "./library/index.js";
1416
1449
  export type {
1417
1450
  ScopeToggleProps,
@@ -1431,8 +1464,10 @@ export type {
1431
1464
  VisibilityBadgeProps,
1432
1465
  VisibilityLevelOption,
1433
1466
  BlueprintVisibilityLevelsContext,
1467
+ InstanceVisibilityLevelsContext,
1434
1468
  VisibilityResourceKind,
1435
1469
  UseUpdateVisibilityReturn,
1470
+ UseCanSetPublicVisibilityReturn,
1436
1471
  } from "./library/index.js";
1437
1472
 
1438
1473
  // Manifest — kind-agnostic YAML edit/apply (editor, hooks, dialogs)
@@ -0,0 +1,92 @@
1
+ "use client";
2
+
3
+ import type { ReactNode } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+
6
+ /**
7
+ * Both `OrganizationPreferences.standing_context` and
8
+ * `IdentityAccountPreferences.standing_context` pin `max_len = 2000`
9
+ * (buf.validate, spec.proto in each package).
10
+ */
11
+ export const STANDING_CONTEXT_MAX_LEN = 2000;
12
+ /** Show the remaining-characters counter once within this margin. */
13
+ const COUNTER_THRESHOLD = 200;
14
+
15
+ /** Props for {@link StandingContextField}. */
16
+ export interface StandingContextFieldProps {
17
+ /** DOM id for the textarea (label association). */
18
+ readonly id: string;
19
+ /** Current field value. */
20
+ readonly value: string;
21
+ /** Fired with the new value on every edit. */
22
+ readonly onChange: (value: string) => void;
23
+ /** Disables editing while a save is in flight. */
24
+ readonly disabled?: boolean;
25
+ /**
26
+ * Renders the field as read-only (still selectable/copyable) for
27
+ * viewers without edit permission.
28
+ */
29
+ readonly readOnly?: boolean;
30
+ /** Example text shown when the field is empty. */
31
+ readonly placeholder?: string;
32
+ /** Helper line rendered under the textarea. */
33
+ readonly helperText?: ReactNode;
34
+ }
35
+
36
+ /**
37
+ * Shared textarea for declared-preference standing context — the one
38
+ * free-text field both the organization and account preference editors
39
+ * render. Owns the proto length cap and the remaining-characters
40
+ * counter; the parent panel owns label, load/save, and dirty state.
41
+ *
42
+ * Internal to `@stigmer/react` — the public surface is the panels.
43
+ */
44
+ export function StandingContextField({
45
+ id,
46
+ value,
47
+ onChange,
48
+ disabled,
49
+ readOnly,
50
+ placeholder,
51
+ helperText,
52
+ }: StandingContextFieldProps) {
53
+ const remaining = STANDING_CONTEXT_MAX_LEN - value.length;
54
+
55
+ return (
56
+ <div className="stg:space-y-1">
57
+ <label
58
+ htmlFor={id}
59
+ className="stg:text-xs stg:font-medium stg:text-foreground"
60
+ >
61
+ Standing context
62
+ </label>
63
+ <textarea
64
+ id={id}
65
+ value={value}
66
+ onChange={(e) => onChange(e.target.value)}
67
+ maxLength={STANDING_CONTEXT_MAX_LEN}
68
+ rows={6}
69
+ disabled={disabled}
70
+ readOnly={readOnly}
71
+ placeholder={readOnly ? undefined : placeholder}
72
+ className={cn(
73
+ "stg:w-full stg:resize-y stg:rounded-md stg:border stg:border-input stg:bg-background stg:px-2.5 stg:py-1.5 stg:text-xs stg:text-foreground",
74
+ "stg:placeholder:text-muted-foreground",
75
+ "stg:focus-visible:outline-none stg:focus-visible:ring-1 stg:focus-visible:ring-ring",
76
+ "stg:disabled:pointer-events-none stg:disabled:opacity-50",
77
+ readOnly && "stg:bg-muted-subtle stg:text-muted-foreground",
78
+ )}
79
+ />
80
+ {helperText && (
81
+ <p className="stg:text-[0.65rem] stg:text-muted-foreground">
82
+ {helperText}
83
+ </p>
84
+ )}
85
+ {!readOnly && remaining <= COUNTER_THRESHOLD && (
86
+ <p className="stg:text-[0.65rem] stg:text-muted-foreground">
87
+ {remaining} characters left
88
+ </p>
89
+ )}
90
+ </div>
91
+ );
92
+ }
@@ -0,0 +1,33 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Per-element UA-default resets for preflight-less hosts (#695).
3
+ // Internal — never exported from the package barrel.
4
+ //
5
+ // Why these are per-component classes and NOT stylesheet rules: the #374
6
+ // scoped form-control preflight in `styles.css` could reset every button
7
+ // under `.stgm` because UA control chrome is never wanted. Lists are
8
+ // different — "UI list" vs "content list" is a semantic distinction CSS
9
+ // scoping cannot express. The documented quickstart wraps the host's whole
10
+ // app in `StigmerProvider`, so a `.stgm ul { list-style: none }` rule would
11
+ // strip the bullets off the HOST's own content. Every SDK-rendered UI list
12
+ // therefore declares its own reset (enforced by the `stigmer/require-list-reset`
13
+ // lint rule); markdown-rendered content lists instead declare their bullets
14
+ // explicitly (`stg:list-disc stg:pl-5 ...` in markdown-components.tsx).
15
+ // ---------------------------------------------------------------------------
16
+
17
+ /**
18
+ * UA-default reset for a UI `<ul>`/`<ol>` (no bullets, no indent, no
19
+ * margins). Without it, a host that ships no global CSS reset renders list
20
+ * markers and ~40px of `padding-inline-start` on every SDK list — invisible
21
+ * on first-party surfaces (console, desktop, docs tours all ship global
22
+ * resets), broken in exactly the third-party embeds the SDK exists for.
23
+ * Spacing utilities (`stg:space-y-*`, `stg:p-*`) compose on top.
24
+ */
25
+ export const UNSTYLED_LIST = "stg:m-0 stg:list-none stg:p-0";
26
+
27
+ /**
28
+ * UA-default reset for `<fieldset>` (margin-inline, padding, and
29
+ * `min-inline-size: min-content` — the last one silently breaks flex/grid
30
+ * shrinking). The UA border is already cleared by the `.stgm *` border reset
31
+ * in `styles.css`, so it is not repeated here.
32
+ */
33
+ export const UNSTYLED_FIELDSET = "stg:m-0 stg:min-w-0 stg:p-0";
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { useCallback, useState, type DragEvent } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
+ import { UNSTYLED_LIST } from "../element-resets.js";
5
6
  import { FileTypeIcon, FolderTypeIcon } from "../file-icons/index.js";
6
7
  import type { TreeNode } from "./tree-node.js";
7
8
 
@@ -151,7 +152,7 @@ export function FileTreeNode({
151
152
  {isFolder && expanded && node.children && (
152
153
  <ul
153
154
  role="group"
154
- className={cn(indentGuides && "stg:ml-3 stg:border-l stg:border-border")}
155
+ className={cn(UNSTYLED_LIST, indentGuides && "stg:ml-3 stg:border-l stg:border-border")}
155
156
  >
156
157
  {node.children.map((child) => (
157
158
  <FileTreeNode
@@ -152,12 +152,19 @@ function extractMermaidSource(children: ReactNode): string | null {
152
152
  * ensuring correct rendering in both the Stigmer Console and third-party
153
153
  * host applications with custom themes.
154
154
  *
155
+ * Margin-bearing elements (`p`, `ul`, `ol`, `pre`, `blockquote`) declare
156
+ * their top margin (`stg:mt-0`) and blockquote its inline margins
157
+ * explicitly: the spacing rhythm here is authored via `mb-*` on the
158
+ * assumption that UA base margins are zero, which is only true when the
159
+ * host ships a global reset — preflight-less embeds otherwise stack
160
+ * `margin-top: 1em` (and 40px blockquote indents) on top (#695).
161
+ *
155
162
  * Used by `MessageEntry` (chat messages) and `SkillDetailView` (SKILL.md).
156
163
  */
157
164
  export const MARKDOWN_COMPONENTS: Components = {
158
165
  p({ children, ...props }: MdProps<"p">) {
159
166
  return (
160
- <p className="stg:text-sm stg:text-foreground stg:mb-3 stg:last:mb-0 stg:leading-relaxed stg:break-words" {...props}>
167
+ <p className="stg:text-sm stg:text-foreground stg:mt-0 stg:mb-3 stg:last:mb-0 stg:leading-relaxed stg:break-words" {...props}>
161
168
  {children}
162
169
  </p>
163
170
  );
@@ -211,7 +218,7 @@ export const MARKDOWN_COMPONENTS: Components = {
211
218
 
212
219
  ul({ children, ...props }: MdProps<"ul">) {
213
220
  return (
214
- <ul className="stg:list-disc stg:pl-5 stg:mb-3 stg:last:mb-0 stg:space-y-1 stg:text-sm stg:text-foreground" {...props}>
221
+ <ul className="stg:list-disc stg:pl-5 stg:mt-0 stg:mb-3 stg:last:mb-0 stg:space-y-1 stg:text-sm stg:text-foreground" {...props}>
215
222
  {children}
216
223
  </ul>
217
224
  );
@@ -219,7 +226,7 @@ export const MARKDOWN_COMPONENTS: Components = {
219
226
 
220
227
  ol({ children, ...props }: MdProps<"ol">) {
221
228
  return (
222
- <ol className="stg:list-decimal stg:pl-5 stg:mb-3 stg:last:mb-0 stg:space-y-1 stg:text-sm stg:text-foreground" {...props}>
229
+ <ol className="stg:list-decimal stg:pl-5 stg:mt-0 stg:mb-3 stg:last:mb-0 stg:space-y-1 stg:text-sm stg:text-foreground" {...props}>
223
230
  {children}
224
231
  </ol>
225
232
  );
@@ -245,7 +252,7 @@ export const MARKDOWN_COMPONENTS: Components = {
245
252
 
246
253
  return (
247
254
  <pre
248
- className="stg:mb-3 stg:last:mb-0 stg:overflow-x-auto stg:rounded-md stg:bg-muted stg:p-3"
255
+ className="stg:mt-0 stg:mb-3 stg:last:mb-0 stg:overflow-x-auto stg:rounded-md stg:bg-muted stg:p-3"
249
256
  {...props}
250
257
  >
251
258
  {children}
@@ -293,9 +300,12 @@ export const MARKDOWN_COMPONENTS: Components = {
293
300
  },
294
301
 
295
302
  blockquote({ children, ...props }: MdProps<"blockquote">) {
303
+ // mx-0 matters as much as mt-0 here: UA blockquote margin is `1em 40px`,
304
+ // so a preflight-less host renders a double indent on BOTH sides on top
305
+ // of the border-l + pl-4 treatment.
296
306
  return (
297
307
  <blockquote
298
- className="stg:border-l-2 stg:border-border stg:pl-4 stg:mb-3 stg:last:mb-0 stg:text-muted-foreground stg:italic"
308
+ className="stg:border-l-2 stg:border-border stg:mx-0 stg:mt-0 stg:mb-3 stg:pl-4 stg:last:mb-0 stg:text-muted-foreground stg:italic"
299
309
  {...props}
300
310
  >
301
311
  {children}
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { useCallback, useId, useState, type FormEvent } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
+ import { UNSTYLED_FIELDSET } from "../internal/element-resets.js";
5
6
  import {
6
7
  getUserMessage,
7
8
  iamRoleDisplayName,
@@ -302,7 +303,7 @@ function CreateInvitationForm({
302
303
  />
303
304
 
304
305
  {/* Expiry */}
305
- <fieldset className="stg:space-y-1.5">
306
+ <fieldset className={cn(UNSTYLED_FIELDSET, "stg:space-y-1.5")}>
306
307
  <legend className="stg:text-xs stg:font-medium stg:text-foreground">
307
308
  Expires in
308
309
  </legend>
@@ -324,7 +325,7 @@ function CreateInvitationForm({
324
325
  </fieldset>
325
326
 
326
327
  {/* Redemption mode */}
327
- <fieldset className="stg:space-y-1.5">
328
+ <fieldset className={cn(UNSTYLED_FIELDSET, "stg:space-y-1.5")}>
328
329
  <legend className="stg:text-xs stg:font-medium stg:text-foreground">
329
330
  Usage limit
330
331
  </legend>
@@ -5,7 +5,8 @@ import {
5
5
  VisibilitySelector,
6
6
  type VisibilitySelectorMode,
7
7
  } from "./VisibilitySelector.js";
8
- import { INSTANCE_VISIBILITY_LEVELS } from "./visibilityLevels.js";
8
+ import { useCanSetPublicVisibility } from "./useCanSetPublicVisibility.js";
9
+ import { instanceVisibilityLevels } from "./visibilityLevels.js";
9
10
 
10
11
  /** Props for {@link InstanceVisibilitySelector}. */
11
12
  export interface InstanceVisibilitySelectorProps {
@@ -69,10 +70,16 @@ export function InstanceVisibilitySelector({
69
70
  disabled = false,
70
71
  className,
71
72
  }: InstanceVisibilitySelectorProps) {
73
+ // Public is operator-granted in the cloud edition; the hook resolves the
74
+ // caller's grant here so every consumer (create dialogs, list rows) gets
75
+ // the locked Public row without wiring anything.
76
+ const canSetPublic = useCanSetPublicVisibility();
72
77
  return (
73
78
  <VisibilitySelector
74
79
  visibility={visibility}
75
- options={INSTANCE_VISIBILITY_LEVELS}
80
+ options={instanceVisibilityLevels({
81
+ canSetPublicVisibility: canSetPublic.allowed,
82
+ })}
76
83
  onVisibilityChange={onVisibilityChange}
77
84
  mode={mode}
78
85
  isPending={isPending}
@@ -1,15 +1,16 @@
1
1
  "use client";
2
2
 
3
3
  import { useCallback } from "react";
4
- import type { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
4
+ import { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
5
5
  import { useDeploymentMode } from "../deployment-mode.js";
6
6
  import { PermissionGate } from "../iam-policy/PermissionGate.js";
7
7
  import { useSsoProvider } from "../identity-provider/useSsoProvider.js";
8
+ import { useCanSetPublicVisibility } from "./useCanSetPublicVisibility.js";
8
9
  import { VisibilityBadge, VisibilitySelector } from "./VisibilitySelector.js";
9
10
  import {
10
11
  blueprintVisibilityLevels,
11
12
  environmentVisibilityLevels,
12
- INSTANCE_VISIBILITY_LEVELS,
13
+ instanceVisibilityLevels,
13
14
  } from "./visibilityLevels.js";
14
15
  import {
15
16
  useUpdateVisibility,
@@ -85,9 +86,19 @@ export interface ResourceVisibilityControlProps {
85
86
  * the org boundary. In `local` mode there are no levels to choose (the
86
87
  * OSS backend is single-user), so the control degrades to a badge.
87
88
  *
89
+ * The Public level is operator-gated in the cloud edition (publishing is a
90
+ * curation decision): for callers without `can_set_public_visibility`
91
+ * ({@link useCanSetPublicVisibility}) the option renders locked with copy
92
+ * naming the path forward. The same permission opens the operator takedown
93
+ * lane — on a currently-public resource, an operator gets the interactive
94
+ * selector even without resource `can_edit`, so noisy public resources can
95
+ * be un-published directly from the console (every offered move off PUBLIC
96
+ * is a downgrade, which the backend allows operators unilaterally).
97
+ *
88
98
  * The backend remains the enforcer (`ValidateVisibilityStep` rejects
89
- * platform without an IdP); the gate here only prevents offering an option
90
- * that is guaranteed to fail.
99
+ * platform without an IdP; `AuthorizeVisibilityTransitionStep` gates the
100
+ * PUBLIC level); the gates here only prevent offering an option that is
101
+ * guaranteed to fail.
91
102
  */
92
103
  export function ResourceVisibilityControl({
93
104
  kind,
@@ -99,6 +110,7 @@ export function ResourceVisibilityControl({
99
110
  }: ResourceVisibilityControlProps) {
100
111
  const { updateVisibility, isPending } = useUpdateVisibility(kind, resourceId);
101
112
  const deploymentMode = useDeploymentMode();
113
+ const canSetPublic = useCanSetPublicVisibility();
102
114
 
103
115
  const isInstance = INSTANCE_KINDS.has(kind);
104
116
  const isEnvironment = kind === "environment";
@@ -113,10 +125,13 @@ export function ResourceVisibilityControl({
113
125
  const options = isEnvironment
114
126
  ? environmentVisibilityLevels(deploymentMode)
115
127
  : isInstance
116
- ? INSTANCE_VISIBILITY_LEVELS
128
+ ? instanceVisibilityLevels({
129
+ canSetPublicVisibility: canSetPublic.allowed,
130
+ })
117
131
  : blueprintVisibilityLevels({
118
132
  deploymentMode,
119
133
  hasIdentityProvider: ssoProvider !== null,
134
+ canSetPublicVisibility: canSetPublic.allowed,
120
135
  });
121
136
 
122
137
  const handleChange = useCallback(
@@ -141,6 +156,31 @@ export function ResourceVisibilityControl({
141
156
  return badge;
142
157
  }
143
158
 
159
+ const selector = (
160
+ <VisibilitySelector
161
+ visibility={visibility}
162
+ options={options}
163
+ onVisibilityChange={handleChange}
164
+ isPending={isPending}
165
+ ariaLabel={isInstance ? "Instance visibility" : "Resource visibility"}
166
+ className={className}
167
+ />
168
+ );
169
+
170
+ // Operator takedown lane: on a currently-public resource, a caller holding
171
+ // can_set_public_visibility gets the control without resource can_edit —
172
+ // every offered move is a downgrade off PUBLIC, which the backend allows
173
+ // operators unilaterally (AuthorizeVisibilityTransitionStep), so no
174
+ // offered action can fail authorization. Scoped to the public state on
175
+ // purpose: on non-public foreign resources most transitions would be
176
+ // denied, and publishing those stays a request-to-operator flow.
177
+ if (
178
+ canSetPublic.allowed &&
179
+ visibility === ApiResourceVisibility.visibility_public
180
+ ) {
181
+ return selector;
182
+ }
183
+
144
184
  return (
145
185
  <PermissionGate
146
186
  resource={{ kind: FGA_KIND[kind], id: resourceId }}
@@ -148,14 +188,7 @@ export function ResourceVisibilityControl({
148
188
  fallback={badge}
149
189
  loading={badge}
150
190
  >
151
- <VisibilitySelector
152
- visibility={visibility}
153
- options={options}
154
- onVisibilityChange={handleChange}
155
- isPending={isPending}
156
- ariaLabel={isInstance ? "Instance visibility" : "Resource visibility"}
157
- className={className}
158
- />
191
+ {selector}
159
192
  </PermissionGate>
160
193
  );
161
194
  }