opencode-voice2text 0.1.10 → 0.1.12

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/README.md CHANGED
@@ -8,7 +8,7 @@ Press a shortcut once to start recognition, speak naturally while audio streams
8
8
 
9
9
  - True start/stop streaming with a single shortcut
10
10
  - Stable utterances appear in the prompt before the session ends
11
- - Toast feedback while recording or finalizing
11
+ - Prompt-right status indicator while recording or finalizing
12
12
  - Works on macOS and Linux
13
13
  - Keeps credentials out of the plugin repo
14
14
 
@@ -238,5 +238,5 @@ For emergency manual publishing, use your local npm login or a short-lived bypas
238
238
  ## Notes
239
239
 
240
240
  - The plugin uses Volcengine's websocket ASR protocol directly.
241
- - Success toasts are intentionally not shown; recording and stop states use lightweight info toasts.
241
+ - Success toasts are intentionally not shown; ongoing state is visible near the prompt instead.
242
242
  - Errors still surface as OpenCode toasts.
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import "@opentui/solid/runtime-plugin-support";
1
2
  import type { TuiPluginModule } from "@opencode-ai/plugin/tui";
2
3
  declare const plugin: TuiPluginModule;
3
4
  export default plugin;
package/dist/index.js CHANGED
@@ -1,3 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@opentui/solid/jsx-runtime";
2
+ import "@opentui/solid/runtime-plugin-support";
3
+ /** @jsxImportSource @opentui/solid */
1
4
  import { randomBytes, randomUUID } from "node:crypto";
2
5
  import { spawn } from "node:child_process";
3
6
  import os from "node:os";
@@ -5,6 +8,7 @@ import path from "node:path";
5
8
  import tls from "node:tls";
6
9
  import zlib from "node:zlib";
7
10
  import { promises as fs } from "node:fs";
11
+ import { Show, createMemo } from "solid-js";
8
12
  const WS_OPCODE_BINARY = 0x2;
9
13
  const WS_OPCODE_CLOSE = 0x8;
10
14
  const WS_OPCODE_PING = 0x9;
@@ -25,6 +29,8 @@ const DEFAULT_RATE = 16000;
25
29
  const DEFAULT_BITS = 16;
26
30
  const DEFAULT_CHANNELS = 1;
27
31
  const DEFAULT_END_WINDOW_SIZE = 800;
32
+ const STATUS_KEY = "opencode_voice2text.status";
33
+ const STATUS_MESSAGE_KEY = "opencode_voice2text.status_message";
28
34
  function str(value, fallback = "") {
29
35
  return typeof value === "string" && value.trim() ? value.trim() : fallback;
30
36
  }
@@ -596,11 +602,38 @@ async function appendTranscript(api, config, text) {
596
602
  const nextText = config.appendTrailingSpace ? `${text} ` : text;
597
603
  await api.client.tui.appendPrompt({ text: nextText });
598
604
  }
