Analytics chat catalogue and CallSight parity¶
Status: Current | Last reviewed: 2026-10-02
Analytics uses the shared component registry with a built-in, versioned
analytics.v1 family. CallSight's composite cards were ported to React 19 and
Recharts 3. AnalyticsRichChat hosts the same renderer in author Preview,
Studio Analytics and the focused app; its response document interleaves prose
with typed attachments and stable anchors.
This is a built-in catalogue, not a remotely published catalog-builder bundle. External catalogue publication and arbitrary component replacement remain future extensions. Keeping the initial family in Studio lets us preserve the original layout, interaction state and evidence authorization while using Studio branding.
See question/result parity and the executed validation. Rendering checks alone do not establish analytical correctness.
Recorded demo as the acceptance flow¶
The supplied callsight-demo-v2.mov is the visual reference for the complete
journey, including the opening view before the first question. It is a
5-minute, 41-second screen recording with no audio track. Its SHA-256 is
abcf0bf9613d7d596d5102ff5c92af984f88137f457c519aec4e390fd19835da.
The recording stays outside the implementation commit.
The following checkpoints were inspected at ten-second intervals; times mark visible states, not exact interaction boundaries or latency measurements.
| Recording time | Observed state | Acceptance requirement |
|---|---|---|
| 00:00 | Branded environment cards; the demo enters Delta | Show an accessible agent library before entering an agent; retain direct links |
| 00:10–00:20 | Greeting, What matters most, hero KPI, Why selected, recommendation, two collapsed secondary findings; Performance at a glance on the right | Render a prepared opening briefing with this two-column hierarchy |
| 00:30–01:10 | Break down policy confusion by hub; one activity line, then thesis, focus explanation, highlighted horizontal bar chart, recommendation and chips | Transition into chat and preserve the relationship between the clicked finding and the result |
| 01:20–02:00 | Break down Atlanta policy calls; category ranking, short explanation, recommendation and follow-ups | Carry the prior subject/filter into the next turn |
| 02:10–03:00 | How are we doing on AHT?; hero stat with comparison, explanation and separate hub chart | Permit multiple ordered visual blocks with prose between them |
| 03:10–03:30 | Show me the latest weekly trend report; brief introduction and a composed trend card | Give artifact retrieval its own response shape |
| 03:40–04:50 | Inline citation expands a contact picker; choosing a contact opens a right-side drawer with summary, classifications, outcome and speaker bubbles | Keep evidence selection local, preserve the answer behind the drawer and support repeated drill-down |
| 05:00–05:40 | Trend detail expands into root causes, friction and escalation lists; a row opens another contact picker and transcript | Keep nested expansion state and scroll position while opening and closing detail |
The opening briefing uses a wider layout than the chat. Source
BriefingCard.tsx uses a 1,152 px maximum width and a 300 px performance rail
on wide screens; ChatStream.tsx uses a 768 px maximum width. In the recording,
the briefing gives way to the chat on the first question. Do not leave the
entire briefing and performance rail above every response. An explicit return
to the briefing can reopen the saved snapshot without regenerating it.
The full warehouse imports operational facts and compiled artifacts as well as transcripts. Briefings read completed reports and use a server-computed operating strip. They do not substitute for the offline compiler hierarchy.
Ownership¶
| Layer | Responsibility |
|---|---|
| Analytics chat host | User/assistant messages, width, spacing, scroll, composer, activity, streaming, history and detail-drawer navigation |
| Analytics catalogue | Original chart, KPI, table, contact, executive-summary, trend, recommendation and briefing components |
| Response document | Ordered prose and attachment references, citations, follow-ups, stable block IDs and initial presentation defaults |
| Analytics runtime | Authorized results, artifact lookup, supported response selection, evidence and action validation |
| Agent experience profile | Catalogue/version, landing view, briefing refresh, allowed components, branding, response depth and disclosure defaults |
The built-in registry is in
apps/ai-manager/components/analytics/catalogue/registry.tsx; message anchors
render through renderA2UIComponent. Chart primitives use the host Recharts
instance. The renderer does not load a second React instance. A future external
bundle can reuse catalogue publication and the integrity-checked loader, while
retaining the same typed response contract and private evidence actions.
Do not make catalogue use depend on the voice runtime or a new model tool call for every card. The Analytics runtime can construct validated component descriptors from an answer document and render them through the shared registry. Direct component rendering in Studio already has a precedent in PhoneMultimodalSurface.
CallSight defaults to preserve¶
Source baseline: trueserve-cciq revision
720c2a48c3d7599ec2d987cdff0283e5fea1d83b. Qualified source paths below are
relative to its contact-center-iq/ directory; bare component filenames are
under frontend/src/components/.
| Behavior | Observed CallSight default | Source |
|---|---|---|
| Message layout | Right-aligned user bubble; assistant identity and thesis; 768 px maximum chat column | frontend/src/components/ChatStream.tsx, MessageBubble.tsx |
| Answer composition | Prose and cards interleaved at explicit anchors; visuals selected for the question | MessageBubble.tsx, backend/prompts/system.md, Rule 2 |
| Ordinary answer length | Aim below 100 prose words; diagnostic answers below 200; hard ceiling 250 | backend/prompts/system.md, Rule 10 |
| Artifact answer | One plain framing sentence and the requested card; no duplicate surrounding summary | backend/prompts/system.md, Rule 3 |
| KPI presentation | One hero stat or a strip of 2–4 relevant metrics | StatTile.tsx, MetricStrip.tsx |
| Charts | Nine chart variants plus table; shared base chart height 260 px; units, legends, tooltips and grounded highlights | frontend/src/types.ts, frontend/src/components/charts/ |
| Tables | First 8 rows, then Show all / Show less; sorting applies to visible rows | frontend/src/components/TableCard.tsx |
| Trend detail | Summary and driver chart visible; root causes, friction and escalation details collapsed | TrendCard.tsx |
| Other evidence and focus explanation | Collapsed initially; citations open contextual pickers | CitationChip.tsx, FramingNote.tsx, InlineCiteRefs.tsx |
| Activity | One latest status during work; completed tool trail collapsed | MessageBubble.tsx, ReasoningTrail.tsx |
| Follow-ups | Usually 1–2 contextual chips, revealed after completion; direct contact opening bypasses another model turn | FollowUpChips.tsx, backend/prompts/system.md, Rule 6d |
| Briefing | Primary focus visible; up to two secondary items show a preview with detail collapsed | BriefingCard.tsx, SecondaryItem.tsx |
| Evidence navigation | Right-side drawer with contact/trend navigation stack and back breadcrumbs | DetailDrawer.tsx |
Chart variants are line, area, bar, horizontal bar, donut, composed, scatter, radial and treemap. Preserve supported highlight and empty-data behavior too. Compiled executive summaries have their own longer content, described in the original prompt as 250–500 words; the ordinary-answer budget must not truncate an explicitly requested artifact. Recommendations and framing count toward ordinary prose limits. Do not cut text mid-citation to satisfy a limit.
Retain meaningful scope, uncertainty and evidence access while moving release IDs and retrieval diagnostics into secondary detail. Keep the activity trail limited to tool status and execution provenance; do not expose hidden model reasoning. Preserve the drawer's available fields, but do not invent missing customer, operational or audio data to fill the original layout.
Response contract and interactions¶
AnalyticsAnswer.analysis carries catalogueVersion, snapshotId, ordered
attachments, the tool activity trail and measured duration. Anchors determine
where cards appear; invalid IDs are repaired within the configured budget or
rejected. The model never receives database credentials. Direct evidence
inspection rechecks the current audience and the session's data binding without
another model call. Contact pickers fetch five rows initially and fetch the
selected transcript only when opened; there is no eager transcript prefetch.
New chat reloads the current presentation binding. History restores its original snapshot, taxonomy and published presentation settings. Tenant switching clears the selected agent/session. Source transcripts retain original wording; a brand change does not rewrite evidence.
Briefing and configuration¶
analysis.briefing controls enablement, focus instructions and regeneration
minutes (15–10,080). The worker durably caches a briefing by snapshot, agent
configuration, cadence and prompt version, with leases and bounded retries.
The primary focus is expanded; secondary findings and supporting detail start
collapsed. The first question replaces the opening briefing with the chat.
The Analysis canvas exposes tool availability, pinned snapshot, iteration/tool budgets and briefing controls. Advanced validated JSON includes display labels, chart/comparison preferences, compact reports, answer review, diagnostic context relations, anomaly sensitivity and explicit scenario assumptions. These are independent of annotation models and report compilation settings.
Verification¶
e2e/analytics-parity.spec.ts tests all nine charts and table through the actual
shared renderer, plus live report disclosure, citation picker, transcript drawer,
history and New chat. Rendering fixtures are explicitly separate from live model
comparisons. See validation for results and replay
commands. The source video is a layout reference, not a latency benchmark.