@absolutejs/voice 0.0.22-beta.261 → 0.0.22-beta.263
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/dist/client/index.js +52 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +58 -4
- package/dist/liveOps.d.ts +25 -0
- package/dist/svelte/index.js +52 -0
- package/package.json +1 -1
package/dist/client/index.js
CHANGED
|
@@ -4299,6 +4299,58 @@ var assertVoiceLiveOpsEvidence = (input = {}) => {
|
|
|
4299
4299
|
}
|
|
4300
4300
|
return assertion;
|
|
4301
4301
|
};
|
|
4302
|
+
var evaluateVoiceLiveOpsControlEvidence = (input = {}) => {
|
|
4303
|
+
const issues = [];
|
|
4304
|
+
const results = input.results ?? [];
|
|
4305
|
+
const controls = results.map((result) => result.control).filter((control) => Boolean(control));
|
|
4306
|
+
const finalControl = input.finalControl ?? controls.at(-1);
|
|
4307
|
+
const actions = uniqueSorted(results.map((result) => result.action).filter((action) => isVoiceLiveOpsAction(action)));
|
|
4308
|
+
const statuses = uniqueSorted(controls.map((control) => control.status));
|
|
4309
|
+
const failedActions = results.filter((result) => result.ok === false).length;
|
|
4310
|
+
if (results.length === 0) {
|
|
4311
|
+
issues.push("Expected live-ops control action result(s) to be present.");
|
|
4312
|
+
}
|
|
4313
|
+
if (input.minSnapshots !== undefined && controls.length < input.minSnapshots) {
|
|
4314
|
+
issues.push(`Expected at least ${String(input.minSnapshots)} live-ops control snapshot(s), found ${String(controls.length)}.`);
|
|
4315
|
+
}
|
|
4316
|
+
if (input.maxFailedActions !== undefined && failedActions > input.maxFailedActions) {
|
|
4317
|
+
issues.push(`Expected at most ${String(input.maxFailedActions)} failed live-ops control action(s), found ${String(failedActions)}.`);
|
|
4318
|
+
}
|
|
4319
|
+
for (const action of findMissing(actions, input.requiredActions)) {
|
|
4320
|
+
issues.push(`Missing live-ops control action: ${action}.`);
|
|
4321
|
+
}
|
|
4322
|
+
for (const status of findMissing(statuses, input.requiredStatuses)) {
|
|
4323
|
+
issues.push(`Missing live-ops control status: ${status}.`);
|
|
4324
|
+
}
|
|
4325
|
+
if (!finalControl) {
|
|
4326
|
+
issues.push("Expected final live-ops control state to be present.");
|
|
4327
|
+
} else {
|
|
4328
|
+
if (input.requireFinalAssistantPaused !== undefined && finalControl.assistantPaused !== input.requireFinalAssistantPaused) {
|
|
4329
|
+
issues.push(`Expected final live-ops assistantPaused ${String(input.requireFinalAssistantPaused)}, found ${String(finalControl.assistantPaused)}.`);
|
|
4330
|
+
}
|
|
4331
|
+
if (input.requireFinalOperatorTakeover !== undefined && finalControl.operatorTakeover !== input.requireFinalOperatorTakeover) {
|
|
4332
|
+
issues.push(`Expected final live-ops operatorTakeover ${String(input.requireFinalOperatorTakeover)}, found ${String(finalControl.operatorTakeover)}.`);
|
|
4333
|
+
}
|
|
4334
|
+
}
|
|
4335
|
+
return {
|
|
4336
|
+
actionCount: results.length,
|
|
4337
|
+
actions,
|
|
4338
|
+
failedActions,
|
|
4339
|
+
finalControl: finalControl ?? undefined,
|
|
4340
|
+
finalStatus: finalControl?.status,
|
|
4341
|
+
issues,
|
|
4342
|
+
ok: issues.length === 0,
|
|
4343
|
+
snapshots: controls.length,
|
|
4344
|
+
statuses
|
|
4345
|
+
};
|
|
4346
|
+
};
|
|
4347
|
+
var assertVoiceLiveOpsControlEvidence = (input = {}) => {
|
|
4348
|
+
const assertion = evaluateVoiceLiveOpsControlEvidence(input);
|
|
4349
|
+
if (!assertion.ok) {
|
|
4350
|
+
throw new Error(`Voice live-ops control evidence assertion failed: ${assertion.issues.join(" ")}`);
|
|
4351
|
+
}
|
|
4352
|
+
return assertion;
|
|
4353
|
+
};
|
|
4302
4354
|
var createVoiceMemoryLiveOpsControlStore = () => {
|
|
4303
4355
|
const states = new Map;
|
|
4304
4356
|
return {
|
package/dist/index.d.ts
CHANGED
|
@@ -18,8 +18,8 @@ export { assertVoicePlatformCoverage, buildVoicePlatformCoverageSummary, createV
|
|
|
18
18
|
export type { VoicePlatformCoverageAssertionInput, VoicePlatformCoverageAssertionReport, VoicePlatformCoverageEvidence, VoicePlatformCoverageRoutesOptions, VoicePlatformCoverageStatus, VoicePlatformCoverageSummary, VoicePlatformCoverageSummaryInput, VoicePlatformCoverageSurface } from './platformCoverage';
|
|
19
19
|
export { assertVoiceProofTrendEvidence, buildEmptyVoiceProofTrendReport, buildVoiceProofTrendReport, createVoiceProofTrendRoutes, DEFAULT_VOICE_PROOF_TRENDS_MAX_AGE_MS, evaluateVoiceProofTrendEvidence, formatVoiceProofTrendAge, normalizeVoiceProofTrendReport, readVoiceProofTrendReportFile } from './proofTrends';
|
|
20
20
|
export type { VoiceProofTrendAssertionInput, VoiceProofTrendAssertionReport, VoiceProofTrendCycle, VoiceProofTrendReport, VoiceProofTrendReportInput, VoiceProofTrendRoutesOptions, VoiceProofTrendStatus, VoiceProofTrendSummary } from './proofTrends';
|
|
21
|
-
export { assertVoiceLiveOpsEvidence, buildVoiceLiveOpsControlState, createVoiceLiveOpsController, createVoiceLiveOpsRoutes, createVoiceMemoryLiveOpsControlStore, evaluateVoiceLiveOpsEvidence, getVoiceLiveOpsControlStatus, VOICE_LIVE_OPS_ACTIONS } from './liveOps';
|
|
22
|
-
export type { VoiceLiveOpsAction, VoiceLiveOpsActionInput, VoiceLiveOpsActionResult, VoiceLiveOpsControllerOptions, VoiceLiveOpsControlState, VoiceLiveOpsControlStatus, VoiceLiveOpsControlStore, VoiceLiveOpsEvidenceInput, VoiceLiveOpsEvidenceReport, VoiceLiveOpsRoutesOptions } from './liveOps';
|
|
21
|
+
export { assertVoiceLiveOpsControlEvidence, assertVoiceLiveOpsEvidence, buildVoiceLiveOpsControlState, createVoiceLiveOpsController, createVoiceLiveOpsRoutes, createVoiceMemoryLiveOpsControlStore, evaluateVoiceLiveOpsControlEvidence, evaluateVoiceLiveOpsEvidence, getVoiceLiveOpsControlStatus, VOICE_LIVE_OPS_ACTIONS } from './liveOps';
|
|
22
|
+
export type { VoiceLiveOpsAction, VoiceLiveOpsActionInput, VoiceLiveOpsActionResult, VoiceLiveOpsControllerOptions, VoiceLiveOpsControlState, VoiceLiveOpsControlStatus, VoiceLiveOpsControlStore, VoiceLiveOpsControlEvidenceInput, VoiceLiveOpsControlEvidenceReport, VoiceLiveOpsEvidenceInput, VoiceLiveOpsEvidenceReport, VoiceLiveOpsRoutesOptions } from './liveOps';
|
|
23
23
|
export { buildVoiceDeliveryRuntimeReport, createVoiceDeliveryRuntime, createVoiceDeliveryRuntimePresetConfig, createVoiceDeliveryRuntimeRoutes, renderVoiceDeliveryRuntimeHTML } from './deliveryRuntime';
|
|
24
24
|
export { applyVoiceDataRetentionPolicy, assertVoiceDataControlEvidence, buildVoiceDataControlReport, buildVoiceDataRetentionPlan, createVoiceDataControlRoutes, createVoiceZeroRetentionPolicy, evaluateVoiceDataControlEvidence, renderVoiceDataControlHTML, renderVoiceDataControlMarkdown, voiceComplianceRedactionDefaults } from './dataControl';
|
|
25
25
|
export type { VoiceDataControlAssertionInput, VoiceDataControlAssertionReport, VoiceDataControlProviderKeySurface, VoiceDataControlReport, VoiceDataControlRoutesOptions, VoiceDataControlStorageSurface, VoiceDataRetentionPolicy, VoiceDataRetentionReport, VoiceDataRetentionScope, VoiceDataRetentionScopeReport, VoiceDataRetentionStores } from './dataControl';
|
package/dist/index.js
CHANGED
|
@@ -12235,8 +12235,7 @@ var createVoiceDeliverySinkRoutes = (options) => {
|
|
|
12235
12235
|
};
|
|
12236
12236
|
// src/opsActionAuditRoutes.ts
|
|
12237
12237
|
import { Elysia as Elysia12 } from "elysia";
|
|
12238
|
-
var
|
|
12239
|
-
const body = await request.json().catch(() => null);
|
|
12238
|
+
var readRecordBody = (body) => {
|
|
12240
12239
|
if (!body || typeof body !== "object") {
|
|
12241
12240
|
throw new Error("Voice ops action audit requires a JSON body.");
|
|
12242
12241
|
}
|
|
@@ -12253,6 +12252,7 @@ var readRecord = async (request) => {
|
|
|
12253
12252
|
status: typeof record.status === "number" ? record.status : 0
|
|
12254
12253
|
};
|
|
12255
12254
|
};
|
|
12255
|
+
var readRecord = async (request) => readRecordBody(await request.json().catch(() => null));
|
|
12256
12256
|
var recordVoiceOpsActionAudit = async (record, options) => {
|
|
12257
12257
|
const traceId = `voice-ops-action:${record.actionId}:${record.ranAt}`;
|
|
12258
12258
|
const outcome = record.ok ? "success" : "error";
|
|
@@ -12311,9 +12311,9 @@ var createVoiceOpsActionAuditRoutes = (options) => {
|
|
|
12311
12311
|
const historyHtmlPath = options.historyHtmlPath === undefined ? "/voice/ops-actions" : options.historyHtmlPath;
|
|
12312
12312
|
const routes = new Elysia12({
|
|
12313
12313
|
name: options.name ?? "absolutejs-voice-ops-action-audit"
|
|
12314
|
-
}).post(path, async ({ request, set }) => {
|
|
12314
|
+
}).post(path, async ({ body, request, set }) => {
|
|
12315
12315
|
try {
|
|
12316
|
-
const record = await readRecord(request);
|
|
12316
|
+
const record = body === undefined ? await readRecord(request) : readRecordBody(body);
|
|
12317
12317
|
return await recordVoiceOpsActionAudit(record, options);
|
|
12318
12318
|
} catch (error) {
|
|
12319
12319
|
set.status = 400;
|
|
@@ -12729,6 +12729,58 @@ var assertVoiceLiveOpsEvidence = (input = {}) => {
|
|
|
12729
12729
|
}
|
|
12730
12730
|
return assertion;
|
|
12731
12731
|
};
|
|
12732
|
+
var evaluateVoiceLiveOpsControlEvidence = (input = {}) => {
|
|
12733
|
+
const issues = [];
|
|
12734
|
+
const results = input.results ?? [];
|
|
12735
|
+
const controls = results.map((result) => result.control).filter((control) => Boolean(control));
|
|
12736
|
+
const finalControl = input.finalControl ?? controls.at(-1);
|
|
12737
|
+
const actions = uniqueSorted(results.map((result) => result.action).filter((action) => isVoiceLiveOpsAction(action)));
|
|
12738
|
+
const statuses = uniqueSorted(controls.map((control) => control.status));
|
|
12739
|
+
const failedActions = results.filter((result) => result.ok === false).length;
|
|
12740
|
+
if (results.length === 0) {
|
|
12741
|
+
issues.push("Expected live-ops control action result(s) to be present.");
|
|
12742
|
+
}
|
|
12743
|
+
if (input.minSnapshots !== undefined && controls.length < input.minSnapshots) {
|
|
12744
|
+
issues.push(`Expected at least ${String(input.minSnapshots)} live-ops control snapshot(s), found ${String(controls.length)}.`);
|
|
12745
|
+
}
|
|
12746
|
+
if (input.maxFailedActions !== undefined && failedActions > input.maxFailedActions) {
|
|
12747
|
+
issues.push(`Expected at most ${String(input.maxFailedActions)} failed live-ops control action(s), found ${String(failedActions)}.`);
|
|
12748
|
+
}
|
|
12749
|
+
for (const action of findMissing(actions, input.requiredActions)) {
|
|
12750
|
+
issues.push(`Missing live-ops control action: ${action}.`);
|
|
12751
|
+
}
|
|
12752
|
+
for (const status of findMissing(statuses, input.requiredStatuses)) {
|
|
12753
|
+
issues.push(`Missing live-ops control status: ${status}.`);
|
|
12754
|
+
}
|
|
12755
|
+
if (!finalControl) {
|
|
12756
|
+
issues.push("Expected final live-ops control state to be present.");
|
|
12757
|
+
} else {
|
|
12758
|
+
if (input.requireFinalAssistantPaused !== undefined && finalControl.assistantPaused !== input.requireFinalAssistantPaused) {
|
|
12759
|
+
issues.push(`Expected final live-ops assistantPaused ${String(input.requireFinalAssistantPaused)}, found ${String(finalControl.assistantPaused)}.`);
|
|
12760
|
+
}
|
|
12761
|
+
if (input.requireFinalOperatorTakeover !== undefined && finalControl.operatorTakeover !== input.requireFinalOperatorTakeover) {
|
|
12762
|
+
issues.push(`Expected final live-ops operatorTakeover ${String(input.requireFinalOperatorTakeover)}, found ${String(finalControl.operatorTakeover)}.`);
|
|
12763
|
+
}
|
|
12764
|
+
}
|
|
12765
|
+
return {
|
|
12766
|
+
actionCount: results.length,
|
|
12767
|
+
actions,
|
|
12768
|
+
failedActions,
|
|
12769
|
+
finalControl: finalControl ?? undefined,
|
|
12770
|
+
finalStatus: finalControl?.status,
|
|
12771
|
+
issues,
|
|
12772
|
+
ok: issues.length === 0,
|
|
12773
|
+
snapshots: controls.length,
|
|
12774
|
+
statuses
|
|
12775
|
+
};
|
|
12776
|
+
};
|
|
12777
|
+
var assertVoiceLiveOpsControlEvidence = (input = {}) => {
|
|
12778
|
+
const assertion = evaluateVoiceLiveOpsControlEvidence(input);
|
|
12779
|
+
if (!assertion.ok) {
|
|
12780
|
+
throw new Error(`Voice live-ops control evidence assertion failed: ${assertion.issues.join(" ")}`);
|
|
12781
|
+
}
|
|
12782
|
+
return assertion;
|
|
12783
|
+
};
|
|
12732
12784
|
var createVoiceMemoryLiveOpsControlStore = () => {
|
|
12733
12785
|
const states = new Map;
|
|
12734
12786
|
return {
|
|
@@ -31334,6 +31386,7 @@ export {
|
|
|
31334
31386
|
evaluateVoiceObservabilityExportReplayEvidence,
|
|
31335
31387
|
evaluateVoiceObservabilityExportDeliveryEvidence,
|
|
31336
31388
|
evaluateVoiceLiveOpsEvidence,
|
|
31389
|
+
evaluateVoiceLiveOpsControlEvidence,
|
|
31337
31390
|
evaluateVoiceGuardrailPolicy,
|
|
31338
31391
|
evaluateVoiceDataControlEvidence,
|
|
31339
31392
|
evaluateVoiceCampaignReadinessEvidence,
|
|
@@ -31668,6 +31721,7 @@ export {
|
|
|
31668
31721
|
assertVoiceObservabilityExportRecord,
|
|
31669
31722
|
assertVoiceObservabilityExportDeliveryEvidence,
|
|
31670
31723
|
assertVoiceLiveOpsEvidence,
|
|
31724
|
+
assertVoiceLiveOpsControlEvidence,
|
|
31671
31725
|
assertVoiceLatencySLOGate,
|
|
31672
31726
|
assertVoiceDataControlEvidence,
|
|
31673
31727
|
assertVoiceCampaignReadinessEvidence,
|
package/dist/liveOps.d.ts
CHANGED
|
@@ -69,6 +69,29 @@ export type VoiceLiveOpsEvidenceReport = {
|
|
|
69
69
|
opsRecoveryStatus?: VoiceOpsRecoveryStatus;
|
|
70
70
|
opsStatus?: VoiceOpsStatusReport['status'];
|
|
71
71
|
};
|
|
72
|
+
export type VoiceLiveOpsControlEvidenceInput = {
|
|
73
|
+
finalControl?: VoiceLiveOpsControlState | null;
|
|
74
|
+
maxFailedActions?: number;
|
|
75
|
+
minSnapshots?: number;
|
|
76
|
+
requireFinalAssistantPaused?: boolean;
|
|
77
|
+
requireFinalOperatorTakeover?: boolean;
|
|
78
|
+
requiredActions?: VoiceLiveOpsAction[];
|
|
79
|
+
requiredStatuses?: VoiceLiveOpsControlStatus[];
|
|
80
|
+
results?: Array<Partial<Omit<VoiceLiveOpsActionResult, 'ok'>> & {
|
|
81
|
+
ok?: boolean;
|
|
82
|
+
}>;
|
|
83
|
+
};
|
|
84
|
+
export type VoiceLiveOpsControlEvidenceReport = {
|
|
85
|
+
actionCount: number;
|
|
86
|
+
actions: VoiceLiveOpsAction[];
|
|
87
|
+
failedActions: number;
|
|
88
|
+
finalControl?: VoiceLiveOpsControlState;
|
|
89
|
+
finalStatus?: VoiceLiveOpsControlStatus;
|
|
90
|
+
issues: string[];
|
|
91
|
+
ok: boolean;
|
|
92
|
+
snapshots: number;
|
|
93
|
+
statuses: VoiceLiveOpsControlStatus[];
|
|
94
|
+
};
|
|
72
95
|
export type VoiceLiveOpsControlStore = {
|
|
73
96
|
get: (sessionId: string) => Promise<VoiceLiveOpsControlState | undefined> | VoiceLiveOpsControlState | undefined;
|
|
74
97
|
set: (sessionId: string, state: VoiceLiveOpsControlState) => Promise<void> | void;
|
|
@@ -93,6 +116,8 @@ export type VoiceLiveOpsRoutesOptions = VoiceLiveOpsControllerOptions & {
|
|
|
93
116
|
};
|
|
94
117
|
export declare const evaluateVoiceLiveOpsEvidence: (input?: VoiceLiveOpsEvidenceInput) => VoiceLiveOpsEvidenceReport;
|
|
95
118
|
export declare const assertVoiceLiveOpsEvidence: (input?: VoiceLiveOpsEvidenceInput) => VoiceLiveOpsEvidenceReport;
|
|
119
|
+
export declare const evaluateVoiceLiveOpsControlEvidence: (input?: VoiceLiveOpsControlEvidenceInput) => VoiceLiveOpsControlEvidenceReport;
|
|
120
|
+
export declare const assertVoiceLiveOpsControlEvidence: (input?: VoiceLiveOpsControlEvidenceInput) => VoiceLiveOpsControlEvidenceReport;
|
|
96
121
|
export declare const createVoiceMemoryLiveOpsControlStore: () => VoiceLiveOpsControlStore;
|
|
97
122
|
export declare const getVoiceLiveOpsControlStatus: (action: VoiceLiveOpsAction) => VoiceLiveOpsControlStatus;
|
|
98
123
|
export declare const buildVoiceLiveOpsControlState: (input: VoiceLiveOpsActionInput & {
|
package/dist/svelte/index.js
CHANGED
|
@@ -1837,6 +1837,58 @@ var assertVoiceLiveOpsEvidence = (input = {}) => {
|
|
|
1837
1837
|
}
|
|
1838
1838
|
return assertion;
|
|
1839
1839
|
};
|
|
1840
|
+
var evaluateVoiceLiveOpsControlEvidence = (input = {}) => {
|
|
1841
|
+
const issues = [];
|
|
1842
|
+
const results = input.results ?? [];
|
|
1843
|
+
const controls = results.map((result) => result.control).filter((control) => Boolean(control));
|
|
1844
|
+
const finalControl = input.finalControl ?? controls.at(-1);
|
|
1845
|
+
const actions = uniqueSorted(results.map((result) => result.action).filter((action) => isVoiceLiveOpsAction(action)));
|
|
1846
|
+
const statuses = uniqueSorted(controls.map((control) => control.status));
|
|
1847
|
+
const failedActions = results.filter((result) => result.ok === false).length;
|
|
1848
|
+
if (results.length === 0) {
|
|
1849
|
+
issues.push("Expected live-ops control action result(s) to be present.");
|
|
1850
|
+
}
|
|
1851
|
+
if (input.minSnapshots !== undefined && controls.length < input.minSnapshots) {
|
|
1852
|
+
issues.push(`Expected at least ${String(input.minSnapshots)} live-ops control snapshot(s), found ${String(controls.length)}.`);
|
|
1853
|
+
}
|
|
1854
|
+
if (input.maxFailedActions !== undefined && failedActions > input.maxFailedActions) {
|
|
1855
|
+
issues.push(`Expected at most ${String(input.maxFailedActions)} failed live-ops control action(s), found ${String(failedActions)}.`);
|
|
1856
|
+
}
|
|
1857
|
+
for (const action of findMissing(actions, input.requiredActions)) {
|
|
1858
|
+
issues.push(`Missing live-ops control action: ${action}.`);
|
|
1859
|
+
}
|
|
1860
|
+
for (const status of findMissing(statuses, input.requiredStatuses)) {
|
|
1861
|
+
issues.push(`Missing live-ops control status: ${status}.`);
|
|
1862
|
+
}
|
|
1863
|
+
if (!finalControl) {
|
|
1864
|
+
issues.push("Expected final live-ops control state to be present.");
|
|
1865
|
+
} else {
|
|
1866
|
+
if (input.requireFinalAssistantPaused !== undefined && finalControl.assistantPaused !== input.requireFinalAssistantPaused) {
|
|
1867
|
+
issues.push(`Expected final live-ops assistantPaused ${String(input.requireFinalAssistantPaused)}, found ${String(finalControl.assistantPaused)}.`);
|
|
1868
|
+
}
|
|
1869
|
+
if (input.requireFinalOperatorTakeover !== undefined && finalControl.operatorTakeover !== input.requireFinalOperatorTakeover) {
|
|
1870
|
+
issues.push(`Expected final live-ops operatorTakeover ${String(input.requireFinalOperatorTakeover)}, found ${String(finalControl.operatorTakeover)}.`);
|
|
1871
|
+
}
|
|
1872
|
+
}
|
|
1873
|
+
return {
|
|
1874
|
+
actionCount: results.length,
|
|
1875
|
+
actions,
|
|
1876
|
+
failedActions,
|
|
1877
|
+
finalControl: finalControl ?? undefined,
|
|
1878
|
+
finalStatus: finalControl?.status,
|
|
1879
|
+
issues,
|
|
1880
|
+
ok: issues.length === 0,
|
|
1881
|
+
snapshots: controls.length,
|
|
1882
|
+
statuses
|
|
1883
|
+
};
|
|
1884
|
+
};
|
|
1885
|
+
var assertVoiceLiveOpsControlEvidence = (input = {}) => {
|
|
1886
|
+
const assertion = evaluateVoiceLiveOpsControlEvidence(input);
|
|
1887
|
+
if (!assertion.ok) {
|
|
1888
|
+
throw new Error(`Voice live-ops control evidence assertion failed: ${assertion.issues.join(" ")}`);
|
|
1889
|
+
}
|
|
1890
|
+
return assertion;
|
|
1891
|
+
};
|
|
1840
1892
|
var createVoiceMemoryLiveOpsControlStore = () => {
|
|
1841
1893
|
const states = new Map;
|
|
1842
1894
|
return {
|