Browse In-App Agent

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.0

Without 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

ChangeWhat 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() removedDelete these calls. They no longer compile, and calling them from plain JavaScript throws. event, customEvent, addCallback, removeCallback and getStoredAppUserId remain
Angular 16 or newerThe 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 dependencyEvery 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 out1.0.72.0.0To keep 1.0.7 behaviour
Agent name / type"Riya" / "Loan approval agent""Revrag AI" / "Onboarding Agent"Set agentTextContent.agentName / agentType
Nudgeafter 1.5 s, with the message "Any questions? Click to connect"noneSet collapsedView.inactivityBehavior to show_popup, nudgeDelay (seconds, above 0) and tooltipMessage
After a call connectsthe card stays openfolds 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 panelstays opencloses 15 s after its text finishesSet collapsedView.viewCloseDelay (ms) to a long time; it cannot be turned off
Tooltip colourpurple80% blackSet colorPalette.tooltipBackgroundColor
Corners of the open widgetround pill20pxSet colorPalette.borderRadius

Fields your widget configuration sets now take effect:

Field1.0.72.0.0
fillTypeany value except solid drew a left-to-right gradientthe gradient's direction: horizontal, vertical, otherwise diagonal (including gradient). solid, flat and color draw backgroundColor
textColorno effect; name and status always whiteagent name, status line and the captions (CC) badge
borderRadiusno effectthe open widget and the collapsed button, which becomes a rounded square filled with your gradient; the avatar stays round
tooltipBackgroundColor, tooltipTextColortooltip onlytooltip and the live caption bubble
only grad1 setno gradienta 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:

ChangeWhat to check
The agent can act on your pages during a callAdd 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() succeedsIn 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 draggedUsers 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 timerDuring 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 valueIt 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 onlyClicks 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.

DeprecatedUse 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
EmbedLiveKitServiceEmbedCallService — startCall(), endCall(), isCallActive()
InteractionWatcherService, PlatformService, WidgetConfigServiceNothing — the widget wires them up itself
resolveColorPalette, resolveAnimationData, resolveWidgetPosition, deriveWidgetConfigNothing — the widget configuration is applied from the dashboard automatically
Type EventPayloadCustomEventPayload — the type your embedEvent.addCallback listeners receive
Types WidgetConfig, WidgetSide, ResolvedWidgetPositionNothing — 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 as MASK_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, actionRoot and getScreenName. Moving onto a screen in excludeScreens hides the widget and ends an active call. See the advanced provider guide.
    • If you narrow actionRoot, dialogs attached to document.body (such as Angular CDK dialogs) stay visible to the agent.
    • ActionIntelligenceService sets the same scope from code (type ActionScopeInputs).
  • 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 their app_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 new initialize().
  • Widget controls — expandWidget, collapseWidget, isWidgetExpanded, subscribeWidgetExpanded.
  • Agent events — AgentEvent, embedOnAgent, embedOffAgent (types AgentEventPayload, 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.pulseColor or, 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's autoCollapseMs input is only for provider-less setups).
    • The button size follows agentAvatar.avatarSize from 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.leftPadding and position.topPadding, and the bottom-center and top-center positions.
    • 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.md ships 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 ?query or #fragment in the URL no longer stops the button from showing.
  • Analytics
    • Standalone apps now always report the Angular platform; it could be lost when EmbedModule was not imported.
  • TypeScript
    • No type file imports the unpublished @revrag-ai/embed-core any more, so projects without skipLibCheck no longer get TS2307. See TypeScript.
  • 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 remove corsproxy.io from your CSP.

Upgrade steps: 1.0.7 → 2.0.0

  1. Confirm you are on Angular 16 or newer, and check your stack against the Dependency & Compatibility Guide.
  2. Install @revrag-ai/embed-angular@2.0.0. A package.json range of ^1.0.7 will not pick it up on its own.
  3. Pass appVersion to initialize(), 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));
  4. Remove any call to embedEvent.reset() or embedEvent.getSessionId().
  5. Check your widget configuration against Behaviour changes. Set any field whose 1.0.7 behaviour you want to keep — at least the nudge fields, if you rely on the nudge.
  6. If you compare event types against 'screen_view', compare against EventKeys.SCREEN_VIEW instead.
  7. Mask sensitive fields with data-revrag-mask, and set excludeScreens on <revrag-embed-provider> where needed.
  8. Call EmbedLogout() when your user signs out.
  9. Plan to move off deprecated imports. They still work; use EmbedProviderComponent, EmbedInitService and EmbedCallService instead.
  10. Optional: run verifyIntegration() from @revrag-ai/embed-angular/diagnostics to check the setup, and remove corsproxy.io from 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 reports TS2307 unless skipLibCheck is 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.