felona-voice 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 (126) hide show
  1. package/dist/agent.d.ts +105 -0
  2. package/dist/agent.d.ts.map +1 -0
  3. package/dist/agent.js +287 -0
  4. package/dist/agent.js.map +1 -0
  5. package/dist/analytics/index.d.ts +3 -0
  6. package/dist/analytics/index.d.ts.map +1 -0
  7. package/dist/analytics/index.js +2 -0
  8. package/dist/analytics/index.js.map +1 -0
  9. package/dist/analytics/logger.d.ts +92 -0
  10. package/dist/analytics/logger.d.ts.map +1 -0
  11. package/dist/analytics/logger.js +75 -0
  12. package/dist/analytics/logger.js.map +1 -0
  13. package/dist/index.d.ts +45 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +54 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/jev/action-space.d.ts +38 -0
  18. package/dist/jev/action-space.d.ts.map +1 -0
  19. package/dist/jev/action-space.js +92 -0
  20. package/dist/jev/action-space.js.map +1 -0
  21. package/dist/jev/embeddings.d.ts +23 -0
  22. package/dist/jev/embeddings.d.ts.map +1 -0
  23. package/dist/jev/embeddings.js +63 -0
  24. package/dist/jev/embeddings.js.map +1 -0
  25. package/dist/jev/engine.d.ts +101 -0
  26. package/dist/jev/engine.d.ts.map +1 -0
  27. package/dist/jev/engine.js +173 -0
  28. package/dist/jev/engine.js.map +1 -0
  29. package/dist/jev/index.d.ts +4 -0
  30. package/dist/jev/index.d.ts.map +1 -0
  31. package/dist/jev/index.js +4 -0
  32. package/dist/jev/index.js.map +1 -0
  33. package/dist/llm/index.d.ts +2 -0
  34. package/dist/llm/index.d.ts.map +1 -0
  35. package/dist/llm/index.js +2 -0
  36. package/dist/llm/index.js.map +1 -0
  37. package/dist/llm/openai.d.ts +22 -0
  38. package/dist/llm/openai.d.ts.map +1 -0
  39. package/dist/llm/openai.js +140 -0
  40. package/dist/llm/openai.js.map +1 -0
  41. package/dist/memory/context.d.ts +53 -0
  42. package/dist/memory/context.d.ts.map +1 -0
  43. package/dist/memory/context.js +95 -0
  44. package/dist/memory/context.js.map +1 -0
  45. package/dist/memory/index.d.ts +2 -0
  46. package/dist/memory/index.d.ts.map +1 -0
  47. package/dist/memory/index.js +2 -0
  48. package/dist/memory/index.js.map +1 -0
  49. package/dist/pipeline.d.ts +93 -0
  50. package/dist/pipeline.d.ts.map +1 -0
  51. package/dist/pipeline.js +255 -0
  52. package/dist/pipeline.js.map +1 -0
  53. package/dist/stt/deepgram.d.ts +27 -0
  54. package/dist/stt/deepgram.d.ts.map +1 -0
  55. package/dist/stt/deepgram.js +137 -0
  56. package/dist/stt/deepgram.js.map +1 -0
  57. package/dist/stt/index.d.ts +2 -0
  58. package/dist/stt/index.d.ts.map +1 -0
  59. package/dist/stt/index.js +2 -0
  60. package/dist/stt/index.js.map +1 -0
  61. package/dist/tools/index.d.ts +2 -0
  62. package/dist/tools/index.d.ts.map +1 -0
  63. package/dist/tools/index.js +2 -0
  64. package/dist/tools/index.js.map +1 -0
  65. package/dist/tools/registry.d.ts +38 -0
  66. package/dist/tools/registry.d.ts.map +1 -0
  67. package/dist/tools/registry.js +77 -0
  68. package/dist/tools/registry.js.map +1 -0
  69. package/dist/transport/index.d.ts +2 -0
  70. package/dist/transport/index.d.ts.map +1 -0
  71. package/dist/transport/index.js +2 -0
  72. package/dist/transport/index.js.map +1 -0
  73. package/dist/transport/websocket.d.ts +38 -0
  74. package/dist/transport/websocket.d.ts.map +1 -0
  75. package/dist/transport/websocket.js +180 -0
  76. package/dist/transport/websocket.js.map +1 -0
  77. package/dist/tts/eleven-labs.d.ts +27 -0
  78. package/dist/tts/eleven-labs.d.ts.map +1 -0
  79. package/dist/tts/eleven-labs.js +73 -0
  80. package/dist/tts/eleven-labs.js.map +1 -0
  81. package/dist/tts/index.d.ts +2 -0
  82. package/dist/tts/index.d.ts.map +1 -0
  83. package/dist/tts/index.js +2 -0
  84. package/dist/tts/index.js.map +1 -0
  85. package/dist/types.d.ts +370 -0
  86. package/dist/types.d.ts.map +1 -0
  87. package/dist/types.js +13 -0
  88. package/dist/types.js.map +1 -0
  89. package/dist/vad/energy.d.ts +49 -0
  90. package/dist/vad/energy.d.ts.map +1 -0
  91. package/dist/vad/energy.js +108 -0
  92. package/dist/vad/energy.js.map +1 -0
  93. package/dist/vad/index.d.ts +2 -0
  94. package/dist/vad/index.d.ts.map +1 -0
  95. package/dist/vad/index.js +2 -0
  96. package/dist/vad/index.js.map +1 -0
  97. package/package.json +51 -0
  98. package/src/agent.ts +373 -0
  99. package/src/analytics/index.ts +7 -0
  100. package/src/analytics/logger.ts +152 -0
  101. package/src/index.ts +121 -0
  102. package/src/jev/action-space.ts +119 -0
  103. package/src/jev/embeddings.ts +81 -0
  104. package/src/jev/engine.ts +225 -0
  105. package/src/jev/index.ts +3 -0
  106. package/src/llm/index.ts +1 -0
  107. package/src/llm/openai.ts +178 -0
  108. package/src/memory/context.ts +124 -0
  109. package/src/memory/index.ts +1 -0
  110. package/src/pipeline.ts +331 -0
  111. package/src/stt/deepgram.ts +182 -0
  112. package/src/stt/index.ts +1 -0
  113. package/src/tools/index.ts +1 -0
  114. package/src/tools/registry.ts +99 -0
  115. package/src/transport/index.ts +1 -0
  116. package/src/transport/websocket.ts +227 -0
  117. package/src/tts/eleven-labs.ts +100 -0
  118. package/src/tts/index.ts +1 -0
  119. package/src/types.ts +429 -0
  120. package/src/vad/energy.ts +135 -0
  121. package/src/vad/index.ts +1 -0
  122. package/tests/jev.test.ts +198 -0
  123. package/tests/memory.test.ts +169 -0
  124. package/tests/vad.test.ts +94 -0
  125. package/tsconfig.json +9 -0
  126. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { STTProvider, STTStream, STTStreamOptions } from "../types.js";
