@absolutejs/voice 0.0.22-beta.1 → 0.0.22-beta.11

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.
package/README.md CHANGED
@@ -73,6 +73,88 @@ const app = new Elysia()
73
73
 
74
74
  `createVoiceMemoryStore()` is dev-only. Real deployments should provide a shared store backed by Redis, Postgres, or equivalent.
75
75
 
76
+ ## Voice Assistants
77
+
78
+ Use `createVoiceAssistant(...)` when you want one product-level surface for a voice agent instead of wiring tools, guardrails, experiments, traces, and ops recipes separately. It returns a standard `onTurn` handler, plus an `ops` object you can pass to `voice(...)`.
79
+
80
+ ```ts
81
+ import {
82
+ createVoiceAssistant,
83
+ createVoiceExperiment,
84
+ createVoiceFileRuntimeStorage,
85
+ createVoiceMemoryStore,
86
+ createVoiceAgentTool,
87
+ voice
88
+ } from '@absolutejs/voice';
89
+ import { deepgram } from '@absolutejs/voice-deepgram';
90
+
91
+ const runtimeStorage = createVoiceFileRuntimeStorage({
92
+ directory: '.voice-runtime/support'
93
+ });
94
+
95
+ const lookupOrder = createVoiceAgentTool({
96
+ name: 'lookup_order',
97
+ description: 'Look up an order by id.',
98
+ execute: async ({ args }) => ({ orderId: args.orderId, status: 'shipped' })
99
+ });
100
+
101
+ const assistant = createVoiceAssistant({
102
+ id: 'support',
103
+ artifactPlan: {
104
+ ops: {
105
+ events: runtimeStorage.events,
106
+ reviews: runtimeStorage.reviews,
107
+ tasks: runtimeStorage.tasks
108
+ },
109
+ preset: {
110
+ name: 'support-triage',
111
+ options: {
112
+ queue: 'support-triage'
113
+ }
114
+ }
115
+ },
116
+ experiment: createVoiceExperiment({
117
+ id: 'support-prompt',
118
+ variants: [
119
+ { id: 'baseline', weight: 1 },
120
+ {
121
+ id: 'direct',
122
+ weight: 1,
123
+ system: 'You are concise, practical, and resolve the caller quickly.'
124
+ }
125
+ ]
126
+ }),
127
+ guardrails: {
128
+ beforeTurn: ({ turn }) =>
129
+ turn.text.toLowerCase().includes('human')
130
+ ? { escalate: { reason: 'caller requested a human' } }
131
+ : undefined
132
+ },
133
+ model: {
134
+ async generate({ messages, tools }) {
135
+ return {
136
+ assistantText: `I can help. Available tools: ${tools.map((tool) => tool.name).join(', ')}`
137
+ };
138
+ }
139
+ },
140
+ system: 'You are a support voice assistant.',
141
+ tools: [lookupOrder],
142
+ trace: runtimeStorage.traces
143
+ });
144
+
145
+ voice({
146
+ path: '/voice',
147
+ session: createVoiceMemoryStore(),
148
+ stt: deepgram({ apiKey: process.env.DEEPGRAM_API_KEY! }),
149
+ trace: runtimeStorage.traces,
150
+ ops: assistant.ops,
151
+ onTurn: assistant.onTurn,
152
+ onComplete: async () => {}
153
+ });
154
+ ```
155
+
156
+ Assistant experiments are deterministic by session id, so a caller stays on the same variant for a call. Variants can change the model, system prompt, tools, and tool-round budget; guardrails can block a turn before model execution or rewrite the returned `VoiceRouteResult`.
157
+
76
158
  ## Agent Tools And Squads
77
159
 
78
160
  For assistant-style products, use `createVoiceAgent(...)` as the `onTurn` handler. The agent layer is provider-neutral: plug in any model adapter, register server-side tools, and return normal voice route results like `assistantText`, `transfer`, `escalate`, or `complete`.
