@tapflowio/agent-core 0.10.0 → 0.11.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.
@@ -0,0 +1,18 @@
1
+ import type { DeviceAgent } from './DeviceAgent.js';
2
+ export type AudioSampleFormat = 's16' | 'u8';
3
+ export type AudioChannels = 'mono' | 'stereo';
4
+ export interface AudioFormat {
5
+ sampleRate: number;
6
+ channels: AudioChannels;
7
+ sampleFormat: AudioSampleFormat;
8
+ }
9
+ export interface AudioFrame {
10
+ payload: Buffer;
11
+ timestamp: number;
12
+ }
13
+ export interface AudioStreamCapability {
14
+ audioFormat(): AudioFormat;
15
+ audioStream(): ReadableStream<AudioFrame>;
16
+ }
17
+ export declare function hasAudioCapability(agent: DeviceAgent): agent is DeviceAgent & AudioStreamCapability;
18
+ //# sourceMappingURL=AudioStreamCapability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioStreamCapability.d.ts","sourceRoot":"","sources":["../src/AudioStreamCapability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAOnD,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,IAAI,CAAA;AAC5C,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAA;AAE7C,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,aAAa,CAAA;IACvB,YAAY,EAAE,iBAAiB,CAAA;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IAEpC,WAAW,IAAI,WAAW,CAAA;IAE1B,WAAW,IAAI,cAAc,CAAC,UAAU,CAAC,CAAA;CAC1C;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,IAAI,WAAW,GAAG,qBAAqB,CAGnG"}
@@ -0,0 +1,5 @@
1
+ export function hasAudioCapability(agent) {
2
+ const a = agent;
3
+ return typeof a.audioFormat === 'function' && typeof a.audioStream === 'function';
4
+ }
5
+ //# sourceMappingURL=AudioStreamCapability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioStreamCapability.js","sourceRoot":"","sources":["../src/AudioStreamCapability.ts"],"names":[],"mappings":"AA4BA,MAAM,UAAU,kBAAkB,CAAC,KAAkB;IACnD,MAAM,CAAC,GAAG,KAAuC,CAAA;IACjD,OAAO,OAAO,CAAC,CAAC,WAAW,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,UAAU,CAAA;AACnF,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export type { Platform, DeviceStatus, Device, Point, AndroidButton, AgentResources } from './types.js';
2
2
  export type { DeviceAgent, DeviceAgentConstructor } from './DeviceAgent.js';
3
+ export { hasAudioCapability } from './AudioStreamCapability.js';
4
+ export type { AudioStreamCapability, AudioFormat, AudioFrame, AudioSampleFormat, AudioChannels, } from './AudioStreamCapability.js';
3
5
  export { AgentRegistry } from './AgentRegistry.js';
4
6
  export type { AgentConnectOpts } from './AgentRegistry.js';
5
7
  export { ValidationError, PlatformError, AuthError } from './errors.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACtG,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACtG,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,YAAY,EACV,qBAAqB,EACrB,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,aAAa,GACd,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ export { hasAudioCapability } from './AudioStreamCapability.js';
1
2
  export { AgentRegistry } from './AgentRegistry.js';
2
3
  export { ValidationError, PlatformError, AuthError } from './errors.js';
3
4
  export { createLogger } from './logger.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAQ/D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
@@ -2,6 +2,7 @@ export declare const TFFE_MAGIC: readonly [84, 70, 70, 69];
2
2
  export declare const HEADER_SIZE = 22;
3
3
  export declare const CODEC_JPEG = 0;
4
4
  export declare const CODEC_H264 = 1;
