@goodandready/dsh-voice 0.8.12 → 0.8.14
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/lib/client.js +6 -5
- package/lib/index.js +3 -3
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -343,10 +343,10 @@ window.__ModuleLoader__.load({
|
|
|
343
343
|
'.dvo-dash-name{font-size:12px;font-weight:600;color:var(--dsw-alias-label-primary)}' +
|
|
344
344
|
'.dvo-dash-row{display:flex;justify-content:space-between;align-items:center;font-size:11px;color:var(--dsw-alias-label-secondary)}' +
|
|
345
345
|
'.dvo-badge{display:inline-flex;align-items:center;font-size:11px;padding:1px 6px;border-radius:6px;font-weight:600}' +
|
|
346
|
-
'.dvo-badge-fast{background:
|
|
347
|
-
'.dvo-badge-norm{background:
|
|
348
|
-
'.dvo-badge-slow{background:
|
|
349
|
-
'.dvo-badge-err{background:
|
|
346
|
+
'.dvo-badge-fast{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-state-success-primary);border:1px solid var(--dsw-alias-state-success-primary)}' +
|
|
347
|
+
'.dvo-badge-norm{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-state-warning-primary);border:1px solid var(--dsw-alias-state-warning-primary)}' +
|
|
348
|
+
'.dvo-badge-slow{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-state-warning-primary);border:1px solid var(--dsw-alias-border-l2)}' +
|
|
349
|
+
'.dvo-badge-err{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-state-error-primary);border:1px solid var(--dsw-alias-state-error-primary)}' +
|
|
350
350
|
'.dvo-badge-idle{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-tertiary)}'
|
|
351
351
|
const cssId = 'dsh-voice/client.module.css'
|
|
352
352
|
if (typeof document !== 'undefined' && !document.querySelector('style[data-plugin-css="' + cssId + '"]')) {
|
|
@@ -736,7 +736,8 @@ window.__ModuleLoader__.load({
|
|
|
736
736
|
rec.cutting = false
|
|
737
737
|
if (blob.size < 1200) return // слишком короткий кусок — это не речь
|
|
738
738
|
try {
|
|
739
|
-
const
|
|
739
|
+
const out = await sendAudio(blob, rec.mime, 'dictation')
|
|
740
|
+
const text = out && out.text ? out.text : ''
|
|
740
741
|
const delay = Number(voice.settings.sendDelayMs) || 0
|
|
741
742
|
if (text && delay > 0 && !voice.holding) {
|
|
742
743
|
// Отложенная вставка с окном отмены (#29-5): текст уже вставлен,
|
package/lib/index.js
CHANGED
|
@@ -158,7 +158,7 @@ export const Config = z.object({
|
|
|
158
158
|
.description('Realtime streaming provider: "openai" (OpenAI Realtime API) or "sherpa-onnx" (local streaming).'),
|
|
159
159
|
realtimeModel: z.string().default('gpt-4o-realtime-preview')
|
|
160
160
|
.description('Realtime model identifier.'),
|
|
161
|
-
visualizerStyle: z.
|
|
161
|
+
visualizerStyle: z.union(['liquid-wave', 'dynamic-orb', 'bars', 'off']).default('liquid-wave')
|
|
162
162
|
.description('Audio visualizer animation style in the recording pill: "liquid-wave", "dynamic-orb", "bars", or "off".'),
|
|
163
163
|
})
|
|
164
164
|
|
|
@@ -442,7 +442,7 @@ export function apply(ctx, baseConfig) {
|
|
|
442
442
|
realtimeProvider: cfg.realtimeProvider || 'openai',
|
|
443
443
|
realtimeModel: cfg.realtimeModel || 'gpt-4o-realtime-preview',
|
|
444
444
|
visualizerStyle: cfg.visualizerStyle || 'liquid-wave',
|
|
445
|
-
providerStats:
|
|
445
|
+
providerStats: statsTracker.get(),
|
|
446
446
|
})
|
|
447
447
|
},
|
|
448
448
|
}), 'dsh-voice: /status route')
|
|
@@ -565,7 +565,7 @@ export function apply(ctx, baseConfig) {
|
|
|
565
565
|
if (info.size > cfg.maxFileBytes) {
|
|
566
566
|
throw new Error(`transcribe_audio: file too large (${info.size} bytes, max ${cfg.maxFileBytes})`)
|
|
567
567
|
}
|
|
568
|
-
if (info.size <
|
|
568
|
+
if (info.size < 44) throw new Error('transcribe_audio: file is empty or too small')
|
|
569
569
|
const mime = MIME_BY_EXT[path.extname(filePath).toLowerCase()] || 'audio/wav'
|
|
570
570
|
const bytes = await readFile(filePath)
|
|
571
571
|
const modeCfg = { ...cfg.message, language: String(args.language || cfg.message.language) }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goodandready/dsh-voice",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.14",
|
|
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",
|