@@ -0,0 +1,143 @@
1
+ import { type VoiceAgent, type VoiceAgentModel, type VoiceAgentOptions, type VoiceAgentSquadOptions, type VoiceAgentTool } from './agent';
2
+ import { type VoiceOutcomeRecipeName, type VoiceOutcomeRecipeOptions } from './outcomeRecipes';
3
+ import { type VoiceAssistantMemoryHandle, type VoiceAssistantMemoryOptions } from './assistantMemory';
4
+ import type { VoiceNormalizedRouteConfig, VoiceOnTurnObjectHandler, VoiceRouteConfig, VoiceRouteResult, VoiceRuntimeOpsConfig, VoiceSessionRecord } from './types';
5
+ import type { StoredVoiceTraceEvent, VoiceTraceEventStore } from './trace';
6
+ export type VoiceAssistantPreset = VoiceOutcomeRecipeName;
7
+ export type VoiceAssistantArtifactPlan<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = {
8
+ ops?: VoiceRuntimeOpsConfig<TContext, TSession, TResult>;
9
+ preset?: VoiceAssistantPreset | {
10
+ name: VoiceAssistantPreset;
11
+ options?: VoiceOutcomeRecipeOptions;
12
+ };
13
+ };
14
+ export type VoiceAssistantGuardrailInput<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = Parameters<VoiceOnTurnObjectHandler<TContext, TSession, TResult>>[0] & {
15
+ assistantId: string;
16
+ memory?: VoiceAssistantMemoryHandle;
17
+ };
18
+ export type VoiceAssistantOutputGuardrailInput<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = VoiceAssistantGuardrailInput<TContext, TSession, TResult> & {
19
+ result: VoiceRouteResult<TResult>;
20
+ };
21
+ export type VoiceAssistantGuardrails<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = {
22
+ beforeTurn?: (input: VoiceAssistantGuardrailInput<TContext, TSession, TResult>) => Promise<VoiceRouteResult<TResult> | void> | VoiceRouteResult<TResult> | void;
23
+ afterTurn?: (input: VoiceAssistantOutputGuardrailInput<TContext, TSession, TResult>) => Promise<VoiceRouteResult<TResult> | void> | VoiceRouteResult<TResult> | void;
24
+ };
25
+ export type VoiceAssistantVariant<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = {
26
+ id: string;
27
+ maxToolRounds?: number;
28
+ metadata?: Record<string, unknown>;
29
+ model?: VoiceAgentModel<TContext, TSession, TResult>;
30
+ system?: VoiceAgentOptions<TContext, TSession, TResult>['system'];
31
+ tools?: Array<VoiceAgentTool<TContext, TSession, Record<string, unknown>, unknown, TResult>>;
32
+ weight?: number;
33
+ };
34
+ export type VoiceAssistantMemoryLifecycleInput<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = Parameters<VoiceOnTurnObjectHandler<TContext, TSession, TResult>>[0] & {
35
+ assistantId: string;
36
+ memory: VoiceAssistantMemoryHandle;
37
+ };
38
+ export type VoiceAssistantMemoryLifecycle<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = {
39
+ afterTurn?: (input: VoiceAssistantMemoryLifecycleInput<TContext, TSession, TResult> & {
40
+ result: VoiceRouteResult<TResult>;
41
+ }) => Promise<void> | void;
42
+ beforeTurn?: (input: VoiceAssistantMemoryLifecycleInput<TContext, TSession, TResult>) => Promise<void> | void;
43
+ };
44
+ export type VoiceAssistantExperimentResolverInput<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord> = {
45
+ assistantId: string;
46
+ context: TContext;
47
+ session: TSession;
48
+ turnId?: string;
49
+ };
50
+ export type VoiceAssistantExperiment<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = {
51
+ id: string;
52
+ resolve: (input: VoiceAssistantExperimentResolverInput<TContext, TSession>) => VoiceAssistantVariant<TContext, TSession, TResult>;
53
+ variants: Array<VoiceAssistantVariant<TContext, TSession, TResult>>;
54
+ };
55
+ export type VoiceAssistantExperimentOptions<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = {
56
+ id: string;
57
+ selectVariant?: (input: VoiceAssistantExperimentResolverInput<TContext, TSession> & {
58
+ variants: Array<VoiceAssistantVariant<TContext, TSession, TResult>>;
59
+ }) => VoiceAssistantVariant<TContext, TSession, TResult> | string | void;
60
+ variants: Array<VoiceAssistantVariant<TContext, TSession, TResult>>;
61
+ };
62
+ type VoiceAssistantAgentSource<TContext, TSession extends VoiceSessionRecord, TResult> = {
63
+ agent: VoiceAgent<TContext, TSession, TResult>;
64
+ agents?: never;
65
+ defaultAgentId?: never;
66
+ maxHandoffsPerTurn?: never;
67
+ maxToolRounds?: never;
68
+ model?: never;
69
+ selectAgent?: never;
70
+ system?: never;
71
+ tools?: never;
72
+ } | {
73
+ agent?: never;
74
+ agents: Array<VoiceAgent<TContext, TSession, TResult>>;
75
+ defaultAgentId: string;
76
+ maxHandoffsPerTurn?: number;
77
+ maxToolRounds?: never;
78
+ model?: never;
79
+ selectAgent?: VoiceAgentSquadOptions<TContext, TSession, TResult>['selectAgent'];
80
+ system?: never;
81
+ tools?: never;
82
+ } | {
83
+ agent?: never;
84
+ agents?: never;
85
+ defaultAgentId?: never;
86
+ maxHandoffsPerTurn?: never;
87
+ maxToolRounds?: number;
88
+ model: VoiceAgentModel<TContext, TSession, TResult>;
89
+ selectAgent?: never;
90
+ system?: VoiceAgentOptions<TContext, TSession, TResult>['system'];
91
+ tools?: Array<VoiceAgentTool<TContext, TSession, Record<string, unknown>, unknown, TResult>>;
92
+ };
93
+ export type VoiceAssistantOptions<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = VoiceAssistantAgentSource<TContext, TSession, TResult> & {
94
+ artifactPlan?: VoiceAssistantArtifactPlan<TContext, TSession, TResult>;
95
+ experiment?: VoiceAssistantExperiment<TContext, TSession, TResult>;
96
+ guardrails?: VoiceAssistantGuardrails<TContext, TSession, TResult>;
97
+ id: string;
98
+ memory?: VoiceAssistantMemoryOptions<TContext, TSession>;
99
+ memoryLifecycle?: VoiceAssistantMemoryLifecycle<TContext, TSession, TResult>;
100
+ ops?: VoiceRuntimeOpsConfig<TContext, TSession, TResult>;
101
+ trace?: VoiceAgentOptions<TContext, TSession, TResult>['trace'];
102
+ };
103
+ export type VoiceAssistant<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = {
104
+ agent: VoiceAgent<TContext, TSession, TResult>;
105
+ id: string;
106
+ onTurn: VoiceOnTurnObjectHandler<TContext, TSession, TResult>;
107
+ ops?: VoiceRuntimeOpsConfig<TContext, TSession, TResult>;
108
+ route: (overrides: Omit<VoiceRouteConfig<TContext, TSession, TResult>, 'onComplete' | 'onTurn'> & {
109
+ onComplete?: VoiceRouteConfig<TContext, TSession, TResult>['onComplete'];
110
+ }) => VoiceNormalizedRouteConfig<TContext, TSession, TResult>;
111
+ };
112
+ export type VoiceAssistantRunSummary = {
113
+ assistantId: string;
114
+ artifactPlans: Record<string, number>;
115
+ averageElapsedMs?: number;
116
+ blockedGuardrailCount: number;
117
+ escalationCount: number;
118
+ experiments: Record<string, number>;
119
+ guardrailCount: number;
120
+ outcomes: Record<string, number>;
121
+ runCount: number;
122
+ sessions: number;
123
+ toolCalls: Record<string, number>;
124
+ transferCount: number;
125
+ variants: Record<string, number>;
126
+ memory: {
127
+ deletes: number;
128
+ gets: number;
129
+ lists: number;
130
+ sets: number;
131
+ };
132
+ };
133
+ export type VoiceAssistantRunsSummary = {
134
+ assistants: VoiceAssistantRunSummary[];
135
+ totalRuns: number;
136
+ };
137
+ export declare const createVoiceExperiment: <TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown>(options: VoiceAssistantExperimentOptions<TContext, TSession, TResult>) => VoiceAssistantExperiment<TContext, TSession, TResult>;
138
+ export declare const createVoiceAssistant: <TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown>(options: VoiceAssistantOptions<TContext, TSession, TResult>) => VoiceAssistant<TContext, TSession, TResult>;
139
+ export declare const summarizeVoiceAssistantRuns: (input: StoredVoiceTraceEvent[] | {
140
+ events?: StoredVoiceTraceEvent[];
141
+ store?: VoiceTraceEventStore;
142
+ }) => Promise<VoiceAssistantRunsSummary>;
143
+ export {};
@@ -0,0 +1,63 @@
1
+ import type { VoiceSessionRecord } from './types';
2
+ import type { VoiceTraceEventStore } from './trace';
3
+ export type VoiceAssistantMemoryRecord<TValue = unknown, TMetadata extends Record<string, unknown> = Record<string, unknown>> = {
4
+ assistantId: string;
5
+ createdAt: number;
6
+ key: string;
7
+ metadata?: TMetadata;
8
+ namespace: string;
9
+ updatedAt: number;
10
+ value: TValue;
11
+ };
12
+ export type VoiceAssistantMemoryStore<TRecord extends VoiceAssistantMemoryRecord = VoiceAssistantMemoryRecord> = {
13
+ delete: (input: {
14
+ assistantId: string;
15
+ key: string;
16
+ namespace: string;
17
+ }) => Promise<void>;
18
+ get: (input: {
19
+ assistantId: string;
20
+ key: string;
21
+ namespace: string;
22
+ }) => Promise<TRecord | undefined>;
23
+ list: (input: {
24
+ assistantId: string;
25
+ namespace?: string;
26
+ }) => Promise<TRecord[]>;
27
+ set: (input: Omit<TRecord, 'createdAt' | 'updatedAt'> & {
28
+ createdAt?: number;
29
+ updatedAt?: number;
30
+ }) => Promise<TRecord>;
31
+ };
32
+ export type VoiceAssistantMemoryNamespaceInput<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord> = {
33
+ assistantId: string;
34
+ context: TContext;
35
+ session: TSession;
36
+ };
37
+ export type VoiceAssistantMemoryOptions<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TRecord extends VoiceAssistantMemoryRecord = VoiceAssistantMemoryRecord> = {
38
+ namespace: string | ((input: VoiceAssistantMemoryNamespaceInput<TContext, TSession>) => Promise<string> | string);
39
+ store: VoiceAssistantMemoryStore<TRecord>;
40
+ };
41
+ export type VoiceAssistantMemoryBinding<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TRecord extends VoiceAssistantMemoryRecord = VoiceAssistantMemoryRecord> = VoiceAssistantMemoryOptions<TContext, TSession, TRecord>;
42
+ export type VoiceAssistantMemoryHandle<TRecord extends VoiceAssistantMemoryRecord = VoiceAssistantMemoryRecord> = {
43
+ delete: (key: string) => Promise<void>;
44
+ get: <TValue = unknown>(key: string) => Promise<TValue | undefined>;
45
+ list: () => Promise<TRecord[]>;
46
+ namespace: string;
47
+ set: <TValue = unknown>(key: string, value: TValue, metadata?: Record<string, unknown>) => Promise<TRecord>;
48
+ };
49
+ export declare const createVoiceAssistantMemoryRecord: <TValue = unknown, TMetadata extends Record<string, unknown> = Record<string, unknown>>(input: Omit<VoiceAssistantMemoryRecord<TValue, TMetadata>, "createdAt" | "updatedAt"> & {
50
+ createdAt?: number;
51
+ updatedAt?: number;
52
+ }) => VoiceAssistantMemoryRecord<TValue, TMetadata>;
53
+ export declare const createVoiceMemoryAssistantMemoryStore: <TRecord extends VoiceAssistantMemoryRecord = VoiceAssistantMemoryRecord>() => VoiceAssistantMemoryStore<TRecord>;
54
+ export declare const resolveVoiceAssistantMemoryNamespace: <TContext, TSession extends VoiceSessionRecord>(input: VoiceAssistantMemoryNamespaceInput<TContext, TSession> & {
55
+ memory: VoiceAssistantMemoryOptions<TContext, TSession>;
56
+ }) => Promise<string>;
57
+ export declare const createVoiceAssistantMemoryHandle: <TContext, TSession extends VoiceSessionRecord, TRecord extends VoiceAssistantMemoryRecord = VoiceAssistantMemoryRecord>(input: {
58
+ assistantId: string;
59
+ context: TContext;
60
+ memory: VoiceAssistantMemoryOptions<TContext, TSession, TRecord>;
61
+ session: TSession;
62
+ trace?: VoiceTraceEventStore;
63
+ }) => Promise<VoiceAssistantMemoryHandle<TRecord>>;
@@ -1,3 +1,4 @@
1
+ import { type VoiceAssistantMemoryRecord, type VoiceAssistantMemoryStore } from './assistantMemory';
1
2
  import { type StoredVoiceTraceEvent, type VoiceTraceSinkDeliveryRecord, type VoiceTraceSinkDeliveryStore, type VoiceTraceEventStore } from './trace';
