osborn 0.9.110 → 0.9.112
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 +19 -12
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1656,6 +1656,11 @@ async function main() {
|
|
|
1656
1656
|
// REDIRECTED into the meeting canvas instead of suppressed — the regular
|
|
1657
1657
|
// voice pipeline reused with the meeting as the sink (latency fix).
|
|
1658
1658
|
let meetingAddressedUntil = 0;
|
|
1659
|
+
// Distinct human speakers seen in the current meeting. In a 1:1 (one human
|
|
1660
|
+
// + the bot) EVERY utterance is addressed to the bot — no name needed
|
|
1661
|
+
// (2026-08-01: "can you open carfax..." got observer-suppressed because
|
|
1662
|
+
// the fresh session's latch was never opened by the name).
|
|
1663
|
+
const meetingSpeakers = new Set();
|
|
1659
1664
|
let activeMeetingPoller = null; // Transcript poller bound to that bot
|
|
1660
1665
|
// LIVE meeting transcript → LLM (buffered webhook finals). See recall.on('transcript').
|
|
1661
1666
|
const meetingTranscriptBuffer = [];
|
|
@@ -1747,6 +1752,7 @@ async function main() {
|
|
|
1747
1752
|
}
|
|
1748
1753
|
activeMeetingBotId = null;
|
|
1749
1754
|
meetingAddressedUntil = 0;
|
|
1755
|
+
meetingSpeakers.clear();
|
|
1750
1756
|
// leaveBot=false when Recall itself reported the meeting over (bot already gone).
|
|
1751
1757
|
if (opts.leaveBot !== false) {
|
|
1752
1758
|
const recall = getRecallClient();
|
|
@@ -1857,13 +1863,16 @@ async function main() {
|
|
|
1857
1863
|
// the agent replies out loud into the meeting. This is the chat-mode path:
|
|
1858
1864
|
// named/asked → prompt response. Un-addressed chunks stay in the silent
|
|
1859
1865
|
// 20s batch for note-taking. That's the two-mode seam, mechanically.
|
|
1866
|
+
meetingSpeakers.add(speaker);
|
|
1860
1867
|
// Fuzzy name match: meeting STT routinely mangles "Osborn" — observed
|
|
1861
1868
|
// live 2026-08-01: "Osborn can you hear me" → "i was born can you hear
|
|
1862
1869
|
// me" (name trigger missed, bot stayed silent). Accept common
|
|
1863
1870
|
// mis-transcriptions; mild false-positive risk is acceptable in a
|
|
1864
|
-
// room that invited the bot.
|
|
1865
|
-
|
|
1866
|
-
|
|
1871
|
+
// room that invited the bot. AND: in a 1:1 meeting (one human + the
|
|
1872
|
+
// bot) every utterance is addressed — no name needed.
|
|
1873
|
+
const oneOnOne = meetingSpeakers.size <= 1;
|
|
1874
|
+
if (oneOnOne || /\b(osborne?|oz\s?born|os\s?born|was born|is born|ozborn|osbourne?|austin\b.{0,8}(hear|there|can you))/i.test(text)) {
|
|
1875
|
+
console.log(`📓 Addressed (${oneOnOne ? '1:1 meeting' : 'by name'}) — immediate flush for a response`);
|
|
1867
1876
|
flushMeetingBuffer(botId, true);
|
|
1868
1877
|
}
|
|
1869
1878
|
}
|
|
@@ -2558,15 +2567,13 @@ async function main() {
|
|
|
2558
2567
|
// (reuse of the regular speak path; no Bash roundtrip). Silent-observer
|
|
2559
2568
|
// turns stay suppressed as before.
|
|
2560
2569
|
if (activeMeetingBotId && Date.now() < meetingAddressedUntil) {
|
|
2561
|
-
//
|
|
2562
|
-
//
|
|
2563
|
-
//
|
|
2564
|
-
//
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
for (const s of chunks)
|
|
2569
|
-
pushCanvas({ kind: 'say', text: s });
|
|
2570
|
+
// ONE say per reply (2026-08-01 quality directive): chunking created
|
|
2571
|
+
// seams no scheduler fully hid. A single utterance = a single clean
|
|
2572
|
+
// audio file = zero seams — quality over ~1s of latency. (Structural
|
|
2573
|
+
// fix queued: canvas as LiveKit subscriber playing the agent's real
|
|
2574
|
+
// TTS track — the true "same browser experience" reuse.)
|
|
2575
|
+
console.log(`🔊➡️📽️ tts_say → canvas (single utterance) t=${new Date().toISOString()}: "${data.text.slice(0, 60)}"`);
|
|
2576
|
+
pushCanvas({ kind: 'say', text: data.text });
|
|
2570
2577
|
markMeetingSpeaking(data.text);
|
|
2571
2578
|
return;
|
|
2572
2579
|
}
|