import{n as e}from"./chunk-DR8-3Aex.js";import{f as t,s as n,u as r}from"./envUtils-BWeoiL4Y.js";import{l as i,p as a}from"./debug-otxXY3j-.js";import{o,s}from"./log-DSV4Ht5l.js";import{i as c,o as l}from"./platform-mh9ypxS8.js";import{readFile as u}from"fs/promises";import{spawn as d,spawnSync as f}from"child_process";function p(){return O??(O=(async()=>{let e=Date.now(),t=await import(`./src-DzH9IdOo.js`);return t.isNativeAudioAvailable(),D=t,a(`[voice] audio-capture-napi loaded in ${Date.now()-e}ms`),t})()),O}function m(e){return f(e,[`--version`],{stdio:`ignore`,timeout:3e3}).error===void 0}function h(){return N??(N=new Promise(e=>{let t=d(`arecord`,[`-f`,`S16_LE`,`-r`,String(k),`-c`,String(A),`-t`,`raw`,`/dev/null`],{stdio:[`ignore`,`ignore`,`pipe`]}),n=``;t.stderr?.on(`data`,e=>{n+=e.toString()});let r=setTimeout((e,t)=>{e.kill(`SIGTERM`),t({ok:!0,stderr:``})},150,t,e);t.once(`close`,t=>{clearTimeout(r),e({ok:t===0,stderr:n.trim()})}),t.once(`error`,()=>{clearTimeout(r),e({ok:!1,stderr:`arecord: command not found`})})})),N}function g(){N=null}function _(){return P??(P=u(`/proc/asound/cards`,`utf8`).then(e=>{let t=e.trim();return t!==``&&!t.includes(`no soundcards`)},()=>!1)),P}function v(){P=null}function y(){if(process.platform===`darwin`)return m(`brew`)?{cmd:`brew`,args:[`install`,`sox`],displayCommand:`brew install sox`}:null;if(process.platform===`linux`){if(m(`apt-get`))return{cmd:`sudo`,args:[`apt-get`,`install`,`-y`,`sox`],displayCommand:`sudo apt-get install sox`};if(m(`dnf`))return{cmd:`sudo`,args:[`dnf`,`install`,`-y`,`sox`],displayCommand:`sudo dnf install sox`};if(m(`pacman`))return{cmd:`sudo`,args:[`pacman`,`-S`,`--noconfirm`,`sox`],displayCommand:`sudo pacman -S sox`}}return null}async function b(){if((await p()).isNativeAudioAvailable())return{available:!0,missing:[],installCommand:null};if(process.platform===`win32`)return{available:!1,missing:[`Voice mode requires the native audio module (not loaded)`],installCommand:null};if(process.platform===`linux`&&m(`arecord`))return{available:!0,missing:[],installCommand:null};let e=[];m(`rec`)||e.push(`sox (rec command)`);let t=e.length>0?y():null;return{available:e.length===0,missing:e,installCommand:t?.displayCommand??null}}async function x(){return(await p()).isNativeAudioAvailable()?await C(e=>{},()=>{},{silenceDetection:!1})?(E(),!0):!1:!0}async function S(){if(t()||r(process.env.CLAUDE_CODE_REMOTE))return{available:!1,reason:`Voice mode requires microphone access, but no audio device is available in this environment.

To use voice mode, run Claude Code locally instead.`};if((await p()).isNativeAudioAvailable())return{available:!0,reason:null};if(process.platform===`win32`)return{available:!1,reason:`Voice recording requires the native audio module, which could not be loaded.`};let e=`Voice mode could not access an audio device in WSL.

WSL2 with WSLg (Windows 11) provides audio via PulseAudio — if you are on Windows 10 or WSL1, run Claude Code in native Windows instead.`;if(process.platform===`linux`&&m(`arecord`)){let t=await h();if(t.ok)return{available:!0,reason:null};if(c()===`wsl`)return{available:!1,reason:e};a(`[voice] arecord probe failed: ${t.stderr}`)}if(!m(`rec`)){if(c()===`wsl`)return{available:!1,reason:e};let t=y();return{available:!1,reason:t?`Voice mode requires SoX for audio recording. Install it with: ${t.displayCommand}`:`Voice mode requires SoX for audio recording. Install SoX manually:
  macOS: brew install sox
  Ubuntu/Debian: sudo apt-get install sox
  Fedora: sudo dnf install sox`}}return{available:!0,reason:null}}async function C(e,t,n){a(`[voice] startRecording called, platform=${process.platform}`);let r=await p(),i=r.isNativeAudioAvailable()&&(process.platform!==`linux`||await _()),o=n?.silenceDetection!==!1;return i&&((I||r.isNativeRecordingActive())&&(r.stopNativeRecording(),I=!1),r.startNativeRecording(t=>{e(t)},()=>{o&&(I=!1,t())}))?(I=!0,!0):process.platform===`win32`?(a(`[voice] Windows native recording unavailable, no fallback`),!1):process.platform===`linux`&&m(`arecord`)&&(await h()).ok?T(e,t):w(e,t,n)}function w(e,t,n){let r=n?.silenceDetection!==!1,i=[`-q`,`--buffer`,`1024`,`-t`,`raw`,`-r`,String(k),`-e`,`signed`,`-b`,`16`,`-c`,String(A),`-`];r&&i.push(`silence`,`1`,`0.1`,M,`1`,j,M);let a=d(`rec`,i,{stdio:[`pipe`,`pipe`,`pipe`]});return F=a,a.stdout?.on(`data`,t=>{e(t)}),a.stderr?.on(`data`,()=>{}),a.on(`close`,()=>{F=null,t()}),a.on(`error`,e=>{s(e),F=null,t()}),!0}function T(e,t){let n=d(`arecord`,[`-f`,`S16_LE`,`-r`,String(k),`-c`,String(A),`-t`,`raw`,`-q`,`-`],{stdio:[`pipe`,`pipe`,`pipe`]});return F=n,n.stdout?.on(`data`,t=>{e(t)}),n.stderr?.on(`data`,()=>{}),n.on(`close`,()=>{F=null,t()}),n.on(`error`,e=>{s(e),F=null,t()}),!0}function E(){if(I&&D){D.stopNativeRecording(),I=!1;return}F&&(F.kill(`SIGTERM`),F=null)}var D,O,k,A,j,M,N,P,F,I;e((()=>{i(),n(),o(),l(),D=null,O=null,k=16e3,A=1,j=`2.0`,M=`3%`,N=null,P=null,F=null,I=!1}))();export{v as _resetAlsaCardsForTesting,g as _resetArecordProbeForTesting,S as checkRecordingAvailability,b as checkVoiceDependencies,x as requestMicrophonePermission,C as startRecording,E as stopRecording};