@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
@@ -97,7 +97,7 @@ export function unwrapEnclosingMarkdownFence(
97
97
  * blank lines only). Group 1 is the heading text; the match spans through the
98
98
  * heading's trailing newline(s) so `body` starts at the first content line.
99
99
  */
100
- const LEADING_H1_RE = /^#[ \t]+(.+?)[ \t]*(?:\r?\n+|$)/;
100
+ const LEADING_H1_MARKER = /^#[ \t]+/;
101
101
 
102
102
  /**
103
103
  * Splits a markdown document into its leading `# H1` title and the remaining
@@ -115,10 +115,21 @@ export function extractLeadingH1(markdown: string): {
115
115
  readonly title: string | null;
116
116
  readonly body: string;
117
117
  } {
118
+ // Read line by line: a single pattern over the heading and the newlines
119
+ // after it backtracks on a long run of spaces.
118
120
  const trimmed = markdown.trim();
119
- const match = LEADING_H1_RE.exec(trimmed);
120
- if (!match) return { title: null, body: markdown };
121
- return { title: match[1], body: trimmed.slice(match[0].length) };
121
+ const lineEnd = trimmed.indexOf("\n");
122
+ const firstLine = lineEnd === -1 ? trimmed : trimmed.slice(0, lineEnd);
123
+ const marker = LEADING_H1_MARKER.exec(firstLine);
124
+ if (!marker) return { title: null, body: markdown };
125
+ const rawTitle = firstLine.slice(marker[0].length).replace(/\r$/, "");
126
+ let titleEnd = rawTitle.length;
127
+ while (titleEnd > 0 && (rawTitle[titleEnd - 1] === " " || rawTitle[titleEnd - 1] === "\t")) titleEnd -= 1;
128
+ const title = rawTitle.slice(0, titleEnd);
129
+ if (title === "") return { title: null, body: markdown };
130
+ let bodyStart = lineEnd === -1 ? trimmed.length : lineEnd + 1;
131
+ while (trimmed[bodyStart] === "\n") bodyStart += 1;
132
+ return { title, body: trimmed.slice(bodyStart) };
122
133
  }
123
134
 
124
135
  /**
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `value` without its trailing run of `char`. A `/x+$/` regex rescans the run
3
+ * from every starting position, so a long run costs quadratic time; this walks
4
+ * it once.
5
+ */
6
+ export function trimTrailing(value: string, char: string): string {
7
+ let end = value.length;
8
+ while (end > 0 && value[end - 1] === char) end -= 1;
9
+ return end === value.length ? value : value.slice(0, end);
10
+ }
@@ -21,6 +21,7 @@ import { RoleSelector } from "../iam-policy/RoleSelector.js";
21
21
  import { useOwnerAssignment } from "../iam-policy/useOwnerAssignment.js";
22
22
  import { SpinnerIcon } from "../internal/SpinnerIcon.js";
23
23
  import { useCopyFeedback } from "../internal/useCopyFeedback.js";
24
+ import { LoadingRegion } from "../internal/LoadingRegion.js";
24
25
 
25
26
  // ---------------------------------------------------------------------------
26
27
  // Public API
