@stigmer/react 3.41.0 → 3.41.1-dev.20261003133619.g58ac1f23a411

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 (510) hide show
  1. package/README.md +1 -1
  2. package/access/ManageAccessButton.d.ts +1 -1
  3. package/access/ManageAccessButton.js +1 -1
  4. package/access/ManageAccessDialog.js +1 -1
  5. package/access/ManageAccessDialog.js.map +1 -1
  6. package/agent/AgentDetailView.d.ts.map +1 -1
  7. package/agent/AgentDetailView.js +2 -1
  8. package/agent/AgentDetailView.js.map +1 -1
  9. package/api-key/ApiKeyListPanel.d.ts.map +1 -1
  10. package/api-key/ApiKeyListPanel.js +2 -1
  11. package/api-key/ApiKeyListPanel.js.map +1 -1
  12. package/attachment/AttachmentImageLightbox.d.ts.map +1 -1
  13. package/attachment/AttachmentImageLightbox.js.map +1 -1
  14. package/billing/AutoRechargeCard.d.ts +3 -3
  15. package/billing/AutoRechargeCard.d.ts.map +1 -1
  16. package/billing/AutoRechargeCard.js +4 -4
  17. package/billing/AutoRechargeCard.js.map +1 -1
  18. package/billing/BillingSection.d.ts.map +1 -1
  19. package/billing/BillingSection.js +7 -6
  20. package/billing/BillingSection.js.map +1 -1
  21. package/billing/CreditLedgerTable.d.ts +3 -3
  22. package/billing/CreditLedgerTable.d.ts.map +1 -1
  23. package/billing/CreditLedgerTable.js +3 -3
  24. package/billing/CreditLedgerTable.js.map +1 -1
  25. package/billing/CreditPackGrid.d.ts +1 -1
  26. package/billing/CreditPackGrid.js +1 -1
  27. package/billing/PaymentMethodCard.d.ts +1 -1
  28. package/billing/PaymentMethodCard.js +1 -1
  29. package/billing/PlanSection.d.ts +3 -3
  30. package/billing/PlanSection.d.ts.map +1 -1
  31. package/billing/PlanSection.js +4 -3
  32. package/billing/PlanSection.js.map +1 -1
  33. package/billing/ProviderKeysSection.js +13 -13
  34. package/billing/ProviderKeysSection.js.map +1 -1
  35. package/billing/plan-features.js +1 -1
  36. package/billing/plan-features.js.map +1 -1
  37. package/billing/useBillingAccount.d.ts +4 -4
  38. package/billing/useBillingAccount.d.ts.map +1 -1
  39. package/billing/useBillingAccount.js +7 -7
  40. package/billing/useBillingAccount.js.map +1 -1
  41. package/billing/useBillingUsageReport.d.ts +4 -4
  42. package/billing/useBillingUsageReport.d.ts.map +1 -1
  43. package/billing/useBillingUsageReport.js +7 -7
  44. package/billing/useBillingUsageReport.js.map +1 -1
  45. package/billing/useChangePlan.d.ts +2 -2
  46. package/billing/useChangePlan.d.ts.map +1 -1
  47. package/billing/useChangePlan.js +4 -4
  48. package/billing/useChangePlan.js.map +1 -1
  49. package/billing/useCreateBillingPortalSession.d.ts +2 -2
  50. package/billing/useCreateBillingPortalSession.d.ts.map +1 -1
  51. package/billing/useCreateBillingPortalSession.js +3 -3
  52. package/billing/useCreateBillingPortalSession.js.map +1 -1
  53. package/billing/useCreateCheckoutSession.d.ts +2 -2
  54. package/billing/useCreateCheckoutSession.d.ts.map +1 -1
  55. package/billing/useCreateCheckoutSession.js +2 -2
  56. package/billing/useCreateCheckoutSession.js.map +1 -1
  57. package/billing/useCreatePaymentMethodSetupSession.d.ts +1 -1
  58. package/billing/useCreatePaymentMethodSetupSession.d.ts.map +1 -1
  59. package/billing/useCreatePaymentMethodSetupSession.js +2 -2
  60. package/billing/useCreatePaymentMethodSetupSession.js.map +1 -1
  61. package/billing/useCreditLedger.d.ts +4 -4
  62. package/billing/useCreditLedger.d.ts.map +1 -1
  63. package/billing/useCreditLedger.js +7 -7
  64. package/billing/useCreditLedger.js.map +1 -1
  65. package/billing/useCustomerModelPricing.d.ts +4 -4
  66. package/billing/useCustomerModelPricing.d.ts.map +1 -1
  67. package/billing/useCustomerModelPricing.js +6 -6
  68. package/billing/useCustomerModelPricing.js.map +1 -1
  69. package/billing/useEntitlements.d.ts +2 -2
  70. package/billing/useEntitlements.d.ts.map +1 -1
  71. package/billing/useEntitlements.js +4 -4
  72. package/billing/useEntitlements.js.map +1 -1
  73. package/billing/usePeriodEstimate.d.ts +1 -1
  74. package/billing/usePeriodEstimate.d.ts.map +1 -1
  75. package/billing/usePeriodEstimate.js +3 -3
  76. package/billing/usePeriodEstimate.js.map +1 -1
  77. package/billing/useProviderKeys.d.ts +5 -5
  78. package/billing/useProviderKeys.d.ts.map +1 -1
  79. package/billing/useProviderKeys.js +7 -7
  80. package/billing/useProviderKeys.js.map +1 -1
  81. package/billing/useSetAutoRechargeConfig.d.ts +2 -2
  82. package/billing/useSetAutoRechargeConfig.d.ts.map +1 -1
  83. package/billing/useSetAutoRechargeConfig.js +2 -2
  84. package/billing/useSetAutoRechargeConfig.js.map +1 -1
  85. package/billing/useSubscription.d.ts +3 -3
  86. package/billing/useSubscription.d.ts.map +1 -1
  87. package/billing/useSubscription.js +7 -7
  88. package/billing/useSubscription.js.map +1 -1
  89. package/channel-app/ChannelAppListPanel.d.ts.map +1 -1
  90. package/channel-app/ChannelAppListPanel.js +2 -1
  91. package/channel-app/ChannelAppListPanel.js.map +1 -1
  92. package/channel-app/slackAppSetup.d.ts +0 -23
  93. package/channel-app/slackAppSetup.d.ts.map +1 -1
  94. package/channel-app/slackAppSetup.js +3 -2
  95. package/channel-app/slackAppSetup.js.map +1 -1
  96. package/channel-app/whatsappAppSetup.d.ts +0 -26
  97. package/channel-app/whatsappAppSetup.d.ts.map +1 -1
  98. package/channel-app/whatsappAppSetup.js +2 -1
  99. package/channel-app/whatsappAppSetup.js.map +1 -1
  100. package/cursor-accounts/CursorAccountEditor.js +3 -3
  101. package/cursor-accounts/CursorAccountEditor.js.map +1 -1
  102. package/cursor-accounts/CursorAccountsConsole.js +3 -3
  103. package/cursor-accounts/CursorAccountsConsole.js.map +1 -1
  104. package/dashboard/OperationalDashboard.d.ts +1 -4
  105. package/dashboard/OperationalDashboard.d.ts.map +1 -1
  106. package/dashboard/OperationalDashboard.js +1 -3
  107. package/dashboard/OperationalDashboard.js.map +1 -1
  108. package/dashboard/useDashboardSummary.d.ts +1 -3
  109. package/dashboard/useDashboardSummary.d.ts.map +1 -1
  110. package/dashboard/useDashboardSummary.js +1 -1
  111. package/dashboard/useDashboardSummary.js.map +1 -1
  112. package/environment/EnvironmentListPanel.d.ts.map +1 -1
  113. package/environment/EnvironmentListPanel.js +2 -1
  114. package/environment/EnvironmentListPanel.js.map +1 -1
  115. package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
  116. package/environment/EnvironmentVariableEditor.js +2 -1
  117. package/environment/EnvironmentVariableEditor.js.map +1 -1
  118. package/execution/ArtifactFileContent.d.ts.map +1 -1
  119. package/execution/ArtifactFileContent.js +2 -1
  120. package/execution/ArtifactFileContent.js.map +1 -1
  121. package/execution/McpToolDetail.d.ts.map +1 -1
  122. package/execution/McpToolDetail.js +2 -1
  123. package/execution/McpToolDetail.js.map +1 -1
  124. package/execution/ResultView.d.ts.map +1 -1
  125. package/execution/ResultView.js +2 -1
  126. package/execution/ResultView.js.map +1 -1
  127. package/execution/TerminalSession.js +1 -1
  128. package/execution/TerminalSession.js.map +1 -1
  129. package/execution/ThreadSkeleton.d.ts.map +1 -1
  130. package/execution/ThreadSkeleton.js +2 -1
  131. package/execution/ThreadSkeleton.js.map +1 -1
  132. package/execution/file-path-resolver.d.ts.map +1 -1
  133. package/execution/file-path-resolver.js +3 -2
  134. package/execution/file-path-resolver.js.map +1 -1
  135. package/execution/sandbox-path-normalizer.d.ts +0 -11
  136. package/execution/sandbox-path-normalizer.d.ts.map +1 -1
  137. package/execution/sandbox-path-normalizer.js +2 -1
  138. package/execution/sandbox-path-normalizer.js.map +1 -1
  139. package/github/parseGitUrl.d.ts.map +1 -1
  140. package/github/parseGitUrl.js +16 -4
  141. package/github/parseGitUrl.js.map +1 -1
  142. package/iam-policy/GrantAccessForm.d.ts +3 -3
  143. package/iam-policy/GrantAccessForm.d.ts.map +1 -1
  144. package/iam-policy/GrantAccessForm.js +3 -3
  145. package/iam-policy/GrantAccessForm.js.map +1 -1
  146. package/iam-policy/OrgMembersPanel.d.ts +3 -3
  147. package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
  148. package/iam-policy/OrgMembersPanel.js +4 -3
  149. package/iam-policy/OrgMembersPanel.js.map +1 -1
  150. package/iam-policy/PeopleWithAccess.d.ts +2 -2
  151. package/iam-policy/PeopleWithAccess.d.ts.map +1 -1
  152. package/iam-policy/PeopleWithAccess.js +2 -2
  153. package/iam-policy/PeopleWithAccess.js.map +1 -1
  154. package/iam-policy/PrincipalPicker.d.ts +2 -2
  155. package/iam-policy/PrincipalPicker.d.ts.map +1 -1
  156. package/iam-policy/PrincipalPicker.js +2 -2
  157. package/iam-policy/PrincipalPicker.js.map +1 -1
  158. package/iam-policy/SharePanel.d.ts +3 -3
  159. package/iam-policy/SharePanel.d.ts.map +1 -1
  160. package/iam-policy/SharePanel.js +3 -3
  161. package/iam-policy/SharePanel.js.map +1 -1
  162. package/iam-policy/useCreateIamPolicy.d.ts +1 -1
  163. package/iam-policy/useCreateIamPolicy.js +1 -1
  164. package/iam-policy/useDeleteIamPolicy.d.ts +1 -1
  165. package/iam-policy/useDeleteIamPolicy.js +1 -1
  166. package/iam-policy/useGranteeCandidates.d.ts +3 -3
  167. package/iam-policy/useGranteeCandidates.d.ts.map +1 -1
  168. package/iam-policy/useGranteeCandidates.js +2 -2
  169. package/iam-policy/useGranteeCandidates.js.map +1 -1
  170. package/iam-policy/useOwnerAssignment.d.ts +2 -2
  171. package/iam-policy/useOwnerAssignment.d.ts.map +1 -1
  172. package/iam-policy/useOwnerAssignment.js +3 -3
  173. package/iam-policy/useOwnerAssignment.js.map +1 -1
  174. package/iam-policy/usePrincipalsCount.d.ts +4 -4
  175. package/iam-policy/usePrincipalsCount.d.ts.map +1 -1
  176. package/iam-policy/usePrincipalsCount.js +7 -7
  177. package/iam-policy/usePrincipalsCount.js.map +1 -1
  178. package/iam-policy/useResourceAccess.d.ts +1 -1
  179. package/iam-policy/useResourceAccess.js +1 -1
  180. package/iam-policy/useRevokeOrgAccess.d.ts +1 -1
  181. package/iam-policy/useRevokeOrgAccess.d.ts.map +1 -1
  182. package/iam-policy/useRevokeOrgAccess.js +2 -2
  183. package/iam-policy/useRevokeOrgAccess.js.map +1 -1
  184. package/identity-account/AccountPreferencesPanel.d.ts.map +1 -1
  185. package/identity-account/AccountPreferencesPanel.js +2 -1
  186. package/identity-account/AccountPreferencesPanel.js.map +1 -1
  187. package/identity-provider/IdentityProviderDetailPanel.js +4 -4
  188. package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
  189. package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
  190. package/identity-provider/IdentityProviderListPanel.js +2 -1
  191. package/identity-provider/IdentityProviderListPanel.js.map +1 -1
  192. package/identity-provider/IdentityProviderWizard.js +1 -1
  193. package/identity-provider/IdentityProviderWizard.js.map +1 -1
  194. package/identity-provider/SsoLoginPrompt.js +2 -1
  195. package/identity-provider/SsoLoginPrompt.js.map +1 -1
  196. package/identity-provider/useIdentityProviderList.d.ts +2 -2
  197. package/identity-provider/useIdentityProviderList.js +2 -2
  198. package/index.d.ts +1 -1
  199. package/index.d.ts.map +1 -1
  200. package/index.js +1 -1
  201. package/index.js.map +1 -1
  202. package/inline-edit/InlineEditImage.d.ts +4 -0
  203. package/inline-edit/InlineEditImage.d.ts.map +1 -1
  204. package/inline-edit/InlineEditImage.js +12 -11
  205. package/inline-edit/InlineEditImage.js.map +1 -1
  206. package/inline-edit/InlineEditText.d.ts +4 -0
  207. package/inline-edit/InlineEditText.d.ts.map +1 -1
  208. package/inline-edit/InlineEditText.js +12 -11
  209. package/inline-edit/InlineEditText.js.map +1 -1
  210. package/inline-edit/InlineEditTextarea.d.ts +4 -0
  211. package/inline-edit/InlineEditTextarea.d.ts.map +1 -1
  212. package/inline-edit/InlineEditTextarea.js +11 -16
  213. package/inline-edit/InlineEditTextarea.js.map +1 -1
  214. package/inline-edit/useInlineDraft.d.ts +26 -0
  215. package/inline-edit/useInlineDraft.d.ts.map +1 -0
  216. package/inline-edit/useInlineDraft.js +61 -0
  217. package/inline-edit/useInlineDraft.js.map +1 -0
  218. package/internal/DialogShell.d.ts +21 -0
  219. package/internal/DialogShell.d.ts.map +1 -1
  220. package/internal/DialogShell.js +51 -4
  221. package/internal/DialogShell.js.map +1 -1
  222. package/internal/LoadingRegion.d.ts +35 -0
  223. package/internal/LoadingRegion.d.ts.map +1 -0
  224. package/internal/LoadingRegion.js +33 -0
  225. package/internal/LoadingRegion.js.map +1 -0
  226. package/internal/markdown-components.d.ts.map +1 -1
  227. package/internal/markdown-components.js +18 -4
  228. package/internal/markdown-components.js.map +1 -1
  229. package/internal/trim.d.ts +7 -0
  230. package/internal/trim.d.ts.map +1 -0
  231. package/internal/trim.js +12 -0
  232. package/internal/trim.js.map +1 -0
  233. package/invitation/InvitationManager.d.ts.map +1 -1
  234. package/invitation/InvitationManager.js +2 -1
  235. package/invitation/InvitationManager.js.map +1 -1
  236. package/invitation/InvitationRedemption.d.ts.map +1 -1
  237. package/invitation/InvitationRedemption.js +5 -4
  238. package/invitation/InvitationRedemption.js.map +1 -1
  239. package/invitation/useInvitationPreview.d.ts +1 -1
  240. package/invitation/useInvitationPreview.js +1 -1
  241. package/licenses/LicenseDetail.d.ts.map +1 -1
  242. package/licenses/LicenseDetail.js +3 -3
  243. package/licenses/LicenseDetail.js.map +1 -1
  244. package/licenses/LicenseIssueForm.js +6 -6
  245. package/licenses/LicenseIssueForm.js.map +1 -1
  246. package/licenses/license-draft.d.ts +1 -1
  247. package/licenses/license-draft.d.ts.map +1 -1
  248. package/licenses/license-draft.js +3 -3
  249. package/licenses/license-draft.js.map +1 -1
  250. package/licenses/license-format.js +1 -1
  251. package/licenses/license-format.js.map +1 -1
  252. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  253. package/mcp-server/McpServerDetailView.js +2 -1
  254. package/mcp-server/McpServerDetailView.js.map +1 -1
  255. package/memory/MemoryListPanel.d.ts.map +1 -1
  256. package/memory/MemoryListPanel.js +2 -1
  257. package/memory/MemoryListPanel.js.map +1 -1
  258. package/oauth-app/OAuthAppListPanel.d.ts.map +1 -1
  259. package/oauth-app/OAuthAppListPanel.js +2 -1
  260. package/oauth-app/OAuthAppListPanel.js.map +1 -1
  261. package/organization/OrgPreferencesPanel.d.ts +3 -3
  262. package/organization/OrgPreferencesPanel.d.ts.map +1 -1
  263. package/organization/OrgPreferencesPanel.js +6 -5
  264. package/organization/OrgPreferencesPanel.js.map +1 -1
  265. package/organization/OrgProfilePanel.d.ts +3 -3
  266. package/organization/OrgProfilePanel.d.ts.map +1 -1
  267. package/organization/OrgProfilePanel.js +8 -7
  268. package/organization/OrgProfilePanel.js.map +1 -1
  269. package/organization/index.d.ts +1 -0
  270. package/organization/index.d.ts.map +1 -1
  271. package/organization/index.js +1 -0
  272. package/organization/index.js.map +1 -1
  273. package/organization/useFollowSessionOrganization.d.ts +9 -0
  274. package/organization/useFollowSessionOrganization.d.ts.map +1 -0
  275. package/organization/useFollowSessionOrganization.js +52 -0
  276. package/organization/useFollowSessionOrganization.js.map +1 -0
  277. package/package.json +5 -5
  278. package/plan-catalog/plan-draft.js +3 -3
  279. package/plan-catalog/plan-draft.js.map +1 -1
  280. package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
  281. package/platform-client/PlatformClientListPanel.js +2 -1
  282. package/platform-client/PlatformClientListPanel.js.map +1 -1
  283. package/plugin/PluginDetailView.d.ts.map +1 -1
  284. package/plugin/PluginDetailView.js +2 -1
  285. package/plugin/PluginDetailView.js.map +1 -1
  286. package/portal-container.d.ts +8 -0
  287. package/portal-container.d.ts.map +1 -1
  288. package/portal-container.js +8 -0
  289. package/portal-container.js.map +1 -1
  290. package/provider.d.ts +4 -1
  291. package/provider.d.ts.map +1 -1
  292. package/provider.js +4 -1
  293. package/provider.js.map +1 -1
  294. package/public-base-url-context.d.ts.map +1 -1
  295. package/public-base-url-context.js +2 -1
  296. package/public-base-url-context.js.map +1 -1
  297. package/schedule/ScheduleDetailView.d.ts.map +1 -1
  298. package/schedule/ScheduleDetailView.js +2 -1
  299. package/schedule/ScheduleDetailView.js.map +1 -1
  300. package/session/SessionViewer.d.ts +7 -2
  301. package/session/SessionViewer.d.ts.map +1 -1
  302. package/session/SessionViewer.js +7 -2
  303. package/session/SessionViewer.js.map +1 -1
  304. package/session/useSessionConversation.d.ts +10 -1
  305. package/session/useSessionConversation.d.ts.map +1 -1
  306. package/session/useSessionConversation.js +5 -3
  307. package/session/useSessionConversation.js.map +1 -1
  308. package/settings/EnvironmentsSection.d.ts.map +1 -1
  309. package/settings/EnvironmentsSection.js +2 -1
  310. package/settings/EnvironmentsSection.js.map +1 -1
  311. package/settings/MembersSection.js +2 -2
  312. package/settings/MembersSection.js.map +1 -1
  313. package/settings/OrgPreferencesSection.js +1 -1
  314. package/settings/OrgPreferencesSection.js.map +1 -1
  315. package/settings/OrgProfileSection.js +1 -1
  316. package/settings/OrgProfileSection.js.map +1 -1
  317. package/settings/TeamsSection.js +1 -1
  318. package/settings/TeamsSection.js.map +1 -1
  319. package/settings/UsageSection.js +1 -1
  320. package/settings/UsageSection.js.map +1 -1
  321. package/sharing/ShareAgentDialog.d.ts.map +1 -1
  322. package/sharing/ShareAgentDialog.js +2 -1
  323. package/sharing/ShareAgentDialog.js.map +1 -1
  324. package/sharing/SharedAgentChat.d.ts.map +1 -1
  325. package/sharing/SharedAgentChat.js +2 -1
  326. package/sharing/SharedAgentChat.js.map +1 -1
  327. package/sidebar/WorkspaceSidebar.d.ts.map +1 -1
  328. package/sidebar/WorkspaceSidebar.js +2 -1
  329. package/sidebar/WorkspaceSidebar.js.map +1 -1
  330. package/skill/SkillDetailView.d.ts.map +1 -1
  331. package/skill/SkillDetailView.js +2 -1
  332. package/skill/SkillDetailView.js.map +1 -1
  333. package/skill/SkillDiffDialog.d.ts.map +1 -1
  334. package/skill/SkillDiffDialog.js +2 -1
  335. package/skill/SkillDiffDialog.js.map +1 -1
  336. package/skill/SkillFileBrowser.d.ts.map +1 -1
  337. package/skill/SkillFileBrowser.js +2 -1
  338. package/skill/SkillFileBrowser.js.map +1 -1
  339. package/src/access/ManageAccessButton.tsx +1 -1
  340. package/src/access/ManageAccessDialog.tsx +1 -1
  341. package/src/agent/AgentDetailView.tsx +4 -4
  342. package/src/api-key/ApiKeyListPanel.tsx +4 -4
  343. package/src/attachment/AttachmentImageLightbox.tsx +3 -4
  344. package/src/billing/AutoRechargeCard.tsx +5 -5
  345. package/src/billing/BillingSection.tsx +10 -9
  346. package/src/billing/CreditLedgerTable.tsx +4 -4
  347. package/src/billing/CreditPackGrid.tsx +1 -1
  348. package/src/billing/PaymentMethodCard.tsx +1 -1
  349. package/src/billing/PlanSection.tsx +6 -5
  350. package/src/billing/ProviderKeysSection.tsx +15 -15
  351. package/src/billing/plan-features.ts +1 -1
  352. package/src/billing/useBillingAccount.ts +7 -7
  353. package/src/billing/useBillingUsageReport.ts +7 -7
  354. package/src/billing/useChangePlan.ts +6 -6
  355. package/src/billing/useCreateBillingPortalSession.ts +4 -4
  356. package/src/billing/useCreateCheckoutSession.ts +3 -3
  357. package/src/billing/useCreatePaymentMethodSetupSession.ts +3 -3
  358. package/src/billing/useCreditLedger.ts +7 -7
  359. package/src/billing/useCustomerModelPricing.ts +7 -7
  360. package/src/billing/useEntitlements.ts +5 -5
  361. package/src/billing/usePeriodEstimate.ts +4 -4
  362. package/src/billing/useProviderKeys.ts +12 -12
  363. package/src/billing/useSetAutoRechargeConfig.ts +3 -3
  364. package/src/billing/useSubscription.ts +7 -7
  365. package/src/channel-app/ChannelAppListPanel.tsx +4 -4
  366. package/src/channel-app/slackAppSetup.ts +3 -2
  367. package/src/channel-app/whatsappAppSetup.ts +2 -1
  368. package/src/cursor-accounts/CursorAccountEditor.tsx +3 -3
  369. package/src/cursor-accounts/CursorAccountsConsole.tsx +5 -5
  370. package/src/dashboard/OperationalDashboard.tsx +1 -6
  371. package/src/dashboard/useDashboardSummary.ts +2 -4
  372. package/src/environment/EnvironmentListPanel.tsx +4 -4
  373. package/src/environment/EnvironmentVariableEditor.tsx +4 -4
  374. package/src/execution/ArtifactFileContent.tsx +3 -2
  375. package/src/execution/McpToolDetail.tsx +3 -3
  376. package/src/execution/ResultView.tsx +3 -3
  377. package/src/execution/TerminalSession.tsx +1 -1
  378. package/src/execution/ThreadSkeleton.tsx +4 -4
  379. package/src/execution/file-path-resolver.ts +3 -2
  380. package/src/execution/sandbox-path-normalizer.ts +2 -1
  381. package/src/github/parseGitUrl.ts +13 -4
  382. package/src/iam-policy/GrantAccessForm.tsx +4 -4
  383. package/src/iam-policy/OrgMembersPanel.tsx +7 -7
  384. package/src/iam-policy/PeopleWithAccess.tsx +3 -3
  385. package/src/iam-policy/PrincipalPicker.tsx +3 -3
  386. package/src/iam-policy/SharePanel.tsx +4 -4
  387. package/src/iam-policy/useCreateIamPolicy.ts +1 -1
  388. package/src/iam-policy/useDeleteIamPolicy.ts +1 -1
  389. package/src/iam-policy/useGranteeCandidates.ts +3 -3
  390. package/src/iam-policy/useOwnerAssignment.ts +3 -3
  391. package/src/iam-policy/usePrincipalsCount.ts +7 -7
  392. package/src/iam-policy/useResourceAccess.ts +1 -1
  393. package/src/iam-policy/useRevokeOrgAccess.ts +3 -3
  394. package/src/identity-account/AccountPreferencesPanel.tsx +4 -4
  395. package/src/identity-provider/IdentityProviderDetailPanel.tsx +3 -9
  396. package/src/identity-provider/IdentityProviderListPanel.tsx +4 -4
  397. package/src/identity-provider/IdentityProviderWizard.tsx +1 -1
  398. package/src/identity-provider/SsoLoginPrompt.tsx +6 -5
  399. package/src/identity-provider/useIdentityProviderList.ts +2 -2
  400. package/src/index.ts +1 -0
  401. package/src/inline-edit/InlineEditImage.tsx +13 -11
  402. package/src/inline-edit/InlineEditText.tsx +13 -11
  403. package/src/inline-edit/InlineEditTextarea.tsx +12 -16
  404. package/src/inline-edit/useInlineDraft.ts +85 -0
  405. package/src/internal/DialogShell.tsx +80 -3
  406. package/src/internal/LoadingRegion.tsx +46 -0
  407. package/src/internal/loading-region-markup.json +71 -0
  408. package/src/internal/markdown-components.tsx +15 -4
  409. package/src/internal/trim.ts +10 -0
  410. package/src/invitation/InvitationManager.tsx +4 -4
  411. package/src/invitation/InvitationRedemption.tsx +7 -7
  412. package/src/invitation/useInvitationPreview.ts +1 -1
  413. package/src/licenses/LicenseDetail.tsx +8 -6
  414. package/src/licenses/LicenseIssueForm.tsx +6 -6
  415. package/src/licenses/license-draft.ts +4 -4
  416. package/src/licenses/license-format.ts +1 -1
  417. package/src/mcp-server/McpServerDetailView.tsx +4 -4
  418. package/src/memory/MemoryListPanel.tsx +4 -4
  419. package/src/oauth-app/OAuthAppListPanel.tsx +4 -4
  420. package/src/organization/OrgPreferencesPanel.tsx +9 -9
  421. package/src/organization/OrgProfilePanel.tsx +12 -12
  422. package/src/organization/index.ts +1 -0
  423. package/src/organization/useFollowSessionOrganization.ts +54 -0
  424. package/src/plan-catalog/plan-draft.ts +3 -3
  425. package/src/platform-client/PlatformClientListPanel.tsx +4 -4
  426. package/src/plugin/PluginDetailView.tsx +3 -2
  427. package/src/portal-container.ts +8 -0
  428. package/src/provider.tsx +4 -1
  429. package/src/public-base-url-context.ts +2 -1
  430. package/src/schedule/ScheduleDetailView.tsx +4 -4
  431. package/src/session/SessionViewer.tsx +13 -3
  432. package/src/session/useSessionConversation.ts +14 -3
  433. package/src/settings/EnvironmentsSection.tsx +3 -2
  434. package/src/settings/MembersSection.tsx +3 -3
  435. package/src/settings/OrgPreferencesSection.tsx +1 -1
  436. package/src/settings/OrgProfileSection.tsx +1 -1
  437. package/src/settings/TeamsSection.tsx +1 -1
  438. package/src/settings/UsageSection.tsx +1 -1
  439. package/src/sharing/ShareAgentDialog.tsx +2 -1
  440. package/src/sharing/SharedAgentChat.tsx +4 -4
  441. package/src/sidebar/WorkspaceSidebar.tsx +3 -2
  442. package/src/skill/SkillDetailView.tsx +4 -4
  443. package/src/skill/SkillDiffDialog.tsx +4 -4
  444. package/src/skill/SkillFileBrowser.tsx +4 -4
  445. package/src/team/TeamDetailPanel.tsx +3 -3
  446. package/src/team/TeamListPanel.tsx +3 -2
  447. package/src/team/TeamMembersPanel.tsx +3 -3
  448. package/src/usage/OrgUsagePanel.tsx +9 -9
  449. package/src/usage/useExportCSV.ts +9 -9
  450. package/src/usage/useOrgUsageReport.ts +7 -7
  451. package/src/version-history/VersionTimeline.tsx +4 -4
  452. package/src/workflow/WorkflowVersionDiffViewer.tsx +4 -4
  453. package/src/workflow/WorkflowVersionTimeline.tsx +4 -4
  454. package/src/workflow/useDiagnoseExecutionFlow.ts +23 -18
  455. package/src/workflow/useExplainWorkflowFlow.ts +7 -3
  456. package/src/workflow/useRefineWorkflowFlow.ts +17 -10
  457. package/src/workflow/useWorkflowArchitectFlow.ts +7 -3
  458. package/src/workspace/ExplorerTree.tsx +4 -8
  459. package/src/workspace/FileViewer.tsx +4 -5
  460. package/styles.css +1 -1
  461. package/team/TeamDetailPanel.d.ts +2 -2
  462. package/team/TeamDetailPanel.d.ts.map +1 -1
  463. package/team/TeamDetailPanel.js +2 -2
  464. package/team/TeamDetailPanel.js.map +1 -1
  465. package/team/TeamListPanel.d.ts.map +1 -1
  466. package/team/TeamListPanel.js +2 -1
  467. package/team/TeamListPanel.js.map +1 -1
  468. package/team/TeamMembersPanel.d.ts +2 -2
  469. package/team/TeamMembersPanel.d.ts.map +1 -1
  470. package/team/TeamMembersPanel.js +2 -2
  471. package/team/TeamMembersPanel.js.map +1 -1
  472. package/usage/OrgUsagePanel.d.ts +3 -3
  473. package/usage/OrgUsagePanel.d.ts.map +1 -1
  474. package/usage/OrgUsagePanel.js +6 -5
  475. package/usage/OrgUsagePanel.js.map +1 -1
  476. package/usage/useExportCSV.d.ts +2 -2
  477. package/usage/useExportCSV.d.ts.map +1 -1
  478. package/usage/useExportCSV.js +9 -9
  479. package/usage/useExportCSV.js.map +1 -1
  480. package/usage/useOrgUsageReport.d.ts +4 -4
  481. package/usage/useOrgUsageReport.d.ts.map +1 -1
  482. package/usage/useOrgUsageReport.js +7 -7
  483. package/usage/useOrgUsageReport.js.map +1 -1
  484. package/version-history/VersionTimeline.d.ts.map +1 -1
  485. package/version-history/VersionTimeline.js +2 -1
  486. package/version-history/VersionTimeline.js.map +1 -1
  487. package/workflow/WorkflowVersionDiffViewer.d.ts.map +1 -1
  488. package/workflow/WorkflowVersionDiffViewer.js +2 -1
  489. package/workflow/WorkflowVersionDiffViewer.js.map +1 -1
  490. package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
  491. package/workflow/WorkflowVersionTimeline.js +2 -1
  492. package/workflow/WorkflowVersionTimeline.js.map +1 -1
  493. package/workflow/useDiagnoseExecutionFlow.d.ts.map +1 -1
  494. package/workflow/useDiagnoseExecutionFlow.js +23 -18
  495. package/workflow/useDiagnoseExecutionFlow.js.map +1 -1
  496. package/workflow/useExplainWorkflowFlow.d.ts.map +1 -1
  497. package/workflow/useExplainWorkflowFlow.js +7 -3
  498. package/workflow/useExplainWorkflowFlow.js.map +1 -1
  499. package/workflow/useRefineWorkflowFlow.d.ts.map +1 -1
  500. package/workflow/useRefineWorkflowFlow.js +14 -10
  501. package/workflow/useRefineWorkflowFlow.js.map +1 -1
  502. package/workflow/useWorkflowArchitectFlow.d.ts.map +1 -1
  503. package/workflow/useWorkflowArchitectFlow.js +7 -3
  504. package/workflow/useWorkflowArchitectFlow.js.map +1 -1
  505. package/workspace/ExplorerTree.d.ts.map +1 -1
  506. package/workspace/ExplorerTree.js +2 -5
  507. package/workspace/ExplorerTree.js.map +1 -1
  508. package/workspace/FileViewer.d.ts.map +1 -1
  509. package/workspace/FileViewer.js +2 -1
  510. package/workspace/FileViewer.js.map +1 -1
