@absolutejs/voice 0.0.22-beta.211 → 0.0.22-beta.212

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 (2) hide show
  1. package/README.md +128 -0
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -589,6 +589,134 @@ The UI should show `/voice/campaigns`, `/voice/campaigns/observability`, `/api/v
589
589
 
590
590
  This recipe covers the hosted-platform expectations that matter for campaign outreach: recipient import evidence, consent/dedupe checks, scheduling policy, worker-safe attempts, carrier dry-run proof, webhook outcome mapping, queue observability, readiness gating, and call-log replacement links.
591
591
 
592
+ ## Use-Case Recipe: Meeting Recorder
593
+
594
+ Use this path when the product needs a browser recorder for meetings, interviews, demos, or internal calls: capture microphone audio, persist transcripts and traces, generate a post-call review, expose a replayable operations record, and keep retention/export controls inside the app. This is not a hosted meeting bot; it is a set of recorder primitives your AbsoluteJS UI can own.
595
+
596
+ The production shape is:
597
+
598
+ 1. Mount a browser voice route with persistent session, trace, review, task, and audit-capable storage.
599
+ 2. Use framework stream/controller helpers for the microphone, transcript, reconnect state, and recording status.
600
+ 3. Persist a review artifact on completion with transcript, summary, latency, outcome, and recommended follow-up.
601
+ 4. Mount trace timelines, operations records, production readiness, and data-control routes.
602
+ 5. Gate release with the `meeting-recorder` readiness profile so reconnect, barge-in/interruption, provider routing, latency, and session-health proof stay visible.
603
+
604
+ ```ts
605
+ import { Elysia } from 'elysia';
606
+ import {
607
+ createVoiceDataControlRoutes,
608
+ createVoiceFileRuntimeStorage,
609
+ createVoiceOperationsRecordRoutes,
610
+ createVoiceProductionReadinessRoutes,
611
+ createVoiceReadinessProfile,
612
+ createVoiceTraceTimelineRoutes,
613
+ voice,
614
+ voiceComplianceRedactionDefaults
615
+ } from '@absolutejs/voice';
616
+ import { deepgram } from '@absolutejs/voice-deepgram';
617
+
618
+ const runtime = createVoiceFileRuntimeStorage({
619
+ directory: '.voice-runtime/meeting-recorder'
620
+ });
621
+
622
+ const app = new Elysia()
623
+ .use(
624
+ voice({
625
+ path: '/voice/meeting-recorder',
626
+ preset: 'reliability',
627
+ session: runtime.session,
628
+ stt: deepgram({
629
+ apiKey: process.env.DEEPGRAM_API_KEY!,
630
+ model: 'flux-general-en'
631
+ }),
632
+ trace: runtime.traces,
633
+ async onTurn({ turn }) {
634
+ return {
635
+ assistantText: '',
636
+ metadata: {
637
+ recorder: true,
638
+ transcript: turn.text
639
+ }
640
+ };
641
+ },
642
+ onComplete: async () => {},
643
+ ops: {
644
+ events: runtime.events,
645
+ reviews: runtime.reviews,
646
+ tasks: runtime.tasks,
647
+ buildReview: ({ session }) => ({
648
+ errors: [],
649
+ latencyBreakdown: [],
650
+ notes: ['Generated by the self-hosted meeting recorder path.'],
651
+ postCall: {
652
+ label: 'Meeting summary',
653
+ recommendedAction: 'Review the transcript and share action items.',
654
+ summary: 'Review transcript, decisions, and follow-up owners.'
655
+ },
656
+ summary: {
657
+ outcome: 'completed',
658
+ pass: true,
659
+ turnCount: session.turns.length
660
+ },
661
+ title: `Meeting recorder review for ${session.id}`,
662
+ timeline: [],
663
+ transcript: {
664
+ actual: session.turns
665
+ .map((turn) => turn.text)
666
+ .filter(Boolean)
667
+ .join('\n')
668
+ }
669
+ })
670
+ }
671
+ })
672
+ )
673
+ .use(
674
+ createVoiceTraceTimelineRoutes({
675
+ htmlPath: '/traces',
676
+ path: '/api/voice-traces',
677
+ store: runtime.traces
678
+ })
679
+ )
680
+ .use(
681
+ createVoiceOperationsRecordRoutes({
682
+ htmlPath: '/voice-operations/:sessionId',
683
+ integrationEvents: runtime.events,
684
+ path: '/api/voice-operations/:sessionId',
685
+ reviews: runtime.reviews,
686
+ store: runtime.traces,
687
+ tasks: runtime.tasks
688
+ })
689
+ )
690
+ .use(
691
+ createVoiceDataControlRoutes({
692
+ ...runtime,
693
+ audit: runtime.audit,
694
+ auditDeliveries: runtime.auditDeliveries,
695
+ redact: voiceComplianceRedactionDefaults,
696
+ traceDeliveries: runtime.traceDeliveries
697
+ })
698
+ )
699
+ .use(
700
+ createVoiceProductionReadinessRoutes({
701
+ ...createVoiceReadinessProfile('meeting-recorder', {
702
+ explain: true
703
+ }),
704
+ links: {
705
+ dataControl: '/data-control',
706
+ operationsRecords: '/voice-operations/:sessionId',
707
+ traces: '/traces'
708
+ },
709
+ store: runtime.traces
710
+ })
711
+ );
712
+ ```
713
+
714
+ The UI should show a clear recording button, elapsed time, live transcript, reconnect state, recording status, a stop/finalize action, and links to `/voice-operations/:sessionId`, `/traces`, `/production-readiness`, and `/data-control`. Use `useVoiceStream(...)`, `useVoiceController(...)`, `createVoiceStream(...)`, `VoiceStreamService`, or the HTML/HTMX client helpers depending on the framework; the route and trace/review stores stay the same.
715
+
716
+ For customer-facing exports, use the same redaction/export primitives as support workflows: render trace Markdown or audit Markdown with `voiceComplianceRedactionDefaults`, then deliver it through file, webhook, or S3 delivery runtimes. For sensitive recordings, start with a retention dry run through `/data-control/retention/plan` before applying deletion.
717
+
718
+ This recipe covers the hosted-platform expectations that matter for meeting recorders: browser mic capture, live transcript UI, reconnect visibility, post-call review, transcript/debug record, readiness proof, customer-owned storage, retention controls, and redacted export paths.
719
+
592
720
  ## How This Differs From Hosted Voice Platforms
593
721
 
594
722
  Hosted voice-agent platforms are strongest when you want a managed dashboard, phone-number provisioning, hosted orchestration, and campaign tooling out of the box.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@absolutejs/voice",
3
- "version": "0.0.22-beta.211",
3
+ "version": "0.0.22-beta.212",
4
4
  "description": "Voice primitives and Elysia plugin for AbsoluteJS",
5
5
  "repository": {
6
6
  "type": "git",