@neuvybe/jarvis 0.63.0 → 0.63.1
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/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -399,7 +399,7 @@ Rules:
|
|
|
399
399
|
Output exactly one line of strict JSON and nothing else:
|
|
400
400
|
{"verdict":"done"|"mid_thought"|"hold_floor","confidence":<number 0..1>}
|
|
401
401
|
confidence is your certainty in the verdict.
|
|
402
|
-
`,Qs=class extends Error{status;constructor(e,r){super(e),this.status=r,this.name="TurnEvaluatorError"}},Fu=class{key;fetchImpl;timeoutMs;constructor(e,r=fetch,i=wQe){this.key=e,this.fetchImpl=r,this.timeoutMs=i}async evaluate(e,r){let i={model:BQe,max_tokens:SQe,temperature:0,stop_sequences:DQe,system:_Qe,messages:[{role:"user",content:TQe(e)},{role:"assistant",content:j5}]},n;try{n=await this.fetchImpl(QQe,{method:"POST",headers:{"x-api-key":this.key,"anthropic-version":vQe,"content-type":"application/json"},body:JSON.stringify(i),signal:AbortSignal.any([r,AbortSignal.timeout(this.timeoutMs)])})}catch(o){throw o instanceof Error&&(o.name==="TimeoutError"||o.name==="AbortError")?o:new Qs(Jt(o,this.key))}if(!n.ok)throw new Qs(`turn evaluator request failed (HTTP ${n.status})`,n.status);let s;try{s=await n.json()}catch{throw new Qs("turn evaluator response body was not JSON")}return RQe(s)}}});function $N(t){return t===void 0?qI:{id:qI.id,engineVoice:{...qI.engineVoice,"elevenlabs-flash":{kind:"preset",voiceId:t},"elevenlabs-v3":{kind:"preset",voiceId:t}}}}var uf,qI,PN=v(()=>{"use strict";uf="21m00Tcm4TlvDq8ikWAM",qI={id:"jarvis-primary",engineVoice:{"elevenlabs-flash":{kind:"preset",voiceId:uf},"elevenlabs-v3":{kind:"preset",voiceId:uf}}}});var jI,z5=v(()=>{"use strict";Rt();jI=class{turnId;openedAtMs;log;terminal=!1;heldOpen=!1;asideCommit=!1;silenceReason=null;dispatched=!1;acts={};commandStarted=!1;wordlessCuts=0;parkedAtMs=null;decider=null;silenceOnsetAtMs=null;commitAtMs=null;asrFinalAtMs=null;transcriptLength=null;firstDeltaAtMs=null;firstAudioAtMs=null;constructor(e,r,i=te){this.turnId=e,this.openedAtMs=r,this.log=i}endpointerCommitted(e,r){this.decider===null&&(this.decider=e,this.silenceOnsetAtMs=r)}smartTurnResolved(e,r,i){this.log.debug("smart-turn P(complete)",{turnId:this.turnId,probability:e,inferenceMs:r,outcome:i})}smartTurnDegraded(e,r){this.log.debug("smart-turn DEGRADED to baseline - inference failed; this turn endpoints on baseline timers only",{turnId:this.turnId,inferenceMs:e,error:r instanceof Error?r.message:String(r)})}strongHoldRecognized(e){this.log.debug("lexical STRONG hold recognized - completeness vetoed, silence budget biases long",{turnId:this.turnId,cue:e})}strongHoldClearDebounced(e){this.log.debug("strong hold clear debounced - cue absent from one re-decode partial; veto holds pending a second",{turnId:this.turnId,cue:e})}heldEntered(e){this.heldOpen=!0,this.log.debug("floor-held mode entered - silence budgets escalate, stop cap suspended",{turnId:this.turnId,cue:e})}heldLadderRearmed(e){this.log.debug("held silence budget re-armed at the next ladder step",{turnId:this.turnId,budgetMs:e})}heldExited(e){this.heldOpen=!1,this.log.debug("floor-held mode exited",{turnId:this.turnId,reason:e})}evaluatorFired(e){this.log.debug("semantic evaluator fired - smart-turn resolved in a gated band during a live silence episode",{turnId:this.turnId,band:e})}evaluatorResolved(e,r,i,n){this.log.debug("semantic evaluator resolved",{turnId:this.turnId,verdict:e,confidence:r,latencyMs:i,outcome:n})}evaluatorFailed(e,r){this.log.debug("semantic evaluator failed - no signal; this episode endpoints as armed",{turnId:this.turnId,latencyMs:e,error:r instanceof Error?r.message:String(r)})}committed(e,r){this.commitAtMs===null&&(r==="ptt"&&this.heldOpen&&this.heldExited("ptt"),this.commitAtMs=e,r==="ptt"&&(this.decider??="ptt"))}asrFinalResolved(e,r){this.asrFinalAtMs===null&&(this.asrFinalAtMs=e,this.transcriptLength=r)}firstReasonerDelta(e){this.firstDeltaAtMs??=e}firstTtsAudio(e){this.firstAudioAtMs??=e}markAsideCommit(){this.asideCommit=!0}silence(e){this.silenceReason=e}asideWakeword(){this.log.debug("aside wakeword - the lexical gate opened; the utterance dispatches for the model's judgment",{turnId:this.turnId})}markDispatched(){this.dispatched=!0}actSettled(e){this.acts[e]=(this.acts[e]??0)+1}toolStarted(){this.commandStarted=!0}parked(e){this.parkedAtMs=e,this.log.debug("voice turn parked - audio cut; the reply waits for the barging utterance's first word or its blank verdict",{turnId:this.turnId})}resumed(e,r,i=0){this.wordlessCuts+=1;let n=this.parkedAtMs===null?null:e-this.parkedAtMs;this.parkedAtMs=null,this.log.debug("voice turn resumed - the barge carried no words; the reply continues",{turnId:this.turnId,verdict:r,parkedMs:n,respokenCharacters:i})}actCounts(){return{...this.acts}}completed(e,r,i=!1){if(this.terminal||(this.terminal=!0,!this.dispatched))return null;let n=this.firstDeltaAtMs===null?"lost":"completed";return i?this.hold(e,n,{},r):(this.summary(e,n,{},r),n)}cancelled(e,r,i=!1,n=!1){if(this.terminal||(this.terminal=!0,!this.dispatched||r==="client_shutdown"))return null;let s=n?"detached":this.firstAudioAtMs!==null||this.commandStarted?"barged":"superseded";return i?this.hold(e,s,{},void 0,n):(this.summary(e,s,{}),s)}failed(e,r,i=!1){return this.terminal||(this.terminal=!0,!this.dispatched)?null:i?this.hold(e,"failed",{reason:r}):(this.summary(e,"failed",{reason:r}),"failed")}hold(e,r,i,n,s=!1){let o=!1;return{fallback:r,commandStarted:this.commandStarted,detachedJob:s,acts:this.actCounts(),emit:(a,c)=>{o||(o=!0,this.summary(e,a,i,n,c))}}}summary(e,r,i,n,s){this.log.debug("voice turn summary",{turnId:this.turnId,outcome:r,...i,decider:this.decider,disposition:"dispatched",...this.asideCommit&&{floor:"aside"},...this.silenceReason!==null&&{silence:this.silenceReason},...Object.keys(this.acts).length>0&&{acts:{...this.acts}},...this.wordlessCuts>0&&{wordlessCuts:this.wordlessCuts},...s!==void 0&&{playedMs:s.playedMs,spokenCharacters:s.spokenCharacters,characters:s.characters},silenceToCommitMs:this.spanMs(this.silenceOnsetAtMs,this.commitAtMs),commitToFinalMs:this.spanMs(this.commitAtMs,this.asrFinalAtMs),finalToFirstDeltaMs:this.spanMs(this.asrFinalAtMs,this.firstDeltaAtMs),firstDeltaToFirstAudioMs:this.spanMs(this.firstDeltaAtMs,this.firstAudioAtMs),totalMs:e-this.openedAtMs,transcriptLength:this.transcriptLength,...n!==void 0&&n.rounds>0&&{toolRounds:n.rounds,toolMs:n.totalMs}})}asideAbsorbed(e){this.terminal||(this.terminal=!0,this.log.debug("voice turn absorbed in the aside - no reply spoken",{turnId:this.turnId,decider:this.decider,disposition:"absorbed",floor:"aside",silenceToCommitMs:this.spanMs(this.silenceOnsetAtMs,this.commitAtMs),commitToFinalMs:this.spanMs(this.commitAtMs,this.asrFinalAtMs),totalMs:e-this.openedAtMs,transcriptLength:this.transcriptLength}))}blank(e){this.terminal||(this.terminal=!0,this.log.debug("voice turn blank - terminated silently (no transcribed speech)",{turnId:this.turnId,decider:this.decider,silenceToCommitMs:this.spanMs(this.silenceOnsetAtMs,this.commitAtMs),commitToFinalMs:this.spanMs(this.commitAtMs,this.asrFinalAtMs),totalMs:e-this.openedAtMs,transcriptLength:this.transcriptLength}))}spanMs(e,r){return e===null||r===null?null:r-e}}});function UQe(t){return LQe.test(t)}function Z5(t){return t instanceof ss?"channel_violation":"turn_failed"}function FQe(t,e,r){return r>e?Math.max(e,aJ(t,r-1)):e}var HN,W5,J5,NQe,MQe,LQe,zI,X5=v(()=>{"use strict";tv();Fm();ld();kI();z5();HN=16e3,W5="pcm_s16le",J5=HN*2/1e3,NQe="en",MQe=["Jarvis"],LQe=/\bjarvis\b/i;zI=class{deps;asrStream;ttsStream=null;reasonAbort=new AbortController;releases=new Set;recordStartupFailure;phase="capturing";settled=!1;finalizing=!1;lastFrameAtMs;timeline;speech=[];openSpeech=null;openSeeded=!1;charsPushed=0;audioBytes=0;sawFirstAudio=!1;running=null;dispatched=!1;parked=!1;wakeParked=null;heldDelta=null;loopDone=!1;cutActId=null;cutPortion;resumeVerdict=null;actText=new Map;tail="none";tailHeld;respokeFrom;cuts=[];portion={acts:0,charsPushed:0,audioBytes:0};partialWordsReported=!1;deliveryAct;deliveryPortion;pendingDelivery=new Map;openDeliveries=new Set;constructor(e){this.deps=e,this.lastFrameAtMs=e.startMs,this.timeline=new jI(e.turnId,e.clock.now()),e.controller.attachTelemetry?.(this.timeline),e.controller.setPartialStability?.(e.asrEngine.partialStability??"stable"),this.asrStream=e.asrEngine.open({sampleRate:HN,encoding:W5,language:NQe,biasTerms:MQe,emitPartials:!0}),this.asrStream.onTranscript(r=>this.handleTranscript(r)),this.asrStream.onError(r=>this.asrFailed(r)),e.controller.onCommit(()=>this.finalize(this.lastFrameAtMs,"controller")),e.emit({type:"state",turnId:e.turnId,state:"processing"})}sourceLost(){if(!this.dispatched){this.cancel("client_shutdown");return}this.releaseResource(()=>this.deps.controller.dispose()),this.releaseResource(()=>this.asrStream.abort())}stopOutput(e){if(this.deliveryPortion?.recipient.sessionId!==e)return;let r=this.ttsStream;this.ttsStream=null,r&&this.releaseResource(()=>r.cancel()),this.deps.segmenter.flush()}endDelivery(e){this.deps.delivery?.end(this.deliveryPortion,e)}failDeliveries(e){let r=new Set(this.openDeliveries);if(e==="failed")for(let i of this.deliveryPortion?.segments??[])r.add(i.act);for(let i of r)this.deps.delivery?.finishAct(i,e);this.openDeliveries.clear()}get turnId(){return this.deps.turnId}isParked(){return this.parked}hasCommitted(){return this.finalizing}pushFrame(e,r){this.deps.inputActive?.()===!1||this.phase!=="capturing"||this.settled||(this.lastFrameAtMs=r,this.asrStream.pushAudio(e),this.deps.controller.onAudioFrame(e))}endAudio(e){this.finalize(e,"ptt")}cancel(e){if(this.settled)return;this.settled=!0,this.phase="cancelled",this.releaseResource(()=>this.deps.controller.dispose()),this.reasonAbort.abort(e==="client_shutdown"?void 0:new Bl),this.releaseResource(()=>this.asrStream.abort());let r=this.ttsStream;this.ttsStream=null,r&&this.releaseResource(()=>r.cancel());let i=this.heldDelta;if(this.heldDelta=null,this.releaseParked(),i?.type==="text"&&this.deliveryAct&&this.deps.delivery.append(this.deliveryAct,i.text),this.failDeliveries("cancelled"),this.endDelivery("cut"),e!=="client_shutdown"&&!this.deps.delivery){if(this.audioBytes===this.portion.audioBytes)for(let o of this.speech.slice(this.portion.acts))o.preamble!==!0&&this.deps.reasoner.settleSpeech(o.actId,{kind:"unspoken"});i?.type==="act.start"&&i.channel==="speech"&&i.preamble!==!0&&this.deps.reasoner.settleSpeech(i.actId,{kind:"unspoken"})}i?.type==="text"&&this.openSpeech!==null&&!this.openSeeded&&(this.openSpeech.characters+=i.text.length);let n=e!=="client_shutdown"&&this.turnDetached(),s=this.terminalRecord();for(let o of this.cuts)this.trySettleCut(o,!0);this.noteTerminal(this.timeline.cancelled(this.deps.clock.now(),e,s.hold,n),s),this.actText.clear(),this.deps.onComplete()}park(){if(this.settled||this.parked||!this.dispatched)return!1;let e=this.deliveryPortion;this.cutPortion=this.deps.delivery?.end(e,"cut")===!0?e:void 0;let r=this.ttsStream;return this.ttsStream=null,r&&this.releaseResource(()=>r.cancel()),this.deps.segmenter.flush(),this.cutActId=this.openSpeech?.actId??null,this.cuts.push({from:this.portion.acts,to:this.speech.length,charsPushedFrom:this.portion.charsPushed,audioBytesFrom:this.portion.audioBytes,charsPushed:this.charsPushed,audioBytes:this.audioBytes,openActId:this.cutActId,resumed:!1,settled:!1}),this.loopDone&&this.cutPortion===void 0?(this.finishDone(),!0):(this.parked=!0,this.timeline.parked(this.deps.clock.now()),!0)}resume(e){this.tail!=="parked"&&(!this.parked||this.settled)||(this.resumeVerdict??=e,!this.awaitsCutReport()&&this.completeResume(!1))}cutReported(){return!this.awaitingCutReport()||this.awaitsCutReport()?!1:(this.completeResume(!1),!0)}resumeUnreported(){this.awaitingCutReport()&&this.completeResume(!0)}awaitingCutReport(){return this.resumeVerdict!==null&&(this.tail==="parked"||this.parked&&!this.settled)}completeResume(e){this.tail==="parked"?this.finishTailResume(e):this.finishResume(e)}awaitsCutReport(){return this.cutPortion!==void 0&&this.deps.delivery?.awaitsReport(this.cutPortion)===!0}finishResume(e){let r=this.resumeVerdict??"no_words";this.resumeVerdict=null,this.parked=!1;let i=this.cuts.at(-1);i!==void 0&&(i.resumed=!0,this.portion={acts:i.to,charsPushed:i.charsPushed,audioBytes:i.audioBytes}),this.deps.delivery?.resumed(this.deliveryPortion),this.deps.emit({type:"state",turnId:this.deps.turnId,state:"responding"});let n=this.respeak(e);this.settled||(this.timeline.resumed(this.deps.clock.now(),r,n),i!==void 0&&this.trySettleCut(i),this.releaseParked())}respeak(e){let r=this.deps.delivery,i=this.cutPortion;return this.cutPortion=void 0,r===void 0||i===void 0?(r!==void 0&&(this.deliveryPortion=void 0),0):this.speakAgain(r,i,this.respeakParts(r,i,e))}respeakParts(e,r,i){return e.respeakPlan(r,i).map((n,s)=>{let o=this.actText.get(n.act)??"",a=s===0?FQe(o,n.from,n.heard):n.from;return{act:n.act,from:a,text:o.slice(a)}})}speakAgain(e,r,i){let n=i.length>0?e.respeak(this.deps.turnId,r,i):void 0;for(let o of this.actText.keys())o!==this.deliveryAct&&!i.some(a=>a.act===o)&&this.actText.delete(o);if(n===void 0)return this.deliveryPortion=void 0,0;this.deliveryPortion=n,this.cutActId=null;let s=0;try{for(let o of i){s+=o.text.length;for(let a of this.deps.segmenter.push(o.text))this.push(a,o.act);if(o.act!==this.deliveryAct)for(let a of this.deps.segmenter.flush())this.push(a,o.act)}}catch(o){this.tail==="speaking"?this.tailSpeechFailed():this.finishError("turn_failed",o)}return s}tailEligible(){return this.tail==="eligible"}isTailParked(){return this.tail==="parked"}tailDrained(){return this.tail==="eligible"&&this.deliveryPortion!==void 0&&this.deps.delivery?.drained(this.deliveryPortion)===!0}parkTail(){let e=this.deps.delivery,r=this.deliveryPortion;if(this.tail!=="eligible"&&this.tail!=="speaking"||!e||!r)return!1;if(this.tail==="speaking"){e.end(r,"cut");let i=this.ttsStream;this.ttsStream=null,i&&this.releaseResource(()=>i.cancel()),this.deps.segmenter.flush()}return this.cutPortion=r,this.tailHeld=e.detachHeld(r),this.tail="parked",this.timeline.parked(this.deps.clock.now()),!0}releaseTail(){this.tail!=="none"&&(this.tail==="speaking"&&this.endTailSpeech(),this.tail==="parked"&&this.placeTailHeld(this.lineHome(this.cutPortion)),this.endTail())}finishTailResume(e){let r=this.resumeVerdict??"no_words";this.resumeVerdict=null;let i=this.deps.delivery,n=this.cutPortion;if(this.cutPortion=void 0,n===void 0||!i.holds(n)){this.placeTailHeld(this.lineHome(n)),this.endTail();return}let s=this.respeakParts(i,n,e);if(s.length===0){this.timeline.resumed(this.deps.clock.now(),r,0),this.placeTailHeld(this.lineHome(n)),this.endTail();return}this.deps.emit({type:"state",turnId:this.deps.turnId,state:"responding"}),this.tail="speaking",this.respokeFrom=this.lineHome(n);let o=this.speakAgain(i,n,s);this.tail==="speaking"&&(i.resumed(n),this.timeline.resumed(this.deps.clock.now(),r,o),this.placeTailHeld(this.deliveryPortion),this.finishTailSpeech())}async finishTailSpeech(){let e=this.ttsStream,r=this.deliveryPortion,i=!1;if(e!==null)try{await e.end()}catch{i=!0}if(!(this.tail!=="speaking"||this.ttsStream!==e||this.deliveryPortion!==r)){if(i){this.tailSpeechFailed();return}this.ttsStream=null,this.deps.delivery?.end(r,"completed"),this.tail="eligible"}}tailSpeechFailed(){this.endTailSpeech(),this.endTail()}endTailSpeech(){let e=this.deps.delivery,r=this.deliveryPortion,i=this.ttsStream;this.ttsStream=null,i&&this.releaseResource(()=>i.cancel()),!(e===void 0||r===void 0)&&(e.end(r,"cut"),this.tailHeld??=e.detachHeld(r),this.placeTailHeld(this.lineHome(r)))}lineHome(e){let r=this.deps.delivery;return e===void 0||r===void 0||r.voiced(e)?e:this.respokeFrom??e}placeTailHeld(e){let r=this.tailHeld;this.tailHeld=void 0,r!==void 0&&this.deps.delivery?.hold(e,r.summary,r.count)}endTail(){this.tail="none",this.tailHeld=void 0,this.cutPortion=void 0,this.respokeFrom=void 0,this.resumeVerdict=null,this.actText.clear()}acceptCutReport(e){if(e.end!=="cut")return!1;let r=this.cuts.find(i=>i.report===void 0&&!i.settled);return r===void 0?!1:(r.report=e,this.trySettleCut(r),!0)}trySettleCut(e,r=!1){if(!(e.settled||e.report===void 0||this.parked||!e.resumed)&&!(!r&&e.openActId!==null&&this.openSpeech?.actId===e.openActId)){e.settled=!0;try{this.deps.onCutSettle?.({turnId:this.deps.turnId,ledger:this.cutLedger(e),report:e.report})}catch{}}}releaseParked(){this.parked=!1;let e=this.wakeParked;this.wakeParked=null,e?.()}untilUnparked(){return this.parked?new Promise(e=>{this.wakeParked=e}):Promise.resolve()}terminalRecord(){let e=this.deliveryPortion!==void 0,r=this.cuts.at(-1);return r!==void 0&&!r.settled&&!r.resumed?(r.settled=!0,{hold:this.deps.delivery?e:r.to>r.from,ledger:this.cutLedger(r),...r.report!==void 0&&{report:r.report}}):{hold:this.deps.delivery?e:this.speech.length>this.portion.acts,ledger:this.portionLedger()}}cutLedger(e){return{acts:this.speech.slice(e.from,e.to).map(r=>({...r})),charsPushed:e.charsPushed-e.charsPushedFrom,audioMs:(e.audioBytes-e.audioBytesFrom)/J5}}portionLedger(){return{acts:this.speech.slice(this.portion.acts).map(e=>({...e})),charsPushed:this.charsPushed-this.portion.charsPushed,audioMs:(this.audioBytes-this.portion.audioBytes)/J5}}noteWords(e){if(e==="partial"){if(this.partialWordsReported)return;this.partialWordsReported=!0}try{this.deps.onFirstWords?.(e)}catch{}}turnDetached(){try{return this.deps.turnDetached?.()??!1}catch{return!1}}async unwound(){for(await this.running;this.releases.size>0;)await Promise.allSettled([...this.releases])}releaseResource(e){try{let r=Promise.resolve(e()).catch(()=>{});this.releases.add(r),r.then(()=>this.releases.delete(r))}catch{}}handleTranscript(e){this.phase!=="capturing"||this.settled||e.isFinal||(this.deps.emit({type:"transcript.partial",turnId:this.deps.turnId,text:e.text}),this.deps.controller.onPartial(e.text),e.text.trim()!==""&&this.noteWords("partial"))}finalize(e,r){this.deps.inputActive?.()===!1||this.phase!=="capturing"||this.finalizing||this.settled||(this.finalizing=!0,this.timeline.committed(this.deps.clock.now(),r),this.releaseResource(()=>this.deps.controller.dispose()),this.running=this.finalizeAndRespond(e,r))}async finalizeAndRespond(e,r){let i;try{i=await this.asrStream.end()}catch(o){if(this.settled)return;this.asrFailed(o);return}if(this.settled||this.deps.inputActive?.()===!1)return;this.timeline.asrFinalResolved(this.deps.clock.now(),i.text.length);let n=this.deps.floor;if(r==="ptt"&&n?.floorState()==="aside"&&this.releaseFloor(n,"explicit"),i.text.trim()===""){this.finishBlank();return}this.noteWords("final"),this.phase="responding";let s=this.buildUserTurn(i.text,e);if(n?.floorState()==="aside")return this.runAside(s,n);if(await this.awaitDispatchGate(),!this.settled&&this.deps.inputActive?.()!==!1){this.emitDispatch(s);try{await this.respond(s.text)}catch(o){if(this.settled)return;this.finishError(Z5(o),o);return}this.settled||this.finishDone()}}async runAside(e,r){if(this.timeline.markAsideCommit(),!UQe(e.text)){this.finishAsideAbsorbed(e,r);return}if(this.timeline.asideWakeword(),this.releaseFloor(r,"resume"),await this.awaitDispatchGate(),!this.settled){this.emitDispatch(e);try{await this.respond(e.text)}catch(i){if(this.settled)return;this.finishError(Z5(i),i);return}this.settled||this.finishDone()}}releaseFloor(e,r){try{e.onFloorReleased(r)}catch{}}emitDispatch(e){this.dispatched=!0,this.timeline.markDispatched();try{this.deps.onDispatched?.()}catch{}this.deps.emit({type:"turn.final",turnId:this.deps.turnId,turn:e,...this.deps.commandId!==void 0&&{commandId:this.deps.commandId}}),this.deps.emit({type:"state",turnId:this.deps.turnId,state:"responding"})}noteSilence(e){try{this.deps.floor?.onSilence(e)}catch{}}noteOutcome(e){if(e!==null)try{this.deps.onOutcome?.(e,this.timeline.actCounts())}catch{}}noteTerminal(e,r){if(e!==null){if(typeof e=="string"){this.noteOutcome(e);return}if(this.deps.delivery){this.deps.delivery.hold(this.deliveryPortion,e,i=>this.noteOutcome(i));return}if(this.deps.onHeld===void 0){e.emit(e.fallback),this.noteOutcome(e.fallback);return}try{this.deps.onHeld({turnId:this.deps.turnId,held:e,ledger:r.ledger,...r.report!==void 0&&{report:r.report}})}catch{}}}async awaitDispatchGate(){if(this.deps.beforeDispatch!==void 0)try{await this.deps.beforeDispatch()}catch{}}async respond(e){this.recordStartupFailure=this.deps.reasoner.beforeRunFailure(e,this.deps.turnId,this.reasonAbort.signal);let r=!1;if(this.deps.delivery||this.ensureTts(),this.settled)return;let i=this.deps.reasoner.run(e,this.reasonAbort.signal,{register:"voice",turnId:this.deps.turnId,cwd:this.deps.cwd,originSessionId:this.deps.sessionId,location:{deviceId:this.deps.deviceId,projectId:this.deps.projectId,cwd:this.deps.cwd??""},...this.deps.delivery&&{voiceDelivery:{bind:(n,s,o)=>{let a=s+":"+n,c=this.pendingDelivery.get(a);c&&this.deps.delivery.bind(c,o),this.pendingDelivery.delete(a)}}}});for await(let n of i){if(this.settled||(r||(r=!0,this.timeline.firstReasonerDelta(this.deps.clock.now())),this.parked&&(this.heldDelta=n,await this.untilUnparked(),this.heldDelta=null,this.settled)))return;try{this.dispatch(n)}catch(s){this.finishError("turn_failed",s);return}}for(this.loopDone=!0;;){if(this.settled)return;if(this.parked){if(this.cutPortion===void 0){this.parked=!1;return}await this.untilUnparked();continue}for(let s of this.deps.segmenter.flush())this.push(s);let n=this.ttsStream;if(n===null||(await n.end(),this.ttsStream===n))return}}dispatch(e){if(e.type==="act.start"){if(e.channel==="speech"){if(this.deps.delivery)for(this.deliveryAct=this.deps.delivery.startAct(this.deps.turnId,this.deps.sessionId,this.deliveryPortion),this.deliveryPortion=this.deliveryAct.portion,this.pendingDelivery.set((e.preamble?"preamble:":"speech:")+e.actId,this.deliveryAct),this.openDeliveries.add(this.deliveryAct),this.deps.delivery.canSpeak(this.deliveryAct)&&this.ensureTts();this.pendingDelivery.size>128;)this.pendingDelivery.delete(this.pendingDelivery.keys().next().value);this.openSpeech={actId:e.actId,characters:e.characters??0,...e.preamble===!0&&{preamble:!0}},this.openSeeded=e.characters!==void 0,this.speech.push(this.openSpeech)}od(i=>this.deps.emit(i),this.deps.turnId,e);return}if(e.type==="act.end"){for(let i of this.deps.segmenter.flush())this.push(i);if(this.openSpeech?.actId===e.actId&&(this.openSpeech.characters=e.characters,e.notificationId!==void 0&&(this.openSpeech.notificationId=e.notificationId),this.openSpeech=null),this.deliveryAct){let i=this.deliveryAct;if(e.notificationId!==void 0){let n=e.notificationId;this.deps.delivery.bindNotification(i,(s,o,a,c)=>this.deps.onNotification?.(n,s,o,a,c==="completed"))}this.deps.delivery.finishAct(i,"completed"),this.openDeliveries.delete(i),this.deliveryAct=void 0,e.preamble&&this.pendingDelivery.delete("preamble:"+e.actId)}if(od(i=>this.deps.emit(i),this.deps.turnId,e),e.preamble!==!0&&this.timeline.actSettled(e.act),e.reason!==void 0&&(this.timeline.silence(e.reason),this.noteSilence(e.reason)),e.actId===this.cutActId){this.cutActId=null;for(let i of this.cuts)this.trySettleCut(i)}return}if(e.type!=="text"){if(e.type==="tool.start"){for(let i of this.deps.segmenter.flush())this.push(i);this.timeline.toolStarted()}nm(i=>this.deps.emit(i),this.deps.turnId,e);return}this.openSpeech!==null&&!this.openSeeded&&(this.openSpeech.characters+=e.text.length);let r=this.deliveryAct?this.deps.delivery.append(this.deliveryAct,e.text):void 0;if(this.deliveryAct&&this.actText.set(this.deliveryAct,(this.actText.get(this.deliveryAct)??"")+e.text),!(this.cutActId!==null&&this.openSpeech?.actId===this.cutActId)){this.deps.emit({type:"response.delta",turnId:this.deps.turnId,text:e.text,...this.deliveryAct&&{displayId:this.deliveryAct.displayId,displayOffset:r}});for(let i of this.deps.segmenter.push(e.text))this.push(i)}}push(e,r=this.deliveryAct){if(this.deps.delivery&&!this.deps.delivery.canSpeak(r))return;r&&this.deps.delivery.pushed(r,e.length);let i;try{i=this.ensureTts()}catch(n){throw this.finishError("turn_failed",n),n}this.charsPushed+=e.length,i.pushText(e)}ensureTts(){if(this.ttsStream!==null)return this.ttsStream;let e=this.deps.ttsEngine.speak({voice:this.deps.voice,sampleRate:HN,encoding:W5});this.ttsStream=e;let r=this.deliveryPortion;return e.onAudio(i=>{this.settled&&this.tail!=="speaking"||e!==this.ttsStream||(this.audioBytes+=i.byteLength,this.sawFirstAudio||(this.sawFirstAudio=!0,this.timeline.firstTtsAudio(this.deps.clock.now())),this.deps.delivery&&r?this.deps.delivery.audio(r,i):this.deps.emit({type:"response.audio",turnId:this.deps.turnId,audio:i,portionId:this.deps.turnId,leaseGeneration:0}))}),e.onError(i=>{e===this.ttsStream&&(this.tail==="speaking"?this.tailSpeechFailed():this.finishError("turn_failed",i))}),e}finishBlank(){this.settled||(this.settled=!0,this.timeline.blank(this.deps.clock.now()),this.deps.onComplete())}finishAsideAbsorbed(e,r){if(!this.settled){this.settled=!0,this.phase="cancelled",this.timeline.asideAbsorbed(this.deps.clock.now()),this.deps.emit({type:"turn.final",turnId:this.deps.turnId,turn:{...e,disposition:"absorbed"},...this.deps.commandId!==void 0&&{commandId:this.deps.commandId}}),this.deps.onComplete();try{r.onAbsorbed()}catch{}}}finishDone(){if(this.settled)return;this.settled=!0,this.endDelivery("completed");let e=this.terminalRecord();for(let r of this.cuts)this.trySettleCut(r,!0);this.noteTerminal(this.timeline.completed(this.deps.clock.now(),this.deps.reasoner.lastTurnTools(),e.hold),e),this.deps.emit({type:"response.done",turnId:this.deps.turnId}),this.ttsStream=null,this.deps.delivery&&this.deliveryPortion?this.tail="eligible":this.actText.clear(),this.deps.onComplete()}asrFailed(e){if(this.settled||this.deps.inputActive?.()===!1)return;let r=e instanceof Error?e:new Error(String(e));try{this.deps.onAsrFailure?.(r)}catch{}this.finishError(r instanceof yn?"asr_unavailable":"turn_failed",e)}finishError(e,r){if(this.settled)return;this.settled=!0,this.releaseResource(()=>this.deps.controller.dispose()),this.failDeliveries("failed"),this.endDelivery("cut"),this.recordStartupFailure?.(),this.deps.reasoner.noteFailure(this.deps.turnId),this.reasonAbort.abort(new wl);let i=this.ttsStream;this.ttsStream=null,i&&this.releaseResource(()=>i.cancel()),this.heldDelta=null,this.releaseParked();let n=this.terminalRecord();for(let s of this.cuts)this.trySettleCut(s,!0);this.noteTerminal(this.timeline.failed(this.deps.clock.now(),e,n.hold),n),this.deps.emit({type:"error",turnId:this.deps.turnId,...this.deps.commandId!==void 0&&{commandId:this.deps.commandId},reason:e,message:r instanceof Error?r.message:String(r)}),this.actText.clear(),this.deps.onComplete()}buildUserTurn(e,r){return{source:"voice",turnId:this.deps.turnId,sessionId:this.deps.sessionId,deviceId:this.deps.deviceId,text:e,startMs:this.deps.startMs,endMs:r,...this.deps.projectId!==void 0&&{projectId:this.deps.projectId}}}}});import{randomUUID as K5}from"node:crypto";import{realpathSync as OQe}from"node:fs";function t8(t){return`${(t/1e3).toFixed(1)}s`}function HQe(t){return t.length<=48?t:`${t.slice(0,48)}...`}function VQe(t){switch(t.state){case"none":return"not yet announced";case"shown":return"announced (shown)";case"played":return"announced, played in full";case"shown_partial":return`announcement shown to character ${t.n} of ${t.m}`;case"cut":return`announce cut at ${t.n} of ${t.m}: not fully heard`;case"unplayed":return"announce never played"}}function qQe(t){if(t.role!=="user"&&t.role!=="assistant")return null;if("toolCalls"in t){let e=t.toolCalls.filter(r=>YQe.has(r.name)).map(r=>typeof r.input=="object"&&r.input!==null?r.input.text:void 0).filter(r=>typeof r=="string"&&r.length>0);return e.length>0?{role:"assistant",text:e.join(" ")}:null}return t.content===""?null:{role:t.role,text:t.content}}var e8,$Qe,PQe,pc,GQe,Af,Ou,df,WI,YQe,VN=v(()=>{"use strict";Rt();Xs();Yn();tO();rO();td();tv();Dm();Fm();$v();F$();q9();W9();GR();JR();K9();Hv();tJ();rJ();sJ();ld();kI();dl();Rm();ha();SN();NN();UN();ON();PN();id();X5();e8=250,$Qe=4,PQe=1,pc=3e3;GQe=6,Af=45e3,Ou=class extends Error{constructor(e){super(e),this.name="ReasonerUnavailableError"}},df=class extends Error{constructor(e){super(e),this.name="VoiceUnavailableError"}},WI=class{deps;emit;finishEvents;display;readVoiceState;presentation;sessionId;deviceId;projectId;closed=!1;closing=null;inFlight=!1;textContext;textRunning=null;get killedJobsAtShutdown(){return this.jobs.killedAtShutdown}reasoner=null;reasonerRoute=null;turnAbort=null;capturing=null;voiceSeat=null;retiredInputs=new Set;voiceDelivery;voiceTurnContext;responding=null;tail=null;parkBound=null;parkedAtMs=0;parkHeldFor=null;voiceTurnFailed=!1;asrUnavailable=null;mintedTurnId=null;voiceEngines=null;clock;newTurnController;newSmartTurnInference;newFrameClassifier;newTurnEvaluator;newSegmenter;smartTurnInference=null;frameClassifier=null;turnEvaluator=void 0;floorState="engaged";floorCounts={noResponse:{addressed_to_other:0,self_talk:0,no_reply_needed:0},asideEntries:0,asideExits:{resume:0,decay:0,explicit:0}};turnCounts={outcomes:{completed:0,superseded:0,barged:0,failed:0,lost:0,detached:0},acts:{}};jobs;notifications=new QI(()=>this.publishState());playouts=new Map;playoutWaiters=[];cutUnwinding=null;asideDecayTimer=null;lastSpeechAtMs=0;cwd;scratch;constructor(e,r,i,n,s,o=()=>({generation:0}),a,c){this.deps=r,this.emit=i,this.finishEvents=n,this.display=s,this.readVoiceState=o,this.presentation=c,this.sessionId=e.sessionId,this.deviceId=e.deviceId,this.projectId=e.projectId,this.cwd=e.cwd,this.scratch=new _u(e.sessionId,te),this.clock=r.clock??new qn,s&&a&&(this.voiceDelivery=new rm(s,this.clock,a,()=>this.wakePlayoutWaiters())),this.jobs=new Mm({now:()=>this.clock.now(),logger:te,onDetached:l=>this.jobDetached(l),onSettled:l=>this.jobSettled(l),onChanged:()=>this.publishState()}),this.newSmartTurnInference=r.createSmartTurnInference??(()=>new lf),this.newFrameClassifier=r.createFrameClassifier??(()=>new cd(new fc)),this.newTurnEvaluator=r.createTurnEvaluator??(l=>new Fu(l)),this.newTurnController=r.createTurnController??(l=>{let u=this.ensureFrameClassifier();return new cf(l,this.ensureSmartTurnInference(),{},this.speechObservingClassifier(u,l instanceof sd?l:void 0),this.semanticHook())}),this.newSegmenter=r.createSegmenter??(()=>new Kh)}acceptDeliveryReceipt(e,r){if(!this.voiceDelivery)throw new Qe(r.commandId,"invalid");this.voiceDelivery.receive(e,r),(this.responding?.cutReported()===!0||this.tail?.cutReported()===!0)&&this.clearParkBound(),this.tail?.tailDrained()===!0&&this.dropTail()}revokeVoiceOutput(e,r="owner_lost"){e&&(this.voiceDelivery?.revoke(e,r),this.responding?.stopOutput(e),this.dropTail())}get voiceContext(){return this.voiceSeat?.context}get voiceUnavailable(){return this.asrUnavailable??void 0}voiceStateChanged(){this.publishState()}isVoiceControl(e){return e.leaseGeneration!==void 0||!!this.capturing||!!this.responding||this.voiceTurnFailed}retireVoiceInput(e=!0){let r=this.voiceSeat;if(!r)return;r.retire(),this.voiceSeat=null,this.clearParkBound(),this.asideDecayTimer!==null&&this.clock.clearTimer(this.asideDecayTimer),this.asideDecayTimer=null;let i=r.capturing;if(r.capturing=null,this.capturing===i&&(this.capturing=null),i){i.sourceLost();let s=i.unwound();this.retiredInputs.add(s),s.finally(()=>this.retiredInputs.delete(s))}let n=this.responding??(this.tail?.isTailParked()===!0?this.tail:null);e&&n!==null&&(n.resume("no_words"),this.boundCutReportWait(n)),this.resetVoiceFailure(),this.inFlight=this.textContext!==void 0||this.responding!==null,this.wakePlayoutWaiters()}replaceVoiceInput(e,r){this.retireVoiceInput(),this.voiceSeat=new sd(e,r,this.clock),this.frameClassifier?.reset?.(),this.lastSpeechAtMs=this.clock.now(),this.floorState==="aside"&&this.armAsideDecay(Af)}send(e,r={sessionId:this.sessionId,deviceId:this.deviceId,projectId:this.projectId,cwd:this.cwd}){let{commandId:i}=e;switch(e.type){case"input.text":this.acceptTextInput(e,r);return;case"input.audio.frame":this.acceptAudioFrame(e);return;case"input.audio.end":this.endAudioInput(e);return;case"turn.cancel":this.cancelTurn(e);return;case"turn.playout":this.acceptPlayout(e);return;case"approval.resolve":throw new Qe(i,"unsupported");default:throw new Qe(i,"invalid")}}close(){if(this.closed)return this.closing??Promise.resolve();this.closed=!0;let e=[],r,i;this.closing=new Promise((a,c)=>{i=()=>{Promise.allSettled(e).then(l=>{let u=l.find(d=>d.status==="rejected");r!==void 0?c(r instanceof Error?r:new Error("dialogue teardown failed",{cause:r})):u?.status==="rejected"?c(u.reason instanceof Error?u.reason:new Error("dialogue release failed",{cause:u.reason})):a()})}});let n=a=>{try{e.push(Promise.resolve(a()).catch(()=>{}))}catch{}},s=this.responding?.unwound(),o=this.capturing?.unwound();try{this.voiceSeat?.retire(),this.turnAbort?.abort(),this.clearParkBound(),this.responding?.cancel("client_shutdown"),this.capturing?.cancel("client_shutdown");let a=this.jobs.beginShutdown();a>0&&(te.debug("background jobs cancelled at shutdown",{count:a}),e.push(this.jobs.drain().catch(()=>{}))),this.asideDecayTimer!==null&&(this.clock.clearTimer(this.asideDecayTimer),this.asideDecayTimer=null);let c=this.smartTurnInference;this.smartTurnInference=null;let l=this.frameClassifier;this.frameClassifier=null;let u=this.turnEvaluator;this.turnEvaluator=null,this.dropTail(),this.voiceDelivery?.close(),this.settleHeldAtClose(),this.logFloorSummary(),this.logTurnSummary(),c&&n(()=>c.dispose()),l?.dispose&&n(()=>l.dispose()),u?.dispose&&n(()=>u.dispose())}catch(a){r=a}finally{e.push((async()=>{await Promise.allSettled([this.textRunning,s,o,this.cutUnwinding,...this.retiredInputs]);try{await this.reasoner?.drainExecutions()}finally{try{await this.jobs.drain()}finally{try{this.scratch.dispose()}finally{this.finishEvents()}}}})()),i()}return this.closing}snapshotState(){let e=this.jobs.list(),r=this.notifications.list(),i={voice:this.readVoiceState(),...(this.textContext??this.voiceTurnContext)&&{currentTurn:{...this.textContext??this.voiceTurnContext}},responding:this.inFlight,jobs:e.slice(0,32).map(n=>{let s=Xp(n.display??"",WQ);return{...n.location&&{location:{...n.location}},jobId:n.jobId,tool:n.tool,toolId:n.toolId,turnId:n.turnId,originSessionId:n.originSessionId,summary:s,summaryTruncated:s!==(n.display??""),cancelling:n.cancelling,startedAtMs:n.startedAtMs}}),omittedJobs:Math.max(0,e.length-32),notifications:r.slice(0,64).map(n=>{let s=Xp(n.text,WQ);return{id:n.id,priority:n.priority,summary:s,summaryTruncated:s!==n.text,announce:{...n.announce}}}),omittedNotifications:Math.max(0,r.length-64)};for(;no(i)>256*1024;)if(i.jobs.length)i.jobs.pop(),i.omittedJobs+=1;else if(i.notifications.length)i.notifications.pop(),i.omittedNotifications+=1;else break;return i}publishState(){this.display&&!this.closed&&this.emit({type:"dialogue.state",state:this.snapshotState()})}acceptTextInput(e,r){if(typeof e.text!="string"||e.text.trim().length===0)throw new Qe(e.commandId,"invalid","input.text requires non-empty text");if(this.inFlight)throw new Qe(e.commandId,"backpressured","a turn is already in progress (one turn at a time in v0.1)");let i=K5(),n=this.presentation?.beginTurn(r.sessionId,i);this.inFlight=!0,this.exitAside("explicit"),this.textContext=Object.freeze({turnId:i,originSessionId:r.sessionId,cwd:r.cwd,deviceId:r.deviceId,...r.projectId!==void 0&&{projectId:r.projectId}}),this.emit({originSessionId:r.sessionId,type:"turn.accepted",turnId:i,clientTurnId:e.clientTurnId,source:"text",commandId:e.commandId}),this.dropTail(),this.emit({type:"turn.final",originSessionId:r.sessionId,turnId:i,turn:this.toTextUserTurn(i,e,r),commandId:e.commandId}),this.publishState();let s=this.display?.start(i,r.sessionId,"user");s&&(this.display.append(s,e.text),this.display.finish(s,"completed"));let o;this.textRunning=new Promise(a=>{o=a}),this.runTextTurn(i,e,r,n).finally(()=>{n?.finish(),o()})}async runTextTurn(e,r,i,n){if(this.closed){this.inFlight=!1;return}let s=A=>this.emit({...A,originSessionId:i.sessionId}),o=new Map,a,c=new Set,l=new AbortController;this.turnAbort=l;let u=!1,d=!1,h={};try{let A=this.ensureReasoner();if(await this.awaitDispatchReady(),this.closed)return;s({type:"state",turnId:e,state:"responding"}),u=!0;for await(let f of A.run(r.text,l.signal,{presentation:n,turnId:e,cwd:i.cwd,originSessionId:i.sessionId,location:{cwd:i.cwd,deviceId:i.deviceId,...i.projectId!==void 0&&{projectId:i.projectId}},...this.display&&{display:{fail:(m,E)=>{let I=o.get(E+":"+m);I&&this.display.finish(I,"failed"),o.delete(E+":"+m)},bind:(m,E,I)=>{let y=o.get(E+":"+m);y&&this.display.bind(y,I),o.delete(E+":"+m)}}}}))if(f.type==="act.start"&&(a=f.channel==="speech"?this.display?.start(e,i.sessionId,"assistant"):void 0,a&&(o.set((f.preamble?"preamble:":"speech:")+f.actId,a),c.add(a))),d=!0,f.type==="text"){let m=a?this.display.append(a,f.text):void 0;s({type:"response.delta",turnId:e,text:f.text,...a!==void 0&&{displayId:a,displayOffset:m}})}else if(f.type==="tool.start"||f.type==="tool.result")nm(s,e,f);else{if(f.type==="act.end"&&(f.preamble!==!0&&(h[f.act]=(h[f.act]??0)+1),f.reason!==void 0&&this.countSilence(f.reason),a)){let m=a;if(f.notificationId!==void 0){let E=f.notificationId;this.display.bind(m,(I,y,B)=>{I>0&&this.notifications.annotateDisplay(E,I,y,B==="completed")},"notification")}this.display.finish(m,"completed"),f.preamble&&o.delete("preamble:"+f.actId),c.delete(m),a=void 0}od(s,e,f)}this.closed||this.recordOutcome(d?"completed":"lost",h),s({type:"response.done",turnId:e})}catch(A){u&&!this.closed&&this.recordOutcome("failed",h);for(let m of c)this.display?.finish(m,l.signal.aborted?"cancelled":"failed");let f=A instanceof Ou?"no_text_route":A instanceof ss?"channel_violation":"turn_failed";s({type:"error",turnId:e,commandId:r.commandId,reason:f,message:A instanceof Error?A.message:String(A)})}finally{this.inFlight=!1,this.turnAbort=null,this.textContext=void 0,this.publishState()}}acceptAudioFrame(e){let r=this.voiceSeat;if(!r?.active)throw new Qe(e.commandId,"invalid","no active input stream");if(this.capturing){this.capturing.pushFrame(e.audio,e.atMs);return}if(this.asrUnavailable!==null||this.voiceTurnFailed)return;if(this.inFlight&&this.responding?.isParked()!==!0)throw new Qe(e.commandId,"backpressured","a turn is already in progress (one turn at a time in v0.1)");this.inFlight=!0;let i=K5();if(this.emit({type:"turn.accepted",turnId:i,clientTurnId:e.clientTurnId,source:"voice",originSessionId:r.context.sessionId,commandId:e.commandId}),!r.active){this.inFlight=this.responding!==null;return}this.mintedTurnId=i;let n=this.resolveVoicePipeline(i,e.commandId);if(!n){this.voiceTurnFailed=!0;return}let s=this.floorHook(r),o=new zI({turnId:i,sessionId:r.context.sessionId,deviceId:r.context.deviceId,projectId:r.context.projectId,cwd:r.context.cwd,inputActive:()=>r.active,delivery:this.voiceDelivery,onNotification:(a,c,l,u,d)=>{c.kind!=="unknown"&&this.notifications.annotateAudio(a,c),l>0&&this.notifications.annotateDisplay(a,l,u,d)},commandId:e.commandId,startMs:e.atMs,asrEngine:n.engines.asrEngine,ttsEngine:n.engines.ttsEngine,voice:n.engines.voice,reasoner:n.reasoner,controller:this.newTurnController(r),segmenter:this.newSegmenter(),clock:this.clock,emit:a=>{if(a.type==="turn.final"&&a.turn.disposition!=="absorbed"){let c=this.display?.start(i,r.context.sessionId,"user");c&&(this.display.append(c,a.turn.text),this.display.finish(c,"completed"))}this.emit({...a,originSessionId:r.context.sessionId})},floor:s,onOutcome:(a,c)=>this.recordOutcome(a,c),onHeld:a=>this.holdTurn(a),onCutSettle:a=>this.settleCut(a),turnDetached:()=>this.jobs.hasRunningJobFrom(i),beforeDispatch:()=>r.untilRetired(this.awaitDispatchReady()),onDispatched:()=>{this.voiceTurnContext={...r.context,turnId:i,originSessionId:r.context.sessionId},r.capturing=null,this.turnDispatched(o),this.publishState()},onFirstWords:a=>{r.active&&this.wordsHeard(a)},onAsrFailure:a=>{r.active&&this.noteAsrFailure(a)},onComplete:()=>{r.capturing===o&&(r.capturing=null),this.completeVoiceTurn(o)}});if(!r.active){o.sourceLost();return}this.capturing=r.capturing=o,this.smartTurnInference?.prewarm?.(),this.frameClassifier?.prewarm?.(),o.pushFrame(e.audio,e.atMs)}endAudioInput(e){if(this.voiceTurnFailed){this.resetVoiceFailure();return}if(this.capturing){this.capturing.endAudio(e.atMs);return}this.exitAside("explicit")}cancelTurn(e){let r=e.turnId;if(this.voiceTurnFailed&&(r===void 0||r===this.mintedTurnId)){this.resetVoiceFailure();return}let i=r===void 0?this.capturing??this.responding:this.capturing?.turnId===r?this.capturing:this.responding?.turnId===r?this.responding:null;if(i===null){e.reason==="barge_in"&&e.leaseGeneration!==void 0&&r!==void 0&&this.tail?.turnId===r&&this.parkTail(this.tail);return}e.reason==="barge_in"&&i===this.responding&&(i.isParked()||this.parkTurn(i))||this.abortTurn(i,e.reason)}abortTurn(e,r){if(e===this.responding){this.clearParkBound();let i=e.unwound().then(()=>{this.cutUnwinding===i&&(this.cutUnwinding=null),this.wakePlayoutWaiters()});this.cutUnwinding=i}e.cancel(r)}parkTurn(e){return e.park()?(this.clearParkBound(),e.isParked()&&(this.parkedAtMs=this.clock.now(),this.armParkBound(pc)),!0):!1}parkTail(e){e.parkTail()&&(this.clearParkBound(),this.parkedAtMs=this.clock.now(),this.armParkBound(pc))}parkedReply(){return this.responding?.isParked()===!0?this.responding:this.tail?.isTailParked()===!0?this.tail:null}dropTail(){let e=this.tail;e!==null&&(this.tail=null,e.isTailParked()&&this.clearParkBound(),e.releaseTail())}armParkBound(e){let r=this.voiceSeat;this.parkBound=this.clock.setTimer(e,()=>{r&&!r.active||(this.parkBound=null,this.parkBoundElapsed())})}parkBoundElapsed(){if(this.parkedReply()===null)return;let e=this.capturing;if(e?.hasCommitted()===!0&&this.parkHeldFor!==e){this.parkHeldFor=e,this.armParkBound(pc);return}let r=this.clock.now()-Math.max(this.parkedAtMs,this.lastSpeechAtMs);r>=pc?this.resumeParked("no_words"):this.armParkBound(pc-r)}resumeParked(e){if(this.closed)return;let r=this.parkedReply();if(r===null)return;let i=this.parkHeldFor;this.clearParkBound(),r.resume(e),this.boundCutReportWait(r);let n=this.capturing;e==="no_words"&&n!==null&&(n.hasCommitted()?n===i&&(te.debug("the barging utterance committed but its final never came - retired, the reply resumes",{turnId:n.turnId}),n.cancel("barge_in")):(te.debug("the capturing turn the wordless barge opened is retired - no verdict could come",{turnId:n.turnId}),n.cancel("barge_in")))}boundCutReportWait(e){if(!e.awaitingCutReport())return;let r=this.parkedAtMs+pc-this.clock.now();r<=0?e.resumeUnreported():this.armParkBound(r)}clearParkBound(){this.parkHeldFor=null,this.parkBound!==null&&(this.clock.clearTimer(this.parkBound),this.parkBound=null)}wordsHeard(e){this.tail?.isTailParked()===!0&&(te.debug("the barging utterance carries words - the reply in flight yields",{stage:e,parked:!0,tail:!0}),this.dropTail());let r=this.responding;r!==null&&(te.debug("the barging utterance carries words - the reply in flight yields",{stage:e,parked:r.isParked()}),this.abortTurn(r,"barge_in"))}turnDispatched(e){this.dropTail(),this.responding!==null&&this.responding!==e&&this.abortTurn(this.responding,"barge_in"),this.capturing===e&&(this.capturing=null),this.responding=e}noteAsrFailure(e){e instanceof yn&&(this.asrUnavailable=e.category,this.publishState(),te.debug("ASR terminally unavailable - voice input latched off for this session",{category:e.category}))}completeVoiceTurn(e){this.dropReportOnly(e.turnId),this.capturing===e?(this.capturing=null,this.resumeParked("blank")):this.responding===e&&(this.responding=null,this.voiceTurnContext=void 0,this.clearParkBound(),e.tailEligible()&&(this.dropTail(),this.tail=e)),this.inFlight=this.capturing!==null||this.responding!==null,this.publishState()}dropReportOnly(e){if(e===null)return;let r=this.playouts.get(e);r!==void 0&&r.record===void 0&&this.playouts.delete(e)}resetVoiceFailure(){this.dropReportOnly(this.mintedTurnId),this.voiceTurnFailed=!1,this.mintedTurnId=null}resolveVoicePipeline(e,r){let i;try{i=this.ensureVoiceEngines()}catch(s){return this.emitTurnError(e,r,"no_voice_route",s),null}let n;try{n=this.ensureReasoner()}catch(s){let o=s instanceof Ou?"no_text_route":"turn_failed";return this.emitTurnError(e,r,o,s),null}return{engines:i,reasoner:n}}ensureVoiceEngines(){if(this.voiceEngines)return this.voiceEngines;if(!this.deps.voiceRegistry)throw new df("voice is not available in this core build");let e=this.deps.configService.resolved(),r=e.routes?.stt,i=e.routes?.tts;if(!r||!i)throw new df("no voice route configured - run 'jarvis init' to set routes.stt and routes.tts");let n=!e.secrets?.[r.provider]&&Jr(r.provider),s=!e.secrets?.[i.provider]&&Jr(i.provider);if(n||s){let l=n?r.provider:i.provider;throw new df(`no API key for voice provider '${l}' - run 'jarvis init' to add it`)}let o=this.deps.voiceRegistry.asrEngine({provider:r.provider,model:r.model,...r.url!==void 0&&{url:r.url}},e.secrets?.[r.provider]??""),a=this.deps.voiceRegistry.ttsEngine({provider:i.provider,model:i.model},e.secrets?.[i.provider]??""),c=this.deps.voiceIdentity??$N(i.voiceId);return this.voiceEngines={asrEngine:o,ttsEngine:a,voice:c},this.voiceEngines}ensureSmartTurnInference(){return this.smartTurnInference??=this.newSmartTurnInference(),this.smartTurnInference}ensureFrameClassifier(){return this.frameClassifier??=this.newFrameClassifier(),this.frameClassifier}semanticHook(){if(this.turnEvaluator===void 0){let r=this.reasonerRoute;this.turnEvaluator=r?.provider==="anthropic"?this.newTurnEvaluator(r.key):null}return this.turnEvaluator===null?void 0:{evaluator:this.turnEvaluator,recentTurns:()=>{let r=[];for(let i of this.reasoner?.historySnapshot()??[]){let n=qQe(i);n&&r.push(n)}return r.slice(-GQe)}}}floorHook(e){return{floorState:()=>this.floorState,onSilence:r=>{this.countSilence(r),r==="addressed_to_other"&&this.enterAside(r)},onAbsorbed:()=>{(!e||e.active)&&this.noteSpeech()},onFloorReleased:r=>{(!e||e.active)&&this.exitAside(r)}}}enterAside(e){this.floorState!=="aside"&&(this.floorState="aside",this.floorCounts.asideEntries+=1,this.noteSpeech(),this.armAsideDecay(Af),te.debug("aside entered - utterances now absorb by default",{reason:e}),this.emit({type:"state",state:"aside"}))}exitAside(e){this.floorState==="aside"&&(this.floorState="engaged",this.floorCounts.asideExits[e]+=1,this.asideDecayTimer!==null&&(this.clock.clearTimer(this.asideDecayTimer),this.asideDecayTimer=null),te.debug("aside exited",{reason:e}))}countSilence(e){this.floorCounts.noResponse[e]+=1}recordOutcome(e,r){this.turnCounts.outcomes[e]+=1;for(let[i,n]of Object.entries(r))this.turnCounts.acts[i]=(this.turnCounts.acts[i]??0)+n}jobDetached(e){te.debug("background job detached",{jobId:e.jobId,tool:e.tool,origin:e.origin}),!this.closed&&(this.emit({type:"job.detached",...e.turnId!==void 0&&{turnId:e.turnId},jobId:e.jobId,tool:e.tool,...e.toolId!==void 0&&{toolId:e.toolId},...e.originSessionId!==void 0&&{originSessionId:e.originSessionId}}),this.publishState())}jobSettled(e){te.debug("background job settled",{jobId:e.record.jobId,tool:e.record.tool,outcome:e.outcome,durationMs:Math.round(e.durationMs)}),!this.closed&&(e.outcome==="ok"?this.notifications.add(`${e.record.tool} job ${e.record.jobId} finished ok in ${t8(e.durationMs)}`,"normal"):e.outcome==="failed"&&this.notifications.add(`${e.record.tool} job ${e.record.jobId} FAILED after ${t8(e.durationMs)}`,"high"),this.emit({type:"job.result",...e.record.turnId!==void 0&&{turnId:e.record.turnId},jobId:e.record.jobId,tool:e.record.tool,...e.record.toolId!==void 0&&{toolId:e.record.toolId},...e.record.originSessionId!==void 0&&{originSessionId:e.record.originSessionId},outcome:e.outcome,durationMs:Math.round(e.durationMs)}),this.publishState())}holdTurn(e){if(this.closed){e.held.emit(e.held.fallback);return}let r=this.playouts.get(e.turnId)??{};r.record=e,e.report!==void 0&&r.report===void 0&&(r.report=e.report),this.playouts.set(e.turnId,r),this.joinPlayout(e.turnId)}acceptPlayout(e){let r={playedMs:e.playedMs,end:e.end},i=this.responding?.turnId===e.turnId?this.responding:this.capturing?.turnId===e.turnId?this.capturing:null;if(i?.acceptCutReport(r)===!0)return;let n=this.playouts.get(e.turnId);if(n===void 0&&i===null){te.debug("playout report for a turn with no held record - nothing to settle",{end:e.end});return}let s=n??{};s.report===void 0&&(s.report=r,this.playouts.set(e.turnId,s),this.joinPlayout(e.turnId))}joinPlayout(e){let r=this.playouts.get(e);if(r?.record===void 0||r.report===void 0)return;this.playouts.delete(e);let{held:i,ledger:n}=r.record,{end:s}=r.report,{playedMs:o,boundary:a,characters:c}=this.settleReport(n,r.report),l=i.fallback==="failed"?"failed":s==="cut"?i.detachedJob?"detached":o>0||i.commandStarted?"barged":"superseded":i.fallback;i.emit(l,{playedMs:o,spokenCharacters:a,characters:c}),this.recordOutcome(l,i.acts),this.wakePlayoutWaiters()}settleCut(e){let{playedMs:r,boundary:i,characters:n}=this.settleReport(e.ledger,e.report);te.debug("voice turn cut settled - the audio was cut; the reply continues",{turnId:e.turnId,playedMs:r,spokenCharacters:i,characters:n})}settleReport(e,r){let{end:i}=r,n=Number.isFinite(r.playedMs)&&r.playedMs>0?r.playedMs:0,s=XQ(e),a=i==="drained"&&n>0&&n>=e.audioMs-PQe?s:KF(n,e),c=eO(e.acts,a),l=new Set(e.acts.filter(u=>u.preamble===!0).map(u=>u.actId));for(let u of c){if(l.has(u.actId)){this.reasoner?.settleAnnouncement(u.actId,u);continue}this.reasoner?.settleSpeech(u.actId,u)}for(let u of e.acts){if(u.notificationId===void 0)continue;let d=c.find(h=>h.actId===u.actId);d!==void 0&&this.notifications.annotate(u.notificationId,d.kind==="spoken"?{state:"played"}:d.kind==="partial"?{state:"cut",n:d.n,m:d.m}:{state:"unplayed"})}return{playedMs:n,boundary:a,characters:s}}settleHeldAtClose(){for(let e of[...this.playouts.keys()])this.releaseHeld(e);this.playouts.clear(),this.cutUnwinding=null,this.wakePlayoutWaiters()}releaseHeld(e){let r=this.playouts.get(e);this.playouts.delete(e),r?.record!==void 0&&(r.record.held.emit(r.record.held.fallback),this.recordOutcome(r.record.held.fallback,r.record.held.acts))}expireOutstanding(){this.voiceDelivery?.retireGates(),this.cutUnwinding=null;let e=[];for(let[r,i]of this.playouts)i.record!==void 0&&i.report===void 0&&(i.stale=!0,e.push(r));for(let r of e.slice(0,Math.max(0,e.length-$Qe)))this.releaseHeld(r)}awaitDispatchReady(){return this.playoutOutstanding()?new Promise(e=>{let r=!1,i=()=>{r||(r=!0,this.clock.clearTimer(s),this.playoutWaiters=this.playoutWaiters.filter(o=>o!==n),e())},n=()=>{this.playoutOutstanding()||i()},s=this.clock.setTimer(e8,()=>{te.debug("dispatch proceeded before the last playout settled",{boundMs:e8,awaitingReport:[...this.playouts.values()].filter(o=>o.record!==void 0&&o.report===void 0&&o.stale!==!0).length+(this.voiceDelivery?.outstandingCount()??0),cutUnwinding:this.cutUnwinding!==null}),this.expireOutstanding(),i()});this.playoutWaiters.push(n)}):Promise.resolve()}playoutOutstanding(){if(this.voiceDelivery?.hasOutstanding()||this.cutUnwinding!==null)return!0;for(let e of this.playouts.values())if(e.record!==void 0&&e.report===void 0&&e.stale!==!0)return!0;return!1}wakePlayoutWaiters(){for(let e of[...this.playoutWaiters])e()}sessionStateBlock(){let e=this.jobs.list(),r=this.notifications.list();if(e.length===0&&r.length===0)return;let i=["Session state:"];if(e.length>0){i.push(`- Background jobs (${e.length} of ${Pv} slots; the [bracketed] value is cancel_job's jobId):`);let n=this.clock.now();for(let s of e){let o=Math.max(0,Math.round((n-s.startedAtMs)/1e3)),a=s.display!==void 0?` "${HQe(s.display)}"`:"",c=s.cancelling?"cancelling":`running, ${o}s`;i.push(` - [${s.jobId}] ${s.tool}${a} - ${c}`)}}if(r.length>0){i.push("- Queued notifications (announce with say_notification - the record then shows whether it played; dismiss_notification discards silently; when unsure whether one was heard, keep it):");for(let n of r)i.push(` - [${n.id}, ${n.priority}] ${n.text} - ${VQe(n.announce)}`)}return i.join(`
|
|
402
|
+
`,Qs=class extends Error{status;constructor(e,r){super(e),this.status=r,this.name="TurnEvaluatorError"}},Fu=class{key;fetchImpl;timeoutMs;constructor(e,r=fetch,i=wQe){this.key=e,this.fetchImpl=r,this.timeoutMs=i}async evaluate(e,r){let i={model:BQe,max_tokens:SQe,temperature:0,stop_sequences:DQe,system:_Qe,messages:[{role:"user",content:TQe(e)},{role:"assistant",content:j5}]},n;try{n=await this.fetchImpl(QQe,{method:"POST",headers:{"x-api-key":this.key,"anthropic-version":vQe,"content-type":"application/json"},body:JSON.stringify(i),signal:AbortSignal.any([r,AbortSignal.timeout(this.timeoutMs)])})}catch(o){throw o instanceof Error&&(o.name==="TimeoutError"||o.name==="AbortError")?o:new Qs(Jt(o,this.key))}if(!n.ok)throw new Qs(`turn evaluator request failed (HTTP ${n.status})`,n.status);let s;try{s=await n.json()}catch{throw new Qs("turn evaluator response body was not JSON")}return RQe(s)}}});function $N(t){return t===void 0?qI:{id:qI.id,engineVoice:{...qI.engineVoice,"elevenlabs-flash":{kind:"preset",voiceId:t},"elevenlabs-v3":{kind:"preset",voiceId:t}}}}var uf,qI,PN=v(()=>{"use strict";uf="21m00Tcm4TlvDq8ikWAM",qI={id:"jarvis-primary",engineVoice:{"elevenlabs-flash":{kind:"preset",voiceId:uf},"elevenlabs-v3":{kind:"preset",voiceId:uf}}}});var jI,z5=v(()=>{"use strict";Rt();jI=class{turnId;openedAtMs;log;terminal=!1;heldOpen=!1;asideCommit=!1;silenceReason=null;dispatched=!1;acts={};commandStarted=!1;wordlessCuts=0;parkedAtMs=null;decider=null;silenceOnsetAtMs=null;commitAtMs=null;asrFinalAtMs=null;transcriptLength=null;firstDeltaAtMs=null;firstAudioAtMs=null;constructor(e,r,i=te){this.turnId=e,this.openedAtMs=r,this.log=i}endpointerCommitted(e,r){this.decider===null&&(this.decider=e,this.silenceOnsetAtMs=r)}smartTurnResolved(e,r,i){this.log.debug("smart-turn P(complete)",{turnId:this.turnId,probability:e,inferenceMs:r,outcome:i})}smartTurnDegraded(e,r){this.log.debug("smart-turn DEGRADED to baseline - inference failed; this turn endpoints on baseline timers only",{turnId:this.turnId,inferenceMs:e,error:r instanceof Error?r.message:String(r)})}strongHoldRecognized(e){this.log.debug("lexical STRONG hold recognized - completeness vetoed, silence budget biases long",{turnId:this.turnId,cue:e})}strongHoldClearDebounced(e){this.log.debug("strong hold clear debounced - cue absent from one re-decode partial; veto holds pending a second",{turnId:this.turnId,cue:e})}heldEntered(e){this.heldOpen=!0,this.log.debug("floor-held mode entered - silence budgets escalate, stop cap suspended",{turnId:this.turnId,cue:e})}heldLadderRearmed(e){this.log.debug("held silence budget re-armed at the next ladder step",{turnId:this.turnId,budgetMs:e})}heldExited(e){this.heldOpen=!1,this.log.debug("floor-held mode exited",{turnId:this.turnId,reason:e})}evaluatorFired(e){this.log.debug("semantic evaluator fired - smart-turn resolved in a gated band during a live silence episode",{turnId:this.turnId,band:e})}evaluatorResolved(e,r,i,n){this.log.debug("semantic evaluator resolved",{turnId:this.turnId,verdict:e,confidence:r,latencyMs:i,outcome:n})}evaluatorFailed(e,r){this.log.debug("semantic evaluator failed - no signal; this episode endpoints as armed",{turnId:this.turnId,latencyMs:e,error:r instanceof Error?r.message:String(r)})}committed(e,r){this.commitAtMs===null&&(r==="ptt"&&this.heldOpen&&this.heldExited("ptt"),this.commitAtMs=e,r==="ptt"&&(this.decider??="ptt"))}asrFinalResolved(e,r){this.asrFinalAtMs===null&&(this.asrFinalAtMs=e,this.transcriptLength=r)}firstReasonerDelta(e){this.firstDeltaAtMs??=e}firstTtsAudio(e){this.firstAudioAtMs??=e}markAsideCommit(){this.asideCommit=!0}silence(e){this.silenceReason=e}asideWakeword(){this.log.debug("aside wakeword - the lexical gate opened; the utterance dispatches for the model's judgment",{turnId:this.turnId})}markDispatched(){this.dispatched=!0}actSettled(e){this.acts[e]=(this.acts[e]??0)+1}toolStarted(){this.commandStarted=!0}parked(e){this.parkedAtMs=e,this.log.debug("voice turn parked - audio cut; the reply waits for the barging utterance's first word or its blank verdict",{turnId:this.turnId})}resumed(e,r,i=0){this.wordlessCuts+=1;let n=this.parkedAtMs===null?null:e-this.parkedAtMs;this.parkedAtMs=null,this.log.debug("voice turn resumed - the barge carried no words; the reply continues",{turnId:this.turnId,verdict:r,parkedMs:n,respokenCharacters:i})}actCounts(){return{...this.acts}}completed(e,r,i=!1){if(this.terminal||(this.terminal=!0,!this.dispatched))return null;let n=this.firstDeltaAtMs===null?"lost":"completed";return i?this.hold(e,n,{},r):(this.summary(e,n,{},r),n)}cancelled(e,r,i=!1,n=!1){if(this.terminal||(this.terminal=!0,!this.dispatched||r==="client_shutdown"))return null;let s=n?"detached":this.firstAudioAtMs!==null||this.commandStarted?"barged":"superseded";return i?this.hold(e,s,{},void 0,n):(this.summary(e,s,{}),s)}failed(e,r,i=!1){return this.terminal||(this.terminal=!0,!this.dispatched)?null:i?this.hold(e,"failed",{reason:r}):(this.summary(e,"failed",{reason:r}),"failed")}hold(e,r,i,n,s=!1){let o=!1;return{fallback:r,commandStarted:this.commandStarted,detachedJob:s,acts:this.actCounts(),emit:(a,c)=>{o||(o=!0,this.summary(e,a,i,n,c))}}}summary(e,r,i,n,s){this.log.debug("voice turn summary",{turnId:this.turnId,outcome:r,...i,decider:this.decider,disposition:"dispatched",...this.asideCommit&&{floor:"aside"},...this.silenceReason!==null&&{silence:this.silenceReason},...Object.keys(this.acts).length>0&&{acts:{...this.acts}},...this.wordlessCuts>0&&{wordlessCuts:this.wordlessCuts},...s!==void 0&&{playedMs:s.playedMs,spokenCharacters:s.spokenCharacters,characters:s.characters},silenceToCommitMs:this.spanMs(this.silenceOnsetAtMs,this.commitAtMs),commitToFinalMs:this.spanMs(this.commitAtMs,this.asrFinalAtMs),finalToFirstDeltaMs:this.spanMs(this.asrFinalAtMs,this.firstDeltaAtMs),firstDeltaToFirstAudioMs:this.spanMs(this.firstDeltaAtMs,this.firstAudioAtMs),totalMs:e-this.openedAtMs,transcriptLength:this.transcriptLength,...n!==void 0&&n.rounds>0&&{toolRounds:n.rounds,toolMs:n.totalMs}})}asideAbsorbed(e){this.terminal||(this.terminal=!0,this.log.debug("voice turn absorbed in the aside - no reply spoken",{turnId:this.turnId,decider:this.decider,disposition:"absorbed",floor:"aside",silenceToCommitMs:this.spanMs(this.silenceOnsetAtMs,this.commitAtMs),commitToFinalMs:this.spanMs(this.commitAtMs,this.asrFinalAtMs),totalMs:e-this.openedAtMs,transcriptLength:this.transcriptLength}))}blank(e){this.terminal||(this.terminal=!0,this.log.debug("voice turn blank - terminated silently (no transcribed speech)",{turnId:this.turnId,decider:this.decider,silenceToCommitMs:this.spanMs(this.silenceOnsetAtMs,this.commitAtMs),commitToFinalMs:this.spanMs(this.commitAtMs,this.asrFinalAtMs),totalMs:e-this.openedAtMs,transcriptLength:this.transcriptLength}))}spanMs(e,r){return e===null||r===null?null:r-e}}});function UQe(t){return LQe.test(t)}function Z5(t){return t instanceof ss?"channel_violation":"turn_failed"}function FQe(t,e,r){return r>e?Math.max(e,aJ(t,r-1)):e}var HN,W5,J5,NQe,MQe,LQe,zI,X5=v(()=>{"use strict";tv();Fm();ld();kI();z5();HN=16e3,W5="pcm_s16le",J5=HN*2/1e3,NQe="en",MQe=["Jarvis"],LQe=/\bjarvis\b/i;zI=class{deps;asrStream;ttsStream=null;reasonAbort=new AbortController;releases=new Set;recordStartupFailure;phase="capturing";settled=!1;finalizing=!1;lastFrameAtMs;timeline;speech=[];openSpeech=null;openSeeded=!1;charsPushed=0;audioBytes=0;sawFirstAudio=!1;running=null;dispatched=!1;parked=!1;wakeParked=null;heldDelta=null;loopDone=!1;cutActId=null;cutPortion;resumeVerdict=null;actText=new Map;tail="none";tailHeld;respokeFrom;cuts=[];portion={acts:0,charsPushed:0,audioBytes:0};partialWordsReported=!1;deliveryAct;deliveryPortion;pendingDelivery=new Map;openDeliveries=new Set;constructor(e){this.deps=e,this.lastFrameAtMs=e.startMs,this.timeline=new jI(e.turnId,e.clock.now()),e.controller.attachTelemetry?.(this.timeline),e.controller.setPartialStability?.(e.asrEngine.partialStability??"stable"),this.asrStream=e.asrEngine.open({sampleRate:HN,encoding:W5,language:NQe,biasTerms:MQe,emitPartials:!0}),this.asrStream.onTranscript(r=>this.handleTranscript(r)),this.asrStream.onError(r=>this.asrFailed(r)),e.controller.onCommit(()=>this.finalize(this.lastFrameAtMs,"controller")),e.emit({type:"state",turnId:e.turnId,state:"processing"})}sourceLost(){if(!this.dispatched){this.cancel("client_shutdown");return}this.releaseResource(()=>this.deps.controller.dispose()),this.releaseResource(()=>this.asrStream.abort())}stopOutput(e){if(this.deliveryPortion?.recipient.sessionId!==e)return;let r=this.ttsStream;this.ttsStream=null,r&&this.releaseResource(()=>r.cancel()),this.deps.segmenter.flush()}endDelivery(e){this.deps.delivery?.end(this.deliveryPortion,e)}failDeliveries(e){let r=new Set(this.openDeliveries);if(e==="failed")for(let i of this.deliveryPortion?.segments??[])r.add(i.act);for(let i of r)this.deps.delivery?.finishAct(i,e);this.openDeliveries.clear()}get turnId(){return this.deps.turnId}isParked(){return this.parked}hasCommitted(){return this.finalizing}pushFrame(e,r){this.deps.inputActive?.()===!1||this.phase!=="capturing"||this.settled||(this.lastFrameAtMs=r,this.asrStream.pushAudio(e),this.deps.controller.onAudioFrame(e))}endAudio(e){this.finalize(e,"ptt")}cancel(e){if(this.settled)return;this.settled=!0,this.phase="cancelled",this.releaseResource(()=>this.deps.controller.dispose()),this.reasonAbort.abort(e==="client_shutdown"?void 0:new Bl),this.releaseResource(()=>this.asrStream.abort());let r=this.ttsStream;this.ttsStream=null,r&&this.releaseResource(()=>r.cancel());let i=this.heldDelta;if(this.heldDelta=null,this.releaseParked(),i?.type==="text"&&this.deliveryAct&&this.deps.delivery.append(this.deliveryAct,i.text),this.failDeliveries("cancelled"),this.endDelivery("cut"),e!=="client_shutdown"&&!this.deps.delivery){if(this.audioBytes===this.portion.audioBytes)for(let o of this.speech.slice(this.portion.acts))o.preamble!==!0&&this.deps.reasoner.settleSpeech(o.actId,{kind:"unspoken"});i?.type==="act.start"&&i.channel==="speech"&&i.preamble!==!0&&this.deps.reasoner.settleSpeech(i.actId,{kind:"unspoken"})}i?.type==="text"&&this.openSpeech!==null&&!this.openSeeded&&(this.openSpeech.characters+=i.text.length);let n=e!=="client_shutdown"&&this.turnDetached(),s=this.terminalRecord();for(let o of this.cuts)this.trySettleCut(o,!0);this.noteTerminal(this.timeline.cancelled(this.deps.clock.now(),e,s.hold,n),s),this.actText.clear(),this.deps.onComplete()}park(){if(this.settled||this.parked||!this.dispatched)return!1;let e=this.deliveryPortion;this.cutPortion=this.deps.delivery?.end(e,"cut")===!0?e:void 0;let r=this.ttsStream;return this.ttsStream=null,r&&this.releaseResource(()=>r.cancel()),this.deps.segmenter.flush(),this.cutActId=this.openSpeech?.actId??null,this.cuts.push({from:this.portion.acts,to:this.speech.length,charsPushedFrom:this.portion.charsPushed,audioBytesFrom:this.portion.audioBytes,charsPushed:this.charsPushed,audioBytes:this.audioBytes,openActId:this.cutActId,resumed:!1,settled:!1}),this.loopDone&&this.cutPortion===void 0?(this.finishDone(),!0):(this.parked=!0,this.timeline.parked(this.deps.clock.now()),!0)}resume(e){this.tail!=="parked"&&(!this.parked||this.settled)||(this.resumeVerdict??=e,!this.awaitsCutReport()&&this.completeResume(!1))}cutReported(){return!this.awaitingCutReport()||this.awaitsCutReport()?!1:(this.completeResume(!1),!0)}resumeUnreported(){this.awaitingCutReport()&&this.completeResume(!0)}awaitingCutReport(){return this.resumeVerdict!==null&&(this.tail==="parked"||this.parked&&!this.settled)}completeResume(e){this.tail==="parked"?this.finishTailResume(e):this.finishResume(e)}awaitsCutReport(){return this.cutPortion!==void 0&&this.deps.delivery?.awaitsReport(this.cutPortion)===!0}finishResume(e){let r=this.resumeVerdict??"no_words";this.resumeVerdict=null,this.parked=!1;let i=this.cuts.at(-1);i!==void 0&&(i.resumed=!0,this.portion={acts:i.to,charsPushed:i.charsPushed,audioBytes:i.audioBytes}),this.deps.delivery?.resumed(this.deliveryPortion),this.deps.emit({type:"state",turnId:this.deps.turnId,state:"responding"});let n=this.respeak(e);this.settled||(this.timeline.resumed(this.deps.clock.now(),r,n),i!==void 0&&this.trySettleCut(i),this.releaseParked())}respeak(e){let r=this.deps.delivery,i=this.cutPortion;return this.cutPortion=void 0,r===void 0||i===void 0?(r!==void 0&&(this.deliveryPortion=void 0),0):this.speakAgain(r,i,this.respeakParts(r,i,e))}respeakParts(e,r,i){return e.respeakPlan(r,i).map((n,s)=>{let o=this.actText.get(n.act)??"",a=s===0?FQe(o,n.from,n.heard):n.from;return{act:n.act,from:a,text:o.slice(a)}})}speakAgain(e,r,i){let n=i.length>0?e.respeak(this.deps.turnId,r,i):void 0;for(let o of this.actText.keys())o!==this.deliveryAct&&!i.some(a=>a.act===o)&&this.actText.delete(o);if(n===void 0)return this.deliveryPortion=void 0,0;this.deliveryPortion=n,this.cutActId=null;let s=0;try{for(let o of i){s+=o.text.length;for(let a of this.deps.segmenter.push(o.text))this.push(a,o.act);if(o.act!==this.deliveryAct)for(let a of this.deps.segmenter.flush())this.push(a,o.act)}}catch(o){this.tail==="speaking"?this.tailSpeechFailed():this.finishError("turn_failed",o)}return s}tailEligible(){return this.tail==="eligible"}isTailParked(){return this.tail==="parked"}tailDrained(){return this.tail==="eligible"&&this.deliveryPortion!==void 0&&this.deps.delivery?.drained(this.deliveryPortion)===!0}parkTail(){let e=this.deps.delivery,r=this.deliveryPortion;if(this.tail!=="eligible"&&this.tail!=="speaking"||!e||!r||!e.holds(r))return!1;if(this.tail==="speaking"){e.end(r,"cut");let i=this.ttsStream;this.ttsStream=null,i&&this.releaseResource(()=>i.cancel()),this.deps.segmenter.flush()}return this.cutPortion=r,this.tailHeld=e.detachHeld(r),this.tail="parked",this.timeline.parked(this.deps.clock.now()),!0}releaseTail(){this.tail!=="none"&&(this.tail==="speaking"&&this.endTailSpeech(),this.tail==="parked"&&this.placeTailHeld(this.lineHome(this.cutPortion)),this.endTail())}finishTailResume(e){let r=this.resumeVerdict??"no_words";this.resumeVerdict=null;let i=this.deps.delivery,n=this.cutPortion;if(this.cutPortion=void 0,n===void 0||!i.holds(n)){this.placeTailHeld(this.lineHome(n)),this.endTail();return}let s=this.respeakParts(i,n,e);if(s.length===0){this.timeline.resumed(this.deps.clock.now(),r,0),this.placeTailHeld(this.lineHome(n)),this.endTail();return}this.deps.emit({type:"state",turnId:this.deps.turnId,state:"responding"}),this.tail="speaking",this.respokeFrom=this.lineHome(n);let o=this.speakAgain(i,n,s);this.tail==="speaking"&&(i.resumed(n),this.timeline.resumed(this.deps.clock.now(),r,o),this.placeTailHeld(this.deliveryPortion),this.finishTailSpeech())}async finishTailSpeech(){let e=this.ttsStream,r=this.deliveryPortion,i=!1;if(e!==null)try{await e.end()}catch{i=!0}if(this.tail!=="speaking"||this.ttsStream!==e||this.deliveryPortion!==r)return;if(i){this.tailSpeechFailed();return}this.ttsStream=null;let n=this.deps.delivery;n?.end(r,"completed"),n!==void 0&&r!==void 0&&!n.voiced(r)&&(this.tailHeld??=n.detachHeld(r),this.placeTailHeld(this.lineHome(r))),this.tail="eligible"}tailSpeechFailed(){this.endTailSpeech(),this.endTail()}endTailSpeech(){let e=this.deps.delivery,r=this.deliveryPortion,i=this.ttsStream;this.ttsStream=null,i&&this.releaseResource(()=>i.cancel()),!(e===void 0||r===void 0)&&(e.end(r,"cut"),this.tailHeld??=e.detachHeld(r),this.placeTailHeld(this.lineHome(r)))}lineHome(e){let r=this.deps.delivery;return e===void 0||r===void 0||r.voiced(e)?e:this.respokeFrom??e}placeTailHeld(e){let r=this.tailHeld;this.tailHeld=void 0,r!==void 0&&this.deps.delivery?.hold(e,r.summary,r.count)}endTail(){this.tail="none",this.tailHeld=void 0,this.cutPortion=void 0,this.respokeFrom=void 0,this.resumeVerdict=null,this.actText.clear()}acceptCutReport(e){if(e.end!=="cut")return!1;let r=this.cuts.find(i=>i.report===void 0&&!i.settled);return r===void 0?!1:(r.report=e,this.trySettleCut(r),!0)}trySettleCut(e,r=!1){if(!(e.settled||e.report===void 0||this.parked||!e.resumed)&&!(!r&&e.openActId!==null&&this.openSpeech?.actId===e.openActId)){e.settled=!0;try{this.deps.onCutSettle?.({turnId:this.deps.turnId,ledger:this.cutLedger(e),report:e.report})}catch{}}}releaseParked(){this.parked=!1;let e=this.wakeParked;this.wakeParked=null,e?.()}untilUnparked(){return this.parked?new Promise(e=>{this.wakeParked=e}):Promise.resolve()}terminalRecord(){let e=this.deliveryPortion!==void 0,r=this.cuts.at(-1);return r!==void 0&&!r.settled&&!r.resumed?(r.settled=!0,{hold:this.deps.delivery?e:r.to>r.from,ledger:this.cutLedger(r),...r.report!==void 0&&{report:r.report}}):{hold:this.deps.delivery?e:this.speech.length>this.portion.acts,ledger:this.portionLedger()}}cutLedger(e){return{acts:this.speech.slice(e.from,e.to).map(r=>({...r})),charsPushed:e.charsPushed-e.charsPushedFrom,audioMs:(e.audioBytes-e.audioBytesFrom)/J5}}portionLedger(){return{acts:this.speech.slice(this.portion.acts).map(e=>({...e})),charsPushed:this.charsPushed-this.portion.charsPushed,audioMs:(this.audioBytes-this.portion.audioBytes)/J5}}noteWords(e){if(e==="partial"){if(this.partialWordsReported)return;this.partialWordsReported=!0}try{this.deps.onFirstWords?.(e)}catch{}}turnDetached(){try{return this.deps.turnDetached?.()??!1}catch{return!1}}async unwound(){for(await this.running;this.releases.size>0;)await Promise.allSettled([...this.releases])}releaseResource(e){try{let r=Promise.resolve(e()).catch(()=>{});this.releases.add(r),r.then(()=>this.releases.delete(r))}catch{}}handleTranscript(e){this.phase!=="capturing"||this.settled||e.isFinal||(this.deps.emit({type:"transcript.partial",turnId:this.deps.turnId,text:e.text}),this.deps.controller.onPartial(e.text),e.text.trim()!==""&&this.noteWords("partial"))}finalize(e,r){this.deps.inputActive?.()===!1||this.phase!=="capturing"||this.finalizing||this.settled||(this.finalizing=!0,this.timeline.committed(this.deps.clock.now(),r),this.releaseResource(()=>this.deps.controller.dispose()),this.running=this.finalizeAndRespond(e,r))}async finalizeAndRespond(e,r){let i;try{i=await this.asrStream.end()}catch(o){if(this.settled)return;this.asrFailed(o);return}if(this.settled||this.deps.inputActive?.()===!1)return;this.timeline.asrFinalResolved(this.deps.clock.now(),i.text.length);let n=this.deps.floor;if(r==="ptt"&&n?.floorState()==="aside"&&this.releaseFloor(n,"explicit"),i.text.trim()===""){this.finishBlank();return}this.noteWords("final"),this.phase="responding";let s=this.buildUserTurn(i.text,e);if(n?.floorState()==="aside")return this.runAside(s,n);if(await this.awaitDispatchGate(),!this.settled&&this.deps.inputActive?.()!==!1){this.emitDispatch(s);try{await this.respond(s.text)}catch(o){if(this.settled)return;this.finishError(Z5(o),o);return}this.settled||this.finishDone()}}async runAside(e,r){if(this.timeline.markAsideCommit(),!UQe(e.text)){this.finishAsideAbsorbed(e,r);return}if(this.timeline.asideWakeword(),this.releaseFloor(r,"resume"),await this.awaitDispatchGate(),!this.settled){this.emitDispatch(e);try{await this.respond(e.text)}catch(i){if(this.settled)return;this.finishError(Z5(i),i);return}this.settled||this.finishDone()}}releaseFloor(e,r){try{e.onFloorReleased(r)}catch{}}emitDispatch(e){this.dispatched=!0,this.timeline.markDispatched();try{this.deps.onDispatched?.()}catch{}this.deps.emit({type:"turn.final",turnId:this.deps.turnId,turn:e,...this.deps.commandId!==void 0&&{commandId:this.deps.commandId}}),this.deps.emit({type:"state",turnId:this.deps.turnId,state:"responding"})}noteSilence(e){try{this.deps.floor?.onSilence(e)}catch{}}noteOutcome(e){if(e!==null)try{this.deps.onOutcome?.(e,this.timeline.actCounts())}catch{}}noteTerminal(e,r){if(e!==null){if(typeof e=="string"){this.noteOutcome(e);return}if(this.deps.delivery){this.deps.delivery.hold(this.deliveryPortion,e,i=>this.noteOutcome(i));return}if(this.deps.onHeld===void 0){e.emit(e.fallback),this.noteOutcome(e.fallback);return}try{this.deps.onHeld({turnId:this.deps.turnId,held:e,ledger:r.ledger,...r.report!==void 0&&{report:r.report}})}catch{}}}async awaitDispatchGate(){if(this.deps.beforeDispatch!==void 0)try{await this.deps.beforeDispatch()}catch{}}async respond(e){this.recordStartupFailure=this.deps.reasoner.beforeRunFailure(e,this.deps.turnId,this.reasonAbort.signal);let r=!1;if(this.deps.delivery||this.ensureTts(),this.settled)return;let i=this.deps.reasoner.run(e,this.reasonAbort.signal,{register:"voice",turnId:this.deps.turnId,cwd:this.deps.cwd,originSessionId:this.deps.sessionId,location:{deviceId:this.deps.deviceId,projectId:this.deps.projectId,cwd:this.deps.cwd??""},...this.deps.delivery&&{voiceDelivery:{bind:(n,s,o)=>{let a=s+":"+n,c=this.pendingDelivery.get(a);c&&this.deps.delivery.bind(c,o),this.pendingDelivery.delete(a)}}}});for await(let n of i){if(this.settled||(r||(r=!0,this.timeline.firstReasonerDelta(this.deps.clock.now())),this.parked&&(this.heldDelta=n,await this.untilUnparked(),this.heldDelta=null,this.settled)))return;try{this.dispatch(n)}catch(s){this.finishError("turn_failed",s);return}}for(this.loopDone=!0;;){if(this.settled)return;if(this.parked){if(this.cutPortion===void 0){this.parked=!1;return}await this.untilUnparked();continue}for(let s of this.deps.segmenter.flush())this.push(s);let n=this.ttsStream;if(n===null||(await n.end(),this.ttsStream===n))return}}dispatch(e){if(e.type==="act.start"){if(e.channel==="speech"){if(this.deps.delivery)for(this.deliveryAct=this.deps.delivery.startAct(this.deps.turnId,this.deps.sessionId,this.deliveryPortion),this.deliveryPortion=this.deliveryAct.portion,this.pendingDelivery.set((e.preamble?"preamble:":"speech:")+e.actId,this.deliveryAct),this.openDeliveries.add(this.deliveryAct),this.deps.delivery.canSpeak(this.deliveryAct)&&this.ensureTts();this.pendingDelivery.size>128;)this.pendingDelivery.delete(this.pendingDelivery.keys().next().value);this.openSpeech={actId:e.actId,characters:e.characters??0,...e.preamble===!0&&{preamble:!0}},this.openSeeded=e.characters!==void 0,this.speech.push(this.openSpeech)}od(i=>this.deps.emit(i),this.deps.turnId,e);return}if(e.type==="act.end"){for(let i of this.deps.segmenter.flush())this.push(i);if(this.openSpeech?.actId===e.actId&&(this.openSpeech.characters=e.characters,e.notificationId!==void 0&&(this.openSpeech.notificationId=e.notificationId),this.openSpeech=null),this.deliveryAct){let i=this.deliveryAct;if(e.notificationId!==void 0){let n=e.notificationId;this.deps.delivery.bindNotification(i,(s,o,a,c)=>this.deps.onNotification?.(n,s,o,a,c==="completed"))}this.deps.delivery.finishAct(i,"completed"),this.openDeliveries.delete(i),this.deliveryAct=void 0,e.preamble&&this.pendingDelivery.delete("preamble:"+e.actId)}if(od(i=>this.deps.emit(i),this.deps.turnId,e),e.preamble!==!0&&this.timeline.actSettled(e.act),e.reason!==void 0&&(this.timeline.silence(e.reason),this.noteSilence(e.reason)),e.actId===this.cutActId){this.cutActId=null;for(let i of this.cuts)this.trySettleCut(i)}return}if(e.type!=="text"){if(e.type==="tool.start"){for(let i of this.deps.segmenter.flush())this.push(i);this.timeline.toolStarted()}nm(i=>this.deps.emit(i),this.deps.turnId,e);return}this.openSpeech!==null&&!this.openSeeded&&(this.openSpeech.characters+=e.text.length);let r=this.deliveryAct?this.deps.delivery.append(this.deliveryAct,e.text):void 0;if(this.deliveryAct&&this.actText.set(this.deliveryAct,(this.actText.get(this.deliveryAct)??"")+e.text),!(this.cutActId!==null&&this.openSpeech?.actId===this.cutActId)){this.deps.emit({type:"response.delta",turnId:this.deps.turnId,text:e.text,...this.deliveryAct&&{displayId:this.deliveryAct.displayId,displayOffset:r}});for(let i of this.deps.segmenter.push(e.text))this.push(i)}}push(e,r=this.deliveryAct){if(this.deps.delivery&&!this.deps.delivery.canSpeak(r))return;r&&this.deps.delivery.pushed(r,e.length);let i;try{i=this.ensureTts()}catch(n){throw this.finishError("turn_failed",n),n}this.charsPushed+=e.length,i.pushText(e)}ensureTts(){if(this.ttsStream!==null)return this.ttsStream;let e=this.deps.ttsEngine.speak({voice:this.deps.voice,sampleRate:HN,encoding:W5});this.ttsStream=e;let r=this.deliveryPortion;return e.onAudio(i=>{this.settled&&this.tail!=="speaking"||e!==this.ttsStream||(this.audioBytes+=i.byteLength,this.sawFirstAudio||(this.sawFirstAudio=!0,this.timeline.firstTtsAudio(this.deps.clock.now())),this.deps.delivery&&r?this.deps.delivery.audio(r,i):this.deps.emit({type:"response.audio",turnId:this.deps.turnId,audio:i,portionId:this.deps.turnId,leaseGeneration:0}))}),e.onError(i=>{e===this.ttsStream&&(this.tail==="speaking"?this.tailSpeechFailed():this.finishError("turn_failed",i))}),e}finishBlank(){this.settled||(this.settled=!0,this.timeline.blank(this.deps.clock.now()),this.deps.onComplete())}finishAsideAbsorbed(e,r){if(!this.settled){this.settled=!0,this.phase="cancelled",this.timeline.asideAbsorbed(this.deps.clock.now()),this.deps.emit({type:"turn.final",turnId:this.deps.turnId,turn:{...e,disposition:"absorbed"},...this.deps.commandId!==void 0&&{commandId:this.deps.commandId}}),this.deps.onComplete();try{r.onAbsorbed()}catch{}}}finishDone(){if(this.settled)return;this.settled=!0,this.endDelivery("completed");let e=this.terminalRecord();for(let r of this.cuts)this.trySettleCut(r,!0);this.noteTerminal(this.timeline.completed(this.deps.clock.now(),this.deps.reasoner.lastTurnTools(),e.hold),e),this.deps.emit({type:"response.done",turnId:this.deps.turnId}),this.ttsStream=null,this.deps.delivery&&this.deliveryPortion?this.tail="eligible":this.actText.clear(),this.deps.onComplete()}asrFailed(e){if(this.settled||this.deps.inputActive?.()===!1)return;let r=e instanceof Error?e:new Error(String(e));try{this.deps.onAsrFailure?.(r)}catch{}this.finishError(r instanceof yn?"asr_unavailable":"turn_failed",e)}finishError(e,r){if(this.settled)return;this.settled=!0,this.releaseResource(()=>this.deps.controller.dispose()),this.failDeliveries("failed"),this.endDelivery("cut"),this.recordStartupFailure?.(),this.deps.reasoner.noteFailure(this.deps.turnId),this.reasonAbort.abort(new wl);let i=this.ttsStream;this.ttsStream=null,i&&this.releaseResource(()=>i.cancel()),this.heldDelta=null,this.releaseParked();let n=this.terminalRecord();for(let s of this.cuts)this.trySettleCut(s,!0);this.noteTerminal(this.timeline.failed(this.deps.clock.now(),e,n.hold),n),this.deps.emit({type:"error",turnId:this.deps.turnId,...this.deps.commandId!==void 0&&{commandId:this.deps.commandId},reason:e,message:r instanceof Error?r.message:String(r)}),this.actText.clear(),this.deps.onComplete()}buildUserTurn(e,r){return{source:"voice",turnId:this.deps.turnId,sessionId:this.deps.sessionId,deviceId:this.deps.deviceId,text:e,startMs:this.deps.startMs,endMs:r,...this.deps.projectId!==void 0&&{projectId:this.deps.projectId}}}}});import{randomUUID as K5}from"node:crypto";import{realpathSync as OQe}from"node:fs";function t8(t){return`${(t/1e3).toFixed(1)}s`}function HQe(t){return t.length<=48?t:`${t.slice(0,48)}...`}function VQe(t){switch(t.state){case"none":return"not yet announced";case"shown":return"announced (shown)";case"played":return"announced, played in full";case"shown_partial":return`announcement shown to character ${t.n} of ${t.m}`;case"cut":return`announce cut at ${t.n} of ${t.m}: not fully heard`;case"unplayed":return"announce never played"}}function qQe(t){if(t.role!=="user"&&t.role!=="assistant")return null;if("toolCalls"in t){let e=t.toolCalls.filter(r=>YQe.has(r.name)).map(r=>typeof r.input=="object"&&r.input!==null?r.input.text:void 0).filter(r=>typeof r=="string"&&r.length>0);return e.length>0?{role:"assistant",text:e.join(" ")}:null}return t.content===""?null:{role:t.role,text:t.content}}var e8,$Qe,PQe,pc,GQe,Af,Ou,df,WI,YQe,VN=v(()=>{"use strict";Rt();Xs();Yn();tO();rO();td();tv();Dm();Fm();$v();F$();q9();W9();GR();JR();K9();Hv();tJ();rJ();sJ();ld();kI();dl();Rm();ha();SN();NN();UN();ON();PN();id();X5();e8=250,$Qe=4,PQe=1,pc=3e3;GQe=6,Af=45e3,Ou=class extends Error{constructor(e){super(e),this.name="ReasonerUnavailableError"}},df=class extends Error{constructor(e){super(e),this.name="VoiceUnavailableError"}},WI=class{deps;emit;finishEvents;display;readVoiceState;presentation;sessionId;deviceId;projectId;closed=!1;closing=null;inFlight=!1;textContext;textRunning=null;get killedJobsAtShutdown(){return this.jobs.killedAtShutdown}reasoner=null;reasonerRoute=null;turnAbort=null;capturing=null;voiceSeat=null;retiredInputs=new Set;voiceDelivery;voiceTurnContext;responding=null;tail=null;parkBound=null;parkedAtMs=0;parkHeldFor=null;voiceTurnFailed=!1;asrUnavailable=null;mintedTurnId=null;voiceEngines=null;clock;newTurnController;newSmartTurnInference;newFrameClassifier;newTurnEvaluator;newSegmenter;smartTurnInference=null;frameClassifier=null;turnEvaluator=void 0;floorState="engaged";floorCounts={noResponse:{addressed_to_other:0,self_talk:0,no_reply_needed:0},asideEntries:0,asideExits:{resume:0,decay:0,explicit:0}};turnCounts={outcomes:{completed:0,superseded:0,barged:0,failed:0,lost:0,detached:0},acts:{}};jobs;notifications=new QI(()=>this.publishState());playouts=new Map;playoutWaiters=[];cutUnwinding=null;asideDecayTimer=null;lastSpeechAtMs=0;cwd;scratch;constructor(e,r,i,n,s,o=()=>({generation:0}),a,c){this.deps=r,this.emit=i,this.finishEvents=n,this.display=s,this.readVoiceState=o,this.presentation=c,this.sessionId=e.sessionId,this.deviceId=e.deviceId,this.projectId=e.projectId,this.cwd=e.cwd,this.scratch=new _u(e.sessionId,te),this.clock=r.clock??new qn,s&&a&&(this.voiceDelivery=new rm(s,this.clock,a,()=>this.wakePlayoutWaiters())),this.jobs=new Mm({now:()=>this.clock.now(),logger:te,onDetached:l=>this.jobDetached(l),onSettled:l=>this.jobSettled(l),onChanged:()=>this.publishState()}),this.newSmartTurnInference=r.createSmartTurnInference??(()=>new lf),this.newFrameClassifier=r.createFrameClassifier??(()=>new cd(new fc)),this.newTurnEvaluator=r.createTurnEvaluator??(l=>new Fu(l)),this.newTurnController=r.createTurnController??(l=>{let u=this.ensureFrameClassifier();return new cf(l,this.ensureSmartTurnInference(),{},this.speechObservingClassifier(u,l instanceof sd?l:void 0),this.semanticHook())}),this.newSegmenter=r.createSegmenter??(()=>new Kh)}acceptDeliveryReceipt(e,r){if(!this.voiceDelivery)throw new Qe(r.commandId,"invalid");this.voiceDelivery.receive(e,r),(this.responding?.cutReported()===!0||this.tail?.cutReported()===!0)&&this.clearParkBound(),this.tail?.tailDrained()===!0&&this.dropTail()}revokeVoiceOutput(e,r="owner_lost"){e&&(this.voiceDelivery?.revoke(e,r),this.responding?.stopOutput(e),this.dropTail())}get voiceContext(){return this.voiceSeat?.context}get voiceUnavailable(){return this.asrUnavailable??void 0}voiceStateChanged(){this.publishState()}isVoiceControl(e){return e.leaseGeneration!==void 0||!!this.capturing||!!this.responding||this.voiceTurnFailed}retireVoiceInput(e=!0){let r=this.voiceSeat;if(!r)return;r.retire(),this.voiceSeat=null,this.clearParkBound(),this.asideDecayTimer!==null&&this.clock.clearTimer(this.asideDecayTimer),this.asideDecayTimer=null;let i=r.capturing;if(r.capturing=null,this.capturing===i&&(this.capturing=null),i){i.sourceLost();let s=i.unwound();this.retiredInputs.add(s),s.finally(()=>this.retiredInputs.delete(s))}let n=this.responding??(this.tail?.isTailParked()===!0?this.tail:null);e&&n!==null&&(n.resume("no_words"),this.boundCutReportWait(n)),this.resetVoiceFailure(),this.inFlight=this.textContext!==void 0||this.responding!==null,this.wakePlayoutWaiters()}replaceVoiceInput(e,r){this.retireVoiceInput(),this.voiceSeat=new sd(e,r,this.clock),this.frameClassifier?.reset?.(),this.lastSpeechAtMs=this.clock.now(),this.floorState==="aside"&&this.armAsideDecay(Af)}send(e,r={sessionId:this.sessionId,deviceId:this.deviceId,projectId:this.projectId,cwd:this.cwd}){let{commandId:i}=e;switch(e.type){case"input.text":this.acceptTextInput(e,r);return;case"input.audio.frame":this.acceptAudioFrame(e);return;case"input.audio.end":this.endAudioInput(e);return;case"turn.cancel":this.cancelTurn(e);return;case"turn.playout":this.acceptPlayout(e);return;case"approval.resolve":throw new Qe(i,"unsupported");default:throw new Qe(i,"invalid")}}close(){if(this.closed)return this.closing??Promise.resolve();this.closed=!0;let e=[],r,i;this.closing=new Promise((a,c)=>{i=()=>{Promise.allSettled(e).then(l=>{let u=l.find(d=>d.status==="rejected");r!==void 0?c(r instanceof Error?r:new Error("dialogue teardown failed",{cause:r})):u?.status==="rejected"?c(u.reason instanceof Error?u.reason:new Error("dialogue release failed",{cause:u.reason})):a()})}});let n=a=>{try{e.push(Promise.resolve(a()).catch(()=>{}))}catch{}},s=this.responding?.unwound(),o=this.capturing?.unwound();try{this.voiceSeat?.retire(),this.turnAbort?.abort(),this.clearParkBound(),this.responding?.cancel("client_shutdown"),this.capturing?.cancel("client_shutdown");let a=this.jobs.beginShutdown();a>0&&(te.debug("background jobs cancelled at shutdown",{count:a}),e.push(this.jobs.drain().catch(()=>{}))),this.asideDecayTimer!==null&&(this.clock.clearTimer(this.asideDecayTimer),this.asideDecayTimer=null);let c=this.smartTurnInference;this.smartTurnInference=null;let l=this.frameClassifier;this.frameClassifier=null;let u=this.turnEvaluator;this.turnEvaluator=null,this.dropTail(),this.voiceDelivery?.close(),this.settleHeldAtClose(),this.logFloorSummary(),this.logTurnSummary(),c&&n(()=>c.dispose()),l?.dispose&&n(()=>l.dispose()),u?.dispose&&n(()=>u.dispose())}catch(a){r=a}finally{e.push((async()=>{await Promise.allSettled([this.textRunning,s,o,this.cutUnwinding,...this.retiredInputs]);try{await this.reasoner?.drainExecutions()}finally{try{await this.jobs.drain()}finally{try{this.scratch.dispose()}finally{this.finishEvents()}}}})()),i()}return this.closing}snapshotState(){let e=this.jobs.list(),r=this.notifications.list(),i={voice:this.readVoiceState(),...(this.textContext??this.voiceTurnContext)&&{currentTurn:{...this.textContext??this.voiceTurnContext}},responding:this.inFlight,jobs:e.slice(0,32).map(n=>{let s=Xp(n.display??"",WQ);return{...n.location&&{location:{...n.location}},jobId:n.jobId,tool:n.tool,toolId:n.toolId,turnId:n.turnId,originSessionId:n.originSessionId,summary:s,summaryTruncated:s!==(n.display??""),cancelling:n.cancelling,startedAtMs:n.startedAtMs}}),omittedJobs:Math.max(0,e.length-32),notifications:r.slice(0,64).map(n=>{let s=Xp(n.text,WQ);return{id:n.id,priority:n.priority,summary:s,summaryTruncated:s!==n.text,announce:{...n.announce}}}),omittedNotifications:Math.max(0,r.length-64)};for(;no(i)>256*1024;)if(i.jobs.length)i.jobs.pop(),i.omittedJobs+=1;else if(i.notifications.length)i.notifications.pop(),i.omittedNotifications+=1;else break;return i}publishState(){this.display&&!this.closed&&this.emit({type:"dialogue.state",state:this.snapshotState()})}acceptTextInput(e,r){if(typeof e.text!="string"||e.text.trim().length===0)throw new Qe(e.commandId,"invalid","input.text requires non-empty text");if(this.inFlight)throw new Qe(e.commandId,"backpressured","a turn is already in progress (one turn at a time in v0.1)");let i=K5(),n=this.presentation?.beginTurn(r.sessionId,i);this.inFlight=!0,this.exitAside("explicit"),this.textContext=Object.freeze({turnId:i,originSessionId:r.sessionId,cwd:r.cwd,deviceId:r.deviceId,...r.projectId!==void 0&&{projectId:r.projectId}}),this.emit({originSessionId:r.sessionId,type:"turn.accepted",turnId:i,clientTurnId:e.clientTurnId,source:"text",commandId:e.commandId}),this.dropTail(),this.emit({type:"turn.final",originSessionId:r.sessionId,turnId:i,turn:this.toTextUserTurn(i,e,r),commandId:e.commandId}),this.publishState();let s=this.display?.start(i,r.sessionId,"user");s&&(this.display.append(s,e.text),this.display.finish(s,"completed"));let o;this.textRunning=new Promise(a=>{o=a}),this.runTextTurn(i,e,r,n).finally(()=>{n?.finish(),o()})}async runTextTurn(e,r,i,n){if(this.closed){this.inFlight=!1;return}let s=A=>this.emit({...A,originSessionId:i.sessionId}),o=new Map,a,c=new Set,l=new AbortController;this.turnAbort=l;let u=!1,d=!1,h={};try{let A=this.ensureReasoner();if(await this.awaitDispatchReady(),this.closed)return;s({type:"state",turnId:e,state:"responding"}),u=!0;for await(let f of A.run(r.text,l.signal,{presentation:n,turnId:e,cwd:i.cwd,originSessionId:i.sessionId,location:{cwd:i.cwd,deviceId:i.deviceId,...i.projectId!==void 0&&{projectId:i.projectId}},...this.display&&{display:{fail:(m,E)=>{let I=o.get(E+":"+m);I&&this.display.finish(I,"failed"),o.delete(E+":"+m)},bind:(m,E,I)=>{let y=o.get(E+":"+m);y&&this.display.bind(y,I),o.delete(E+":"+m)}}}}))if(f.type==="act.start"&&(a=f.channel==="speech"?this.display?.start(e,i.sessionId,"assistant"):void 0,a&&(o.set((f.preamble?"preamble:":"speech:")+f.actId,a),c.add(a))),d=!0,f.type==="text"){let m=a?this.display.append(a,f.text):void 0;s({type:"response.delta",turnId:e,text:f.text,...a!==void 0&&{displayId:a,displayOffset:m}})}else if(f.type==="tool.start"||f.type==="tool.result")nm(s,e,f);else{if(f.type==="act.end"&&(f.preamble!==!0&&(h[f.act]=(h[f.act]??0)+1),f.reason!==void 0&&this.countSilence(f.reason),a)){let m=a;if(f.notificationId!==void 0){let E=f.notificationId;this.display.bind(m,(I,y,B)=>{I>0&&this.notifications.annotateDisplay(E,I,y,B==="completed")},"notification")}this.display.finish(m,"completed"),f.preamble&&o.delete("preamble:"+f.actId),c.delete(m),a=void 0}od(s,e,f)}this.closed||this.recordOutcome(d?"completed":"lost",h),s({type:"response.done",turnId:e})}catch(A){u&&!this.closed&&this.recordOutcome("failed",h);for(let m of c)this.display?.finish(m,l.signal.aborted?"cancelled":"failed");let f=A instanceof Ou?"no_text_route":A instanceof ss?"channel_violation":"turn_failed";s({type:"error",turnId:e,commandId:r.commandId,reason:f,message:A instanceof Error?A.message:String(A)})}finally{this.inFlight=!1,this.turnAbort=null,this.textContext=void 0,this.publishState()}}acceptAudioFrame(e){let r=this.voiceSeat;if(!r?.active)throw new Qe(e.commandId,"invalid","no active input stream");if(this.capturing){this.capturing.pushFrame(e.audio,e.atMs);return}if(this.asrUnavailable!==null||this.voiceTurnFailed)return;if(this.inFlight&&this.responding?.isParked()!==!0)throw new Qe(e.commandId,"backpressured","a turn is already in progress (one turn at a time in v0.1)");this.inFlight=!0;let i=K5();if(this.emit({type:"turn.accepted",turnId:i,clientTurnId:e.clientTurnId,source:"voice",originSessionId:r.context.sessionId,commandId:e.commandId}),!r.active){this.inFlight=this.responding!==null;return}this.mintedTurnId=i;let n=this.resolveVoicePipeline(i,e.commandId);if(!n){this.voiceTurnFailed=!0;return}let s=this.floorHook(r),o=new zI({turnId:i,sessionId:r.context.sessionId,deviceId:r.context.deviceId,projectId:r.context.projectId,cwd:r.context.cwd,inputActive:()=>r.active,delivery:this.voiceDelivery,onNotification:(a,c,l,u,d)=>{c.kind!=="unknown"&&this.notifications.annotateAudio(a,c),l>0&&this.notifications.annotateDisplay(a,l,u,d)},commandId:e.commandId,startMs:e.atMs,asrEngine:n.engines.asrEngine,ttsEngine:n.engines.ttsEngine,voice:n.engines.voice,reasoner:n.reasoner,controller:this.newTurnController(r),segmenter:this.newSegmenter(),clock:this.clock,emit:a=>{if(a.type==="turn.final"&&a.turn.disposition!=="absorbed"){let c=this.display?.start(i,r.context.sessionId,"user");c&&(this.display.append(c,a.turn.text),this.display.finish(c,"completed"))}this.emit({...a,originSessionId:r.context.sessionId})},floor:s,onOutcome:(a,c)=>this.recordOutcome(a,c),onHeld:a=>this.holdTurn(a),onCutSettle:a=>this.settleCut(a),turnDetached:()=>this.jobs.hasRunningJobFrom(i),beforeDispatch:()=>r.untilRetired(this.awaitDispatchReady()),onDispatched:()=>{this.voiceTurnContext={...r.context,turnId:i,originSessionId:r.context.sessionId},r.capturing=null,this.turnDispatched(o),this.publishState()},onFirstWords:a=>{r.active&&this.wordsHeard(a)},onAsrFailure:a=>{r.active&&this.noteAsrFailure(a)},onComplete:()=>{r.capturing===o&&(r.capturing=null),this.completeVoiceTurn(o)}});if(!r.active){o.sourceLost();return}this.capturing=r.capturing=o,this.smartTurnInference?.prewarm?.(),this.frameClassifier?.prewarm?.(),o.pushFrame(e.audio,e.atMs)}endAudioInput(e){if(this.voiceTurnFailed){this.resetVoiceFailure();return}if(this.capturing){this.capturing.endAudio(e.atMs);return}this.exitAside("explicit")}cancelTurn(e){let r=e.turnId;if(this.voiceTurnFailed&&(r===void 0||r===this.mintedTurnId)){this.resetVoiceFailure();return}let i=r===void 0?this.capturing??this.responding:this.capturing?.turnId===r?this.capturing:this.responding?.turnId===r?this.responding:null;if(i===null){e.reason==="barge_in"&&e.leaseGeneration!==void 0&&r!==void 0&&this.tail?.turnId===r&&this.parkTail(this.tail);return}e.reason==="barge_in"&&i===this.responding&&(i.isParked()||this.parkTurn(i))||this.abortTurn(i,e.reason)}abortTurn(e,r){if(e===this.responding){this.clearParkBound();let i=e.unwound().then(()=>{this.cutUnwinding===i&&(this.cutUnwinding=null),this.wakePlayoutWaiters()});this.cutUnwinding=i}e.cancel(r)}parkTurn(e){return e.park()?(this.clearParkBound(),e.isParked()&&(this.parkedAtMs=this.clock.now(),this.armParkBound(pc)),!0):!1}parkTail(e){e.parkTail()&&(this.clearParkBound(),this.parkedAtMs=this.clock.now(),this.armParkBound(pc))}parkedReply(){return this.responding?.isParked()===!0?this.responding:this.tail?.isTailParked()===!0?this.tail:null}dropTail(){let e=this.tail;e!==null&&(this.tail=null,e.isTailParked()&&this.clearParkBound(),e.releaseTail())}armParkBound(e){let r=this.voiceSeat;this.parkBound=this.clock.setTimer(e,()=>{r&&!r.active||(this.parkBound=null,this.parkBoundElapsed())})}parkBoundElapsed(){if(this.parkedReply()===null)return;let e=this.capturing;if(e?.hasCommitted()===!0&&this.parkHeldFor!==e){this.parkHeldFor=e,this.armParkBound(pc);return}let r=this.clock.now()-Math.max(this.parkedAtMs,this.lastSpeechAtMs);r>=pc?this.resumeParked("no_words"):this.armParkBound(pc-r)}resumeParked(e){if(this.closed)return;let r=this.parkedReply();if(r===null)return;let i=this.parkHeldFor;this.clearParkBound(),r.resume(e),this.boundCutReportWait(r);let n=this.capturing;e==="no_words"&&n!==null&&(n.hasCommitted()?n===i&&(te.debug("the barging utterance committed but its final never came - retired, the reply resumes",{turnId:n.turnId}),n.cancel("barge_in")):(te.debug("the capturing turn the wordless barge opened is retired - no verdict could come",{turnId:n.turnId}),n.cancel("barge_in")))}boundCutReportWait(e){if(!e.awaitingCutReport())return;let r=this.parkedAtMs+pc-this.clock.now();r<=0?e.resumeUnreported():this.armParkBound(r)}clearParkBound(){this.parkHeldFor=null,this.parkBound!==null&&(this.clock.clearTimer(this.parkBound),this.parkBound=null)}wordsHeard(e){this.tail?.isTailParked()===!0&&(te.debug("the barging utterance carries words - the reply in flight yields",{stage:e,parked:!0,tail:!0}),this.dropTail());let r=this.responding;r!==null&&(te.debug("the barging utterance carries words - the reply in flight yields",{stage:e,parked:r.isParked()}),this.abortTurn(r,"barge_in"))}turnDispatched(e){this.dropTail(),this.responding!==null&&this.responding!==e&&this.abortTurn(this.responding,"barge_in"),this.capturing===e&&(this.capturing=null),this.responding=e}noteAsrFailure(e){e instanceof yn&&(this.asrUnavailable=e.category,this.publishState(),te.debug("ASR terminally unavailable - voice input latched off for this session",{category:e.category}))}completeVoiceTurn(e){this.dropReportOnly(e.turnId),this.capturing===e?(this.capturing=null,this.resumeParked("blank")):this.responding===e&&(this.responding=null,this.voiceTurnContext=void 0,this.clearParkBound(),e.tailEligible()&&(this.dropTail(),this.tail=e)),this.inFlight=this.capturing!==null||this.responding!==null,this.publishState()}dropReportOnly(e){if(e===null)return;let r=this.playouts.get(e);r!==void 0&&r.record===void 0&&this.playouts.delete(e)}resetVoiceFailure(){this.dropReportOnly(this.mintedTurnId),this.voiceTurnFailed=!1,this.mintedTurnId=null}resolveVoicePipeline(e,r){let i;try{i=this.ensureVoiceEngines()}catch(s){return this.emitTurnError(e,r,"no_voice_route",s),null}let n;try{n=this.ensureReasoner()}catch(s){let o=s instanceof Ou?"no_text_route":"turn_failed";return this.emitTurnError(e,r,o,s),null}return{engines:i,reasoner:n}}ensureVoiceEngines(){if(this.voiceEngines)return this.voiceEngines;if(!this.deps.voiceRegistry)throw new df("voice is not available in this core build");let e=this.deps.configService.resolved(),r=e.routes?.stt,i=e.routes?.tts;if(!r||!i)throw new df("no voice route configured - run 'jarvis init' to set routes.stt and routes.tts");let n=!e.secrets?.[r.provider]&&Jr(r.provider),s=!e.secrets?.[i.provider]&&Jr(i.provider);if(n||s){let l=n?r.provider:i.provider;throw new df(`no API key for voice provider '${l}' - run 'jarvis init' to add it`)}let o=this.deps.voiceRegistry.asrEngine({provider:r.provider,model:r.model,...r.url!==void 0&&{url:r.url}},e.secrets?.[r.provider]??""),a=this.deps.voiceRegistry.ttsEngine({provider:i.provider,model:i.model},e.secrets?.[i.provider]??""),c=this.deps.voiceIdentity??$N(i.voiceId);return this.voiceEngines={asrEngine:o,ttsEngine:a,voice:c},this.voiceEngines}ensureSmartTurnInference(){return this.smartTurnInference??=this.newSmartTurnInference(),this.smartTurnInference}ensureFrameClassifier(){return this.frameClassifier??=this.newFrameClassifier(),this.frameClassifier}semanticHook(){if(this.turnEvaluator===void 0){let r=this.reasonerRoute;this.turnEvaluator=r?.provider==="anthropic"?this.newTurnEvaluator(r.key):null}return this.turnEvaluator===null?void 0:{evaluator:this.turnEvaluator,recentTurns:()=>{let r=[];for(let i of this.reasoner?.historySnapshot()??[]){let n=qQe(i);n&&r.push(n)}return r.slice(-GQe)}}}floorHook(e){return{floorState:()=>this.floorState,onSilence:r=>{this.countSilence(r),r==="addressed_to_other"&&this.enterAside(r)},onAbsorbed:()=>{(!e||e.active)&&this.noteSpeech()},onFloorReleased:r=>{(!e||e.active)&&this.exitAside(r)}}}enterAside(e){this.floorState!=="aside"&&(this.floorState="aside",this.floorCounts.asideEntries+=1,this.noteSpeech(),this.armAsideDecay(Af),te.debug("aside entered - utterances now absorb by default",{reason:e}),this.emit({type:"state",state:"aside"}))}exitAside(e){this.floorState==="aside"&&(this.floorState="engaged",this.floorCounts.asideExits[e]+=1,this.asideDecayTimer!==null&&(this.clock.clearTimer(this.asideDecayTimer),this.asideDecayTimer=null),te.debug("aside exited",{reason:e}))}countSilence(e){this.floorCounts.noResponse[e]+=1}recordOutcome(e,r){this.turnCounts.outcomes[e]+=1;for(let[i,n]of Object.entries(r))this.turnCounts.acts[i]=(this.turnCounts.acts[i]??0)+n}jobDetached(e){te.debug("background job detached",{jobId:e.jobId,tool:e.tool,origin:e.origin}),!this.closed&&(this.emit({type:"job.detached",...e.turnId!==void 0&&{turnId:e.turnId},jobId:e.jobId,tool:e.tool,...e.toolId!==void 0&&{toolId:e.toolId},...e.originSessionId!==void 0&&{originSessionId:e.originSessionId}}),this.publishState())}jobSettled(e){te.debug("background job settled",{jobId:e.record.jobId,tool:e.record.tool,outcome:e.outcome,durationMs:Math.round(e.durationMs)}),!this.closed&&(e.outcome==="ok"?this.notifications.add(`${e.record.tool} job ${e.record.jobId} finished ok in ${t8(e.durationMs)}`,"normal"):e.outcome==="failed"&&this.notifications.add(`${e.record.tool} job ${e.record.jobId} FAILED after ${t8(e.durationMs)}`,"high"),this.emit({type:"job.result",...e.record.turnId!==void 0&&{turnId:e.record.turnId},jobId:e.record.jobId,tool:e.record.tool,...e.record.toolId!==void 0&&{toolId:e.record.toolId},...e.record.originSessionId!==void 0&&{originSessionId:e.record.originSessionId},outcome:e.outcome,durationMs:Math.round(e.durationMs)}),this.publishState())}holdTurn(e){if(this.closed){e.held.emit(e.held.fallback);return}let r=this.playouts.get(e.turnId)??{};r.record=e,e.report!==void 0&&r.report===void 0&&(r.report=e.report),this.playouts.set(e.turnId,r),this.joinPlayout(e.turnId)}acceptPlayout(e){let r={playedMs:e.playedMs,end:e.end},i=this.responding?.turnId===e.turnId?this.responding:this.capturing?.turnId===e.turnId?this.capturing:null;if(i?.acceptCutReport(r)===!0)return;let n=this.playouts.get(e.turnId);if(n===void 0&&i===null){te.debug("playout report for a turn with no held record - nothing to settle",{end:e.end});return}let s=n??{};s.report===void 0&&(s.report=r,this.playouts.set(e.turnId,s),this.joinPlayout(e.turnId))}joinPlayout(e){let r=this.playouts.get(e);if(r?.record===void 0||r.report===void 0)return;this.playouts.delete(e);let{held:i,ledger:n}=r.record,{end:s}=r.report,{playedMs:o,boundary:a,characters:c}=this.settleReport(n,r.report),l=i.fallback==="failed"?"failed":s==="cut"?i.detachedJob?"detached":o>0||i.commandStarted?"barged":"superseded":i.fallback;i.emit(l,{playedMs:o,spokenCharacters:a,characters:c}),this.recordOutcome(l,i.acts),this.wakePlayoutWaiters()}settleCut(e){let{playedMs:r,boundary:i,characters:n}=this.settleReport(e.ledger,e.report);te.debug("voice turn cut settled - the audio was cut; the reply continues",{turnId:e.turnId,playedMs:r,spokenCharacters:i,characters:n})}settleReport(e,r){let{end:i}=r,n=Number.isFinite(r.playedMs)&&r.playedMs>0?r.playedMs:0,s=XQ(e),a=i==="drained"&&n>0&&n>=e.audioMs-PQe?s:KF(n,e),c=eO(e.acts,a),l=new Set(e.acts.filter(u=>u.preamble===!0).map(u=>u.actId));for(let u of c){if(l.has(u.actId)){this.reasoner?.settleAnnouncement(u.actId,u);continue}this.reasoner?.settleSpeech(u.actId,u)}for(let u of e.acts){if(u.notificationId===void 0)continue;let d=c.find(h=>h.actId===u.actId);d!==void 0&&this.notifications.annotate(u.notificationId,d.kind==="spoken"?{state:"played"}:d.kind==="partial"?{state:"cut",n:d.n,m:d.m}:{state:"unplayed"})}return{playedMs:n,boundary:a,characters:s}}settleHeldAtClose(){for(let e of[...this.playouts.keys()])this.releaseHeld(e);this.playouts.clear(),this.cutUnwinding=null,this.wakePlayoutWaiters()}releaseHeld(e){let r=this.playouts.get(e);this.playouts.delete(e),r?.record!==void 0&&(r.record.held.emit(r.record.held.fallback),this.recordOutcome(r.record.held.fallback,r.record.held.acts))}expireOutstanding(){this.voiceDelivery?.retireGates(),this.cutUnwinding=null;let e=[];for(let[r,i]of this.playouts)i.record!==void 0&&i.report===void 0&&(i.stale=!0,e.push(r));for(let r of e.slice(0,Math.max(0,e.length-$Qe)))this.releaseHeld(r)}awaitDispatchReady(){return this.playoutOutstanding()?new Promise(e=>{let r=!1,i=()=>{r||(r=!0,this.clock.clearTimer(s),this.playoutWaiters=this.playoutWaiters.filter(o=>o!==n),e())},n=()=>{this.playoutOutstanding()||i()},s=this.clock.setTimer(e8,()=>{te.debug("dispatch proceeded before the last playout settled",{boundMs:e8,awaitingReport:[...this.playouts.values()].filter(o=>o.record!==void 0&&o.report===void 0&&o.stale!==!0).length+(this.voiceDelivery?.outstandingCount()??0),cutUnwinding:this.cutUnwinding!==null}),this.expireOutstanding(),i()});this.playoutWaiters.push(n)}):Promise.resolve()}playoutOutstanding(){if(this.voiceDelivery?.hasOutstanding()||this.cutUnwinding!==null)return!0;for(let e of this.playouts.values())if(e.record!==void 0&&e.report===void 0&&e.stale!==!0)return!0;return!1}wakePlayoutWaiters(){for(let e of[...this.playoutWaiters])e()}sessionStateBlock(){let e=this.jobs.list(),r=this.notifications.list();if(e.length===0&&r.length===0)return;let i=["Session state:"];if(e.length>0){i.push(`- Background jobs (${e.length} of ${Pv} slots; the [bracketed] value is cancel_job's jobId):`);let n=this.clock.now();for(let s of e){let o=Math.max(0,Math.round((n-s.startedAtMs)/1e3)),a=s.display!==void 0?` "${HQe(s.display)}"`:"",c=s.cancelling?"cancelling":`running, ${o}s`;i.push(` - [${s.jobId}] ${s.tool}${a} - ${c}`)}}if(r.length>0){i.push("- Queued notifications (announce with say_notification - the record then shows whether it played; dismiss_notification discards silently; when unsure whether one was heard, keep it):");for(let n of r)i.push(` - [${n.id}, ${n.priority}] ${n.text} - ${VQe(n.announce)}`)}return i.join(`
|
|
403
403
|
`)}logTurnSummary(){let{outcomes:e,acts:r}=this.turnCounts;Object.values(e).some(i=>i>0)&&te.debug("session turn summary",{outcomes:{...e},acts:{...r}})}logFloorSummary(){let{noResponse:e,asideEntries:r,asideExits:i}=this.floorCounts;(r>0||Object.values(e).some(s=>s>0)||Object.values(i).some(s=>s>0))&&te.debug("session floor summary",{noResponse:{...e},asideEntries:r,asideExits:{...i}})}armAsideDecay(e){this.asideDecayTimer!==null&&this.clock.clearTimer(this.asideDecayTimer),this.asideDecayTimer=this.clock.setTimer(e,()=>this.asideDecayElapsed())}asideDecayElapsed(){if(this.asideDecayTimer=null,this.floorState!=="aside")return;let e=this.clock.now()-this.lastSpeechAtMs;e>=Af?this.exitAside("decay"):this.armAsideDecay(Af-e)}noteSpeech(){this.lastSpeechAtMs=this.clock.now()}speechObservingClassifier(e,r){return{classify:(i,n)=>e.classify(i,s=>{r&&!r.active||(s&&this.noteSpeech(),n(s))})}}ensureReasoner(){if(this.reasoner)return this.reasoner;let e=this.deps.configService.resolved(),r=e.routes?.text;if(!r)throw new Ou("no text model is configured - run 'jarvis init' to set routes.text");let i=Jr(r.provider)?e.secrets?.[r.provider]:"";if(!i&&Jr(r.provider))throw new Ou(`no API key for text provider '${r.provider}' - run 'jarvis init' to add it`);let n=this.deps.registry.textAdapter({provider:r.provider,model:r.model,...r.url!==void 0&&{url:r.url}},i??"");return this.reasoner=new wd(n,r.model,this.deps.systemPrompt,this.buildTools(e)),this.reasonerRoute={provider:r.provider,key:i??""},this.reasoner}buildTools(e){let r=Wt.dir(),i=r;try{i=OQe(r)}catch{}let n=new SI(i),s=new BI,o=new wI;o.add(n),o.add(s);let a=new vI;for(let l of xl)a.register(l);for(let l of Ov)a.register(l);a.register(U$),a.register(Y9(s,{spill:l=>this.scratch.spill("fetch",l)}));let c=this.registerWebSearch(a,e);return a.register(Q$(this.jobs)),a.register(eJ(this.notifications)),{registry:a,hooks:o,cwd:this.cwd,logger:te,guard:n,jobs:this.jobs,sessionState:()=>this.sessionStateBlock(),...c!==void 0&&{searchProvider:c}}}registerWebSearch(e,r){let i=r.routes?.search;if(!i)return;let n=r.secrets?.[i.provider];if(!n){te.debug("search route configured but no key - web_search unregistered",{provider:i.provider});return}if(this.deps.registry.searchAdapter)try{let s=this.deps.registry.searchAdapter({provider:i.provider},n);return e.register(z9(s,i.provider,{spill:o=>this.scratch.spill("search",o)})),i.provider}catch(s){te.debug("search adapter could not be built - web_search unregistered",{provider:i.provider,errorName:s instanceof Error?s.name:typeof s});return}}toTextUserTurn(e,r,i){return{source:"text",turnId:e,sessionId:i.sessionId,deviceId:i.deviceId,text:r.text,atMs:r.atMs,...i.projectId!==void 0&&{projectId:i.projectId}}}emitTurnError(e,r,i,n){this.emit({type:"error",turnId:e,commandId:r,reason:i,message:n instanceof Error?n.message:String(n)}),this.inFlight=this.responding!==null}},YQe=new Set(xl.filter(t=>t.channel==="speech").map(t=>t.name))});var JI,r8=v(()=>{"use strict";JI=class{bounds;buffer=[];pending=null;closed=!1;bytes=0;audioBytes=0;metadataItems=0;audioItems=0;constructor(e){this.bounds=e}finish(e){this.buffer.length=0,this.bytes=0,this.audioBytes=0,this.metadataItems=0,this.audioItems=0;for(let r of e)this.push(r);this.close()}push(e){if(this.closed)return!1;let r=this.bounds?.size(e)??0,i=this.bounds?.audio?.size(e)??0;if(this.bounds&&(r>this.bounds.bytes||i>(this.bounds.audio?.bytes??0)))return!1;let n=this.pending;return n?(this.pending=null,this.bounds?.taken?.(e),n({value:e,done:!1}),!0):this.bounds&&(this.bytes+r>this.bounds.bytes||(i===0?this.metadataItems>=this.bounds.items:this.audioItems>=this.bounds.audio.items||this.audioBytes+i>this.bounds.audio.bytes))?!1:(this.buffer.push(e),this.bytes+=r,this.audioBytes+=i,i?this.audioItems++:this.metadataItems++,!0)}discard(e){for(let r=this.buffer.length-1;r>=0;r--){let i=this.buffer[r];if(!e(i))continue;this.buffer.splice(r,1),this.bytes-=this.bounds?.size(i)??0;let n=this.bounds?.audio?.size(i)??0;this.audioBytes-=n,n?this.audioItems--:this.metadataItems--}}close(){if(this.closed)return;this.closed=!0;let e=this.pending;e&&(this.pending=null,e({value:void 0,done:!0}))}async*drain(){for(;;){if(this.buffer.length>0){let r=this.buffer.shift();this.bytes-=this.bounds?.size(r)??0;let i=this.bounds?.audio?.size(r)??0;this.audioBytes-=i,i?this.audioItems--:this.metadataItems--,this.bounds?.taken?.(r),yield r;continue}if(this.closed)return;let e=await new Promise(r=>{this.pending=r});if(e.done)return;yield e.value}}}});var ZI,n8=v(()=>{"use strict";Yn();td();r8();VN();ZI=class{sessionId;queue;owner;context;capabilities;grants=new Map;closed=!1;finished=!1;closing;eventsConsumed=!1;readyDelivered=!1;ready;constructor(e,r,i){this.sessionId=e,this.owner=i,this.capabilities=new Set(Array.isArray(r?.clientCapabilities)?r.clientCapabilities:[]),this.queue=new JI({items:PF,bytes:HF,size:jF,audio:{items:qF,bytes:YF,size:zF},taken:n=>{n.type==="session.ready"&&(this.readyDelivered=!0)}}),this.context=this.owner.attach(this,r)}async send(e){if(this.closed||this.owner.isClosed)throw new Qe(e?.commandId??"","closed");if(!e||typeof e.type!="string"||typeof e.commandId!="string"||Buffer.byteLength(e.commandId)>1024||!Number.isFinite(e.atMs))throw new Qe(e?.commandId??"","invalid","invalid command envelope");if("clientTurnId"in e&&e.clientTurnId!==void 0&&(typeof e.clientTurnId!="string"||Buffer.byteLength(e.clientTurnId)>1024))throw new Qe(e.commandId,"invalid","invalid client turn identity");if(e.sessionId!==this.sessionId)throw new Qe(e.commandId,"invalid","command sessionId does not match session");if(e.type==="session.close")return this.close();if((e.type==="presentation.select"||e.type==="presentation.ack")&&!(Lt(e,Te.commandBytes)<=Te.commandBytes&&(e.type==="presentation.select"?Object.keys(e).length===6&&En(e.navigationSeq,1)&&(e.selection===null||XA(e.selection)):(()=>{let{occurrenceId:i,cardId:n,revision:s,visibleBlockIds:o,failedBlockIds:a}=e;return Object.keys(e).length===9&&KA({occurrenceId:i,cardId:n,revision:s,visibleBlockIds:o,failedBlockIds:a})})())))throw new Qe(e.commandId,"invalid","Invalid presentation command");this.owner.send(this,structuredClone(e))}events(){if(this.eventsConsumed)throw new Error("CoreSession.events() supports a single consumer in v0.1");return this.eventsConsumed=!0,this.drain()}async*drain(){for await(let e of this.queue.drain())yield e}close(){if(this.closing)return this.closing;this.closed=!0;let e,r;this.closing=new Promise((i,n)=>{e=i,r=n});try{this.owner.detach(this).then(e,r)}catch(i){r(i)}return this.closing}deliver(e){if(this.finished)return;let r=structuredClone(e);if(r.type==="session.ready"&&(this.ready=structuredClone(r)),!this.queue.push(r)){this.owner.detach(this,"overflow").catch(()=>{});return}if(r.type==="dialogue.snapshot"){r.presentation&&this.owner.presentation.offer(this.sessionId,r.presentation);for(let i of r.display)i.role==="assistant"&&this.offer(i.displayId,0,i.text.length)}else r.type==="presentation.state"?this.owner.presentation.offer(this.sessionId,r.presentation):r.type==="response.delta"&&r.displayId!==void 0&&r.displayOffset!==void 0&&this.offer(r.displayId,r.displayOffset,r.text.length)}discardAudio(e){this.queue.discard(r=>r.type==="response.audio"&&(e===void 0||r.portionId===e))}acknowledge(e){let r=this.grants.get(e.displayId);if(!Number.isSafeInteger(e.characters)||e.characters<0||r===void 0||e.characters>r)throw new Qe(e.commandId,"invalid","receipt exceeds the contiguous prefix offered to this attachment");this.owner.display.acknowledge(e.displayId,e.characters)}finish(e){if(!this.finished){this.closed=!0,this.finished=!0;for(let r of this.grants.keys())this.owner.display.releaseGrant(r);this.grants.clear(),e.type==="session.closed"&&e.reason==="overflow"?this.queue.finish([...!this.readyDelivered&&this.ready?[this.ready]:[],e]):this.queue.push(e)?this.queue.close():this.queue.finish([...!this.readyDelivered&&this.ready?[this.ready]:[],e]),this.ready=void 0}}offer(e,r,i){let n=this.grants.get(e);if(n===void 0){if(r!==0||!this.owner.display.retainGrant(e))return;this.grants.set(e,i)}else r<=n&&this.grants.set(e,Math.max(n,r+i));for(;this.grants.size>VF;){let s=this.grants.keys().next().value;this.grants.delete(s),this.owner.display.releaseGrant(s)}}}});import{randomUUID as GN}from"node:crypto";import{homedir as jQe}from"node:os";import{isAbsolute as zQe}from"node:path";var XI,i8=v(()=>{"use strict";Yn();VN();td();n8();Lv();XI=class{deps;dialogueId=GN();display=new Zp(e=>this.publish({type:"display.updated",displayId:e.displayId,turnId:e.turnId,originSessionId:e.originSessionId,generatedCharacters:e.generatedCharacters,shownCharacters:e.shownCharacters,complete:e.complete,outcome:e.outcome}));dialogue;presentation;sessions=new Map;generation=0;holder;revision=0;closed=!1;closing;constructor(e){this.deps=e,this.presentation=new _m({available:r=>this.presentationAvailable(r),publish:(r,i)=>this.publishPresentation(r,i)},e.clock)}presentationAvailable(e){let r=this.sessions.get(e);return!this.closed&&r?.capabilities.has("text")===!0&&r.capabilities.has(Wp)}publishPresentation(e,r){this.presentationAvailable(e)&&(this.revision++,this.sessions.get(e).deliver(this.envelope(e,{type:"presentation.state",presentation:r})))}get isClosed(){return this.closed}open(e){return this.validate(e),new ZI(GN(),e,this)}attach(e,r){this.validate(r);let i=Object.freeze({sessionId:e.sessionId,deviceId:r.deviceId,projectId:r.projectId,cwd:r.launchDir??jQe()});this.dialogue??=new WI(i,this.deps,n=>this.publish(n),()=>this.finishAll(),this.display,()=>this.voiceState(),{recipient:()=>this.holder?.capabilities.has("audio-out")?{sessionId:this.holder.sessionId,generation:this.generation}:void 0,emitTo:(n,s)=>{s.type==="voice.delivery.ended"&&s.reason!=="completed"&&this.sessions.get(n)?.discardAudio(s.portionId),this.revision+=1,this.sessions.get(n)?.deliver(this.envelope(n,s))}},this.presentation),this.sessions.set(e.sessionId,e),this.presentationAvailable(e.sessionId)&&this.presentation.attach(e.sessionId),e.deliver(this.envelope(e.sessionId,{type:"session.ready",attachmentMode:"shared"}));{let n=this.envelope(e.sessionId,{type:"dialogue.snapshot",throughRevision:this.revision,...this.display.snapshot(),state:this.dialogue.snapshotState(),...this.presentationAvailable(e.sessionId)&&{presentation:this.presentation.snapshot(e.sessionId)}});if(n.type!=="dialogue.snapshot")throw new Error("snapshot construction failed");for(;no(n)>GF;)if(n.display.length)n.display.shift(),n.omittedDisplay+=1;else if(n.state.notifications.length)n.state.notifications.pop(),n.state.omittedNotifications+=1;else if(n.state.jobs.length)n.state.jobs.pop(),n.state.omittedJobs+=1;else throw new Error("bounded snapshot metadata exceeds its budget");e.deliver(n)}return e.capabilities.has("audio-in")&&(this.holder?this.sendLease(e,"voice.session.held"):this.claim(e,i)),i}send(e,r){if(this.closed)throw new Qe(r.commandId,"closed");if(r.type==="presentation.select"||r.type==="presentation.ack"){if(!this.presentationAvailable(e.sessionId))throw new Qe(r.commandId,"unsupported");if(r.type==="presentation.select")this.presentation.select(e.sessionId,r.commandId,r.navigationSeq,r.selection);else{let{occurrenceId:n,cardId:s,revision:o,visibleBlockIds:a,failedBlockIds:c}=r;this.presentation.acknowledge(e.sessionId,r.commandId,{occurrenceId:n,cardId:s,revision:o,visibleBlockIds:a,failedBlockIds:c})}return}if(r.type==="display.ack"){e.acknowledge(r);return}if(r.type==="session.close")throw new Qe(r.commandId,"invalid");if(r.type==="voice.claim"){if(!e.capabilities.has("audio-in"))throw new Qe(r.commandId,"unsupported");this.claim(e,e.context);return}if(r.type==="turn.playout"){this.dialogue.acceptDeliveryReceipt(e.sessionId,r);return}if(r.type.startsWith("input.audio.")||r.type==="voice.release"||r.type==="turn.cancel"&&this.dialogue.isVoiceControl(r)){if(!e.capabilities.has("audio-in"))throw new Qe(r.commandId,"unsupported");if(!("leaseGeneration"in r)||!Number.isSafeInteger(r.leaseGeneration))throw new Qe(r.commandId,"invalid","voice control requires an integer lease generation");if(r.leaseGeneration!==this.generation||this.holder!==e)throw new Qe(r.commandId,"unauthorized","voice control requires the current lease holder")}if(r.type==="voice.release"){this.release("released");return}if(r.type==="input.audio.reset"){this.dialogue.replaceVoiceInput(this.generation,e.context);return}if(r.type==="input.audio.frame"&&(!(r.audio instanceof Uint8Array)||r.audio.byteLength===0||r.audio.byteLength>ed||r.audio.byteLength%2!==0))throw new Qe(r.commandId,"invalid","PCM frames must be even-sized 16 kHz chunks of at most 64 KiB");if(r.type==="input.text"&&!e.capabilities.has("text"))throw new Qe(r.commandId,"unsupported");this.dialogue.send(r,e.context)}detach(e,r="detached"){return e.discardAudio(),this.holder===e&&this.release(r),this.sessions.delete(e.sessionId),this.presentation.detach(e.sessionId),e.finish(this.envelope(e.sessionId,{type:"session.closed",reason:r})),Promise.resolve()}shutdown(){if(this.closing)return this.closing;this.closed=!0,this.presentation.close();let e,r;this.closing=new Promise((n,s)=>{e=n,r=s});let i=this.dialogue;return(async()=>{try{let n;try{this.release("shutdown")}catch(s){n=s}if(await i?.close(),n!==void 0)throw n instanceof Error?n:new Error("Voice input retirement failed",{cause:n});return{killedJobs:i?.killedJobsAtShutdown??0}}finally{this.finishAll()}})().then(e,r),this.closing}finishAll(){this.presentation.close();for(let e of this.sessions.values())e.finish(this.envelope(e.sessionId,{type:"session.closed",reason:"shutdown"}));this.sessions.clear()}publish(e){this.revision+=1;for(let r of[...this.sessions.values()])r.deliver(this.envelope(r.sessionId,e))}envelope(e,r){return{...r,sessionId:e,dialogueId:this.dialogueId,revision:this.revision,eventId:GN(),atMs:Date.now()}}voiceState(){return{generation:this.generation,...this.holder&&{holder:{sessionId:this.holder.sessionId,deviceId:this.holder.context?.deviceId??this.dialogue?.voiceContext?.deviceId??""}},...this.dialogue?.voiceUnavailable&&{asrUnavailable:this.dialogue.voiceUnavailable}}}claim(e,r){if(this.holder===e){this.sendLease(e,"voice.session.granted");return}let i=this.holder;i?.discardAudio(),this.holder=void 0,this.generation+=1,this.dialogue.retireVoiceInput(),this.dialogue.revokeVoiceOutput(i?.sessionId),i&&this.sendLease(i,"voice.session.revoked","takeover"),this.holder=e,this.dialogue.replaceVoiceInput(this.generation,r);for(let n of[...this.sessions.values()])this.sendLease(n,n===e?"voice.session.granted":"voice.session.held");this.dialogue.voiceStateChanged()}release(e){let r=this.holder;if(r){r.discardAudio(),this.holder=void 0,this.generation+=1,this.dialogue.retireVoiceInput(e!=="shutdown"),this.dialogue.revokeVoiceOutput(r.sessionId,e==="overflow"?"overflow":"owner_lost");for(let i of[...this.sessions.values()])this.sendLease(i,"voice.session.released",e);this.dialogue.voiceStateChanged()}}sendLease(e,r,i){this.revision+=1,e.deliver(this.envelope(e.sessionId,{type:r,voice:this.voiceState(),...i&&{reason:i}}))}validate(e){if(this.closed)throw new ro("closed");if(!e||typeof e.deviceId!="string"||!e.deviceId.length||!Array.isArray(e.clientCapabilities)||e.clientCapabilities.some(r=>r!=="text"&&r!=="audio-in"&&r!=="audio-out"&&r!==Wp)||!e.clientCapabilities.length)throw new ro("invalid");for(let r of[e.deviceId,e.clientId,e.projectId])if(r!==void 0&&(typeof r!="string"||Buffer.byteLength(r,"utf8")>1024))throw new ro("invalid","attachment metadata exceeds 1 KiB");if(e.launchDir!==void 0&&(typeof e.launchDir!="string"||!zQe(e.launchDir)||Buffer.byteLength(e.launchDir,"utf8")>32768))throw new ro("invalid","launchDir must be an absolute path of at most 32 KiB");if(this.sessions.size>=$F)throw new ro("attachment_limit")}}});function WQe(t,e,r){let i=new URL(t);i.searchParams.set("model_id",e),i.searchParams.set("audio_format",JQe(r)),i.searchParams.set("commit_strategy","manual"),r.language&&i.searchParams.set("language_code",r.language);for(let n of r.biasTerms??[])i.searchParams.append("keyterms",n);return i.toString()}function JQe(t){return t.encoding==="pcm_s16le"?`pcm_${t.sampleRate}`:"pcm_16000"}var s8,hf,YN,qN=v(()=>{"use strict";ld();dd();s8="wss://api.elevenlabs.io/v1/speech-to-text/realtime",hf=class{apiKey;socketFactory;model;endpoint;id="elevenlabs-scribe";constructor(e,r,i,n=s8){this.apiKey=e,this.socketFactory=r,this.model=i,this.endpoint=n}open(e){return new YN(this.apiKey,this.socketFactory,this.model,this.endpoint,e)}},YN=class{opts;socket;opened=!1;aborted=!1;closed=!1;pending=[];committed=[];transcriptCb;errorCb;endPending=null;commitRequested=!1;constructor(e,r,i,n,s){this.opts=s,this.socket=r(WQe(n,i,s),{"xi-api-key":e}),this.socket.onOpen(()=>this.handleOpen()),this.socket.onMessage(o=>this.handleMessage(o)),this.socket.onError(o=>this.handleError(o)),this.socket.onClose(()=>this.handleClose())}pushAudio(e){if(!(this.aborted||this.closed||this.commitRequested)){if(!this.opened){this.pending.push(e);return}this.sendChunk(e,!1)}}onTranscript(e){this.transcriptCb=e}onError(e){this.errorCb=e}end(){return this.aborted?Promise.reject(new Error("ASR stream already aborted")):this.endPending?Promise.reject(new Error("ASR end() already in progress")):new Promise((e,r)=>{this.endPending={resolve:e,reject:r},this.commitRequested=!0,this.opened&&this.sendCommit()})}abort(){if(this.aborted=!0,this.endPending){let{reject:e}=this.endPending;this.endPending=null,e(new Error("ASR stream aborted"))}return this.teardown(),Promise.resolve()}handleOpen(){if(!(this.aborted||this.closed)){this.opened=!0;for(let e of this.pending)this.sendChunk(e,!1);this.pending.length=0,this.commitRequested&&this.sendCommit()}}handleMessage(e){if(this.aborted||this.closed)return;let r=so(e);if(!r)return;let i=hl(r);if(i){let s=aO(i);this.handleError(s!==null?new yn(`stream error (${i})`,s):new Error(`stream error (${i})`));return}let n=r.message_type;if(n==="partial_transcript"){this.opts.emitPartials&&this.transcriptCb?.({text:ud(r.text),isFinal:!1,startMs:0});return}if(n==="committed_transcript"||n==="committed_transcript_with_timestamps"){let s=ud(r.text);s.length>0&&this.committed.push(s),this.endPending&&this.resolveEnd()}}handleError(e){if(this.closed)return;let r=cO("ElevenLabs ASR",e);if(this.endPending){let{reject:i}=this.endPending;this.endPending=null,i(r)}this.errorCb?.(r),this.teardown()}handleClose(){if(this.closed)return;this.closed=!0;let e=new Error("ElevenLabs ASR connection closed unexpectedly");if(this.endPending){let{reject:r}=this.endPending;this.endPending=null,r(e)}this.errorCb?.(e)}resolveEnd(){if(!this.endPending)return;let e={text:this.committed.join(" ").trim(),isFinal:!0,startMs:0};this.transcriptCb?.(e);let{resolve:r}=this.endPending;this.endPending=null,this.teardown(),r(e)}sendChunk(e,r){this.socket.send(JSON.stringify({message_type:"input_audio_chunk",audio_base_64:oO(e),commit:r,sample_rate:this.opts.sampleRate}))}sendCommit(){this.sendChunk(new Uint8Array(0),!0)}teardown(){this.closed||(this.closed=!0,this.socket.close())}}});import{randomUUID as ZQe}from"node:crypto";function KQe(t,e){let r=t.engineVoice[e];if(!r)throw new Error(`voice '${t.id}' has no '${e}' engineVoice mapping`);if(r.kind!=="preset")throw new Error(`the ${e} adapter needs a preset voiceId for '${t.id}', got kind '${r.kind}'`);return r.voiceId}function eve(t,e,r,i){let n=new URL(t.replace("{voice_id}",encodeURIComponent(e)));return n.searchParams.set("model_id",r),n.searchParams.set("output_format",tve(i)),n.searchParams.set("inactivity_timeout","180"),n.searchParams.set("auto_mode","true"),n.toString()}function tve(t){return t.encoding==="pcm_s16le"?`pcm_${t.sampleRate}`:"pcm_16000"}var o8,XQe,ff,jN,zN=v(()=>{"use strict";dd();o8="wss://api.elevenlabs.io/v1/text-to-speech/{voice_id}/multi-stream-input",XQe={stability:.5,similarity_boost:.75,use_speaker_boost:!0},ff=class{apiKey;socketFactory;model;endpointTemplate;id="elevenlabs-flash";constructor(e,r,i,n=o8){this.apiKey=e,this.socketFactory=r,this.model=i,this.endpointTemplate=n}speak(e){return new jN(this.apiKey,this.socketFactory,this.model,this.endpointTemplate,this.id,e)}},jN=class{socket;contextId=ZQe();opened=!1;cancelled=!1;closed=!1;endRequested=!1;closeContextSent=!1;pending=[];audioCb;errorCb;endPending=null;constructor(e,r,i,n,s,o){let a=KQe(o.voice,s);this.socket=r(eve(n,a,i,o),{"xi-api-key":e}),this.socket.onOpen(()=>this.handleOpen()),this.socket.onMessage(c=>this.handleMessage(c)),this.socket.onError(c=>this.handleError(c)),this.socket.onClose(()=>this.handleClose())}pushText(e){if(!(this.cancelled||this.closed||this.endRequested)){if(!this.opened){this.pending.push(e);return}this.sendText(e)}}onAudio(e){this.audioCb=e}onError(e){this.errorCb=e}end(){return this.cancelled||this.closed?Promise.resolve():this.endPending?Promise.reject(new Error("TTS end() already in progress")):new Promise((e,r)=>{this.endPending={resolve:e,reject:r},this.endRequested=!0,this.opened&&this.sendEndOfContext()})}cancel(){if(this.cancelled||this.closed)return this.cancelled=!0,Promise.resolve();if(this.cancelled=!0,this.endPending){let{resolve:e}=this.endPending;this.endPending=null,e()}return this.opened&&this.sendCloseContext(),this.teardown(),Promise.resolve()}handleOpen(){if(!(this.cancelled||this.closed)){this.opened=!0,this.sendInit();for(let e of this.pending)this.sendText(e);this.pending.length=0,this.endRequested&&this.sendEndOfContext()}}handleMessage(e){if(this.cancelled||this.closed)return;let r=so(e);if(!r)return;let i=hl(r);if(i){this.handleError(new Error(`stream error (${i})`));return}typeof r.audio=="string"&&r.audio.length>0&&this.audioCb?.(om(r.audio)),(r.isFinal===!0||r.is_final===!0)&&this.resolveEnd()}handleError(e){if(this.closed)return;let r=Ad("ElevenLabs TTS",e);if(this.endPending){let{reject:i}=this.endPending;this.endPending=null,i(r)}this.errorCb?.(r),this.teardown()}handleClose(){if(this.closed)return;this.closed=!0;let e=new Error("ElevenLabs TTS connection closed unexpectedly");if(this.endPending){let{reject:r}=this.endPending;this.endPending=null,r(e)}this.errorCb?.(e)}resolveEnd(){if(!this.endPending)return;let{resolve:e}=this.endPending;this.endPending=null,this.teardown(),e()}sendInit(){this.socket.send(JSON.stringify({text:" ",voice_settings:XQe,context_id:this.contextId}))}sendText(e){let r=e.endsWith(" ")?e:`${e} `;this.socket.send(JSON.stringify({text:r,context_id:this.contextId}))}sendEndOfContext(){this.sendFlush(),this.sendCloseContext()}sendFlush(){this.socket.send(JSON.stringify({context_id:this.contextId,text:"",flush:!0}))}sendCloseContext(){this.closeContextSent||(this.closeContextSent=!0,this.socket.send(JSON.stringify({context_id:this.contextId,close_context:!0})))}teardown(){this.closed||(this.closed=!0,this.socket.close())}}});function rve(t){if(t===void 0)return;let e;try{e=new URL(t).protocol}catch{throw new Error("sherpa-onnx ASR route url must be a valid ws:// or wss:// URL")}if(e!=="ws:"&&e!=="wss:")throw new Error(`sherpa-onnx ASR route url must use the ws:// or wss:// scheme (got '${e}//' - this is a WebSocket endpoint, not HTTP)`)}var gf,WN=v(()=>{"use strict";qN();zN();um();av();cm();wm();gf=class{socketFactory;fetchImpl;constructor(e=bl,r=fetch){this.socketFactory=e,this.fetchImpl=r}asrEngine(e,r){switch(e.provider){case"elevenlabs":return new hf(r,this.socketFactory,e.model);case"sherpa-onnx":return rve(e.url),new hd(this.socketFactory,e.url);case"openai-compat":return new sm(this.fetchImpl,e.url,e.model,r);default:throw new Error(`no stt adapter for provider '${e.provider}'`)}}ttsEngine(e,r){if(e.provider==="elevenlabs")return lm.includes(e.model)?new fd(r,this.socketFactory,e.model):new ff(r,this.socketFactory,e.model);throw new Error(`no tts adapter for provider '${e.provider}'`)}}});function ZN(t={}){let e=new ua(void 0,t.logLevel);te.setLevel(e.logLevel),te.debug("core created",{logLevel:e.logLevel}),_u.sweepStale(te);let{fetchImpl:r}=t,i={configService:t.configService??new _r,registry:t.registry??new ZA(r),voiceRegistry:t.voiceRegistry??new gf(t.voiceSocketFactory,r),createTurnEvaluator:t.createTurnEvaluator??(n=>new Fu(n,r)),...t.systemPrompt!==void 0&&{systemPrompt:t.systemPrompt},...t.voiceIdentity!==void 0&&{voiceIdentity:t.voiceIdentity},...t.createTurnController!==void 0&&{createTurnController:t.createTurnController},...t.createSmartTurnInference!==void 0&&{createSmartTurnInference:t.createSmartTurnInference},...t.createFrameClassifier!==void 0&&{createFrameClassifier:t.createFrameClassifier},...t.createSegmenter!==void 0&&{createSegmenter:t.createSegmenter},...t.clock!==void 0&&{clock:t.clock}};return new JN(i)}var nve,ive,JN,a8=v(()=>{"use strict";Rt();TQ();RQ();GQ();i8();JR();ON();WN();nve="jarvis-core",ive="0.1.0-dev",JN=class{attachments;constructor(e){this.attachments=new XI(e)}describe(){return Promise.resolve({name:nve,version:ive})}async openSession(e){return await Promise.resolve(this.attachments.open(e))}shutdown(){return this.attachments.shutdown()}}});import{readFileSync as sve,writeFileSync as ove}from"node:fs";function pf(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function lve(t,e){let r={};if(!pf(t))return r;for(let i of cve){let n=t[i];if(!Array.isArray(n))continue;let s=[];for(let o of n)!pf(o)||typeof o.id!="string"||s.push(typeof o.label=="string"?{id:o.id,label:o.label}:{id:o.id});(s.length>0||e&&i==="text"&&n.length===0)&&(r[i]=s)}return r}var u8,A8,c8,l8,ave,cve,vs,d8=v(()=>{"use strict";Xs();Dm();Ji();ul();u8="model-catalogue.json",A8=1440*60*1e3,c8=2,l8=1,ave={stt:!0,tts:!0,text:!0,embedding:!0,search:!0},cve=Object.keys(ave);vs=class{fetchImpl;timeoutMs=3e3;home;now;ttlMs;providers;fetchFailed=new Set;constructor(e=fetch,r){this.fetchImpl=e,this.home=r?.home??Wt,this.now=r?.now??(()=>Date.now()),this.ttlMs=r?.ttlMs??A8,this.providers=Sm}async models(e,r,i){let n=this.providers[e],s=n?.defaultModel[r],o=n?.fastModel?.[r],a={source:"prefill",models:s===void 0?[]:[{id:s}],recommended:s,recommendedFast:o};if(!n?.listModels||!n.capabilities.includes(r))return a;let c=this.readCacheEntry(e,i?.url),l=c?.models[r],u=c===void 0?0:Math.max(0,this.now()-c.fetchedAtMs),d=A=>({source:"cache",models:A,recommended:s,recommendedFast:o,cacheAgeMs:u});if(c!==void 0){let A=this.now()-c.fetchedAtMs;if(c.currentCuration&&A>=0&&A<this.ttlMs)return l===void 0?a:d(l)}let h=await this.tryFetch(e,n,i);if(h!==void 0){let A=h[r];return A===void 0?a:{source:"live",models:A,recommended:s,recommendedFast:o}}return l!==void 0?d(l):a}async refresh(e,r){let i=this.providers[e];if(!i?.listModels)return{ok:!1,status:"no-lister"};let n=this.cacheIdentity(e,r?.url);if(n===void 0)return{ok:!1,status:"failed",detail:"invalid Ollama server address"};this.fetchFailed.delete(n);let s=o=>{let a=this.readCacheEntry(e,r?.url);return a===void 0?{ok:!1,status:"failed",detail:o}:{ok:!1,status:"failed",detail:o,cached:{models:a.models,cacheAgeMs:Math.max(0,this.now()-a.fetchedAtMs)}}};if(i.keylessLister!==!0&&r?.key===void 0)return s("no API key available");try{let o=r?.signal??AbortSignal.timeout(this.timeoutMs),a=await i.listModels(r?.key,this.fetchImpl,o,r);return this.writeCacheEntry(e,a,r?.url),{ok:!0,status:"refreshed",models:a}}catch(o){return s(Jt(o,r?.key))}}cached(e,r,i){let n=this.readCacheEntry(e,i?.url),s=n?.models[r];if(n===void 0||s===void 0)return;let o=this.now()-n.fetchedAtMs;return{models:s,cacheAgeMs:Math.max(0,o),fresh:n.currentCuration&&o>=0&&o<this.ttlMs}}async tryFetch(e,r,i){if(r.listModels===void 0)return;let n=this.cacheIdentity(e,i?.url);if(!(n===void 0||this.fetchFailed.has(n))&&!(r.keylessLister!==!0&&i?.key===void 0))try{let s=i?.signal??AbortSignal.timeout(this.timeoutMs),o=await r.listModels(i?.key,this.fetchImpl,s,i);return this.writeCacheEntry(e,o,i?.url),o}catch{this.fetchFailed.add(n);return}}cachePath(){return this.home.resolve(u8)}readCacheFile(){let e;try{e=JSON.parse(sve(this.cachePath(),"utf8"))}catch{return}if(!(!pf(e)||e.version!==c8))return pf(e.providers)?e.providers:void 0}readCacheEntry(e,r){let i=this.cacheIdentity(e,r);if(i===void 0)return;let n=this.readCacheFile()?.[i];if(!pf(n))return;let{fetchedAtMs:s}=n;if(typeof s!="number"||!Number.isFinite(s))return;let o=lve(n.models,e==="ollama-local");if(Object.keys(o).length===0)return;let a=e!=="elevenlabs"||n.curationRevision===l8;return{fetchedAtMs:s,models:o,currentCuration:a}}writeCacheEntry(e,r,i){try{let n=this.cacheIdentity(e,i);if(n===void 0)return;let s=this.readCacheFile()??{};s[n]={fetchedAtMs:this.now(),models:r,...e==="elevenlabs"?{curationRevision:l8}:{}},this.home.ensureDir(),ove(this.cachePath(),`${JSON.stringify({version:c8,providers:s},null,2)}
|
|
404
404
|
`)}catch{}}cacheIdentity(e,r){try{return jA(e,r)}catch{return}}}});var Ss=v(()=>{"use strict";a8();RQ();Dm();d8();GQ();VQ();ul();GA();Fm();cl();ol();Rm();wm();qN();zN();um();cm();WN();PN();RN();NN();UN();ha();SN();vN();VI();LN();kI();dl()});var Hu=w((LVe,m8)=>{"use strict";var Ive="2.0.0",yve=Number.MAX_SAFE_INTEGER||9007199254740991,Cve=16,bve=250,xve=["major","premajor","minor","preminor","patch","prepatch","prerelease"];m8.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:Cve,MAX_SAFE_BUILD_LENGTH:bve,MAX_SAFE_INTEGER:yve,RELEASE_TYPES:xve,SEMVER_SPEC_VERSION:Ive,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var If=w((UVe,E8)=>{"use strict";var Bve=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};E8.exports=Bve});var Vu=w((Oi,I8)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:e2,MAX_SAFE_BUILD_LENGTH:wve,MAX_LENGTH:Qve}=Hu(),vve=If();Oi=I8.exports={};var Sve=Oi.re=[],Dve=Oi.safeRe=[],K=Oi.src=[],kve=Oi.safeSrc=[],ee=Oi.t={},_ve=0,t2="[a-zA-Z0-9-]",Tve=[["\\s",1],["\\d",Qve],[t2,wve]],Rve=t=>{for(let[e,r]of Tve)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},Be=(t,e,r)=>{let i=Rve(e),n=_ve++;vve(t,n,e),ee[t]=n,K[n]=e,kve[n]=i,Sve[n]=new RegExp(e,r?"g":void 0),Dve[n]=new RegExp(i,r?"g":void 0)};Be("NUMERICIDENTIFIER","0|[1-9]\\d*");Be("NUMERICIDENTIFIERLOOSE","\\d+");Be("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${t2}*`);Be("MAINVERSION",`(${K[ee.NUMERICIDENTIFIER]})\\.(${K[ee.NUMERICIDENTIFIER]})\\.(${K[ee.NUMERICIDENTIFIER]})`);Be("MAINVERSIONLOOSE",`(${K[ee.NUMERICIDENTIFIERLOOSE]})\\.(${K[ee.NUMERICIDENTIFIERLOOSE]})\\.(${K[ee.NUMERICIDENTIFIERLOOSE]})`);Be("PRERELEASEIDENTIFIER",`(?:${K[ee.NONNUMERICIDENTIFIER]}|${K[ee.NUMERICIDENTIFIER]})`);Be("PRERELEASEIDENTIFIERLOOSE",`(?:${K[ee.NONNUMERICIDENTIFIER]}|${K[ee.NUMERICIDENTIFIERLOOSE]})`);Be("PRERELEASE",`(?:-(${K[ee.PRERELEASEIDENTIFIER]}(?:\\.${K[ee.PRERELEASEIDENTIFIER]})*))`);Be("PRERELEASELOOSE",`(?:-?(${K[ee.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${K[ee.PRERELEASEIDENTIFIERLOOSE]})*))`);Be("BUILDIDENTIFIER",`${t2}+`);Be("BUILD",`(?:\\+(${K[ee.BUILDIDENTIFIER]}(?:\\.${K[ee.BUILDIDENTIFIER]})*))`);Be("FULLPLAIN",`v?${K[ee.MAINVERSION]}${K[ee.PRERELEASE]}?${K[ee.BUILD]}?`);Be("FULL",`^${K[ee.FULLPLAIN]}$`);Be("LOOSEPLAIN",`[v=\\s]*${K[ee.MAINVERSIONLOOSE]}${K[ee.PRERELEASELOOSE]}?${K[ee.BUILD]}?`);Be("LOOSE",`^${K[ee.LOOSEPLAIN]}$`);Be("GTLT","((?:<|>)?=?)");Be("XRANGEIDENTIFIERLOOSE",`${K[ee.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);Be("XRANGEIDENTIFIER",`${K[ee.NUMERICIDENTIFIER]}|x|X|\\*`);Be("XRANGEPLAIN",`[v=\\s]*(${K[ee.XRANGEIDENTIFIER]})(?:\\.(${K[ee.XRANGEIDENTIFIER]})(?:\\.(${K[ee.XRANGEIDENTIFIER]})(?:${K[ee.PRERELEASE]})?${K[ee.BUILD]}?)?)?`);Be("XRANGEPLAINLOOSE",`[v=\\s]*(${K[ee.XRANGEIDENTIFIERLOOSE]})(?:\\.(${K[ee.XRANGEIDENTIFIERLOOSE]})(?:\\.(${K[ee.XRANGEIDENTIFIERLOOSE]})(?:${K[ee.PRERELEASELOOSE]})?${K[ee.BUILD]}?)?)?`);Be("XRANGE",`^${K[ee.GTLT]}\\s*${K[ee.XRANGEPLAIN]}$`);Be("XRANGELOOSE",`^${K[ee.GTLT]}\\s*${K[ee.XRANGEPLAINLOOSE]}$`);Be("COERCEPLAIN",`(^|[^\\d])(\\d{1,${e2}})(?:\\.(\\d{1,${e2}}))?(?:\\.(\\d{1,${e2}}))?`);Be("COERCE",`${K[ee.COERCEPLAIN]}(?:$|[^\\d])`);Be("COERCEFULL",K[ee.COERCEPLAIN]+`(?:${K[ee.PRERELEASE]})?(?:${K[ee.BUILD]})?(?:$|[^\\d])`);Be("COERCERTL",K[ee.COERCE],!0);Be("COERCERTLFULL",K[ee.COERCEFULL],!0);Be("LONETILDE","(?:~>?)");Be("TILDETRIM",`(\\s*)${K[ee.LONETILDE]}\\s+`,!0);Oi.tildeTrimReplace="$1~";Be("TILDE",`^${K[ee.LONETILDE]}${K[ee.XRANGEPLAIN]}$`);Be("TILDELOOSE",`^${K[ee.LONETILDE]}${K[ee.XRANGEPLAINLOOSE]}$`);Be("LONECARET","(?:\\^)");Be("CARETTRIM",`(\\s*)${K[ee.LONECARET]}\\s+`,!0);Oi.caretTrimReplace="$1^";Be("CARET",`^${K[ee.LONECARET]}${K[ee.XRANGEPLAIN]}$`);Be("CARETLOOSE",`^${K[ee.LONECARET]}${K[ee.XRANGEPLAINLOOSE]}$`);Be("COMPARATORLOOSE",`^${K[ee.GTLT]}\\s*(${K[ee.LOOSEPLAIN]})$|^$`);Be("COMPARATOR",`^${K[ee.GTLT]}\\s*(${K[ee.FULLPLAIN]})$|^$`);Be("COMPARATORTRIM",`(\\s*)${K[ee.GTLT]}\\s*(${K[ee.LOOSEPLAIN]}|${K[ee.XRANGEPLAIN]})`,!0);Oi.comparatorTrimReplace="$1$2$3";Be("HYPHENRANGE",`^\\s*(${K[ee.XRANGEPLAIN]})\\s+-\\s+(${K[ee.XRANGEPLAIN]})\\s*$`);Be("HYPHENRANGELOOSE",`^\\s*(${K[ee.XRANGEPLAINLOOSE]})\\s+-\\s+(${K[ee.XRANGEPLAINLOOSE]})\\s*$`);Be("STAR","(<|>)?=?\\s*\\*");Be("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");Be("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var ny=w((FVe,y8)=>{"use strict";var Nve=Object.freeze({loose:!0}),Mve=Object.freeze({}),Lve=t=>t?typeof t!="object"?Nve:t:Mve;y8.exports=Lve});var r2=w((OVe,x8)=>{"use strict";var C8=/^[0-9]+$/,b8=(t,e)=>{if(typeof t=="number"&&typeof e=="number")return t===e?0:t<e?-1:1;let r=C8.test(t),i=C8.test(e);return r&&i&&(t=+t,e=+e),t===e?0:r&&!i?-1:i&&!r?1:t<e?-1:1},Uve=(t,e)=>b8(e,t);x8.exports={compareIdentifiers:b8,rcompareIdentifiers:Uve}});var nr=w(($Ve,w8)=>{"use strict";var iy=If(),{MAX_LENGTH:B8,MAX_SAFE_INTEGER:sy}=Hu(),{safeRe:oy,t:ay}=Vu(),Fve=ny(),{compareIdentifiers:n2}=r2(),Ove=(t,e)=>{let r=e.split(".");if(r.length>t.length)return!1;for(let i=0;i<r.length;i++)if(n2(t[i],r[i])!==0)return!1;return!0},i2=class t{constructor(e,r){if(r=Fve(r),e instanceof t){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>B8)throw new TypeError(`version is longer than ${B8} characters`);iy("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let i=e.trim().match(r.loose?oy[ay.LOOSE]:oy[ay.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>sy||this.major<0)throw new TypeError("Invalid major version");if(this.minor>sy||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>sy||this.patch<0)throw new TypeError("Invalid patch version");i[4]?this.prerelease=i[4].split(".").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s<sy)return s}return n}):this.prerelease=[],this.build=i[5]?i[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(e){if(iy("SemVer.compare",this.version,this.options,e),!(e instanceof t)){if(typeof e=="string"&&e===this.version)return 0;e=new t(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof t||(e=new t(e,this.options)),this.major<e.major?-1:this.major>e.major?1:this.minor<e.minor?-1:this.minor>e.minor?1:this.patch<e.patch?-1:this.patch>e.patch?1:0}comparePre(e){if(e instanceof t||(e=new t(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let r=0;do{let i=this.prerelease[r],n=e.prerelease[r];if(iy("prerelease compare",r,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return n2(i,n)}while(++r)}compareBuild(e){e instanceof t||(e=new t(e,this.options));let r=0;do{let i=this.build[r],n=e.build[r];if(iy("build compare",r,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return n2(i,n)}while(++r)}inc(e,r,i){if(e.startsWith("pre")){if(!r&&i===!1)throw new Error("invalid increment argument: identifier is empty");if(r){let n=`-${r}`.match(this.options.loose?oy[ay.PRERELEASELOOSE]:oy[ay.PRERELEASE]);if(!n||n[1]!==r)throw new Error(`invalid identifier: ${r}`)}}switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",r,i);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",r,i);break;case"prepatch":this.prerelease.length=0,this.inc("patch",r,i),this.inc("pre",r,i);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",r,i),this.inc("pre",r,i);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let n=Number(i)?1:0;if(this.prerelease.length===0)this.prerelease=[n];else{let s=this.prerelease.length;for(;--s>=0;)typeof this.prerelease[s]=="number"&&(this.prerelease[s]++,s=-2);if(s===-1){if(r===this.prerelease.join(".")&&i===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(n)}}if(r){let s=[r,n];if(i===!1&&(s=[r]),Ove(this.prerelease,r)){let o=this.prerelease[r.split(".").length];isNaN(o)&&(this.prerelease=s)}else this.prerelease=s}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};w8.exports=i2});var Ho=w((PVe,v8)=>{"use strict";var Q8=nr(),$ve=(t,e,r=!1)=>{if(t instanceof Q8)return t;try{return new Q8(t,e)}catch(i){if(!r)return null;throw i}};v8.exports=$ve});var D8=w((HVe,S8)=>{"use strict";var Pve=Ho(),Hve=(t,e)=>{let r=Pve(t,e);return r?r.version:null};S8.exports=Hve});var _8=w((VVe,k8)=>{"use strict";var Vve=Ho(),Gve=(t,e)=>{let r=Vve(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};k8.exports=Gve});var N8=w((GVe,R8)=>{"use strict";var T8=nr(),Yve=(t,e,r,i,n)=>{typeof r=="string"&&(n=i,i=r,r=void 0);try{return new T8(t instanceof T8?t.version:t,r).inc(e,i,n).version}catch{return null}};R8.exports=Yve});var U8=w((YVe,L8)=>{"use strict";var M8=Ho(),qve=(t,e)=>{let r=M8(t,null,!0),i=M8(e,null,!0),n=r.compare(i);if(n===0)return null;let s=n>0,o=s?r:i,a=s?i:r,c=!!o.prerelease.length;if(!!a.prerelease.length&&!c){if(!a.patch&&!a.minor)return"major";if(a.compareMain(o)===0)return a.minor&&!a.patch?"minor":"patch"}let u=c?"pre":"";return r.major!==i.major?u+"major":r.minor!==i.minor?u+"minor":r.patch!==i.patch?u+"patch":"prerelease"};L8.exports=qve});var O8=w((qVe,F8)=>{"use strict";var jve=nr(),zve=(t,e)=>new jve(t,e).major;F8.exports=zve});var P8=w((jVe,$8)=>{"use strict";var Wve=nr(),Jve=(t,e)=>new Wve(t,e).minor;$8.exports=Jve});var V8=w((zVe,H8)=>{"use strict";var Zve=nr(),Xve=(t,e)=>new Zve(t,e).patch;H8.exports=Xve});var Y8=w((WVe,G8)=>{"use strict";var Kve=Ho(),eSe=(t,e)=>{let r=Kve(t,e);return r&&r.prerelease.length?r.prerelease:null};G8.exports=eSe});var Un=w((JVe,j8)=>{"use strict";var q8=nr(),tSe=(t,e,r)=>new q8(t,r).compare(new q8(e,r));j8.exports=tSe});var W8=w((ZVe,z8)=>{"use strict";var rSe=Un(),nSe=(t,e,r)=>rSe(e,t,r);z8.exports=nSe});var Z8=w((XVe,J8)=>{"use strict";var iSe=Un(),sSe=(t,e)=>iSe(t,e,!0);J8.exports=sSe});var cy=w((KVe,K8)=>{"use strict";var X8=nr(),oSe=(t,e,r)=>{let i=new X8(t,r),n=new X8(e,r);return i.compare(n)||i.compareBuild(n)};K8.exports=oSe});var tZ=w((eGe,eZ)=>{"use strict";var aSe=cy(),cSe=(t,e)=>t.sort((r,i)=>aSe(r,i,e));eZ.exports=cSe});var nZ=w((tGe,rZ)=>{"use strict";var lSe=cy(),uSe=(t,e)=>t.sort((r,i)=>lSe(i,r,e));rZ.exports=uSe});var yf=w((rGe,iZ)=>{"use strict";var ASe=Un(),dSe=(t,e,r)=>ASe(t,e,r)>0;iZ.exports=dSe});var ly=w((nGe,sZ)=>{"use strict";var hSe=Un(),fSe=(t,e,r)=>hSe(t,e,r)<0;sZ.exports=fSe});var s2=w((iGe,oZ)=>{"use strict";var gSe=Un(),pSe=(t,e,r)=>gSe(t,e,r)===0;oZ.exports=pSe});var o2=w((sGe,aZ)=>{"use strict";var mSe=Un(),ESe=(t,e,r)=>mSe(t,e,r)!==0;aZ.exports=ESe});var uy=w((oGe,cZ)=>{"use strict";var ISe=Un(),ySe=(t,e,r)=>ISe(t,e,r)>=0;cZ.exports=ySe});var Ay=w((aGe,lZ)=>{"use strict";var CSe=Un(),bSe=(t,e,r)=>CSe(t,e,r)<=0;lZ.exports=bSe});var a2=w((cGe,uZ)=>{"use strict";var xSe=s2(),BSe=o2(),wSe=yf(),QSe=uy(),vSe=ly(),SSe=Ay(),DSe=(t,e,r,i)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return xSe(t,r,i);case"!=":return BSe(t,r,i);case">":return wSe(t,r,i);case">=":return QSe(t,r,i);case"<":return vSe(t,r,i);case"<=":return SSe(t,r,i);default:throw new TypeError(`Invalid operator: ${e}`)}};uZ.exports=DSe});var dZ=w((lGe,AZ)=>{"use strict";var kSe=nr(),_Se=Ho(),{safeRe:dy,t:hy}=Vu(),TSe=(t,e)=>{if(t instanceof kSe)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(e.includePrerelease?dy[hy.COERCEFULL]:dy[hy.COERCE]);else{let c=e.includePrerelease?dy[hy.COERCERTLFULL]:dy[hy.COERCERTL],l;for(;(l=c.exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||l.index+l[0].length!==r.index+r[0].length)&&(r=l),c.lastIndex=l.index+l[1].length+l[2].length;c.lastIndex=-1}if(r===null)return null;let i=r[2],n=r[3]||"0",s=r[4]||"0",o=e.includePrerelease&&r[5]?`-${r[5]}`:"",a=e.includePrerelease&&r[6]?`+${r[6]}`:"";return _Se(`${i}.${n}.${s}${o}${a}`,e)};AZ.exports=TSe});var fZ=w((uGe,hZ)=>{"use strict";var RSe=Ho(),NSe=Hu(),MSe=nr(),LSe=(t,e,r)=>{if(!NSe.RELEASE_TYPES.includes(e))return null;let i=USe(t,r);return i&&FSe(i,e)},USe=(t,e)=>{let r=t instanceof MSe?t.version:t;return RSe(r,e)},FSe=(t,e)=>{if(OSe(e))return t.version;switch(t.prerelease=[],e){case"major":t.minor=0,t.patch=0;break;case"minor":t.patch=0;break}return t.format()},OSe=t=>t.startsWith("pre");hZ.exports=LSe});var pZ=w((AGe,gZ)=>{"use strict";var c2=class{constructor(){this.max=1e3,this.map=new Map}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}delete(e){return this.map.delete(e)}set(e,r){if(!this.delete(e)&&r!==void 0){if(this.map.size>=this.max){let n=this.map.keys().next().value;this.delete(n)}this.map.set(e,r)}return this}};gZ.exports=c2});var Fn=w((dGe,yZ)=>{"use strict";var $Se=/\s+/g,l2=class t{constructor(e,r){if(r=HSe(r),e instanceof t)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new t(e.raw,r);if(e instanceof u2)return this.raw=e.value,this.set=[[e]],this.formatted=void 0,this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().replace($Se," "),this.set=this.raw.split("||").map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!EZ(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&ZSe(n[0])){this.set=[n];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let e=0;e<this.set.length;e++){e>0&&(this.formatted+="||");let r=this.set[e];for(let i=0;i<r.length;i++)i>0&&(this.formatted+=" "),this.formatted+=r[i].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(e){e=e.replace(JSe,"");let i=((this.options.includePrerelease&&zSe)|(this.options.loose&&WSe))+":"+e,n=mZ.get(i);if(n)return n;let s=this.options.loose,o=s?wr[ir.HYPHENRANGELOOSE]:wr[ir.HYPHENRANGE];e=e.replace(o,aDe(this.options.includePrerelease)),ht("hyphen replace",e),e=e.replace(wr[ir.COMPARATORTRIM],YSe),ht("comparator trim",e),e=e.replace(wr[ir.TILDETRIM],qSe),ht("tilde trim",e),e=e.replace(wr[ir.CARETTRIM],jSe),ht("caret trim",e);let a=e.split(" ").map(d=>XSe(d,this.options)).join(" ").split(/\s+/).map(d=>oDe(d,this.options));s&&(a=a.filter(d=>(ht("loose invalid filter",d,this.options),!!d.match(wr[ir.COMPARATORLOOSE])))),ht("range list",a);let c=new Map,l=a.map(d=>new u2(d,this.options));for(let d of l){if(EZ(d))return[d];c.set(d.value,d)}c.size>1&&c.has("")&&c.delete("");let u=[...c.values()];return mZ.set(i,u),u}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Range is required");return this.set.some(i=>IZ(i,r)&&e.set.some(n=>IZ(n,r)&&i.every(s=>n.every(o=>s.intersects(o,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new VSe(e,this.options)}catch{return!1}for(let r=0;r<this.set.length;r++)if(cDe(this.set[r],e,this.options))return!0;return!1}};yZ.exports=l2;var PSe=pZ(),mZ=new PSe,HSe=ny(),u2=Cf(),ht=If(),VSe=nr(),{safeRe:wr,src:GSe,t:ir,comparatorTrimReplace:YSe,tildeTrimReplace:qSe,caretTrimReplace:jSe}=Vu(),{FLAG_INCLUDE_PRERELEASE:zSe,FLAG_LOOSE:WSe}=Hu(),JSe=new RegExp(GSe[ir.BUILD],"g"),EZ=t=>t.value==="<0.0.0-0",ZSe=t=>t.value==="",IZ=(t,e)=>{let r=!0,i=t.slice(),n=i.pop();for(;r&&i.length;)r=i.every(s=>n.intersects(s,e)),n=i.pop();return r},XSe=(t,e)=>(t=t.replace(wr[ir.BUILD],""),ht("comp",t,e),t=tDe(t,e),ht("caret",t),t=KSe(t,e),ht("tildes",t),t=nDe(t,e),ht("xrange",t),t=sDe(t,e),ht("stars",t),t),Qr=t=>!t||t.toLowerCase()==="x"||t==="*",KSe=(t,e)=>t.trim().split(/\s+/).map(r=>eDe(r,e)).join(" "),eDe=(t,e)=>{let r=e.loose?wr[ir.TILDELOOSE]:wr[ir.TILDE];return t.replace(r,(i,n,s,o,a)=>{ht("tilde",t,i,n,s,o,a);let c;return Qr(n)?c="":Qr(s)?c=`>=${n}.0.0 <${+n+1}.0.0-0`:Qr(o)?c=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(ht("replaceTilde pr",a),c=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):c=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,ht("tilde return",c),c})},tDe=(t,e)=>t.trim().split(/\s+/).map(r=>rDe(r,e)).join(" "),rDe=(t,e)=>{ht("caret",t,e);let r=e.loose?wr[ir.CARETLOOSE]:wr[ir.CARET],i=e.includePrerelease?"-0":"";return t.replace(r,(n,s,o,a,c)=>{ht("caret",t,n,s,o,a,c);let l;return Qr(s)?l="":Qr(o)?l=`>=${s}.0.0${i} <${+s+1}.0.0-0`:Qr(a)?s==="0"?l=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:l=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:c?(ht("replaceCaret pr",c),s==="0"?o==="0"?l=`>=${s}.${o}.${a}-${c} <${s}.${o}.${+a+1}-0`:l=`>=${s}.${o}.${a}-${c} <${s}.${+o+1}.0-0`:l=`>=${s}.${o}.${a}-${c} <${+s+1}.0.0-0`):(ht("no pr"),s==="0"?o==="0"?l=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:l=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:l=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),ht("caret return",l),l})},nDe=(t,e)=>(ht("replaceXRanges",t,e),t.split(/\s+/).map(r=>iDe(r,e)).join(" ")),iDe=(t,e)=>{t=t.trim();let r=e.loose?wr[ir.XRANGELOOSE]:wr[ir.XRANGE];return t.replace(r,(i,n,s,o,a,c)=>{ht("xRange",t,i,n,s,o,a,c);let l=Qr(s),u=l||Qr(o),d=u||Qr(a),h=d;return n==="="&&h&&(n=""),c=e.includePrerelease?"-0":"",l?n===">"||n==="<"?i="<0.0.0-0":i="*":n&&h?(u&&(o=0),a=0,n===">"?(n=">=",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n==="<="&&(n="<",u?s=+s+1:o=+o+1),n==="<"&&(c="-0"),i=`${n+s}.${o}.${a}${c}`):u?i=`>=${s}.0.0${c} <${+s+1}.0.0-0`:d&&(i=`>=${s}.${o}.0${c} <${s}.${+o+1}.0-0`),ht("xRange return",i),i})},sDe=(t,e)=>(ht("replaceStars",t,e),t.trim().replace(wr[ir.STAR],"")),oDe=(t,e)=>(ht("replaceGTE0",t,e),t.trim().replace(wr[e.includePrerelease?ir.GTE0PRE:ir.GTE0],"")),aDe=t=>(e,r,i,n,s,o,a,c,l,u,d,h)=>(Qr(i)?r="":Qr(n)?r=`>=${i}.0.0${t?"-0":""}`:Qr(s)?r=`>=${i}.${n}.0${t?"-0":""}`:o?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,Qr(l)?c="":Qr(u)?c=`<${+l+1}.0.0-0`:Qr(d)?c=`<${l}.${+u+1}.0-0`:h?c=`<=${l}.${u}.${d}-${h}`:t?c=`<${l}.${u}.${+d+1}-0`:c=`<=${c}`,`${r} ${c}`.trim()),cDe=(t,e,r)=>{for(let i=0;i<t.length;i++)if(!t[i].test(e))return!1;if(e.prerelease.length&&!r.includePrerelease){for(let i=0;i<t.length;i++)if(ht(t[i].semver),t[i].semver!==u2.ANY&&t[i].semver.prerelease.length>0){let n=t[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Cf=w((hGe,QZ)=>{"use strict";var bf=Symbol("SemVer ANY"),h2=class t{static get ANY(){return bf}constructor(e,r){if(r=CZ(r),e instanceof t){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),d2("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===bf?this.value="":this.value=this.operator+this.semver.version,d2("comp",this)}parse(e){let r=this.options.loose?bZ[xZ.COMPARATORLOOSE]:bZ[xZ.COMPARATOR],i=e.match(r);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:"",this.operator==="="&&(this.operator=""),i[2]?this.semver=new BZ(i[2],this.options.loose):this.semver=bf}toString(){return this.value}test(e){if(d2("Comparator.test",e,this.options.loose),this.semver===bf||e===bf)return!0;if(typeof e=="string")try{e=new BZ(e,this.options)}catch{return!1}return A2(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new wZ(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new wZ(this.value,r).test(e.semver):(r=CZ(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||A2(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||A2(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};QZ.exports=h2;var CZ=ny(),{safeRe:bZ,t:xZ}=Vu(),A2=a2(),d2=If(),BZ=nr(),wZ=Fn()});var xf=w((fGe,vZ)=>{"use strict";var lDe=Fn(),uDe=(t,e,r)=>{try{e=new lDe(e,r)}catch{return!1}return e.test(t)};vZ.exports=uDe});var DZ=w((gGe,SZ)=>{"use strict";var ADe=Fn(),dDe=(t,e)=>new ADe(t,e).set.map(r=>r.map(i=>i.value).join(" ").trim().split(" "));SZ.exports=dDe});var _Z=w((pGe,kZ)=>{"use strict";var hDe=nr(),fDe=Fn(),gDe=(t,e,r)=>{let i=null,n=null,s=null;try{s=new fDe(e,r)}catch{return null}return t.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new hDe(i,r))}),i};kZ.exports=gDe});var RZ=w((mGe,TZ)=>{"use strict";var pDe=nr(),mDe=Fn(),EDe=(t,e,r)=>{let i=null,n=null,s=null;try{s=new mDe(e,r)}catch{return null}return t.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new pDe(i,r))}),i};TZ.exports=EDe});var LZ=w((EGe,MZ)=>{"use strict";var f2=nr(),IDe=Fn(),NZ=yf(),yDe=(t,e)=>{t=new IDe(t,e);let r=new f2("0.0.0");if(t.test(r)||(r=new f2("0.0.0-0"),t.test(r)))return r;r=null;for(let i=0;i<t.set.length;++i){let n=t.set[i],s=null;n.forEach(o=>{let a=new f2(o.semver.version);switch(o.operator){case">":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case"":case">=":(!s||NZ(a,s))&&(s=a);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!r||NZ(r,s))&&(r=s)}return r&&t.test(r)?r:null};MZ.exports=yDe});var FZ=w((IGe,UZ)=>{"use strict";var CDe=Fn(),bDe=(t,e)=>{try{return new CDe(t,e).range||"*"}catch{return null}};UZ.exports=bDe});var fy=w((yGe,HZ)=>{"use strict";var xDe=nr(),PZ=Cf(),{ANY:BDe}=PZ,wDe=Fn(),QDe=xf(),OZ=yf(),$Z=ly(),vDe=Ay(),SDe=uy(),DDe=(t,e,r,i)=>{t=new xDe(t,i),e=new wDe(e,i);let n,s,o,a,c;switch(r){case">":n=OZ,s=vDe,o=$Z,a=">",c=">=";break;case"<":n=$Z,s=SDe,o=OZ,a="<",c="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(QDe(t,e,i))return!1;for(let l=0;l<e.set.length;++l){let u=e.set[l],d=null,h=null;if(u.forEach(A=>{A.semver===BDe&&(A=new PZ(">=0.0.0")),d=d||A,h=h||A,n(A.semver,d.semver,i)?d=A:o(A.semver,h.semver,i)&&(h=A)}),d.operator===a||d.operator===c||(!h.operator||h.operator===a)&&s(t,h.semver))return!1;if(h.operator===c&&o(t,h.semver))return!1}return!0};HZ.exports=DDe});var GZ=w((CGe,VZ)=>{"use strict";var kDe=fy(),_De=(t,e,r)=>kDe(t,e,">",r);VZ.exports=_De});var qZ=w((bGe,YZ)=>{"use strict";var TDe=fy(),RDe=(t,e,r)=>TDe(t,e,"<",r);YZ.exports=RDe});var WZ=w((xGe,zZ)=>{"use strict";var jZ=Fn(),NDe=(t,e,r)=>(t=new jZ(t,r),e=new jZ(e,r),t.intersects(e,r));zZ.exports=NDe});var ZZ=w((BGe,JZ)=>{"use strict";var MDe=xf(),LDe=Un();JZ.exports=(t,e,r)=>{let i=[],n=null,s=null,o=t.sort((u,d)=>LDe(u,d,r));for(let u of o)MDe(u,e,r)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,d]of i)u===d?a.push(u):!d&&u===o[0]?a.push("*"):d?u===o[0]?a.push(`<=${d}`):a.push(`${u} - ${d}`):a.push(`>=${u}`);let c=a.join(" || "),l=typeof e.raw=="string"?e.raw:String(e);return c.length<l.length?c:e}});var n7=w((wGe,r7)=>{"use strict";var XZ=Fn(),m2=Cf(),{ANY:g2}=m2,p2=xf(),E2=Un(),UDe=(t,e,r={})=>{if(t===e)return!0;t=new XZ(t,r),e=new XZ(e,r);let i=!1;e:for(let n of t.set){for(let s of e.set){let o=ODe(n,s,r);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},FDe=[new m2(">=0.0.0-0")],KZ=[new m2(">=0.0.0")],ODe=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===g2){if(e.length===1&&e[0].semver===g2)return!0;r.includePrerelease?t=FDe:t=KZ}if(e.length===1&&e[0].semver===g2){if(r.includePrerelease)return!0;e=KZ}let i=new Set,n,s;for(let A of t)A.operator===">"||A.operator===">="?n=e7(n,A,r):A.operator==="<"||A.operator==="<="?s=t7(s,A,r):i.add(A.semver);if(i.size>1)return null;let o;if(n&&s){if(o=E2(n.semver,s.semver,r),o>0)return null;if(o===0&&(n.operator!==">="||s.operator!=="<="))return null}for(let A of i){if(n&&!p2(A,String(n),r)||s&&!p2(A,String(s),r))return null;for(let f of e)if(!p2(A,String(f),r))return!1;return!0}let a,c,l,u,d=s&&!r.includePrerelease&&s.semver.prerelease.length?s.semver:!1,h=n&&!r.includePrerelease&&n.semver.prerelease.length?n.semver:!1;d&&d.prerelease.length===1&&s.operator==="<"&&d.prerelease[0]===0&&(d=!1);for(let A of e){if(u=u||A.operator===">"||A.operator===">=",l=l||A.operator==="<"||A.operator==="<=",n){if(h&&A.semver.prerelease&&A.semver.prerelease.length&&A.semver.major===h.major&&A.semver.minor===h.minor&&A.semver.patch===h.patch&&(h=!1),A.operator===">"||A.operator===">="){if(a=e7(n,A,r),a===A&&a!==n)return!1}else if(n.operator===">="&&!A.test(n.semver))return!1}if(s){if(d&&A.semver.prerelease&&A.semver.prerelease.length&&A.semver.major===d.major&&A.semver.minor===d.minor&&A.semver.patch===d.patch&&(d=!1),A.operator==="<"||A.operator==="<="){if(c=t7(s,A,r),c===A&&c!==s)return!1}else if(s.operator==="<="&&!A.test(s.semver))return!1}if(!A.operator&&(s||n)&&o!==0)return!1}return!(n&&l&&!s&&o!==0||s&&u&&!n&&o!==0||h||d)},e7=(t,e,r)=>{if(!t)return e;let i=E2(t.semver,e.semver,r);return i>0?t:i<0||e.operator===">"&&t.operator===">="?e:t},t7=(t,e,r)=>{if(!t)return e;let i=E2(t.semver,e.semver,r);return i<0?t:i>0||e.operator==="<"&&t.operator==="<="?e:t};r7.exports=UDe});var a7=w((QGe,o7)=>{"use strict";var I2=Vu(),i7=Hu(),$De=nr(),s7=r2(),PDe=Ho(),HDe=D8(),VDe=_8(),GDe=N8(),YDe=U8(),qDe=O8(),jDe=P8(),zDe=V8(),WDe=Y8(),JDe=Un(),ZDe=W8(),XDe=Z8(),KDe=cy(),eke=tZ(),tke=nZ(),rke=yf(),nke=ly(),ike=s2(),ske=o2(),oke=uy(),ake=Ay(),cke=a2(),lke=dZ(),uke=fZ(),Ake=Cf(),dke=Fn(),hke=xf(),fke=DZ(),gke=_Z(),pke=RZ(),mke=LZ(),Eke=FZ(),Ike=fy(),yke=GZ(),Cke=qZ(),bke=WZ(),xke=ZZ(),Bke=n7();o7.exports={parse:PDe,valid:HDe,clean:VDe,inc:GDe,diff:YDe,major:qDe,minor:jDe,patch:zDe,prerelease:WDe,compare:JDe,rcompare:ZDe,compareLoose:XDe,compareBuild:KDe,sort:eke,rsort:tke,gt:rke,lt:nke,eq:ike,neq:ske,gte:oke,lte:ake,cmp:cke,coerce:lke,truncate:uke,Comparator:Ake,Range:dke,satisfies:hke,toComparators:fke,maxSatisfying:gke,minSatisfying:pke,minVersion:mke,validRange:Eke,outside:Ike,gtr:yke,ltr:Cke,intersects:bke,simplifyRange:xke,subset:Bke,SemVer:$De,re:I2.re,src:I2.src,tokens:I2.t,SEMVER_SPEC_VERSION:i7.SEMVER_SPEC_VERSION,RELEASE_TYPES:i7.RELEASE_TYPES,compareIdentifiers:s7.compareIdentifiers,rcompareIdentifiers:s7.rcompareIdentifiers}});var d7=w((MGe,y2)=>{var my=process||{},u7=my.argv||[],py=my.env||{},Ske=!(py.NO_COLOR||u7.includes("--no-color"))&&(!!py.FORCE_COLOR||u7.includes("--color")||my.platform==="win32"||(my.stdout||{}).isTTY&&py.TERM!=="dumb"||!!py.CI),Dke=(t,e,r=t)=>i=>{let n=""+i,s=n.indexOf(e,t.length);return~s?t+kke(n,e,r,s)+e:t+n+e},kke=(t,e,r,i)=>{let n="",s=0;do n+=t.substring(s,i)+r,s=i+e.length,i=t.indexOf(e,s);while(~i);return n+t.substring(s)},A7=(t=Ske)=>{let e=t?Dke:()=>String;return{isColorSupported:t,reset:e("\x1B[0m","\x1B[0m"),bold:e("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:e("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:e("\x1B[3m","\x1B[23m"),underline:e("\x1B[4m","\x1B[24m"),inverse:e("\x1B[7m","\x1B[27m"),hidden:e("\x1B[8m","\x1B[28m"),strikethrough:e("\x1B[9m","\x1B[29m"),black:e("\x1B[30m","\x1B[39m"),red:e("\x1B[31m","\x1B[39m"),green:e("\x1B[32m","\x1B[39m"),yellow:e("\x1B[33m","\x1B[39m"),blue:e("\x1B[34m","\x1B[39m"),magenta:e("\x1B[35m","\x1B[39m"),cyan:e("\x1B[36m","\x1B[39m"),white:e("\x1B[37m","\x1B[39m"),gray:e("\x1B[90m","\x1B[39m"),bgBlack:e("\x1B[40m","\x1B[49m"),bgRed:e("\x1B[41m","\x1B[49m"),bgGreen:e("\x1B[42m","\x1B[49m"),bgYellow:e("\x1B[43m","\x1B[49m"),bgBlue:e("\x1B[44m","\x1B[49m"),bgMagenta:e("\x1B[45m","\x1B[49m"),bgCyan:e("\x1B[46m","\x1B[49m"),bgWhite:e("\x1B[47m","\x1B[49m"),blackBright:e("\x1B[90m","\x1B[39m"),redBright:e("\x1B[91m","\x1B[39m"),greenBright:e("\x1B[92m","\x1B[39m"),yellowBright:e("\x1B[93m","\x1B[39m"),blueBright:e("\x1B[94m","\x1B[39m"),magentaBright:e("\x1B[95m","\x1B[39m"),cyanBright:e("\x1B[96m","\x1B[39m"),whiteBright:e("\x1B[97m","\x1B[39m"),bgBlackBright:e("\x1B[100m","\x1B[49m"),bgRedBright:e("\x1B[101m","\x1B[49m"),bgGreenBright:e("\x1B[102m","\x1B[49m"),bgYellowBright:e("\x1B[103m","\x1B[49m"),bgBlueBright:e("\x1B[104m","\x1B[49m"),bgMagentaBright:e("\x1B[105m","\x1B[49m"),bgCyanBright:e("\x1B[106m","\x1B[49m"),bgWhiteBright:e("\x1B[107m","\x1B[49m")}};y2.exports=A7();y2.exports.createColors=A7});var Q2=w((cYe,_7)=>{"use strict";var w2={to(t,e){return e?`\x1B[${e+1};${t+1}H`:`\x1B[${t+1}G`},move(t,e){let r="";return t<0?r+=`\x1B[${-t}D`:t>0&&(r+=`\x1B[${t}C`),e<0?r+=`\x1B[${-e}A`:e>0&&(r+=`\x1B[${e}B`),r},up:(t=1)=>`\x1B[${t}A`,down:(t=1)=>`\x1B[${t}B`,forward:(t=1)=>`\x1B[${t}C`,backward:(t=1)=>`\x1B[${t}D`,nextLine:(t=1)=>"\x1B[E".repeat(t),prevLine:(t=1)=>"\x1B[F".repeat(t),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},Kke={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},e_e={screen:"\x1B[2J",up:(t=1)=>"\x1B[1J".repeat(t),down:(t=1)=>"\x1B[J".repeat(t),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(t){let e="";for(let r=0;r<t;r++)e+=this.line+(r<t-1?w2.up():"");return t&&(e+=w2.left),e}};_7.exports={cursor:w2,scroll:Kke,erase:e_e,beep:"\x07"}});var _s,Fy=v(()=>{"use strict";_s=class extends Error{constructor(e){super(e),this.name="AudioUnavailableError"}}});function RX(t,e){if(e<=1)return t;let r=Math.floor(t.length/e),i=new Int16Array(r);for(let n=0;n<r;n++){let s=0,o=n*e;for(let a=0;a<e;a++)s+=t[o+a];i[n]=Math.round(s/e)}return i}var qy,NX=v(()=>{"use strict";qy=class{step;pos=0;prev=0;primed=!1;constructor(e,r){if(e<=0||r<=0)throw new RangeError("resampler rates must be positive");this.step=e/r}process(e){if(e.length===0)return new Int16Array(0);let r=[],i=e.length-1,n=this.primed?this.pos:0;for(;;){let s=Math.floor(n);if(s+1>i)break;let o=s<0?this.prev:e[s],a=e[s+1];r.push(Math.round(o+(a-o)*(n-s))),n+=this.step}return this.prev=e[i],this.primed=!0,this.pos=n-e.length,Int16Array.from(r)}}});function LX(t){return t.byteLength/2/ITe}function yTe(t){let e=t.byteLength>>1,r=new DataView(t.buffer,t.byteOffset,t.byteLength),i=new Int16Array(e);for(let n=0;n<e;n++)i[n]=r.getInt16(n*2,!0);return i}var MX,ITe,jy,UX=v(()=>{"use strict";Rt();Ss();MX=32,ITe=16,jy=class{constructor(e,r,i={}){this.vad=e;this.onSpeech=r;this.speechThreshold=i.speechThreshold??.5,this.onsetMs=i.onsetMs??2*MX,this.holdoffMs=i.holdoffMs??300,this.energyThreshold=i.energyThreshold??.01,this.log=i.log??te}vad;onSpeech;speechThreshold;onsetMs;holdoffMs;energyThreshold;log;inSpeech=!1;speechRunMs=0;silenceRunMs=0;degraded=!1;closed=!1;feed(e){if(!(this.closed||e.byteLength===0)){if(this.degraded){this.applyVerdict(In(e,this.energyThreshold),LX(e));return}this.vad.process(yTe(e)).then(r=>{if(!this.closed)for(let i of r)this.applyVerdict(i>=this.speechThreshold,MX)},r=>{this.closed||(this.degrade(r),this.applyVerdict(In(e,this.energyThreshold),LX(e)))})}}close(){this.closed=!0}applyVerdict(e,r){e?(this.silenceRunMs=0,this.speechRunMs+=r,!this.inSpeech&&this.speechRunMs>=this.onsetMs&&(this.inSpeech=!0,this.onSpeech())):(this.speechRunMs=0,this.inSpeech&&(this.silenceRunMs+=r,this.silenceRunMs>=this.holdoffMs&&(this.inSpeech=!1,this.silenceRunMs=0)))}degrade(e){this.degraded||(this.degraded=!0,this.log.debug("barge-in DEGRADED to energy onset - silero vad failed; speech onsets detect on RMS energy for the rest of the capture session",{error:e instanceof Error?e.message:String(e)}))}}});var W2={};pn(W2,{DecibriCapture:()=>j2,DecibriPlayback:()=>z2,SILENT_STREAM_TIMEOUT_MS:()=>zy,hasInputDevice:()=>HX});function Wy(){return FX??=import("decibri"),FX}async function HX(){try{let{inputDevices:t}=await Wy();return t().length>0}catch(t){return te.debug("audio module or input enumeration unavailable; treating as no microphone",{error:t}),!1}}async function bTe(){try{let{inputDevices:t}=await Wy(),e=t(),r=e.find(i=>i.isDefault)??e[0];if(r&&r.defaultSampleRate>=1e3&&r.maxInputChannels>=1)return{sampleRate:Math.round(r.defaultSampleRate),channels:r.maxInputChannels}}catch(t){te.debug("could not read default input device; opening at 16k mono",{error:t})}return{sampleRate:Rf,channels:Jy}}function xTe(t){return Math.max(64,Math.min(65536,Math.round(t/10)))}function BTe(t,e,r){let i=new Uint8Array(t),n=new Int16Array(i.buffer,0,i.byteLength>>1),s=r.process(RX(n,e));return Buffer.from(s.buffer,s.byteOffset,s.byteLength)}function QTe(t){return Buffer.from(t.buffer,t.byteOffset,t.byteLength)}var FX,Rf,Jy,PX,OX,zy,CTe,j2,$X,wTe,z2,J2=v(()=>{"use strict";Rt();Ss();Fy();NX();UX();FX=null;Rf=16e3,Jy=1,PX="int16",OX=.01,zy=3e3,CTe=1e3;j2=class{constructor(e={}){this.deps=e}deps;mic=null;onData=null;onSpeech=null;onErr=null;vad=null;detector=null;watchdog=null;lastChunkAtMs=0;async start(e){if(!await HX())throw new _s("no audio input device is available");let{sampleRate:r,channels:i}=await bTe(),n=(this.deps.createVad??(()=>new fc))(),s=null;try{await n.load(),s=new jy(n,()=>e.onSpeechStart(),{energyThreshold:OX})}catch(A){te.debug("silero vad unavailable; barge-in falls back to decibri energy vad",{error:A}),n.dispose().catch(()=>{})}let{Microphone:o}=await Wy(),a;try{a=await o.open({sampleRate:r,channels:i,dtype:PX,...s?{vad:!1}:{vad:"energy",vadThreshold:OX},framesPerBuffer:xTe(r)})}catch(A){throw s?.close(),s&&n.dispose().catch(()=>{}),A}this.vad=s?n:null,this.detector=s;let c=r===Rf&&i===Jy?null:new qy(r,Rf);this.onData=c?A=>{this.lastChunkAtMs=Date.now();let f=BTe(A,i,c);f.byteLength>0&&(this.detector?.feed(f),e.onFrame(f,Date.now()))}:A=>{this.lastChunkAtMs=Date.now(),A.byteLength>0&&(this.detector?.feed(A),e.onFrame(A,Date.now()))},this.onSpeech=()=>e.onSpeechStart(),this.onErr=A=>e.onError(A);let l=null,u=new Promise(A=>{l=()=>A(),a.once("data",l)});a.on("data",this.onData),a.on("speech",this.onSpeech),a.on("error",this.onErr),this.mic=a;let d=null,h=await Promise.race([u.then(()=>!0),new Promise(A=>{d=setTimeout(()=>A(!1),zy)})]);if(d!==null&&clearTimeout(d),!h)throw l!==null&&a.removeListener("data",l),await this.stop(),new _s("the microphone opened but never delivered audio - treating it as unavailable");this.armWatchdog(e)}armWatchdog(e){this.clearWatchdog(),this.lastChunkAtMs=Date.now(),this.watchdog=setInterval(()=>{Date.now()-this.lastChunkAtMs<zy||(this.clearWatchdog(),e.onError(new Error(`capture went silent - no audio for ${zy} ms (decibri delivers no error event on device loss; treating the microphone as lost)`)))},CTe)}clearWatchdog(){this.watchdog!==null&&(clearInterval(this.watchdog),this.watchdog=null)}async stop(){this.clearWatchdog();let e=this.mic;this.mic=null,this.detector?.close(),this.detector=null,e&&(this.onData&&e.removeListener("data",this.onData),this.onSpeech&&e.removeListener("speech",this.onSpeech),this.onErr&&e.removeListener("error",this.onErr),e.on("error",()=>{}),e.stop()),this.onData=null,this.onSpeech=null,this.onErr=null;let r=this.vad;this.vad=null,r&&await r.dispose().catch(()=>{})}},$X=Rf*Jy*2/1e3,wTe=250,z2=class{speaker=null;writeChain=Promise.resolve();pendingBytes=0;pendingItems=0;generation=0;closed=!1;playoutEndAtMs=0;drainWakes=new Set;nativeDrainSpent=!1;playoutTap=null;play(e){if(this.closed||e.byteLength>64*1024||e.byteLength%2!==0||this.pendingItems>=512||this.pendingBytes+Math.ceil(this.remainingMs()*$X)+e.byteLength>4*1024*1024)return!1;this.pendingBytes+=e.byteLength,this.pendingItems+=1;let r=this.generation;return this.writeChain=this.writeChain.then(async()=>{try{if(this.closed||r!==this.generation)return;let i=await this.ensureSpeaker(r);if(this.closed||r!==this.generation||(await i.writeAsync(QTe(e)),this.closed||r!==this.generation))return;let n=Math.max(this.playoutEndAtMs,Date.now());this.playoutEndAtMs=n+e.byteLength/$X;try{this.playoutTap?.(e,n)}catch(s){te.debug("playout tap failed",{error:s})}}catch(i){te.debug("playback write skipped",{error:i})}finally{this.pendingBytes-=e.byteLength,this.pendingItems-=1}}),!0}setPlayoutTap(e){this.playoutTap=e}remainingMs(){return Math.max(0,this.playoutEndAtMs-Date.now())}flush(){this.generation++,this.playoutEndAtMs=0;let e=this.speaker;this.speaker=null,e?.stop();for(let r of[...this.drainWakes])r()}async drained(){let e=this.generation,r,i=new Promise(o=>{r=o,this.drainWakes.add(o)});try{await Promise.race([this.writeChain,i])}finally{this.drainWakes.delete(r)}if(e!==this.generation||this.closed)return;let n=this.speaker;if(!n)return;if(!this.nativeDrainSpent){this.nativeDrainSpent=!0;let o=Promise.resolve().then(()=>n.drainAsync()).catch(l=>{te.debug("playback drain interrupted",{error:l})}),a=Math.max(0,this.playoutEndAtMs-Date.now())+wTe,c=this.sleep(a);await Promise.race([o,c.done]),c.wake()}if(e!==this.generation||this.closed)return;let s=this.playoutEndAtMs-Date.now();s>0&&await this.sleep(s).done}sleep(e){let r;return{done:new Promise(n=>{let s=setTimeout(()=>r(),e);r=()=>{clearTimeout(s),this.drainWakes.delete(r),n()},this.drainWakes.add(r)}),wake:r}}close(){return this.closed=!0,this.flush(),Promise.resolve()}async ensureSpeaker(e){if(this.speaker===null){let{Speaker:r}=await Wy();if(this.closed||e!==this.generation)throw new Error("playback cut during the native module load");this.speaker=new r({sampleRate:Rf,channels:Jy,dtype:PX}),this.nativeDrainSpent=!1}return this.speaker}}});Rt();Ss();Yn();import{readFileSync as vTe}from"node:fs";import{randomUUID as STe}from"node:crypto";var Fi=class extends Error{constructor(e,r,i){super(i),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=r,this.exitCode=e,this.nestedError=void 0}},Ds=class extends Fi{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};var mf=class{constructor(e,r){switch(this.description=r||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case"<":this.required=!0,this._name=e.slice(1,-1);break;case"[":this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e;break}this._name.endsWith("...")&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_collectValue(e,r){return r===this.defaultValue||!Array.isArray(r)?[e]:(r.push(e),r)}default(e,r){return this.defaultValue=e,this.defaultValueDescription=r,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(r,i)=>{if(!this.argChoices.includes(r))throw new Ds(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(r,i):r},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function KI(t){let e=t.name()+(t.variadic===!0?"...":"");return t.required?"<"+e+">":"["+e+"]"}import{EventEmitter as hve}from"node:events";import KN from"node:child_process";import ks from"node:path";import ty from"node:fs";import je from"node:process";import{stripVTControlCharacters as fve}from"node:util";import{stripVTControlCharacters as uve}from"node:util";var Ef=class{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(e){this.helpWidth=this.helpWidth??e.helpWidth??80}visibleCommands(e){let r=e.commands.filter(n=>!n._hidden),i=e._getHelpCommand();return i&&!i._hidden&&r.push(i),this.sortSubcommands&&r.sort((n,s)=>n.name().localeCompare(s.name())),r}compareOptions(e,r){let i=n=>n.short?n.short.replace(/^-/,""):n.long.replace(/^--/,"");return i(e).localeCompare(i(r))}visibleOptions(e){let r=e.options.filter(n=>!n.hidden),i=e._getHelpOption();if(i&&!i.hidden){let n=i.short&&e._findOption(i.short),s=i.long&&e._findOption(i.long);!n&&!s?r.push(i):i.long&&!s?r.push(e.createOption(i.long,i.description)):i.short&&!n&&r.push(e.createOption(i.short,i.description))}return this.sortOptions&&r.sort(this.compareOptions),r}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let r=[];for(let i=e.parent;i;i=i.parent){let n=i.options.filter(s=>!s.hidden);r.push(...n)}return this.sortOptions&&r.sort(this.compareOptions),r}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(r=>{r.description=r.description||e._argsDescription[r.name()]||""}),e.registeredArguments.find(r=>r.description)?e.registeredArguments:[]}subcommandTerm(e){let r=e.registeredArguments.map(i=>KI(i)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(r?" "+r:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,r){return r.visibleCommands(e).reduce((i,n)=>Math.max(i,this.displayWidth(r.styleSubcommandTerm(r.subcommandTerm(n)))),0)}longestOptionTermLength(e,r){return r.visibleOptions(e).reduce((i,n)=>Math.max(i,this.displayWidth(r.styleOptionTerm(r.optionTerm(n)))),0)}longestGlobalOptionTermLength(e,r){return r.visibleGlobalOptions(e).reduce((i,n)=>Math.max(i,this.displayWidth(r.styleOptionTerm(r.optionTerm(n)))),0)}longestArgumentTermLength(e,r){return r.visibleArguments(e).reduce((i,n)=>Math.max(i,this.displayWidth(r.styleArgumentTerm(r.argumentTerm(n)))),0)}commandUsage(e){let r=e._name;e._aliases[0]&&(r=r+"|"+e._aliases[0]);let i="";for(let n=e.parent;n;n=n.parent)i=n.name()+" "+i;return i+r+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let r=[];if(e.argChoices&&r.push(`choices: ${e.argChoices.map(i=>JSON.stringify(i)).join(", ")}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue=="boolean")&&r.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&r.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&r.push(`env: ${e.envVar}`),r.length>0){let i=`(${r.join(", ")})`;return e.description?`${e.description} ${i}`:i}return e.description}argumentDescription(e){let r=[];if(e.argChoices&&r.push(`choices: ${e.argChoices.map(i=>JSON.stringify(i)).join(", ")}`),e.defaultValue!==void 0&&r.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),r.length>0){let i=`(${r.join(", ")})`;return e.description?`${e.description} ${i}`:i}return e.description}formatItemList(e,r,i){return r.length===0?[]:[i.styleTitle(e),...r,""]}groupItems(e,r,i){let n=new Map;return e.forEach(s=>{let o=i(s);n.has(o)||n.set(o,[])}),r.forEach(s=>{let o=i(s);n.has(o)||n.set(o,[]),n.get(o).push(s)}),n}formatHelp(e,r){let i=r.padWidth(e,r),n=r.helpWidth??80;function s(d,h){return r.formatItem(d,i,h,r)}let o=[`${r.styleTitle("Usage:")} ${r.styleUsage(r.commandUsage(e))}`,""],a=r.commandDescription(e);a.length>0&&(o=o.concat([r.boxWrap(r.styleCommandDescription(a),n),""]));let c=r.visibleArguments(e).map(d=>s(r.styleArgumentTerm(r.argumentTerm(d)),r.styleArgumentDescription(r.argumentDescription(d))));if(o=o.concat(this.formatItemList("Arguments:",c,r)),this.groupItems(e.options,r.visibleOptions(e),d=>d.helpGroupHeading??"Options:").forEach((d,h)=>{let A=d.map(f=>s(r.styleOptionTerm(r.optionTerm(f)),r.styleOptionDescription(r.optionDescription(f))));o=o.concat(this.formatItemList(h,A,r))}),r.showGlobalOptions){let d=r.visibleGlobalOptions(e).map(h=>s(r.styleOptionTerm(r.optionTerm(h)),r.styleOptionDescription(r.optionDescription(h))));o=o.concat(this.formatItemList("Global Options:",d,r))}return this.groupItems(e.commands,r.visibleCommands(e),d=>d.helpGroup()||"Commands:").forEach((d,h)=>{let A=d.map(f=>s(r.styleSubcommandTerm(r.subcommandTerm(f)),r.styleSubcommandDescription(r.subcommandDescription(f))));o=o.concat(this.formatItemList(h,A,r))}),o.join(`
|
|
405
405
|
`)}displayWidth(e){return uve(e).length}styleTitle(e){return e}styleUsage(e){return e.split(" ").map(r=>r==="[options]"?this.styleOptionText(r):r==="[command]"?this.styleSubcommandText(r):r[0]==="["||r[0]==="<"?this.styleArgumentText(r):this.styleCommandText(r)).join(" ")}styleCommandDescription(e){return this.styleDescriptionText(e)}styleOptionDescription(e){return this.styleDescriptionText(e)}styleSubcommandDescription(e){return this.styleDescriptionText(e)}styleArgumentDescription(e){return this.styleDescriptionText(e)}styleDescriptionText(e){return e}styleOptionTerm(e){return this.styleOptionText(e)}styleSubcommandTerm(e){return e.split(" ").map(r=>r==="[options]"?this.styleOptionText(r):r[0]==="["||r[0]==="<"?this.styleArgumentText(r):this.styleSubcommandText(r)).join(" ")}styleArgumentTerm(e){return this.styleArgumentText(e)}styleOptionText(e){return e}styleArgumentText(e){return e}styleSubcommandText(e){return e}styleCommandText(e){return e}padWidth(e,r){return Math.max(r.longestOptionTermLength(e,r),r.longestGlobalOptionTermLength(e,r),r.longestSubcommandTermLength(e,r),r.longestArgumentTermLength(e,r))}preformatted(e){return/\n[^\S\r\n]/.test(e)}formatItem(e,r,i,n){let o=" ".repeat(2);if(!i)return o+e;let a=e.padEnd(r+e.length-n.displayWidth(e)),c=2,u=(this.helpWidth??80)-r-c-2,d;return u<this.minWidthToWrap||n.preformatted(i)?d=i:d=n.boxWrap(i,u).replace(/\n/g,`
|