@@ -115,10 +116,9 @@ export function InvitationManager({
115
116
 
116
117
  if (isLoading) {
117
118
  return (
118
- <div
119
+ <LoadingRegion
119
120
  className={cn("stg:space-y-2", className)}
120
- aria-busy="true"
121
- aria-label="Loading invitations"
121
+ label="Loading invitations"
122
122
  >
123
123
  {Array.from({ length: 2 }, (_, i) => (
124
124
  <div
@@ -126,7 +126,7 @@ export function InvitationManager({
126
126
  className="stg:bg-muted-subtle stg:h-14 stg:animate-pulse stg:rounded-lg"
127
127
  />
128
128
  ))}
129
- </div>
129
+ </LoadingRegion>
130
130
  );
131
131
  }
132
132
 
@@ -8,6 +8,7 @@ import { timestampDate } from "@bufbuild/protobuf/wkt";
8
8
  import { useInvitationPreview } from "./useInvitationPreview.js";
9
9
  import { useRedeemInvitation } from "./useRedeemInvitation.js";
10
10
  import { SpinnerIcon } from "../internal/SpinnerIcon.js";
11
+ import { LoadingRegion } from "../internal/LoadingRegion.js";
11
12
 
12
13
  // ---------------------------------------------------------------------------
13
14
  // Public API
@@ -141,13 +142,12 @@ export function InvitationRedemption({
141
142
  // Loading state
142
143
  if (isLoading) {
143
144
  return (
144
- <div
145
+ <LoadingRegion
145
146
  className={cn("stg:mx-auto stg:max-w-sm", className)}
146
- aria-busy="true"
147
- aria-label="Loading invitation"
147
+ label="Loading invitation"
148
148
  >
149
149
  <LoadingSkeleton />
150
- </div>
150
+ </LoadingRegion>
151
151
  );
152
152
  }
153
153
 
@@ -174,7 +174,7 @@ export function InvitationRedemption({
174
174
 
175
175
  // Redemption success
176
176
  if (accepted) {
177
- const orgName = preview.organizationName || "the organization";
177
+ const orgName = preview.orgName || "the organization";
178
178
  const roleName = iamRoleDisplayName(preview.role);
179
179
  return (
180
180
  <div className={cn("stg:mx-auto stg:max-w-sm", className)}>
@@ -191,8 +191,8 @@ export function InvitationRedemption({
191
191
  );
192
192
  }
193
193
 
194
- const orgName = preview.organizationName || "Unknown organization";
195
- const orgLogo = preview.organizationLogoUrl;
194
+ const orgName = preview.orgName || "Unknown organization";
195
+ const orgLogo = preview.orgLogoUrl;
196
196
  const orgInitial = orgName.charAt(0).toUpperCase();
197
197
  const roleName = iamRoleDisplayName(preview.role);
198
198
  const expiresAt = preview.expiresAt ? timestampDate(preview.expiresAt) : null;
@@ -54,7 +54,7 @@ export interface UseInvitationPreviewReturn {
54
54
  * if (!preview) return <NotFound />;
55
55
  * if (!preview.isValid) return <Expired reason={preview.invalidReason} />;
56
56
  *
57
- * return <p>Join {preview.organizationName} as {preview.role}</p>;
57
+ * return <p>Join {preview.orgName} as {preview.role}</p>;
58
58
  * ```
59
59
  */
60
60
  export function useInvitationPreview(
@@ -26,7 +26,7 @@ export interface InstanceVisibilitySelectorProps {
26
26
  readonly mode?: VisibilitySelectorMode;
27
27
  /** Shows a spinner/disabled state while the RPC is in flight. */
28
28
  readonly isPending?: boolean;
29
- /** Disables all interaction (e.g., when the user lacks can_edit). */
29
+ /** Disables all interaction (e.g., when the user lacks can_manage_audience). */
30
30
  readonly disabled?: boolean;
31
31
  /** Additional CSS classes applied to the root element. */
32
32
  readonly className?: string;
@@ -71,10 +71,13 @@ export interface ResourceVisibilityControlProps {
71
71
  *
72
72
  * Behavior:
73
73
  * - Always renders a legible state: a read-only {@link VisibilityBadge}
74
- * is shown to viewers without `can_edit` and while the permission check
75
- * is in flight — never a silent blank.
74
+ * is shown to anyone without `can_manage_audience` and while the
75
+ * permission check is in flight — never a silent blank.
76
76
  * - Upgrades to the interactive {@link VisibilitySelector} for users with
77
- * `can_edit`, persisting changes via {@link useUpdateVisibility} and invoking
77
+ * `can_manage_audience`, the server's bar on every `updateVisibility`:
78
+ * visibility decides who reaches the resource, so an editor, who may
79
+ * change the definition, sees the badge. Persists changes via
80
+ * {@link useUpdateVisibility} and invokes
78
81
  * {@link ResourceVisibilityControlProps.onChanged} on success.
79
82
  *
80
83
  * Offered levels are kind- and context-aware (`visibilityLevels.ts`):
@@ -166,7 +169,7 @@ export function ResourceVisibilityControl({
166
169
  return (
167
170
  <PermissionGate
168
171
  resource={{ kind: FGA_KIND[kind], id: resourceId }}
169
- relation="can_edit"
172
+ relation="can_manage_audience"
170
173
  fallback={badge}
171
174
  loading={badge}
172
175
  >
@@ -54,7 +54,7 @@ export interface VisibilitySelectorProps {
54
54
  readonly mode?: VisibilitySelectorMode;
55
55
  /** Shows a spinner/disabled state while the RPC is in flight. */
56
56
  readonly isPending?: boolean;
57
- /** Disables all interaction (e.g., when the user lacks can_edit). */
57
+ /** Disables all interaction (e.g., when the user lacks can_manage_audience). */
58
58
  readonly disabled?: boolean;
59
59
  /** Accessible name for the control. Defaults to "Resource visibility". */
60
60
  readonly ariaLabel?: string;
@@ -444,7 +444,7 @@ export interface VisibilityBadgeProps {
444
444
  * for a row from before its retirement).
445
445
  *
446
446
  * Rendered wherever the interactive {@link VisibilitySelector} is not
447
- * available — for viewers who lack `can_edit`, and while a permission check
447
+ * available — for anyone who lacks `can_manage_audience`, and while a permission check
448
448
  * is in flight — so a resource's visibility is always legible rather than
449
449
  * silently blank. Shares the chip styling with the selector trigger so the
450
450
  * read-only and editable states are visually consistent.
@@ -116,8 +116,8 @@ export function LicenseDetail({
116
116
  <Row label="Customer">
117
117
  <span className="stg:block">{customer?.displayName}</span>
118
118
  <span className="stg:block stg:text-muted-foreground">{customer?.contactEmail}</span>
119
- {customer?.organization && (
120
- <span className="stg:block stg:text-muted-foreground">{`Cloud organization ${customer.organization}`}</span>
119
+ {customer?.org && (
120
+ <span className="stg:block stg:text-muted-foreground">{`Cloud organization ${customer.org}`}</span>
121
121
  )}
122
122
  </Row>
123
123
  <Row label="Term">{spec ? termLabel(spec.term) : "Unknown"}</Row>
@@ -140,8 +140,8 @@ export function LicenseDetail({
140
140
  {limits?.maxUsers !== undefined ? `${limits.maxUsers} users` : "Unlimited users"}
141
141
  </span>
142
142
  <span className="stg:block">
143
- {limits?.maxOrganizations !== undefined
144
- ? `${limits.maxOrganizations} organizations`
143
+ {limits?.maxOrgs !== undefined
144
+ ? `${limits.maxOrgs} organizations`
145
145
  : "Unlimited organizations"}
146
146
  </span>
147
147
  </Row>
@@ -157,10 +157,12 @@ export function LicenseDetail({
157
157
  <Row label="Issued">
158
158
  {issuedAt ? <Instant date={issuedAt}>{formatInstantUtc(issuedAt)}</Instant> : "Unknown"}
159
159
  {/* The audit names the account, not only its role-like display name:
160
- with several operators, "who issued this contract" needs the address. */}
160
+ with several operators, "who issued this contract" needs the address.
161
+ An account with no name of its own is called by its email, so
162
+ the address is shown once. */}
161
163
  {issuer && (issuer.email || issuer.displayName) && (
162
164
  <span className="stg:block stg:text-muted-foreground">
163
- {issuer.displayName && issuer.email
165
+ {issuer.displayName && issuer.email && issuer.displayName !== issuer.email
164
166
  ? `by ${issuer.displayName} (${issuer.email})`
165
167
  : `by ${issuer.displayName || issuer.email}`}
166
168
  </span>
@@ -71,7 +71,7 @@ type CustomerMode = "existing" | "new";
71
71
  * browser-blue control inside its brand.
72
72
  */
73
73
  const NATIVE_CONTROL =
74
- "stg:size-3.5 stg:shrink-0 stg:cursor-pointer stg:accent-primary stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring stg:focus-visible:ring-offset-1";
74
+ "stg:size-3.5 stg:shrink-0 stg:cursor-pointer stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring stg:focus-visible:ring-offset-1";
75
75
 
76
76
  const TERM_PRESET_HINT: Readonly<Record<IssuableTerm, string>> = {
77
77
  [LicenseTerm.trial]: "30 days",
@@ -87,7 +87,7 @@ const VIOLATION_COPY: Readonly<Record<string, string>> = {
87
87
  "spec.customer.display_name": "Name the customer.",
88
88
  "spec.customer.contact_email": "Enter the address renewal notices go to.",
89
89
  "spec.entitlements.limits.max_users": "Enter at least 1, or leave it empty for unlimited.",
90
- "spec.entitlements.limits.max_organizations": "Enter at least 1, or leave it empty for unlimited.",
90
+ "spec.entitlements.limits.max_orgs": "Enter at least 1, or leave it empty for unlimited.",
91
91
  "spec.notes": "Notes are limited to 4,096 characters.",
92
92
  };
93
93
 
@@ -134,7 +134,7 @@ export function LicenseIssueForm({
134
134
  });
135
135
  const [maxUsers, setMaxUsers] = useState(limitText(renewing?.spec?.entitlements?.limits?.maxUsers));
136
136
  const [maxOrganizations, setMaxOrganizations] = useState(
137
- limitText(renewing?.spec?.entitlements?.limits?.maxOrganizations),
137
+ limitText(renewing?.spec?.entitlements?.limits?.maxOrgs),
138
138
  );
139
139
  const [features, setFeatures] = useState<readonly GrantableFeature[]>(() =>
140
140
  (renewing?.spec?.entitlements?.features ?? []).filter(isGrantableFeature),
@@ -154,9 +154,9 @@ export function LicenseIssueForm({
154
154
  id: selected.customer.id,
155
155
  displayName: selected.customer.displayName,
156
156
  contactEmail: selected.customer.contactEmail,
157
- organization: selected.customer.organization,
157
+ org: selected.customer.org,
158
158
  }
159
- : { id: mintedId, displayName: newName, contactEmail: newEmail, organization: newOrganization };
159
+ : { id: mintedId, displayName: newName, contactEmail: newEmail, org: newOrganization };
160
160
  const matches =
161
161
  mode === "new" ? findCustomerMatches(customers, { displayName: newName, contactEmail: newEmail }) : [];
162
162
 
@@ -179,7 +179,7 @@ export function LicenseIssueForm({
179
179
  lastCoveredDay,
180
180
  graceDays: grace.value,
181
181
  maxUsers: users.value,
182
- maxOrganizations: organizations.value,
182
+ maxOrgs: organizations.value,
183
183
  features,
184
184
  notes,
185
185
  };
@@ -473,7 +473,7 @@ export function LicenseIssueForm({
473
473
  message={shown(
474
474
  maxOrganizations !== "",
475
475
  organizations.ok
476
- ? violationAt("spec.entitlements.limits.max_organizations")
476
+ ? violationAt("spec.entitlements.limits.max_orgs")
477
477
  : organizations.error,
478
478
  )}
479
479
  />
@@ -65,7 +65,7 @@ export interface LicenseDraft {
65
65
  /** `undefined` means unlimited, as the contract reads an absent limit. */
66
66
  readonly maxUsers: number | undefined;
67
67
  /** `undefined` means unlimited, as the contract reads an absent limit. */
68
- readonly maxOrganizations: number | undefined;
68
+ readonly maxOrgs: number | undefined;
69
69
  readonly features: readonly GrantableFeature[];
70
70
  /** Operator notes; never signed, never shown to the customer. */
71
71
  readonly notes: string;
@@ -148,9 +148,9 @@ export function toLicenseInput(draft: LicenseDraft): LicenseInput {
148
148
  const graceUntil = new Date(expiresAt.getTime() + draft.graceDays * DAY_MS);
149
149
  const limits: EntitlementLimitsInput = {
150
150
  ...(draft.maxUsers !== undefined && { maxUsers: draft.maxUsers }),
151
- ...(draft.maxOrganizations !== undefined && { maxOrganizations: draft.maxOrganizations }),
151
+ ...(draft.maxOrgs !== undefined && { maxOrgs: draft.maxOrgs }),
152
152
  };
153
- const organization = draft.customer.organization?.trim();
153
+ const organization = draft.customer.org?.trim();
154
154
  const notes = draft.notes.trim();
155
155
 
156
156
  return {
@@ -162,7 +162,7 @@ export function toLicenseInput(draft: LicenseDraft): LicenseInput {
162
162
  id: draft.customer.id,
163
163
  displayName: collapse(draft.customer.displayName),
164
164
  contactEmail: draft.customer.contactEmail.trim(),
165
- ...(organization ? { organization } : {}),
165
+ ...(organization ? { org: organization } : {}),
166
166
  },
167
167
  entitlements: {
168
168
  ...(Object.keys(limits).length > 0 && { limits }),
@@ -27,11 +27,17 @@ export type IssuableTerm = LicenseTerm.trial | LicenseTerm.paid;
27
27
 
28
28
  /**
29
29
  * Features a Cloud plan sells but a license never carries: they tier the
30
- * hosted runtime, and an Enterprise deployment has them by edition, so
31
- * offering one on a license would sell a capability the license does not
32
- * control.
30
+ * Cloud's hosted runtime, and on a self-hosted deployment the edition
31
+ * decides whether they exist, never a license, so offering one on a
32
+ * license would sell a capability the license does not control. A license
33
+ * issued before a value joined this list may still carry it; the console
34
+ * shows it nowhere.
33
35
  */
34
- export type PlanOnlyFeature = Feature.teams | Feature.managed_organizations;
36
+ export type PlanOnlyFeature =
37
+ | Feature.channels
38
+ | Feature.sharing
39
+ | Feature.teams
40
+ | Feature.managed_organizations;
35
41
 
36
42
  /**
37
43
  * Features the contract names but nothing gates: every edition serves them
@@ -71,8 +77,6 @@ export const FEATURE_LABELS: Readonly<
71
77
  > = {
72
78
  [Feature.sso_enforcement]: FEATURE_COPY[Feature.sso_enforcement],
73
79
  [Feature.byo_provider_keys]: FEATURE_COPY[Feature.byo_provider_keys],
74
- [Feature.channels]: FEATURE_COPY[Feature.channels],
75
- [Feature.sharing]: FEATURE_COPY[Feature.sharing],
76
80
  };
77
81
 
78
82
  /** Every grantable feature, in contract order (derived from the label map). */
@@ -153,7 +157,7 @@ export function entitlementParts(entitlements: Entitlements | undefined): readon
153
157
  const features = entitlements?.features.filter(isGrantableFeature).length ?? 0;
154
158
  return [
155
159
  limitPart(limits?.maxUsers, "user"),
156
- limitPart(limits?.maxOrganizations, "organization"),
160
+ limitPart(limits?.maxOrgs, "organization"),
157
161
  features === 0 ? "No features" : plural(features, "feature"),
158
162
  ];
159
163
  }
@@ -163,7 +167,7 @@ export function limitPart(limit: number | undefined, noun: string): string {
163
167
  return limit === undefined ? `Unlimited ${noun}s` : plural(limit, noun);
164
168
  }
165
169
 
166
- /** The granted features by name, in contract order: "SSO enforcement, Channels". */
170
+ /** The granted features by name, in contract order: "SSO enforcement, Bring your own provider keys". */
167
171
  export function featureNames(features: readonly number[]): string {
168
172
  const names = GRANTABLE_FEATURES.filter((f) => features.includes(f)).map((f) => FEATURE_LABELS[f].label);
169
173
  return names.length === 0 ? "No features" : names.join(", ");
@@ -156,20 +156,18 @@ function ConnectDialogContent({
156
156
 
157
157
  const serverName = mcpServer?.metadata?.name ?? slug;
158
158
  const serverId = mcpServer?.metadata?.id ?? "";
159
- const declaredEnvKeys = Object.keys(mcpServer?.spec?.env ?? {});
160
-
161
159
  const handleConnect = useCallback(async () => {
162
160
  if (!serverId) return;
163
161
 
164
162
  setPhase("connecting");
165
163
  try {
166
- await connect(serverId, activeOrg, undefined, declaredEnvKeys);
164
+ await connect(serverId, activeOrg);
167
165
  setPhase("success");
168
166
  onConnected?.(serverName);
169
167
  } catch {
170
168
  setPhase("error");
171
169
  }
172
- }, [serverId, activeOrg, declaredEnvKeys, connect, onConnected, serverName]);
170
+ }, [serverId, activeOrg, connect, onConnected, serverName]);
173
171
 
174
172
  const handleCredentialSubmit = useCallback(
175
173
  async (values: Record<string, EnvVarInput>) => {
@@ -188,7 +186,7 @@ function ConnectDialogContent({
188
186
  void handleConnect();
189
187
  return;
190
188
  }
191
- oauth.startOAuth(serverId, activeOrg, declaredEnvKeys).then(
189
+ oauth.startOAuth(serverId, activeOrg).then(
192
190
  () => {
193
191
  creds.refetch();
194
192
  setPhase("success");
@@ -203,7 +201,7 @@ function ConnectDialogContent({
203
201
  setPhase("error");
204
202
  },
205
203
  );
206
- }, [serverId, activeOrg, declaredEnvKeys, oauth, creds, onConnected, serverName, handleConnect]);
204
+ }, [serverId, activeOrg, oauth, creds, onConnected, serverName, handleConnect]);
207
205
 
208
206
  // Auto-trigger connect when credentials become ready (manual-only servers)
209
207
  useEffect(() => {
@@ -50,6 +50,7 @@ import { InlineEditKeyValue } from "../inline-edit/InlineEditKeyValue.js";
50
50
  import type { KeyValueRow, SelectOption } from "../inline-edit/types.js";
51
51
  import { ManagedByPluginNotice } from "../plugin/ManagedByPluginNotice.js";
52
52
  import { useManagingPlugin } from "../plugin/useManagingPlugin.js";
53
+ import { LoadingRegion } from "../internal/LoadingRegion.js";
53
54
 
54
55
  /** Tab identifier for the MCP server capability panel. */
55
56
  export type CapabilityTab = "tools" | "policies" | "resources";
@@ -263,9 +264,8 @@ export function McpServerDetailView({
263
264
  const handleOAuthSignIn = useCallback(async () => {
264
265
  if (!mcpServer?.metadata?.id) return;
265
266
 
266
- const envKeys = Object.keys(mcpServer.spec?.env ?? {});
267
267
  try {
268
- await oauth.startOAuth(mcpServer.metadata.id, activeOrg ?? org, envKeys);
268
+ await oauth.startOAuth(mcpServer.metadata.id, activeOrg ?? org);
269
269
  credentials.refetch();
270
270
  refetch();
271
271
  } catch {
@@ -305,9 +305,8 @@ export function McpServerDetailView({
305
305
  return;
306
306
  }
307
307
 
308
- const envKeys = Object.keys(mcpServer.spec?.env ?? {});
309
308
  try {
310
- await connection.connect(mcpServer.metadata.id, activeOrg ?? org, undefined, envKeys);
309
+ await connection.connect(mcpServer.metadata.id, activeOrg ?? org);
311
310
  // Discovery succeeded — retire the OAuth chain's stale
312
311
  // discovery-failure error so the banner doesn't outlive the state
313
312
  // it described.
@@ -330,9 +329,8 @@ export function McpServerDetailView({
330
329
  }
331
330
 
332
331
  if (mcpServer?.metadata?.id) {
333
- const envKeys = Object.keys(mcpServer.spec?.env ?? {});
334
332
  const connectOrg = activeOrg ?? org;
335
- await connection.connect(mcpServer.metadata.id, connectOrg, values, envKeys);
333
+ await connection.connect(mcpServer.metadata.id, connectOrg, values);
336
334
  refetch();
337
335
  }
338
336
 
@@ -2205,10 +2203,9 @@ function Dot() {
2205
2203
 
2206
2204
  function LoadingSkeleton({ className }: { readonly className?: string }) {
2207
2205
  return (
2208
- <div
2206
+ <LoadingRegion
2209
2207
  className={cn("stg:flex stg:flex-col stg:gap-6", className)}
2210
- aria-busy="true"
2211
- aria-label="Loading MCP server details"
2208
+ label="Loading MCP server details"
2212
2209
  >
2213
2210
  <div className="stg:flex stg:items-start stg:gap-3">
2214
2211
  <div className="stg:mt-1 stg:size-6 stg:shrink-0 stg:animate-pulse stg:rounded stg:bg-muted" />
@@ -2227,7 +2224,7 @@ function LoadingSkeleton({ className }: { readonly className?: string }) {
2227
2224
  />
2228
2225
  </div>
2229
2226
  ))}
2230
- </div>
2227
+ </LoadingRegion>
2231
2228
  );
2232
2229
  }
2233
2230
 
@@ -428,11 +428,6 @@ export function McpServerPicker({
428
428
  (oauthStatus?.vendorApprovalStatus === VendorApprovalStatus.PENDING ||
429
429
  oauthStatus?.vendorApprovalStatus === VendorApprovalStatus.REJECTED);
430
430
 
431
- // System env vars are only injected when the server declares them —
432
- // the dialog and detail view pass these on every OAuth chain and
433
- // bare connect; the picker must too.
434
- const declaredEnvKeys = Object.keys(entry.mcpServer.spec?.env ?? {});
435
-
436
431
  // Scope the shared hooks' signals to the server they belong to.
437
432
  const isOwnOAuthAttempt = oauthAttemptKey === view.serverKey;
438
433
  const oauthError = isOwnOAuthAttempt ? oauth.error : null;
@@ -476,12 +471,7 @@ export function McpServerPicker({
476
471
  // server-side. Retry bare discovery; never relaunch the
477
472
  // popup (stigmer/stigmer#418).
478
473
  try {
479
- await discovery.connect(
480
- serverId,
481
- connectOrg,
482
- undefined,
483
- declaredEnvKeys,
484
- );
474
+ await discovery.connect(serverId, connectOrg);
485
475
  // Discovery succeeded — retire the chain's stale
486
476
  // failure and re-evaluate the entry so it resolves
487
477
  // ready with the discovered tools.
@@ -494,7 +484,7 @@ export function McpServerPicker({
494
484
  }
495
485
 
496
486
  try {
497
- await oauth.startOAuth(serverId, connectOrg, declaredEnvKeys);
487
+ await oauth.startOAuth(serverId, connectOrg);
498
488
  setup.onServerAdded(ref);
499
489
  } catch {
500
490
  // error state managed by oauth hook
@@ -178,7 +178,7 @@ export function McpToolSelector({
178
178
  onChange={() => handleToggle(tool.name)}
179
179
  disabled={disabled}
180
180
  aria-describedby={descId}
181
- className="stg:mt-0.5 stg:size-3 stg:shrink-0 stg:accent-primary stg:disabled:pointer-events-none stg:disabled:opacity-50"
181
+ className="stg:mt-0.5 stg:size-3 stg:shrink-0 stg:disabled:pointer-events-none stg:disabled:opacity-50"
182
182
  />
183
183
  <span className="stg:min-w-0 stg:flex-1">
184
184
  <span className="stg:flex stg:items-center stg:gap-1.5">
@@ -6,7 +6,6 @@ import type { McpServer } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/
6
6
  import { ConnectInputSchema } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/io_pb";
7
7
  import { connectAndWait, type EnvVarInput } from "@stigmer/sdk";
8
8
  import { useStigmer } from "../hooks.js";
9
- import { resolveDeclaredSystemEnvVars } from "../environment/systemEnvVars.js";
10
9
  import { toError } from "../internal/toError.js";
11
10
 
12
11
  /** Return value of {@link useMcpServerConnect}. */
@@ -22,23 +21,19 @@ export interface UseMcpServerConnectReturn {
22
21
  * survives browser transport limits. Backends without the lane fall
23
22
  * back to the blocking `connect` RPC transparently.
24
23
  *
25
- * Platform system env vars (`STIGMER_SERVER_ADDRESS`,
26
- * `STIGMER_API_KEY`) are injected only when the MCP server
27
- * declares them in its `spec.env`. Pass `declaredEnvKeys` so the
28
- * hook can determine which system vars the server actually needs.
29
- * When omitted, no system vars are injected.
24
+ * Without `runtimeEnv`, the backend resolves the server's declared
25
+ * variables itself: OAuth tokens from the managed grant, the rest from
26
+ * the caller's personal environment. The platform's own keys are
27
+ * filled by the runner, never sent from here (`SYSTEM_ENV_VAR_KEYS`).
30
28
  *
31
- * When `runtimeEnv` is provided, those values are merged on top
32
- * (caller values win). The backend merges the result on top of
33
- * the user's personal environment so saved credentials (e.g.,
34
- * OAuth tokens) are still resolved.
29
+ * With `runtimeEnv`, the backend connects with exactly those values
30
+ * and resolves nothing else (stigmer/stigmer#1453), so pass it only
31
+ * for a one-time connect whose values the caller supplies whole.
35
32
  *
36
33
  * @param mcpServerId - System-generated ID of the MCP server (metadata.id).
37
34
  * @param org - The caller's active organization slug. Required for
38
35
  * OAuth grant lookup and personal environment resolution.
39
- * @param runtimeEnv - Optional additional environment variables.
40
- * @param declaredEnvKeys - Keys from the server's `spec.env` declaration.
41
- * System vars are only injected when declared here.
36
+ * @param runtimeEnv - Optional one-time values for this connect.
42
37
  * @returns The updated McpServer with populated status.discovered_capabilities
43
38
  * and status.tool_approvals.
44
39
  */
@@ -46,7 +41,6 @@ export interface UseMcpServerConnectReturn {
46
41
  mcpServerId: string,
47
42
  org: string,
48
43
  runtimeEnv?: Record<string, EnvVarInput>,
49
- declaredEnvKeys?: readonly string[],
50
44
  ) => Promise<McpServer>;
51
45
  /** `true` while the connect operation is in flight (start through settle). */
52
46
  readonly isConnecting: boolean;
@@ -64,14 +58,9 @@ export interface UseMcpServerConnectReturn {
64
58
  * server's tools and resource templates, then classifies each tool's
65
59
  * approval policy via a structured-output LLM call.
66
60
  *
67
- * Platform system env vars (`STIGMER_SERVER_ADDRESS`,
68
- * `STIGMER_API_KEY`) are injected only when the target MCP server
69
- * declares them in `spec.env`. Pass the server's declared env keys
70
- * via `declaredEnvKeys` so the hook knows which system vars to
71
- * include. When not provided, no system vars are injected.
72
- *
73
- * Additional one-time credentials can be passed via `runtimeEnv`
74
- * and will override both system vars and personal env values.
61
+ * Saved credentials need nothing from the caller: the backend resolves
62
+ * them. One-time credentials ride `runtimeEnv` and replace that
63
+ * resolution for this connect.
75
64
  *
76
65
  * @example
77
66
  * ```tsx
@@ -80,15 +69,13 @@ export interface UseMcpServerConnectReturn {
80
69
  *
81
70
  * // Saved credentials: already in personal environment
82
71
  * async function handleConnectSaved() {
83
- * const envKeys = Object.keys(mcpServer.spec?.env ?? {});
84
- * await connect(mcpServer.metadata.id, undefined, envKeys);
72
+ * await connect(mcpServer.metadata.id, org);
85
73
  * refetch();
86
74
  * }
87
75
  *
88
76
  * // One-time use: pass credentials directly
89
77
  * async function handleConnectTemporary(values: Record<string, EnvVarInput>) {
90
- * const envKeys = Object.keys(mcpServer.spec?.env ?? {});
91
- * await connect(mcpServer.metadata.id, values, envKeys);
78
+ * await connect(mcpServer.metadata.id, org, values);
92
79
  * refetch();
93
80
  * }
94
81
  * ```
@@ -105,19 +92,13 @@ export function useMcpServerConnect(): UseMcpServerConnectReturn {
105
92
  mcpServerId: string,
106
93
  org: string,
107
94
  runtimeEnv?: Record<string, EnvVarInput>,
108
- declaredEnvKeys?: readonly string[],
109
95
  ): Promise<McpServer> => {
110
96
  setIsConnecting(true);
111
97
  setError(null);
112
98
 
113
99
  try {
114
- const systemEnv = declaredEnvKeys
115
- ? await resolveDeclaredSystemEnvVars(stigmer, declaredEnvKeys)
116
- : {};
117
- const mergedEnv = { ...systemEnv, ...(runtimeEnv ?? {}) };
118
-
119
100
  const runtimeEnvMap: Record<string, { value: string; isSecret: boolean }> = {};
120
- for (const [key, envInput] of Object.entries(mergedEnv)) {
101
+ for (const [key, envInput] of Object.entries(runtimeEnv ?? {})) {
121
102
  runtimeEnvMap[key] = {
122
103
  value: envInput.value,
123
104
  isSecret: envInput.isSecret ?? false,