@ariaflowagents/core 0.8.1 → 0.9.1

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 (142) hide show
  1. package/dist/capabilities/AutoRetrieveCapability.d.ts +30 -0
  2. package/dist/capabilities/AutoRetrieveCapability.d.ts.map +1 -0
  3. package/dist/capabilities/AutoRetrieveCapability.js +36 -0
  4. package/dist/capabilities/AutoRetrieveCapability.js.map +1 -0
  5. package/dist/capabilities/ExtractionCapability.d.ts +25 -0
  6. package/dist/capabilities/ExtractionCapability.d.ts.map +1 -0
  7. package/dist/capabilities/ExtractionCapability.js +74 -0
  8. package/dist/capabilities/ExtractionCapability.js.map +1 -0
  9. package/dist/capabilities/FlowCapability.d.ts +81 -0
  10. package/dist/capabilities/FlowCapability.d.ts.map +1 -0
  11. package/dist/capabilities/FlowCapability.js +482 -0
  12. package/dist/capabilities/FlowCapability.js.map +1 -0
  13. package/dist/capabilities/GuardrailCapability.d.ts +30 -0
  14. package/dist/capabilities/GuardrailCapability.d.ts.map +1 -0
  15. package/dist/capabilities/GuardrailCapability.js +38 -0
  16. package/dist/capabilities/GuardrailCapability.js.map +1 -0
  17. package/dist/capabilities/HandoffCapability.d.ts +19 -0
  18. package/dist/capabilities/HandoffCapability.d.ts.map +1 -0
  19. package/dist/capabilities/HandoffCapability.js +58 -0
  20. package/dist/capabilities/HandoffCapability.js.map +1 -0
  21. package/dist/capabilities/LivePromptAssembler.d.ts +108 -0
  22. package/dist/capabilities/LivePromptAssembler.d.ts.map +1 -0
  23. package/dist/capabilities/LivePromptAssembler.js +157 -0
  24. package/dist/capabilities/LivePromptAssembler.js.map +1 -0
  25. package/dist/capabilities/TriageCapability.d.ts +16 -0
  26. package/dist/capabilities/TriageCapability.d.ts.map +1 -0
  27. package/dist/capabilities/TriageCapability.js +61 -0
  28. package/dist/capabilities/TriageCapability.js.map +1 -0
  29. package/dist/capabilities/adapters/ai-sdk.d.ts +14 -0
  30. package/dist/capabilities/adapters/ai-sdk.d.ts.map +1 -0
  31. package/dist/capabilities/adapters/ai-sdk.js +29 -0
  32. package/dist/capabilities/adapters/ai-sdk.js.map +1 -0
  33. package/dist/capabilities/adapters/gemini.d.ts +15 -0
  34. package/dist/capabilities/adapters/gemini.d.ts.map +1 -0
  35. package/dist/capabilities/adapters/gemini.js +40 -0
  36. package/dist/capabilities/adapters/gemini.js.map +1 -0
  37. package/dist/capabilities/index.d.ts +154 -0
  38. package/dist/capabilities/index.d.ts.map +1 -0
  39. package/dist/capabilities/index.js +128 -0
  40. package/dist/capabilities/index.js.map +1 -0
  41. package/dist/eval/EvalRunner.d.ts +12 -0
  42. package/dist/eval/EvalRunner.d.ts.map +1 -0
  43. package/dist/eval/EvalRunner.js +64 -0
  44. package/dist/eval/EvalRunner.js.map +1 -0
  45. package/dist/eval/scoring.d.ts +15 -0
  46. package/dist/eval/scoring.d.ts.map +1 -0
  47. package/dist/eval/scoring.js +152 -0
  48. package/dist/eval/scoring.js.map +1 -0
  49. package/dist/eval/types.d.ts +59 -0
  50. package/dist/eval/types.d.ts.map +1 -0
  51. package/dist/eval/types.js +2 -0
  52. package/dist/eval/types.js.map +1 -0
  53. package/dist/flows/FlowGraph.d.ts +3 -1
  54. package/dist/flows/FlowGraph.d.ts.map +1 -1
  55. package/dist/flows/FlowGraph.js +5 -0
  56. package/dist/flows/FlowGraph.js.map +1 -1
  57. package/dist/flows/FlowManager.d.ts +60 -1
  58. package/dist/flows/FlowManager.d.ts.map +1 -1
  59. package/dist/flows/FlowManager.js +467 -34
  60. package/dist/flows/FlowManager.js.map +1 -1
  61. package/dist/flows/extraction.d.ts +16 -1
  62. package/dist/flows/extraction.d.ts.map +1 -1
  63. package/dist/flows/extraction.js +34 -0
  64. package/dist/flows/extraction.js.map +1 -1
  65. package/dist/flows/index.d.ts +2 -0
  66. package/dist/flows/index.d.ts.map +1 -1
  67. package/dist/flows/index.js +1 -0
  68. package/dist/flows/index.js.map +1 -1
  69. package/dist/flows/validation.d.ts +1 -1
  70. package/dist/flows/validation.d.ts.map +1 -1
  71. package/dist/flows/validation.js +13 -1
  72. package/dist/flows/validation.js.map +1 -1
  73. package/dist/hooks/HookRunner.d.ts +3 -1
  74. package/dist/hooks/HookRunner.d.ts.map +1 -1
  75. package/dist/hooks/HookRunner.js +3 -0
  76. package/dist/hooks/HookRunner.js.map +1 -1
  77. package/dist/hooks/builtin/metrics.d.ts.map +1 -1
  78. package/dist/hooks/builtin/metrics.js +12 -0
  79. package/dist/hooks/builtin/metrics.js.map +1 -1
  80. package/dist/hooks/builtin/observability.d.ts +21 -0
  81. package/dist/hooks/builtin/observability.d.ts.map +1 -0
  82. package/dist/hooks/builtin/observability.js +535 -0
  83. package/dist/hooks/builtin/observability.js.map +1 -0
  84. package/dist/index.d.ts +11 -1
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +7 -1
  87. package/dist/index.js.map +1 -1
  88. package/dist/orchestration/DefaultOrchestrationAuthority.d.ts +91 -0
  89. package/dist/orchestration/DefaultOrchestrationAuthority.d.ts.map +1 -0
  90. package/dist/orchestration/DefaultOrchestrationAuthority.js +786 -0
  91. package/dist/orchestration/DefaultOrchestrationAuthority.js.map +1 -0
  92. package/dist/orchestration/OrchestrationAuthority.d.ts +119 -0
  93. package/dist/orchestration/OrchestrationAuthority.d.ts.map +1 -0
  94. package/dist/orchestration/OrchestrationAuthority.js +2 -0
  95. package/dist/orchestration/OrchestrationAuthority.js.map +1 -0
  96. package/dist/orchestration/RealtimeExtractionRunner.d.ts +25 -0
  97. package/dist/orchestration/RealtimeExtractionRunner.d.ts.map +1 -0
  98. package/dist/orchestration/RealtimeExtractionRunner.js +62 -0
  99. package/dist/orchestration/RealtimeExtractionRunner.js.map +1 -0
  100. package/dist/orchestration/index.d.ts +5 -0
  101. package/dist/orchestration/index.d.ts.map +1 -0
  102. package/dist/orchestration/index.js +4 -0
  103. package/dist/orchestration/index.js.map +1 -0
  104. package/dist/orchestration/types.d.ts +134 -0
  105. package/dist/orchestration/types.d.ts.map +1 -0
  106. package/dist/orchestration/types.js +2 -0
  107. package/dist/orchestration/types.js.map +1 -0
  108. package/dist/realtime/RealtimeAudioClient.d.ts +105 -0
  109. package/dist/realtime/RealtimeAudioClient.d.ts.map +1 -0
  110. package/dist/realtime/RealtimeAudioClient.js +15 -0
  111. package/dist/realtime/RealtimeAudioClient.js.map +1 -0
  112. package/dist/realtime/RealtimeRuntime.d.ts +136 -0
  113. package/dist/realtime/RealtimeRuntime.d.ts.map +1 -0
  114. package/dist/realtime/RealtimeRuntime.js +270 -0
  115. package/dist/realtime/RealtimeRuntime.js.map +1 -0
  116. package/dist/realtime/index.d.ts +4 -0
  117. package/dist/realtime/index.d.ts.map +1 -0
  118. package/dist/realtime/index.js +2 -0
  119. package/dist/realtime/index.js.map +1 -0
  120. package/dist/runtime/ExtractionEngine.d.ts +2 -1
  121. package/dist/runtime/ExtractionEngine.d.ts.map +1 -1
  122. package/dist/runtime/ExtractionEngine.js +11 -0
  123. package/dist/runtime/ExtractionEngine.js.map +1 -1
  124. package/dist/runtime/FlowExecutor.d.ts +7 -5
  125. package/dist/runtime/FlowExecutor.d.ts.map +1 -1
  126. package/dist/runtime/FlowExecutor.js +71 -12
  127. package/dist/runtime/FlowExecutor.js.map +1 -1
  128. package/dist/runtime/Runtime.d.ts +22 -0
  129. package/dist/runtime/Runtime.d.ts.map +1 -1
  130. package/dist/runtime/Runtime.js +47 -0
  131. package/dist/runtime/Runtime.js.map +1 -1
  132. package/dist/runtime/pipeline/AgentExecuteStage.d.ts.map +1 -1
  133. package/dist/runtime/pipeline/AgentExecuteStage.js +94 -25
  134. package/dist/runtime/pipeline/AgentExecuteStage.js.map +1 -1
  135. package/dist/runtime/pipeline/ContextAssembleStage.js +1 -1
  136. package/dist/types/index.d.ts +61 -3
  137. package/dist/types/index.d.ts.map +1 -1
  138. package/dist/types/index.js +4 -0
  139. package/dist/types/index.js.map +1 -1
  140. package/dist/types/telemetry.d.ts +107 -0
  141. package/dist/types/telemetry.d.ts.map +1 -1
  142. package/package.json +15 -2
