Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
83d4b5b
feat(localizations,shared,ui): add agent action approval flow
rafaelrcamargo Aug 25, 2026
780d9a1
feat(clerk-js,nextjs,react,shared): expose agent action approval comp…
rafaelrcamargo Aug 25, 2026
9592a88
chore(clerk-js): add agent action approval sandbox preview
rafaelrcamargo Aug 25, 2026
babbc60
feat(react-router,tanstack-react-start): expose agent action approval
rafaelrcamargo Aug 25, 2026
d448f21
chore(localizations,react): finalize agent action approval metadata
rafaelrcamargo Aug 26, 2026
d744fc0
chore(repo): correct agent action approval release bumps
rafaelrcamargo Aug 26, 2026
cd671d2
refactor(ui): reuse LineItems for approval parameters
rafaelrcamargo Aug 26, 2026
de84fac
Merge branch 'main' of https://github.com/clerk/javascript into rafae…
rafaelrcamargo Aug 26, 2026
d487e96
feat(localizations): align agent approval localization keys
rafaelrcamargo Sep 3, 2026
aebc6d1
feat(ui): refine agent action approval UI
rafaelrcamargo Sep 3, 2026
d9784b0
Merge branch 'main' of https://github.com/clerk/javascript into rafae…
rafaelrcamargo Sep 3, 2026
3e87106
test(ui): align approval assertions with rendered behavior
rafaelrcamargo Sep 3, 2026
b5c6c1c
Merge branch 'main' of https://github.com/clerk/javascript into rafae…
rafaelrcamargo Sep 4, 2026
6762ec0
chore(repo): merge main into agent action approval
rafaelrcamargo Sep 8, 2026
87e404b
chore(ci): retrigger checks
rafaelrcamargo Sep 8, 2026
6763471
chore(repo): merge main into agent action approval
rafaelrcamargo Sep 10, 2026
59a55e5
Merge branch 'main' of https://github.com/clerk/javascript into rafae…
rafaelrcamargo Sep 10, 2026
7f13692
chore(repo): merge main into agent action approval
rafaelrcamargo Sep 22, 2026
5733c02
feat(ui): add mock approval account and workspace switching
rafaelrcamargo Sep 23, 2026
a8da498
chore(repo): merge main into agent action approval
rafaelrcamargo Sep 23, 2026
34e538a
Merge branch 'main' into rafael/agent-action-approval
rafaelrcamargo Sep 23, 2026
653ebff
Merge branch 'main' into rafael/agent-action-approval
rafaelrcamargo Sep 23, 2026
8c80f33
Merge branch 'main' into rafael/agent-action-approval
rafaelrcamargo Sep 24, 2026
d80d121
chore(repo): merge remote approval branch updates
rafaelrcamargo Sep 24, 2026
d37cb17
chore(ci): retrigger approval branch checks
rafaelrcamargo Sep 24, 2026
5ef1a5f
chore(repo): merge latest main into agent action approval
rafaelrcamargo Sep 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .changeset/add-agent-action-approval.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
'@clerk/shared': minor
'@clerk/clerk-js': minor
'@clerk/ui': minor
'@clerk/react': minor
'@clerk/react-router': minor
'@clerk/nextjs': minor
'@clerk/tanstack-react-start': minor
'@clerk/localizations': patch
---