2
3
  import type { StoredVoiceIntegrationEvent, StoredVoiceExternalObjectMap, StoredVoiceOpsTask, VoiceExternalObjectMap, VoiceExternalObjectMapStore, VoiceIntegrationEvent, VoiceIntegrationEventStore, VoiceOpsTask, VoiceOpsTaskStore } from './ops';
3
4
  import type { StoredVoiceCallReviewArtifact, VoiceCallReviewArtifact, VoiceCallReviewStore } from './testing/review';
@@ -6,9 +7,10 @@ export type VoiceFileStoreOptions = {
6
7
  directory: string;
7
8
  pretty?: boolean;
8
9
  };
9
- export type VoiceFileRuntimeStorage<TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord> = {
10
+ export type VoiceFileRuntimeStorage<TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord, TMemory extends VoiceAssistantMemoryRecord = VoiceAssistantMemoryRecord> = {
10
11
  events: VoiceIntegrationEventStore<TEvent>;
11
12
  externalObjects: VoiceExternalObjectMapStore<TMapping>;
13
+ memories: VoiceAssistantMemoryStore<TMemory>;
12
14
  reviews: VoiceCallReviewStore<TReview>;
13
15
  session: VoiceSessionStore<TSession>;
14
16
  tasks: VoiceOpsTaskStore<TTask>;
@@ -22,7 +24,8 @@ export declare const createVoiceFileIntegrationEventStore: <TEvent extends Store
22
24
  export declare const createVoiceFileExternalObjectMapStore: <TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap>(options: VoiceFileStoreOptions) => VoiceExternalObjectMapStore<TMapping>;
23
25
  export declare const createVoiceFileTraceEventStore: <TEvent extends StoredVoiceTraceEvent = StoredVoiceTraceEvent>(options: VoiceFileStoreOptions) => VoiceTraceEventStore<TEvent>;
24
26
  export declare const createVoiceFileTraceSinkDeliveryStore: <TDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord>(options: VoiceFileStoreOptions) => VoiceTraceSinkDeliveryStore<TDelivery>;
25
- export declare const createVoiceFileRuntimeStorage: <TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord>(options: VoiceFileStoreOptions) => VoiceFileRuntimeStorage<TSession, TReview, TTask, TEvent, TMapping, TTrace, TTraceDelivery>;
27
+ export declare const createVoiceFileAssistantMemoryStore: <TRecord extends VoiceAssistantMemoryRecord = VoiceAssistantMemoryRecord>(options: VoiceFileStoreOptions) => VoiceAssistantMemoryStore<TRecord>;
28
+ export declare const createVoiceFileRuntimeStorage: <TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord, TMemory extends VoiceAssistantMemoryRecord = VoiceAssistantMemoryRecord>(options: VoiceFileStoreOptions) => VoiceFileRuntimeStorage<TSession, TReview, TTask, TEvent, TMapping, TTrace, TTraceDelivery, TMemory>;
26
29
  export declare const createStoredVoiceCallReviewArtifact: <TArtifact extends VoiceCallReviewArtifact = VoiceCallReviewArtifact>(id: string, artifact: TArtifact) => TArtifact & {
27
30
  id: string;
28
31
  };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,9 @@
1
1
  export { voice } from './plugin';
2
+ export { createVoiceAssistant, createVoiceExperiment, summarizeVoiceAssistantRuns } from './assistant';
2
3
  export { createVoiceAgent, createVoiceAgentSquad, createVoiceAgentTool } from './agent';
3
- export { createStoredVoiceCallReviewArtifact, createStoredVoiceExternalObjectMap, createStoredVoiceIntegrationEvent, createStoredVoiceOpsTask, createVoiceFileExternalObjectMapStore, createVoiceFileIntegrationEventStore, createVoiceFileReviewStore, createVoiceFileRuntimeStorage, createVoiceFileSessionStore, createVoiceFileTaskStore, createVoiceFileTraceSinkDeliveryStore, createVoiceFileTraceEventStore } from './fileStore';
4
+ export { createStoredVoiceCallReviewArtifact, createStoredVoiceExternalObjectMap, createStoredVoiceIntegrationEvent, createStoredVoiceOpsTask, createVoiceFileExternalObjectMapStore, createVoiceFileAssistantMemoryStore, createVoiceFileIntegrationEventStore, createVoiceFileReviewStore, createVoiceFileRuntimeStorage, createVoiceFileSessionStore, createVoiceFileTaskStore, createVoiceFileTraceSinkDeliveryStore, createVoiceFileTraceEventStore } from './fileStore';
5
+ export { createVoiceAssistantMemoryHandle, createVoiceAssistantMemoryRecord, createVoiceMemoryAssistantMemoryStore, resolveVoiceAssistantMemoryNamespace } from './assistantMemory';
6
+ export { createAnthropicVoiceAssistantModel, createGeminiVoiceAssistantModel, createJSONVoiceAssistantModel, createOpenAIVoiceAssistantModel, createVoiceProviderRouter } from './modelAdapters';
4
7
  export { buildVoiceTraceReplay, createVoiceMemoryTraceSinkDeliveryStore, createVoiceTraceHTTPSink, createVoiceMemoryTraceEventStore, createVoiceTraceSinkDeliveryId, createVoiceTraceSinkDeliveryRecord, createVoiceTraceSinkStore, createVoiceTraceEvent, createVoiceTraceEventId, deliverVoiceTraceEventsToSinks, evaluateVoiceTrace, exportVoiceTrace, filterVoiceTraceEvents, pruneVoiceTraceEvents, redactVoiceTraceEvent, redactVoiceTraceEvents, redactVoiceTraceText, renderVoiceTraceHTML, renderVoiceTraceMarkdown, resolveVoiceTraceRedactionOptions, selectVoiceTraceEventsForPrune, summarizeVoiceTrace } from './trace';
5
8
  export { createVoiceSQLiteExternalObjectMapStore, createVoiceSQLiteIntegrationEventStore, createVoiceSQLiteReviewStore, createVoiceSQLiteRuntimeStorage, createVoiceSQLiteSessionStore, createVoiceSQLiteTaskStore, createVoiceSQLiteTraceSinkDeliveryStore, createVoiceSQLiteTraceEventStore } from './sqliteStore';
6
9
  export { createVoicePostgresExternalObjectMapStore, createVoicePostgresIntegrationEventStore, createVoicePostgresReviewStore, createVoicePostgresRuntimeStorage, createVoicePostgresSessionStore, createVoicePostgresTaskStore, createVoicePostgresTraceSinkDeliveryStore, createVoicePostgresTraceEventStore } from './postgresStore';
@@ -21,6 +24,9 @@ export { conditionAudioChunk, resolveAudioConditioningConfig } from './audioCond
21
24
  export { resolveVoiceRuntimePreset } from './presets';
22
25
  export { resolveTurnDetectionConfig, TURN_PROFILE_DEFAULTS } from './turnProfiles';
23
26
  export { createVoiceCallReviewFromLiveTelephonyReport, createVoiceCallReviewRecorder, renderVoiceCallReviewHTML, renderVoiceCallReviewMarkdown } from './testing/review';
27
+ export type { VoiceAssistant, VoiceAssistantArtifactPlan, VoiceAssistantExperiment, VoiceAssistantExperimentOptions, VoiceAssistantGuardrailInput, VoiceAssistantGuardrails, VoiceAssistantMemoryLifecycle, VoiceAssistantMemoryLifecycleInput, VoiceAssistantOptions, VoiceAssistantOutputGuardrailInput, VoiceAssistantPreset, VoiceAssistantRunsSummary, VoiceAssistantRunSummary, VoiceAssistantVariant } from './assistant';
28
+ export type { VoiceAssistantMemoryBinding, VoiceAssistantMemoryHandle, VoiceAssistantMemoryOptions, VoiceAssistantMemoryRecord, VoiceAssistantMemoryStore } from './assistantMemory';
29
+ export type { AnthropicVoiceAssistantModelOptions, GeminiVoiceAssistantModelOptions, OpenAIVoiceAssistantModelOptions, VoiceProviderRouterEvent, VoiceProviderRouterOptions, VoiceJSONAssistantModelHandler, VoiceJSONAssistantModelOptions } from './modelAdapters';
24
30
  export type { VoiceAgent, VoiceAgentMessage, VoiceAgentMessageRole, VoiceAgentModel, VoiceAgentModelInput, VoiceAgentModelOutput, VoiceAgentOptions, VoiceAgentRunResult, VoiceAgentSquadOptions, VoiceAgentTool, VoiceAgentToolCall, VoiceAgentToolResult } from './agent';
25
31
  export type { VoiceOpsRuntime, VoiceOpsRuntimeConfig, VoiceOpsRuntimeSummary, VoiceOpsRuntimeSinkWorkerConfig, VoiceOpsRuntimeTaskWorkerConfig, VoiceOpsRuntimeTickResult, VoiceOpsRuntimeWebhookWorkerConfig } from './opsRuntime';
26
32
  export type { VoiceOpsPresetName, VoiceOpsPresetOverrides, VoiceResolvedOpsPreset } from './opsPresets';