2
+ /**
3
+ * DeepgramSTT — Streaming Speech-to-Text using Deepgram's WebSocket API.
4
+ *
5
+ * Deepgram is the default STT provider because:
6
+ * - Sub-300ms latency for streaming recognition
7
+ * - Excellent accuracy with Nova-2 model
8
+ * - Native WebSocket API (no HTTP polling)
9
+ * - Supports interim results for real-time feedback
10
+ */
11
+ export declare class DeepgramSTT implements STTProvider {
12
+ readonly name = "deepgram";
13
+ private readonly apiKey;
14
+ private readonly model;
15
+ private readonly baseUrl;
16
+ constructor(options: {
17
+ apiKey: string;
18
+ model?: string;
19
+ baseUrl?: string;
20
+ });
21
+ createStream(options?: STTStreamOptions): STTStream;
22
+ }
23
+ export declare function createDeepgramSTT(options: {
24
+ apiKey: string;
25
+ model?: string;
26
+ }): DeepgramSTT;
27
+ //# sourceMappingURL=deepgram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepgram.d.ts","sourceRoot":"","sources":["../../src/stt/deepgram.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,gBAAgB,EAGjB,MAAM,aAAa,CAAC;AAErB;;;;;;;;GAQG;AACH,qBAAa,WAAY,YAAW,WAAW;IAC7C,QAAQ,CAAC,IAAI,cAAc;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;IAOD,YAAY,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS;CAUpD;AAkID,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,WAAW,CAEd"}
@@ -0,0 +1,137 @@
1
+ import { WebSocket } from "ws";
2
+ import { EventEmitter } from "node:events";
3
+ /**
4
+ * DeepgramSTT — Streaming Speech-to-Text using Deepgram's WebSocket API.
5
+ *
6
+ * Deepgram is the default STT provider because:
7
+ * - Sub-300ms latency for streaming recognition
8
+ * - Excellent accuracy with Nova-2 model
9
+ * - Native WebSocket API (no HTTP polling)
10
+ * - Supports interim results for real-time feedback
11
+ */
12
+ export class DeepgramSTT {
13
+ name = "deepgram";
14
+ apiKey;
15
+ model;
16
+ baseUrl;
17
+ constructor(options) {
18
+ this.apiKey = options.apiKey;
19
+ this.model = options.model ?? "nova-2";
20
+ this.baseUrl =
21
+ options.baseUrl ?? "wss://api.deepgram.com/v1/listen";
22
+ }
23
+ createStream(options) {
24
+ return new DeepgramSTTStream({
25
+ apiKey: this.apiKey,
26
+ model: this.model,
27
+ baseUrl: this.baseUrl,
28
+ language: options?.language ?? "en-US",
29
+ interimResults: options?.interimResults ?? true,
30
+ keywords: options?.keywords,
31
+ });
32
+ }
33
+ }
34
+ class DeepgramSTTStream extends EventEmitter {
35
+ ws = null;
36
+ resultHandler = null;
37
+ config;
38
+ connected = false;
39
+ connectPromise = null;
40
+ constructor(config) {
41
+ super();
42
+ this.config = config;
43
+ this.connectPromise = this.connect();
44
+ }
45
+ async connect() {
46
+ const params = new URLSearchParams({
47
+ model: this.config.model,
48
+ language: this.config.language,
49
+ interim_results: String(this.config.interimResults),
50
+ punctuate: "true",
51
+ encoding: "linear16",
52
+ sample_rate: "16000",
53
+ channels: "1",
54
+ });
55
+ if (this.config.keywords?.length) {
56
+ for (const kw of this.config.keywords) {
57
+ params.append("keywords", kw);
58
+ }
59
+ }
60
+ const url = `${this.config.baseUrl}?${params.toString()}`;
61
+ return new Promise((resolve, reject) => {
62
+ this.ws = new WebSocket(url, {
63
+ headers: {
64
+ Authorization: `Token ${this.config.apiKey}`,
65
+ },
66
+ });
67
+ this.ws.on("open", () => {
68
+ this.connected = true;
69
+ resolve();
70
+ });
71
+ this.ws.on("message", (data) => {
72
+ try {
73
+ const response = JSON.parse(data.toString());
74
+ this.handleResponse(response);
75
+ }
76
+ catch {
77
+ // Ignore non-JSON messages
78
+ }
79
+ });
80
+ this.ws.on("error", (error) => {
81
+ console.error("[STT/Deepgram] WebSocket error:", error.message);
82
+ if (!this.connected) {
83
+ reject(error);
84
+ }
85
+ });
86
+ this.ws.on("close", () => {
87
+ this.connected = false;
88
+ });
89
+ });
90
+ }
91
+ write(chunk) {
92
+ if (this.ws && this.connected && this.ws.readyState === WebSocket.OPEN) {
93
+ this.ws.send(chunk.data);
94
+ }
95
+ }
96
+ onResult(handler) {
97
+ this.resultHandler = handler;
98
+ }
99
+ async close() {
100
+ if (this.ws) {
101
+ // Send close message per Deepgram protocol
102
+ if (this.ws.readyState === WebSocket.OPEN) {
103
+ this.ws.send(JSON.stringify({ type: "CloseStream" }));
104
+ }
105
+ this.ws.close();
106
+ this.ws = null;
107
+ }
108
+ this.connected = false;
109
+ }
110
+ handleResponse(response) {
111
+ // Deepgram response format
112
+ if (response.type === "Results") {
113
+ const channel = response.channel;
114
+ if (!channel?.alternatives?.length)
115
+ return;
116
+ const alt = channel.alternatives[0];
117
+ const result = {
118
+ text: alt.transcript ?? "",
119
+ isFinal: response.is_final ?? false,
120
+ confidence: alt.confidence ?? 0,
121
+ words: alt.words?.map((w) => ({
122
+ word: w.word,
123
+ startMs: Math.round(w.start * 1000),
124
+ endMs: Math.round(w.end * 1000),
125
+ })),
126
+ };
127
+ // Only emit non-empty results
128
+ if (result.text.trim()) {
129
+ this.resultHandler?.(result);
130
+ }
131
+ }
132
+ }
133
+ }
134
+ export function createDeepgramSTT(options) {
135
+ return new DeepgramSTT(options);
136
+ }
137
+ //# sourceMappingURL=deepgram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepgram.js","sourceRoot":"","sources":["../../src/stt/deepgram.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { DeepgramSTT, createDeepgramSTT } from "./deepgram.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stt/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { DeepgramSTT, createDeepgramSTT } from "./deepgram.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stt/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ToolRegistry, defineTool, createToolRegistry } from "./registry.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ToolRegistry, defineTool, createToolRegistry } from "./registry.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { AgentTool, ToolExecutor } from "../types.js";
2
+ /**
3
+ * ToolRegistry — Manages tool registration and execution.
4
+ *
5
+ * Tools are external capabilities the agent can invoke during a call
6
+ * (e.g., booking appointments, looking up orders, transferring calls).
7
+ */
8
+ export declare class ToolRegistry implements ToolExecutor {
9
+ private tools;
10
+ /** Register a tool */
11
+ register(tool: AgentTool): void;
12
+ /** Register multiple tools at once */
13
+ registerAll(tools: AgentTool[]): void;
14
+ /** Call a registered tool by name */
15
+ call(toolName: string, params?: Record<string, unknown>): Promise<unknown>;
16
+ /** List all registered tools */
17
+ list(): AgentTool[];
18
+ /** Check if a tool is registered */
19
+ has(toolName: string): boolean;
20
+ /** Get a tool's schema (for LLM function calling) */
21
+ getSchema(toolName: string): {
22
+ name: string;
23
+ description: string;
24
+ parameters: Record<string, unknown>;
25
+ } | undefined;
26
+ /** Get all tool schemas (for LLM function calling) */
27
+ getAllSchemas(): Array<{
28
+ name: string;
29
+ description: string;
30
+ parameters: Record<string, unknown>;
31
+ }>;
32
+ }
33
+ /**
34
+ * Helper to define a tool with type safety.
35
+ */
36
+ export declare function defineTool(tool: AgentTool): AgentTool;
37
+ export declare function createToolRegistry(tools?: AgentTool[]): ToolRegistry;
38
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3D;;;;;GAKG;AACH,qBAAa,YAAa,YAAW,YAAY;IAC/C,OAAO,CAAC,KAAK,CAAqC;IAElD,sBAAsB;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAO/B,sCAAsC;IACtC,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI;IAMrC,qCAAqC;IAC/B,IAAI,CACR,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,OAAO,CAAC;IAkBnB,gCAAgC;IAChC,IAAI,IAAI,SAAS,EAAE;IAInB,oCAAoC;IACpC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9B,qDAAqD;IACrD,SAAS,CACP,QAAQ,EAAE,MAAM,GACf;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,SAAS;IAUzF,sDAAsD;IACtD,aAAa,IAAI,KAAK,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC;CAOH;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAErD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,YAAY,CAMpE"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * ToolRegistry — Manages tool registration and execution.
3
+ *
4
+ * Tools are external capabilities the agent can invoke during a call
5
+ * (e.g., booking appointments, looking up orders, transferring calls).
6
+ */
7
+ export class ToolRegistry {
8
+ tools = new Map();
9
+ /** Register a tool */
10
+ register(tool) {
11
+ if (this.tools.has(tool.name)) {
12
+ throw new Error(`Tool "${tool.name}" is already registered`);
13
+ }
14
+ this.tools.set(tool.name, tool);
15
+ }
16
+ /** Register multiple tools at once */
17
+ registerAll(tools) {
18
+ for (const tool of tools) {
19
+ this.register(tool);
20
+ }
21
+ }
22
+ /** Call a registered tool by name */
23
+ async call(toolName, params) {
24
+ const tool = this.tools.get(toolName);
25
+ if (!tool) {
26
+ throw new Error(`Tool "${toolName}" not found. Available: ${[...this.tools.keys()].join(", ")}`);
27
+ }
28
+ try {
29
+ const result = await tool.execute(params ?? {});
30
+ return result;
31
+ }
32
+ catch (error) {
33
+ throw new Error(`Tool "${toolName}" execution failed: ${error instanceof Error ? error.message : String(error)}`);
34
+ }
35
+ }
36
+ /** List all registered tools */
37
+ list() {
38
+ return [...this.tools.values()];
39
+ }
40
+ /** Check if a tool is registered */
41
+ has(toolName) {
42
+ return this.tools.has(toolName);
43
+ }
44
+ /** Get a tool's schema (for LLM function calling) */
45
+ getSchema(toolName) {
46
+ const tool = this.tools.get(toolName);
47
+ if (!tool)
48
+ return undefined;
49
+ return {
50
+ name: tool.name,
51
+ description: tool.description,
52
+ parameters: tool.parameters,
53
+ };
54
+ }
55
+ /** Get all tool schemas (for LLM function calling) */
56
+ getAllSchemas() {
57
+ return this.list().map((t) => ({
58
+ name: t.name,
59
+ description: t.description,
60
+ parameters: t.parameters,
61
+ }));
62
+ }
63
+ }
64
+ /**
65
+ * Helper to define a tool with type safety.
66
+ */
67
+ export function defineTool(tool) {
68
+ return tool;
69
+ }
70
+ export function createToolRegistry(tools) {
71
+ const registry = new ToolRegistry();
72
+ if (tools) {
73
+ registry.registerAll(tools);
74
+ }
75
+ return registry;
76
+ }
77
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,OAAO,YAAY;IACf,KAAK,GAA2B,IAAI,GAAG,EAAE,CAAC;IAElD,sBAAsB;IACtB,QAAQ,CAAC,IAAe;QACtB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,yBAAyB,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,sCAAsC;IACtC,WAAW,CAAC,KAAkB;QAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,IAAI,CACR,QAAgB,EAChB,MAAgC;QAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,SAAS,QAAQ,2BAA2B,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YAChD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,SAAS,QAAQ,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACjG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,oCAAoC;IACpC,GAAG,CAAC,QAAgB;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,qDAAqD;IACrD,SAAS,CACP,QAAgB;QAEhB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC;IACJ,CAAC;IAED,sDAAsD;IACtD,aAAa;QAKX,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB,CAAC,CAAC,CAAC;IACN,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAe;IACxC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IACpD,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,IAAI,KAAK,EAAE,CAAC;QACV,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { WebSocketTransport, createWebSocketTransport } from "./websocket.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { WebSocketTransport, createWebSocketTransport } from "./websocket.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { EventEmitter } from "node:events";
2
+ import type { Transport, TransportOptions, AudioChunk, Session } from "../types.js";
3
+ /**
4
+ * WebSocketTransport — Handles real-time audio streaming over WebSocket.
5
+ *
6
+ * Protocol:
7
+ * - Client connects to ws://host:port
8
+ * - Binary frames = raw PCM audio data
9
+ * - JSON text frames = control messages (metadata, config, etc.)
10
+ *
11
+ * This is the default transport for Phase 1. WebRTC transport
12
+ * will be added in Phase 3 for lower-latency applications.
13
+ */
14
+ export declare class WebSocketTransport extends EventEmitter implements Transport {
15
+ private wss;
16
+ private sessions;
17
+ private audioHandler;
18
+ private connectHandler;
19
+ private disconnectHandler;
20
+ start(options: TransportOptions): Promise<void>;
21
+ stop(): Promise<void>;
22
+ onAudioChunk(handler: (sessionId: string, chunk: AudioChunk) => void): void;
23
+ onConnect(handler: (session: Session) => void): void;
24
+ onDisconnect(handler: (session: Session) => void): void;
25
+ sendAudio(sessionId: string, chunk: AudioChunk): Promise<void>;
26
+ /**
27
+ * Send a JSON control message to a session.
28
+ */
29
+ sendMessage(sessionId: string, message: Record<string, unknown>): Promise<void>;
30
+ /** Get active session count */
31
+ get activeSessionCount(): number;
32
+ /** Get a session by ID */
33
+ getSession(sessionId: string): Session | undefined;
34
+ private handleConnection;
35
+ private handleControlMessage;
36
+ }
37
+ export declare function createWebSocketTransport(): WebSocketTransport;
38
+ //# sourceMappingURL=websocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/transport/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,OAAO,EAER,MAAM,aAAa,CAAC;AAErB;;;;;;;;;;GAUG;AACH,qBAAa,kBAAmB,SAAQ,YAAa,YAAW,SAAS;IACvE,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,QAAQ,CACJ;IACZ,OAAO,CAAC,YAAY,CAEJ;IAChB,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,iBAAiB,CAA6C;IAEhE,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B/C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB3B,YAAY,CACV,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,KAAK,IAAI,GACtD,IAAI;IAIP,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAIpD,YAAY,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAIjD,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpE;;OAEG;IACG,WAAW,CACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC;IAShB,+BAA+B;IAC/B,IAAI,kBAAkB,IAAI,MAAM,CAE/B;IAED,0BAA0B;IAC1B,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAIlD,OAAO,CAAC,gBAAgB;IAkExB,OAAO,CAAC,oBAAoB;CAwB7B;AAED,wBAAgB,wBAAwB,IAAI,kBAAkB,CAE7D"}
@@ -0,0 +1,180 @@
1
+ import { EventEmitter } from "node:events";
2
+ import { randomUUID } from "node:crypto";
3
+ import { WebSocketServer, WebSocket } from "ws";
4
+ /**
5
+ * WebSocketTransport — Handles real-time audio streaming over WebSocket.
6
+ *
7
+ * Protocol:
8
+ * - Client connects to ws://host:port
9
+ * - Binary frames = raw PCM audio data
10
+ * - JSON text frames = control messages (metadata, config, etc.)
11
+ *
12
+ * This is the default transport for Phase 1. WebRTC transport
13
+ * will be added in Phase 3 for lower-latency applications.
14
+ */
15
+ export class WebSocketTransport extends EventEmitter {
16
+ wss = null;
17
+ sessions = new Map();
18
+ audioHandler = null;
19
+ connectHandler = null;
20
+ disconnectHandler = null;
21
+ async start(options) {
22
+ return new Promise((resolve, reject) => {
23
+ try {
24
+ this.wss = new WebSocketServer({
25
+ port: options.port,
26
+ host: options.host ?? "0.0.0.0",
27
+ });
28
+ this.wss.on("connection", (ws, req) => {
29
+ this.handleConnection(ws, req);
30
+ });
31
+ this.wss.on("listening", () => {
32
+ console.log(`[Transport] WebSocket server listening on ${options.host ?? "0.0.0.0"}:${options.port}`);
33
+ resolve();
34
+ });
35
+ this.wss.on("error", (error) => {
36
+ reject(error);
37
+ });
38
+ }
39
+ catch (error) {
40
+ reject(error);
41
+ }
42
+ });
43
+ }
44
+ async stop() {
45
+ // Close all active sessions
46
+ for (const [sessionId, { ws, session }] of this.sessions) {
47
+ session.state = "ended";
48
+ ws.close();
49
+ this.disconnectHandler?.(session);
50
+ }
51
+ this.sessions.clear();
52
+ // Shut down the server
53
+ return new Promise((resolve) => {
54
+ if (this.wss) {
55
+ this.wss.close(() => {
56
+ console.log("[Transport] WebSocket server stopped");
57
+ resolve();
58
+ });
59
+ }
60
+ else {
61
+ resolve();
62
+ }
63
+ });
64
+ }
65
+ onAudioChunk(handler) {
66
+ this.audioHandler = handler;
67
+ }
68
+ onConnect(handler) {
69
+ this.connectHandler = handler;
70
+ }
71
+ onDisconnect(handler) {
72
+ this.disconnectHandler = handler;
73
+ }
74
+ async sendAudio(sessionId, chunk) {
75
+ const entry = this.sessions.get(sessionId);
76
+ if (!entry) {
77
+ throw new Error(`Session "${sessionId}" not found`);
78
+ }
79
+ if (entry.ws.readyState === WebSocket.OPEN) {
80
+ entry.ws.send(chunk.data);
81
+ }
82
+ }
83
+ /**
84
+ * Send a JSON control message to a session.
85
+ */
86
+ async sendMessage(sessionId, message) {
87
+ const entry = this.sessions.get(sessionId);
88
+ if (!entry)
89
+ return;
90
+ if (entry.ws.readyState === WebSocket.OPEN) {
91
+ entry.ws.send(JSON.stringify(message));
92
+ }
93
+ }
94
+ /** Get active session count */
95
+ get activeSessionCount() {
96
+ return this.sessions.size;
97
+ }
98
+ /** Get a session by ID */
99
+ getSession(sessionId) {
100
+ return this.sessions.get(sessionId)?.session;
101
+ }
102
+ handleConnection(ws, req) {
103
+ const sessionId = randomUUID();
104
+ const session = {
105
+ id: sessionId,
106
+ startedAt: new Date(),
107
+ metadata: {
108
+ remoteAddress: req.socket.remoteAddress,
109
+ headers: req.headers,
110
+ },
111
+ state: "active",
112
+ };
113
+ this.sessions.set(sessionId, { ws, session });
114
+ console.log(`[Transport] New session: ${sessionId}`);
115
+ // Notify connection handler
116
+ this.connectHandler?.(session);
117
+ // Send session info to the client
118
+ ws.send(JSON.stringify({
119
+ type: "session.created",
120
+ sessionId,
121
+ timestamp: Date.now(),
122
+ }));
123
+ const sessionStartTime = Date.now();
124
+ ws.on("message", (data, isBinary) => {
125
+ if (isBinary) {
126
+ // Binary = audio data
127
+ const chunk = {
128
+ data: Buffer.from(data),
129
+ sampleRate: 16000,
130
+ channels: 1,
131
+ bitDepth: 16,
132
+ timestampMs: Date.now() - sessionStartTime,
133
+ };
134
+ this.audioHandler?.(sessionId, chunk);
135
+ }
136
+ else {
137
+ // Text = control message
138
+ try {
139
+ const message = JSON.parse(data.toString());
140
+ this.handleControlMessage(sessionId, message);
141
+ }
142
+ catch {
143
+ console.warn(`[Transport] Invalid control message from ${sessionId}`);
144
+ }
145
+ }
146
+ });
147
+ ws.on("close", () => {
148
+ console.log(`[Transport] Session ended: ${sessionId}`);
149
+ session.state = "ended";
150
+ this.disconnectHandler?.(session);
151
+ this.sessions.delete(sessionId);
152
+ });
153
+ ws.on("error", (error) => {
154
+ console.error(`[Transport] Session error (${sessionId}):`, error.message);
155
+ });
156
+ }
157
+ handleControlMessage(sessionId, message) {
158
+ const entry = this.sessions.get(sessionId);
159
+ if (!entry)
160
+ return;
161
+ switch (message.type) {
162
+ case "session.update":
163
+ // Client can update session metadata
164
+ if (message.metadata && typeof message.metadata === "object") {
165
+ Object.assign(entry.session.metadata, message.metadata);
166
+ }
167
+ break;
168
+ case "audio.config":
169
+ // Client specifying audio format (future: handle format conversion)
170
+ this.emit("audioConfig", sessionId, message);
171
+ break;
172
+ default:
173
+ this.emit("controlMessage", sessionId, message);
174
+ }
175
+ }
176
+ }
177
+ export function createWebSocketTransport() {
178
+ return new WebSocketTransport();
179
+ }
180
+ //# sourceMappingURL=websocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/transport/websocket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { TTSProvider, TTSOptions, AudioChunk } from "../types.js";
2
+ /**
3
+ * ElevenLabsTTS — Streaming Text-to-Speech using ElevenLabs' API.
4
+ *
5
+ * Uses the streaming endpoint for chunk-by-chunk audio delivery,
6
+ * so the agent can start speaking before the full response is generated.
7
+ */
8
+ export declare class ElevenLabsTTS implements TTSProvider {
9
+ readonly name = "elevenlabs";
10
+ private readonly apiKey;
11
+ private readonly defaultVoice;
12
+ private readonly baseUrl;
13
+ private readonly modelId;
14
+ constructor(options: {
15
+ apiKey: string;
16
+ voice?: string;
17
+ modelId?: string;
18
+ baseUrl?: string;
19
+ });
20
+ synthesize(text: string, options?: TTSOptions): AsyncIterable<AudioChunk>;
21
+ }
22
+ export declare function createElevenLabsTTS(options: {
23
+ apiKey: string;
24
+ voice?: string;
25
+ modelId?: string;
26
+ }): ElevenLabsTTS;
27
+ //# sourceMappingURL=eleven-labs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eleven-labs.d.ts","sourceRoot":"","sources":["../../src/tts/eleven-labs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEvE;;;;;GAKG;AACH,qBAAa,aAAc,YAAW,WAAW;IAC/C,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;IAOM,UAAU,CACf,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,UAAU,GACnB,aAAa,CAAC,UAAU,CAAC;CA6D7B;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,aAAa,CAEhB"}