@infilectai/aira 0.0.0-stage → 0.1.0

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 (57) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +74 -2
  3. package/bin/aira-capture +0 -0
  4. package/dist/attribution.d.ts +118 -0
  5. package/dist/attribution.d.ts.map +1 -0
  6. package/dist/attribution.js +626 -0
  7. package/dist/attribution.js.map +1 -0
  8. package/dist/audio.d.ts +26 -0
  9. package/dist/audio.d.ts.map +1 -0
  10. package/dist/audio.js +172 -0
  11. package/dist/audio.js.map +1 -0
  12. package/dist/brain.d.ts +11 -0
  13. package/dist/brain.d.ts.map +1 -0
  14. package/dist/brain.js +70 -0
  15. package/dist/brain.js.map +1 -0
  16. package/dist/capture.d.ts +48 -0
  17. package/dist/capture.d.ts.map +1 -0
  18. package/dist/capture.js +195 -0
  19. package/dist/capture.js.map +1 -0
  20. package/dist/engine.d.ts +61 -0
  21. package/dist/engine.d.ts.map +1 -0
  22. package/dist/engine.js +471 -0
  23. package/dist/engine.js.map +1 -0
  24. package/dist/eyes.d.ts +60 -0
  25. package/dist/eyes.d.ts.map +1 -0
  26. package/dist/eyes.js +173 -0
  27. package/dist/eyes.js.map +1 -0
  28. package/dist/index.d.ts +11 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +9 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/lockfile.d.ts +14 -0
  33. package/dist/lockfile.d.ts.map +1 -0
  34. package/dist/lockfile.js +38 -0
  35. package/dist/lockfile.js.map +1 -0
  36. package/dist/providers.d.ts +162 -0
  37. package/dist/providers.d.ts.map +1 -0
  38. package/dist/providers.js +374 -0
  39. package/dist/providers.js.map +1 -0
  40. package/dist/transport.d.ts +14 -0
  41. package/dist/transport.d.ts.map +1 -0
  42. package/dist/transport.js +44 -0
  43. package/dist/transport.js.map +1 -0
  44. package/dist/types.d.ts +175 -0
  45. package/dist/types.d.ts.map +1 -0
  46. package/dist/types.js +2 -0
  47. package/dist/types.js.map +1 -0
  48. package/dist/vectors.d.ts +10 -0
  49. package/dist/vectors.d.ts.map +1 -0
  50. package/dist/vectors.js +66 -0
  51. package/dist/vectors.js.map +1 -0
  52. package/native/AiraCapture.swift +1142 -0
  53. package/native/Info.plist +26 -0
  54. package/native/NativeMeetingScraper.swift +1277 -0
  55. package/package.json +84 -4
  56. package/scripts/build-capture.cjs +57 -0
  57. package/scripts/postinstall.cjs +29 -0
