@goodandready/dsh-voice 0.8.7 → 0.8.8

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 +10 -14
  2. package/package.json +1 -1
package/lib/client.js CHANGED
@@ -1303,6 +1303,14 @@ window.__ModuleLoader__.load({
1303
1303
  return () => { alive = false; off() }
1304
1304
  }, [])
1305
1305
 
1306
+ const [devices, setDevices] = React.useState([])
1307
+ React.useEffect(() => {
1308
+ if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) return
1309
+ navigator.mediaDevices.enumerateDevices()
1310
+ .then((list) => setDevices(list.filter((d) => d.kind === 'audioinput')))
1311
+ .catch(() => {})
1312
+ }, [])
1313
+
1306
1314
  // Снимок приходит со статусом, и он важнее самого значения.
1307
1315
  // loading — ответа хоста ещё нет;
1308
1316
  // unavailable — хост ответил, но наш namespace ему пока неизвестен:
@@ -1442,26 +1450,14 @@ window.__ModuleLoader__.load({
1442
1450
  t('hotkeyHint1')
1443
1451
  + t('hotkeyHint2')))
1444
1452
 
1445
- const micField = () => {
1446
- const devices = React.useState([])[0]
1447
- const setDevices = React.useState([])[1]
1448
- React.useEffect(() => {
1449
- if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) return
1450
- navigator.mediaDevices.enumerateDevices()
1451
- .then((list) => setDevices(list.filter((d) => d.kind === 'audioinput')))
1452
- .catch(() => {})
1453
- }, [])
1454
- return React.createElement('label', { className: 'dvs-field' }, t('mic'),
1453
+ const micField = () => React.createElement('label', { className: 'dvs-field' }, t('mic'),
1455
1454
  React.createElement('select', {
1456
1455
  value: String((snap && snap.micDeviceId) || ''), disabled: !writable,
1457
1456
  onChange: (e) => setTop('micDeviceId', e.target.value),
1458
1457
  },
1459
1458
  React.createElement('option', { value: '' }, t('micDefault')),
1460
1459
  devices.map((d) => React.createElement('option', { key: d.deviceId, value: d.deviceId },
1461
- d.label || d.deviceId.slice(0, 12)))),
1462
- )
1463
- }
1464
-
1460
+ d.label || d.deviceId.slice(0, 12)))))
1465
1461
  const langField = (mode) => React.createElement('label', { className: 'dvs-field' }, t('language'),
1466
1462
  React.createElement('select', {
1467
1463
  value: modeVal(mode, 'language', 'ru'), disabled: !writable,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goodandready/dsh-voice",
3
- "version": "0.8.7",
3
+ "version": "0.8.8",
4
4
  "description": "Voice input for DeepSeek Harness: dictation chunked by pauses and voice messages, each with its own provider fallback chain (Deepgram, Groq, HuggingFace, local whisper.cpp, plus any OpenAI-compatible API of your own).",
5
5
  "license": "MIT",
6
6
  "type": "module",