@absolutejs/voice 0.0.22-beta.279 → 0.0.22-beta.280

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/index.d.ts CHANGED
@@ -53,7 +53,7 @@ export { assertVoiceProviderRoutingContractEvidence, assertVoiceProviderRoutingC
53
53
  export { assertVoiceProviderSloEvidence, buildVoiceProviderSloReport, createVoiceProviderSloRoutes, evaluateVoiceProviderSloEvidence, renderVoiceProviderSloHTML, renderVoiceProviderSloMarkdown } from './providerSlo';
54
54
  export { createVoicePhoneAgentProductionSmokeHTMLHandler, createVoicePhoneAgentProductionSmokeJSONHandler, createVoicePhoneAgentProductionSmokeRoutes, renderVoicePhoneAgentProductionSmokeHTML, runVoicePhoneAgentProductionSmokeContract } from './phoneAgentProductionSmoke';
55
55
  export { assertVoiceProductionReadinessEvidence, buildVoiceProductionReadinessGate, buildVoiceProductionReadinessReport, createVoiceProductionReadinessRoutes, evaluateVoiceProductionReadinessEvidence, renderVoiceProductionReadinessHTML, summarizeVoiceProductionReadinessGate } from './productionReadiness';
56
- export { acknowledgeVoiceMonitorIssue, buildVoiceMonitorRunReport, createVoiceMemoryMonitorIssueStore, createVoiceMemoryMonitorNotifierDeliveryReceiptStore, createVoiceMonitorRoutes, createVoiceMonitorWebhookNotifier, deliverVoiceMonitorIssueNotifications, muteVoiceMonitorIssue, renderVoiceMonitorHTML, renderVoiceMonitorMarkdown, resolveVoiceMonitorIssue } from './voiceMonitoring';
56
+ export { acknowledgeVoiceMonitorIssue, buildVoiceMonitorRunReport, createVoiceMemoryMonitorIssueStore, createVoiceMemoryMonitorNotifierDeliveryReceiptStore, createVoiceMonitorRoutes, createVoiceMonitorRunner, createVoiceMonitorRunnerRoutes, createVoiceMonitorWebhookNotifier, deliverVoiceMonitorIssueNotifications, muteVoiceMonitorIssue, renderVoiceMonitorHTML, renderVoiceMonitorMarkdown, resolveVoiceMonitorIssue } from './voiceMonitoring';
57
57
  export { createVoiceReadinessProfile, recommendVoiceReadinessProfile } from './readinessProfiles';
58
58
  export { assertVoiceProviderContractMatrixEvidence, assertVoiceProviderStackEvidence, buildVoiceProviderContractMatrix, createVoiceProviderContractMatrixHTMLHandler, createVoiceProviderContractMatrixJSONHandler, createVoiceProviderContractMatrixPreset, createVoiceProviderContractMatrixRoutes, evaluateVoiceProviderContractMatrixEvidence, evaluateVoiceProviderStackEvidence, evaluateVoiceProviderStackGaps, renderVoiceProviderContractMatrixHTML, recommendVoiceProviderStack } from './providerStackRecommendations';
59
59
  export { buildVoiceOpsConsoleReport, createVoiceOpsConsoleRoutes, renderVoiceOpsConsoleHTML } from './opsConsoleRoutes';
@@ -122,7 +122,7 @@ export type { VoicePhoneAgentProductionSmokeIssue, VoicePhoneAgentProductionSmok
122
122
  export type { VoiceOpsConsoleLink, VoiceOpsConsoleReport, VoiceOpsConsoleRoutesOptions } from './opsConsoleRoutes';
123
123
  export type { VoiceOpsStatus, VoiceOpsStatusLink, VoiceOpsStatusOptions, VoiceOpsStatusReport, VoiceOpsStatusRoutesOptions } from './opsStatus';
124
124
  export type { VoiceProductionReadinessAction, VoiceProductionReadinessAuditOptions, VoiceProductionReadinessAuditRequirement, VoiceProductionReadinessAuditSummary, VoiceProductionReadinessAssertionInput, VoiceProductionReadinessAssertionReport, VoiceProductionReadinessCheck, VoiceProductionReadinessGateIssue, VoiceProductionReadinessGateOptions, VoiceProductionReadinessGateProfile, VoiceProductionReadinessGateProfileSurface, VoiceProductionReadinessGateReport, VoiceProductionReadinessOpsActionHistoryOptions, VoiceProductionReadinessOpsActionHistorySummary, VoiceProductionReadinessOperationsRecordLink, VoiceProductionReadinessOperationsRecordLinks, VoiceProductionReadinessProfileExplanation, VoiceProductionReadinessProfileSurface, VoiceProductionReadinessProofSource, VoiceProductionReadinessReport, VoiceProductionReadinessRoutesOptions, VoiceProductionReadinessTraceDeliverySummary, VoiceProductionReadinessAuditDeliveryOptions, VoiceProductionReadinessAuditDeliverySummary, VoiceProductionReadinessTraceDeliveryOptions, VoiceProductionReadinessStatus } from './productionReadiness';
125
- export type { VoiceMonitorDefinition, VoiceMonitorEvaluation, VoiceMonitorEvaluationInput, VoiceMonitorIssue, VoiceMonitorIssueStatus, VoiceMonitorIssueStore, VoiceMonitorNotifier, VoiceMonitorNotifierDeliveryInput, VoiceMonitorNotifierDeliveryOptions, VoiceMonitorNotifierDeliveryReceipt, VoiceMonitorNotifierDeliveryReceiptStore, VoiceMonitorNotifierDeliveryReport, VoiceMonitorNotifierDeliveryResult, VoiceMonitorRoutesOptions, VoiceMonitorRun, VoiceMonitorRunOptions, VoiceMonitorRunReport, VoiceMonitorSeverity, VoiceMonitorStatus, VoiceMonitorWebhookNotifierOptions } from './voiceMonitoring';
125
+ export type { VoiceMonitorDefinition, VoiceMonitorEvaluation, VoiceMonitorEvaluationInput, VoiceMonitorIssue, VoiceMonitorIssueStatus, VoiceMonitorIssueStore, VoiceMonitorNotifier, VoiceMonitorNotifierDeliveryInput, VoiceMonitorNotifierDeliveryOptions, VoiceMonitorNotifierDeliveryReceipt, VoiceMonitorNotifierDeliveryReceiptStore, VoiceMonitorNotifierDeliveryReport, VoiceMonitorNotifierDeliveryResult, VoiceMonitorRoutesOptions, VoiceMonitorRun, VoiceMonitorRunOptions, VoiceMonitorRunReport, VoiceMonitorRunner, VoiceMonitorRunnerOptions, VoiceMonitorRunnerRoutesOptions, VoiceMonitorRunnerTickResult, VoiceMonitorSeverity, VoiceMonitorStatus, VoiceMonitorWebhookNotifierOptions } from './voiceMonitoring';
126
126
  export type { VoiceReadinessProfileName, VoiceReadinessProfileOptions, VoiceReadinessProfileRecommendation, VoiceReadinessProfileRecommendationScore, VoiceReadinessProfileRoutesOptions } from './readinessProfiles';
127
127
  export type { VoiceProviderStackChoice, VoiceProviderStackCapabilities, VoiceProviderStackCapabilityGap, VoiceProviderStackCapabilityGapInput, VoiceProviderStackCapabilityGapReport, VoiceProviderContractCheck, VoiceProviderContractCheckStatus, VoiceProviderContractDefinition, VoiceProviderContractMatrixAssertionInput, VoiceProviderContractMatrixAssertionReport, VoiceProviderContractMatrixHandlerOptions, VoiceProviderContractMatrixHTMLHandlerOptions, VoiceProviderContractMatrixInput, VoiceProviderContractMatrixPresetOptions, VoiceProviderContractMatrixReport, VoiceProviderContractMatrixRoutesOptions, VoiceProviderContractMatrixRow, VoiceProviderStackAssertionInput, VoiceProviderStackAssertionReport, VoiceProviderStackInput, VoiceProviderStackKind, VoiceProviderStackRecommendation } from './providerStackRecommendations';
128
128
  export type { VoiceOperationsRecord, VoiceOperationsRecordAgentHandoff, VoiceOperationsRecordAuditSummary, VoiceOperationsRecordGuardrailAssertionInput, VoiceOperationsRecordGuardrailAssertionReport, VoiceOperationsRecordGuardrailDecision, VoiceOperationsRecordGuardrailFinding, VoiceOperationsRecordGuardrailSummary, VoiceOperationsRecordIntegrationEventSummary, VoiceOperationsRecordOptions, VoiceOperationsRecordOutcome, VoiceOperationsRecordProviderDecision, VoiceOperationsRecordReviewSummary, VoiceOperationsRecordRoutesOptions, VoiceOperationsRecordStatus, VoiceOperationsRecordTaskSummary, VoiceOperationsRecordTranscriptTurn, VoiceOperationsRecordTool } from './operationsRecord';
package/dist/index.js CHANGED
@@ -28746,6 +28746,61 @@ var deliverVoiceMonitorIssueNotifications = async (options) => {
28746
28746
  }
28747
28747
  };
28748
28748
  };