@@ -144,7 +144,12 @@ const CONVERSATION_COLUMN_CLASS = "stg:mx-auto stg:w-full stg:max-w-3xl";
144
144
  export interface SessionViewerProps {
145
145
  /** Session ID to load and display. */
146
146
  readonly sessionId: string;
147
- /** Organization slug. */
147
+ /**
148
+ * Organization slug to act in until the session has loaded. After that
149
+ * the viewer acts in the session's own organization (`session.metadata.org`),
150
+ * whatever this prop says: a turn in a session belongs to that session's
151
+ * organization.
152
+ */
148
153
  readonly org: string;
149
154
  /**
150
155
  * GitHub connection state. Platform-specific — web passes
@@ -384,7 +389,7 @@ export interface SessionViewerProps {
384
389
  */
385
390
  export function SessionViewer({
386
391
  sessionId,
387
- org,
392
+ org: orgProp,
388
393
  gitHubConnection,
389
394
  enableGitHub = true,
390
395
  enableLocal = false,
@@ -410,13 +415,18 @@ export function SessionViewer({
410
415
  }: SessionViewerProps) {
411
416
  const flow = useSessionPageFlow({
412
417
  sessionId,
413
- org,
418
+ org: orgProp,
414
419
  getRuntimeEnv,
415
420
  audience,
416
421
  runConfig,
417
422
  accountDefaults,
418
423
  });
419
424
  const { conv } = flow;
425
+ // Everything org-scoped below acts in the session's own organization once
426
+ // it has loaded (the pickers, artifacts, plan actions and the reply), so a
427
+ // session opened while another organization is active never files its
428
+ // turns there (stigmer/stigmer#1580).
429
+ const org = conv.org;
420
430
  const isGuest = audience === "guest";
421
431
  // A pinned model makes the picker a dead control (the pin wins over any
422
432
  // choice it could offer), so the pin forces it hidden; the guest strip
@@ -161,6 +161,15 @@ export interface SendFollowUpOptions {
161
161
  export interface UseSessionConversationReturn {
162
162
  /** The session object, or null while loading. */
163
163
  readonly session: Session | null;
164
+ /**
165
+ * The organization this conversation's turns are filed under: the
166
+ * session's own (`session.metadata.org`) once it has loaded, the `org`
167
+ * argument until then. A turn in a session belongs to that session's
168
+ * organization, and the server refuses any other (stigmer/stigmer#1580),
169
+ * so every org-scoped control of a session surface reads this value
170
+ * rather than the caller's active organization.
171
+ */
172
+ readonly org: string;
164
173
  /**
165
174
  * Executions in terminal phases, in chronological order.
166
175
  *
@@ -373,7 +382,7 @@ export interface UseSessionConversationReturn {
373
382
  * locally, so it is safe in every environment.
374
383
  *
375
384
  * @param sessionId - Session to display and converse in. Pass `null` to skip.
376
- * @param org - Organization slug for creating follow-up executions.
385
+ * @param org - Organization slug to act in until the session has loaded; after that the session's own organization is used (the returned `org`).
377
386
  *
378
387
  * @example
379
388
  * ```tsx
@@ -433,6 +442,7 @@ export function useSessionConversation(
433
442
  clearError: clearCreateError,
434
443
  } = useCreateAgentExecution();
435
444
  const { update: updateSession } = useUpdateSession();
445
+ const turnOrg = session?.metadata?.org || org;
436
446
  const {
437
447
  submitApproval: rawSubmitApproval,
438
448
  submittingToolCallIds,
@@ -667,7 +677,7 @@ export function useSessionConversation(
667
677
  }
668
678
 
669
679
  const result = await create({
670
- org,
680
+ org: turnOrg,
671
681
  sessionId,
672
682
  message,
673
683
  modelName: options?.modelName,
@@ -698,7 +708,7 @@ export function useSessionConversation(
698
708
  }
699
709
  }
700
710
  },
701
- [sessionId, session, org, stigmer, create, updateSession, refetch, refetchSession],
711
+ [sessionId, session, turnOrg, stigmer, create, updateSession, refetch, refetchSession],
702
712
  );
703
713
 
704
714
  const retryLastSend = useCallback(() => {
@@ -763,6 +773,7 @@ export function useSessionConversation(
763
773
 
764
774
  return {
765
775
  session,
776
+ org: turnOrg,
766
777
  completedExecutions,
767
778
  activeStreamExecution,
768
779
  activePhase,
@@ -7,6 +7,7 @@ import { EnvironmentVariableEditor } from "../environment/EnvironmentVariableEdi
7
7
  import { EnvironmentListPanel } from "../environment/EnvironmentListPanel.js";
8
8
  import { CreateEnvironmentForm } from "../environment/CreateEnvironmentForm.js";
9
9
  import { useActiveOrgSlug } from "../organization/OrgProvider.js";
10
+ import { LoadingRegion } from "../internal/LoadingRegion.js";
10
11
 
11
12
  const ENV_EXCLUDE_LABELS: Record<string, string>[] = [
12
13
  { "stigmer.ai/personal": "true" },
@@ -152,7 +153,7 @@ function EnvironmentsCard({ org }: { org: string }) {
152
153
 
153
154
  function SkeletonRows({ count }: { count: number }) {
154
155
  return (
155
- <div className="stg:space-y-2" aria-busy="true" aria-label="Loading">
156
+ <LoadingRegion className="stg:space-y-2" label="Loading">
156
157
  {Array.from({ length: count }, (_, i) => (
157
158
  <div
158
159
  key={i}
@@ -160,6 +161,6 @@ function SkeletonRows({ count }: { count: number }) {
160
161
  style={{ width: `${85 - i * 10}%` }}
161
162
  />
162
163
  ))}
163
- </div>
164
+ </LoadingRegion>
164
165
  );
165
166
  }
@@ -24,7 +24,7 @@ export function MembersSection() {
24
24
  ApiResourceKind.invitation,
25
25
  );
26
26
  const idpAvailable = useResourceAvailable(ApiResourceKind.identity_provider);
27
- const orgId = activeOrg?.metadata?.id ?? "";
27
+ const org = activeOrg?.metadata?.id ?? "";
28
28
  const orgSlug = activeOrg?.metadata?.slug ?? "";
29
29
 
30
30
  const { identityProviders } = useIdentityProviderList(
@@ -57,7 +57,7 @@ export function MembersSection() {
57
57
  )}
58
58
  </p>
59
59
 
60
- {!orgId ? (
60
+ {!org ? (
61
61
  <p className="stg:text-muted-foreground stg:py-4 stg:text-center stg:text-xs">
62
62
  Select an organization to manage members.
63
63
  </p>
@@ -72,7 +72,7 @@ export function MembersSection() {
72
72
  </p>
73
73
  </div>
74
74
  )}
75
- <OrgMembersPanel orgId={orgId} />
75
+ <OrgMembersPanel org={org} />
76
76
  </>
77
77
  )}
78
78
  </section>
@@ -28,7 +28,7 @@ export function OrgPreferencesSection() {
28
28
  Select an organization to view its preferences.
29
29
  </p>
30
30
  ) : (
31
- <OrgPreferencesPanel orgId={orgId} />
31
+ <OrgPreferencesPanel org={orgId} />
32
32
  )}
33
33
  </section>
34
34
  );
@@ -35,7 +35,7 @@ export function OrgProfileSection() {
35
35
  Select an organization to view its profile.
36
36
  </p>
37
37
  ) : (
38
- <OrgProfilePanel orgId={orgId} onUpdated={handleUpdated} />
38
+ <OrgProfilePanel org={orgId} onUpdated={handleUpdated} />
39
39
  )}
40
40
  </section>
41
41
  );
@@ -128,7 +128,7 @@ export function TeamsSection() {
128
128
  <TeamDetailPanel
129
129
  key={flow.team.metadata?.id}
130
130
  team={flow.team}
131
- orgId={orgId}
131
+ org={orgId}
132
132
  onUpdated={handleUpdated}
133
133
  onDeleted={handleDeleted}
134
134
  onBack={() => setFlow({ phase: "idle" })}
@@ -28,7 +28,7 @@ export function UsageSection() {
28
28
  Select an organization to view usage.
29
29
  </p>
30
30
  ) : (
31
- <OrgUsagePanel orgId={orgId} />
31
+ <OrgUsagePanel org={orgId} />
32
32
  )}
33
33
  </section>
34
34
  );
@@ -41,6 +41,7 @@ import {
41
41
  } from "./useSaveAgentShare.js";
42
42
  import { useRotateShareLink } from "./useRotateShareLink.js";
43
43
  import { useShareToolReadiness } from "./useShareToolReadiness.js";
44
+ import { trimTrailing } from "../internal/trim.js";
44
45
 
45
46
  /** Maximum length of each visitor message (proto: `string.max_len = 300`). */
46
47
  const MAX_MESSAGE_LENGTH = 300;
@@ -1521,7 +1522,7 @@ function buildDeveloperSnippet(
1521
1522
  org: string,
1522
1523
  slug: string,
1523
1524
  ): string {
1524
- const baseUrl = JSON.stringify(apiBaseUrl.replace(/\/+$/, ""));
1525
+ const baseUrl = JSON.stringify(trimTrailing(apiBaseUrl, "/"));
1525
1526
  return [
1526
1527
  `import { createPlatformClientAuth } from "@stigmer/sdk/node";`,
1527
1528
  ``,
@@ -7,6 +7,7 @@ import { NewSessionViewer } from "../session/NewSessionViewer.js";
7
7
  import { SessionViewer } from "../session/SessionViewer.js";
8
8
  import { useSharedAgentProfile } from "./useSharedAgentProfile.js";
9
9
  import type { SharingAudience } from "./useSaveAgentShare.js";
10
+ import { LoadingRegion } from "../internal/LoadingRegion.js";
10
11
 
11
12
  // ---------------------------------------------------------------------------
12
13
  // Public API
@@ -123,13 +124,12 @@ export function SharedAgentChat({
123
124
 
124
125
  if (isLoading) {
125
126
  return (
126
- <div
127
+ <LoadingRegion
127
128
  className={cn("stg:flex stg:h-full stg:w-full stg:items-center stg:justify-center", className)}
128
- aria-busy="true"
129
- aria-label="Loading agent"
129
+ label="Loading agent"
130
130
  >
131
131
  <LoadingSkeleton />
132
- </div>
132
+ </LoadingRegion>
133
133
  );
134
134
  }
135
135
 
@@ -31,6 +31,7 @@ import {
31
31
  sectionLabelClassName,
32
32
  } from "./chrome.js";
33
33
  import type { RenderSidebarLink } from "./types.js";
34
+ import { LoadingRegion } from "../internal/LoadingRegion.js";
34
35
 
35
36
  // ---------------------------------------------------------------------------
36
37
  // Public API
@@ -433,7 +434,7 @@ function cnActivityRow(active: boolean): string {
433
434
 
434
435
  function RecentsSkeletons() {
435
436
  return (
436
- <div className="stg:space-y-2 stg:px-2" aria-busy="true" aria-label="Loading sessions">
437
+ <LoadingRegion className="stg:space-y-2 stg:px-2" label="Loading sessions">
437
438
  {Array.from({ length: 5 }, (_, i) => (
438
439
  <div
439
440
  key={i}
@@ -441,7 +442,7 @@ function RecentsSkeletons() {
441
442
  style={{ width: `${70 + Math.sin(i * 1.5) * 20}%` }}
442
443
  />
443
444
  ))}
444
- </div>
445
+ </LoadingRegion>
445
446
  );
446
447
  }
447
448
 
@@ -28,6 +28,7 @@ import { VersionTimeline } from "../version-history/VersionTimeline.js";
28
28
  import { SkillDiffDialog, type SkillDiffDialogState } from "./SkillDiffDialog.js";
29
29
  import { ManagedByPluginNotice } from "../plugin/ManagedByPluginNotice.js";
30
30
  import { useManagingPlugin } from "../plugin/useManagingPlugin.js";
31
+ import { LoadingRegion } from "../internal/LoadingRegion.js";
31
32
 
32
33
  const CONTENT_TAB: TabItem = { id: "content", label: "Content" };
33
34
  const VERSIONS_TAB: TabItem = { id: "versions", label: "Versions" };
@@ -650,10 +651,9 @@ function SkillSection({
650
651
 
651
652
  function LoadingSkeleton({ className }: { readonly className?: string }) {
652
653
  return (
653
- <div
654
+ <LoadingRegion
654
655
  className={cn("stg:flex stg:flex-col stg:gap-6", className)}
655
- aria-busy="true"
656
- aria-label="Loading skill details"
656
+ label="Loading skill details"
657
657
  >
658
658
  <div className="stg:flex stg:items-start stg:gap-3">
659
659
  <div className="stg:mt-1 stg:size-6 stg:shrink-0 stg:animate-pulse stg:rounded stg:bg-muted" />
@@ -677,7 +677,7 @@ function LoadingSkeleton({ className }: { readonly className?: string }) {
677
677
  style={{ height: "64px" }}
678
678
  />
679
679
  </div>
680
- </div>
680
+ </LoadingRegion>
681
681
  );
682
682
  }
683
683
 
@@ -6,6 +6,7 @@ import { DialogShell } from "../internal/DialogShell.js";
6
6
  import { useSkillDiff } from "./useSkillDiff.js";
7
7
  import { MultiFileDiffView } from "../version-history/MultiFileDiffView.js";
8
8
  import { ErrorMessage } from "../error/ErrorMessage.js";
9
+ import { LoadingRegion } from "../internal/LoadingRegion.js";
9
10
 
10
11
  // ---------------------------------------------------------------------------
11
12
  // Public types
@@ -129,10 +130,9 @@ export function SkillDiffDialog({ state, onClose }: SkillDiffDialogProps) {
129
130
 
130
131
  function DiffSkeleton() {
131
132
  return (
132
- <div
133
+ <LoadingRegion
133
134
  className="stg:flex stg:flex-col stg:gap-4"
134
- aria-busy="true"
135
- aria-label="Loading diff"
135
+ label="Loading diff"
136
136
  >
137
137
  <div className="stg:flex stg:items-center stg:gap-2">
138
138
  <div className="stg:h-4 stg:w-36 stg:animate-pulse stg:rounded stg:bg-muted" />
@@ -147,7 +147,7 @@ function DiffSkeleton() {
147
147
  <div className="stg:h-4 stg:flex-1 stg:animate-pulse stg:rounded stg:bg-muted" />
148
148
  </div>
149
149
  ))}
150
- </div>
150
+ </LoadingRegion>
151
151
  );
152
152
  }
153
153
 
@@ -7,6 +7,7 @@ import { UNSTYLED_LIST } from "../internal/element-resets.js";
7
7
  import { MARKDOWN_COMPONENTS, REMARK_PLUGINS, stripFrontmatter } from "../internal/markdown-components.js";
8
8
  import { buildFileTree, FileTreeNode } from "../internal/file-tree/index.js";
9
9
  import { useSkillArtifact } from "./useSkillArtifact.js";
10
+ import { LoadingRegion } from "../internal/LoadingRegion.js";
10
11
 
11
12
  // ---------------------------------------------------------------------------
12
13
  // Public types
@@ -79,10 +80,9 @@ export function SkillFileBrowser({
79
80
 
80
81
  if (isLoading) {
81
82
  return (
82
- <div
83
+ <LoadingRegion
83
84
  className={cn("stg:rounded-lg stg:border stg:border-border", className)}
84
- aria-busy="true"
85
- aria-label="Loading skill package files"
85
+ label="Loading skill package files"
86
86
  >
87
87
  <div className="stg:p-4">
88
88
  <div className="stg:h-3 stg:w-32 stg:animate-pulse stg:rounded stg:bg-muted" />
@@ -101,7 +101,7 @@ export function SkillFileBrowser({
101
101
  </div>
102
102
  </div>
103
103
  </div>
104
- </div>
104
+ </LoadingRegion>
105
105
  );
106
106
  }
107
107
 
@@ -30,7 +30,7 @@ import { useDeleteTeam, useUpdateTeam } from "./useTeamMutations.js";
30
30
  export interface TeamDetailPanelProps {
31
31
  readonly team: Team;
32
32
  /** The organization's id (`metadata.id`), whose members can be added. */
33
- readonly orgId: string;
33
+ readonly org: string;
34
34
  /** Fired with the saved team after an edit. */
35
35
  readonly onUpdated?: (team: Team) => void;
36
36
  /** Fired after the team is deleted. */
@@ -47,7 +47,7 @@ export interface TeamDetailPanelProps {
47
47
  */
48
48
  export function TeamDetailPanel({
49
49
  team,
50
- orgId,
50
+ org,
51
51
  onUpdated,
52
52
  onDeleted,
53
53
  onBack,
@@ -112,7 +112,7 @@ export function TeamDetailPanel({
112
112
  )}
113
113
 
114
114
  <section aria-label="Members">
115
- <TeamMembersPanel teamId={teamId} orgId={orgId} />
115
+ <TeamMembersPanel teamId={teamId} org={org} />
116
116
  </section>
117
117
 
118
118
  <PermissionGate resource={gate} relation="can_delete">
@@ -15,6 +15,7 @@ import { ChevronRight, UsersRound } from "lucide-react";
15
15
  import { cn } from "@stigmer/theme";
16
16
  import { getUserMessage } from "@stigmer/sdk";
17
17
  import { UNSTYLED_LIST } from "../internal/element-resets.js";
18
+ import { LoadingRegion } from "../internal/LoadingRegion.js";
18
19
 
19
20
  /** Props for {@link TeamListPanel}. */
20
21
  export interface TeamListPanelProps {
@@ -47,11 +48,11 @@ export function TeamListPanel({
47
48
  }: TeamListPanelProps) {
48
49
  if (isLoading) {
49
50
  return (
50
- <div className={cn("stg:space-y-2", className)} aria-busy="true" aria-label="Loading teams">
51
+ <LoadingRegion className={cn("stg:space-y-2", className)} label="Loading teams">
51
52
  {Array.from({ length: 2 }, (_, i) => (
52
53
  <div key={i} className="stg:bg-muted-subtle stg:h-14 stg:animate-pulse stg:rounded-lg" />
53
54
  ))}
54
- </div>
55
+ </LoadingRegion>
55
56
  );
56
57
  }
57
58
 
@@ -32,7 +32,7 @@ export interface TeamMembersPanelProps {
32
32
  /** The team's id (`metadata.id`). */
33
33
  readonly teamId: string;
34
34
  /** The organization's id (`metadata.id`), whose members can be added. */
35
- readonly orgId: string;
35
+ readonly org: string;
36
36
  readonly className?: string;
37
37
  }
38
38
 
@@ -42,7 +42,7 @@ export interface TeamMembersPanelProps {
42
42
  *
43
43
  * All visual properties flow through `--stgm-*` design tokens.
44
44
  */
45
- export function TeamMembersPanel({ teamId, orgId, className }: TeamMembersPanelProps) {
45
+ export function TeamMembersPanel({ teamId, org, className }: TeamMembersPanelProps) {
46
46
  const team = useMemo(
47
47
  () => ({ kind: "team", id: teamId, resourceKind: ApiResourceKind.team }),
48
48
  [teamId],
@@ -131,7 +131,7 @@ export function TeamMembersPanel({ teamId, orgId, className }: TeamMembersPanelP
131
131
  <PermissionGate resource={grantGate} relation="can_grant_access">
132
132
  <div className="stg:mt-4 stg:flex stg:items-end stg:gap-2 stg:border-t stg:border-border stg:pt-4">
133
133
  <PrincipalPicker
134
- orgId={orgId}
134
+ org={org}
135
135
  value={adding}
136
136
  onChange={setAdding}
137
137
  excludeGrantees={members}
@@ -22,6 +22,7 @@ import { AgentBreakdownList } from "./AgentBreakdownList.js";
22
22
  import { HarnessSplitCard } from "./HarnessSplitCard.js";
23
23
  import { ExportButton } from "./ExportButton.js";
24
24
  import { useExportCSV } from "./useExportCSV.js";
25
+ import { LoadingRegion } from "../internal/LoadingRegion.js";
25
26
 
26
27
  // ---------------------------------------------------------------------------
27
28
  // Public API
@@ -30,7 +31,7 @@ import { useExportCSV } from "./useExportCSV.js";
30
31
  /** Props for {@link OrgUsagePanel}. */
31
32
  export interface OrgUsagePanelProps {
32
33
  /** Organization ID (`metadata.id`) to fetch usage for. */
33
- readonly orgId: string;
34
+ readonly org: string;
34
35
  /** Additional CSS class names for the root container. */
35
36
  readonly className?: string;
36
37
  }
@@ -47,22 +48,21 @@ export interface OrgUsagePanelProps {
47
48
  *
48
49
  * @example
49
50
  * ```tsx
50
- * <OrgUsagePanel orgId={activeOrg.metadata.id} />
51
+ * <OrgUsagePanel org={activeOrg.metadata.id} />
51
52
  * ```
52
53
  */
53
- export function OrgUsagePanel({ orgId, className }: OrgUsagePanelProps) {
54
+ export function OrgUsagePanel({ org, className }: OrgUsagePanelProps) {
54
55
  const [preset, setPreset] = useState<DateRangePreset>("30d");
55
56
  const dateRange = dateRangeFromPreset(preset);
56
- const { report, isLoading, error } = useOrgUsageReport(orgId, dateRange);
57
- const { exportCSV, isExporting } = useExportCSV(report, orgId);
57
+ const { report, isLoading, error } = useOrgUsageReport(org, dateRange);
58
+ const { exportCSV, isExporting } = useExportCSV(report, org);
58
59
  const daysInRange = Number.parseInt(preset, 10);
59
60
 
60
61
  if (isLoading) {
61
62
  return (
62
- <div
63
+ <LoadingRegion
63
64
  className={cn("stg:space-y-4", className)}
64
- aria-busy="true"
65
- aria-label="Loading usage data"
65
+ label="Loading usage data"
66
66
  >
67
67
  <div className="stg:flex stg:gap-2">
68
68
  {DATE_RANGE_PRESETS.map((p) => (
@@ -81,7 +81,7 @@ export function OrgUsagePanel({ orgId, className }: OrgUsagePanelProps) {
81
81
  ))}
82
82
  </div>
83
83
  <div className="stg:h-40 stg:animate-pulse stg:rounded-lg stg:bg-muted-subtle" />
84
- </div>
84
+ </LoadingRegion>
85
85
  );
86
86
  }
87
87
 
@@ -24,11 +24,11 @@ export interface UseExportCSVReturn {
24
24
  * - `model_breakdown` — one row per model with calls, tokens, cost
25
25
  *
26
26
  * @param report - The org usage report data (from `useOrgUsageReport`).
27
- * @param orgId - Organization ID for the filename.
27
+ * @param org - Organization ID for the filename.
28
28
  */
29
29
  export function useExportCSV(
30
30
  report: GetOrgUsageReportOutput | null,
31
- orgId: string,
31
+ org: string,
32
32
  ): UseExportCSVReturn {
33
33
  const [isExporting, setIsExporting] = useState(false);
34
34
 
@@ -39,15 +39,15 @@ export function useExportCSV(
39
39
 
40
40
  try {
41
41
  const { csv, filename } = format === "daily_summary"
42
- ? buildDailySummaryCSV(report, orgId)
43
- : buildModelBreakdownCSV(report, orgId);
42
+ ? buildDailySummaryCSV(report, org)
43
+ : buildModelBreakdownCSV(report, org);
44
44
 
45
45
  downloadTextFile(csv, filename, "text/csv");
46
46
  } finally {
47
47
  setIsExporting(false);
48
48
  }
49
49
  },
50
- [report, orgId],
50
+ [report, org],
51
51
  );
52
52
 
53
53
  return { exportCSV, isExporting };
@@ -55,7 +55,7 @@ export function useExportCSV(
55
55
 
56
56
  function buildDailySummaryCSV(
57
57
  report: GetOrgUsageReportOutput,
58
- orgId: string,
58
+ org: string,
59
59
  ): { csv: string; filename: string } {
60
60
  const header = "Date,Executions,Tokens,Cost (USD)";
61
61
  const rows = report.dailyCosts.map((entry) => {
@@ -65,13 +65,13 @@ function buildDailySummaryCSV(
65
65
 
66
66
  return {
67
67
  csv: [header, ...rows].join("\n"),
68
- filename: `${orgId}-daily-usage.csv`,
68
+ filename: `${org}-daily-usage.csv`,
69
69
  };
70
70
  }
71
71
 
72
72
  function buildModelBreakdownCSV(
73
73
  report: GetOrgUsageReportOutput,
74
- orgId: string,
74
+ org: string,
75
75
  ): { csv: string; filename: string } {
76
76
  const header =
77
77
  "Model,Provider,Calls,Input Tokens,Output Tokens,Cache Read Tokens,Cache Write Tokens,Cost (USD)";
@@ -91,7 +91,7 @@ function buildModelBreakdownCSV(
91
91
 
92
92
  return {
93
93
  csv: [header, ...rows].join("\n"),
94
- filename: `${orgId}-model-usage.csv`,
94
+ filename: `${org}-model-usage.csv`,
95
95
  };
96
96
  }
97
97
 
@@ -39,16 +39,16 @@ export interface UseOrgUsageReportReturn {
39
39
  * org ID and date range. The server returns aggregated totals, a
40
40
  * per-model breakdown, the top agents by cost, and a daily cost trend.
41
41
  *
42
- * Pass `null` as `orgId` to skip fetching (stable no-op). Call
42
+ * Pass `null` as `org` to skip fetching (stable no-op). Call
43
43
  * `refetch()` to re-query manually.
44
44
  *
45
- * @param orgId - Organization ID, or `null` to skip.
45
+ * @param org - Organization ID, or `null` to skip.
46
46
  * @param dateRange - Closed date range (YYYY-MM-DD strings).
47
47
  *
48
48
  * @example
49
49
  * ```tsx
50
50
  * const range = dateRangeFromPreset("30d");
51
- * const { report, isLoading, error } = useOrgUsageReport(orgId, range);
51
+ * const { report, isLoading, error } = useOrgUsageReport(org, range);
52
52
  *
53
53
  * if (isLoading) return <Skeleton />;
54
54
  * if (error) return <ErrorMessage error={error} />;
@@ -59,23 +59,23 @@ export interface UseOrgUsageReportReturn {
59
59
  * ```
60
60
  */
61
61
  export function useOrgUsageReport(
62
- orgId: string | null,
62
+ org: string | null,
63
63
  dateRange: DateRange,
64
64
  ): UseOrgUsageReportReturn {
65
65
  const stigmer = useStigmer();
66
66
 
67
67
  const { data: report, isLoading, isRefetching, error, refetch } = useFetch(
68
- orgId
68
+ org
69
69
  ? () =>
70
70
  stigmer.agentExecution.getOrgUsageReport(
71
71
  create(GetOrgUsageReportInputSchema, {
72
- orgId,
72
+ org,
73
73
  fromDate: dateRange.from,
74
74
  toDate: dateRange.to,
75
75
  }),
76
76
  )
77
77
  : null,
78
- [orgId, dateRange.from, dateRange.to, stigmer],
78
+ [org, dateRange.from, dateRange.to, stigmer],
79
79
  null as GetOrgUsageReportOutput | null,
80
80
  );
81
81
 
@@ -4,6 +4,7 @@ import { useCallback, useState } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
5
  import type { VersionTimelineProps } from "./types.js";
6
6
  import { VersionTimelineEntry } from "./VersionTimelineEntry.js";
7
+ import { LoadingRegion } from "../internal/LoadingRegion.js";
7
8
 
8
9
  /**
9
10
  * Accessible vertical timeline for version history.
@@ -163,10 +164,9 @@ function CompareIcon({ className }: { readonly className?: string }) {
163
164
 
164
165
  function TimelineSkeleton({ className }: { readonly className?: string }) {
165
166
  return (
166
- <div
167
+ <LoadingRegion
167
168
  className={cn("stg:flex stg:flex-col stg:gap-4 stg:pt-2", className)}
168
- aria-busy="true"
169
- aria-label="Loading version history"
169
+ label="Loading version history"
170
170
  >
171
171
  {[1, 2, 3].map((i) => (
172
172
  <div key={i} className="stg:flex stg:gap-3">
@@ -183,7 +183,7 @@ function TimelineSkeleton({ className }: { readonly className?: string }) {
183
183
  </div>
184
184
  </div>
185
185
  ))}
186
- </div>
186
+ </LoadingRegion>
187
187
  );
188
188
  }
189
189
 
@@ -3,6 +3,7 @@
3
3
  import { cn } from "@stigmer/theme";
4
4
  import { useWorkflowVersionDiff } from "./useWorkflowVersionDiff.js";
5
5
  import type { DiffLine } from "./workflow-yaml-diff.js";
6
+ import { LoadingRegion } from "../internal/LoadingRegion.js";
6
7
 
7
8
  /** Props for {@link WorkflowVersionDiffViewer}. */
8
9
  export interface WorkflowVersionDiffViewerProps {
@@ -163,13 +164,12 @@ function DiffLineRow({
163
164
 
164
165
  function DiffSkeleton({ className }: { readonly className?: string }) {
165
166
  return (
166
- <div
167
+ <LoadingRegion
167
168
  className={cn(
168
169
  "stg:overflow-hidden stg:rounded-lg stg:border stg:border-border",
169
170
  className,
170
171
  )}
171
- aria-busy="true"
172
- aria-label="Loading diff"
172
+ label="Loading diff"
173
173
  >
174
174
  <div className="stg:border-b stg:border-border stg:bg-muted stg:px-3 stg:py-2">
175
175
  <div className="stg:h-4 stg:w-48 stg:animate-pulse stg:rounded stg:bg-muted-foreground/20" />
@@ -185,7 +185,7 @@ function DiffSkeleton({ className }: { readonly className?: string }) {
185
185
  </div>
186
186
  ))}
187
187
  </div>
188
- </div>
188
+ </LoadingRegion>
189
189
  );
190
190
  }
191
191