package/dist/eyes.js ADDED
@@ -0,0 +1,173 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import { MeetingSessionPipeline } from './attribution.js';
3
+ import { resolveDiarizationProvider, resolveSTTProvider } from './engine.js';
4
+ /**
5
+ * Aira Eyes: macOS meeting detection, native AX/DOM speaker scraping,
6
+ * CoreAudio Process Tap capture, and pluggable STT/Diarization attribution.
7
+ */
8
+ export class Eyes {
9
+ engine;
10
+ capture;
11
+ constructor(engine, capture) {
12
+ this.engine = engine;
13
+ this.capture = capture;
14
+ }
15
+ /** Forward visual state from an extension or webview. */
16
+ async pushChromeEvent(event) {
17
+ await this.capture.pushChromeEvent(event);
18
+ }
19
+ /**
20
+ * Check or prompt for macOS permissions (`accessibility`, `screen-capture`, `microphone`, `system-audio`).
21
+ */
22
+ async checkPermissions(prompt = false) {
23
+ return this.capture.checkPermissions(prompt);
24
+ }
25
+ /**
26
+ * Open a live attributed-transcript session using `aira-capture` and the configured
27
+ * (or per-session overridden) `STTProvider` and `DiarizationProvider`.
28
+ */
29
+ start(target, opts = {}) {
30
+ const stt = opts.stt ? resolveSTTProvider(opts.stt) : this.engine.sttProvider;
31
+ const diarize = opts.diarize ? resolveDiarizationProvider(opts.diarize) : this.engine.diarizationProvider;
32
+ return new EyesSession(this.capture, target, {
33
+ stt,
34
+ diarize,
35
+ transcribeOptions: opts.transcribeOptions,
36
+ batchChunkSeconds: opts.batchChunkSeconds,
37
+ });
38
+ }
39
+ /**
40
+ * Watch for active meeting targets on the local machine.
41
+ */
42
+ watchMeetings() {
43
+ return new MeetingWatcher(this.capture);
44
+ }
45
+ }
46
+ export class EyesSession extends EventEmitter {
47
+ capture;
48
+ target;
49
+ queue = [];
50
+ waiters = [];
51
+ pipeline;
52
+ startPromise;
53
+ closed = false;
54
+ onRosterBound;
55
+ onSpeakerActivityBound;
56
+ onSpeakerChangeBound;
57
+ onAudioBound;
58
+ constructor(capture, target, opts) {
59
+ super();
60
+ this.capture = capture;
61
+ this.target = target;
62
+ const pipeline = new MeetingSessionPipeline({
63
+ stt: opts.stt,
64
+ diarize: opts.diarize,
65
+ transcribeOptions: opts.transcribeOptions,
66
+ batchChunkSeconds: opts.batchChunkSeconds,
67
+ onEvent: (frame) => this.pushFrame(frame),
68
+ });
69
+ this.pipeline = pipeline;
70
+ this.onRosterBound = (p) => pipeline.handleRoster(p);
71
+ this.onSpeakerActivityBound = (p) => pipeline.handleSpeakerActivity(p);
72
+ this.onSpeakerChangeBound = (p) => pipeline.handleSpeakerChange(p);
73
+ this.onAudioBound = (chunk) => {
74
+ this.emit('audio', chunk);
75
+ pipeline.handleAudio(chunk);
76
+ };
77
+ this.capture.on('roster', this.onRosterBound);
78
+ this.capture.on('speaker_activity', this.onSpeakerActivityBound);
79
+ this.capture.on('speaker_change', this.onSpeakerChangeBound);
80
+ this.capture.on('audio', this.onAudioBound);
81
+ this.startPromise = (async () => {
82
+ await pipeline.start();
83
+ await this.capture.startCapture(target);
84
+ })();
85
+ this.startPromise.catch((err) => {
86
+ this.pushFrame({
87
+ type: 'error',
88
+ message: err instanceof Error ? err.message : String(err),
89
+ });
90
+ });
91
+ }
92
+ pushFrame(frame) {
93
+ if (this.closed)
94
+ return;
95
+ const w = this.waiters.shift();
96
+ if (w)
97
+ w({ value: frame, done: false });
98
+ else
99
+ this.queue.push(frame);
100
+ }
101
+ get events() {
102
+ const queue = this.queue;
103
+ const waiters = this.waiters;
104
+ const isClosed = () => this.closed;
105
+ return {
106
+ [Symbol.asyncIterator]() {
107
+ return {
108
+ next() {
109
+ if (queue.length) {
110
+ return Promise.resolve({ value: queue.shift(), done: false });
111
+ }
112
+ if (isClosed()) {
113
+ return Promise.resolve({ value: undefined, done: true });
114
+ }
115
+ return new Promise((resolve) => waiters.push(resolve));
116
+ },
117
+ };
118
+ },
119
+ };
120
+ }
121
+ async ready() {
122
+ await this.startPromise;
123
+ }
124
+ async close() {
125
+ if (this.closed)
126
+ return;
127
+ this.capture.off('roster', this.onRosterBound);
128
+ this.capture.off('speaker_activity', this.onSpeakerActivityBound);
129
+ this.capture.off('speaker_change', this.onSpeakerChangeBound);
130
+ this.capture.off('audio', this.onAudioBound);
131
+ await this.capture.stopCapture().catch(() => { });
132
+ await this.pipeline.stop().catch(() => { });
133
+ this.closed = true;
134
+ while (this.waiters.length) {
135
+ const w = this.waiters.shift();
136
+ w({ value: undefined, done: true });
137
+ }
138
+ }
139
+ }
140
+ export class MeetingWatcher extends EventEmitter {
141
+ capture;
142
+ closed = false;
143
+ onMeetingsBound;
144
+ constructor(capture) {
145
+ super();
146
+ this.capture = capture;
147
+ this.onMeetingsBound = (meetings) => {
148
+ if (!this.closed) {
149
+ this.emit('meetings', meetings);
150
+ }
151
+ };
152
+ this.capture.on('meetings', this.onMeetingsBound);
153
+ this.capture
154
+ .watchMeetings()
155
+ .then(() => {
156
+ if (!this.closed)
157
+ this.emit('ready');
158
+ })
159
+ .catch((err) => {
160
+ if (!this.closed)
161
+ this.emit('error', err);
162
+ });
163
+ }
164
+ close() {
165
+ if (this.closed)
166
+ return;
167
+ this.closed = true;
168
+ this.capture.off('meetings', this.onMeetingsBound);
169
+ void this.capture.stopWatchingMeetings().catch(() => { });
170
+ this.emit('close');
171
+ }
172
+ }
173
+ //# sourceMappingURL=eyes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eyes.js","sourceRoot":"","sources":["../src/eyes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export { Aira, AiraEngine, resolveDiarizationProvider, resolveSTTProvider } from './engine.js';
2
+ export { LiveSession } from './audio.js';
3
+ export { Eyes, EyesSession, MeetingWatcher } from './eyes.js';
4
+ export { NativeCaptureBridge } from './capture.js';
5
+ export { AiraEngineProvider, CallbackDiarizationProvider, CallbackSTTProvider, HttpDiarizationProvider, HttpSTTProvider, WebSocketSTTProvider, encodeWavFromInt16PCM, } from './providers.js';
6
+ export type { AiraEngineProviderOptions, CustomDiarizeFn, CustomTranscribeFn, DiarizationProvider, HttpDiarizationProviderOptions, HttpSTTProviderOptions, STTProvider, STTStreamSession, WebSocketSTTProviderOptions, } from './providers.js';
7
+ export { IncrementalDiarizer, MeetingSessionPipeline, SpeakerAttributionTimeline } from './attribution.js';
8
+ export { EngineHttpError } from './transport.js';
9
+ export { Vectors } from './vectors.js';
10
+ export type * from './types.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAC9F,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EACV,yBAAyB,EACzB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,8BAA8B,EAC9B,sBAAsB,EACtB,WAAW,EACX,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAC1G,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,mBAAmB,YAAY,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ export { Aira, AiraEngine, resolveDiarizationProvider, resolveSTTProvider } from './engine.js';
2
+ export { LiveSession } from './audio.js';
3
+ export { Eyes, EyesSession, MeetingWatcher } from './eyes.js';
4
+ export { NativeCaptureBridge } from './capture.js';
5
+ export { AiraEngineProvider, CallbackDiarizationProvider, CallbackSTTProvider, HttpDiarizationProvider, HttpSTTProvider, WebSocketSTTProvider, encodeWavFromInt16PCM, } from './providers.js';
6
+ export { IncrementalDiarizer, MeetingSessionPipeline, SpeakerAttributionTimeline } from './attribution.js';
7
+ export { EngineHttpError } from './transport.js';
8
+ export { Vectors } from './vectors.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAC9F,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,gBAAgB,CAAA;AAYvB,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAC1G,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,14 @@
1
+ export interface EngineLock {
2
+ pid: number;
3
+ port: number;
4
+ startedAt: number;
5
+ }
6
+ export declare class Lockfile {
7
+ readonly path: string;
8
+ constructor(path: string);
9
+ read(): EngineLock | null;
10
+ write(lock: EngineLock): void;
11
+ remove(): void;
12
+ }
13
+ export declare function isProcessAlive(pid: number): boolean;
14
+ //# sourceMappingURL=lockfile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../src/lockfile.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,QAAQ;aACS,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;IAExC,IAAI,IAAI,UAAU,GAAG,IAAI;IAQzB,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAK7B,MAAM,IAAI,IAAI;CAGf;AAID,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOnD"}
@@ -0,0 +1,38 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ export class Lockfile {
4
+ path;
5
+ constructor(path) {
6
+ this.path = path;
7
+ }
8
+ read() {
9
+ try {
10
+ return JSON.parse(fs.readFileSync(this.path, 'utf8'));
11
+ }
12
+ catch {
13
+ return null;
14
+ }
15
+ }
16
+ write(lock) {
17
+ fs.mkdirSync(path.dirname(this.path), { recursive: true });
18
+ fs.writeFileSync(this.path, JSON.stringify(lock), 'utf8');
19
+ }
20
+ remove() {
21
+ try {
22
+ fs.unlinkSync(this.path);
23
+ }
24
+ catch { /* ignore */ }
25
+ }
26
+ }
27
+ // process.kill(pid, 0) — signal 0 is the "is it alive?" probe.
28
+ // EPERM means the PID exists but is owned by another user; treat as alive.
29
+ export function isProcessAlive(pid) {
30
+ try {
31
+ process.kill(pid, 0);
32
+ return true;
33
+ }
34
+ catch (e) {
35
+ return e.code === 'EPERM';
36
+ }
37
+ }
38
+ //# sourceMappingURL=lockfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../src/lockfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAQjC,MAAM,OAAO,QAAQ;IACS;IAA5B,YAA4B,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;IAAG,CAAC;IAE5C,IAAI;QACF,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAe,CAAA;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAgB;QACpB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1D,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;IAC3D,CAAC;IAED,MAAM;QACJ,IAAI,CAAC;YAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACzD,CAAC;CACF;AAED,+DAA+D;AAC/D,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAQ,CAA2B,CAAC,IAAI,KAAK,OAAO,CAAA;IACtD,CAAC;AACH,CAAC"}
@@ -0,0 +1,162 @@
1
+ import { HttpClient } from './transport.js';
2
+ import type { DiarizeOptions, DiarizeResult, DiarizeSegment, LiveTranscriptFrame, TranscribeOptions, TranscribeResult, TranscribeSegment } from './types.js';
3
+ export interface STTStreamSession {
4
+ /** Feed 16 kHz mono Int16 PCM bytes. */
5
+ feed(pcm: Buffer | Uint8Array | Int16Array): void;
6
+ /** Async iterator yielding partial and final transcript frames. */
7
+ readonly frames: AsyncIterable<LiveTranscriptFrame>;
8
+ /** Wait until the stream connection is ready. */
9
+ ready(): Promise<void>;
10
+ /** Finalize and close the stream. */
11
+ close(): Promise<void>;
12
+ }
13
+ export interface STTProvider {
14
+ /**
15
+ * Batch transcription of a 16 kHz mono WAV buffer.
16
+ * Compatible with any OpenAI `/v1/audio/transcriptions` endpoint or custom callback.
17
+ */
18
+ transcribe?(wavBuffer: Buffer | Uint8Array, opts?: TranscribeOptions): Promise<TranscribeResult>;
19
+ /**
20
+ * Optional real-time WebSocket / streaming transcription session.
21
+ * When absent or returning `undefined`, `AiraSDK` automatically chunks live meeting
22
+ * audio using VAD and calls `transcribe()` on each speech segment.
23
+ */
24
+ startStream?(opts?: TranscribeOptions): STTStreamSession | undefined;
25
+ }
26
+ export interface DiarizationProvider {
27
+ /**
28
+ * Diarize a 16 kHz mono WAV buffer into speaker segments `[{ start, end, speaker }]`.
29
+ */
30
+ diarize(wavBuffer: Buffer | Uint8Array, opts?: DiarizeOptions): Promise<DiarizeResult>;
31
+ }
32
+ export interface HttpSTTProviderOptions {
33
+ /**
34
+ * Full endpoint URL (e.g. `https://api.openai.com/v1/audio/transcriptions`,
35
+ * `https://api.groq.com/openai/v1/audio/transcriptions`, or `http://127.0.0.1:50060/v1/audio/transcriptions`)
36
+ * or base URL (if it doesn't end with a path, `/v1/audio/transcriptions` is appended).
37
+ */
38
+ url: string;
39
+ /** Optional Bearer API key (e.g. OpenAI / Groq / custom key). */
40
+ apiKey?: string;
41
+ /** Additional HTTP headers. */
42
+ headers?: Record<string, string>;
43
+ /** Default model name (e.g. `whisper-1`, `whisper-large-v3`, `gpt-4o-transcribe`). */
44
+ model?: string;
45
+ /** Default ISO-639-1 language code (e.g. `en`). */
46
+ language?: string;
47
+ /** Default response_format sent in multipart form (`verbose_json` by default when model is set). */
48
+ responseFormat?: string;
49
+ }
50
+ /**
51
+ * Pluggable HTTP STT provider that works with any OpenAI-compatible
52
+ * `/v1/audio/transcriptions` endpoint (OpenAI, Groq, local whisper.cpp, FastAPI, AiraEngine, etc.).
53
+ */
54
+ export declare class HttpSTTProvider implements STTProvider {
55
+ private readonly opts;
56
+ readonly endpointUrl: string;
57
+ constructor(opts: HttpSTTProviderOptions);
58
+ transcribe(audio: Buffer | Uint8Array, callOpts?: TranscribeOptions): Promise<TranscribeResult>;
59
+ }
60
+ export interface WebSocketSTTProviderOptions {
61
+ /** WebSocket endpoint URL (e.g. `ws://127.0.0.1:50060/v1/audio/stream`) or HTTP base URL. */
62
+ wsUrl: string;
63
+ /** Optional HTTP headers for the WebSocket handshake (e.g. Authorization). */
64
+ headers?: Record<string, string>;
65
+ /** Optional fallback HTTP STT provider for batch `.transcribe()` calls. */
66
+ httpFallback?: STTProvider;
67
+ }
68
+ /**
69
+ * Pluggable WebSocket streaming STT provider.
70
+ * Streams 16 kHz mono Int16 PCM binary frames and parses `{ type: 'partial' | 'final', text, t0, t1 }`.
71
+ */
72
+ export declare class WebSocketSTTProvider implements STTProvider {
73
+ private readonly opts;
74
+ readonly wsEndpointUrl: string;
75
+ constructor(opts: WebSocketSTTProviderOptions);
76
+ transcribe(audio: Buffer | Uint8Array, opts?: TranscribeOptions): Promise<TranscribeResult>;
77
+ startStream(_opts?: TranscribeOptions): STTStreamSession;
78
+ }
79
+ export declare class WebSocketStreamSession implements STTStreamSession {
80
+ private readonly ws;
81
+ private readonly queue;
82
+ private readonly waiters;
83
+ private closed;
84
+ constructor(url: string, headers?: Record<string, string>);
85
+ feed(pcm: Int16Array | Uint8Array | Buffer): void;
86
+ get frames(): AsyncIterable<LiveTranscriptFrame>;
87
+ ready(): Promise<void>;
88
+ close(): Promise<void>;
89
+ }
90
+ export type CustomTranscribeFn = (wavBuffer: Buffer, opts?: TranscribeOptions) => Promise<TranscribeResult | {
91
+ text: string;
92
+ segments?: TranscribeSegment[];
93
+ } | string>;
94
+ /**
95
+ * Pluggable callback STT provider — wrap any third-party SDK (Deepgram, ElevenLabs, AssemblyAI, etc.)
96
+ * with a simple async function.
97
+ */
98
+ export declare class CallbackSTTProvider implements STTProvider {
99
+ private readonly fn;
100
+ private readonly streamFactory?;
101
+ constructor(fn: CustomTranscribeFn, streamFactory?: ((opts?: TranscribeOptions) => STTStreamSession) | undefined);
102
+ transcribe(audio: Buffer | Uint8Array, opts?: TranscribeOptions): Promise<TranscribeResult>;
103
+ startStream(opts?: TranscribeOptions): STTStreamSession | undefined;
104
+ }
105
+ export interface HttpDiarizationProviderOptions {
106
+ /**
107
+ * Full endpoint URL (e.g. `http://127.0.0.1:50060/v1/audio/diarize`)
108
+ * or base URL (if it doesn't end with a path, `/v1/audio/diarize` is appended).
109
+ */
110
+ url: string;
111
+ /** Optional Bearer API key. */
112
+ apiKey?: string;
113
+ /** Additional HTTP headers. */
114
+ headers?: Record<string, string>;
115
+ }
116
+ /**
117
+ * Pluggable HTTP Diarization provider that works with any `/v1/audio/diarize`
118
+ * endpoint (AiraEngine, pyannote HTTP microservice, etc.).
119
+ */
120
+ export declare class HttpDiarizationProvider implements DiarizationProvider {
121
+ private readonly opts;
122
+ readonly endpointUrl: string;
123
+ constructor(opts: HttpDiarizationProviderOptions);
124
+ diarize(audio: Buffer | Uint8Array, opts?: DiarizeOptions): Promise<DiarizeResult>;
125
+ }
126
+ export type CustomDiarizeFn = (wavBuffer: Buffer, opts?: DiarizeOptions) => Promise<DiarizeResult | DiarizeSegment[]>;
127
+ /**
128
+ * Pluggable callback Diarization provider.
129
+ */
130
+ export declare class CallbackDiarizationProvider implements DiarizationProvider {
131
+ private readonly fn;
132
+ constructor(fn: CustomDiarizeFn);
133
+ diarize(audio: Buffer | Uint8Array, opts?: DiarizeOptions): Promise<DiarizeResult>;
134
+ }
135
+ export interface AiraEngineProviderOptions {
136
+ /** Base URL of a running AiraEngine server (e.g. `http://127.0.0.1:50060`). */
137
+ baseUrl: string;
138
+ /** Use batch `/v1/audio/transcriptions` instead of WebSocket `/v1/audio/stream` for meetings. */
139
+ preferBatchSTT?: boolean;
140
+ }
141
+ /**
142
+ * Connects `AiraSDK` to an `AiraEngine` compute instance (WhisperKit STT + SpeakerKit Diarization).
143
+ * Can be passed to `AiraEngine.create({ stt: provider, diarize: provider })` or `new AiraClient(...)`.
144
+ */
145
+ export declare class AiraEngineProvider implements STTProvider, DiarizationProvider {
146
+ readonly baseUrl: string;
147
+ readonly http: HttpClient;
148
+ private readonly httpSTT;
149
+ private readonly wsSTT;
150
+ private readonly httpDiarize;
151
+ private readonly preferBatchSTT;
152
+ constructor(opts: AiraEngineProviderOptions | string);
153
+ transcribe(audio: Buffer | Uint8Array, opts?: TranscribeOptions): Promise<TranscribeResult>;
154
+ startStream(): STTStreamSession | undefined;
155
+ diarize(audio: Buffer | Uint8Array, opts?: DiarizeOptions): Promise<DiarizeResult>;
156
+ }
157
+ export declare function toBlobPart(bytes: Buffer | Uint8Array): Uint8Array<ArrayBuffer>;
158
+ /** Wraps raw 16 kHz 16-bit mono little-endian PCM bytes in a 44-byte RIFF WAVE header. */
159
+ export declare function encodeWavFromInt16PCM(pcmBytes: Buffer, sampleRate?: number): Buffer;
160
+ export declare function extractPcmFromWavOrRaw(audio: Buffer | Uint8Array): Buffer;
161
+ export declare function estimateWavDurationSeconds(audio: Buffer | Uint8Array): number;
162
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}