@stigmer/react 3.40.1 → 3.41.1-dev.20261003094357.g39d6aa748646

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 (707) hide show
  1. package/README.md +2 -1
  2. package/access/ManageAccessButton.d.ts +1 -1
  3. package/access/ManageAccessButton.js +1 -1
  4. package/access/ManageAccessDialog.d.ts +1 -1
  5. package/access/ManageAccessDialog.js +2 -2
  6. package/access/ManageAccessDialog.js.map +1 -1
  7. package/access/types.d.ts +1 -1
  8. package/agent/AgentDetailView.d.ts.map +1 -1
  9. package/agent/AgentDetailView.js +2 -1
  10. package/agent/AgentDetailView.js.map +1 -1
  11. package/api-key/ApiKeyListPanel.d.ts.map +1 -1
  12. package/api-key/ApiKeyListPanel.js +2 -1
  13. package/api-key/ApiKeyListPanel.js.map +1 -1
  14. package/attachment/AttachmentImageLightbox.d.ts.map +1 -1
  15. package/attachment/AttachmentImageLightbox.js.map +1 -1
  16. package/billing/AutoRechargeCard.d.ts +3 -3
  17. package/billing/AutoRechargeCard.d.ts.map +1 -1
  18. package/billing/AutoRechargeCard.js +4 -4
  19. package/billing/AutoRechargeCard.js.map +1 -1
  20. package/billing/BillingSection.d.ts.map +1 -1
  21. package/billing/BillingSection.js +7 -6
  22. package/billing/BillingSection.js.map +1 -1
  23. package/billing/ChangePlanDialog.d.ts.map +1 -1
  24. package/billing/ChangePlanDialog.js +13 -1
  25. package/billing/ChangePlanDialog.js.map +1 -1
  26. package/billing/CreditLedgerTable.d.ts +3 -3
  27. package/billing/CreditLedgerTable.d.ts.map +1 -1
  28. package/billing/CreditLedgerTable.js +3 -3
  29. package/billing/CreditLedgerTable.js.map +1 -1
  30. package/billing/CreditPackGrid.d.ts +1 -1
  31. package/billing/CreditPackGrid.js +1 -1
  32. package/billing/PaymentMethodCard.d.ts +1 -1
  33. package/billing/PaymentMethodCard.js +1 -1
  34. package/billing/PlanSection.d.ts +3 -3
  35. package/billing/PlanSection.d.ts.map +1 -1
  36. package/billing/PlanSection.js +4 -3
  37. package/billing/PlanSection.js.map +1 -1
  38. package/billing/ProviderKeysSection.d.ts +33 -0
  39. package/billing/ProviderKeysSection.d.ts.map +1 -0
  40. package/billing/ProviderKeysSection.js +143 -0
  41. package/billing/ProviderKeysSection.js.map +1 -0
  42. package/billing/UpgradeNotice.d.ts.map +1 -1
  43. package/billing/UpgradeNotice.js +1 -0
  44. package/billing/UpgradeNotice.js.map +1 -1
  45. package/billing/index.d.ts +4 -0
  46. package/billing/index.d.ts.map +1 -1
  47. package/billing/index.js +2 -0
  48. package/billing/index.js.map +1 -1
  49. package/billing/plan-features.d.ts +3 -2
  50. package/billing/plan-features.d.ts.map +1 -1
  51. package/billing/plan-features.js +5 -4
  52. package/billing/plan-features.js.map +1 -1
  53. package/billing/useBillingAccount.d.ts +4 -4
  54. package/billing/useBillingAccount.d.ts.map +1 -1
  55. package/billing/useBillingAccount.js +7 -7
  56. package/billing/useBillingAccount.js.map +1 -1
  57. package/billing/useBillingUsageReport.d.ts +4 -4
  58. package/billing/useBillingUsageReport.d.ts.map +1 -1
  59. package/billing/useBillingUsageReport.js +7 -7
  60. package/billing/useBillingUsageReport.js.map +1 -1
  61. package/billing/useChangePlan.d.ts +2 -2
  62. package/billing/useChangePlan.d.ts.map +1 -1
  63. package/billing/useChangePlan.js +4 -4
  64. package/billing/useChangePlan.js.map +1 -1
  65. package/billing/useCreateBillingPortalSession.d.ts +2 -2
  66. package/billing/useCreateBillingPortalSession.d.ts.map +1 -1
  67. package/billing/useCreateBillingPortalSession.js +3 -3
  68. package/billing/useCreateBillingPortalSession.js.map +1 -1
  69. package/billing/useCreateCheckoutSession.d.ts +2 -2
  70. package/billing/useCreateCheckoutSession.d.ts.map +1 -1
  71. package/billing/useCreateCheckoutSession.js +2 -2
  72. package/billing/useCreateCheckoutSession.js.map +1 -1
  73. package/billing/useCreatePaymentMethodSetupSession.d.ts +1 -1
  74. package/billing/useCreatePaymentMethodSetupSession.d.ts.map +1 -1
  75. package/billing/useCreatePaymentMethodSetupSession.js +2 -2
  76. package/billing/useCreatePaymentMethodSetupSession.js.map +1 -1
  77. package/billing/useCreditLedger.d.ts +4 -4
  78. package/billing/useCreditLedger.d.ts.map +1 -1
  79. package/billing/useCreditLedger.js +7 -7
  80. package/billing/useCreditLedger.js.map +1 -1
  81. package/billing/useCustomerModelPricing.d.ts +4 -4
  82. package/billing/useCustomerModelPricing.d.ts.map +1 -1
  83. package/billing/useCustomerModelPricing.js +6 -6
  84. package/billing/useCustomerModelPricing.js.map +1 -1
  85. package/billing/useEntitlements.d.ts +2 -2
  86. package/billing/useEntitlements.d.ts.map +1 -1
  87. package/billing/useEntitlements.js +4 -4
  88. package/billing/useEntitlements.js.map +1 -1
  89. package/billing/usePeriodEstimate.d.ts +1 -1
  90. package/billing/usePeriodEstimate.d.ts.map +1 -1
  91. package/billing/usePeriodEstimate.js +3 -3
  92. package/billing/usePeriodEstimate.js.map +1 -1
  93. package/billing/useProviderKeys.d.ts +67 -0
  94. package/billing/useProviderKeys.d.ts.map +1 -0
  95. package/billing/useProviderKeys.js +61 -0
  96. package/billing/useProviderKeys.js.map +1 -0
  97. package/billing/useSetAutoRechargeConfig.d.ts +2 -2
  98. package/billing/useSetAutoRechargeConfig.d.ts.map +1 -1
  99. package/billing/useSetAutoRechargeConfig.js +2 -2
  100. package/billing/useSetAutoRechargeConfig.js.map +1 -1
  101. package/billing/useSubscription.d.ts +3 -3
  102. package/billing/useSubscription.d.ts.map +1 -1
  103. package/billing/useSubscription.js +7 -7
  104. package/billing/useSubscription.js.map +1 -1
  105. package/channel/AgentChannelsPanel.d.ts.map +1 -1
  106. package/channel/AgentChannelsPanel.js +11 -9
  107. package/channel/AgentChannelsPanel.js.map +1 -1
  108. package/channel/connect/ServingAppSection.js +1 -1
  109. package/channel/connect/ServingAppSection.js.map +1 -1
  110. package/channel-app/ChannelAppDetailPanel.d.ts +2 -2
  111. package/channel-app/ChannelAppDetailPanel.js +17 -10
  112. package/channel-app/ChannelAppDetailPanel.js.map +1 -1
  113. package/channel-app/ChannelAppListPanel.d.ts +2 -2
  114. package/channel-app/ChannelAppListPanel.d.ts.map +1 -1
  115. package/channel-app/ChannelAppListPanel.js +2 -1
  116. package/channel-app/ChannelAppListPanel.js.map +1 -1
  117. package/channel-app/CreateChannelAppForm.js +1 -1
  118. package/channel-app/CreateChannelAppForm.js.map +1 -1
  119. package/channel-app/copy.d.ts +3 -3
  120. package/channel-app/copy.js +3 -3
  121. package/channel-app/internal.d.ts +9 -0
  122. package/channel-app/internal.d.ts.map +1 -1
  123. package/channel-app/internal.js +9 -0
  124. package/channel-app/internal.js.map +1 -1
  125. package/channel-app/slackAppSetup.d.ts +3 -24
  126. package/channel-app/slackAppSetup.d.ts.map +1 -1
  127. package/channel-app/slackAppSetup.js +6 -3
  128. package/channel-app/slackAppSetup.js.map +1 -1
  129. package/channel-app/whatsappAppSetup.d.ts +3 -27
  130. package/channel-app/whatsappAppSetup.d.ts.map +1 -1
  131. package/channel-app/whatsappAppSetup.js +5 -2
  132. package/channel-app/whatsappAppSetup.js.map +1 -1
  133. package/composer/SessionComposer.d.ts.map +1 -1
  134. package/composer/SessionComposer.js +5 -9
  135. package/composer/SessionComposer.js.map +1 -1
  136. package/cursor-accounts/CursorAccountEditor.js +3 -3
  137. package/cursor-accounts/CursorAccountEditor.js.map +1 -1
  138. package/cursor-accounts/CursorAccountsConsole.js +3 -3
  139. package/cursor-accounts/CursorAccountsConsole.js.map +1 -1
  140. package/dashboard/OperationalDashboard.d.ts +1 -4
  141. package/dashboard/OperationalDashboard.d.ts.map +1 -1
  142. package/dashboard/OperationalDashboard.js +1 -3
  143. package/dashboard/OperationalDashboard.js.map +1 -1
  144. package/dashboard/useDashboardSummary.d.ts +1 -3
  145. package/dashboard/useDashboardSummary.d.ts.map +1 -1
  146. package/dashboard/useDashboardSummary.js +1 -1
  147. package/dashboard/useDashboardSummary.js.map +1 -1
  148. package/environment/EnvironmentListPanel.d.ts.map +1 -1
  149. package/environment/EnvironmentListPanel.js +2 -1
  150. package/environment/EnvironmentListPanel.js.map +1 -1
  151. package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
  152. package/environment/EnvironmentVariableEditor.js +3 -2
  153. package/environment/EnvironmentVariableEditor.js.map +1 -1
  154. package/environment/index.d.ts +1 -1
  155. package/environment/index.d.ts.map +1 -1
  156. package/environment/index.js +1 -1
  157. package/environment/index.js.map +1 -1
  158. package/environment/systemEnvVars.d.ts +4 -63
  159. package/environment/systemEnvVars.d.ts.map +1 -1
  160. package/environment/systemEnvVars.js +21 -113
  161. package/environment/systemEnvVars.js.map +1 -1
  162. package/execution/ArtifactFileContent.d.ts.map +1 -1
  163. package/execution/ArtifactFileContent.js +2 -1
  164. package/execution/ArtifactFileContent.js.map +1 -1
  165. package/execution/McpToolDetail.d.ts.map +1 -1
  166. package/execution/McpToolDetail.js +2 -1
  167. package/execution/McpToolDetail.js.map +1 -1
  168. package/execution/RecalledMemoriesCard.js +1 -1
  169. package/execution/ResultView.d.ts.map +1 -1
  170. package/execution/ResultView.js +2 -1
  171. package/execution/ResultView.js.map +1 -1
  172. package/execution/TerminalSession.js +1 -1
  173. package/execution/TerminalSession.js.map +1 -1
  174. package/execution/ThreadSkeleton.d.ts.map +1 -1
  175. package/execution/ThreadSkeleton.js +2 -1
  176. package/execution/ThreadSkeleton.js.map +1 -1
  177. package/execution/file-path-resolver.d.ts.map +1 -1
  178. package/execution/file-path-resolver.js +3 -2
  179. package/execution/file-path-resolver.js.map +1 -1
  180. package/execution/sandbox-path-normalizer.d.ts +0 -11
  181. package/execution/sandbox-path-normalizer.d.ts.map +1 -1
  182. package/execution/sandbox-path-normalizer.js +2 -1
  183. package/execution/sandbox-path-normalizer.js.map +1 -1
  184. package/github/parseGitUrl.d.ts.map +1 -1
  185. package/github/parseGitUrl.js +16 -4
  186. package/github/parseGitUrl.js.map +1 -1
  187. package/iam-policy/GrantAccessForm.d.ts +3 -3
  188. package/iam-policy/GrantAccessForm.d.ts.map +1 -1
  189. package/iam-policy/GrantAccessForm.js +3 -3
  190. package/iam-policy/GrantAccessForm.js.map +1 -1
  191. package/iam-policy/OrgMembersPanel.d.ts +3 -3
  192. package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
  193. package/iam-policy/OrgMembersPanel.js +5 -4
  194. package/iam-policy/OrgMembersPanel.js.map +1 -1
  195. package/iam-policy/PeopleWithAccess.d.ts +2 -2
  196. package/iam-policy/PeopleWithAccess.d.ts.map +1 -1
  197. package/iam-policy/PeopleWithAccess.js +2 -2
  198. package/iam-policy/PeopleWithAccess.js.map +1 -1
  199. package/iam-policy/PrincipalPicker.d.ts +2 -2
  200. package/iam-policy/PrincipalPicker.d.ts.map +1 -1
  201. package/iam-policy/PrincipalPicker.js +2 -2
  202. package/iam-policy/PrincipalPicker.js.map +1 -1
  203. package/iam-policy/SharePanel.d.ts +3 -3
  204. package/iam-policy/SharePanel.d.ts.map +1 -1
  205. package/iam-policy/SharePanel.js +3 -3
  206. package/iam-policy/SharePanel.js.map +1 -1
  207. package/iam-policy/useCheckPermission.d.ts +4 -1
  208. package/iam-policy/useCheckPermission.d.ts.map +1 -1
  209. package/iam-policy/useCheckPermission.js +4 -1
  210. package/iam-policy/useCheckPermission.js.map +1 -1
  211. package/iam-policy/useCreateIamPolicy.d.ts +1 -1
  212. package/iam-policy/useCreateIamPolicy.js +1 -1
  213. package/iam-policy/useDeleteIamPolicy.d.ts +1 -1
  214. package/iam-policy/useDeleteIamPolicy.js +1 -1
  215. package/iam-policy/useGrantableRoles.d.ts +1 -1
  216. package/iam-policy/useGrantableRoles.js +1 -1
  217. package/iam-policy/useGranteeCandidates.d.ts +3 -3
  218. package/iam-policy/useGranteeCandidates.d.ts.map +1 -1
  219. package/iam-policy/useGranteeCandidates.js +2 -2
  220. package/iam-policy/useGranteeCandidates.js.map +1 -1
  221. package/iam-policy/useOwnerAssignment.d.ts +2 -2
  222. package/iam-policy/useOwnerAssignment.d.ts.map +1 -1
  223. package/iam-policy/useOwnerAssignment.js +3 -3
  224. package/iam-policy/useOwnerAssignment.js.map +1 -1
  225. package/iam-policy/usePrincipalsCount.d.ts +4 -4
  226. package/iam-policy/usePrincipalsCount.d.ts.map +1 -1
  227. package/iam-policy/usePrincipalsCount.js +7 -7
  228. package/iam-policy/usePrincipalsCount.js.map +1 -1
  229. package/iam-policy/useResourceAccess.d.ts +1 -1
  230. package/iam-policy/useResourceAccess.js +1 -1
  231. package/iam-policy/useRevokeOrgAccess.d.ts +11 -9
  232. package/iam-policy/useRevokeOrgAccess.d.ts.map +1 -1
  233. package/iam-policy/useRevokeOrgAccess.js +6 -6
  234. package/iam-policy/useRevokeOrgAccess.js.map +1 -1
  235. package/identity-account/AccountPreferencesPanel.d.ts +6 -0
  236. package/identity-account/AccountPreferencesPanel.d.ts.map +1 -1
  237. package/identity-account/AccountPreferencesPanel.js +35 -3
  238. package/identity-account/AccountPreferencesPanel.js.map +1 -1
  239. package/identity-account/useAccountExecutionDefaults.d.ts +1 -1
  240. package/identity-account/useAccountExecutionDefaults.d.ts.map +1 -1
  241. package/identity-account/useAccountExecutionDefaults.js +2 -3
  242. package/identity-account/useAccountExecutionDefaults.js.map +1 -1
  243. package/identity-provider/IdentityProviderDetailPanel.js +4 -4
  244. package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
  245. package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
  246. package/identity-provider/IdentityProviderListPanel.js +2 -1
  247. package/identity-provider/IdentityProviderListPanel.js.map +1 -1
  248. package/identity-provider/IdentityProviderWizard.js +1 -1
  249. package/identity-provider/IdentityProviderWizard.js.map +1 -1
  250. package/identity-provider/SsoLoginPrompt.js +2 -1
  251. package/identity-provider/SsoLoginPrompt.js.map +1 -1
  252. package/identity-provider/useIdentityProviderList.d.ts +2 -2
  253. package/identity-provider/useIdentityProviderList.js +2 -2
  254. package/index.d.ts +4 -4
  255. package/index.d.ts.map +1 -1
  256. package/index.js +4 -4
  257. package/index.js.map +1 -1
  258. package/inline-edit/InlineEditImage.d.ts +4 -0
  259. package/inline-edit/InlineEditImage.d.ts.map +1 -1
  260. package/inline-edit/InlineEditImage.js +12 -11
  261. package/inline-edit/InlineEditImage.js.map +1 -1
  262. package/inline-edit/InlineEditText.d.ts +4 -0
  263. package/inline-edit/InlineEditText.d.ts.map +1 -1
  264. package/inline-edit/InlineEditText.js +12 -11
  265. package/inline-edit/InlineEditText.js.map +1 -1
  266. package/inline-edit/InlineEditTextarea.d.ts +4 -0
  267. package/inline-edit/InlineEditTextarea.d.ts.map +1 -1
  268. package/inline-edit/InlineEditTextarea.js +11 -16
  269. package/inline-edit/InlineEditTextarea.js.map +1 -1
  270. package/inline-edit/useInlineDraft.d.ts +26 -0
  271. package/inline-edit/useInlineDraft.d.ts.map +1 -0
  272. package/inline-edit/useInlineDraft.js +61 -0
  273. package/inline-edit/useInlineDraft.js.map +1 -0
  274. package/internal/DialogShell.d.ts +21 -0
  275. package/internal/DialogShell.d.ts.map +1 -1
  276. package/internal/DialogShell.js +51 -4
  277. package/internal/DialogShell.js.map +1 -1
  278. package/internal/LoadingRegion.d.ts +35 -0
  279. package/internal/LoadingRegion.d.ts.map +1 -0
  280. package/internal/LoadingRegion.js +33 -0
  281. package/internal/LoadingRegion.js.map +1 -0
  282. package/internal/UnknownPublicAddressNotice.d.ts +20 -0
  283. package/internal/UnknownPublicAddressNotice.d.ts.map +1 -0
  284. package/internal/UnknownPublicAddressNotice.js +19 -0
  285. package/internal/UnknownPublicAddressNotice.js.map +1 -0
  286. package/internal/features.js +2 -2
  287. package/internal/features.js.map +1 -1
  288. package/internal/markdown-components.d.ts.map +1 -1
  289. package/internal/markdown-components.js +18 -4
  290. package/internal/markdown-components.js.map +1 -1
  291. package/internal/trim.d.ts +7 -0
  292. package/internal/trim.d.ts.map +1 -0
  293. package/internal/trim.js +12 -0
  294. package/internal/trim.js.map +1 -0
  295. package/invitation/InvitationManager.d.ts.map +1 -1
  296. package/invitation/InvitationManager.js +2 -1
  297. package/invitation/InvitationManager.js.map +1 -1
  298. package/invitation/InvitationRedemption.d.ts.map +1 -1
  299. package/invitation/InvitationRedemption.js +5 -4
  300. package/invitation/InvitationRedemption.js.map +1 -1
  301. package/invitation/useInvitationPreview.d.ts +1 -1
  302. package/invitation/useInvitationPreview.js +1 -1
  303. package/library/InstanceVisibilitySelector.d.ts +1 -1
  304. package/library/InstanceVisibilitySelector.d.ts.map +1 -1
  305. package/library/ResourceVisibilityControl.d.ts +6 -3
  306. package/library/ResourceVisibilityControl.d.ts.map +1 -1
  307. package/library/ResourceVisibilityControl.js +7 -4
  308. package/library/ResourceVisibilityControl.js.map +1 -1
  309. package/library/VisibilitySelector.d.ts +2 -2
  310. package/library/VisibilitySelector.d.ts.map +1 -1
  311. package/library/VisibilitySelector.js +1 -1
  312. package/licenses/LicenseDetail.d.ts.map +1 -1
  313. package/licenses/LicenseDetail.js +3 -3
  314. package/licenses/LicenseDetail.js.map +1 -1
  315. package/licenses/LicenseIssueForm.js +7 -7
  316. package/licenses/LicenseIssueForm.js.map +1 -1
  317. package/licenses/license-draft.d.ts +1 -1
  318. package/licenses/license-draft.d.ts.map +1 -1
  319. package/licenses/license-draft.js +3 -3
  320. package/licenses/license-draft.js.map +1 -1
  321. package/licenses/license-format.d.ts +7 -5
  322. package/licenses/license-format.d.ts.map +1 -1
  323. package/licenses/license-format.js +2 -4
  324. package/licenses/license-format.js.map +1 -1
  325. package/mcp-server/McpServerConnectDialog.js +4 -5
  326. package/mcp-server/McpServerConnectDialog.js.map +1 -1
  327. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  328. package/mcp-server/McpServerDetailView.js +5 -7
  329. package/mcp-server/McpServerDetailView.js.map +1 -1
  330. package/mcp-server/McpServerPicker.d.ts.map +1 -1
  331. package/mcp-server/McpServerPicker.js +2 -6
  332. package/mcp-server/McpServerPicker.js.map +1 -1
  333. package/mcp-server/McpToolSelector.js +1 -1
  334. package/mcp-server/McpToolSelector.js.map +1 -1
  335. package/mcp-server/useMcpServerConnect.d.ts +14 -25
  336. package/mcp-server/useMcpServerConnect.d.ts.map +1 -1
  337. package/mcp-server/useMcpServerConnect.js +7 -19
  338. package/mcp-server/useMcpServerConnect.js.map +1 -1
  339. package/mcp-server/useMcpServerOAuthConnect.d.ts +1 -3
  340. package/mcp-server/useMcpServerOAuthConnect.d.ts.map +1 -1
  341. package/mcp-server/useMcpServerOAuthConnect.js +6 -19
  342. package/mcp-server/useMcpServerOAuthConnect.js.map +1 -1
  343. package/memory/MemoryListPanel.d.ts.map +1 -1
  344. package/memory/MemoryListPanel.js +2 -1
  345. package/memory/MemoryListPanel.js.map +1 -1
  346. package/models/HarnessSelector.d.ts.map +1 -1
  347. package/models/HarnessSelector.js +1 -2
  348. package/models/HarnessSelector.js.map +1 -1
  349. package/models/ModelSelector.d.ts +1 -1
  350. package/models/ModelSelector.d.ts.map +1 -1
  351. package/models/ModelSelector.js +1 -7
  352. package/models/ModelSelector.js.map +1 -1
  353. package/models/harness.d.ts +10 -6
  354. package/models/harness.d.ts.map +1 -1
  355. package/models/harness.js +35 -28
  356. package/models/harness.js.map +1 -1
  357. package/models/index.d.ts +1 -1
  358. package/models/index.d.ts.map +1 -1
  359. package/models/index.js +1 -1
  360. package/models/index.js.map +1 -1
  361. package/oauth-app/OAuthAppListPanel.d.ts.map +1 -1
  362. package/oauth-app/OAuthAppListPanel.js +2 -1
  363. package/oauth-app/OAuthAppListPanel.js.map +1 -1
  364. package/organization/OrgPreferencesPanel.d.ts +3 -3
  365. package/organization/OrgPreferencesPanel.d.ts.map +1 -1
  366. package/organization/OrgPreferencesPanel.js +19 -6
  367. package/organization/OrgPreferencesPanel.js.map +1 -1
  368. package/organization/OrgProfilePanel.d.ts +3 -3
  369. package/organization/OrgProfilePanel.d.ts.map +1 -1
  370. package/organization/OrgProfilePanel.js +8 -7
  371. package/organization/OrgProfilePanel.js.map +1 -1
  372. package/organization/index.d.ts +1 -0
  373. package/organization/index.d.ts.map +1 -1
  374. package/organization/index.js +1 -0
  375. package/organization/index.js.map +1 -1
  376. package/organization/useFollowSessionOrganization.d.ts +9 -0
  377. package/organization/useFollowSessionOrganization.d.ts.map +1 -0
  378. package/organization/useFollowSessionOrganization.js +52 -0
  379. package/organization/useFollowSessionOrganization.js.map +1 -0
  380. package/package.json +5 -5
  381. package/plan-catalog/plan-draft.js +3 -3
  382. package/plan-catalog/plan-draft.js.map +1 -1
  383. package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
  384. package/platform-client/PlatformClientListPanel.js +2 -1
  385. package/platform-client/PlatformClientListPanel.js.map +1 -1
  386. package/plugin/PluginDetailView.d.ts.map +1 -1
  387. package/plugin/PluginDetailView.js +2 -1
  388. package/plugin/PluginDetailView.js.map +1 -1
  389. package/plugin/useMcpServerReadiness.js +2 -2
  390. package/plugin/useMcpServerReadiness.js.map +1 -1
  391. package/portal-container.d.ts +8 -0
  392. package/portal-container.d.ts.map +1 -1
  393. package/portal-container.js +8 -0
  394. package/portal-container.js.map +1 -1
  395. package/provider-standing/ProviderStandingConsole.js +1 -1
  396. package/provider.d.ts +31 -2
  397. package/provider.d.ts.map +1 -1
  398. package/provider.js +7 -3
  399. package/provider.js.map +1 -1
  400. package/public-base-url-context.d.ts +35 -0
  401. package/public-base-url-context.d.ts.map +1 -0
  402. package/public-base-url-context.js +63 -0
  403. package/public-base-url-context.js.map +1 -0
  404. package/resource-workbench/components/SelectionCheckbox.js +1 -1
  405. package/resource-workbench/components/SelectionCheckbox.js.map +1 -1
  406. package/schedule/ScheduleDetailView.d.ts.map +1 -1
  407. package/schedule/ScheduleDetailView.js +2 -1
  408. package/schedule/ScheduleDetailView.js.map +1 -1
  409. package/session/SessionViewer.d.ts +7 -2
  410. package/session/SessionViewer.d.ts.map +1 -1
  411. package/session/SessionViewer.js +7 -2
  412. package/session/SessionViewer.js.map +1 -1
  413. package/session/useLocalSessionWorker.d.ts +19 -3
  414. package/session/useLocalSessionWorker.d.ts.map +1 -1
  415. package/session/useLocalSessionWorker.js +37 -4
  416. package/session/useLocalSessionWorker.js.map +1 -1
  417. package/session/useSessionConversation.d.ts +10 -1
  418. package/session/useSessionConversation.d.ts.map +1 -1
  419. package/session/useSessionConversation.js +5 -3
  420. package/session/useSessionConversation.js.map +1 -1
  421. package/settings/ChannelAppsSection.d.ts +4 -4
  422. package/settings/ChannelAppsSection.js +4 -4
  423. package/settings/EnvironmentsSection.d.ts.map +1 -1
  424. package/settings/EnvironmentsSection.js +2 -1
  425. package/settings/EnvironmentsSection.js.map +1 -1
  426. package/settings/MembersSection.js +2 -2
  427. package/settings/MembersSection.js.map +1 -1
  428. package/settings/OrgPreferencesSection.js +1 -1
  429. package/settings/OrgPreferencesSection.js.map +1 -1
  430. package/settings/OrgProfileSection.js +1 -1
  431. package/settings/OrgProfileSection.js.map +1 -1
  432. package/settings/ProviderKeysSection.d.ts +3 -0
  433. package/settings/ProviderKeysSection.d.ts.map +1 -0
  434. package/settings/ProviderKeysSection.js +3 -0
  435. package/settings/ProviderKeysSection.js.map +1 -0
  436. package/settings/TeamsSection.js +1 -1
  437. package/settings/TeamsSection.js.map +1 -1
  438. package/settings/UsageSection.js +1 -1
  439. package/settings/UsageSection.js.map +1 -1
  440. package/settings/index.d.ts +2 -0
  441. package/settings/index.d.ts.map +1 -1
  442. package/settings/index.js +1 -0
  443. package/settings/index.js.map +1 -1
  444. package/settings/settings-nav.d.ts.map +1 -1
  445. package/settings/settings-nav.js +2 -1
  446. package/settings/settings-nav.js.map +1 -1
  447. package/sharing/ShareAgentDialog.d.ts.map +1 -1
  448. package/sharing/ShareAgentDialog.js +14 -9
  449. package/sharing/ShareAgentDialog.js.map +1 -1
  450. package/sharing/SharedAgentChat.d.ts.map +1 -1
  451. package/sharing/SharedAgentChat.js +2 -1
  452. package/sharing/SharedAgentChat.js.map +1 -1
  453. package/sharing/useCanCreateAgentShare.d.ts +3 -1
  454. package/sharing/useCanCreateAgentShare.d.ts.map +1 -1
  455. package/sharing/useCanCreateAgentShare.js +5 -3
  456. package/sharing/useCanCreateAgentShare.js.map +1 -1
  457. package/sharing/useSaveAgentShare.d.ts +1 -1
  458. package/sharing/useSaveAgentShare.js +1 -1
  459. package/sidebar/WorkspaceSidebar.d.ts.map +1 -1
  460. package/sidebar/WorkspaceSidebar.js +2 -1
  461. package/sidebar/WorkspaceSidebar.js.map +1 -1
  462. package/skill/SkillDetailView.d.ts.map +1 -1
  463. package/skill/SkillDetailView.js +2 -1
  464. package/skill/SkillDetailView.js.map +1 -1
  465. package/skill/SkillDiffDialog.d.ts.map +1 -1
  466. package/skill/SkillDiffDialog.js +2 -1
  467. package/skill/SkillDiffDialog.js.map +1 -1
  468. package/skill/SkillFileBrowser.d.ts.map +1 -1
  469. package/skill/SkillFileBrowser.js +2 -1
  470. package/skill/SkillFileBrowser.js.map +1 -1
  471. package/src/access/ManageAccessButton.tsx +1 -1
  472. package/src/access/ManageAccessDialog.tsx +2 -2
  473. package/src/access/types.ts +1 -1
  474. package/src/agent/AgentDetailView.tsx +4 -4
  475. package/src/api-key/ApiKeyListPanel.tsx +4 -4
  476. package/src/attachment/AttachmentImageLightbox.tsx +3 -4
  477. package/src/billing/AutoRechargeCard.tsx +5 -5
  478. package/src/billing/BillingSection.tsx +10 -9
  479. package/src/billing/ChangePlanDialog.tsx +14 -2
  480. package/src/billing/CreditLedgerTable.tsx +4 -4
  481. package/src/billing/CreditPackGrid.tsx +1 -1
  482. package/src/billing/PaymentMethodCard.tsx +1 -1
  483. package/src/billing/PlanSection.tsx +6 -5
  484. package/src/billing/ProviderKeysSection.tsx +324 -0
  485. package/src/billing/UpgradeNotice.tsx +1 -0
  486. package/src/billing/index.ts +9 -0
  487. package/src/billing/plan-features.ts +5 -4
  488. package/src/billing/useBillingAccount.ts +7 -7
  489. package/src/billing/useBillingUsageReport.ts +7 -7
  490. package/src/billing/useChangePlan.ts +6 -6
  491. package/src/billing/useCreateBillingPortalSession.ts +4 -4
  492. package/src/billing/useCreateCheckoutSession.ts +3 -3
  493. package/src/billing/useCreatePaymentMethodSetupSession.ts +3 -3
  494. package/src/billing/useCreditLedger.ts +7 -7
  495. package/src/billing/useCustomerModelPricing.ts +7 -7
  496. package/src/billing/useEntitlements.ts +5 -5
  497. package/src/billing/usePeriodEstimate.ts +4 -4
  498. package/src/billing/useProviderKeys.ts +129 -0
  499. package/src/billing/useSetAutoRechargeConfig.ts +3 -3
  500. package/src/billing/useSubscription.ts +7 -7
  501. package/src/channel/AgentChannelsPanel.tsx +11 -9
  502. package/src/channel/connect/ServingAppSection.tsx +1 -1
  503. package/src/channel-app/ChannelAppDetailPanel.tsx +37 -20
  504. package/src/channel-app/ChannelAppListPanel.tsx +6 -6
  505. package/src/channel-app/CreateChannelAppForm.tsx +0 -1
  506. package/src/channel-app/copy.ts +3 -3
  507. package/src/channel-app/internal.tsx +21 -0
  508. package/src/channel-app/slackAppSetup.ts +6 -3
  509. package/src/channel-app/whatsappAppSetup.ts +5 -2
  510. package/src/composer/SessionComposer.tsx +5 -14
  511. package/src/cursor-accounts/CursorAccountEditor.tsx +3 -3
  512. package/src/cursor-accounts/CursorAccountsConsole.tsx +5 -5
  513. package/src/dashboard/OperationalDashboard.tsx +1 -6
  514. package/src/dashboard/useDashboardSummary.ts +2 -4
  515. package/src/environment/EnvironmentListPanel.tsx +4 -4
  516. package/src/environment/EnvironmentVariableEditor.tsx +5 -5
  517. package/src/environment/index.ts +1 -7
  518. package/src/environment/systemEnvVars.ts +21 -133
  519. package/src/execution/ArtifactFileContent.tsx +3 -2
  520. package/src/execution/McpToolDetail.tsx +3 -3
  521. package/src/execution/RecalledMemoriesCard.tsx +1 -1
  522. package/src/execution/ResultView.tsx +3 -3
  523. package/src/execution/TerminalSession.tsx +1 -1
  524. package/src/execution/ThreadSkeleton.tsx +4 -4
  525. package/src/execution/file-path-resolver.ts +3 -2
  526. package/src/execution/sandbox-path-normalizer.ts +2 -1
  527. package/src/github/parseGitUrl.ts +13 -4
  528. package/src/iam-policy/GrantAccessForm.tsx +4 -4
  529. package/src/iam-policy/OrgMembersPanel.tsx +10 -8
  530. package/src/iam-policy/PeopleWithAccess.tsx +3 -3
  531. package/src/iam-policy/PrincipalPicker.tsx +3 -3
  532. package/src/iam-policy/SharePanel.tsx +4 -4
  533. package/src/iam-policy/useCheckPermission.ts +4 -1
  534. package/src/iam-policy/useCreateIamPolicy.ts +1 -1
  535. package/src/iam-policy/useDeleteIamPolicy.ts +1 -1
  536. package/src/iam-policy/useGrantableRoles.ts +1 -1
  537. package/src/iam-policy/useGranteeCandidates.ts +3 -3
  538. package/src/iam-policy/useOwnerAssignment.ts +3 -3
  539. package/src/iam-policy/usePrincipalsCount.ts +7 -7
  540. package/src/iam-policy/useResourceAccess.ts +1 -1
  541. package/src/iam-policy/useRevokeOrgAccess.ts +13 -11
  542. package/src/identity-account/AccountPreferencesPanel.tsx +60 -13
  543. package/src/identity-account/useAccountExecutionDefaults.ts +2 -5
  544. package/src/identity-provider/IdentityProviderDetailPanel.tsx +3 -9
  545. package/src/identity-provider/IdentityProviderListPanel.tsx +4 -4
  546. package/src/identity-provider/IdentityProviderWizard.tsx +1 -1
  547. package/src/identity-provider/SsoLoginPrompt.tsx +6 -5
  548. package/src/identity-provider/useIdentityProviderList.ts +2 -2
  549. package/src/index.ts +10 -5
  550. package/src/inline-edit/InlineEditImage.tsx +13 -11
  551. package/src/inline-edit/InlineEditText.tsx +13 -11
  552. package/src/inline-edit/InlineEditTextarea.tsx +12 -16
  553. package/src/inline-edit/useInlineDraft.ts +85 -0
  554. package/src/internal/DialogShell.tsx +80 -3
  555. package/src/internal/LoadingRegion.tsx +46 -0
  556. package/src/internal/UnknownPublicAddressNotice.tsx +31 -0
  557. package/src/internal/features.ts +2 -2
  558. package/src/internal/loading-region-markup.json +71 -0
  559. package/src/internal/markdown-components.tsx +15 -4
  560. package/src/internal/trim.ts +10 -0
  561. package/src/invitation/InvitationManager.tsx +4 -4
  562. package/src/invitation/InvitationRedemption.tsx +7 -7
  563. package/src/invitation/useInvitationPreview.ts +1 -1
  564. package/src/library/InstanceVisibilitySelector.tsx +1 -1
  565. package/src/library/ResourceVisibilityControl.tsx +7 -4
  566. package/src/library/VisibilitySelector.tsx +2 -2
  567. package/src/licenses/LicenseDetail.tsx +8 -6
  568. package/src/licenses/LicenseIssueForm.tsx +7 -7
  569. package/src/licenses/license-draft.ts +4 -4
  570. package/src/licenses/license-format.ts +12 -8
  571. package/src/mcp-server/McpServerConnectDialog.tsx +4 -6
  572. package/src/mcp-server/McpServerDetailView.tsx +7 -10
  573. package/src/mcp-server/McpServerPicker.tsx +2 -12
  574. package/src/mcp-server/McpToolSelector.tsx +1 -1
  575. package/src/mcp-server/useMcpServerConnect.ts +14 -33
  576. package/src/mcp-server/useMcpServerOAuthConnect.ts +7 -23
  577. package/src/memory/MemoryListPanel.tsx +4 -4
  578. package/src/models/HarnessSelector.tsx +1 -3
  579. package/src/models/ModelSelector.tsx +2 -7
  580. package/src/models/harness.ts +41 -39
  581. package/src/models/index.ts +1 -1
  582. package/src/oauth-app/OAuthAppListPanel.tsx +4 -4
  583. package/src/organization/OrgPreferencesPanel.tsx +28 -10
  584. package/src/organization/OrgProfilePanel.tsx +12 -12
  585. package/src/organization/index.ts +1 -0
  586. package/src/organization/useFollowSessionOrganization.ts +54 -0
  587. package/src/plan-catalog/plan-draft.ts +3 -3
  588. package/src/platform-client/PlatformClientListPanel.tsx +4 -4
  589. package/src/plugin/PluginDetailView.tsx +3 -2
  590. package/src/plugin/useMcpServerReadiness.ts +2 -2
  591. package/src/portal-container.ts +8 -0
  592. package/src/provider-standing/ProviderStandingConsole.tsx +1 -1
  593. package/src/provider.tsx +60 -27
  594. package/src/public-base-url-context.ts +71 -0
  595. package/src/resource-workbench/components/SelectionCheckbox.tsx +1 -1
  596. package/src/schedule/ScheduleDetailView.tsx +4 -4
  597. package/src/session/SessionViewer.tsx +13 -3
  598. package/src/session/useLocalSessionWorker.ts +35 -4
  599. package/src/session/useSessionConversation.ts +14 -3
  600. package/src/settings/ChannelAppsSection.tsx +4 -4
  601. package/src/settings/EnvironmentsSection.tsx +3 -2
  602. package/src/settings/MembersSection.tsx +3 -3
  603. package/src/settings/OrgPreferencesSection.tsx +1 -1
  604. package/src/settings/OrgProfileSection.tsx +1 -1
  605. package/src/settings/ProviderKeysSection.tsx +4 -0
  606. package/src/settings/TeamsSection.tsx +1 -1
  607. package/src/settings/UsageSection.tsx +1 -1
  608. package/src/settings/index.ts +2 -0
  609. package/src/settings/settings-nav.ts +2 -0
  610. package/src/sharing/ShareAgentDialog.tsx +32 -15
  611. package/src/sharing/SharedAgentChat.tsx +4 -4
  612. package/src/sharing/useCanCreateAgentShare.ts +6 -4
  613. package/src/sharing/useSaveAgentShare.ts +1 -1
  614. package/src/sidebar/WorkspaceSidebar.tsx +3 -2
  615. package/src/skill/SkillDetailView.tsx +4 -4
  616. package/src/skill/SkillDiffDialog.tsx +4 -4
  617. package/src/skill/SkillFileBrowser.tsx +4 -4
  618. package/src/styles.css +14 -4
  619. package/src/team/TeamDetailPanel.tsx +3 -3
  620. package/src/team/TeamListPanel.tsx +3 -2
  621. package/src/team/TeamMembersPanel.tsx +3 -3
  622. package/src/usage/OrgUsagePanel.tsx +9 -9
  623. package/src/usage/useExportCSV.ts +9 -9
  624. package/src/usage/useOrgUsageReport.ts +7 -7
  625. package/src/version-history/VersionTimeline.tsx +4 -4
  626. package/src/workflow/WorkflowTaskApprovalSummary.tsx +14 -7
  627. package/src/workflow/WorkflowVersionDiffViewer.tsx +4 -4
  628. package/src/workflow/WorkflowVersionTimeline.tsx +4 -4
  629. package/src/workflow/inspector/tabs/BranchesTab.tsx +2 -2
  630. package/src/workflow/inspector/tabs/CatchTab.tsx +1 -1
  631. package/src/workflow/inspector/tabs/IterationTab.tsx +1 -1
  632. package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +7 -6
  633. package/src/workflow/task-detail/task-approval.ts +20 -13
  634. package/src/workflow/useDiagnoseExecutionFlow.ts +23 -18
  635. package/src/workflow/useExplainWorkflowFlow.ts +7 -3
  636. package/src/workflow/useRefineWorkflowFlow.ts +17 -10
  637. package/src/workflow/useWorkflowArchitectFlow.ts +7 -3
  638. package/src/workspace/ExplorerTree.tsx +4 -8
  639. package/src/workspace/FileViewer.tsx +4 -5
  640. package/styles.css +1 -1
  641. package/team/TeamDetailPanel.d.ts +2 -2
  642. package/team/TeamDetailPanel.d.ts.map +1 -1
  643. package/team/TeamDetailPanel.js +2 -2
  644. package/team/TeamDetailPanel.js.map +1 -1
  645. package/team/TeamListPanel.d.ts.map +1 -1
  646. package/team/TeamListPanel.js +2 -1
  647. package/team/TeamListPanel.js.map +1 -1
  648. package/team/TeamMembersPanel.d.ts +2 -2
  649. package/team/TeamMembersPanel.d.ts.map +1 -1
  650. package/team/TeamMembersPanel.js +2 -2
  651. package/team/TeamMembersPanel.js.map +1 -1
  652. package/usage/OrgUsagePanel.d.ts +3 -3
  653. package/usage/OrgUsagePanel.d.ts.map +1 -1
  654. package/usage/OrgUsagePanel.js +6 -5
  655. package/usage/OrgUsagePanel.js.map +1 -1
  656. package/usage/useExportCSV.d.ts +2 -2
  657. package/usage/useExportCSV.d.ts.map +1 -1
  658. package/usage/useExportCSV.js +9 -9
  659. package/usage/useExportCSV.js.map +1 -1
  660. package/usage/useOrgUsageReport.d.ts +4 -4
  661. package/usage/useOrgUsageReport.d.ts.map +1 -1
  662. package/usage/useOrgUsageReport.js +7 -7
  663. package/usage/useOrgUsageReport.js.map +1 -1
  664. package/version-history/VersionTimeline.d.ts.map +1 -1
  665. package/version-history/VersionTimeline.js +2 -1
  666. package/version-history/VersionTimeline.js.map +1 -1
  667. package/workflow/WorkflowTaskApprovalSummary.d.ts +7 -4
  668. package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
  669. package/workflow/WorkflowTaskApprovalSummary.js +8 -3
  670. package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
  671. package/workflow/WorkflowVersionDiffViewer.d.ts.map +1 -1
  672. package/workflow/WorkflowVersionDiffViewer.js +2 -1
  673. package/workflow/WorkflowVersionDiffViewer.js.map +1 -1
  674. package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
  675. package/workflow/WorkflowVersionTimeline.js +2 -1
  676. package/workflow/WorkflowVersionTimeline.js.map +1 -1
  677. package/workflow/inspector/tabs/BranchesTab.js +1 -1
  678. package/workflow/inspector/tabs/BranchesTab.js.map +1 -1
  679. package/workflow/inspector/tabs/CatchTab.js +1 -1
  680. package/workflow/inspector/tabs/CatchTab.js.map +1 -1
  681. package/workflow/inspector/tabs/IterationTab.js +1 -1
  682. package/workflow/inspector/tabs/IterationTab.js.map +1 -1
  683. package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
  684. package/workflow/instance/WorkflowInstanceDetailPanel.js +6 -5
  685. package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
  686. package/workflow/task-detail/task-approval.d.ts +13 -11
  687. package/workflow/task-detail/task-approval.d.ts.map +1 -1
  688. package/workflow/task-detail/task-approval.js +8 -4
  689. package/workflow/task-detail/task-approval.js.map +1 -1
  690. package/workflow/useDiagnoseExecutionFlow.d.ts.map +1 -1
  691. package/workflow/useDiagnoseExecutionFlow.js +23 -18
  692. package/workflow/useDiagnoseExecutionFlow.js.map +1 -1
  693. package/workflow/useExplainWorkflowFlow.d.ts.map +1 -1
  694. package/workflow/useExplainWorkflowFlow.js +7 -3
  695. package/workflow/useExplainWorkflowFlow.js.map +1 -1
  696. package/workflow/useRefineWorkflowFlow.d.ts.map +1 -1
  697. package/workflow/useRefineWorkflowFlow.js +14 -10
  698. package/workflow/useRefineWorkflowFlow.js.map +1 -1
  699. package/workflow/useWorkflowArchitectFlow.d.ts.map +1 -1
  700. package/workflow/useWorkflowArchitectFlow.js +7 -3
  701. package/workflow/useWorkflowArchitectFlow.js.map +1 -1
  702. package/workspace/ExplorerTree.d.ts.map +1 -1
  703. package/workspace/ExplorerTree.js +2 -5
  704. package/workspace/ExplorerTree.js.map +1 -1
  705. package/workspace/FileViewer.d.ts.map +1 -1
  706. package/workspace/FileViewer.js +2 -1
  707. package/workspace/FileViewer.js.map +1 -1
