arcane-os 0.13.1 → 0.13.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.13.3
4
+
5
+ - Skip automatic TTS finalization calls when a model stream completes while
6
+ muted. Preserve pending speech cleanup, unmuted flushing, explicit public
7
+ speech methods, and model response callbacks across all streaming routes.
8
+
9
+ ## 0.13.2
10
+
11
+ - Correct the PWA development guide to describe live descriptor refresh and
12
+ remove the superseded restart instruction. Runtime behavior is unchanged.
13
+
3
14
  ## 0.13.1
4
15
 
5
16
  - Refresh live development app membership from the current authored descriptor
@@ -598,6 +598,12 @@ boundary; `finishTTS()` flushes any remaining text. It is not a playback-ended
598
598
  notification. Do not mute or dispose immediately after it if playback should
599
599
  continue.
600
600
 
601
+ Automatic model-stream completion reads the AI instance's current mute state.
602
+ While muted, it clears pending speech text and formatting state and stops
603
+ prepared playback without invoking `finishTTS()` or `streamTTS()`. Unmuted
604
+ completion keeps its ordinary speech flush. Explicit calls to either public
605
+ speech method retain their existing behavior.
606
+
601
607
  ## Automatic speech-input formatting cleanup
602
608
 
603
609
  Every TTS entrypoint removes repeated same formatting marks from the outbound
@@ -102,8 +102,11 @@ metadata; `arcane-offline.json` contains the selected offline resource inventory
102
102
  If `package.pwa.offline.include` is nonempty, the resource must also
103
103
  match that offline selection and must not match `offline.exclude`. Adding a
104
104
  path only to the offline selection does not add it to the app's resources.
105
- Restart after changing descriptor settings. Edits to selected source files are
106
- picked up by the next due page-load check while the server remains running.
105
+ The running source server reads changed app descriptors before the next app,
106
+ root-navigation or generated-PWA request. Include/exclude rules, the entry and
107
+ PWA settings share the current selection; no restart or package projection
108
+ write is needed. Edits to selected source files are picked up by the next due
109
+ page-load check while the server remains running.
107
110
 
108
111
  For an enabled application, `arcane dev` serves the generated PWA files at the
109
112
  origin root and starts at the selected app page under `/apps/<id>/`. Use one
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arcane-os",
3
- "version": "0.13.1",
3
+ "version": "0.13.3",
4
4
  "description": "Arcane OS JavaScript SDK, project-local CLI, browser runtime, and repository-portable application packager.",
5
5
  "type": "module",
6
6
  "main": "./src/index.mjs",
@@ -4589,7 +4589,7 @@ class AI {
4589
4589
  if(signal?.aborted){
4590
4590
  throw normalizeAIRequestAbort();
4591
4591
  }
4592
- this.finishTTS();
4592
+ this.#finishStreamingSpeech();
4593
4593
  return result;
4594
4594
  }catch(error){
4595
4595
  if(handle){
@@ -4645,7 +4645,7 @@ class AI {
4645
4645
  if(signal?.aborted){
4646
4646
  throw normalizeAIRequestAbort();
4647
4647
  }
4648
- this.finishTTS();
4648
+ this.#finishStreamingSpeech();
4649
4649
  return result;
4650
4650
  }catch(error){
4651
4651
  this.stopAudio();
@@ -4928,7 +4928,7 @@ class AI {
4928
4928
 
4929
4929
  const nativeResult=this.#providerCompletionOutput(nativeCompletion);
4930
4930
  if(finishSpeech){
4931
- this.finishTTS();
4931
+ this.#finishStreamingSpeech();
4932
4932
  }
4933
4933
  await streamComplete(nativeResult,`M-${id}`,isThinking);
4934
4934
  speechTurnCompleted=true;
@@ -5392,7 +5392,7 @@ class AI {
5392
5392
  }
5393
5393
  const streamResult=this.#providerCompletionOutput(completion);
5394
5394
  if(finishSpeech){
5395
- this.finishTTS();
5395
+ this.#finishStreamingSpeech();
5396
5396
  }
5397
5397
  await streamComplete(streamResult, `M-${id}`,isThinking);
5398
5398
 
@@ -6075,6 +6075,16 @@ class AI {
6075
6075
  );
6076
6076
  }
6077
6077
 
6078
+ #finishStreamingSpeech(){
6079
+ if(this.muted){
6080
+ for(const playback of this.#preparedSpeechPlaybacks) playback.stop();
6081
+ this.audioMessageChunks='';
6082
+ this.#markdownSpeech.reset();
6083
+ return;
6084
+ }
6085
+ this.finishTTS();
6086
+ }
6087
+
6078
6088
  finishTTS(){
6079
6089
  this.#traceSpeech('finishTTS.call');
6080
6090
  return this.streamTTS('',true);