28749
+ var createVoiceMonitorRunner = (options) => {
28750
+ const issueStore = options.issueStore ?? createVoiceMemoryMonitorIssueStore();
28751
+ const receiptStore = options.receiptStore ?? createVoiceMemoryMonitorNotifierDeliveryReceiptStore();
28752
+ const pollIntervalMs = options.pollIntervalMs ?? 60000;
28753
+ let timer;
28754
+ const loadEvidence = async () => {
28755
+ if (options.loadEvidence) {
28756
+ return options.loadEvidence();
28757
+ }
28758
+ if (options.evidence !== undefined) {
28759
+ return options.evidence;
28760
+ }
28761
+ throw new Error("createVoiceMonitorRunner requires evidence or loadEvidence.");
28762
+ };
28763
+ const tick = async () => {
28764
+ const startedAt = options.now?.() ?? Date.now();
28765
+ const monitoring = await buildVoiceMonitorRunReport({
28766
+ evidence: await loadEvidence(),
28767
+ issueStore,
28768
+ monitors: options.monitors,
28769
+ now: startedAt
28770
+ });
28771
+ const notifierDelivery = options.notifiers ? await deliverVoiceMonitorIssueNotifications({
28772
+ issueStore,
28773
+ notifiers: options.notifiers,
28774
+ now: options.now?.() ?? Date.now(),
28775
+ receiptStore
28776
+ }) : undefined;
28777
+ return {
28778
+ completedAt: options.now?.() ?? Date.now(),
28779
+ monitoring,
28780
+ notifierDelivery,
28781
+ startedAt
28782
+ };
28783
+ };
28784
+ return {
28785
+ isRunning: () => timer !== undefined,
28786
+ start: () => {
28787
+ if (timer) {
28788
+ return;
28789
+ }
28790
+ timer = setInterval(() => {
28791
+ tick();
28792
+ }, pollIntervalMs);
28793
+ },
28794
+ stop: () => {
28795
+ if (!timer) {
28796
+ return;
28797
+ }
28798
+ clearInterval(timer);
28799
+ timer = undefined;
28800
+ },
28801
+ tick
28802
+ };
28803
+ };
28749
28804
  var renderVoiceMonitorMarkdown = (report) => {
28750
28805
  const rows = report.runs.map((run) => `| ${run.id} | ${run.status} | ${run.severity} | ${run.value ?? ""} | ${run.threshold ?? ""} | ${run.detail ?? ""} |`).join(`
28751
28806
  `);
@@ -28839,6 +28894,24 @@ var createVoiceMonitorRoutes = (options) => {
28839
28894
  }
28840
28895
  return routes;
28841
28896
  };