605
+ function setStatus(api, status, message) {
606
+ api.kv.set(STATUS_KEY, status);
607
+ api.kv.set(STATUS_MESSAGE_KEY, message);
608
+ }
609
+ function statusView(api) {
610
+ return () => {
611
+ const status = createMemo(() => api.kv.get(STATUS_KEY, "idle"));
612
+ const message = createMemo(() => api.kv.get(STATUS_MESSAGE_KEY, ""));
613
+ const tone = createMemo(() => {
614
+ if (status() === "recording")
615
+ return api.theme.current.warning;
616
+ if (status() === "transcribing")
617
+ return api.theme.current.accent;
618
+ return api.theme.current.textMuted;
619
+ });
620
+ const label = createMemo(() => (status() === "recording" ? "REC" : "ASR"));
621
+ return (_jsx(Show, { when: status() !== "idle", children: _jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("text", { fg: tone(), children: _jsx("b", { children: label() }) }), _jsx(Show, { when: message(), children: _jsx("text", { fg: api.theme.current.textMuted, children: message() }) })] }) }));
622
+ };
623
+ }
599
624
  const tui = async (api, options) => {
600
625
  const config = await loadConfig((options ?? {}));
601
626
  const provider = getProvider(config);
602
627
  let phase = "idle";
603
628
  let active;
629
+ setStatus(api, "idle", "");
630
+ api.slots.register({
631
+ order: 50,
632
+ slots: {
633
+ home_prompt_right: statusView(api),
634
+ session_prompt_right: statusView(api),
635
+ },
636
+ });
604
637
  const toast = (message, variant = "info") => {
605
638
  api.ui.toast({ title: "Voice2Text", message, variant, duration: 2500 });
606
639
  };
@@ -608,12 +641,13 @@ const tui = async (api, options) => {
608
641
  if (phase !== "idle")
609
642
  return;
610
643
  phase = "recording";
611
- toast(`Listening... press ${config.commandKeybind} to stop`, "info");
644
+ setStatus(api, "recording", `listening... press ${config.commandKeybind} to stop`);
612
645
  try {
613
646
  await ensureRuntimeSupport();
614
647
  const configError = provider.validateConfig(config);
615
648
  if (configError) {
616
649
  phase = "idle";
650
+ setStatus(api, "idle", "");
617
651
  toast(configError, "warning");
618
652
  return;
619
653
  }
@@ -646,6 +680,7 @@ const tui = async (api, options) => {
646
680
  }
647
681
  catch (error) {
648
682
  phase = "idle";
683
+ setStatus(api, "idle", "");
649
684
  toast(error instanceof Error ? error.message : String(error), "error");
650
685
  }
651
686
  };
@@ -655,7 +690,7 @@ const tui = async (api, options) => {
655
690
  const current = active;
656
691
  active = undefined;
657
692
  phase = "transcribing";
658
- toast("Stopping recognition...", "info");
693
+ setStatus(api, "transcribing", "stopping...");
659
694
  try {
660
695
  current.recorder.stop();
661
696
  await current.recorder.done;
@@ -673,6 +708,7 @@ const tui = async (api, options) => {
673
708
  }
674
709
  finally {
675
710
  phase = "idle";
711
+ setStatus(api, "idle", "");
676
712
  }
677
713
  };
678
714
  api.command.register(() => [
@@ -699,6 +735,7 @@ const tui = async (api, options) => {
699
735
  api.lifecycle.onDispose(() => {
700
736
  active?.recorder.stop();
701
737
  void active?.stream.abort().catch(() => undefined);
738
+ setStatus(api, "idle", "");
702
739
  });
703
740
  };
704
741
  const plugin = {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-voice2text",
3
- "version": "0.1.10",
3
+ "version": "0.1.12",
4
4
  "description": "Streaming Volcengine speech-to-text plugin for the OpenCode TUI",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -22,6 +22,7 @@
22
22
  ],
23
23
  "files": [
24
24
  "dist",
25
+ "src",
25
26
  "README.md",
26
27
  "LICENSE"
27
28
  ],
@@ -31,7 +32,7 @@
31
32
  "import": "./dist/index.js"
32
33
  },
33
34
  "./tui": {
34
- "import": "./dist/index.js",
35
+ "import": "./src/index.tsx",
35
36
  "config": {
36
37
  "commandKeybind": "ctrl+g"
37
38
  }
package/src/index.tsx ADDED
@@ -0,0 +1,918 @@
1
+ import "@opentui/solid/runtime-plugin-support"
2
+ /** @jsxImportSource @opentui/solid */
3
+ import { randomBytes, randomUUID } from "node:crypto"
4
+ import { spawn } from "node:child_process"
5
+ import os from "node:os"
6
+ import path from "node:path"
7
+ import tls from "node:tls"
8
+ import zlib from "node:zlib"
9
+ import { promises as fs } from "node:fs"
10
+ import { Show, createMemo } from "solid-js"
11
+ import type { PluginOptions } from "@opencode-ai/plugin"
12
+ import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@opencode-ai/plugin/tui"
13
+
14
+ const WS_OPCODE_BINARY = 0x2
15
+ const WS_OPCODE_CLOSE = 0x8
16
+ const WS_OPCODE_PING = 0x9
17
+ const WS_OPCODE_PONG = 0xA
18
+
19
+ const HEADER_VERSION = 0x1
20
+ const HEADER_SIZE = 0x1
21
+ const MESSAGE_TYPE_FULL_CLIENT_REQUEST = 0x1
22
+ const MESSAGE_TYPE_AUDIO_ONLY_REQUEST = 0x2
23
+ const MESSAGE_TYPE_ERROR = 0xF
24
+ const SERIALIZATION_NONE = 0x0
25
+ const SERIALIZATION_JSON = 0x1
26
+ const COMPRESSION_GZIP = 0x1
27
+
28
+ const DEFAULT_CONFIG_PATH = path.join(os.homedir(), ".config/opencode/voice2text.local.json")
29
+ const DEFAULT_ENDPOINT = "wss://openspeech.bytedance.com/api/v3/sauc/bigmodel_async"
30
+ const DEFAULT_RESOURCE_ID = "volc.seedasr.sauc.duration"
31
+ const DEFAULT_CHUNK_MS = 200
32
+ const DEFAULT_RATE = 16000
33
+ const DEFAULT_BITS = 16
34
+ const DEFAULT_CHANNELS = 1
35
+ const DEFAULT_END_WINDOW_SIZE = 800
36
+
37
+ const STATUS_KEY = "opencode_voice2text.status"
38
+ const STATUS_MESSAGE_KEY = "opencode_voice2text.status_message"
39
+
40
+ type Voice2TextOptions = PluginOptions & {
41
+ commandKeybind?: string
42
+ provider?: string
43
+ endpoint?: string
44
+ appId?: string
45
+ accessToken?: string
46
+ resourceId?: string
47
+ language?: string
48
+ chunkMs?: number
49
+ endWindowSize?: number
50
+ maxDurationSeconds?: number
51
+ appendTrailingSpace?: boolean
52
+ rate?: number
53
+ bits?: number
54
+ channels?: number
55
+ }
56
+
57
+ type Voice2TextConfig = {
58
+ commandKeybind: string
59
+ provider: string
60
+ language: string
61
+ chunkMs: number
62
+ endWindowSize: number
63
+ maxDurationSeconds: number
64
+ appendTrailingSpace: boolean
65
+ rate: number
66
+ bits: number
67
+ channels: number
68
+ providerConfig: {
69
+ endpoint: string
70
+ appId: string
71
+ accessToken: string
72
+ resourceId: string
73
+ }
74
+ }
75
+
76
+ type VoiceProvider = {
77
+ id: string
78
+ displayName: string
79
+ configFileFields: string[]
80
+ validateConfig: (config: Voice2TextConfig) => string | undefined
81
+ createRecognition: (
82
+ config: Voice2TextConfig,
83
+ callbacks: { onStableText?: (text: string) => Promise<void> },
84
+ ) => Promise<RecognitionSession>
85
+ }
86
+
87
+ type TranscriptResult = {
88
+ text: string
89
+ stableText: string
90
+ logId: string
91
+ }
92
+
93
+ type RecorderSession = {
94
+ done: Promise<void>
95
+ stop: () => void
96
+ }
97
+
98
+ type RecognitionSession = {
99
+ write: (chunk: Buffer) => void
100
+ finish: (finalChunk?: Buffer) => Promise<TranscriptResult>
101
+ abort: () => Promise<void>
102
+ }
103
+
104
+ type VolcengineResponse = {
105
+ flags: number
106
+ data: any
107
+ }
108
+
109
+ function str(value: unknown, fallback = "") {
110
+ return typeof value === "string" && value.trim() ? value.trim() : fallback
111
+ }
112
+
113
+ function num(value: unknown, fallback: number) {
114
+ const parsed = Number(value)
115
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback
116
+ }
117
+
118
+ function bool(value: unknown, fallback: boolean) {
119
+ if (typeof value === "boolean") return value
120
+ if (value === "true") return true
121
+ if (value === "false") return false
122
+ return fallback
123
+ }
124
+
125
+ function appendableText(text: unknown) {
126
+ return typeof text === "string" ? text.trim() : ""
127
+ }
128
+
129
+ function diffSuffix(previous: string, next: string) {
130
+ if (!next) return ""
131
+ if (!previous) return next
132
+ if (next.startsWith(previous)) return next.slice(previous.length).trim()
133
+ return ""
134
+ }
135
+
136
+ function platformLabel() {
137
+ if (process.platform === "darwin") return "macOS"
138
+ if (process.platform === "linux") return "Linux"
139
+ return process.platform
140
+ }
141
+
142
+ function installHint() {
143
+ if (process.platform === "darwin") return "Missing recorder 'rec'. Install Sox with: brew install sox"
144
+ if (process.platform === "linux") return "Missing recorder 'rec'. Install Sox with: sudo apt install sox"
145
+ return "Missing recorder 'rec'. Install Sox before using voice input."
146
+ }
147
+
148
+ function gzip(buffer: Buffer) {
149
+ return zlib.gzipSync(buffer)
150
+ }
151
+
152
+ function buildProtocolHeader(messageType: number, flags: number, serialization: number, compression: number) {
153
+ return Buffer.from([
154
+ (HEADER_VERSION << 4) | HEADER_SIZE,
155
+ (messageType << 4) | flags,
156
+ (serialization << 4) | compression,
157
+ 0x00,
158
+ ])
159
+ }
160
+
161
+ function buildClientMessage(messageType: number, flags: number, payload: Buffer, serialization: number) {
162
+ const compressedPayload = gzip(payload)
163
+ const header = buildProtocolHeader(messageType, flags, serialization, COMPRESSION_GZIP)
164
+ const size = Buffer.alloc(4)
165
+ size.writeUInt32BE(compressedPayload.length, 0)
166
+ return Buffer.concat([header, size, compressedPayload])
167
+ }
168
+
169
+ function buildEmptyLastAudioMessage() {
170
+ const compressedPayload = gzip(Buffer.alloc(0))
171
+ const header = buildProtocolHeader(MESSAGE_TYPE_AUDIO_ONLY_REQUEST, 0x2, SERIALIZATION_NONE, COMPRESSION_GZIP)
172
+ const size = Buffer.alloc(4)
173
+ size.writeUInt32BE(compressedPayload.length, 0)
174
+ return Buffer.concat([header, size, compressedPayload])
175
+ }
176
+
177
+ function parseServerMessage(message: Buffer): VolcengineResponse {
178
+ if (message.length < 8) throw new Error("Invalid Volcengine response frame")
179
+
180
+ const headerSize = (message[0] & 0x0f) * 4
181
+ const messageType = message[1] >> 4
182
+ const flags = message[1] & 0x0f
183
+ const serialization = message[2] >> 4
184
+ const compression = message[2] & 0x0f
185
+ let offset = headerSize
186
+
187
+ if (messageType === MESSAGE_TYPE_ERROR) {
188
+ const code = message.readUInt32BE(offset)
189
+ offset += 4
190
+ const payloadSize = message.readUInt32BE(offset)
191
+ offset += 4
192
+ const payload = message.subarray(offset, offset + payloadSize)
193
+ const text = compression === COMPRESSION_GZIP ? zlib.gunzipSync(payload).toString("utf8") : payload.toString("utf8")
194
+ throw new Error(`Volcengine ASR error ${code}: ${text}`)
195
+ }
196
+
197
+ if (flags === 0x1 || flags === 0x3) offset += 4
198
+ const payloadSize = message.readUInt32BE(offset)
199
+ offset += 4
200
+ const payload = message.subarray(offset, offset + payloadSize)
201
+ const body = compression === COMPRESSION_GZIP ? zlib.gunzipSync(payload) : payload
202
+
203
+ return {
204
+ flags,
205
+ data: serialization === SERIALIZATION_JSON ? JSON.parse(body.toString("utf8")) : body,
206
+ }
207
+ }
208
+
209
+ function createMaskedFrame(opcode: number, payload: Buffer) {
210
+ const mask = randomBytes(4)
211
+ const chunks = [Buffer.from([0x80 | opcode])]
212
+ const length = payload.length
213
+
214
+ if (length < 126) {
215
+ chunks.push(Buffer.from([0x80 | length]))
216
+ } else if (length <= 0xffff) {
217
+ const extended = Buffer.alloc(3)
218
+ extended[0] = 0x80 | 126
219
+ extended.writeUInt16BE(length, 1)
220
+ chunks.push(extended)
221
+ } else {
222
+ const extended = Buffer.alloc(9)
223
+ extended[0] = 0x80 | 127
224
+ extended.writeBigUInt64BE(BigInt(length), 1)
225
+ chunks.push(extended)
226
+ }
227
+
228
+ const masked = Buffer.alloc(length)
229
+ for (let index = 0; index < length; index += 1) {
230
+ masked[index] = payload[index] ^ mask[index % 4]
231
+ }
232
+
233
+ chunks.push(mask, masked)
234
+ return Buffer.concat(chunks)
235
+ }
236
+
237
+ class WebSocketBinaryClient {
238
+ private readonly url: URL
239
+ private readonly headers: Record<string, string>
240
+ private socket: tls.TLSSocket | undefined
241
+ private buffer = Buffer.alloc(0)
242
+ private pendingFrames: Buffer[] = []
243
+ private waiters: Array<{ resolve: (value: Buffer) => void; reject: (error: Error) => void }> = []
244
+
245
+ constructor(url: string, headers: Record<string, string>) {
246
+ this.url = new URL(url)
247
+ this.headers = headers
248
+ }
249
+
250
+ async connect() {
251
+ if (this.url.protocol !== "wss:") {
252
+ throw new Error(`Unsupported websocket protocol: ${this.url.protocol}`)
253
+ }
254
+
255
+ const key = randomBytes(16).toString("base64")
256
+ const headerLines = [
257
+ `GET ${this.url.pathname}${this.url.search} HTTP/1.1`,
258
+ `Host: ${this.url.host}`,
259
+ "Upgrade: websocket",
260
+ "Connection: Upgrade",
261
+ `Sec-WebSocket-Key: ${key}`,
262
+ "Sec-WebSocket-Version: 13",
263
+ ]
264
+
265
+ for (const [name, value] of Object.entries(this.headers)) {
266
+ headerLines.push(`${name}: ${value}`)
267
+ }
268
+ headerLines.push("\r\n")
269
+
270
+ const socket = await new Promise<tls.TLSSocket>((resolve, reject) => {
271
+ const next = tls.connect({
272
+ host: this.url.hostname,
273
+ port: Number(this.url.port || 443),
274
+ servername: this.url.hostname,
275
+ })
276
+ next.once("secureConnect", () => resolve(next))
277
+ next.once("error", reject)
278
+ })
279
+
280
+ this.socket = socket
281
+ socket.setNoDelay(true)
282
+ socket.write(headerLines.join("\r\n"))
283
+
284
+ const handshake = await new Promise<{ headerPart: string; rest: Buffer }>((resolve, reject) => {
285
+ let chunkBuffer = Buffer.alloc(0)
286
+ const onData = (chunk: Buffer) => {
287
+ chunkBuffer = Buffer.concat([chunkBuffer, chunk])
288
+ const separator = chunkBuffer.indexOf("\r\n\r\n")
289
+ if (separator === -1) return
290
+ socket.off("data", onData)
291
+ resolve({
292
+ headerPart: chunkBuffer.subarray(0, separator).toString("utf8"),
293
+ rest: chunkBuffer.subarray(separator + 4),
294
+ })
295
+ }
296
+ socket.on("data", onData)
297
+ socket.once("error", reject)
298
+ })
299
+
300
+ const lines = handshake.headerPart.split("\r\n")
301
+ if (!(lines[0] || "").includes("101")) {
302
+ throw new Error(`WebSocket handshake failed: ${lines[0] || "unknown"}`)
303
+ }
304
+
305
+ const responseHeaders: Record<string, string> = {}
306
+ for (const line of lines.slice(1)) {
307
+ const index = line.indexOf(":")
308
+ if (index === -1) continue
309
+ responseHeaders[line.slice(0, index).trim().toLowerCase()] = line.slice(index + 1).trim()
310
+ }
311
+
312
+ socket.on("data", (chunk) => this.onData(chunk))
313
+ socket.on("close", () => this.flushWaiters(new Error("WebSocket closed")))
314
+ socket.on("error", (error) => this.flushWaiters(error))
315
+ if (handshake.rest.length > 0) this.onData(handshake.rest)
316
+ return responseHeaders
317
+ }
318
+
319
+ private onData(chunk: Buffer) {
320
+ this.buffer = Buffer.concat([this.buffer, chunk])
321
+
322
+ while (this.buffer.length >= 2) {
323
+ const first = this.buffer[0]
324
+ const second = this.buffer[1]
325
+ const opcode = first & 0x0f
326
+ const masked = (second & 0x80) !== 0
327
+ let offset = 2
328
+ let payloadLength = second & 0x7f
329
+
330
+ if (payloadLength === 126) {
331
+ if (this.buffer.length < offset + 2) return
332
+ payloadLength = this.buffer.readUInt16BE(offset)
333
+ offset += 2
334
+ } else if (payloadLength === 127) {
335
+ if (this.buffer.length < offset + 8) return
336
+ payloadLength = Number(this.buffer.readBigUInt64BE(offset))
337
+ offset += 8
338
+ }
339
+
340
+ let mask: Buffer | undefined
341
+ if (masked) {
342
+ if (this.buffer.length < offset + 4) return
343
+ mask = this.buffer.subarray(offset, offset + 4)
344
+ offset += 4
345
+ }
346
+
347
+ if (this.buffer.length < offset + payloadLength) return
348
+
349
+ let payload = this.buffer.subarray(offset, offset + payloadLength)
350
+ this.buffer = this.buffer.subarray(offset + payloadLength)
351
+
352
+ if (masked && mask) {
353
+ const unmasked = Buffer.alloc(payload.length)
354
+ for (let index = 0; index < payload.length; index += 1) {
355
+ unmasked[index] = payload[index] ^ mask[index % 4]
356
+ }
357
+ payload = unmasked
358
+ }
359
+
360
+ if (opcode === WS_OPCODE_PING) {
361
+ this.sendRaw(WS_OPCODE_PONG, payload)
362
+ continue
363
+ }
364
+
365
+ if (opcode === WS_OPCODE_CLOSE) {
366
+ this.flushWaiters(new Error("WebSocket closed by server"))
367
+ return
368
+ }
369
+
370
+ if (opcode !== WS_OPCODE_BINARY) continue
371
+
372
+ const waiter = this.waiters.shift()
373
+ if (waiter) waiter.resolve(payload)
374
+ else this.pendingFrames.push(payload)
375
+ }
376
+ }
377
+
378
+ private flushWaiters(error: Error) {
379
+ while (this.waiters.length > 0) {
380
+ this.waiters.shift()?.reject(error)
381
+ }
382
+ }
383
+
384
+ private sendRaw(opcode: number, payload: Buffer) {
385
+ if (!this.socket) throw new Error("WebSocket is not connected")
386
+ this.socket.write(createMaskedFrame(opcode, payload))
387
+ }
388
+
389
+ sendBinary(payload: Buffer) {
390
+ this.sendRaw(WS_OPCODE_BINARY, payload)
391
+ }
392
+
393
+ async receiveBinary(timeoutMs = 30000) {
394
+ if (this.pendingFrames.length > 0) {
395
+ return this.pendingFrames.shift() as Buffer
396
+ }
397
+
398
+ return new Promise<Buffer>((resolve, reject) => {
399
+ const waiter = {
400
+ resolve: (value: Buffer) => {
401
+ clearTimeout(timer)
402
+ resolve(value)
403
+ },
404
+ reject: (error: Error) => {
405
+ clearTimeout(timer)
406
+ reject(error)
407
+ },
408
+ }
409
+
410
+ const timer = setTimeout(() => {
411
+ this.waiters = this.waiters.filter((item) => item !== waiter)
412
+ reject(new Error("Timed out waiting for Volcengine ASR response"))
413
+ }, timeoutMs)
414
+
415
+ this.waiters.push(waiter)
416
+ })
417
+ }
418
+
419
+ async close() {
420
+ if (!this.socket) return
421
+
422
+ try {
423
+ this.sendRaw(WS_OPCODE_CLOSE, Buffer.alloc(0))
424
+ } catch {
425
+ // Ignore close send failure.
426
+ }
427
+
428
+ const socket = this.socket
429
+ await new Promise<void>((resolve) => {
430
+ socket.end(() => resolve())
431
+ setTimeout(() => resolve(), 200)
432
+ })
433
+ this.socket = undefined
434
+ }
435
+ }
436
+
437
+ async function commandExists(command: string) {
438
+ return new Promise<boolean>((resolve) => {
439
+ const child = spawn("which", [command], { stdio: "ignore" })
440
+ child.on("close", (code) => resolve(code === 0))
441
+ child.on("error", () => resolve(false))
442
+ })
443
+ }
444
+
445
+ async function ensureRuntimeSupport() {
446
+ if (process.platform !== "darwin" && process.platform !== "linux") {
447
+ throw new Error(`opencode-voice2text currently supports macOS and Linux. Current platform: ${platformLabel()}`)
448
+ }
449
+
450
+ if (!(await commandExists("rec"))) {
451
+ throw new Error(installHint())
452
+ }
453
+ }
454
+
455
+ async function readLocalConfig() {
456
+ const configPath = process.env.OPENCODE_VOICE2TEXT_LOCAL_CONFIG || DEFAULT_CONFIG_PATH
457
+ try {
458
+ return JSON.parse(await fs.readFile(configPath, "utf8")) as Record<string, unknown>
459
+ } catch (error: any) {
460
+ if (error?.code === "ENOENT") return {}
461
+ throw error
462
+ }
463
+ }
464
+
465
+ function configPathLabel() {
466
+ return process.env.OPENCODE_VOICE2TEXT_LOCAL_CONFIG || DEFAULT_CONFIG_PATH
467
+ }
468
+
469
+ function providerName(provider: string) {
470
+ if (provider === "volcengine") return "Volcengine ASR"
471
+ return provider
472
+ }
473
+
474
+ async function loadConfig(options: Voice2TextOptions = {}): Promise<Voice2TextConfig> {
475
+ const local = await readLocalConfig()
476
+ const env = process.env
477
+ const merged = { ...local, ...options }
478
+
479
+ const config: Voice2TextConfig = {
480
+ commandKeybind: str(merged.commandKeybind, "ctrl+g"),
481
+ provider: str(merged.provider ?? env.OPENCODE_VOICE2TEXT_PROVIDER, "volcengine"),
482
+ language: str(merged.language ?? env.OPENCODE_VOICE2TEXT_LANGUAGE),
483
+ chunkMs: num(merged.chunkMs ?? env.OPENCODE_VOICE2TEXT_CHUNK_MS, DEFAULT_CHUNK_MS),
484
+ endWindowSize: num(merged.endWindowSize ?? env.OPENCODE_VOICE2TEXT_END_WINDOW_SIZE, DEFAULT_END_WINDOW_SIZE),
485
+ maxDurationSeconds: num(merged.maxDurationSeconds ?? env.OPENCODE_VOICE2TEXT_MAX_DURATION_SECONDS, 180),
486
+ appendTrailingSpace: bool(merged.appendTrailingSpace ?? env.OPENCODE_VOICE2TEXT_APPEND_TRAILING_SPACE, true),
487
+ rate: num(merged.rate ?? env.OPENCODE_VOICE2TEXT_SAMPLE_RATE, DEFAULT_RATE),
488
+ bits: num(merged.bits ?? env.OPENCODE_VOICE2TEXT_BITS, DEFAULT_BITS),
489
+ channels: num(merged.channels ?? env.OPENCODE_VOICE2TEXT_CHANNELS, DEFAULT_CHANNELS),
490
+ providerConfig: {
491
+ endpoint: str(merged.endpoint ?? env.OPENCODE_VOICE2TEXT_ENDPOINT, DEFAULT_ENDPOINT),
492
+ appId: str(merged.appId ?? env.OPENCODE_VOICE2TEXT_APP_ID),
493
+ accessToken: str(merged.accessToken ?? env.OPENCODE_VOICE2TEXT_ACCESS_TOKEN),
494
+ resourceId: str(merged.resourceId ?? env.OPENCODE_VOICE2TEXT_RESOURCE_ID, DEFAULT_RESOURCE_ID),
495
+ },
496
+ }
497
+
498
+ return config
499
+ }
500
+
501
+ const volcengineProvider: VoiceProvider = {
502
+ id: "volcengine",
503
+ displayName: "Volcengine ASR",
504
+ configFileFields: ["provider", "appId", "accessToken", "resourceId", "endpoint"],
505
+ validateConfig(config) {
506
+ if (!config.providerConfig.appId || !config.providerConfig.accessToken || !config.providerConfig.resourceId) {
507
+ return `Missing ${this.displayName} config. Fill ${configPathLabel()} with ${this.configFileFields.join(", ")}.`
508
+ }
509
+ return undefined
510
+ },
511
+ createRecognition(config, callbacks) {
512
+ return createVolcengineRecognition(config, callbacks)
513
+ },
514
+ }
515
+
516
+ const providers: Record<string, VoiceProvider> = {
517
+ [volcengineProvider.id]: volcengineProvider,
518
+ }
519
+
520
+ function getProvider(config: Voice2TextConfig): VoiceProvider {
521
+ const provider = providers[config.provider]
522
+ if (!provider) {
523
+ throw new Error(
524
+ `Unsupported provider '${config.provider}'. Available providers: ${Object.keys(providers).join(", ")}.`,
525
+ )
526
+ }
527
+ return provider
528
+ }
529
+
530
+ function buildVolcengineRequest(config: Voice2TextConfig) {
531
+ const audio: Record<string, unknown> = {
532
+ format: "pcm",
533
+ codec: "raw",
534
+ rate: config.rate,
535
+ bits: config.bits,
536
+ channel: config.channels,
537
+ }
538
+
539
+ if (config.language) {
540
+ audio.language = config.language
541
+ }
542
+
543
+ return {
544
+ user: {
545
+ uid: os.userInfo().username,
546
+ did: os.hostname(),
547
+ platform: process.platform === "darwin" ? "macOS" : process.platform,
548
+ sdk_version: "opencode-plugin",
549
+ app_version: "opencode-voice2text",
550
+ },
551
+ audio,
552
+ request: {
553
+ model_name: "bigmodel",
554
+ enable_itn: true,
555
+ enable_punc: true,
556
+ enable_ddc: false,
557
+ result_type: "full",
558
+ show_utterances: true,
559
+ end_window_size: config.endWindowSize,
560
+ },
561
+ }
562
+ }
563
+
564
+ function getStableText(data: any) {
565
+ const utterances = Array.isArray(data?.result?.utterances) ? data.result.utterances : []
566
+ return utterances
567
+ .filter((item: any) => item && item.definite && typeof item.text === "string" && item.text.trim())
568
+ .map((item: any) => item.text)
569
+ .join("")
570
+ .trim()
571
+ }
572
+
573
+ function createRecorder(config: Voice2TextConfig, onChunk: (chunk: Buffer) => Promise<void> | void): RecorderSession {
574
+ const child = spawn(
575
+ "rec",
576
+ [
577
+ "-q",
578
+ "-t",
579
+ "raw",
580
+ "-r",
581
+ String(config.rate),
582
+ "-c",
583
+ String(config.channels),
584
+ "-b",
585
+ String(config.bits),
586
+ "-e",
587
+ "signed-integer",
588
+ "-",
589
+ ],
590
+ { stdio: ["ignore", "pipe", "pipe"] },
591
+ )
592
+
593
+ let stderr = ""
594
+ let stopRequested = false
595
+ let finished = false
596
+ let streamError: Error | undefined
597
+ let writeChain = Promise.resolve()
598
+
599
+ child.stdout?.on("data", (chunk: Buffer) => {
600
+ writeChain = writeChain.then(async () => {
601
+ if (streamError) return
602
+ try {
603
+ await onChunk(chunk)
604
+ } catch (error) {
605
+ streamError = error instanceof Error ? error : new Error(String(error))
606
+ stopRequested = true
607
+ child.kill("SIGINT")
608
+ }
609
+ })
610
+ })
611
+
612
+ child.stderr?.on("data", (chunk) => {
613
+ stderr += chunk.toString()
614
+ })
615
+
616
+ const timer = setTimeout(() => {
617
+ stopRequested = true
618
+ child.kill("SIGINT")
619
+ }, config.maxDurationSeconds * 1000)
620
+
621
+ const done = new Promise<void>((resolve, reject) => {
622
+ child.on("error", (error: NodeJS.ErrnoException) => {
623
+ clearTimeout(timer)
624
+ finished = true
625
+ reject(error?.code === "ENOENT" ? new Error(installHint()) : error)
626
+ })
627
+
628
+ child.on("close", async (code, signal) => {
629
+ clearTimeout(timer)
630
+ finished = true
631
+ await writeChain
632
+
633
+ if (streamError) {
634
+ reject(streamError)
635
+ return
636
+ }
637
+
638
+ if (code === 0 || signal === "SIGINT" || stopRequested) {
639
+ resolve()
640
+ return
641
+ }
642
+
643
+ reject(new Error(stderr.trim() || `Recording failed with code ${code ?? "unknown"}`))
644
+ })
645
+ })
646
+
647
+ return {
648
+ done,
649
+ stop() {
650
+ if (finished || child.killed) return
651
+ stopRequested = true
652
+ child.kill("SIGINT")
653
+ },
654
+ }
655
+ }
656
+
657
+ async function createVolcengineRecognition(
658
+ config: Voice2TextConfig,
659
+ callbacks: { onStableText?: (text: string) => Promise<void> },
660
+ ): Promise<RecognitionSession> {
661
+ const client = new WebSocketBinaryClient(config.providerConfig.endpoint, {
662
+ "X-Api-App-Key": config.providerConfig.appId,
663
+ "X-Api-Access-Key": config.providerConfig.accessToken,
664
+ "X-Api-Resource-Id": config.providerConfig.resourceId,
665
+ "X-Api-Connect-Id": randomUUID(),
666
+ })
667
+
668
+ let lastText = ""
669
+ let stableText = ""
670
+ let closed = false
671
+
672
+ const responseHeaders = await client.connect()
673
+ const requestPayload = Buffer.from(JSON.stringify(buildVolcengineRequest(config)), "utf8")
674
+ client.sendBinary(buildClientMessage(MESSAGE_TYPE_FULL_CLIENT_REQUEST, 0x0, requestPayload, SERIALIZATION_JSON))
675
+ parseServerMessage(await client.receiveBinary())
676
+
677
+ const receiveLoop = (async (): Promise<TranscriptResult> => {
678
+ while (true) {
679
+ const response = parseServerMessage(await client.receiveBinary(30000))
680
+ const nextText = appendableText(response.data?.result?.text)
681
+ if (nextText) lastText = nextText
682
+
683
+ const nextStableText = appendableText(getStableText(response.data))
684
+ const stableDelta = diffSuffix(stableText, nextStableText)
685
+ if (stableDelta) {
686
+ stableText = nextStableText
687
+ await callbacks.onStableText?.(stableDelta)
688
+ }
689
+
690
+ if (response.flags === 0x3) {
691
+ return {
692
+ text: lastText,
693
+ stableText,
694
+ logId: responseHeaders["x-tt-logid"] || "",
695
+ }
696
+ }
697
+ }
698
+ })()
699
+
700
+ let sendChain = Promise.resolve()
701
+
702
+ return {
703
+ write(chunk: Buffer) {
704
+ if (closed || chunk.length === 0) return
705
+ sendChain = sendChain.then(() => {
706
+ client.sendBinary(buildClientMessage(MESSAGE_TYPE_AUDIO_ONLY_REQUEST, 0x0, chunk, SERIALIZATION_NONE))
707
+ })
708
+ },
709
+ async finish(finalChunk?: Buffer) {
710
+ if (closed) return receiveLoop
711
+ closed = true
712
+
713
+ if (finalChunk && finalChunk.length > 0) {
714
+ sendChain = sendChain.then(() => {
715
+ client.sendBinary(buildClientMessage(MESSAGE_TYPE_AUDIO_ONLY_REQUEST, 0x0, finalChunk, SERIALIZATION_NONE))
716
+ })
717
+ }
718
+
719
+ await sendChain
720
+ client.sendBinary(buildEmptyLastAudioMessage())
721
+
722
+ try {
723
+ return await receiveLoop
724
+ } finally {
725
+ await client.close()
726
+ }
727
+ },
728
+ async abort() {
729
+ if (closed) return
730
+ closed = true
731
+ await client.close()
732
+ },
733
+ }
734
+ }
735
+
736
+ async function appendTranscript(api: TuiPluginApi, config: Voice2TextConfig, text: string) {
737
+ const nextText = config.appendTrailingSpace ? `${text} ` : text
738
+ await api.client.tui.appendPrompt({ text: nextText })
739
+ }
740
+
741
+ function setStatus(api: TuiPluginApi, status: string, message: string) {
742
+ api.kv.set(STATUS_KEY, status)
743
+ api.kv.set(STATUS_MESSAGE_KEY, message)
744
+ }
745
+
746
+ function statusView(api: TuiPluginApi) {
747
+ return () => {
748
+ const status = createMemo(() => api.kv.get<string>(STATUS_KEY, "idle"))
749
+ const message = createMemo(() => api.kv.get<string>(STATUS_MESSAGE_KEY, ""))
750
+ const tone = createMemo(() => {
751
+ if (status() === "recording") return api.theme.current.warning
752
+ if (status() === "transcribing") return api.theme.current.accent
753
+ return api.theme.current.textMuted
754
+ })
755
+ const label = createMemo(() => (status() === "recording" ? "REC" : "ASR"))
756
+
757
+ return (
758
+ <Show when={status() !== "idle"}>
759
+ <box flexDirection="row" gap={1}>
760
+ <text fg={tone()}>
761
+ <b>{label()}</b>
762
+ </text>
763
+ <Show when={message()}>
764
+ <text fg={api.theme.current.textMuted}>{message()}</text>
765
+ </Show>
766
+ </box>
767
+ </Show>
768
+ )
769
+ }
770
+ }
771
+
772
+ const tui: TuiPlugin = async (api, options) => {
773
+ const config = await loadConfig((options ?? {}) as Voice2TextOptions)
774
+ const provider = getProvider(config)
775
+
776
+ let phase: "idle" | "recording" | "transcribing" = "idle"
777
+ let active:
778
+ | {
779
+ recorder: RecorderSession
780
+ stream: RecognitionSession
781
+ pending: Buffer
782
+ chunkBytes: number
783
+ }
784
+ | undefined
785
+
786
+ setStatus(api, "idle", "")
787
+
788
+ api.slots.register({
789
+ order: 50,
790
+ slots: {
791
+ home_prompt_right: statusView(api),
792
+ session_prompt_right: statusView(api),
793
+ },
794
+ })
795
+
796
+ const toast = (message: string, variant: "info" | "warning" | "error" = "info") => {
797
+ api.ui.toast({ title: "Voice2Text", message, variant, duration: 2500 })
798
+ }
799
+
800
+ const startRecording = async () => {
801
+ if (phase !== "idle") return
802
+
803
+ phase = "recording"
804
+ setStatus(api, "recording", `listening... press ${config.commandKeybind} to stop`)
805
+
806
+ try {
807
+ await ensureRuntimeSupport()
808
+
809
+ const configError = provider.validateConfig(config)
810
+ if (configError) {
811
+ phase = "idle"
812
+ setStatus(api, "idle", "")
813
+ toast(configError, "warning")
814
+ return
815
+ }
816
+
817
+ const stream = await provider.createRecognition(config, {
818
+ onStableText: async (text) => {
819
+ const next = appendableText(text)
820
+ if (!next) return
821
+ await appendTranscript(api, config, next)
822
+ },
823
+ })
824
+
825
+ const session = {
826
+ stream,
827
+ pending: Buffer.alloc(0),
828
+ chunkBytes: Math.max(1, Math.floor((config.rate * config.channels * (config.bits / 8) * config.chunkMs) / 1000)),
829
+ recorder: undefined as unknown as RecorderSession,
830
+ }
831
+
832
+ const flushPending = async () => {
833
+ while (session.pending.length >= session.chunkBytes) {
834
+ const chunk = session.pending.subarray(0, session.chunkBytes)
835
+ session.pending = session.pending.subarray(session.chunkBytes)
836
+ session.stream.write(chunk)
837
+ }
838
+ }
839
+
840
+ session.recorder = createRecorder(config, async (chunk) => {
841
+ session.pending = Buffer.concat([session.pending, chunk])
842
+ await flushPending()
843
+ })
844
+
845
+ active = session
846
+ } catch (error) {
847
+ phase = "idle"
848
+ setStatus(api, "idle", "")
849
+ toast(error instanceof Error ? error.message : String(error), "error")
850
+ }
851
+ }
852
+
853
+ const stopRecording = async () => {
854
+ if (phase !== "recording" || !active) return
855
+
856
+ const current = active
857
+ active = undefined
858
+ phase = "transcribing"
859
+ setStatus(api, "transcribing", "stopping...")
860
+
861
+ try {
862
+ current.recorder.stop()
863
+ await current.recorder.done
864
+ const finalChunk = current.pending.length > 0 ? current.pending : undefined
865
+ const result = await current.stream.finish(finalChunk)
866
+ const tail = diffSuffix(result.stableText, appendableText(result.text))
867
+
868
+ if (tail) {
869
+ await appendTranscript(api, config, tail)
870
+ }
871
+
872
+ void result.logId
873
+ } catch (error) {
874
+ await current.stream.abort().catch(() => undefined)
875
+ toast(error instanceof Error ? error.message : String(error), "error")
876
+ } finally {
877
+ phase = "idle"
878
+ setStatus(api, "idle", "")
879
+ }
880
+ }
881
+
882
+ api.command.register(() => [
883
+ {
884
+ title: "Toggle voice input",
885
+ value: "voice2text.toggle",
886
+ description: `Stream microphone audio to ${providerName(config.provider)} and append recognized text to the prompt`,
887
+ keybind: config.commandKeybind,
888
+ slash: { name: "voice2text", aliases: ["voice"] },
889
+ hidden: false,
890
+ onSelect: () => {
891
+ if (phase === "transcribing") {
892
+ toast("Still transcribing the previous recording.", "warning")
893
+ return
894
+ }
895
+
896
+ if (phase === "recording") {
897
+ void stopRecording()
898
+ return
899
+ }
900
+
901
+ void startRecording()
902
+ },
903
+ },
904
+ ])
905
+
906
+ api.lifecycle.onDispose(() => {
907
+ active?.recorder.stop()
908
+ void active?.stream.abort().catch(() => undefined)
909
+ setStatus(api, "idle", "")
910
+ })
911
+ }
912
+
913
+ const plugin: TuiPluginModule = {
914
+ id: "opencode.voice2text",
915
+ tui,
916
+ }
917
+
918
+ export default plugin