@ariaflowagents/core 0.8.1 → 0.9.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.
- package/dist/capabilities/AutoRetrieveCapability.d.ts +30 -0
- package/dist/capabilities/AutoRetrieveCapability.d.ts.map +1 -0
- package/dist/capabilities/AutoRetrieveCapability.js +36 -0
- package/dist/capabilities/AutoRetrieveCapability.js.map +1 -0
- package/dist/capabilities/ExtractionCapability.d.ts +25 -0
- package/dist/capabilities/ExtractionCapability.d.ts.map +1 -0
- package/dist/capabilities/ExtractionCapability.js +74 -0
- package/dist/capabilities/ExtractionCapability.js.map +1 -0
- package/dist/capabilities/FlowCapability.d.ts +81 -0
- package/dist/capabilities/FlowCapability.d.ts.map +1 -0
- package/dist/capabilities/FlowCapability.js +482 -0
- package/dist/capabilities/FlowCapability.js.map +1 -0
- package/dist/capabilities/GuardrailCapability.d.ts +30 -0
- package/dist/capabilities/GuardrailCapability.d.ts.map +1 -0
- package/dist/capabilities/GuardrailCapability.js +38 -0
- package/dist/capabilities/GuardrailCapability.js.map +1 -0
- package/dist/capabilities/HandoffCapability.d.ts +19 -0
- package/dist/capabilities/HandoffCapability.d.ts.map +1 -0
- package/dist/capabilities/HandoffCapability.js +58 -0
- package/dist/capabilities/HandoffCapability.js.map +1 -0
- package/dist/capabilities/LivePromptAssembler.d.ts +108 -0
- package/dist/capabilities/LivePromptAssembler.d.ts.map +1 -0
- package/dist/capabilities/LivePromptAssembler.js +157 -0
- package/dist/capabilities/LivePromptAssembler.js.map +1 -0
- package/dist/capabilities/TriageCapability.d.ts +16 -0
- package/dist/capabilities/TriageCapability.d.ts.map +1 -0
- package/dist/capabilities/TriageCapability.js +61 -0
- package/dist/capabilities/TriageCapability.js.map +1 -0
- package/dist/capabilities/adapters/ai-sdk.d.ts +14 -0
- package/dist/capabilities/adapters/ai-sdk.d.ts.map +1 -0
- package/dist/capabilities/adapters/ai-sdk.js +29 -0
- package/dist/capabilities/adapters/ai-sdk.js.map +1 -0
- package/dist/capabilities/adapters/gemini.d.ts +15 -0
- package/dist/capabilities/adapters/gemini.d.ts.map +1 -0
- package/dist/capabilities/adapters/gemini.js +40 -0
- package/dist/capabilities/adapters/gemini.js.map +1 -0
- package/dist/capabilities/index.d.ts +154 -0
- package/dist/capabilities/index.d.ts.map +1 -0
- package/dist/capabilities/index.js +128 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/eval/EvalRunner.d.ts +12 -0
- package/dist/eval/EvalRunner.d.ts.map +1 -0
- package/dist/eval/EvalRunner.js +64 -0
- package/dist/eval/EvalRunner.js.map +1 -0
- package/dist/eval/scoring.d.ts +15 -0
- package/dist/eval/scoring.d.ts.map +1 -0
- package/dist/eval/scoring.js +152 -0
- package/dist/eval/scoring.js.map +1 -0
- package/dist/eval/types.d.ts +59 -0
- package/dist/eval/types.d.ts.map +1 -0
- package/dist/eval/types.js +2 -0
- package/dist/eval/types.js.map +1 -0
- package/dist/flows/FlowGraph.d.ts +3 -1
- package/dist/flows/FlowGraph.d.ts.map +1 -1
- package/dist/flows/FlowGraph.js +5 -0
- package/dist/flows/FlowGraph.js.map +1 -1
- package/dist/flows/FlowManager.d.ts +60 -1
- package/dist/flows/FlowManager.d.ts.map +1 -1
- package/dist/flows/FlowManager.js +467 -34
- package/dist/flows/FlowManager.js.map +1 -1
- package/dist/flows/extraction.d.ts +16 -1
- package/dist/flows/extraction.d.ts.map +1 -1
- package/dist/flows/extraction.js +34 -0
- package/dist/flows/extraction.js.map +1 -1
- package/dist/flows/index.d.ts +2 -0
- package/dist/flows/index.d.ts.map +1 -1
- package/dist/flows/index.js +1 -0
- package/dist/flows/index.js.map +1 -1
- package/dist/flows/validation.d.ts +1 -1
- package/dist/flows/validation.d.ts.map +1 -1
- package/dist/flows/validation.js +13 -1
- package/dist/flows/validation.js.map +1 -1
- package/dist/hooks/HookRunner.d.ts +3 -1
- package/dist/hooks/HookRunner.d.ts.map +1 -1
- package/dist/hooks/HookRunner.js +3 -0
- package/dist/hooks/HookRunner.js.map +1 -1
- package/dist/hooks/builtin/metrics.d.ts.map +1 -1
- package/dist/hooks/builtin/metrics.js +12 -0
- package/dist/hooks/builtin/metrics.js.map +1 -1
- package/dist/hooks/builtin/observability.d.ts +21 -0
- package/dist/hooks/builtin/observability.d.ts.map +1 -0
- package/dist/hooks/builtin/observability.js +535 -0
- package/dist/hooks/builtin/observability.js.map +1 -0
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/orchestration/DefaultOrchestrationAuthority.d.ts +91 -0
- package/dist/orchestration/DefaultOrchestrationAuthority.d.ts.map +1 -0
- package/dist/orchestration/DefaultOrchestrationAuthority.js +786 -0
- package/dist/orchestration/DefaultOrchestrationAuthority.js.map +1 -0
- package/dist/orchestration/OrchestrationAuthority.d.ts +119 -0
- package/dist/orchestration/OrchestrationAuthority.d.ts.map +1 -0
- package/dist/orchestration/OrchestrationAuthority.js +2 -0
- package/dist/orchestration/OrchestrationAuthority.js.map +1 -0
- package/dist/orchestration/RealtimeExtractionRunner.d.ts +25 -0
- package/dist/orchestration/RealtimeExtractionRunner.d.ts.map +1 -0
- package/dist/orchestration/RealtimeExtractionRunner.js +62 -0
- package/dist/orchestration/RealtimeExtractionRunner.js.map +1 -0
- package/dist/orchestration/index.d.ts +5 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +4 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/types.d.ts +134 -0
- package/dist/orchestration/types.d.ts.map +1 -0
- package/dist/orchestration/types.js +2 -0
- package/dist/orchestration/types.js.map +1 -0
- package/dist/realtime/RealtimeAudioClient.d.ts +105 -0
- package/dist/realtime/RealtimeAudioClient.d.ts.map +1 -0
- package/dist/realtime/RealtimeAudioClient.js +15 -0
- package/dist/realtime/RealtimeAudioClient.js.map +1 -0
- package/dist/realtime/RealtimeRuntime.d.ts +136 -0
- package/dist/realtime/RealtimeRuntime.d.ts.map +1 -0
- package/dist/realtime/RealtimeRuntime.js +270 -0
- package/dist/realtime/RealtimeRuntime.js.map +1 -0
- package/dist/realtime/index.d.ts +4 -0
- package/dist/realtime/index.d.ts.map +1 -0
- package/dist/realtime/index.js +2 -0
- package/dist/realtime/index.js.map +1 -0
- package/dist/runtime/ExtractionEngine.d.ts +2 -1
- package/dist/runtime/ExtractionEngine.d.ts.map +1 -1
- package/dist/runtime/ExtractionEngine.js +11 -0
- package/dist/runtime/ExtractionEngine.js.map +1 -1
- package/dist/runtime/FlowExecutor.d.ts +7 -5
- package/dist/runtime/FlowExecutor.d.ts.map +1 -1
- package/dist/runtime/FlowExecutor.js +71 -12
- package/dist/runtime/FlowExecutor.js.map +1 -1
- package/dist/runtime/Runtime.d.ts +22 -0
- package/dist/runtime/Runtime.d.ts.map +1 -1
- package/dist/runtime/Runtime.js +47 -0
- package/dist/runtime/Runtime.js.map +1 -1
- package/dist/runtime/pipeline/AgentExecuteStage.d.ts.map +1 -1
- package/dist/runtime/pipeline/AgentExecuteStage.js +94 -25
- package/dist/runtime/pipeline/AgentExecuteStage.js.map +1 -1
- package/dist/runtime/pipeline/ContextAssembleStage.js +1 -1
- package/dist/types/index.d.ts +61 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/telemetry.d.ts +107 -0
- package/dist/types/telemetry.d.ts.map +1 -1
- 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 @@
|
|
|
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
|
|
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,
|
|
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":"
|
|
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:
|
|
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
|
-
|
|
49
|
-
|
|
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":"AAAA,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"FlowExecutor.d.ts","sourceRoot":"","sources":["../../src/runtime/FlowExecutor.ts"],"names":[],"mappings":"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"}
|