package/src/provider.tsx CHANGED
@@ -15,6 +15,7 @@ import { StigmerContext } from "./context.js";
15
15
  import { DeploymentModeContext } from "./deployment-mode.js";
16
16
  import { ExecutionTargetContext } from "./execution-target-context.js";
17
17
  import { ApprovalDefaultsContext } from "./approval-defaults-context.js";
18
+ import { PublicBaseUrlContext } from "./public-base-url-context.js";
18
19
  import type { ApprovalDefaults } from "./approval-defaults-context.js";
19
20
  import type { ExecutionTargetOption } from "./session/execution-target.js";
20
21
  import type { RunnerAdapter } from "./runner-adapter.js";
@@ -121,6 +122,32 @@ export interface StigmerProviderProps {
121
122
  * ```
122
123
  */
123
124
  readonly approvalDefaults?: ApprovalDefaults;
125
+ /**
126
+ * The address the Stigmer API is reached at from outside this page, for
127
+ * the URLs the SDK shows a user to copy (the Slack and WhatsApp webhook
128
+ * URLs a channel app registers, and the platform client snippet in the
129
+ * Share dialog). A session's MCP servers get their
130
+ * `STIGMER_SERVER_ADDRESS` from the platform, never from this value.
131
+ *
132
+ * Omit it when the client's `baseUrl` is absolute: that address is used,
133
+ * exactly as before. Pass it when the client talks to the server through
134
+ * a relative `baseUrl` (a same-origin proxy), because the page's own
135
+ * origin need not be where Slack, Meta, a backend or a remote MCP server
136
+ * can reach the API. Without it, the copy surfaces say they do not know
137
+ * the server's public address and offer nothing to copy. Only an
138
+ * absolute `http(s)` URL is used.
139
+ *
140
+ * @example
141
+ * ```tsx
142
+ * // The browser reaches the API through the page's own origin
143
+ * const client = new Stigmer({ baseUrl: "/", getAccessToken });
144
+ *
145
+ * <StigmerProvider client={client} publicBaseUrl="https://api.example.com">
146
+ * <App />
147
+ * </StigmerProvider>
148
+ * ```
149
+ */
150
+ readonly publicBaseUrl?: string;
124
151
  /**
125
152
  * Built-in theme preset to apply.
126
153
  *
@@ -258,7 +285,10 @@ const EMPTY_REVIEW_RENDERERS: ReviewRenderers = {};
258
285
  * Two stable selector hooks are part of the public contract:
259
286
  * `data-stgm-root` marks the in-tree container (and only it);
260
287
  * `data-stgm-portal` marks the portal container appended to
261
- * `document.body` for portaled surfaces.
288
+ * `document.body` for portaled surfaces. A popup opened inside an SDK
289
+ * modal dialog renders inside that dialog instead (the browser's top
290
+ * layer would otherwise cover it), so it is not under
291
+ * `[data-stgm-portal]`.
262
292
  *
263
293
  * The `colorMode` prop controls dark/light appearance via a
264
294
  * `data-stgm-color-mode` attribute on the scoping container.
@@ -288,6 +318,7 @@ export function StigmerProvider({
288
318
  executionTarget,
289
319
  runnerAdapter,
290
320
  approvalDefaults,
321
+ publicBaseUrl,
291
322
  preset,
292
323
  className,
293
324
  colorMode = "light",
@@ -310,32 +341,34 @@ export function StigmerProvider({
310
341
  <ExecutionTargetContext.Provider value={executionTarget}>
311
342
  <ApprovalDefaultsContext.Provider value={approvalDefaults}>
312
343
  <RunnerAdapterContext.Provider value={runnerAdapter ?? null}>
313
- <ColorModeContext.Provider value={resolvedMode}>
314
- <ModelRegistryContext.Provider value={registryState}>
315
- <TaskKindRegistryContext.Provider value={taskKindRegistryState}>
316
- <ReviewRendererContext.Provider value={reviewRenderers ?? EMPTY_REVIEW_RENDERERS}>
317
- <PortalContainerContext.Provider value={portalContainer}>
318
- {/*
319
- The in-tree scoping container. `data-stgm-root` is a
320
- stable public selector — the documented seam for hosts
321
- to style THIS element only (e.g. the fixed-height
322
- embedding recipe, #260). It must never be mirrored
323
- onto the portal container, whose own `data-stgm-portal`
324
- marker keeps host in-tree-only CSS away from the
325
- off-tree element.
326
- */}
327
- <div
328
- className={scope.className}
329
- data-stgm-root=""
330
- data-stgm-color-mode={scope.colorMode}
331
- >
332
- {children}
333
- </div>
334
- </PortalContainerContext.Provider>
335
- </ReviewRendererContext.Provider>
336
- </TaskKindRegistryContext.Provider>
337
- </ModelRegistryContext.Provider>
338
- </ColorModeContext.Provider>
344
+ <PublicBaseUrlContext.Provider value={publicBaseUrl}>
345
+ <ColorModeContext.Provider value={resolvedMode}>
346
+ <ModelRegistryContext.Provider value={registryState}>
347
+ <TaskKindRegistryContext.Provider value={taskKindRegistryState}>
348
+ <ReviewRendererContext.Provider value={reviewRenderers ?? EMPTY_REVIEW_RENDERERS}>
349
+ <PortalContainerContext.Provider value={portalContainer}>
350
+ {/*
351
+ The in-tree scoping container. `data-stgm-root` is a
352
+ stable public selector — the documented seam for hosts
353
+ to style THIS element only (e.g. the fixed-height
354
+ embedding recipe, #260). It must never be mirrored
355
+ onto the portal container, whose own `data-stgm-portal`
356
+ marker keeps host in-tree-only CSS away from the
357
+ off-tree element.
358
+ */}
359
+ <div
360
+ className={scope.className}
361
+ data-stgm-root=""
362
+ data-stgm-color-mode={scope.colorMode}
363
+ >
364
+ {children}
365
+ </div>
366
+ </PortalContainerContext.Provider>
367
+ </ReviewRendererContext.Provider>
368
+ </TaskKindRegistryContext.Provider>
369
+ </ModelRegistryContext.Provider>
370
+ </ColorModeContext.Provider>
371
+ </PublicBaseUrlContext.Provider>
339
372
  </RunnerAdapterContext.Provider>
340
373
  </ApprovalDefaultsContext.Provider>
341
374
  </ExecutionTargetContext.Provider>
@@ -0,0 +1,71 @@
1
+ "use client";
2
+
3
+ import { createContext, useContext } from "react";
4
+ import { useStigmer } from "./hooks.js";
5
+ import { trimTrailing } from "./internal/trim.js";
6
+
7
+ /**
8
+ * React context for the server's public base URL: the address the Stigmer
9
+ * API is reached at from outside the page, supplied by the host through
10
+ * `StigmerProvider`'s `publicBaseUrl`.
11
+ *
12
+ * Separated from the provider to mirror the `ExecutionTargetContext`
13
+ * pattern and avoid circular imports.
14
+ *
15
+ * `undefined` means the host named no public address; the client's own
16
+ * `baseUrl` then stands in when it is absolute.
17
+ */
18
+ export const PublicBaseUrlContext = createContext<string | undefined>(
19
+ undefined,
20
+ );
21
+
22
+ /**
23
+ * The server's public base URL for URLs the SDK shows a user to copy (a
24
+ * webhook URL pasted into Slack or Meta, a platform client snippet run by
25
+ * a backend), or `null` when it cannot be known.
26
+ *
27
+ * The host owns public addresses, and the SDK never guesses one (the
28
+ * `buildShareUrl` precedent in `ShareAgentDialog`): the provider's
29
+ * `publicBaseUrl` wins, the client's `baseUrl` stands in for it, and only
30
+ * an absolute `http(s)` URL counts. A relative `baseUrl` (a same-origin
31
+ * proxy, the documentation tours) with no `publicBaseUrl` answers `null`,
32
+ * because the page's own origin need not be where the API is reached from
33
+ * outside; the surface then says the address is unknown instead of offering
34
+ * one nobody can call. A `publicBaseUrl` that is not absolute is a host
35
+ * mistake and counts for nothing. Trailing slashes are trimmed.
36
+ */
37
+ export function usePublicBaseUrl(): string | null {
38
+ const hostPublicBaseUrl = useContext(PublicBaseUrlContext);
39
+ const { baseUrl } = useStigmer();
40
+ return resolvePublicBaseUrl(hostPublicBaseUrl, baseUrl);
41
+ }
42
+
43
+ /**
44
+ * The pure rule behind {@link usePublicBaseUrl}: the first of the host's
45
+ * public base URL and the client's base URL that is an absolute `http(s)` URL,
46
+ * trailing slashes trimmed, or `null` when neither is.
47
+ */
48
+ export function resolvePublicBaseUrl(
49
+ hostPublicBaseUrl: string | undefined,
50
+ clientBaseUrl: string,
51
+ ): string | null {
52
+ for (const candidate of [hostPublicBaseUrl, clientBaseUrl]) {
53
+ if (candidate !== undefined && isAbsoluteUrl(candidate)) {
54
+ return trimTrailing(candidate, "/");
55
+ }
56
+ }
57
+ return null;
58
+ }
59
+
60
+ /**
61
+ * Whether `value` is an absolute `http(s)` URL. The protocol check matters:
62
+ * `new URL("localhost:7234")` parses, with `localhost:` as its scheme.
63
+ */
64
+ function isAbsoluteUrl(value: string): boolean {
65
+ try {
66
+ const { protocol } = new URL(value);
67
+ return protocol === "http:" || protocol === "https:";
68
+ } catch {
69
+ return false;
70
+ }
71
+ }
@@ -43,7 +43,7 @@ export function SelectionCheckbox({
43
43
  onChange={(e) => onChange(e.target.checked)}
44
44
  aria-label={ariaLabel}
45
45
  className={cn(
46
- "stg:size-3.5 stg:shrink-0 stg:cursor-pointer stg:rounded stg:border stg:border-input stg:accent-primary",
46
+ "stg:size-3.5 stg:shrink-0 stg:cursor-pointer stg:rounded stg:border stg:border-input",
47
47
  "stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring stg:focus-visible:ring-offset-1",
48
48
  className,
49
49
  )}
@@ -78,6 +78,7 @@ import { useSetScheduleEnabled } from "./useSetScheduleEnabled.js";
78
78
  import { useTriggerSchedule } from "./useTriggerSchedule.js";
79
79
  import { useUpdateScheduleSpec } from "./useUpdateScheduleSpec.js";
80
80
  import { SpinnerIcon } from "../internal/SpinnerIcon.js";
81
+ import { LoadingRegion } from "../internal/LoadingRegion.js";
81
82
 
82
83
  /** Props for {@link ScheduleDetailView}. */
83
84
  export interface ScheduleDetailViewProps {
@@ -1552,10 +1553,9 @@ function ReferenceLink({
1552
1553
 
1553
1554
  function LoadingSkeleton({ className }: { readonly className?: string }) {
1554
1555
  return (
1555
- <div
1556
+ <LoadingRegion
1556
1557
  className={cn("stg:flex stg:flex-col stg:gap-6", className)}
1557
- aria-busy="true"
1558
- aria-label="Loading schedule details"
1558
+ label="Loading schedule details"
1559
1559
  >
1560
1560
  <div className="stg:flex stg:items-start stg:gap-3">
1561
1561
  <div className="stg:mt-1 stg:size-6 stg:shrink-0 stg:animate-pulse stg:rounded stg:bg-muted" />
@@ -1578,7 +1578,7 @@ function LoadingSkeleton({ className }: { readonly className?: string }) {
1578
1578
  style={{ height: "160px" }}
1579
1579
  />
1580
1580
  </div>
1581
- </div>
1581
+ </LoadingRegion>
1582
1582
  );
1583
1583
  }
1584
1584
 
@@ -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
@@ -3,6 +3,7 @@
3
3
  import { useEffect, useMemo } from "react";
4
4
  import type { Session } from "@stigmer/protos/ai/stigmer/agentic/session/v1/api_pb";
5
5
  import { ExecutionTarget } from "@stigmer/protos/ai/stigmer/agentic/session/v1/enum_pb";
6
+ import { useWhoAmI } from "../iam-policy/useWhoAmI.js";
6
7
  import { useRunnerAdapter } from "../runner-adapter.js";
7
8
  import { useExecutionTarget } from "../execution-target-context.js";
8
9
  import { fromProtoExecutionTarget } from "./execution-target.js";
@@ -25,12 +26,28 @@ import { fromProtoExecutionTarget } from "./execution-target.js";
25
26
  * free. It is a no-op unless a `runnerAdapter` is configured **and** the
26
27
  * session resolves to local execution (cloud sessions are server-provisioned).
27
28
  *
28
- * The effect depends only on stable primitives (`adapter`, `sessionId`, and
29
- * the derived `effectiveTarget` string) and **never on the `session` object**.
29
+ * **Only the session's own person serves it.** Anyone a session is shared
30
+ * with can open it, and every desktop that attached would poll the same
31
+ * queue, each turn going to whichever worker asks first. A server with
32
+ * sign-in credentials a local session's runner for the person who created
33
+ * the session, so another viewer's desktop would take turns it cannot run
34
+ * (or, where it could, run someone else's turn on its own machine). The
35
+ * worker is therefore kept off exactly when the signed-in account is known
36
+ * and is not the session's creator — the creator stamp read the two ways
37
+ * the server reads it, as the account id and as the account's identity
38
+ * provider subject. Every other case attaches as before: while the account
39
+ * is loading the attach waits (as it waits for the session), and when there
40
+ * is no account (a single-user server answers `whoAmI` NOT_FOUND, and every
41
+ * session there is its operator's) the desktop serves the session.
42
+ *
43
+ * The effect depends only on stable primitives (`adapter`, `sessionId`, the
44
+ * derived `effectiveTarget` string and the derived `servesHere` flag) and
45
+ * **never on the `session` object**.
30
46
  * `useSessionConversation` refetches the session frequently; keying the effect
31
47
  * on the object would tear down and restart the worker on every refetch
32
48
  * (DD-010 / reference-stability). `executionTarget` is immutable after the
33
- * first execution, so the derived string stays stable across refetches.
49
+ * first execution, and a session's creator never changes, so both derived
50
+ * values stay stable across refetches.
34
51
  *
35
52
  * @param sessionId - The session being viewed, or `null` to skip.
36
53
  * @param session - The loaded session, or `null` while loading. The worker is
@@ -43,6 +60,7 @@ export function useLocalSessionWorker(
43
60
  ): void {
44
61
  const adapter = useRunnerAdapter();
45
62
  const contextTarget = useExecutionTarget();
63
+ const { account, isLoading: accountLoading } = useWhoAmI();
46
64
 
47
65
  // Resolve the session's effective execution target as a stable primitive.
48
66
  // `undefined` until the session loads — so we never attach a local worker
@@ -59,8 +77,21 @@ export function useLocalSessionWorker(
59
77
  );
60
78
  }, [isLoaded, specTarget, contextTarget]);
61
79
 
80
+ // Whether this viewer's desktop may serve the session, as a stable
81
+ // primitive: `undefined` while the account is loading, `true` when there
82
+ // is no account to compare or the account is the session's creator.
83
+ const creatorStamp = session?.status?.audit?.specAudit?.createdBy?.id ?? "";
84
+ const accountId = account?.metadata?.id ?? "";
85
+ const accountSubject = account?.spec?.idpId ?? "";
86
+ const servesHere = useMemo(() => {
87
+ if (accountLoading) return undefined;
88
+ if (accountId === "" || creatorStamp === "") return true;
89
+ return creatorStamp === accountId || creatorStamp === accountSubject;
90
+ }, [accountLoading, accountId, accountSubject, creatorStamp]);
91
+
62
92
  useEffect(() => {
63
93
  if (!adapter || !sessionId || effectiveTarget !== "local") return;
94
+ if (servesHere !== true) return;
64
95
 
65
96
  // Fire-and-forget: a runner-start failure must not crash the session view.
66
97
  // The host adapter's add/remove are idempotent, so React's cleanup-driven
@@ -69,5 +100,5 @@ export function useLocalSessionWorker(
69
100
  return () => {
70
101
  adapter.onSessionClosed(sessionId).catch(() => {});
71
102
  };
72
- }, [adapter, sessionId, effectiveTarget]);
103
+ }, [adapter, sessionId, effectiveTarget, servesHere]);
73
104
  }
@@ -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,
@@ -41,10 +41,10 @@ type FlowState =
41
41
  *
42
42
  * "New channel app" is offered once the server confirms the caller holds
43
43
  * `can_create_channel_app` on the organization. The list shows only the
44
- * apps the caller may view (their creator, anyone granted viewer on one,
45
- * and the organization's admins), so a caller who may not create channel
46
- * apps is told that the organization's admins manage them rather than that
47
- * none is registered.
44
+ * apps the caller may view (the organization's admins, and anyone granted
45
+ * viewer on an app), so a caller who may not create channel apps is told
46
+ * that the organization's admins manage them rather than that none is
47
+ * registered.
48
48
  */
49
49
  export function ChannelAppsSection() {
50
50
  const headingId = useId();
@@ -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
  );
@@ -0,0 +1,4 @@
1
+ "use client";
2
+
3
+ export { ProviderKeysSection } from "../billing/ProviderKeysSection.js";
4
+ export type { ProviderKeysSectionProps } from "../billing/ProviderKeysSection.js";
@@ -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
  );
@@ -22,3 +22,5 @@ export { TeamsSection } from "./TeamsSection.js";
22
22
  export { OAuthAppsSection } from "./OAuthAppsSection.js";
23
23
  export { ChannelAppsSection } from "./ChannelAppsSection.js";
24
24
  export { UsageSection } from "./UsageSection.js";
25
+ export { ProviderKeysSection } from "./ProviderKeysSection.js";
26
+ export type { ProviderKeysSectionProps } from "./ProviderKeysSection.js";
@@ -10,6 +10,7 @@ import {
10
10
  FileBadge,
11
11
  Layers,
12
12
  KeyRound,
13
+ KeySquare,
13
14
  Link,
14
15
  MessageSquare,
15
16
  MousePointerClick,
@@ -102,6 +103,7 @@ export const SETTINGS_NAV_GROUPS: readonly SettingsNavGroup[] = [
102
103
  items: [
103
104
  { href: "/settings/billing", label: "Billing", icon: CreditCard },
104
105
  { href: "/settings/usage", label: "Usage", icon: BarChart3 },
106
+ { href: "/settings/provider-keys", label: "Provider keys", icon: KeySquare },
105
107
  ],
106
108
  },
107
109
  {
@@ -23,7 +23,8 @@ import { ApiResourceMetadataSchema } from "@stigmer/protos/ai/stigmer/commons/ap
23
23
  import { Switch } from "../switch/Switch.js";
24
24
  import { Tabs, type TabItem } from "../tabs/Tabs.js";
25
25
  import { toast } from "../feedback/toast.js";
26
- import { useStigmer } from "../hooks.js";
26
+ import { usePublicBaseUrl } from "../public-base-url-context.js";
27
+ import { UnknownPublicAddressNotice } from "../internal/UnknownPublicAddressNotice.js";
27
28
  import { useCopyResource } from "../resource-detail/useCopyResource.js";
28
29
  import { useDeploymentMode } from "../deployment-mode.js";
29
30
  import { useBillingAccount } from "../billing/useBillingAccount.js";
@@ -40,6 +41,7 @@ import {
40
41
  } from "./useSaveAgentShare.js";
41
42
  import { useRotateShareLink } from "./useRotateShareLink.js";
42
43
  import { useShareToolReadiness } from "./useShareToolReadiness.js";
44
+ import { trimTrailing } from "../internal/trim.js";
43
45
 
44
46
  /** Maximum length of each visitor message (proto: `string.max_len = 300`). */
45
47
  const MAX_MESSAGE_LENGTH = 300;
@@ -1510,17 +1512,17 @@ function MessageField({
1510
1512
 
1511
1513
  /**
1512
1514
  * The platform client snippet, aimed at the server the console is connected
1513
- * to (`stigmer.baseUrl`) — a self-hosted admin copies code for their own
1514
- * server, not Stigmer Cloud. The base URL is normalised as the channel-app
1515
- * webhook URLs normalise it, and JSON-quoted so the line is always a valid
1516
- * string literal.
1515
+ * to — a self-hosted admin copies code for their own server, not Stigmer
1516
+ * Cloud. `apiBaseUrl` is the server's public base URL (`usePublicBaseUrl`),
1517
+ * the address the channel-app webhook URLs are built from too, JSON-quoted
1518
+ * so the line is always a valid string literal.
1517
1519
  */
1518
1520
  function buildDeveloperSnippet(
1519
1521
  apiBaseUrl: string,
1520
1522
  org: string,
1521
1523
  slug: string,
1522
1524
  ): string {
1523
- const baseUrl = JSON.stringify(apiBaseUrl.replace(/\/+$/, ""));
1525
+ const baseUrl = JSON.stringify(trimTrailing(apiBaseUrl, "/"));
1524
1526
  return [
1525
1527
  `import { createPlatformClientAuth } from "@stigmer/sdk/node";`,
1526
1528
  ``,
@@ -1544,10 +1546,14 @@ function DeveloperTab({
1544
1546
  readonly org: string;
1545
1547
  readonly slug: string;
1546
1548
  }) {
1547
- const stigmer = useStigmer();
1549
+ const publicBaseUrl = usePublicBaseUrl();
1550
+ // `null` while the server's public address is unknown: the field says so.
1548
1551
  const snippet = useMemo(
1549
- () => buildDeveloperSnippet(stigmer.baseUrl, org, slug),
1550
- [stigmer.baseUrl, org, slug],
1552
+ () =>
1553
+ publicBaseUrl === null
1554
+ ? null
1555
+ : buildDeveloperSnippet(publicBaseUrl, org, slug),
1556
+ [publicBaseUrl, org, slug],
1551
1557
  );
1552
1558
 
1553
1559
  return (
@@ -1557,12 +1563,23 @@ function DeveloperTab({
1557
1563
  integrate this agent with the Stigmer SDK — the same runtime, full
1558
1564
  control.
1559
1565
  </p>
1560
- <CopyField
1561
- label="Platform client integration"
1562
- value={snippet}
1563
- copyLabel="Code"
1564
- multiline
1565
- />
1566
+ {snippet !== null ? (
1567
+ <CopyField
1568
+ label="Platform client integration"
1569
+ value={snippet}
1570
+ copyLabel="Code"
1571
+ multiline
1572
+ />
1573
+ ) : (
1574
+ <section>
1575
+ <h3 className="stg:text-xs stg:font-medium stg:text-muted-foreground">
1576
+ Platform client integration
1577
+ </h3>
1578
+ <div className="stg:mt-1.5">
1579
+ <UnknownPublicAddressNotice subject="the integration code" />
1580
+ </div>
1581
+ </section>
1582
+ )}
1566
1583
  <a
1567
1584
  href={PLATFORM_CLIENT_DOCS_URL}
1568
1585
  target="_blank"