Angular SDK — Release Notes
@revrag-ai/embed-angular · release history, newest first. Install the latest with npm install @revrag-ai/embed-angular@latest; confirm the current version on npm.
2.0.0
Released: 26 October 2026
The first Angular release since 1.0.7. It brings the Angular package onto the current SDK engine: the agent can now see and act on your pages, and the widget reads your dashboard's widget configuration the same way the React, React Native and Android SDKs do. It also cuts the initial bundle, fixes a change-detection cost, and fixes the type files.
Every app must make one code change: pass your app's version to initialize(). Apps that call embedEvent.reset() or embedEvent.getSessionId() must also remove those calls. Every symbol you imported and every tag you placed in a template in 1.0.7 still exists: the ones that were never meant to be public are deprecated, not removed. Code that reached into the internals of those deprecated classes (for example ExpandedViewComponent.elapsedTime) may need changes.
npm install @revrag-ai/embed-angular@2.0.0Without appVersion, the widget never appears. Add it to initialize() before you deploy 2.0.0 — see Upgrade steps. TypeScript will not warn you: the option is still typed as optional.
The widget's defaults changed too. If your widget configuration leaves out the nudge, the agent's name or the auto-collapse time, your users will see a different widget — most visibly, the inactivity nudge stops unless inactivityBehavior is show_popup, nudgeDelay is above 0 and tooltipMessage is set.
Breaking changes
| Change | What to do |
|---|---|
appVersion is required in initialize() | initialize(apiKey, { appVersion: '1.2.3' }). Without it, initialize() rejects, error$ emits the message and the widget never appears. The backend picks the widget and agent configuration per app version |
embedEvent.reset() and embedEvent.getSessionId() removed | Delete these calls. They no longer compile, and calling them from plain JavaScript throws. event, customEvent, addCallback, removeCallback and getStoredAppUserId remain |
| Angular 16 or newer | The package uses Angular signals, which arrived in Angular 16, and its peer range is now >=16.0.0. If you are on Angular 15, stay on 1.0.7 |
rxjs ^7.4.0 is a declared peer dependency | Every Angular 16+ app already has a matching rxjs |
Behaviour changes to check
Fields your widget configuration leaves out now use the Android SDK's defaults:
| Field left out | 1.0.7 | 2.0.0 | To keep 1.0.7 behaviour |
|---|---|---|---|
| Agent name / type | "Riya" / "Loan approval agent" | "Revrag AI" / "Onboarding Agent" | Set agentTextContent.agentName / agentType |
| Nudge | after 1.5 s, with the message "Any questions? Click to connect" | none | Set collapsedView.inactivityBehavior to show_popup, nudgeDelay (seconds, above 0) and tooltipMessage |
| After a call connects | the card stays open | folds back to the button after 15 s (the call keeps running; not while captions are on) | Set collapsedView.collapsedTime (seconds) to a long time; it cannot be turned off |
| Agent output panel | stays open | closes 15 s after its text finishes | Set collapsedView.viewCloseDelay (ms) to a long time; it cannot be turned off |
| Tooltip colour | purple | 80% black | Set colorPalette.tooltipBackgroundColor |
| Corners of the open widget | round pill | 20px | Set colorPalette.borderRadius |
Fields your widget configuration sets now take effect:
| Field | 1.0.7 | 2.0.0 |
|---|---|---|
fillType | any value except solid drew a left-to-right gradient | the gradient's direction: horizontal, vertical, otherwise diagonal (including gradient). solid, flat and color draw backgroundColor |
textColor | no effect; name and status always white | agent name, status line and the captions (CC) badge |
borderRadius | no effect | the open widget and the collapsed button, which becomes a rounded square filled with your gradient; the avatar stays round |
tooltipBackgroundColor, tooltipTextColor | tooltip only | tooltip and the live caption bubble |
only grad1 set | no gradient | a gradient from grad1 into a 35% darker shade |
If a colour on your dashboard was wrong but had no visible effect in 1.0.7, it will show now.
Other changes:
| Change | What to check |
|---|---|
| The agent can act on your pages during a call | Add data-revrag-mask to fields it must never read, and list screens it must never see in the provider's excludeScreens. While a modal dialog is open, the agent sees and acts on that dialog alone |
The button appears only after initialize() succeeds | In 1.0.7 the button showed straight away. Now nothing shows until initialize() has finished, and nothing shows at all if it fails (wrong key, missing appVersion, network error) |
The floating widget moves to <body> | With widgetPositioning="fixed" (the default), the widget's element is moved to the end of <body>, so a parent element can no longer trap it underneath your content. If you styled it through a parent selector, check it still looks right. embedded mode stays where you put it |
| The button can be dragged | Users can drag it to another edge. <revrag-embed-provider> has no input to turn this off, so in fixed mode its button is always draggable. The bare <revrag-embed-button> has a draggable input, but it is only for setups that drive Action Intelligence with ActionIntelligenceService and no provider (when to use it) |
| Status line instead of the call timer | During a call the card shows what the agent is doing ("Speaking", "Listening" and similar) instead of an elapsed-time clock |
EventKeys.SCREEN_VIEW has a new value | It is now 'screen_state' (was 'screen_view'). If you compare event types against the raw string, compare against EventKeys.SCREEN_VIEW instead |
| Click analytics report real clicks only | Clicks on controls (buttons, links, checkboxes, selects and similar) and on elements with a click handler are reported as they happen, named after the element's data-revrag-name when it has one. A <div> or <span> that only has a CSS class is no longer reported. Your Revrag dashboard configuration can switch click tracking off |
Deprecated
Still exported and still working; they will be removed in a later major version. They were never intended as public API.
| Deprecated | Use instead |
|---|---|
EmbedWidgetComponent, AnimatedButtonComponent, ExpandedViewComponent, CallTextPanelComponent, TooltipComponent, WaveformVisualizerComponent, TypewriterComponent (and their revrag-… tags) | <revrag-embed-provider> (EmbedProviderComponent), which renders the whole widget. EmbedModule still exports them |
EmbedLiveKitService | EmbedCallService — startCall(), endCall(), isCallActive() |
InteractionWatcherService, PlatformService, WidgetConfigService | Nothing — the widget wires them up itself |
resolveColorPalette, resolveAnimationData, resolveWidgetPosition, deriveWidgetConfig | Nothing — the widget configuration is applied from the dashboard automatically |
Type EventPayload | CustomEventPayload — the type your embedEvent.addCallback listeners receive |
Types WidgetConfig, WidgetSide, ResolvedWidgetPosition | Nothing — look and position come from the dashboard |
New
- Action Intelligence — during a call the agent reads the current screen and acts on it (tap, type, select, scroll, read).
- Starts once
initialize()succeeds. Your Revrag dashboard configuration can switch it off. - Fields marked with
data-revrag-mask(exported asMASK_ATTR), or inside an element marked with it, never have their content sent. <revrag-embed-provider>highlights each element the agent acts on.- New provider inputs:
excludeScreens,showOnAllScreens,actionRootandgetScreenName. Moving onto a screen inexcludeScreenshides the widget and ends an active call. See the advanced provider guide. - If you narrow
actionRoot, dialogs attached todocument.body(such as Angular CDK dialogs) stay visible to the agent. ActionIntelligenceServicesets the same scope from code (typeActionScopeInputs).
- Starts once
EmbedCallService—startCall(),endCall(),isCallActive().EmbedLogout()— call it when your user signs out. It ends any call (including one still connecting), stops the agent, wipes that user's cached screens and forgets theirapp_user_id(with any click events still queued for it). Your API key, widget configuration and session initialization data stay, so the next user needs no newinitialize().- Widget controls —
expandWidget,collapseWidget,isWidgetExpanded,subscribeWidgetExpanded. - Agent events —
AgentEvent,embedOnAgent,embedOffAgent(typesAgentEventPayload,AgentEventHandler). @revrag-ai/embed-angular/diagnostics—verifyIntegration()checks a setup in ten steps;integrationSnapshot()returns the current state.- Widget
- A draggable button that works with touch and snaps to the nearest edge.
- Live captions (CC) during a call.
- A ring pulses around the collapsed button during a call, in
colorPalette.pulseColoror, when that is not set, your widget's main colour. - The fold-back after a call connects follows the dashboard's
collapsedView.collapsedTime.<revrag-embed-provider>has no input for it (the bare button'sautoCollapseMsinput is only for provider-less setups). - The button size follows
agentAvatar.avatarSizefrom your dashboard (56px when not set).
- More widget configuration fields, all set on the dashboard:
colorPalette.gradientColors— a gradient with any number of colours.colorPalette.gradientPreset— a named gradient (ocean,sunset,aurora,midnight, …).position.leftPaddingandposition.topPadding, and thebottom-centerandtop-centerpositions.collapsedView.viewCloseDelay— how long the agent's output panel stays after its text finishes.
- Bad colours are ignored. A colour the browser cannot draw falls back to its default. Negative paddings count as 0.
revrag-integrate.mdships in the package (node_modules/@revrag-ai/embed-angular/revrag-integrate.md) — instructions an AI coding agent can follow end to end.
Fixed
- Bundle size
- The default avatar animation (about 400 KB) loads on demand instead of shipping in your initial bundle.
- Performance
- The avatar animation runs outside Angular's zone. It used to trigger change detection across the whole app on every animation frame.
- Host app safety
- The SDK loads when browser storage is blocked ("Block all cookies", sandboxed iframes).
- Ending a call no longer removes your page's own
<audio>elements. - Pressing call before the SDK is initialized logs a console warning instead of showing a browser
alert()to your users.
- Calls
- Mute state no longer carries over into the next call.
- Widget display
- When the route comes from the Angular Router, screen lists (
includeScreens,embedButtonVisibilityConfig) match the path only, so a?queryor#fragmentin the URL no longer stops the button from showing.
- When the route comes from the Angular Router, screen lists (
- Analytics
- Standalone apps now always report the Angular platform; it could be lost when
EmbedModulewas not imported.
- Standalone apps now always report the Angular platform; it could be lost when
- TypeScript
- No type file imports the unpublished
@revrag-ai/embed-coreany more, so projects withoutskipLibCheckno longer getTS2307. See TypeScript.
- No type file imports the unpublished
- Content Security Policy
- The in-call icons are bundled with the SDK; no image host needs to be allowed for them.
- An avatar animation that cannot be loaded shows the SDK's own animation. The SDK no longer retries through the third-party
corsproxy.io, so you can removecorsproxy.iofrom your CSP.
Upgrade steps: 1.0.7 → 2.0.0
- Confirm you are on Angular 16 or newer, and check your stack against the Dependency & Compatibility Guide.
- Install
@revrag-ai/embed-angular@2.0.0. Apackage.jsonrange of^1.0.7will not pick it up on its own. - Pass
appVersiontoinitialize(), matching a version your Revrag dashboard has a widget configuration for, and catch its promise:this.embedInit .initialize('YOUR_API_KEY', { appVersion: '1.2.3' }) .catch((err) => console.error('[Revrag] init failed:', err)); - Remove any call to
embedEvent.reset()orembedEvent.getSessionId(). - Check your widget configuration against Behaviour changes. Set any field whose
1.0.7behaviour you want to keep — at least the nudge fields, if you rely on the nudge. - If you compare event types against
'screen_view', compare againstEventKeys.SCREEN_VIEWinstead. - Mask sensitive fields with
data-revrag-mask, and setexcludeScreenson<revrag-embed-provider>where needed. - Call
EmbedLogout()when your user signs out. - Plan to move off deprecated imports. They still work; use
EmbedProviderComponent,EmbedInitServiceandEmbedCallServiceinstead. - Optional: run
verifyIntegration()from@revrag-ai/embed-angular/diagnosticsto check the setup, and removecorsproxy.iofrom your Content Security Policy.
The Angular integration guide covers each step in detail.
1.0.7 and earlier
1.0.7 and earlier: release dates and known issues
1.0.7 was published on 8 June 2026; 1.0.5 and 1.0.6 on 24 March 2026; 1.0.0 to 1.0.4 on 10 March 2026. These releases have no appVersion option, no Action Intelligence, no call controls, no agent events, no live captions and no /diagnostics entry.
Known issues in 1.0.7, all fixed in 2.0.0:
- Nine type files import
@revrag-ai/embed-core, which is not published, so TypeScript reportsTS2307unlessskipLibCheckis on. The app still runs. - The default avatar animation ships in the initial bundle.
- An avatar animation that cannot be fetched is retried through
corsproxy.io. - Ending a call removes every
<audio>element on the page.
Apps on Angular 15 cannot use 2.0.0 and should stay on 1.0.7. Everyone else should upgrade with the steps above. The 1.0.7 guide is archived: Angular 1.0.7 docs.