@@ -0,0 +1,136 @@
1
+ import type { AgentConfig } from '../types/index.js';
2
+ import type { RealtimeAudioClient } from './RealtimeAudioClient.js';
3
+ import type { OrchestrationAuthority } from '../orchestration/OrchestrationAuthority.js';
4
+ /**
5
+ * Transport session abstraction for audio I/O between the end-user
6
+ * and the realtime runtime. This is the user-facing transport
7
+ * (WebSocket, SIP, WebRTC), NOT the model client.
8
+ */
9
+ export interface RealtimeTransportSession {
10
+ /** Send audio frames to the end-user client. */
11
+ sendAudio(data: Uint8Array): void;
12
+ /** Receive audio frames from the end-user client. */
13
+ onAudio(handler: (data: Uint8Array) => void): void;
14
+ /** Called when the end-user transport closes. */
15
+ onClose(handler: () => void): void;
16
+ /** Close the transport. */
17
+ close(): void;
18
+ /**
19
+ * Optional: called when the user interrupts (barge-in).
20
+ * The transport should clear any buffered outgoing audio and
21
+ * signal the client to stop playback immediately.
22
+ */
23
+ onInterrupted?(handler: () => void): void;
24
+ /**
25
+ * Optional: clear any buffered outgoing audio.
26
+ * Called by RealtimeRuntime when an interruption is detected.
27
+ */
28
+ clearAudioBuffer?(): void;
29
+ }
30
+ /**
31
+ * Configuration for constructing a RealtimeRuntime.
32
+ */
33
+ export interface RealtimeRuntimeConfig {
34
+ /** All agent configurations — same shape as text Runtime. */
35
+ agents: AgentConfig[];
36
+ /** Default agent to activate for new sessions. */
37
+ defaultAgentId: string;
38
+ /** The orchestration authority (or config to build one). */
39
+ authority: OrchestrationAuthority;
40
+ }
41
+ /**
42
+ * Parameters for starting a realtime session.
43
+ */
44
+ export interface StartRealtimeSessionParams {
45
+ /** The provider model client (Gemini, OpenAI, etc.). */
46
+ modelClient: RealtimeAudioClient;
47
+ /** The end-user transport (WebSocket, SIP, etc.). */
48
+ transport: RealtimeTransportSession;
49
+ /** Existing session ID, or undefined to create a new one. */
50
+ sessionId?: string;
51
+ /** User ID for session scoping. */
52
+ userId?: string;
53
+ /** Override the default agent. */
54
+ agentId?: string;
55
+ }
56
+ /**
57
+ * Opaque handle for a running realtime session.
58
+ * Used to stop or query a session externally.
59
+ */
60
+ export interface RealtimeSessionHandle {
61
+ /** The session ID. */
62
+ readonly sessionId: string;
63
+ /** The call/worker ID. */
64
+ readonly callId: string;
65
+ /** Stop the session. */
66
+ stop(): Promise<void>;
67
+ }
68
+ /**
69
+ * Core-owned realtime execution facade.
70
+ *
71
+ * Accepts the same AgentConfig[] as the text Runtime, composes the
72
+ * OrchestrationAuthority for transport-agnostic semantics, and runs
73
+ * an event-driven loop over a RealtimeAudioClient.
74
+ *
75
+ * This facade is provider-agnostic — it works with any RealtimeAudioClient
76
+ * (Gemini, OpenAI, fake test client). Provider-specific concerns
77
+ * (wire format, reconnect, audio encoding) stay in the client adapter.
78
+ *
79
+ * @see RFC-REALTIME-RUNTIME-AUTHORITY.md §4.3
80
+ */
81
+ export declare class RealtimeRuntime {
82
+ private readonly authority;
83
+ private readonly activeSessions;
84
+ constructor(config: RealtimeRuntimeConfig);
85
+ /**
86
+ * Start a realtime session.
87
+ *
88
+ * This is the canonical entry point for persistent realtime execution.
89
+ * It:
90
+ * 1. Opens a session through the authority
91
+ * 2. Prepares initial model config (prompt + tools)
92
+ * 3. Connects the model client
93
+ * 4. Wires the event loop (audio, transcripts, tool calls, turns)
94
+ * 5. Returns a handle for external control
95
+ */
96
+ startSession(params: StartRealtimeSessionParams): Promise<RealtimeSessionHandle>;
97
+ /**
98
+ * Stop a running session by call ID.
99
+ */
100
+ stopSession(callId: string): Promise<void>;
101
+ /**
102
+ * Stop all active sessions.
103
+ */
104
+ shutdown(): Promise<void>;
105
+ /**
106
+ * Get an active session by call ID.
107
+ */
108
+ getSession(callId: string): RealtimeSessionHandle | undefined;
109
+ /**
110
+ * Wire the event loop between transport, model client, and authority.
111
+ *
112
+ * This is the heart of the realtime runtime. It maps provider events
113
+ * to authority operations and authority outcomes to transport/model actions.
114
+ *
115
+ * The event loop matches the pseudocode in RFC-REALTIME-RUNTIME-AUTHORITY.md §5.
116
+ */
117
+ private wireEventLoop;
118
+ /**
119
+ * Handle a tool call from the model:
120
+ * 1. Execute through authority (enforcement, hooks, capability routing)
121
+ * 2. Send tool response back to model
122
+ * 3. Act on the outcome (reconfigure, handoff, end)
123
+ */
124
+ private handleToolCall;
125
+ /**
126
+ * Wait for the model to emit turn-complete after a tool response.
127
+ * This gives the model time to generate a verbal acknowledgment
128
+ * before the session reconfigures (disconnect + reconnect).
129
+ *
130
+ * Times out if the model doesn't complete within the budget —
131
+ * this prevents hanging if the model enters a tool-call loop
132
+ * or the connection drops before turn-complete fires.
133
+ */
134
+ private waitForTurnComplete;
135
+ }
136
+ //# sourceMappingURL=RealtimeRuntime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RealtimeRuntime.d.ts","sourceRoot":"","sources":["../../src/realtime/RealtimeRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAiC,MAAM,mBAAmB,CAAC;AAEpF,OAAO,KAAK,EAAE,mBAAmB,EAAyB,MAAM,0BAA0B,CAAC;AAC3F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAOzF;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,gDAAgD;IAChD,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IAClC,qDAAqD;IACrD,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;IACnD,iDAAiD;IACjD,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACnC,2BAA2B;IAC3B,KAAK,IAAI,IAAI,CAAC;IACd;;;;OAIG;IACH,aAAa,CAAC,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC1C;;;OAGG;IACH,gBAAgB,CAAC,IAAI,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,6DAA6D;IAC7D,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,kDAAkD;IAClD,cAAc,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,SAAS,EAAE,sBAAsB,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,wDAAwD;IACxD,WAAW,EAAE,mBAAmB,CAAC;IACjC,qDAAqD;IACrD,SAAS,EAAE,wBAAwB,CAAC;IACpC,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,sBAAsB;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,0BAA0B;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wBAAwB;IACxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAID;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoC;gBAEvD,MAAM,EAAE,qBAAqB;IAIzC;;;;;;;;;;OAUG;IACG,YAAY,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAuCtF;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBhD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAY7D;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;IAgFrB;;;;;OAKG;YACW,cAAc;IAwD5B;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB;CAoB5B"}
@@ -0,0 +1,270 @@
1
+ // ─── RealtimeRuntime ────────────────────────────────────────────────────────
2
+ /**
3
+ * Core-owned realtime execution facade.
4
+ *
5
+ * Accepts the same AgentConfig[] as the text Runtime, composes the
6
+ * OrchestrationAuthority for transport-agnostic semantics, and runs
7
+ * an event-driven loop over a RealtimeAudioClient.
8
+ *
9
+ * This facade is provider-agnostic — it works with any RealtimeAudioClient
10
+ * (Gemini, OpenAI, fake test client). Provider-specific concerns
11
+ * (wire format, reconnect, audio encoding) stay in the client adapter.
12
+ *
13
+ * @see RFC-REALTIME-RUNTIME-AUTHORITY.md §4.3
14
+ */
15
+ export class RealtimeRuntime {
16
+ authority;
17
+ activeSessions = new Map();
18
+ constructor(config) {
19
+ this.authority = config.authority;
20
+ }
21
+ /**
22
+ * Start a realtime session.
23
+ *
24
+ * This is the canonical entry point for persistent realtime execution.
25
+ * It:
26
+ * 1. Opens a session through the authority
27
+ * 2. Prepares initial model config (prompt + tools)
28
+ * 3. Connects the model client
29
+ * 4. Wires the event loop (audio, transcripts, tool calls, turns)
30
+ * 5. Returns a handle for external control
31
+ */
32
+ async startSession(params) {
33
+ const { modelClient, transport, sessionId, userId, agentId } = params;
34
+ // 1. Open session through authority — fires onStart + onAgentStart hooks
35
+ const handle = await this.authority.openSession({
36
+ sessionId,
37
+ userId,
38
+ agentId,
39
+ mode: 'realtime',
40
+ });
41
+ const callId = handle.session.id;
42
+ // 2. Prepare initial model config
43
+ const initialConfig = await this.authority.prepareRealtimeConfig(handle);
44
+ // 3. Track this session
45
+ const active = {
46
+ handle,
47
+ modelClient,
48
+ transport,
49
+ aborted: false,
50
+ };
51
+ this.activeSessions.set(callId, active);
52
+ // 4. Connect model client
53
+ await modelClient.connect(initialConfig);
54
+ // 5. Wire the event loop
55
+ this.wireEventLoop(active);
56
+ // 6. Return external handle
57
+ return {
58
+ sessionId: handle.session.id,
59
+ callId,
60
+ stop: () => this.stopSession(callId),
61
+ };
62
+ }
63
+ /**
64
+ * Stop a running session by call ID.
65
+ */
66
+ async stopSession(callId) {
67
+ const active = this.activeSessions.get(callId);
68
+ if (!active)
69
+ return;
70
+ active.aborted = true;
71
+ this.activeSessions.delete(callId);
72
+ // Disconnect model client
73
+ await active.modelClient.disconnect().catch(() => { });
74
+ // Close session through authority — fires lifecycle hooks, persists
75
+ await this.authority.closeSession(active.handle, { success: true });
76
+ // Close transport
77
+ try {
78
+ active.transport.close();
79
+ }
80
+ catch {
81
+ // Ignore transport close errors
82
+ }
83
+ }
84
+ /**
85
+ * Stop all active sessions.
86
+ */
87
+ async shutdown() {
88
+ const callIds = Array.from(this.activeSessions.keys());
89
+ await Promise.allSettled(callIds.map(id => this.stopSession(id)));
90
+ }
91
+ /**
92
+ * Get an active session by call ID.
93
+ */
94
+ getSession(callId) {
95
+ const active = this.activeSessions.get(callId);
96
+ if (!active)
97
+ return undefined;
98
+ return {
99
+ sessionId: active.handle.session.id,
100
+ callId,
101
+ stop: () => this.stopSession(callId),
102
+ };
103
+ }
104
+ // ─── Private: Event loop ────────────────────────────────────────────────────
105
+ /**
106
+ * Wire the event loop between transport, model client, and authority.
107
+ *
108
+ * This is the heart of the realtime runtime. It maps provider events
109
+ * to authority operations and authority outcomes to transport/model actions.
110
+ *
111
+ * The event loop matches the pseudocode in RFC-REALTIME-RUNTIME-AUTHORITY.md §5.
112
+ */
113
+ wireEventLoop(active) {
114
+ const { handle, modelClient, transport } = active;
115
+ // Transport audio → Model (user speaking)
116
+ transport.onAudio((data) => {
117
+ if (active.aborted)
118
+ return;
119
+ modelClient.sendAudio(data);
120
+ });
121
+ // Transport close → stop session
122
+ transport.onClose(() => {
123
+ this.stopSession(handle.session.id).catch((err) => {
124
+ console.error('[RealtimeRuntime] Error stopping session on transport close:', err);
125
+ });
126
+ });
127
+ // Model audio → Transport (assistant speaking)
128
+ modelClient.on('audio', (data) => {
129
+ if (active.aborted)
130
+ return;
131
+ transport.sendAudio(data);
132
+ });
133
+ // Model transcripts → Authority (record in session)
134
+ modelClient.on('transcript', (text, role) => {
135
+ if (active.aborted)
136
+ return;
137
+ if (role === 'user') {
138
+ this.authority.recordUserInput(handle, text).catch((err) => {
139
+ console.error('[RealtimeRuntime] Error recording user input:', err);
140
+ });
141
+ }
142
+ else {
143
+ this.authority.recordAssistantOutput(handle, text).catch((err) => {
144
+ console.error('[RealtimeRuntime] Error recording assistant output:', err);
145
+ });
146
+ }
147
+ });
148
+ // Model tool calls → Authority (execute + route + respond)
149
+ modelClient.on('tool-call', (id, name, args) => {
150
+ if (active.aborted)
151
+ return;
152
+ this.handleToolCall(active, id, name, args).catch((err) => {
153
+ console.error(`[RealtimeRuntime] Tool call error for ${name}:`, err);
154
+ });
155
+ });
156
+ // Model interrupted → clear transport buffer (barge-in)
157
+ modelClient.on('interrupted', () => {
158
+ if (active.aborted)
159
+ return;
160
+ console.log('[RealtimeRuntime] Barge-in detected — clearing audio buffer');
161
+ transport.clearAudioBuffer?.();
162
+ });
163
+ // Model turn complete → Authority (extraction, persistence, memory)
164
+ modelClient.on('turn-complete', () => {
165
+ if (active.aborted)
166
+ return;
167
+ this.authority.completeTurn(handle).catch((err) => {
168
+ console.error('[RealtimeRuntime] Error completing turn:', err);
169
+ });
170
+ });
171
+ // Model error → Authority (fail session)
172
+ modelClient.on('error', (error) => {
173
+ if (active.aborted)
174
+ return;
175
+ console.error(`[RealtimeRuntime] Model error: ${error}`);
176
+ this.authority.failSession(handle, new Error(error)).then(() => {
177
+ this.activeSessions.delete(handle.session.id);
178
+ try {
179
+ transport.close();
180
+ }
181
+ catch { /* ignore */ }
182
+ }).catch((err) => {
183
+ console.error('[RealtimeRuntime] Error failing session:', err);
184
+ });
185
+ });
186
+ // Model disconnected → stop session
187
+ modelClient.on('disconnected', () => {
188
+ if (active.aborted)
189
+ return;
190
+ this.stopSession(handle.session.id).catch((err) => {
191
+ console.error('[RealtimeRuntime] Error stopping session on disconnect:', err);
192
+ });
193
+ });
194
+ }
195
+ /**
196
+ * Handle a tool call from the model:
197
+ * 1. Execute through authority (enforcement, hooks, capability routing)
198
+ * 2. Send tool response back to model
199
+ * 3. Act on the outcome (reconfigure, handoff, end)
200
+ */
201
+ async handleToolCall(active, id, name, args) {
202
+ const { handle, modelClient } = active;
203
+ // Execute through authority — fires hooks, routes through CapabilityHost
204
+ const outcome = await this.authority.executeToolCall(handle, { id, name, args });
205
+ // Send tool response to model
206
+ modelClient.sendToolResponse([outcome.toolResponse]);
207
+ // Act on the outcome
208
+ switch (outcome.action.type) {
209
+ case 'reconfigure': {
210
+ // Flow transitioned — let the model finish responding to the tool
211
+ // result before reconfiguring. Without this, the model's acknowledgment
212
+ // (e.g., "I found your order") is lost in the reconnect.
213
+ if (outcome.nextRealtimeConfig) {
214
+ await this.waitForTurnComplete(modelClient, 10000);
215
+ await modelClient.updateConfig(outcome.nextRealtimeConfig);
216
+ }
217
+ if (modelClient.requestResponse) {
218
+ const transitionCtx = outcome.action.transition;
219
+ const instruction = transitionCtx
220
+ ? `You just transitioned to the "${transitionCtx.to}" phase. Continue with the new task using the available tools.`
221
+ : 'Continue with the current task.';
222
+ modelClient.requestResponse(instruction);
223
+ }
224
+ break;
225
+ }
226
+ case 'handoff': {
227
+ // Agent handoff — stop this session
228
+ // The caller (VoiceEngine) is responsible for starting a new session
229
+ // with the target agent.
230
+ await this.stopSession(handle.session.id);
231
+ break;
232
+ }
233
+ case 'end': {
234
+ // Flow or conversation ended — stop session
235
+ await this.stopSession(handle.session.id);
236
+ break;
237
+ }
238
+ case 'continue':
239
+ case 'extraction-complete':
240
+ default:
241
+ // Regular tool result — model drives the next response
242
+ break;
243
+ }
244
+ }
245
+ /**
246
+ * Wait for the model to emit turn-complete after a tool response.
247
+ * This gives the model time to generate a verbal acknowledgment
248
+ * before the session reconfigures (disconnect + reconnect).
249
+ *
250
+ * Times out if the model doesn't complete within the budget —
251
+ * this prevents hanging if the model enters a tool-call loop
252
+ * or the connection drops before turn-complete fires.
253
+ */
254
+ waitForTurnComplete(modelClient, timeoutMs) {
255
+ return new Promise((resolve) => {
256
+ const timer = setTimeout(() => {
257
+ modelClient.off('turn-complete', handler);
258
+ console.warn('[RealtimeRuntime] turn-complete timeout before reconfigure — proceeding');
259
+ resolve();
260
+ }, timeoutMs);
261
+ const handler = () => {
262
+ clearTimeout(timer);
263
+ modelClient.off('turn-complete', handler);
264
+ resolve();
265
+ };
266
+ modelClient.on('turn-complete', handler);
267
+ });
268
+ }
269
+ }
270
+ //# sourceMappingURL=RealtimeRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RealtimeRuntime.js","sourceRoot":"","sources":["../../src/realtime/RealtimeRuntime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export type { RealtimeAudioClient, RealtimeSessionConfig, RealtimeAudioConfig, RealtimeToolResponse, RealtimeEventMap, } from './RealtimeAudioClient.js';
2
+ export { RealtimeRuntime } from './RealtimeRuntime.js';
3
+ export type { RealtimeRuntimeConfig, RealtimeTransportSession, StartRealtimeSessionParams, RealtimeSessionHandle, } from './RealtimeRuntime.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { RealtimeRuntime } from './RealtimeRuntime.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { AgentConfig, ExtractionConfig, FlowAgentConfig, ExtractionSnapshot, Session, FlowManagerState, RunContext, HarnessConfig } from '../types/index.js';
1
+ import { type AgentConfig, type ExtractionConfig, type FlowAgentConfig, type ExtractionSnapshot, type Session, type FlowManagerState, type RunContext, type HarnessConfig } from '../types/index.js';
2
2
  export interface ExtractionEngineOptions {
3
3
  defaultModel?: HarnessConfig['defaultModel'];
4
4
  telemetry?: HarnessConfig['telemetry'];
@@ -29,6 +29,7 @@ export declare class ExtractionEngine {
29
29
  getFlowNode: (agent: FlowAgentConfig, nodeId?: string) => FlowAgentConfig['flow']['nodes'][number] | undefined;
30
30
  isFlowAgent: (agent: AgentConfig) => agent is FlowAgentConfig;
31
31
  touchSession: (session: Session) => void;
32
+ emitMetric?: (name: string, data: Record<string, unknown>) => void;
32
33
  }, abortSignal?: AbortSignal): Promise<ExtractionSnapshot | null>;
