osborn 0.9.108 → 0.9.110

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 (2) hide show
  1. package/dist/index.js +10 -2
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -586,7 +586,7 @@ function startApiServer(workingDir, port) {
586
586
  // WAV/linear16, not mp3: mp3 files carry encoder padding (leading/
587
587
  // trailing silence + boundary click) — back-to-back sentence clips
588
588
  // were heard as "cracking". WAV is gapless-safe and cheaper to decode.
589
- const dg = await fetch('https://api.deepgram.com/v1/speak?model=aura-2-thalia-en&encoding=linear16&sample_rate=24000&container=wav', {
589
+ const dg = await fetch('https://api.deepgram.com/v1/speak?model=aura-2-thalia-en&encoding=linear16&sample_rate=48000&container=wav', {
590
590
  method: 'POST',
591
591
  headers: { 'Authorization': `Token ${dgKey}`, 'Content-Type': 'application/json' },
592
592
  body: JSON.stringify({ text }),
@@ -1674,7 +1674,14 @@ async function main() {
1674
1674
  // mode, sink = meeting. The old prompt made the agent compose a Bash curl
1675
1675
  // (extra LLM tool roundtrip, ate the 3-call budget, sometimes lost the
1676
1676
  // reply entirely) — measured as most of the 5-8s reply lag.
1677
- meetingAddressedUntil = Date.now() + 90_000;
1677
+ // ONCE ADDRESSED, STAY CONVERSATIONAL (2026-08-01 fix): the old 90s
1678
+ // window silently ATE every reply generated after it expired — the agent
1679
+ // kept "answering" into suppression while the room heard nothing
1680
+ // (user transcript full of unheard replies; direct /canvas say test WAS
1681
+ // heard). A participant who's been spoken to stays in the conversation;
1682
+ // observer restraint comes from the skill not generating chatter, not
1683
+ // from muting the audio path. Reset by endMeeting.
1684
+ meetingAddressedUntil = Date.now() + 6 * 60 * 60 * 1000;
1678
1685
  }
1679
1686
  // PROMPT PARITY (user directive 2026-08-01): addressed turns carry ONLY a
1680
1687
  // minimal tag — no behavioral re-instruction. The agent replies exactly as
@@ -1739,6 +1746,7 @@ async function main() {
1739
1746
  meetingLeaveGraceTimer = null;
1740
1747
  }
1741
1748
  activeMeetingBotId = null;
1749
+ meetingAddressedUntil = 0;
1742
1750
  // leaveBot=false when Recall itself reported the meeting over (bot already gone).
1743
1751
  if (opts.leaveBot !== false) {
1744
1752
  const recall = getRecallClient();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "osborn",
3
- "version": "0.9.108",
3
+ "version": "0.9.110",
4
4
  "description": "Voice AI coding assistant - local agent that connects to Osborn frontend",
5
5
  "type": "module",
6
6
  "bin": {