@burdenoff/fe-libs 2026.1002.2 → 2026.1003.2

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.
Files changed (52) hide show
  1. package/dist/shared/assistant/index.d.ts +1 -0
  2. package/dist/shared/assistant/index.d.ts.map +1 -1
  3. package/dist/shared/assistant/prewarm.d.ts +71 -0
  4. package/dist/shared/assistant/prewarm.d.ts.map +1 -1
  5. package/dist/shared/assistant/prewarm.js +49 -2
  6. package/dist/shared/assistant/speech/speechFeed.d.ts +63 -0
  7. package/dist/shared/assistant/speech/speechFeed.d.ts.map +1 -0
  8. package/dist/shared/assistant/speech/speechFeed.js +40 -0
  9. package/dist/shared/assistant/turnTimeline.d.ts +22 -2
  10. package/dist/shared/assistant/turnTimeline.d.ts.map +1 -1
  11. package/dist/shared/assistant/turnTimeline.js +18 -1
  12. package/dist/shared/assistant/turnTimingReport.d.ts.map +1 -1
  13. package/dist/shared/assistant/turnTimingReport.js +5 -4
  14. package/dist/shared/assistant/ui/AssistantAvatar.d.ts +0 -21
  15. package/dist/shared/assistant/ui/AssistantAvatar.d.ts.map +1 -1
  16. package/dist/shared/assistant/ui/AssistantAvatar.js +13 -7
  17. package/dist/shared/assistant/ui/AssistantChatArea.d.ts.map +1 -1
  18. package/dist/shared/assistant/ui/AssistantChatArea.js +981 -931
  19. package/dist/shared/assistant/ui/AssistantMessageItem.d.ts +8 -0
  20. package/dist/shared/assistant/ui/AssistantMessageItem.d.ts.map +1 -1
  21. package/dist/shared/assistant/ui/AssistantMessageItem.js +60 -58
  22. package/dist/shared/assistant/ui/AssistantSpeechProvider.d.ts.map +1 -1
  23. package/dist/shared/assistant/ui/AssistantSpeechProvider.js +198 -169
  24. package/dist/shared/assistant/ui/composer/AssistantComposer.js +117 -117
  25. package/dist/shared/assistant/ui/composer/AssistantVoiceButton.d.ts +8 -0
  26. package/dist/shared/assistant/ui/composer/AssistantVoiceButton.d.ts.map +1 -1
  27. package/dist/shared/assistant/ui/composer/AssistantVoiceButton.js +21 -16
  28. package/dist/shared/assistant/ui/useVoiceSession.d.ts +1 -4
  29. package/dist/shared/assistant/ui/useVoiceSession.d.ts.map +1 -1
  30. package/dist/shared/assistant/ui/useVoiceSession.js +171 -156
  31. package/dist/shared/assistant/ui/voice/AssistantVoiceOrb.d.ts.map +1 -1
  32. package/dist/shared/assistant/ui/voice/AssistantVoiceOrb.js +16 -15
  33. package/dist/shared/assistant/ui/voice/VoiceCaption.d.ts.map +1 -1
  34. package/dist/shared/assistant/ui/voice/VoiceCaption.js +1 -1
  35. package/dist/shared/assistant/ui/voice/VoiceMiniController.d.ts.map +1 -1
  36. package/dist/shared/assistant/ui/voice/VoiceMiniController.js +35 -30
  37. package/dist/shared/assistant/ui/voice/VoiceStage.d.ts.map +1 -1
  38. package/dist/shared/assistant/ui/voice/VoiceStage.js +38 -37
  39. package/dist/shared/assistant/ui/voice/VoiceWaveform.d.ts +6 -0
  40. package/dist/shared/assistant/ui/voice/VoiceWaveform.d.ts.map +1 -1
  41. package/dist/shared/assistant/ui/voice/VoiceWaveform.js +40 -36
  42. package/dist/shared/assistant/voice/speakableText.d.ts +16 -1
  43. package/dist/shared/assistant/voice/speakableText.d.ts.map +1 -1
  44. package/dist/shared/assistant/voice/speakableText.js +116 -102
  45. package/dist/shared/assistant/voice/speechPlayback.d.ts +37 -19
  46. package/dist/shared/assistant/voice/speechPlayback.d.ts.map +1 -1
  47. package/dist/shared/assistant/voice/speechPlayback.js +11 -1
  48. package/dist/shared/assistant/voice/voiceSession.d.ts +12 -0
  49. package/dist/shared/assistant/voice/voiceSession.d.ts.map +1 -1
  50. package/dist/shared/assistant/voice/voiceSession.js +6 -0
  51. package/dist/shared-assistant.js +151 -150
  52. package/package.json +1 -1