Add an experimental `AgentActionApproval` component with an interactive mock approval flow, account and workspace switching, and an unavailable-request state.
6 changes: 6 additions & 0 deletions packages/clerk-js/sandbox/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ const AVAILABLE_COMPONENTS = [
'configureSSO',
'configureDirectorySync',
'oauthConsent',
'agentActionApproval',
'oauthDeviceVerification',
'taskChooseOrganization',
'taskResetPassword',
Expand Down Expand Up @@ -157,6 +158,7 @@ const componentControls: Record<AvailableComponent, ComponentPropsControl> = {
configureSSO: buildComponentControls('configureSSO'),
configureDirectorySync: buildComponentControls('configureDirectorySync'),
oauthConsent: buildComponentControls('oauthConsent'),
agentActionApproval: buildComponentControls('agentActionApproval'),
oauthDeviceVerification: buildComponentControls('oauthDeviceVerification'),
taskChooseOrganization: buildComponentControls('taskChooseOrganization'),
taskResetPassword: buildComponentControls('taskResetPassword'),
Expand Down Expand Up @@ -429,6 +431,10 @@ void (async () => {
'/pricing-table': { mount: 'mountPricingTable', component: 'pricingTable' },
'/api-keys': { mount: 'mountAPIKeys', component: 'apiKeys' },
'/configure-sso': { mount: '__internal_mountConfigureSSO', component: 'configureSSO' },
'/agent-action-approval': {
mount: '__experimental_mountAgentActionApproval',
component: 'agentActionApproval',
},
'/oauth-device-verification': {
mount: '__internal_mountOAuthDeviceVerification',
component: 'oauthDeviceVerification',
Expand Down
26 changes: 26 additions & 0 deletions packages/clerk-js/sandbox/scenarios/agent-action-approval.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import {
clerkHandlers,
EnvironmentService,
type MockScenario,
SessionService,
setClerkState,
UserService,
} from '@clerk/msw';

export function AgentActionApproval(): MockScenario {
const user = UserService.create();
const session = SessionService.create(user);

setClerkState({
environment: EnvironmentService.MULTI_SESSION,
session,
user,
});

return {
description: 'Interactive agent-action approval prototype',
handlers: clerkHandlers,
initialState: { session, user },
name: 'agent-action-approval',
};
}
1 change: 1 addition & 0 deletions packages/clerk-js/sandbox/scenarios/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ export { OrgProfileSeatLimit } from './org-profile-seat-limit';
export { PricingTableSBB } from './pricing-table-sbb';
export { AnnualOnlyPlans } from './annual-only-plans';
export { XProviderEnabled } from './x-provider-enabled';
export { AgentActionApproval } from './agent-action-approval';
5 changes: 5 additions & 0 deletions packages/clerk-js/sandbox/template.html
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,11 @@
label="OAuth Consent"
component="<OAuthConsent />"
></nav-link>
<nav-link
href="/agent-action-approval?scenario=AgentActionApproval"
label="Agent Action Approval"
component="<AgentActionApproval />"
></nav-link>
<nav-link
href="/oauth-device-verification"
label="OAuth Device Verification"
Expand Down
20 changes: 20 additions & 0 deletions packages/clerk-js/src/core/clerk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ import type {
__internal_PlanDetailsProps,
__internal_SubscriptionDetailsProps,
__internal_UserVerificationModalProps,
AgentActionApprovalProps,
APIKeysNamespace,
APIKeysProps,
AuthenticateWithBaseParams,
Expand Down Expand Up @@ -1539,6 +1540,25 @@ export class Clerk implements ClerkInterface {
void this.#clerkUI?.then(ui => ui.ensureMounted()).then(controls => controls.unmountComponent({ node }));
};

public __experimental_mountAgentActionApproval = (node: HTMLDivElement, props?: AgentActionApprovalProps) => {
this.assertComponentsReady(this.#clerkUI);
const component = 'AgentActionApproval';
void this.#clerkUI
.then(ui => ui.ensureMounted({ preloadHint: component }))
.then(controls =>
controls.mountComponent({
name: component,
appearanceKey: '__experimental_agentActionApproval',
node,
props,
}),
);
};

public __experimental_unmountAgentActionApproval = (node: HTMLDivElement) => {
void this.#clerkUI?.then(ui => ui.ensureMounted()).then(controls => controls.unmountComponent({ node }));
};

/**
* @deprecated Use mountOAuthConsent instead.
*/
Expand Down
26 changes: 26 additions & 0 deletions packages/localizations/src/ar-SA.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,32 @@ export const arSA: LocalizationResource = {
title: undefined,
traceIdLabel: undefined,
},
agentActionApproval: {
action__approve: undefined,
action__deny: undefined,
action__switchAccount: undefined,
commentLabel: undefined,
commentOptional: undefined,
commentPlaceholder: undefined,
copyParameter: undefined,
detailsLabel: undefined,
expiresIn: undefined,
parameterCopied: undefined,
requestedAt: undefined,
signedInAs: undefined,
terminal: {
approvedSubtitle: undefined,
approvedTitle: undefined,
deniedSubtitle: undefined,
deniedTitle: undefined,
expiredSubtitle: undefined,
expiredTitle: undefined,
},
title: undefined,
unavailableSubtitle: undefined,
unavailableTitle: undefined,
workspace: undefined,
},
apiKeys: {
action__add: undefined,
action__search: undefined,
Expand Down
26 changes: 26 additions & 0 deletions packages/localizations/src/be-BY.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,32 @@ export const beBY: LocalizationResource = {
title: undefined,
traceIdLabel: undefined,
},
agentActionApproval: {
action__approve: undefined,
action__deny: undefined,
action__switchAccount: undefined,
commentLabel: undefined,
commentOptional: undefined,
commentPlaceholder: undefined,
copyParameter: undefined,
detailsLabel: undefined,
expiresIn: undefined,
parameterCopied: undefined,
requestedAt: undefined,
signedInAs: undefined,
terminal: {
approvedSubtitle: undefined,
approvedTitle: undefined,
deniedSubtitle: undefined,
deniedTitle: undefined,
expiredSubtitle: undefined,
expiredTitle: undefined,
},
title: undefined,
unavailableSubtitle: undefined,
unavailableTitle: undefined,
workspace: undefined,
},
apiKeys: {
action__add: undefined,
action__search: undefined,
Expand Down
26 changes: 26 additions & 0 deletions packages/localizations/src/bg-BG.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,32 @@ export const bgBG: LocalizationResource = {
title: undefined,
traceIdLabel: undefined,
},
agentActionApproval: {
action__approve: undefined,
action__deny: undefined,
action__switchAccount: undefined,
commentLabel: undefined,
commentOptional: undefined,
commentPlaceholder: undefined,
copyParameter: undefined,
detailsLabel: undefined,
expiresIn: undefined,
parameterCopied: undefined,
requestedAt: undefined,
signedInAs: undefined,
terminal: {
approvedSubtitle: undefined,
approvedTitle: undefined,
deniedSubtitle: undefined,
deniedTitle: undefined,
expiredSubtitle: undefined,
expiredTitle: undefined,
},
title: undefined,
unavailableSubtitle: undefined,
unavailableTitle: undefined,
workspace: undefined,
},
apiKeys: {
action__add: undefined,
action__search: undefined,
Expand Down
26 changes: 26 additions & 0 deletions packages/localizations/src/bn-IN.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,32 @@ export const bnIN: LocalizationResource = {
title: undefined,
traceIdLabel: undefined,
},
agentActionApproval: {
action__approve: undefined,
action__deny: undefined,
action__switchAccount: undefined,
commentLabel: undefined,
commentOptional: undefined,
commentPlaceholder: undefined,
copyParameter: undefined,
detailsLabel: undefined,
expiresIn: undefined,
parameterCopied: undefined,
requestedAt: undefined,
signedInAs: undefined,
terminal: {
approvedSubtitle: undefined,
approvedTitle: undefined,
deniedSubtitle: undefined,
deniedTitle: undefined,
expiredSubtitle: undefined,
expiredTitle: undefined,
},
title: undefined,
unavailableSubtitle: undefined,
unavailableTitle: undefined,
workspace: undefined,
},
apiKeys: {
action__add: 'নতুন কী যোগ করুন',
action__search: 'কী অনুসন্ধান করুন',
Expand Down
26 changes: 26 additions & 0 deletions packages/localizations/src/ca-ES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,32 @@ export const caES: LocalizationResource = {
title: undefined,
traceIdLabel: undefined,
},
agentActionApproval: {
action__approve: undefined,
action__deny: undefined,
action__switchAccount: undefined,
commentLabel: undefined,
commentOptional: undefined,
commentPlaceholder: undefined,
copyParameter: undefined,
detailsLabel: undefined,
expiresIn: undefined,
parameterCopied: undefined,
requestedAt: undefined,
signedInAs: undefined,
terminal: {
approvedSubtitle: undefined,
approvedTitle: undefined,
deniedSubtitle: undefined,
deniedTitle: undefined,
expiredSubtitle: undefined,
expiredTitle: undefined,
},
title: undefined,
unavailableSubtitle: undefined,
unavailableTitle: undefined,
workspace: undefined,
},
apiKeys: {
action__add: undefined,
action__search: undefined,
Expand Down
26 changes: 26 additions & 0 deletions packages/localizations/src/cs-CZ.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,32 @@ export const csCZ: LocalizationResource = {
title: undefined,
traceIdLabel: undefined,
},
agentActionApproval: {
action__approve: undefined,
action__deny: undefined,
action__switchAccount: undefined,
commentLabel: undefined,
commentOptional: undefined,
commentPlaceholder: undefined,
copyParameter: undefined,
detailsLabel: undefined,
expiresIn: undefined,
parameterCopied: undefined,
requestedAt: undefined,
signedInAs: undefined,
terminal: {
approvedSubtitle: undefined,
approvedTitle: undefined,
deniedSubtitle: undefined,
deniedTitle: undefined,
expiredSubtitle: undefined,
expiredTitle: undefined,
},
title: undefined,
unavailableSubtitle: undefined,
unavailableTitle: undefined,
workspace: undefined,
},
apiKeys: {
action__add: 'Přidat nový klíč',
action__search: 'Vyhledat klíče',
Expand Down
26 changes: 26 additions & 0 deletions packages/localizations/src/da-DK.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,32 @@ export const daDK: LocalizationResource = {
title: undefined,
traceIdLabel: undefined,
},
agentActionApproval: {
action__approve: undefined,
action__deny: undefined,
action__switchAccount: undefined,
commentLabel: undefined,
commentOptional: undefined,
commentPlaceholder: undefined,
copyParameter: undefined,
detailsLabel: undefined,
expiresIn: undefined,
parameterCopied: undefined,
requestedAt: undefined,
signedInAs: undefined,
terminal: {
approvedSubtitle: undefined,
approvedTitle: undefined,
deniedSubtitle: undefined,
deniedTitle: undefined,
expiredSubtitle: undefined,
expiredTitle: undefined,
},
title: undefined,
unavailableSubtitle: undefined,
unavailableTitle: undefined,
workspace: undefined,
},
apiKeys: {
action__add: undefined,
action__search: undefined,
Expand Down
26 changes: 26 additions & 0 deletions packages/localizations/src/de-DE.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,32 @@ export const deDE: LocalizationResource = {
title: undefined,
traceIdLabel: undefined,
},
agentActionApproval: {
action__approve: undefined,
action__deny: undefined,
action__switchAccount: undefined,
commentLabel: undefined,
commentOptional: undefined,
commentPlaceholder: undefined,
copyParameter: undefined,
detailsLabel: undefined,
expiresIn: undefined,
parameterCopied: undefined,
requestedAt: undefined,
signedInAs: undefined,
terminal: {
approvedSubtitle: undefined,
approvedTitle: undefined,
deniedSubtitle: undefined,
deniedTitle: undefined,
expiredSubtitle: undefined,
expiredTitle: undefined,
},
title: undefined,
unavailableSubtitle: undefined,
unavailableTitle: undefined,
workspace: undefined,
},
apiKeys: {
action__add: 'Neuen API-Key hinzufügen',
action__search: 'Suche',
Expand Down
Loading
Loading