@absolutejs/voice 0.0.22-beta.194 → 0.0.22-beta.196

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
@@ -1309,6 +1309,47 @@ await applyVoiceDataRetentionPolicy({
1309
1309
  });
1310
1310
  ```
1311
1311
 
1312
+ For a compliance-facing control surface, mount `createVoiceDataControlRoutes(...)`. It packages the same primitives into a self-hosted report for customer-owned storage, retention dry-runs, guarded deletion, redacted audit export, zero-retention mode, and provider-key handling.
1313
+
1314
+ ```ts
1315
+ import {
1316
+ createVoiceDataControlRoutes,
1317
+ createVoiceZeroRetentionPolicy,
1318
+ voiceComplianceRedactionDefaults
1319
+ } from '@absolutejs/voice';
1320
+
1321
+ app.use(
1322
+ createVoiceDataControlRoutes({
1323
+ ...runtimeStorage,
1324
+ audit: runtimeStorage.audit,
1325
+ auditDeliveries: runtimeStorage.auditDeliveries,
1326
+ path: '/data-control',
1327
+ redact: voiceComplianceRedactionDefaults,
1328
+ traceDeliveries: runtimeStorage.traceDeliveries
1329
+ })
1330
+ );
1331
+
1332
+ const zeroRetentionPlan = await buildVoiceDataRetentionPlan(
1333
+ createVoiceZeroRetentionPolicy({
1334
+ ...runtimeStorage,
1335
+ audit: runtimeStorage.audit,
1336
+ auditDeliveries: runtimeStorage.auditDeliveries,
1337
+ traceDeliveries: runtimeStorage.traceDeliveries
1338
+ })
1339
+ );
1340
+ ```
1341
+
1342
+ Mounted routes:
1343
+
1344
+ - `GET /data-control`: HTML compliance/data-control report.
1345
+ - `GET /data-control.json`: JSON report with redaction, storage, retention plan, audit export, and provider-key recommendations.
1346
+ - `GET /data-control.md`: Markdown report for release/security reviews.
1347
+ - `POST /data-control/retention/plan`: dry-run deletion proof from a JSON policy body.
1348
+ - `POST /data-control/retention/apply`: applies retention only when the body includes `confirm: "apply-retention-policy"`.
1349
+ - `GET /data-control/audit.json`, `/data-control/audit.md`, `/data-control/audit.html`: redacted audit exports.
1350
+
1351
+ `createVoiceZeroRetentionPolicy(...)` intentionally defaults to `dryRun: true`; callers must explicitly apply the generated policy after reviewing the deletion proof. This gives compliance-sensitive deployments a concrete zero-retention recipe without making accidental deletion easy.
1352
+
1312
1353
  Use `createVoiceAuditLogger(...)` when you need append-only compliance evidence outside call traces. The logger records provider calls, tool calls, handoffs, retention runs, and operator actions into `runtimeStorage.audit`, so self-hosted teams can prove who changed what, which provider ran, which tool fired, and what data-control policy deleted.
1313
1354
 
1314
1355
  Pass `audit` directly to `createVoiceAgent(...)` to record model calls as provider-call audit events and tool executions as tool-call audit events. Pass it to `createVoiceAgentSquad(...)` to record squad handoffs automatically. Use `auditProvider` and `auditModel` on agents when you want readiness and compliance reports to show the actual model provider instead of the agent id.
@@ -1,11 +1,18 @@
1
1
  import type { VoiceCampaignStore } from './campaign';
2
- import { type VoiceAuditActor, type VoiceAuditEventStore } from './audit';
2
+ import { Elysia } from 'elysia';
3
+ import { type VoiceAuditActor, type VoiceAuditEventFilter, type VoiceAuditEventStore } from './audit';
4
+ import { exportVoiceAuditTrail } from './auditExport';
3
5
  import type { VoiceAuditSinkDeliveryStore } from './auditSinks';
4
6
  import type { VoiceIntegrationEventStore, VoiceOpsTaskStore } from './ops';
5
7
  import type { VoiceIncidentBundleStore } from './incidentBundle';
6
8
  import type { VoiceCallReviewStore } from './testing/review';
7
9
  import type { VoiceTraceEventStore, VoiceTracePruneFilter, VoiceTraceSinkDeliveryStore } from './trace';
8
10
  import type { VoiceSessionStore } from './types';
11
+ export declare const voiceComplianceRedactionDefaults: {
12
+ keys: string[];
13
+ redactEmails: true;
14
+ redactPhoneNumbers: true;
15
+ };
9
16
  export type VoiceDataRetentionScope = 'auditDeliveries' | 'campaigns' | 'events' | 'incidentBundles' | 'reviews' | 'sessions' | 'tasks' | 'traceDeliveries' | 'traces';
10
17
  export type VoiceDataRetentionStores = {
11
18
  campaigns?: VoiceCampaignStore;
@@ -45,5 +52,89 @@ export type VoiceDataRetentionReport = {
45
52
  dryRun: boolean;
46
53
  scopes: VoiceDataRetentionScopeReport[];
47
54
  };
55
+ export type VoiceDataControlStorageSurface = {
56
+ configured: boolean;
57
+ control: 'audit' | 'artifact' | 'queue' | 'session' | 'workflow';
58
+ name: string;
59
+ selfHosted: boolean;
60
+ };
61
+ export type VoiceDataControlProviderKeySurface = {
62
+ env?: string;
63
+ name: string;
64
+ recommendation: string;
65
+ required: boolean;
66
+ };
67
+ export type VoiceDataControlReport = {
68
+ auditExport?: Awaited<ReturnType<typeof exportVoiceAuditTrail>>;
69
+ checkedAt: number;
70
+ deletionProof?: VoiceDataRetentionReport;
71
+ redaction: {
72
+ defaults: typeof voiceComplianceRedactionDefaults;
73
+ enabled: boolean;
74
+ };
75
+ retentionPlan: VoiceDataRetentionReport;
76
+ storage: VoiceDataControlStorageSurface[];
77
+ providerKeys: VoiceDataControlProviderKeySurface[];
78
+ zeroRetentionAvailable: boolean;
79
+ };
80
+ export type VoiceDataControlRoutesOptions = VoiceDataRetentionStores & {
81
+ audit?: VoiceAuditEventStore;
82
+ auditActor?: VoiceAuditActor;
83
+ auditDeliveries?: VoiceAuditSinkDeliveryStore;
84
+ headers?: HeadersInit;
85
+ name?: string;
86
+ path?: string;
87
+ providerKeys?: VoiceDataControlProviderKeySurface[];
88
+ redact?: import('./trace').VoiceTraceRedactionConfig | boolean;
89
+ title?: string;
90
+ traceDeliveries?: VoiceTraceSinkDeliveryStore;
91
+ };
48
92
  export declare const applyVoiceDataRetentionPolicy: (options: VoiceDataRetentionPolicy) => Promise<VoiceDataRetentionReport>;
49
93
  export declare const buildVoiceDataRetentionPlan: (options: Omit<VoiceDataRetentionPolicy, "dryRun">) => Promise<VoiceDataRetentionReport>;
94
+ export declare const createVoiceZeroRetentionPolicy: (options: VoiceDataRetentionStores & {
95
+ audit?: VoiceAuditEventStore;
96
+ auditActor?: VoiceAuditActor;
97
+ auditDeliveries?: VoiceAuditSinkDeliveryStore;
98
+ beforeOrAt?: number;
99
+ dryRun?: boolean;
100
+ scopes?: VoiceDataRetentionScope[];
101
+ traceDeliveries?: VoiceTraceSinkDeliveryStore;
102
+ }) => VoiceDataRetentionPolicy;
103
+ export declare const buildVoiceDataControlReport: (options: VoiceDataControlRoutesOptions & {
104
+ auditFilter?: VoiceAuditEventFilter;
105
+ retention?: Omit<VoiceDataRetentionPolicy, "dryRun">;
106
+ }) => Promise<VoiceDataControlReport>;
107
+ export declare const renderVoiceDataControlHTML: (report: VoiceDataControlReport, options?: {
108
+ title?: string;
109
+ }) => string;
110
+ export declare const renderVoiceDataControlMarkdown: (report: VoiceDataControlReport, options?: {
111
+ title?: string;
112
+ }) => string;
113
+ export declare const createVoiceDataControlRoutes: (options: VoiceDataControlRoutesOptions) => Elysia<"", {
114
+ decorator: {};
115
+ store: {};
116
+ derive: {};
117
+ resolve: {};
118
+ }, {
119
+ typebox: {};
120
+ error: {};
121
+ }, {
122
+ schema: {};
123
+ standaloneSchema: {};
124
+ macro: {};
125
+ macroFn: {};
126
+ parser: {};
127
+ response: {};
128
+ }, {}, {
129
+ derive: {};
130
+ resolve: {};
131
+ schema: {};
132
+ standaloneSchema: {};
133
+ response: {};
134
+ }, {
135
+ derive: {};
136
+ resolve: {};
137
+ schema: {};
138
+ standaloneSchema: {};
139
+ response: {};
140
+ }>;
package/dist/index.d.ts CHANGED
@@ -17,8 +17,8 @@ export { buildVoiceOpsActionHistoryReport, createVoiceOpsActionAuditRoutes, reco
17
17
  export { buildVoiceLiveOpsControlState, createVoiceLiveOpsController, createVoiceLiveOpsRoutes, createVoiceMemoryLiveOpsControlStore, getVoiceLiveOpsControlStatus, VOICE_LIVE_OPS_ACTIONS } from './liveOps';
18
18
  export type { VoiceLiveOpsAction, VoiceLiveOpsActionInput, VoiceLiveOpsActionResult, VoiceLiveOpsControllerOptions, VoiceLiveOpsControlState, VoiceLiveOpsControlStatus, VoiceLiveOpsControlStore, VoiceLiveOpsRoutesOptions } from './liveOps';
19
19
  export { buildVoiceDeliveryRuntimeReport, createVoiceDeliveryRuntime, createVoiceDeliveryRuntimePresetConfig, createVoiceDeliveryRuntimeRoutes, renderVoiceDeliveryRuntimeHTML } from './deliveryRuntime';
20
- export { applyVoiceDataRetentionPolicy, buildVoiceDataRetentionPlan } from './dataControl';
21
- export type { VoiceDataRetentionPolicy, VoiceDataRetentionReport, VoiceDataRetentionScope, VoiceDataRetentionScopeReport, VoiceDataRetentionStores } from './dataControl';
20
+ export { applyVoiceDataRetentionPolicy, buildVoiceDataControlReport, buildVoiceDataRetentionPlan, createVoiceDataControlRoutes, createVoiceZeroRetentionPolicy, renderVoiceDataControlHTML, renderVoiceDataControlMarkdown, voiceComplianceRedactionDefaults } from './dataControl';
21
+ export type { VoiceDataControlProviderKeySurface, VoiceDataControlReport, VoiceDataControlRoutesOptions, VoiceDataControlStorageSurface, VoiceDataRetentionPolicy, VoiceDataRetentionReport, VoiceDataRetentionScope, VoiceDataRetentionScopeReport, VoiceDataRetentionStores } from './dataControl';
22
22
  export type { VoiceDemoReadyReport, VoiceDemoReadyRoutesOptions, VoiceDemoReadySection, VoiceDemoReadyStatus } from './demoReadyRoutes';
23
23
  export type { VoiceDeliverySinkDescriptor, VoiceDeliverySinkDescriptorInput, VoiceDeliverySinkKind, VoiceDeliverySinkPairOptions, VoiceDeliverySinkReport, VoiceDeliverySinkRoutesOptions, VoiceTraceDeliverySinkSurface } from './deliverySinkRoutes';
24
24
  export type { VoiceOpsActionAuditRecord, VoiceOpsActionAuditRoutesOptions, VoiceOpsActionHistoryEntry, VoiceOpsActionHistoryReport } from './opsActionAuditRoutes';
@@ -52,6 +52,7 @@ export { createVoiceReadinessProfile, recommendVoiceReadinessProfile } from './r
52
52
  export { buildVoiceProviderContractMatrix, createVoiceProviderContractMatrixHTMLHandler, createVoiceProviderContractMatrixJSONHandler, createVoiceProviderContractMatrixPreset, createVoiceProviderContractMatrixRoutes, evaluateVoiceProviderStackGaps, renderVoiceProviderContractMatrixHTML, recommendVoiceProviderStack } from './providerStackRecommendations';
53
53
  export { buildVoiceOpsConsoleReport, createVoiceOpsConsoleRoutes, renderVoiceOpsConsoleHTML } from './opsConsoleRoutes';
54
54
  export { buildVoiceOperationsRecord, createVoiceOperationsRecordRoutes, renderVoiceOperationsRecordHTML } from './operationsRecord';
55
+ export { buildVoiceOpsRecoveryReadinessCheck, buildVoiceOpsRecoveryReport, createVoiceOpsRecoveryRoutes, renderVoiceOpsRecoveryHTML, renderVoiceOpsRecoveryMarkdown } from './opsRecovery';
55
56
  export { buildVoiceIncidentBundle, createStoredVoiceIncidentBundleArtifact, createVoiceIncidentBundleRoutes, createVoiceMemoryIncidentBundleStore, pruneVoiceIncidentBundleArtifacts, saveVoiceIncidentBundleArtifact } from './incidentBundle';
56
57
  export { summarizeVoiceOpsStatus } from './opsStatus';
57
58
  export { createVoiceOpsStatusRoutes, renderVoiceOpsStatusHTML } from './opsStatusRoutes';
@@ -114,6 +115,7 @@ export type { VoiceProductionReadinessAction, VoiceProductionReadinessAuditOptio
114
115
  export type { VoiceReadinessProfileName, VoiceReadinessProfileOptions, VoiceReadinessProfileRecommendation, VoiceReadinessProfileRecommendationScore, VoiceReadinessProfileRoutesOptions } from './readinessProfiles';
115
116
  export type { VoiceProviderStackChoice, VoiceProviderStackCapabilities, VoiceProviderStackCapabilityGap, VoiceProviderStackCapabilityGapInput, VoiceProviderStackCapabilityGapReport, VoiceProviderContractCheck, VoiceProviderContractCheckStatus, VoiceProviderContractDefinition, VoiceProviderContractMatrixHandlerOptions, VoiceProviderContractMatrixHTMLHandlerOptions, VoiceProviderContractMatrixInput, VoiceProviderContractMatrixPresetOptions, VoiceProviderContractMatrixReport, VoiceProviderContractMatrixRoutesOptions, VoiceProviderContractMatrixRow, VoiceProviderStackInput, VoiceProviderStackKind, VoiceProviderStackRecommendation } from './providerStackRecommendations';
116
117
  export type { VoiceOperationsRecord, VoiceOperationsRecordAgentHandoff, VoiceOperationsRecordAuditSummary, VoiceOperationsRecordIntegrationEventSummary, VoiceOperationsRecordOptions, VoiceOperationsRecordOutcome, VoiceOperationsRecordReviewSummary, VoiceOperationsRecordRoutesOptions, VoiceOperationsRecordStatus, VoiceOperationsRecordTaskSummary, VoiceOperationsRecordTool } from './operationsRecord';
118
+ export type { VoiceOpsRecoveryFailedSession, VoiceOpsRecoveryInterventionSummary, VoiceOpsRecoveryIssue, VoiceOpsRecoveryIssueCode, VoiceOpsRecoveryLinks, VoiceOpsRecoveryProviderSummary, VoiceOpsRecoveryReport, VoiceOpsRecoveryReportOptions, VoiceOpsRecoveryRoutesOptions, VoiceOpsRecoveryStatus } from './opsRecovery';
117
119
  export type { StoredVoiceIncidentBundleArtifact, VoiceIncidentBundle, VoiceIncidentBundleArtifactOptions, VoiceIncidentBundleFormat, VoiceIncidentBundleOptions, VoiceIncidentBundleRetentionOptions, VoiceIncidentBundleRetentionReport, VoiceIncidentBundleRoutesOptions, VoiceIncidentBundleStore, VoiceIncidentBundleStoreFilter, VoiceIncidentBundleSummary } from './incidentBundle';
118
120
  export type { VoiceQualityLink, VoiceQualityMetric, VoiceQualityReport, VoiceQualityRoutesOptions, VoiceQualityStatus, VoiceQualityThresholds } from './qualityRoutes';
119
121
  export type { VoiceResilienceIOSimulator, VoiceResilienceLink, VoiceResiliencePageData, VoiceResilienceRoutesOptions, VoiceResilienceSimulationProvider, VoiceRoutingKindSummary, VoiceRoutingDecisionSummary, VoiceRoutingDecisionSummaryOptions, VoiceRoutingEvent, VoiceRoutingEventKind, VoiceRoutingSessionSummary, VoiceRoutingSessionSummaryOptions } from './resilienceRoutes';