@@ -1,22 +1,4 @@
1
- /**
2
- * Playback state for the assistant's spoken reply (BOFF-6290).
3
- *
4
- * A reducer rather than a pile of `useState` calls, because the awkward part of
5
- * speech playback is not "is it speaking" — it is that the engine's `end` and
6
- * `error` events arrive AFTER the state has already moved on:
7
- *
8
- * - tapping speak on message B while A is talking cancels A, and A's `end`
9
- * event lands a tick later. Without a guard it would clear B's speaking state
10
- * and leave a button that says "stop" next to silence — or worse, silence
11
- * next to a button that says "speak" while the voice keeps going;
12
- * - closing the panel cancels playback, and the cancellation itself fires
13
- * `error` on every queued utterance.
14
- *
15
- * Every transition therefore carries a monotonically increasing `requestId`, and
16
- * a terminal event is only honoured when it belongs to the CURRENT request. That
17
- * is the whole trick, and it is pure, so it is tested directly (the audio around
18
- * it is not testable in this repo's node-environment vitest).
19
- */
1
+ import { VoiceSessionPhase } from './voiceSession';
20
2
  export type SpeechPlaybackState = {
21
3
  readonly status: "idle";
22
4
  } | {
@@ -96,4 +78,40 @@ export declare function publishedChunks(state: SpeechPlaybackState, progress: {
96
78
  chunks: string[];
97
79
  index: number;
98
80
  } | null;
81
+ /** The caption's chunk progress: what is being spoken, and the one sounding now. */
82
+ export interface CaptionChunks {
83
+ chunks: string[];
84
+ index: number;
85
+ }
86
+ /**
87
+ * "The session is speaking, but no audio has started" — chunked, nothing
88
+ * sounding yet. A SINGLE shared value so the hook's memo does not churn.
89
+ */
90
+ export declare const AWAITING_FIRST_CHUNK: CaptionChunks;
91
+ /** Is this progress "chunked, nothing audible yet"? */
92
+ export declare function isAwaitingFirstChunk(progress: CaptionChunks | null | undefined): boolean;
93
+ /**
94
+ * The progress the LIVE CAPTION may follow (BOFF-8566, L4).
95
+ *
96
+ * ★★ The voice session enters `speaking` the moment the reply ARRIVES
97
+ * (`reply`), and the speech provider only publishes progress once playback has
98
+ * actually STARTED (`publishedChunks` is null while the engine is idle). In the
99
+ * gap between the two the caption saw "no chunk information" and took the
100
+ * documented fallback of rendering the WHOLE reply — so every spoken answer
101
+ * painted all of its text for 1-5 frames under "Speaking", then collapsed to one
102
+ * phrase. Measured on all four production apps (15 of 15 rounds in three).
103
+ *
104
+ * That fallback exists for ONE case: audio IS playing and the engine reports no
105
+ * per-chunk progress (`onChunkStart` is optional). It must not cover "nothing is
106
+ * playing yet", and the two are told apart by playback itself: `speakingMessageId`
107
+ * is non-null exactly while the engine plays. So a speaking session with nothing
108
+ * playing is reported as AWAITING the first chunk, which both captions already
109
+ * render as nothing.
110
+ *
111
+ * The window closes on its own: either playback starts and real progress takes
112
+ * over, or `SPEECH_START_GRACE_MS` hands the turn back and the phase leaves
113
+ * `speaking`. It also covers the trailing frame between playback ending and the
114
+ * session noticing, where the old fallback re-painted the whole reply.
115
+ */
116
+ export declare function captionChunks(published: CaptionChunks | null, phase: VoiceSessionPhase, speakingMessageId: string | null): CaptionChunks | null;
99
117
  //# sourceMappingURL=speechPlayback.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"speechPlayback.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/voice/speechPlayback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3B;IACE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEN,MAAM,MAAM,oBAAoB;AAC9B,6DAA6D;AAC3D;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AACH,8EAA8E;GAC5E;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AACH,iFAAiF;GAC/E;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAC3B,qDAAqD;GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE;AAC3D,2DAA2D;GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D,eAAO,MAAM,aAAa,EAAE,mBAAwC,CAAC;AAErE,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,oBAAoB,GAC3B,mBAAmB,CAgCrB;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,mBAAmB,EAC1B,SAAS,EAAE,MAAM,GAChB,OAAO,CAET;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAElE;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,mBAAmB,EAC1B,QAAQ,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GACtE;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAS5C"}
1
+ {"version":3,"file":"speechPlayback.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/voice/speechPlayback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3B;IACE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEN,MAAM,MAAM,oBAAoB;AAC9B,6DAA6D;AAC3D;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AACH,8EAA8E;GAC5E;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AACH,iFAAiF;GAC/E;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAC3B,qDAAqD;GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE;AAC3D,2DAA2D;GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D,eAAO,MAAM,aAAa,EAAE,mBAAwC,CAAC;AAErE,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,oBAAoB,GAC3B,mBAAmB,CAgCrB;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,mBAAmB,EAC1B,SAAS,EAAE,MAAM,GAChB,OAAO,CAET;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAElE;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,mBAAmB,EAC1B,QAAQ,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GACtE;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAS5C;AAED,oFAAoF;AACpF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,aAGjC,CAAC;AAEH,uDAAuD;AACvD,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,GACzC,OAAO,CAET;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,aAAa,GAAG,IAAI,EAC/B,KAAK,EAAE,iBAAiB,EACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,aAAa,GAAG,IAAI,CAKtB"}
@@ -30,5 +30,15 @@ function i(e, t) {
30
30
  index: t.index
31
31
  };
32
32
  }
33
+ var a = Object.freeze({
34
+ chunks: [],
35
+ index: -1
36
+ });
37
+ function o(e) {
38
+ return e != null && e.index < 0;
39
+ }
40
+ function s(e, t, n) {
41
+ return e || (t === "speaking" && n === null ? a : null);
42
+ }
33
43
  //#endregion
34
- export { e as IDLE_PLAYBACK, n as isSpeakingMessage, i as publishedChunks, r as requiresCancel, t as speechPlaybackReducer };
44
+ export { a as AWAITING_FIRST_CHUNK, e as IDLE_PLAYBACK, s as captionChunks, o as isAwaitingFirstChunk, n as isSpeakingMessage, i as publishedChunks, r as requiresCancel, t as speechPlaybackReducer };
@@ -70,6 +70,18 @@ export type VoiceSessionEvent =
70
70
  } | {
71
71
  type: 'reply';
72
72
  text: string;
73
+ }
74
+ /**
75
+ * ★ BOFF-8062 (C1): this turn's reply has STARTED being spoken from the
76
+ * speech feed — at the turn's `answerDone`, before the reply message is
77
+ * complete in the store. Only a `thinking` moves, to `speaking`, exactly as
78
+ * `reply` does; the later `reply` for the same id is then a no-op because the
79
+ * caller claimed it (`planReplyConsumption`). C1 never pauses a reply, so no
80
+ * path strands the session in `thinking`.
81
+ */
82
+ | {
83
+ type: 'reply-audio-started';
84
+ replyId: string;
73
85
  } | {
74
86
  type: 'speech-ended';
75
87
  } | {
@@ -1 +1 @@
1
- {"version":3,"file":"voiceSession.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/voice/voiceSession.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"voiceSession.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/voice/voiceSession.ts"],"names":[],"mappings":"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"}
@@ -100,6 +100,12 @@ function m(e, t, n = null) {
100
100
  pending: "",
101
101
  interim: ""
102
102
  } : e;
103
+ case "reply-audio-started": return e.phase === "thinking" ? {
104
+ ...e,
105
+ phase: "speaking",
106
+ pending: "",
107
+ interim: ""
108
+ } : e;
103
109
  case "speech-ended": return e.phase === "speaking" ? {
104
110
  ...e,
105
111
  phase: "listening",