33
34
  }
34
35
  //# sourceMappingURL=ExtractionEngine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExtractionEngine.d.ts","sourceRoot":"","sources":["../../src/runtime/ExtractionEngine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,OAAO,EACP,gBAAgB,EAChB,UAAU,EACV,aAAa,EAChB,MAAM,mBAAmB,CAAC;AAG3B,MAAM,WAAW,uBAAuB;IACpC,YAAY,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;CAC1C;AAED,qBAAa,gBAAgB;IACb,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,uBAAuB;IAEpD,mBAAmB,CACf,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;QACL,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,gBAAgB,GAAG,SAAS,CAAC;QAClF,WAAW,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;QAC/G,WAAW,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,KAAK,IAAI,eAAe,CAAC;KACjE,GACF;QAAE,MAAM,EAAE,gBAAgB,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAmBvD,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,gBAAgB;IAOxB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAqBtF,uBAAuB,CACnB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,kBAAkB,EAC5B,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GACzC,IAAI;IAWP,4BAA4B,CACxB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE;QACL,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,gBAAgB,GAAG,SAAS,CAAC;QAClF,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;KACtF,GACF,IAAI;IA4BP,0BAA0B,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM;IAmB1D,iBAAiB,CACnB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;QACL,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,gBAAgB,GAAG,SAAS,CAAC;QAClF,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;QACnF,WAAW,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;QAC/G,WAAW,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,KAAK,IAAI,eAAe,CAAC;QAC9D,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KAC5C,EACD,WAAW,CAAC,EAAE,WAAW,GAC1B,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;CAmDxC"}
