osborn 0.9.83 → 0.9.84

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.
@@ -79,7 +79,7 @@ export declare class RecallClient extends EventEmitter {
79
79
  * room as the osborn agent (no separate WebSocket+WAV pipe).
80
80
  * @param opts.botName Display name of the bot in the meeting
81
81
  */
82
- joinMeeting(meetingUrl: string, _webhookBaseUrl: string, opts?: {
82
+ joinMeeting(meetingUrl: string, webhookBaseUrl: string, opts?: {
83
83
  botName?: string;
84
84
  }): Promise<string>;
85
85
  /**
@@ -21,8 +21,22 @@ export class RecallClient extends EventEmitter {
21
21
  * room as the osborn agent (no separate WebSocket+WAV pipe).
22
22
  * @param opts.botName Display name of the bot in the meeting
23
23
  */
24
- async joinMeeting(meetingUrl, _webhookBaseUrl, opts) {
24
+ async joinMeeting(meetingUrl, webhookBaseUrl, opts) {
25
25
  const botName = opts?.botName ?? 'Osborn';
26
+ // 0.9.84: LIVE transcript via realtime_endpoints. The v0.9.44 rewrite
27
+ // removed this and left only 30s polling of the batch download_url — but
28
+ // that URL is a POST-PROCESSING artifact (empty until the meeting ends),
29
+ // so mid-call there was nothing to fetch (confirmed live 2026-07-29:
30
+ // transcript stayed `processing` during the call, downloaded only after
31
+ // the bot left). Registering a realtime webhook makes Recall stream each
32
+ // transcript turn to /webhook/recall as it's spoken — the receiver
33
+ // (handleWebhook) already exists. Polling stays as the after-the-fact
34
+ // backstop. Only wire the webhook when we have a public URL to receive on.
35
+ const realtime = /^https:\/\//.test(webhookBaseUrl)
36
+ ? [{ type: 'webhook', url: `${webhookBaseUrl}/webhook/recall`, events: ['transcript.data', 'transcript.partial_data'] }]
37
+ : [];
38
+ if (!realtime.length)
39
+ console.log('⚠️ Recall realtime webhook skipped (no public https URL) — polling only');
26
40
  // ARCHITECTURE (post-2026-05-22 polling redesign):
27
41
  // The bot joins by name only — visible in the meeting participant list as
28
42
  // "Osborn" but with no audio output and no avatar. We do NOT configure any
@@ -53,6 +67,7 @@ export class RecallClient extends EventEmitter {
53
67
  },
54
68
  },
55
69
  },
70
+ ...(realtime.length ? { realtime_endpoints: realtime } : {}),
56
71
  },
57
72
  }),
58
73
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "osborn",
3
- "version": "0.9.83",
3
+ "version": "0.9.84",
4
4
  "description": "Voice AI coding assistant - local agent that connects to Osborn frontend",
5
5
  "type": "module",
6
6
  "bin": {