dsh-live-voice-debugger 0.4.0 → 0.5.0

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.
Files changed (2) hide show
  1. package/lib/client.js +77 -24
  2. package/package.json +1 -1
package/lib/client.js CHANGED
@@ -45,6 +45,25 @@ var DIAGNOSTIC_KEY = /* @__PURE__ */ Symbol.for("dsh-live-voice.diagnostics.v1")
45
45
  var DIAGNOSTIC_CHANGED = "dsh-live-voice:diagnostics-changed";
46
46
 
47
47
  // src/inspector.ts
48
+ function semantic(module2, value) {
49
+ if (value == null) return null;
50
+ if (module2 === "vadRuntime")
51
+ return {
52
+ status: value.status ?? null,
53
+ workerActive: value.workerActive ?? null,
54
+ activeSources: value.activeSources ?? null,
55
+ assets: value.assets ?? null
56
+ };
57
+ const omitted = {
58
+ capture: ["level"],
59
+ vad: ["probability", "silenceMs"],
60
+ chunker: ["bufferedSamples", "bufferedChunks", "silenceSamples", "durationMs"]
61
+ };
62
+ if (!omitted[module2]) return value;
63
+ const result = { ...value };
64
+ for (const key of omitted[module2]) delete result[key];
65
+ return result;
66
+ }
48
67
  function createInspector(source, now = Date.now, limit = 200) {
49
68
  let previous = null;
50
69
  let sequence = 0;
@@ -56,22 +75,56 @@ function createInspector(source, now = Date.now, limit = 200) {
56
75
  previous = next;
57
76
  return;
58
77
  }
78
+ const append = (sessionId, module2, before, after) => {
79
+ if (!previous || JSON.stringify(before) === JSON.stringify(after)) return;
80
+ entries.push({
81
+ sequence: ++sequence,
82
+ timeMs: now(),
83
+ sessionId,
84
+ module: module2,
85
+ level: module2.endsWith("error") && after?.present ? "error" : "debug",
86
+ before,
87
+ after
88
+ });
89
+ };
90
+ append(
91
+ null,
92
+ "vadRuntime",
93
+ semantic("vadRuntime", previous?.vadRuntime),
94
+ semantic("vadRuntime", next?.vadRuntime)
95
+ );
96
+ for (const sourceId of /* @__PURE__ */ new Set([
97
+ ...Object.keys(previous?.audioSources ?? {}),
98
+ ...Object.keys(next?.audioSources ?? {})
99
+ ])) {
100
+ const old = previous?.audioSources?.[sourceId];
101
+ const current = next?.audioSources?.[sourceId];
102
+ if (sourceId === "vad") {
103
+ append(
104
+ null,
105
+ "audioSources.vad",
106
+ semantic("vadRuntime", old),
107
+ semantic("vadRuntime", current)
108
+ );
109
+ continue;
110
+ }
111
+ for (const module2 of /* @__PURE__ */ new Set([...Object.keys(old ?? {}), ...Object.keys(current ?? {})])) {
112
+ append(
113
+ null,
114
+ "audioSources." + sourceId + "." + module2,
115
+ semantic(module2, old?.[module2]),
116
+ semantic(module2, current?.[module2])
117
+ );
118
+ }
119
+ }
59
120
  for (const [sessionId, session] of Object.entries(next?.sessions ?? {})) {
60
121
  for (const [module2, value] of Object.entries(session)) {
61
- const normalized = module2 === "capture" ? { ...value, level: null } : value;
62
- const old = previous?.sessions?.[sessionId]?.[module2];
63
- const before = module2 === "capture" && old ? { ...old, level: null } : old;
64
- if (previous && JSON.stringify(before) !== JSON.stringify(normalized)) {
65
- entries.push({
66
- sequence: ++sequence,
67
- timeMs: now(),
68
- sessionId,
69
- module: module2,
70
- level: module2 === "error" && value?.present ? "error" : "debug",
71
- before: before ?? null,
72
- after: normalized
73
- });
74
- }
122
+ append(
123
+ sessionId,
124
+ module2,
125
+ semantic(module2, previous?.sessions?.[sessionId]?.[module2]),
126
+ semantic(module2, value)
127
+ );
75
128
  }
76
129
  }
77
130
  entries = entries.slice(-Math.max(1, limit));
@@ -256,9 +309,9 @@ var dictionaries = {
256
309
  refreshRate: "Frequ\xEAncia de atualiza\xE7\xE3o",
257
310
  resume: "Retomar atualiza\xE7\xF5es",
258
311
  states: "Estados atuais",
259
- title: "Depurador Live Voice",
312
+ title: "Depurador da Voz ao Vivo",
260
313
  transitions: "Transi\xE7\xF5es de estado recentes",
261
- waiting: "Aguardando um runtime Live Voice compat\xEDvel."
314
+ waiting: "Aguardando um runtime da Voz ao Vivo compat\xEDvel."
262
315
  },
263
316
  es: {
264
317
  activate: "Abrir depurador en una ventana separada",
@@ -279,9 +332,9 @@ var dictionaries = {
279
332
  refreshRate: "Frecuencia de actualizaci\xF3n",
280
333
  resume: "Reanudar actualizaciones",
281
334
  states: "Estados actuales",
282
- title: "Depurador Live Voice",
335
+ title: "Depurador de Voz en vivo",
283
336
  transitions: "Transiciones de estado recientes",
284
- waiting: "Esperando un runtime Live Voice compatible."
337
+ waiting: "Esperando un runtime de Voz en vivo compatible."
285
338
  },
286
339
  fr: {
287
340
  activate: "Ouvrir le d\xE9bogueur dans une fen\xEAtre s\xE9par\xE9e",
@@ -302,9 +355,9 @@ var dictionaries = {
302
355
  refreshRate: "Fr\xE9quence de mise \xE0 jour",
303
356
  resume: "Reprendre les mises \xE0 jour",
304
357
  states: "\xC9tats actuels",
305
- title: "D\xE9bogueur Live Voice",
358
+ title: "D\xE9bogueur Voix en direct",
306
359
  transitions: "Transitions r\xE9centes des \xE9tats",
307
- waiting: "En attente d\u2019un runtime Live Voice compatible."
360
+ waiting: "En attente d\u2019un runtime Voix en direct compatible."
308
361
  },
309
362
  hi: {
310
363
  activate: "\u0921\u0940\u092C\u0917\u0930 \u0905\u0932\u0917 \u0935\u093F\u0902\u0921\u094B \u092E\u0947\u0902 \u0916\u094B\u0932\u0947\u0902",
@@ -325,9 +378,9 @@ var dictionaries = {
325
378
  refreshRate: "\u0905\u092A\u0921\u0947\u091F \u0906\u0935\u0943\u0924\u094D\u0924\u093F",
326
379
  resume: "\u0905\u092A\u0921\u0947\u091F \u092B\u093F\u0930 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902",
327
380
  states: "\u0935\u0930\u094D\u0924\u092E\u093E\u0928 \u0938\u094D\u0925\u093F\u0924\u093F\u092F\u093E\u0901",
328
- title: "Live Voice \u0921\u0940\u092C\u0917\u0930",
381
+ title: "\u0932\u093E\u0907\u0935 \u0935\u0949\u0907\u0938 \u0921\u0940\u092C\u0917\u0930",
329
382
  transitions: "\u0939\u093E\u0932 \u0915\u0947 \u0938\u094D\u091F\u0947\u091F \u091F\u094D\u0930\u093E\u0902\u091C\u093C\u093F\u0936\u0928",
330
- waiting: "\u0938\u0902\u0917\u0924 Live Voice \u0930\u0928\u091F\u093E\u0907\u092E \u0915\u0940 \u092A\u094D\u0930\u0924\u0940\u0915\u094D\u0937\u093E \u0939\u0948\u0964"
383
+ waiting: "\u0938\u0902\u0917\u0924 \u0932\u093E\u0907\u0935 \u0935\u0949\u0907\u0938 \u0930\u0928\u091F\u093E\u0907\u092E \u0915\u0940 \u092A\u094D\u0930\u0924\u0940\u0915\u094D\u0937\u093E \u0939\u0948\u0964"
331
384
  },
332
385
  zh: {
333
386
  activate: "\u5728\u72EC\u7ACB\u7A97\u53E3\u4E2D\u6253\u5F00\u8C03\u8BD5\u5668",
@@ -348,9 +401,9 @@ var dictionaries = {
348
401
  refreshRate: "\u66F4\u65B0\u9891\u7387",
349
402
  resume: "\u6062\u590D\u66F4\u65B0",
350
403
  states: "\u5F53\u524D\u72B6\u6001",
351
- title: "Live Voice \u8C03\u8BD5\u5668",
404
+ title: "\u5B9E\u65F6\u8BED\u97F3\u8C03\u8BD5\u5668",
352
405
  transitions: "\u6700\u8FD1\u7684\u72B6\u6001\u8F6C\u6362",
353
- waiting: "\u6B63\u5728\u7B49\u5F85\u517C\u5BB9\u7684 Live Voice \u8FD0\u884C\u65F6\u3002"
406
+ waiting: "\u6B63\u5728\u7B49\u5F85\u517C\u5BB9\u7684\u5B9E\u65F6\u8BED\u97F3\u8FD0\u884C\u65F6\u3002"
354
407
  }
355
408
  };
356
409
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-live-voice-debugger",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "type": "module",
5
5
  "description": "Optional read-only state inspector for DSH Live Voice.",
6
6
  "license": "Apache-2.0",