1
+ {"version":3,"file":"ExtractionEngine.d.ts","sourceRoot":"","sources":["../../src/runtime/ExtractionEngine.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { isExtractionNode, } from '../types/index.js';
1
2
  import { extractStructuredFields, mergeExtractionData, computeMissingFields } from '../flows/extraction.js';
2
3
  export class ExtractionEngine {
3
4
  options;
@@ -9,6 +10,10 @@ export class ExtractionEngine {
9
10
  const flowState = helpers.getFlowState(session, agent.id);
10
11
  const nodeId = flowState?.context.currentNode ?? agent.initialNode;
11
12
  const node = helpers.getFlowNode(agent, nodeId);
13
+ // Skip extraction for ExtractionNodes -- they handle their own extraction loop
14
+ if (node && isExtractionNode(node)) {
15
+ return null;
16
+ }
12
17
  const config = node?.extraction ?? agent.extraction;
13
18
  if (!config) {
14
19
  return null;
@@ -108,6 +113,7 @@ ${missingBlock}
108
113
  - If fields are missing, ask only for missing fields.`;
109
114
  }
110
115
  async runTurnExtraction(agent, context, input, helpers, abortSignal) {
116
+ const extractionStart = Date.now();
111
117
  const extracted = this.getExtractionConfig(agent, context.session, helpers);
112
118
  if (!extracted) {
113
119
  return null;
@@ -135,6 +141,11 @@ ${missingBlock}
135
141
  catch {
136
142
  mergedData = baseData;
137
143
  }
144
+ helpers.emitMetric?.('flow.extraction.duration', {
145
+ durationMs: Date.now() - extractionStart,
146
+ agentId: agent.id,
147
+ nodeId: nodeId ?? '__agent__',
148
+ });
138
149
  const required = config.requiredFields ?? [];
139
150
  const missingFields = computeMissingFields(mergedData, required);
140
151
  const snapshot = {
@@ -1 +1 @@
1
- {"version":3,"file":"ExtractionEngine.js","sourceRoot":"","sources":["../../src/runtime/ExtractionEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ExtractionEngine.js","sourceRoot":"","sources":["../../src/runtime/ExtractionEngine.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
- import { type ModelMessage } from 'ai';
1
+ import { type ModelMessage, type ToolSet } from 'ai';
2
2
  import type { FlowAgentConfig, AgentConfig, RunContext, HarnessStreamPart, FlowManagerState, ToolCallRecord, HarnessConfig, Session, OutputProcessor } from '../types/index.js';
3
- import { createHandoffTool } from '../tools/handoff.js';
4
3
  export interface FlowExecutorHelpers {
5
4
  emit: (context: RunContext, part: HarnessStreamPart) => AsyncGenerator<HarnessStreamPart>;
6
5
  runOutputProcessing: (agent: AgentConfig, context: RunContext, text: string) => Promise<{
@@ -25,7 +24,7 @@ export interface FlowExecutorHelpers {
25
24
  getFlowState: (session: Session, agentId: string) => FlowManagerState | undefined;
26
25
  updateFlowStateSnapshot: (session: Session, agentId: string, state: FlowManagerState) => void;
27
26
  clearFlowState: (session: Session, agentId: string) => void;
28
- buildFlowWithHandoff: (agent: FlowAgentConfig, handoffTool: ReturnType<typeof createHandoffTool> | undefined, suppressAutoRespond: boolean) => FlowAgentConfig['flow'];
27
+ buildFlowWithHandoff: (agent: FlowAgentConfig, handoffTool: ToolSet[string] | undefined, suppressAutoRespond: boolean) => FlowAgentConfig['flow'];
29
28
  getFlowNode: (agent: FlowAgentConfig, nodeId?: string) => FlowAgentConfig['flow']['nodes'][number] | undefined;
30
29
  touchSession: (session: Session) => void;
31
30
  matchesDetourRule: (input: string, patterns?: string[]) => boolean;
@@ -40,13 +39,16 @@ export interface FlowExecutorHelpers {
40
39
  onToolCallHook: (context: RunContext, call: ToolCallRecord) => Promise<void>;
41
40
  onToolResultHook: (context: RunContext, call: ToolCallRecord) => Promise<void>;
42
41
  onToolErrorHook: (context: RunContext, call: ToolCallRecord, error: Error) => Promise<void>;
42
+ /** Optional metrics emitter for flow-level timing/counters. Converts to custom stream events. */
43
+ emitMetric?: (name: string, data: Record<string, unknown>) => void;
43
44
  }
44
45
  export declare class FlowExecutor {
45
46
  private config;
46
47
  constructor(config: HarnessConfig);
47
48
  shouldHandleFlowInput(agent: FlowAgentConfig, input: string, flowState: FlowManagerState | undefined, helpers: FlowExecutorHelpers, abortSignal?: AbortSignal): Promise<boolean>;
48
- runDetourResponse(agent: FlowAgentConfig, context: RunContext, input: string, flowState: FlowManagerState | undefined, handoffTool: ReturnType<typeof createHandoffTool> | undefined, onHandoff: (target: string, reason?: string) => void, helpers: FlowExecutorHelpers, abortSignal?: AbortSignal): AsyncGenerator<HarnessStreamPart>;
49
- runFlowAgent(agent: FlowAgentConfig, context: RunContext, input: string, systemPrompt: string, handoffTool: ReturnType<typeof createHandoffTool> | undefined, onHandoff: (target: string, reason?: string) => void, toolCalls: ToolCallRecord[], helpers: FlowExecutorHelpers, abortSignal?: AbortSignal): AsyncGenerator<HarnessStreamPart>;
49
+ private emitRoutingMetric;
50
+ runDetourResponse(agent: FlowAgentConfig, context: RunContext, input: string, flowState: FlowManagerState | undefined, handoffTool: ToolSet[string] | undefined, onHandoff: (target: string, reason?: string) => void, helpers: FlowExecutorHelpers, abortSignal?: AbortSignal): AsyncGenerator<HarnessStreamPart>;
51
+ runFlowAgent(agent: FlowAgentConfig, context: RunContext, input: string, systemPrompt: string, handoffTool: ToolSet[string] | undefined, onHandoff: (target: string, reason?: string) => void, toolCalls: ToolCallRecord[], helpers: FlowExecutorHelpers, abortSignal?: AbortSignal): AsyncGenerator<HarnessStreamPart>;
50
52
  /**
51
53
  * Shared event handler for flow manager async iterables.
52
54
  * Used by both the initialization and processing phases to avoid duplication.
@@ -1 +1 @@
1
- {"version":3,"file":"FlowExecutor.d.ts","sourceRoot":"","sources":["../../src/runtime/FlowExecutor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FlowExecutor.d.ts","sourceRoot":"","sources":["../../src/runtime/FlowExecutor.ts"],"names":[],"mappings":"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"}