5
+ export declare const CODEC_AUDIO = 2;
5
6
  export interface EnvelopeFlags {
6
7
  codec: number;
7
8
  keyframe: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/utils/envelope.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,2BAAoC,CAAA;AAC3D,eAAO,MAAM,WAAW,KAAK,CAAA;AAI7B,eAAO,MAAM,UAAU,IAAI,CAAA;AAC3B,eAAO,MAAM,UAAU,IAAI,CAAA;AAK3B,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAQlD;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5C,MAAM,CAUR;AAGD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAQ9D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAErE"}
1
+ {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/utils/envelope.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,2BAAoC,CAAA;AAC3D,eAAO,MAAM,WAAW,KAAK,CAAA;AAI7B,eAAO,MAAM,UAAU,IAAI,CAAA;AAC3B,eAAO,MAAM,UAAU,IAAI,CAAA;AAI3B,eAAO,MAAM,WAAW,IAAI,CAAA;AAM5B,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAQlD;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5C,MAAM,CAeR;AAGD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAY9D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAErE"}
@@ -4,8 +4,13 @@ export const HEADER_SIZE = 22;
4
4
  // backward compatibility with frames written before the marker existed.
5
5
  export const CODEC_JPEG = 0;
6
6
  export const CODEC_H264 = 1;
7
+ // Audio rides an INDEPENDENT bit (bit2), so the existing JPEG/H.264 bit layout is
8
+ // untouched — no wire-format break for video. Audio is opt-in and only sent after the
9
+ // client negotiates it, so pre-audio readers never receive an audio frame to misread.
10
+ export const CODEC_AUDIO = 2;
7
11
  const FLAG_H264 = 0x01; // byte5 bit0: payload codec (0 = JPEG, 1 = H.264)
8
12
  const FLAG_KEYFRAME = 0x02; // byte5 bit1: H.264 keyframe (IDR) — for keyframe-aware drop
13
+ const FLAG_AUDIO = 0x04; // byte5 bit2: payload is PCM audio (not a video frame)
9
14
  export function hasEnvelope(frame) {
10
15
  return (frame.length >= HEADER_SIZE &&
11
16
  frame[0] === 0x54 &&
@@ -21,8 +26,13 @@ export function writeEnvelopeHeader(payload, capturedAt, opts) {
21
26
  header[3] = 0x45;
22
27
  header[4] = 1; // version
23
28
  // keyframe is an H.264 IDR marker — only set it when the codec is H.264.
29
+ // Audio sets its own bit and carries no keyframe (PCM has no reference frames).
24
30
  const isH264 = opts?.codec === CODEC_H264;
25
- header[5] = (isH264 ? FLAG_H264 : 0) | (isH264 && opts?.keyframe ? FLAG_KEYFRAME : 0);
31
+ const isAudio = opts?.codec === CODEC_AUDIO;
32
+ header[5] =
33
+ (isAudio ? FLAG_AUDIO : 0) |
34
+ (isH264 ? FLAG_H264 : 0) |
35
+ (isH264 && opts?.keyframe ? FLAG_KEYFRAME : 0);
26
36
  header.writeBigUInt64BE(BigInt(capturedAt), 6);
27
37
  header.writeBigUInt64BE(0n, 14); // relayedAt: filled in by relay
28
38
  return Buffer.concat([header, payload]);
@@ -30,6 +40,10 @@ export function writeEnvelopeHeader(payload, capturedAt, opts) {
30
40
  // Reads the codec/keyframe flags from byte 5. Caller must ensure hasEnvelope(frame).
31
41
  export function readEnvelopeFlags(frame) {
32
42
  const flags = frame[5];
43
+ // Audio is mutually exclusive with video codecs and takes precedence.
44
+ if (flags & FLAG_AUDIO) {
45
+ return { codec: CODEC_AUDIO, keyframe: false };
46
+ }
33
47
  const codec = flags & FLAG_H264 ? CODEC_H264 : CODEC_JPEG;
34
48
  return {
35
49
  codec,
@@ -1 +1 @@
1
- {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/utils/envelope.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAA;AAC3D,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAA;AAE7B,8EAA8E;AAC9E,wEAAwE;AACxE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAA;AAC3B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAA;AAE3B,MAAM,SAAS,GAAG,IAAI,CAAA,CAAK,kDAAkD;AAC7E,MAAM,aAAa,GAAG,IAAI,CAAA,CAAC,6DAA6D;AAOxF,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,CACL,KAAK,CAAC,MAAM,IAAI,WAAW;QAC3B,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;QACjB,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;QACjB,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;QACjB,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAClB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,UAAkB,EAClB,IAA6C;IAE7C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;IAC9C,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IACtE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA,CAAG,UAAU;IAC1B,yEAAyE;IACzE,MAAM,MAAM,GAAG,IAAI,EAAE,KAAK,KAAK,UAAU,CAAA;IACzC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACrF,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAA;IAC9C,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA,CAAC,gCAAgC;IAChE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AACzC,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACtB,MAAM,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAA;IACzD,OAAO;QACL,KAAK;QACL,oEAAoE;QACpE,QAAQ,EAAE,KAAK,KAAK,UAAU,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;KAChE,CAAA;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,SAAiB;IAC7D,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAA;AAC/C,CAAC"}
1
+ {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/utils/envelope.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  export { createResourceSampler } from './resources.js';
2
- export { registerStreamWs, disableNagle, sendBinaryWithBackpressure, createKeyframeAwareSender, createRateLimitedDropWarn, DEFAULT_BACKPRESSURE_BYTES, } from './stream.js';
2
+ export { registerStreamWs, disableNagle, sendBinaryWithBackpressure, createKeyframeAwareSender, createRateLimitedDropWarn, sendAudioYieldingToVideo, AUDIO_BUFFER_CEILING_BYTES, DEFAULT_BACKPRESSURE_BYTES, } from './stream.js';
3
3
  export type { KeyframeAwareSender } from './stream.js';
4
- export { TFFE_MAGIC, HEADER_SIZE, CODEC_JPEG, CODEC_H264, hasEnvelope, writeEnvelopeHeader, readEnvelopeFlags, patchRelayedAt, } from './envelope.js';
4
+ export { TFFE_MAGIC, HEADER_SIZE, CODEC_JPEG, CODEC_H264, CODEC_AUDIO, hasEnvelope, writeEnvelopeHeader, readEnvelopeFlags, patchRelayedAt, } from './envelope.js';
5
5
  export type { EnvelopeFlags } from './envelope.js';
6
6
  export { createThroughputSampler } from './throughput.js';
7
7
  export type { ThroughputSample } from './throughput.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EACL,UAAU,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,GACf,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,UAAU,CAAA;AACjB,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EACL,UAAU,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,GACf,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,UAAU,CAAA;AACjB,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA"}
@@ -1,6 +1,6 @@
1
1
  export { createResourceSampler } from './resources.js';
2
- export { registerStreamWs, disableNagle, sendBinaryWithBackpressure, createKeyframeAwareSender, createRateLimitedDropWarn, DEFAULT_BACKPRESSURE_BYTES, } from './stream.js';
3
- export { TFFE_MAGIC, HEADER_SIZE, CODEC_JPEG, CODEC_H264, hasEnvelope, writeEnvelopeHeader, readEnvelopeFlags, patchRelayedAt, } from './envelope.js';
2
+ export { registerStreamWs, disableNagle, sendBinaryWithBackpressure, createKeyframeAwareSender, createRateLimitedDropWarn, sendAudioYieldingToVideo, AUDIO_BUFFER_CEILING_BYTES, DEFAULT_BACKPRESSURE_BYTES, } from './stream.js';
3
+ export { TFFE_MAGIC, HEADER_SIZE, CODEC_JPEG, CODEC_H264, CODEC_AUDIO, hasEnvelope, writeEnvelopeHeader, readEnvelopeFlags, patchRelayedAt, } from './envelope.js';
4
4
  export { createThroughputSampler } from './throughput.js';
5
5
  export { createSleepBlocker } from './power.js';
6
6
  export { getMachineId } from './machineId.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,UAAU,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,GACf,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAEzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,UAAU,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,GACf,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAEzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,UAAU,CAAA"}
@@ -5,6 +5,8 @@ export declare const DEFAULT_BACKPRESSURE_BYTES = 1048576;
5
5
  * waiting for an ACK — negligible on localhost, but ~40ms stalls on LAN. Safe to call after open. */
6
6
  export declare function disableNagle(ws: WebSocket): void;
7
7
  export declare function sendBinaryWithBackpressure(ws: WebSocket, data: Parameters<WebSocket['send']>[0], threshold: number, onDrop: () => void): boolean;
8
+ export declare const AUDIO_BUFFER_CEILING_BYTES = 65536;
9
+ export declare function sendAudioYieldingToVideo(ws: WebSocket, data: Parameters<WebSocket['send']>[0], onDrop: () => void, ceiling?: number): boolean;
8
10
  export interface KeyframeAwareSender {
9
11
  /**
10
12
  * Sends `frame`, or drops it to keep the H.264 reference chain intact.
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/utils/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAC9B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,eAAO,MAAM,0BAA0B,UAAY,CAAA;AAEnD;sGACsG;AACtG,wBAAgB,YAAY,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAGhD;AAGD,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EACtC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,IAAI,GACjB,OAAO,CAQT;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,IAAI,CACF,EAAE,EAAE,SAAS,EACb,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EACvC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,MAAM,IAAI;IAClB;mEAC+D;IAC/D,cAAc,CAAC,EAAE,MAAM,IAAI,GAC1B,OAAO,CAAA;CACX;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,IAAI,mBAAmB,CA+B/D;AAID,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,UAAU,SAAO,GAChB,MAAM,IAAI,CAYZ;AAID,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhF"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/utils/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAC9B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,eAAO,MAAM,0BAA0B,UAAY,CAAA;AAEnD;sGACsG;AACtG,wBAAgB,YAAY,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAGhD;AAGD,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EACtC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,IAAI,GACjB,OAAO,CAQT;AAQD,eAAO,MAAM,0BAA0B,QAAS,CAAA;AAGhD,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EACtC,MAAM,EAAE,MAAM,IAAI,EAClB,OAAO,GAAE,MAAmC,GAC3C,OAAO,CAQT;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,IAAI,CACF,EAAE,EAAE,SAAS,EACb,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EACvC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,MAAM,IAAI;IAClB;mEAC+D;IAC/D,cAAc,CAAC,EAAE,MAAM,IAAI,GAC1B,OAAO,CAAA;CACX;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,IAAI,mBAAmB,CA+B/D;AAID,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,UAAU,SAAO,GAChB,MAAM,IAAI,CAYZ;AAID,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhF"}
@@ -17,6 +17,24 @@ export function sendBinaryWithBackpressure(ws, data, threshold, onDrop) {
17
17
  ws.send(data, { binary: true });
18
18
  return true;
19
19
  }
20
+ // Audio rides the SAME browser socket as video (codec-tagged), so audio bytes also count
21
+ // toward ws.bufferedAmount — which the video keyframe-aware sender reads to decide backpressure.
22
+ // To guarantee audio NEVER degrades video, audio yields: it only sends when the socket is
23
+ // near-empty (below this ceiling), and drops otherwise. The ceiling sits far below the video
24
+ // threshold (1 MB), so a sent audio frame can't push the socket near video's backpressure point.
25
+ // A dropped audio frame is a brief glitch — always cheaper than stalling video.
26
+ export const AUDIO_BUFFER_CEILING_BYTES = 65_536; // 64 KB
27
+ // Returns true if the audio frame was sent, false if dropped (socket busy/closed).
28
+ export function sendAudioYieldingToVideo(ws, data, onDrop, ceiling = AUDIO_BUFFER_CEILING_BYTES) {
29
+ if (ws.readyState !== WebSocket.OPEN)
30
+ return false;
31
+ if (ws.bufferedAmount > ceiling) {
32
+ onDrop();
33
+ return false;
34
+ }
35
+ ws.send(data, { binary: true });
36
+ return true;
37
+ }
20
38
  /**
21
39
  * Stateful, keyframe-aware backpressure sender (one per session/stream).
22
40
  *
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/utils/stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/utils/stream.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tapflowio/agent-core",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "DeviceAgent interface, AgentRegistry, and shared utilities for tapflow agents",
5
5
  "keywords": [
6
6
  "tapflow",
@@ -24,14 +24,14 @@
24
24
  "types": "dist/index.d.ts",
25
25
  "exports": {
26
26
  ".": {
27
- "types": "./src/index.ts",
27
+ "types": "./dist/index.d.ts",
28
28
  "source": "./src/index.ts",
29
29
  "tsx": "./src/index.ts",
30
30
  "import": "./dist/index.js",
31
31
  "default": "./dist/index.js"
32
32
  },
33
33
  "./utils": {
34
- "types": "./src/utils/index.ts",
34
+ "types": "./dist/utils/index.d.ts",
35
35
  "source": "./src/utils/index.ts",
36
36
  "tsx": "./src/utils/index.ts",
37
37
  "import": "./dist/utils/index.js",
@@ -59,8 +59,8 @@
59
59
  "vitest": "^4.1.9"
60
60
  },
61
61
  "scripts": {
62
- "build": "tsc",
63
- "typecheck": "tsc --noEmit",
62
+ "build": "tsc -b",
63
+ "typecheck": "tsc -b",
64
64
  "test": "vitest run",
65
65
  "lint": "eslint src"
66
66
  }