28897
+ var createVoiceMonitorRunnerRoutes = (options) => {
28898
+ const path = options.path ?? "/api/voice/monitor-runner";
28899
+ return new Elysia44({
28900
+ name: options.name ?? "absolutejs-voice-monitor-runner"
28901
+ }).get(path, () => ({
28902
+ isRunning: options.runner.isRunning()
28903
+ })).post(`${path}/tick`, async () => options.runner.tick()).post(`${path}/start`, () => {
28904
+ options.runner.start();
28905
+ return {
28906
+ isRunning: options.runner.isRunning()
28907
+ };
28908
+ }).post(`${path}/stop`, () => {
28909
+ options.runner.stop();
28910
+ return {
28911
+ isRunning: options.runner.isRunning()
28912
+ };
28913
+ });
28914
+ };
28842
28915
  // src/readinessProfiles.ts
28843
28916
  var profileSurfaceLabels = {
28844
28917
  "meeting-recorder": {
@@ -32751,6 +32824,8 @@ export {
32751
32824
  createVoiceObservabilityExportRoutes,
32752
32825
  createVoiceObservabilityExportReplayRoutes,
32753
32826
  createVoiceMonitorWebhookNotifier,
32827
+ createVoiceMonitorRunnerRoutes,
32828
+ createVoiceMonitorRunner,
32754
32829
  createVoiceMonitorRoutes,
32755
32830
  createVoiceMemoryTraceSinkDeliveryStore,
32756
32831
  createVoiceMemoryTraceEventStore,
@@ -143,6 +143,34 @@ export type VoiceMonitorRoutesOptions<TEvidence = unknown> = VoiceMonitorRunOpti
143
143
  render?: (report: VoiceMonitorRunReport) => Promise<string> | string;
144
144
  title?: string;
145
145
  };
146
+ export type VoiceMonitorRunnerTickResult = {
147
+ completedAt: number;
148
+ monitoring: VoiceMonitorRunReport;
149
+ notifierDelivery?: VoiceMonitorNotifierDeliveryReport;
150
+ startedAt: number;
151
+ };
152
+ export type VoiceMonitorRunner = {
153
+ isRunning: () => boolean;
154
+ start: () => void;
155
+ stop: () => void;
156
+ tick: () => Promise<VoiceMonitorRunnerTickResult>;
157
+ };
158
+ export type VoiceMonitorRunnerOptions<TEvidence = unknown> = {
159
+ evidence?: TEvidence;
160
+ issueStore?: VoiceMonitorIssueStore;
161
+ loadEvidence?: () => Promise<TEvidence> | TEvidence;
162
+ monitors: readonly VoiceMonitorDefinition<TEvidence>[];
163
+ notifiers?: readonly VoiceMonitorNotifier[];
164
+ now?: () => number;
165
+ pollIntervalMs?: number;
166
+ receiptStore?: VoiceMonitorNotifierDeliveryReceiptStore;
167
+ };
168
+ export type VoiceMonitorRunnerRoutesOptions = {
169
+ headers?: HeadersInit;
170
+ name?: string;
171
+ path?: string;
172
+ runner: VoiceMonitorRunner;
173
+ };
146
174
  export declare const createVoiceMemoryMonitorIssueStore: (initial?: readonly VoiceMonitorIssue[]) => VoiceMonitorIssueStore;
147
175
  export declare const createVoiceMemoryMonitorNotifierDeliveryReceiptStore: (initial?: readonly VoiceMonitorNotifierDeliveryReceipt[]) => VoiceMonitorNotifierDeliveryReceiptStore;
148
176
  export declare const buildVoiceMonitorRunReport: <TEvidence = unknown>(options: VoiceMonitorRunOptions<TEvidence>) => Promise<VoiceMonitorRunReport>;
@@ -160,6 +188,7 @@ export declare const muteVoiceMonitorIssue: (store: VoiceMonitorIssueStore, id:
160
188
  }) => Promise<VoiceMonitorIssue | undefined>;
161
189
  export declare const createVoiceMonitorWebhookNotifier: (options: VoiceMonitorWebhookNotifierOptions) => VoiceMonitorNotifier;
162
190
  export declare const deliverVoiceMonitorIssueNotifications: (options: VoiceMonitorNotifierDeliveryOptions) => Promise<VoiceMonitorNotifierDeliveryReport>;
191
+ export declare const createVoiceMonitorRunner: <TEvidence = unknown>(options: VoiceMonitorRunnerOptions<TEvidence>) => VoiceMonitorRunner;
163
192
  export declare const renderVoiceMonitorMarkdown: (report: VoiceMonitorRunReport) => string;
164
193
  export declare const renderVoiceMonitorHTML: (report: VoiceMonitorRunReport, options?: {
165
194
  title?: string;
@@ -323,3 +352,91 @@ export declare const createVoiceMonitorRoutes: <TEvidence = unknown>(options: Vo
323
352
  standaloneSchema: {};
324
353
  response: {};
325
354
  }>;
355
+ export declare const createVoiceMonitorRunnerRoutes: (options: VoiceMonitorRunnerRoutesOptions) => Elysia<"", {
356
+ decorator: {};
357
+ store: {};
358
+ derive: {};
359
+ resolve: {};
360
+ }, {
361
+ typebox: {};
362
+ error: {};
363
+ }, {
364
+ schema: {};
365
+ standaloneSchema: {};
366
+ macro: {};
367
+ macroFn: {};
368
+ parser: {};
369
+ response: {};
370
+ }, {
371
+ [x: string]: {
372
+ get: {
373
+ body: unknown;
374
+ params: {};
375
+ query: unknown;
376
+ headers: unknown;
377
+ response: {
378
+ 200: {
379
+ isRunning: boolean;
380
+ };
381
+ };
382
+ };
383
+ };
384
+ } & {
385
+ [x: string]: {
386
+ tick: {
387
+ post: {
388
+ body: unknown;
389
+ params: {};
390
+ query: unknown;
391
+ headers: unknown;
392
+ response: {
393
+ 200: VoiceMonitorRunnerTickResult;
394
+ };
395
+ };
396
+ };
397
+ };
398
+ } & {
399
+ [x: string]: {
400
+ start: {
401
+ post: {
402
+ body: unknown;
403
+ params: {};
404
+ query: unknown;
405
+ headers: unknown;
406
+ response: {
407
+ 200: {
408
+ isRunning: boolean;
409
+ };
410
+ };
411
+ };
412
+ };
413
+ };
414
+ } & {
415
+ [x: string]: {
416
+ stop: {
417
+ post: {
418
+ body: unknown;
419
+ params: {};
420
+ query: unknown;
421
+ headers: unknown;
422
+ response: {
423
+ 200: {
424
+ isRunning: boolean;
425
+ };
426
+ };
427
+ };
428
+ };
429
+ };
430
+ }, {
431
+ derive: {};
432
+ resolve: {};
433
+ schema: {};
434
+ standaloneSchema: {};
435
+ response: {};
436
+ }, {
437
+ derive: {};
438
+ resolve: {};
439
+ schema: {};
440
+ standaloneSchema: {};
441
+ response: {};
442
+ }>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@absolutejs/voice",
3
- "version": "0.0.22-beta.279",
3
+ "version": "0.0.22-beta.280",
4
4
  "description": "Voice primitives and Elysia plugin for AbsoluteJS",
5
5
  "repository": {
6
6
  "type": "git",