@absolutejs/voice 0.0.22-beta.454 → 0.0.22-beta.456

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/vue/index.js CHANGED
@@ -3682,6 +3682,197 @@ var buildVoiceRealCallProfileEvidenceFromReconnectProofReports = (input, options
3682
3682
  };
3683
3683
  var loadVoiceRealCallProfileEvidenceFromTraceStore = async (options) => buildVoiceRealCallProfileEvidenceFromTraceEvents(await options.store.list({ limit: options.limit ?? 5000 }), options);
3684
3684
  var loadVoiceRealCallProfileEvidenceFromStore = async (options) => options.store.list(options);
3685
+ var readRealCallEvidenceRuntimeKey = (evidence) => [evidence.profileId, evidence.sessionId, evidence.generatedAt ?? ""].join("\x00");
3686
+ var resolveRealCallEvidenceRuntimeReconnectReports = async (reports, options) => {
3687
+ const resolved = typeof reports === "function" ? await reports(options) : reports;
3688
+ if (!resolved) {
3689
+ return [];
3690
+ }
3691
+ return Array.isArray(resolved) ? resolved : [resolved];
3692
+ };
3693
+ var mergeRealCallEvidenceRuntimeOptions = (base, override = {}) => ({
3694
+ dedupe: override.dedupe ?? base.dedupe,
3695
+ evidenceStore: override.evidenceStore ?? base.evidenceStore,
3696
+ existingEvidenceLimit: override.existingEvidenceLimit ?? base.existingEvidenceLimit,
3697
+ history: {
3698
+ ...base.history ?? {},
3699
+ ...override.history ?? {}
3700
+ },
3701
+ now: override.now ?? base.now,
3702
+ reconnectEvidence: {
3703
+ ...base.reconnectEvidence ?? {},
3704
+ ...override.reconnectEvidence ?? {}
3705
+ },
3706
+ reconnectReports: override.reconnectReports ?? base.reconnectReports,
3707
+ traceEvidence: mergeRealCallProfileCollectorOptions(base.traceEvidence ?? {}, override.traceEvidence ?? {}),
3708
+ traceStore: override.traceStore ?? base.traceStore
3709
+ });
3710
+ var buildRealCallEvidenceRuntimeReport = async (options, input = {}) => {
3711
+ const evidence = await options.evidenceStore.list({
3712
+ limit: options.existingEvidenceLimit ?? 5000
3713
+ });
3714
+ const history = await buildVoiceRealCallProfileHistoryReportFromStore({
3715
+ ...options.history ?? {},
3716
+ limit: options.existingEvidenceLimit ?? 5000,
3717
+ store: options.evidenceStore
3718
+ });
3719
+ const generatedAt = (options.now ?? (() => new Date))().toISOString();
3720
+ const sessions = new Set(evidence.map((record) => record.sessionId)).size;
3721
+ const failedProfiles = history.summary.profiles?.filter((profile) => profile.status === "fail").length;
3722
+ const issues = [
3723
+ ...evidence.length === 0 ? ["No real-call profile evidence has been collected yet."] : [],
3724
+ ...history.issues
3725
+ ];
3726
+ const status = evidence.length === 0 ? "empty" : issues.length > 0 ? history.status === "pass" ? "fail" : history.status : history.status;
3727
+ return {
3728
+ appended: input.appended ?? 0,
3729
+ collected: input.collected ?? [],
3730
+ duplicateKeys: input.duplicateKeys ?? [],
3731
+ evidence,
3732
+ generatedAt,
3733
+ history,
3734
+ issues,
3735
+ ok: status === "pass" && issues.length === 0,
3736
+ skippedDuplicates: input.skippedDuplicates ?? 0,
3737
+ source: "real-call-evidence-runtime",
3738
+ status,
3739
+ summary: {
3740
+ collectedEvidence: input.collected?.length ?? 0,
3741
+ failedProfiles: failedProfiles ?? 0,
3742
+ profiles: history.summary.profileCount,
3743
+ sessions,
3744
+ storedEvidence: evidence.length
3745
+ }
3746
+ };
3747
+ };
3748
+ var collectVoiceRealCallEvidenceRuntimeEvidence = async (options) => {
3749
+ const evidence = [];
3750
+ if (options.traceStore) {
3751
+ evidence.push(...buildVoiceRealCallProfileEvidenceFromTraceEvents(await options.traceStore.list({
3752
+ limit: options.traceEvidence?.limit ?? 5000
3753
+ }), options.traceEvidence));
3754
+ }
3755
+ const reconnectReports = await resolveRealCallEvidenceRuntimeReconnectReports(options.reconnectReports, options);
3756
+ if (reconnectReports.length > 0) {
3757
+ evidence.push(...buildVoiceRealCallProfileEvidenceFromReconnectProofReports(reconnectReports, options.reconnectEvidence));
3758
+ }
3759
+ return evidence;
3760
+ };
3761
+ var createVoiceRealCallEvidenceRuntime = (options) => {
3762
+ const appendEvidence = async (evidenceInput, collectOptions = {}) => {
3763
+ const merged = mergeRealCallEvidenceRuntimeOptions(options, collectOptions);
3764
+ const evidence = Array.isArray(evidenceInput) ? [...evidenceInput] : [evidenceInput];
3765
+ const dedupe = merged.dedupe ?? true;
3766
+ const existing = dedupe ? await merged.evidenceStore.list({
3767
+ limit: merged.existingEvidenceLimit ?? 5000
3768
+ }) : [];
3769
+ const seen = new Set(existing.map(readRealCallEvidenceRuntimeKey));
3770
+ const incomingSeen = new Set;
3771
+ const duplicateKeys = [];
3772
+ let appended = 0;
3773
+ for (const item of evidence) {
3774
+ const key = readRealCallEvidenceRuntimeKey(item);
3775
+ if (dedupe && (seen.has(key) || incomingSeen.has(key))) {
3776
+ duplicateKeys.push(key);
3777
+ continue;
3778
+ }
3779
+ incomingSeen.add(key);
3780
+ await merged.evidenceStore.append(item);
3781
+ appended += 1;
3782
+ }
3783
+ return buildRealCallEvidenceRuntimeReport(merged, {
3784
+ appended,
3785
+ collected: evidence,
3786
+ duplicateKeys,
3787
+ skippedDuplicates: duplicateKeys.length
3788
+ });
3789
+ };
3790
+ return {
3791
+ appendEvidence,
3792
+ buildHistoryReport: async (historyOptions = {}) => buildVoiceRealCallProfileHistoryReportFromStore({
3793
+ ...options.history ?? {},
3794
+ ...historyOptions,
3795
+ limit: historyOptions.limit ?? options.existingEvidenceLimit ?? 5000,
3796
+ store: options.evidenceStore
3797
+ }),
3798
+ buildReport: async (collectOptions = {}) => buildRealCallEvidenceRuntimeReport(mergeRealCallEvidenceRuntimeOptions(options, collectOptions)),
3799
+ collect: async (collectOptions = {}) => {
3800
+ const merged = mergeRealCallEvidenceRuntimeOptions(options, collectOptions);
3801
+ const evidence = await collectVoiceRealCallEvidenceRuntimeEvidence(merged);
3802
+ return appendEvidence(evidence, {
3803
+ dedupe: merged.dedupe
3804
+ });
3805
+ },
3806
+ listEvidence: async (listOptions = {}) => await options.evidenceStore.list({
3807
+ limit: options.existingEvidenceLimit ?? 5000,
3808
+ ...listOptions
3809
+ })
3810
+ };
3811
+ };
3812
+ var buildVoiceRealCallEvidenceRuntimeReadinessCheck = (report, options = {}) => {
3813
+ const minStoredEvidence = options.minStoredEvidence ?? 1;
3814
+ const minSessions = options.minSessions ?? 1;
3815
+ const minProfiles = options.minProfiles ?? 1;
3816
+ const issues = [];
3817
+ const warnings = [];
3818
+ if (report.summary.storedEvidence < minStoredEvidence) {
3819
+ issues.push(`Expected at least ${String(minStoredEvidence)} stored real-call evidence record(s), observed ${String(report.summary.storedEvidence)}.`);
3820
+ }
3821
+ if (report.summary.sessions < minSessions) {
3822
+ issues.push(`Expected at least ${String(minSessions)} real-call session(s), observed ${String(report.summary.sessions)}.`);
3823
+ }
3824
+ if (report.summary.profiles < minProfiles) {
3825
+ issues.push(`Expected at least ${String(minProfiles)} real-call profile(s), observed ${String(report.summary.profiles)}.`);
3826
+ }
3827
+ if (report.summary.failedProfiles > 0) {
3828
+ issues.push(`${String(report.summary.failedProfiles)} rolling real-call profile(s) are failing.`);
3829
+ }
3830
+ if (report.status === "empty" || report.status === "stale") {
3831
+ issues.push(`Real-call evidence runtime is ${report.status}.`);
3832
+ } else if (report.status === "fail") {
3833
+ issues.push("Real-call evidence runtime has failing evidence.");
3834
+ }
3835
+ if (report.status !== "pass" && options.failOnWarnings === true) {
3836
+ warnings.push(...report.issues);
3837
+ }
3838
+ const status = issues.length > 0 ? "fail" : warnings.length > 0 && options.failOnWarnings === true ? "fail" : warnings.length > 0 ? "warn" : "pass";
3839
+ const sourceHref = options.sourceHref ?? "/api/voice/real-call-evidence-runtime";
3840
+ const href = options.href ?? "/voice/real-call-evidence-runtime";
3841
+ return {
3842
+ actions: [
3843
+ {
3844
+ description: "Collect fresh real browser, phone, reconnect, provider, and latency evidence into the runtime store.",
3845
+ href: options.collectHref ?? `${sourceHref}/collect`,
3846
+ label: "Collect real-call evidence",
3847
+ method: "POST"
3848
+ },
3849
+ {
3850
+ description: "Open rolling real-call evidence and inspect profile/session depth.",
3851
+ href,
3852
+ label: "Open real-call evidence runtime"
3853
+ }
3854
+ ],
3855
+ detail: status === "pass" ? `${String(report.summary.storedEvidence)} stored evidence record(s), ${String(report.summary.sessions)} session(s), ${String(report.summary.profiles)} profile(s).` : [...issues, ...warnings].join(" "),
3856
+ gateExplanation: {
3857
+ evidenceHref: sourceHref,
3858
+ observed: report.summary.storedEvidence,
3859
+ remediation: "Run real browser or phone traffic, collect runtime evidence, and ensure rolling profile history is passing before promotion.",
3860
+ sourceHref: href,
3861
+ threshold: minStoredEvidence,
3862
+ thresholdLabel: "Minimum stored real-call evidence",
3863
+ unit: "count"
3864
+ },
3865
+ href,
3866
+ label: options.label ?? "Real-call evidence runtime",
3867
+ proofSource: {
3868
+ href: sourceHref,
3869
+ source: report.source,
3870
+ sourceLabel: "Real-call evidence runtime"
3871
+ },
3872
+ status,
3873
+ value: `${String(report.summary.storedEvidence)} evidence / ${String(report.summary.sessions)} sessions / ${String(report.summary.profiles)} profiles`
3874
+ };
3875
+ };
3685
3876
  var realCallProfileTraceSignalTypes = new Set([
3686
3877
  "client.barge_in",
3687
3878
  "client.browser_media",
@@ -5268,6 +5459,31 @@ var renderVoiceRealCallProfileHistoryHTML = (report, title = "Voice Real-Call Pr
5268
5459
  const issues = report.issues.length === 0 ? "<li>None</li>" : report.issues.map((issue) => `<li>${escapeHtml9(issue)}</li>`).join("");
5269
5460
  return `<!doctype html><html lang="en"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width,initial-scale=1" /><title>${escapeHtml9(title)}</title><style>body{background:#111510;color:#f6f0dd;font-family:ui-sans-serif,system-ui,sans-serif;margin:0}main{margin:auto;max-width:1120px;padding:32px}.hero,article,.card{background:#182117;border:1px solid #32412d;border-radius:24px;margin-bottom:16px;padding:22px}.hero{background:linear-gradient(135deg,rgba(132,204,22,.16),rgba(20,184,166,.12))}.eyebrow{color:#bef264;font-weight:900;letter-spacing:.1em;text-transform:uppercase}h1{font-size:clamp(2.2rem,6vw,4.7rem);letter-spacing:-.06em;line-height:.92;margin:.2rem 0 1rem}.summary{display:flex;flex-wrap:wrap;gap:10px}.pill{border:1px solid #52624b;border-radius:999px;padding:8px 12px}.pass{border-color:rgba(34,197,94,.55)}.warn{border-color:rgba(245,158,11,.7)}.fail{border-color:rgba(239,68,68,.75)}table{border-collapse:collapse;width:100%}td,th{border-bottom:1px solid #32412d;padding:10px;text-align:left}</style></head><body><main><section class="hero"><p class="eyebrow">Real-call benchmark history</p><h1>${escapeHtml9(title)}</h1><p>Generated ${escapeHtml9(report.generatedAt)} from ${escapeHtml9(report.source)}.</p><div class="summary"><span class="pill">Status ${escapeHtml9(report.status)}</span><span class="pill">Reports ${String(report.reports)}</span><span class="pill">Profiles ${String(report.summary.profileCount)}</span><span class="pill">Defaults ${String(report.defaults.summary.actionableProfiles)}/${String(report.defaults.summary.profileCount)}</span><span class="pill">Cycles ${String(report.summary.cycles ?? 0)}</span><span class="pill">Best mix ${escapeHtml9(formatProviderMix(report.recommendations.bestProviders))}</span></div></section><section class="card"><h2>Profiles</h2><table><thead><tr><th>Profile</th><th>Status</th><th>Live p95</th><th>Provider p95</th><th>Turn p95</th><th>Provider mix</th></tr></thead><tbody>${profileRows}</tbody></table></section><section class="card"><h2>Actionable Defaults</h2><table><thead><tr><th>Profile</th><th>Status</th><th>Provider routes</th><th>Live budget</th><th>Provider budget</th><th>Turn budget</th></tr></thead><tbody>${defaultRows}</tbody></table></section>${recommendations}<section class="card"><h2>Issues</h2><ul>${issues}</ul></section></main></body></html>`;
5270
5461
  };
5462
+ var renderVoiceRealCallEvidenceRuntimeMarkdown = (report, title = "Voice Real-Call Evidence Runtime") => [
5463
+ `# ${title}`,
5464
+ "",
5465
+ `- Status: ${report.status}`,
5466
+ `- Stored evidence: ${String(report.summary.storedEvidence)}`,
5467
+ `- Collected evidence: ${String(report.summary.collectedEvidence)}`,
5468
+ `- Appended: ${String(report.appended)}`,
5469
+ `- Skipped duplicates: ${String(report.skippedDuplicates)}`,
5470
+ `- Sessions: ${String(report.summary.sessions)}`,
5471
+ `- Profiles: ${String(report.summary.profiles)}`,
5472
+ "",
5473
+ "## Rolling Profile History",
5474
+ "",
5475
+ renderVoiceRealCallProfileHistoryMarkdown(report.history, "Rolling Real-Call Profile History"),
5476
+ "",
5477
+ "## Issues",
5478
+ "",
5479
+ ...report.issues.length ? report.issues.map((issue) => `- ${issue}`) : ["- None"]
5480
+ ].join(`
5481
+ `);
5482
+ var renderVoiceRealCallEvidenceRuntimeHTML = (report, title = "Voice Real-Call Evidence Runtime") => {
5483
+ const issueItems = report.issues.length === 0 ? "<li>None</li>" : report.issues.map((issue) => `<li>${escapeHtml9(issue)}</li>`).join("");
5484
+ const profileRows = report.history.summary.profiles?.length ? report.history.summary.profiles.map((profile) => `<tr><td>${escapeHtml9(profile.label ?? profile.id)}</td><td>${escapeHtml9(profile.status ?? "unknown")}</td><td>${escapeHtml9(profile.sessionCount ?? "n/a")}</td><td>${escapeHtml9(profile.maxLiveP95Ms ?? "n/a")}</td><td>${escapeHtml9(profile.maxProviderP95Ms ?? "n/a")}</td><td>${escapeHtml9(formatProviderMix(profile.providers ?? []))}</td></tr>`).join("") : '<tr><td colspan="6">No profile history has been collected yet.</td></tr>';
5485
+ return `<!doctype html><html lang="en"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width,initial-scale=1" /><title>${escapeHtml9(title)}</title><style>body{background:#0f1618;color:#f2f7f2;font-family:ui-sans-serif,system-ui,sans-serif;margin:0}main{margin:auto;max-width:1120px;padding:32px}.hero,.card{background:#162225;border:1px solid #2f4548;border-radius:24px;margin-bottom:16px;padding:22px}.hero{background:linear-gradient(135deg,rgba(20,184,166,.18),rgba(132,204,22,.1))}.eyebrow{color:#99f6e4;font-weight:900;letter-spacing:.1em;text-transform:uppercase}h1{font-size:clamp(2.1rem,6vw,4.3rem);letter-spacing:-.06em;line-height:.94;margin:.2rem 0 1rem}.summary{display:flex;flex-wrap:wrap;gap:10px}.pill{border:1px solid #4b6669;border-radius:999px;padding:8px 12px}.pass{border-color:rgba(34,197,94,.55)}.warn{border-color:rgba(245,158,11,.7)}.fail,.empty,.stale{border-color:rgba(239,68,68,.75)}table{border-collapse:collapse;width:100%}td,th{border-bottom:1px solid #2f4548;padding:10px;text-align:left}</style></head><body><main><section class="hero"><p class="eyebrow">Real-call evidence runtime</p><h1>${escapeHtml9(title)}</h1><p>Generated ${escapeHtml9(report.generatedAt)} from ${escapeHtml9(report.source)}.</p><div class="summary"><span class="pill ${escapeHtml9(report.status)}">Status ${escapeHtml9(report.status)}</span><span class="pill">Stored ${String(report.summary.storedEvidence)}</span><span class="pill">Collected ${String(report.summary.collectedEvidence)}</span><span class="pill">Appended ${String(report.appended)}</span><span class="pill">Duplicates ${String(report.skippedDuplicates)}</span><span class="pill">Sessions ${String(report.summary.sessions)}</span><span class="pill">Profiles ${String(report.summary.profiles)}</span></div></section><section class="card"><h2>Rolling Profile History</h2><table><thead><tr><th>Profile</th><th>Status</th><th>Sessions</th><th>Live p95</th><th>Provider p95</th><th>Provider mix</th></tr></thead><tbody>${profileRows}</tbody></table></section><section class="card"><h2>Issues</h2><ul>${issueItems}</ul></section></main></body></html>`;
5486
+ };
5271
5487
  var createVoiceProofTrendRecommendationRoutes = (options) => {
5272
5488
  const path = options.path ?? "/api/voice/proof-trend-recommendations";
5273
5489
  const htmlPath = options.htmlPath === undefined ? "/voice/proof-trend-recommendations" : options.htmlPath;
@@ -5351,6 +5567,46 @@ var createVoiceRealCallProfileHistoryRoutes = (options = {}) => {
5351
5567
  }
5352
5568
  return routes;
5353
5569
  };
5570
+ var createVoiceRealCallEvidenceRuntimeRoutes = (options) => {
5571
+ const path = options.jsonPath ?? "/api/voice/real-call-evidence-runtime";
5572
+ const collectPath = options.collectPath === undefined ? `${path}/collect` : options.collectPath;
5573
+ const htmlPath = options.htmlPath === undefined ? "/voice/real-call-evidence-runtime" : options.htmlPath;
5574
+ const markdownPath = options.markdownPath === undefined ? "/voice/real-call-evidence-runtime.md" : options.markdownPath;
5575
+ const title = options.title ?? "Voice Real-Call Evidence Runtime";
5576
+ const runtime = options.runtime ?? createVoiceRealCallEvidenceRuntime({
5577
+ ...options
5578
+ });
5579
+ const routes = new Elysia4({
5580
+ name: options.name ?? "absolutejs-voice-real-call-evidence-runtime"
5581
+ });
5582
+ routes.get(path, async () => Response.json(await runtime.buildReport(), { headers: options.headers }));
5583
+ if (collectPath !== false) {
5584
+ routes.post(collectPath, async () => Response.json(await runtime.collect(), { headers: options.headers }));
5585
+ }
5586
+ if (htmlPath !== false) {
5587
+ routes.get(htmlPath, async () => {
5588
+ const report = await runtime.buildReport();
5589
+ return new Response(renderVoiceRealCallEvidenceRuntimeHTML(report, title), {
5590
+ headers: {
5591
+ "content-type": "text/html; charset=utf-8",
5592
+ ...Object.fromEntries(new Headers(options.headers))
5593
+ }
5594
+ });
5595
+ });
5596
+ }
5597
+ if (markdownPath !== false) {
5598
+ routes.get(markdownPath, async () => {
5599
+ const report = await runtime.buildReport();
5600
+ return new Response(renderVoiceRealCallEvidenceRuntimeMarkdown(report, title), {
5601
+ headers: {
5602
+ "content-type": "text/markdown; charset=utf-8",
5603
+ ...Object.fromEntries(new Headers(options.headers))
5604
+ }
5605
+ });
5606
+ });
5607
+ }
5608
+ return routes;
5609
+ };
5354
5610
  var realCallProfileActionPaths = {
5355
5611
  "collect-browser-proof": "/collect-browser-proof",
5356
5612
  "collect-phone-proof": "/collect-phone-proof",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@absolutejs/voice",
3
- "version": "0.0.22-beta.454",
3
+ "version": "0.0.22-beta.456",
4
4
  "description": "Voice primitives and Elysia plugin for AbsoluteJS",
5
5
  "repository": {
6
6
  "type": "git",