@assemblyline-agents/livekit 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.
- package/LICENSE +21 -0
- package/README.md +19 -0
- package/dist/client.d.ts +26 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +224 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/subagent-harness.d.ts +8 -0
- package/dist/subagent-harness.d.ts.map +1 -0
- package/dist/subagent-harness.js +126 -0
- package/dist/subagent-harness.js.map +1 -0
- package/dist/tools.d.ts +6 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +171 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +136 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/util.d.ts +13 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +93 -0
- package/dist/util.js.map +1 -0
- package/package.json +49 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 OpenEve contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# @assemblyline-agents/livekit
|
|
2
|
+
|
|
3
|
+
Official Assembly Line LiveKit voice, telephony, and agent-dispatch plugin.
|
|
4
|
+
|
|
5
|
+
It connects agents to a LiveKit server: `defineLiveKitConnection(options)` declares a connection bound to LiveKit API credentials with room-admin and SIP scopes, `LiveKitClient` and access-token helpers wrap the server API, and tool factories (`defineLiveKitDispatchAgentTool`, `defineLiveKitOutboundCallTool`, `defineLiveKitTransferCallTool`) give agents voice-agent dispatch, SIP outbound calling, and call transfer. This package lives under `capabilities/` because it targets a single vendor's realtime stack rather than a substitutable adapter role.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
npm install @assemblyline-agents/livekit
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Part of Assembly Line
|
|
14
|
+
|
|
15
|
+
This package is part of [Assembly Line](https://github.com/jasonbadeaux/openeve), a vendor-neutral, filesystem-first framework for durable AI agents. See the developer documentation in [docs/developers/](https://github.com/jasonbadeaux/openeve/tree/main/docs/developers) for setup, agent authoring, and deployment guides.
|
|
16
|
+
|
|
17
|
+
## License
|
|
18
|
+
|
|
19
|
+
MIT
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { JsonObject, JsonValue } from "@assemblyline-agents/core";
|
|
2
|
+
import type { CreateLiveKitDispatchInput, CreateLiveKitSipParticipantInput, DeleteLiveKitDispatchInput, ListLiveKitDispatchInput, LiveKitAccessTokenInput, LiveKitClientOptions, TransferLiveKitSipParticipantInput } from "./types.js";
|
|
3
|
+
export declare class LiveKitApiError extends Error {
|
|
4
|
+
readonly status: number;
|
|
5
|
+
readonly body: JsonValue;
|
|
6
|
+
constructor(method: string, status: number, body: JsonValue);
|
|
7
|
+
}
|
|
8
|
+
export declare function createLiveKitAccessToken(input: LiveKitAccessTokenInput): string;
|
|
9
|
+
export declare function createLiveKitClient(options?: LiveKitClientOptions): LiveKitClient;
|
|
10
|
+
export declare class LiveKitClient {
|
|
11
|
+
private readonly url;
|
|
12
|
+
private readonly apiKey;
|
|
13
|
+
private readonly apiSecret;
|
|
14
|
+
private readonly fetchImpl;
|
|
15
|
+
private readonly now;
|
|
16
|
+
private readonly tokenTtlSeconds;
|
|
17
|
+
constructor(options?: LiveKitClientOptions);
|
|
18
|
+
createDispatch(input: CreateLiveKitDispatchInput): Promise<JsonObject>;
|
|
19
|
+
deleteDispatch(input: DeleteLiveKitDispatchInput): Promise<JsonObject>;
|
|
20
|
+
listDispatch(input: ListLiveKitDispatchInput): Promise<JsonObject>;
|
|
21
|
+
createSipParticipant(input: CreateLiveKitSipParticipantInput): Promise<JsonObject>;
|
|
22
|
+
transferSipParticipant(input: TransferLiveKitSipParticipantInput): Promise<JsonObject>;
|
|
23
|
+
listOutboundTrunks(): Promise<JsonObject>;
|
|
24
|
+
private twirp;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEvE,OAAO,KAAK,EACV,0BAA0B,EAC1B,gCAAgC,EAChC,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,EAIpB,kCAAkC,EACnC,MAAM,YAAY,CAAC;AAGpB,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;gBAEb,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;CAS5D;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAmB/E;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB,GAAG,aAAa,CAErF;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoC;IACxD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;gBAEzC,OAAO,GAAE,oBAAyB;IAUxC,cAAc,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,UAAU,CAAC;IAatE,cAAc,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,UAAU,CAAC;IAQtE,YAAY,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,UAAU,CAAC;IAQlE,oBAAoB,CAAC,KAAK,EAAE,gCAAgC,GAAG,OAAO,CAAC,UAAU,CAAC;IAgClF,sBAAsB,CAAC,KAAK,EAAE,kCAAkC,GAAG,OAAO,CAAC,UAAU,CAAC;IAUtF,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC;YAIjC,KAAK;CA4BpB"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { createHmac } from "node:crypto";
|
|
2
|
+
import { fetchWithPolicy } from "@assemblyline-agents/runtime";
|
|
3
|
+
import { compactJsonObject, isJsonObject, processEnv, requiredValue, stringValue } from "./util.js";
|
|
4
|
+
export class LiveKitApiError extends Error {
|
|
5
|
+
status;
|
|
6
|
+
body;
|
|
7
|
+
constructor(method, status, body) {
|
|
8
|
+
const message = isJsonObject(body)
|
|
9
|
+
? stringValue(body.msg) ?? stringValue(body.message) ?? `${method} failed with HTTP ${status}.`
|
|
10
|
+
: `${method} failed with HTTP ${status}.`;
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = "LiveKitApiError";
|
|
13
|
+
this.status = status;
|
|
14
|
+
this.body = body;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function createLiveKitAccessToken(input) {
|
|
18
|
+
const now = secondsFromNow(input.now);
|
|
19
|
+
const ttlSeconds = positiveInteger(input.ttlSeconds) ?? 600;
|
|
20
|
+
const payload = {
|
|
21
|
+
iss: input.apiKey,
|
|
22
|
+
nbf: now,
|
|
23
|
+
exp: now + ttlSeconds
|
|
24
|
+
};
|
|
25
|
+
if (input.identity)
|
|
26
|
+
payload.sub = input.identity;
|
|
27
|
+
if (input.name)
|
|
28
|
+
payload.name = input.name;
|
|
29
|
+
if (input.metadata !== undefined)
|
|
30
|
+
payload.metadata = typeof input.metadata === "string" ? input.metadata : JSON.stringify(input.metadata);
|
|
31
|
+
if (input.attributes && Object.keys(input.attributes).length > 0)
|
|
32
|
+
payload.attributes = input.attributes;
|
|
33
|
+
if (input.video && Object.keys(input.video).length > 0)
|
|
34
|
+
payload.video = input.video;
|
|
35
|
+
if (input.sip && Object.keys(input.sip).length > 0)
|
|
36
|
+
payload.sip = input.sip;
|
|
37
|
+
if (input.roomConfig && Object.keys(input.roomConfig).length > 0)
|
|
38
|
+
payload.roomConfig = input.roomConfig;
|
|
39
|
+
const header = base64UrlJson({ alg: "HS256", typ: "JWT" });
|
|
40
|
+
const body = base64UrlJson(payload);
|
|
41
|
+
const signature = createHmac("sha256", input.apiSecret).update(`${header}.${body}`).digest("base64url");
|
|
42
|
+
return `${header}.${body}.${signature}`;
|
|
43
|
+
}
|
|
44
|
+
export function createLiveKitClient(options = {}) {
|
|
45
|
+
return new LiveKitClient(options);
|
|
46
|
+
}
|
|
47
|
+
export class LiveKitClient {
|
|
48
|
+
url;
|
|
49
|
+
apiKey;
|
|
50
|
+
apiSecret;
|
|
51
|
+
fetchImpl;
|
|
52
|
+
now;
|
|
53
|
+
tokenTtlSeconds;
|
|
54
|
+
constructor(options = {}) {
|
|
55
|
+
const env = options.env ?? processEnv();
|
|
56
|
+
this.url = liveKitApiBaseUrl(requiredValue(options.url ?? env.LIVEKIT_URL, "LIVEKIT_URL"));
|
|
57
|
+
this.apiKey = requiredValue(options.apiKey ?? env.LIVEKIT_API_KEY, "LIVEKIT_API_KEY");
|
|
58
|
+
this.apiSecret = requiredValue(options.apiSecret ?? env.LIVEKIT_API_SECRET, "LIVEKIT_API_SECRET");
|
|
59
|
+
this.fetchImpl = options.fetch ?? fetch;
|
|
60
|
+
this.now = options.now;
|
|
61
|
+
this.tokenTtlSeconds = options.tokenTtlSeconds;
|
|
62
|
+
}
|
|
63
|
+
async createDispatch(input) {
|
|
64
|
+
const room = requiredValue(input.roomName ?? input.room, "roomName");
|
|
65
|
+
const body = compactJsonObject({
|
|
66
|
+
agent_name: input.agentName,
|
|
67
|
+
room,
|
|
68
|
+
metadata: metadataString(input.metadata),
|
|
69
|
+
restart_policy: input.restartPolicy
|
|
70
|
+
});
|
|
71
|
+
return this.twirp("AgentDispatchService", "CreateDispatch", body, {
|
|
72
|
+
video: { room, roomAdmin: true }
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
async deleteDispatch(input) {
|
|
76
|
+
const room = requiredValue(input.roomName ?? input.room, "roomName");
|
|
77
|
+
return this.twirp("AgentDispatchService", "DeleteDispatch", {
|
|
78
|
+
dispatch_id: input.dispatchId,
|
|
79
|
+
room
|
|
80
|
+
}, { video: { room, roomAdmin: true } });
|
|
81
|
+
}
|
|
82
|
+
async listDispatch(input) {
|
|
83
|
+
const room = requiredValue(input.roomName ?? input.room, "roomName");
|
|
84
|
+
return this.twirp("AgentDispatchService", "ListDispatch", compactJsonObject({
|
|
85
|
+
room,
|
|
86
|
+
dispatch_id: input.dispatchId
|
|
87
|
+
}), { video: { room, roomAdmin: true } });
|
|
88
|
+
}
|
|
89
|
+
async createSipParticipant(input) {
|
|
90
|
+
const roomName = requiredValue(input.roomName ?? input.room, "roomName");
|
|
91
|
+
const phoneNumber = requiredValue(input.phoneNumber ?? input.sipCallTo, "phoneNumber");
|
|
92
|
+
const body = compactJsonObject({
|
|
93
|
+
sip_trunk_id: input.outboundTrunkId ?? input.sipTrunkId,
|
|
94
|
+
trunk: normalizeOutboundTrunk(input.trunk),
|
|
95
|
+
sip_call_to: phoneNumber,
|
|
96
|
+
sip_number: input.sipNumber,
|
|
97
|
+
room_name: roomName,
|
|
98
|
+
participant_identity: input.participantIdentity,
|
|
99
|
+
participant_name: input.participantName,
|
|
100
|
+
participant_metadata: metadataString(input.participantMetadata),
|
|
101
|
+
participant_attributes: input.participantAttributes,
|
|
102
|
+
dtmf: input.dtmf,
|
|
103
|
+
play_dialtone: input.playDialtone,
|
|
104
|
+
hide_phone_number: input.hidePhoneNumber,
|
|
105
|
+
headers: input.headers,
|
|
106
|
+
include_headers: input.includeHeaders,
|
|
107
|
+
ringing_timeout: duration(input.ringingTimeoutSeconds),
|
|
108
|
+
max_call_duration: duration(input.maxCallDurationSeconds),
|
|
109
|
+
krisp_enabled: input.krispEnabled,
|
|
110
|
+
media_encryption: input.mediaEncryption,
|
|
111
|
+
wait_until_answered: input.waitUntilAnswered,
|
|
112
|
+
display_name: input.displayName,
|
|
113
|
+
...(input.extra ?? {})
|
|
114
|
+
});
|
|
115
|
+
if (!body.sip_trunk_id && !body.trunk) {
|
|
116
|
+
throw new Error("LiveKit outbound calls require outboundTrunkId/sipTrunkId or an inline trunk config.");
|
|
117
|
+
}
|
|
118
|
+
return this.twirp("SIP", "CreateSIPParticipant", body, { sip: { call: true } });
|
|
119
|
+
}
|
|
120
|
+
async transferSipParticipant(input) {
|
|
121
|
+
const roomName = requiredValue(input.roomName ?? input.room, "roomName");
|
|
122
|
+
return this.twirp("SIP", "TransferSIPParticipant", compactJsonObject({
|
|
123
|
+
room_name: roomName,
|
|
124
|
+
participant_identity: input.participantIdentity,
|
|
125
|
+
transfer_to: input.transferTo,
|
|
126
|
+
play_dialtone: input.playDialtone
|
|
127
|
+
}), { sip: { call: true } });
|
|
128
|
+
}
|
|
129
|
+
async listOutboundTrunks() {
|
|
130
|
+
return this.twirp("SIP", "ListSIPOutboundTrunk", {}, { sip: { admin: true } });
|
|
131
|
+
}
|
|
132
|
+
async twirp(service, method, body, grants) {
|
|
133
|
+
const tokenInput = {
|
|
134
|
+
apiKey: this.apiKey,
|
|
135
|
+
apiSecret: this.apiSecret,
|
|
136
|
+
identity: "openeve"
|
|
137
|
+
};
|
|
138
|
+
if (this.tokenTtlSeconds !== undefined)
|
|
139
|
+
tokenInput.ttlSeconds = this.tokenTtlSeconds;
|
|
140
|
+
if (this.now)
|
|
141
|
+
tokenInput.now = this.now;
|
|
142
|
+
if (grants.video)
|
|
143
|
+
tokenInput.video = grants.video;
|
|
144
|
+
if (grants.sip)
|
|
145
|
+
tokenInput.sip = grants.sip;
|
|
146
|
+
const token = createLiveKitAccessToken(tokenInput);
|
|
147
|
+
const response = await fetchWithPolicy(this.fetchImpl, `${this.url}/twirp/livekit.${service}/${method}`, {
|
|
148
|
+
method: "POST",
|
|
149
|
+
headers: {
|
|
150
|
+
authorization: `Bearer ${token}`,
|
|
151
|
+
"content-type": "application/json"
|
|
152
|
+
},
|
|
153
|
+
body: JSON.stringify(body)
|
|
154
|
+
});
|
|
155
|
+
const parsed = await parseResponseBody(response);
|
|
156
|
+
if (!response.ok)
|
|
157
|
+
throw new LiveKitApiError(method, response.status, parsed);
|
|
158
|
+
return isJsonObject(parsed) ? parsed : { value: parsed };
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function liveKitApiBaseUrl(url) {
|
|
162
|
+
const trimmed = url.trim().replace(/\/+$/u, "");
|
|
163
|
+
if (!trimmed)
|
|
164
|
+
throw new Error("LIVEKIT_URL cannot be empty.");
|
|
165
|
+
if (/^wss:/iu.test(trimmed))
|
|
166
|
+
return trimmed.replace(/^wss:/iu, "https:");
|
|
167
|
+
if (/^ws:/iu.test(trimmed))
|
|
168
|
+
return trimmed.replace(/^ws:/iu, "http:");
|
|
169
|
+
if (/^https?:/iu.test(trimmed))
|
|
170
|
+
return trimmed;
|
|
171
|
+
return `https://${trimmed}`;
|
|
172
|
+
}
|
|
173
|
+
function normalizeOutboundTrunk(trunk) {
|
|
174
|
+
if (!trunk)
|
|
175
|
+
return undefined;
|
|
176
|
+
return compactJsonObject({
|
|
177
|
+
address: trunk.address ?? trunk.hostname,
|
|
178
|
+
numbers: trunk.numbers,
|
|
179
|
+
metadata: trunk.metadata,
|
|
180
|
+
destination_country: trunk.destinationCountry ?? trunk.destination_country,
|
|
181
|
+
transport: trunk.transport,
|
|
182
|
+
auth_username: trunk.authUsername ?? trunk.auth_username,
|
|
183
|
+
auth_password: trunk.authPassword ?? trunk.auth_password,
|
|
184
|
+
headers_to_attributes: trunk.headersToAttributes ?? trunk.headers_to_attributes,
|
|
185
|
+
attributes_to_headers: trunk.attributesToHeaders ?? trunk.attributes_to_headers,
|
|
186
|
+
from_host: trunk.fromHost ?? trunk.from_host
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
function duration(seconds) {
|
|
190
|
+
if (seconds === undefined)
|
|
191
|
+
return undefined;
|
|
192
|
+
if (!Number.isFinite(seconds) || seconds <= 0)
|
|
193
|
+
throw new Error("Duration values must be positive seconds.");
|
|
194
|
+
return `${Math.floor(seconds)}s`;
|
|
195
|
+
}
|
|
196
|
+
function metadataString(value) {
|
|
197
|
+
if (value === undefined)
|
|
198
|
+
return undefined;
|
|
199
|
+
return typeof value === "string" ? value : JSON.stringify(value);
|
|
200
|
+
}
|
|
201
|
+
function base64UrlJson(value) {
|
|
202
|
+
return Buffer.from(JSON.stringify(value)).toString("base64url");
|
|
203
|
+
}
|
|
204
|
+
function secondsFromNow(now) {
|
|
205
|
+
const value = now?.() ?? Date.now();
|
|
206
|
+
if (value instanceof Date)
|
|
207
|
+
return Math.floor(value.getTime() / 1000);
|
|
208
|
+
return Math.floor(value / 1000);
|
|
209
|
+
}
|
|
210
|
+
function positiveInteger(value) {
|
|
211
|
+
return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : undefined;
|
|
212
|
+
}
|
|
213
|
+
async function parseResponseBody(response) {
|
|
214
|
+
const text = await response.text();
|
|
215
|
+
if (!text)
|
|
216
|
+
return {};
|
|
217
|
+
try {
|
|
218
|
+
return JSON.parse(text);
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
return text;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ConnectionDefinition } from "@assemblyline-agents/core";
|
|
2
|
+
import type { LiveKitConnectionOptions } from "./types.js";
|
|
3
|
+
export { LIVEKIT_OPTIONAL_ENV, LIVEKIT_REQUIRED_ENV, type CreateLiveKitDispatchInput, type CreateLiveKitSipParticipantInput, type DeleteLiveKitDispatchInput, type ListLiveKitDispatchInput, type LiveKitAccessTokenInput, type LiveKitClientOptions, type LiveKitConnectionOptions, type LiveKitEnvironment, type LiveKitOutboundTrunkConfig, type LiveKitSipGrant, type LiveKitToolOptions, type LiveKitVideoGrant, type TransferLiveKitSipParticipantInput } from "./types.js";
|
|
4
|
+
export { LiveKitApiError, LiveKitClient, createLiveKitAccessToken, createLiveKitClient } from "./client.js";
|
|
5
|
+
export { defineLiveKitDispatchAgentTool, defineLiveKitOutboundCallTool, defineLiveKitTransferCallTool } from "./tools.js";
|
|
6
|
+
export declare function defineLiveKitConnection(options?: LiveKitConnectionOptions): ConnectionDefinition;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,0BAA0B,EAC/B,KAAK,gCAAgC,EACrC,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,kCAAkC,EACxC,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC5G,OAAO,EAAE,8BAA8B,EAAE,6BAA6B,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAE1H,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,wBAA6B,GAAG,oBAAoB,CAUpG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { adapter, defineConnection } from "@assemblyline-agents/core";
|
|
2
|
+
export { LIVEKIT_OPTIONAL_ENV, LIVEKIT_REQUIRED_ENV } from "./types.js";
|
|
3
|
+
export { LiveKitApiError, LiveKitClient, createLiveKitAccessToken, createLiveKitClient } from "./client.js";
|
|
4
|
+
export { defineLiveKitDispatchAgentTool, defineLiveKitOutboundCallTool, defineLiveKitTransferCallTool } from "./tools.js";
|
|
5
|
+
export function defineLiveKitConnection(options = {}) {
|
|
6
|
+
return defineConnection({
|
|
7
|
+
description: options.description ?? "LiveKit server API credentials for voice agent dispatch and SIP calls.",
|
|
8
|
+
provider: "livekit",
|
|
9
|
+
binding: adapter("livekit"),
|
|
10
|
+
scopes: ["room:admin", "sip:call", "sip:admin"],
|
|
11
|
+
capabilities: ["agent:dispatch", "sip:outbound-call", "sip:transfer"],
|
|
12
|
+
subject: "environment",
|
|
13
|
+
required: options.required ?? false
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAA6B,MAAM,2BAA2B,CAAC;AAGjG,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EAcrB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC5G,OAAO,EAAE,8BAA8B,EAAE,6BAA6B,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAE1H,MAAM,UAAU,uBAAuB,CAAC,UAAoC,EAAE;IAC5E,OAAO,gBAAgB,CAAC;QACtB,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,wEAAwE;QAC5G,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC;QAC3B,MAAM,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,WAAW,CAAC;QAC/C,YAAY,EAAE,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,CAAC;QACrE,OAAO,EAAE,aAAa;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;KACpC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AdapterProviderMetadata, ProviderModule } from "@openeve/core";
|
|
2
|
+
import type { SubagentHarness } from "@openeve/runtime";
|
|
3
|
+
import { type LiveKitVoiceSubagentHarnessOptions } from "./types.js";
|
|
4
|
+
export declare function liveKitVoiceSubagentHarness(options?: LiveKitVoiceSubagentHarnessOptions): SubagentHarness;
|
|
5
|
+
/** Metadata owned by this package; the core registry mirrors it as an offline default. */
|
|
6
|
+
export declare const LIVEKIT_SUBAGENT_PROVIDER_METADATA: AdapterProviderMetadata;
|
|
7
|
+
export declare const openeveProvider: ProviderModule;
|
|
8
|
+
//# sourceMappingURL=subagent-harness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-harness.d.ts","sourceRoot":"","sources":["../src/subagent-harness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAc,cAAc,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,KAAK,EAAE,eAAe,EAAuD,MAAM,kBAAkB,CAAC;AAE7G,OAAO,EAKL,KAAK,kCAAkC,EACxC,MAAM,YAAY,CAAC;AAGpB,wBAAgB,2BAA2B,CAAC,OAAO,GAAE,kCAAuC,GAAG,eAAe,CAE7G;AAED,0FAA0F;AAC1F,eAAO,MAAM,kCAAkC,EAAE,uBAQhD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,cAO7B,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { createLiveKitClient } from "./client.js";
|
|
2
|
+
import { LIVEKIT_OPTIONAL_ENV, LIVEKIT_REQUIRED_ENV } from "./types.js";
|
|
3
|
+
import { booleanFrom, compactJsonObject, generatedRoomName, isJsonObject, processEnv, publicJson, recordValue, stringFrom, stringValue, valueAt } from "./util.js";
|
|
4
|
+
export function liveKitVoiceSubagentHarness(options = {}) {
|
|
5
|
+
return new LiveKitVoiceSubagentHarness(options);
|
|
6
|
+
}
|
|
7
|
+
/** Metadata owned by this package; the core registry mirrors it as an offline default. */
|
|
8
|
+
export const LIVEKIT_SUBAGENT_PROVIDER_METADATA = {
|
|
9
|
+
kind: "livekit",
|
|
10
|
+
role: "subagent",
|
|
11
|
+
stability: "preview",
|
|
12
|
+
packageName: "@openeve/livekit",
|
|
13
|
+
requiredEnv: [...LIVEKIT_REQUIRED_ENV],
|
|
14
|
+
optionalEnv: [...LIVEKIT_OPTIONAL_ENV],
|
|
15
|
+
capabilities: ["external-session", "voice-agent", "phone-call", "sip", "agent-dispatch"]
|
|
16
|
+
};
|
|
17
|
+
export const openeveProvider = {
|
|
18
|
+
providers: [
|
|
19
|
+
{
|
|
20
|
+
metadata: LIVEKIT_SUBAGENT_PROVIDER_METADATA,
|
|
21
|
+
create: (ctx) => liveKitVoiceSubagentHarness({ env: ctx.env, fetch: ctx.fetch })
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
};
|
|
25
|
+
class LiveKitVoiceSubagentHarness {
|
|
26
|
+
options;
|
|
27
|
+
constructor(options = {}) {
|
|
28
|
+
this.options = options;
|
|
29
|
+
}
|
|
30
|
+
async start(input) {
|
|
31
|
+
const harnessOptions = recordValue(input.subagent.harness.options) ?? {};
|
|
32
|
+
const task = input.task;
|
|
33
|
+
const env = { ...processEnv(), ...(this.options.env ?? {}) };
|
|
34
|
+
const clientOptions = { env };
|
|
35
|
+
if (this.options.fetch)
|
|
36
|
+
clientOptions.fetch = this.options.fetch;
|
|
37
|
+
if (this.options.now)
|
|
38
|
+
clientOptions.now = this.options.now;
|
|
39
|
+
const client = createLiveKitClient(clientOptions);
|
|
40
|
+
const roomName = stringFrom(task, "roomName", "room") ??
|
|
41
|
+
stringFrom(harnessOptions, "roomName", "room") ??
|
|
42
|
+
generatedRoomName(stringFrom(harnessOptions, "roomPrefix") ?? "openeve-voice", input.childRun.id);
|
|
43
|
+
const phoneNumber = stringFrom(task, "phoneNumber", "phone_number", "to");
|
|
44
|
+
const agentName = stringFrom(task, "agentName", "agent_name") ??
|
|
45
|
+
stringFrom(harnessOptions, "agentName", "agent_name") ??
|
|
46
|
+
env.LIVEKIT_VOICE_AGENT_NAME;
|
|
47
|
+
const outboundTrunkId = stringFrom(task, "outboundTrunkId", "outbound_trunk_id", "sipTrunkId", "sip_trunk_id") ??
|
|
48
|
+
stringFrom(harnessOptions, "outboundTrunkId", "outbound_trunk_id", "sipTrunkId", "sip_trunk_id") ??
|
|
49
|
+
env.LIVEKIT_OUTBOUND_TRUNK_ID;
|
|
50
|
+
if (!agentName && !phoneNumber) {
|
|
51
|
+
throw new Error("LiveKit voice subagents require an agentName to dispatch, a phoneNumber to call, or both.");
|
|
52
|
+
}
|
|
53
|
+
const dispatchMetadata = metadataFromTask(input);
|
|
54
|
+
await input.emit({ type: "progress", title: "livekit.voice_session.starting", data: { roomName, agentName: agentName ?? null, outboundCall: Boolean(phoneNumber) } });
|
|
55
|
+
const dispatch = agentName
|
|
56
|
+
? await client.createDispatch({ roomName, agentName, metadata: dispatchMetadata })
|
|
57
|
+
: undefined;
|
|
58
|
+
let participant;
|
|
59
|
+
if (phoneNumber) {
|
|
60
|
+
const sipInput = {
|
|
61
|
+
phoneNumber,
|
|
62
|
+
roomName,
|
|
63
|
+
participantIdentity: stringFrom(task, "participantIdentity", "participant_identity") ?? phoneNumber,
|
|
64
|
+
participantMetadata: { openeve_child_run_id: input.childRun.id, openeve_parent_run_id: input.parentRun.id },
|
|
65
|
+
waitUntilAnswered: booleanFrom(task, "waitUntilAnswered", "wait_until_answered") ??
|
|
66
|
+
booleanFrom(harnessOptions, "waitUntilAnswered", "wait_until_answered") ??
|
|
67
|
+
true
|
|
68
|
+
};
|
|
69
|
+
if (outboundTrunkId)
|
|
70
|
+
sipInput.outboundTrunkId = outboundTrunkId;
|
|
71
|
+
const participantName = stringFrom(task, "participantName", "participant_name");
|
|
72
|
+
const dtmf = stringFrom(task, "dtmf");
|
|
73
|
+
const krispEnabled = booleanFrom(task, "krispEnabled", "krisp_enabled");
|
|
74
|
+
const displayName = stringFrom(task, "displayName", "display_name");
|
|
75
|
+
if (participantName)
|
|
76
|
+
sipInput.participantName = participantName;
|
|
77
|
+
if (dtmf)
|
|
78
|
+
sipInput.dtmf = dtmf;
|
|
79
|
+
if (krispEnabled !== undefined)
|
|
80
|
+
sipInput.krispEnabled = krispEnabled;
|
|
81
|
+
if (displayName)
|
|
82
|
+
sipInput.displayName = displayName;
|
|
83
|
+
participant = await client.createSipParticipant(sipInput);
|
|
84
|
+
}
|
|
85
|
+
const state = {
|
|
86
|
+
adapter: "livekit",
|
|
87
|
+
externalSessionId: stringValue(dispatch?.id) ?? stringValue(participant?.sip_call_id) ?? roomName,
|
|
88
|
+
status: "completed",
|
|
89
|
+
metadata: publicJson(compactJsonObject({
|
|
90
|
+
roomName,
|
|
91
|
+
agentName,
|
|
92
|
+
dispatchId: stringValue(dispatch?.id),
|
|
93
|
+
participantIdentity: stringValue(participant?.participant_identity),
|
|
94
|
+
sipCallId: stringValue(participant?.sip_call_id),
|
|
95
|
+
outboundCall: Boolean(phoneNumber)
|
|
96
|
+
}))
|
|
97
|
+
};
|
|
98
|
+
await input.checkpoint(state);
|
|
99
|
+
const completedEvent = {
|
|
100
|
+
type: "completed",
|
|
101
|
+
summary: `LiveKit voice session started in ${roomName}.`
|
|
102
|
+
};
|
|
103
|
+
if (state.metadata)
|
|
104
|
+
completedEvent.result = state.metadata;
|
|
105
|
+
await input.emit(completedEvent);
|
|
106
|
+
return {
|
|
107
|
+
status: "completed",
|
|
108
|
+
response: `LiveKit voice session started in ${roomName}.`,
|
|
109
|
+
summary: `LiveKit voice session started in ${roomName}.`,
|
|
110
|
+
state
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function metadataFromTask(input) {
|
|
115
|
+
const metadata = valueAt(input.task, "metadata");
|
|
116
|
+
const base = isJsonObject(metadata) ? metadata : {};
|
|
117
|
+
return compactJsonObject({
|
|
118
|
+
...base,
|
|
119
|
+
phone_number: stringFrom(input.task, "phoneNumber", "phone_number", "to"),
|
|
120
|
+
openeve_parent_run_id: input.parentRun.id,
|
|
121
|
+
openeve_child_run_id: input.childRun.id,
|
|
122
|
+
openeve_subagent: input.subagent.name,
|
|
123
|
+
openeve_task: publicJson(input.task)
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=subagent-harness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-harness.js","sourceRoot":"","sources":["../src/subagent-harness.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ToolDefinition } from "@assemblyline-agents/core";
|
|
2
|
+
import type { LiveKitToolOptions } from "./types.js";
|
|
3
|
+
export declare function defineLiveKitDispatchAgentTool(options?: LiveKitToolOptions): ToolDefinition;
|
|
4
|
+
export declare function defineLiveKitOutboundCallTool(options?: LiveKitToolOptions): ToolDefinition;
|
|
5
|
+
export declare function defineLiveKitTransferCallTool(options?: LiveKitToolOptions): ToolDefinition;
|
|
6
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+C,KAAK,cAAc,EAA6B,MAAM,2BAA2B,CAAC;AAExI,OAAO,KAAK,EAAgE,kBAAkB,EAAsC,MAAM,YAAY,CAAC;AAGvJ,wBAAgB,8BAA8B,CAAC,OAAO,GAAE,kBAAuB,GAAG,cAAc,CAsC/F;AAED,wBAAgB,6BAA6B,CAAC,OAAO,GAAE,kBAAuB,GAAG,cAAc,CA6E9F;AAED,wBAAgB,6BAA6B,CAAC,OAAO,GAAE,kBAAuB,GAAG,cAAc,CA8B9F"}
|
package/dist/tools.js
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { defineTool } from "@assemblyline-agents/core";
|
|
2
|
+
import { createLiveKitClient } from "./client.js";
|
|
3
|
+
import { compactJsonObject, generatedRoomName, processEnv, publicJson, requiredValue } from "./util.js";
|
|
4
|
+
export function defineLiveKitDispatchAgentTool(options = {}) {
|
|
5
|
+
return withLiveKitToolDefaults(defineTool({
|
|
6
|
+
description: "Dispatch a named LiveKit voice agent to a LiveKit room.",
|
|
7
|
+
sideEffect: "external",
|
|
8
|
+
inputSchema: {
|
|
9
|
+
type: "object",
|
|
10
|
+
additionalProperties: false,
|
|
11
|
+
properties: {
|
|
12
|
+
roomName: { type: "string", description: "LiveKit room name to dispatch the agent into." },
|
|
13
|
+
agentName: { type: "string", description: "LiveKit agent dispatch name. Defaults to tool options or LIVEKIT_VOICE_AGENT_NAME." },
|
|
14
|
+
metadata: { description: "Optional JSON-serializable metadata string or object passed to the LiveKit agent job." },
|
|
15
|
+
restartPolicy: { type: "string", enum: ["JRP_ON_FAILURE", "JRP_NEVER"], description: "Optional LiveKit job restart policy." }
|
|
16
|
+
},
|
|
17
|
+
required: ["roomName"]
|
|
18
|
+
},
|
|
19
|
+
async execute(input, ctx) {
|
|
20
|
+
const request = input;
|
|
21
|
+
const client = liveKitClientFromToolContext(ctx, options);
|
|
22
|
+
const env = toolEnv(ctx, options);
|
|
23
|
+
const agentName = requiredValue(request.agentName ?? options.agentName ?? env.LIVEKIT_VOICE_AGENT_NAME, "agentName");
|
|
24
|
+
const dispatchInput = {
|
|
25
|
+
roomName: request.roomName,
|
|
26
|
+
agentName
|
|
27
|
+
};
|
|
28
|
+
if (request.metadata !== undefined)
|
|
29
|
+
dispatchInput.metadata = request.metadata;
|
|
30
|
+
if (request.restartPolicy)
|
|
31
|
+
dispatchInput.restartPolicy = request.restartPolicy;
|
|
32
|
+
const dispatch = await client.createDispatch(dispatchInput);
|
|
33
|
+
const result = compactJsonObject({
|
|
34
|
+
provider: "livekit",
|
|
35
|
+
action: "dispatch_agent",
|
|
36
|
+
roomName: request.roomName,
|
|
37
|
+
agentName,
|
|
38
|
+
dispatch
|
|
39
|
+
});
|
|
40
|
+
await ctx.emit("livekit.agent_dispatched", publicJson(result));
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
}), options);
|
|
44
|
+
}
|
|
45
|
+
export function defineLiveKitOutboundCallTool(options = {}) {
|
|
46
|
+
return withLiveKitToolDefaults(defineTool({
|
|
47
|
+
description: "Start an outbound phone call through LiveKit SIP, optionally dispatching a LiveKit voice agent into the call room first.",
|
|
48
|
+
sideEffect: "external",
|
|
49
|
+
inputSchema: {
|
|
50
|
+
type: "object",
|
|
51
|
+
additionalProperties: false,
|
|
52
|
+
properties: {
|
|
53
|
+
phoneNumber: { type: "string", description: "Destination phone number, ideally in E.164 format." },
|
|
54
|
+
roomName: { type: "string", description: "LiveKit room for the call. Defaults to a generated call room." },
|
|
55
|
+
agentName: { type: "string", description: "Optional LiveKit agent dispatch name to join before dialing." },
|
|
56
|
+
outboundTrunkId: { type: "string", description: "LiveKit outbound trunk ID. Defaults to tool options or LIVEKIT_OUTBOUND_TRUNK_ID." },
|
|
57
|
+
participantIdentity: { type: "string", description: "Optional identity for the SIP participant." },
|
|
58
|
+
participantName: { type: "string", description: "Optional display name for the SIP participant." },
|
|
59
|
+
metadata: { description: "Optional JSON-serializable metadata passed to the LiveKit agent dispatch." },
|
|
60
|
+
waitUntilAnswered: { type: "boolean", description: "Wait for the callee to answer before returning." },
|
|
61
|
+
dtmf: { type: "string", description: "Optional DTMF digits for extensions; use w for a half-second delay." },
|
|
62
|
+
krispEnabled: { type: "boolean", description: "Enable Krisp noise cancellation for the callee when supported." },
|
|
63
|
+
displayName: { type: "string", description: "Optional caller display name." }
|
|
64
|
+
},
|
|
65
|
+
required: ["phoneNumber"]
|
|
66
|
+
},
|
|
67
|
+
async execute(input, ctx) {
|
|
68
|
+
const request = input;
|
|
69
|
+
const env = toolEnv(ctx, options);
|
|
70
|
+
const roomName = request.roomName ?? generatedRoomName(options.roomPrefix ?? "openeve-call", ctx.runId);
|
|
71
|
+
const agentName = request.agentName ?? options.agentName ?? env.LIVEKIT_VOICE_AGENT_NAME;
|
|
72
|
+
const outboundTrunkId = request.outboundTrunkId ?? options.outboundTrunkId ?? env.LIVEKIT_OUTBOUND_TRUNK_ID;
|
|
73
|
+
const client = liveKitClientFromToolContext(ctx, options);
|
|
74
|
+
const dispatch = agentName
|
|
75
|
+
? await client.createDispatch({
|
|
76
|
+
roomName,
|
|
77
|
+
agentName,
|
|
78
|
+
metadata: request.metadata ?? {
|
|
79
|
+
phone_number: request.phoneNumber,
|
|
80
|
+
openeve_run_id: ctx.runId,
|
|
81
|
+
source: "openeve"
|
|
82
|
+
}
|
|
83
|
+
})
|
|
84
|
+
: undefined;
|
|
85
|
+
const sipInput = {
|
|
86
|
+
phoneNumber: request.phoneNumber,
|
|
87
|
+
roomName,
|
|
88
|
+
participantIdentity: request.participantIdentity ?? request.phoneNumber,
|
|
89
|
+
participantMetadata: { openeve_run_id: ctx.runId },
|
|
90
|
+
waitUntilAnswered: request.waitUntilAnswered ?? options.waitUntilAnswered ?? true
|
|
91
|
+
};
|
|
92
|
+
if (outboundTrunkId)
|
|
93
|
+
sipInput.outboundTrunkId = outboundTrunkId;
|
|
94
|
+
if (request.participantName)
|
|
95
|
+
sipInput.participantName = request.participantName;
|
|
96
|
+
if (request.dtmf)
|
|
97
|
+
sipInput.dtmf = request.dtmf;
|
|
98
|
+
if (request.krispEnabled !== undefined)
|
|
99
|
+
sipInput.krispEnabled = request.krispEnabled;
|
|
100
|
+
if (request.displayName)
|
|
101
|
+
sipInput.displayName = request.displayName;
|
|
102
|
+
const participant = await client.createSipParticipant(sipInput);
|
|
103
|
+
const result = compactJsonObject({
|
|
104
|
+
provider: "livekit",
|
|
105
|
+
action: "outbound_call",
|
|
106
|
+
roomName,
|
|
107
|
+
agentName,
|
|
108
|
+
dispatch,
|
|
109
|
+
participant
|
|
110
|
+
});
|
|
111
|
+
await ctx.emit("livekit.outbound_call_started", publicJson(result));
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
}), options);
|
|
115
|
+
}
|
|
116
|
+
export function defineLiveKitTransferCallTool(options = {}) {
|
|
117
|
+
return withLiveKitToolDefaults(defineTool({
|
|
118
|
+
description: "Transfer a LiveKit SIP participant to another phone number or SIP endpoint.",
|
|
119
|
+
sideEffect: "external",
|
|
120
|
+
inputSchema: {
|
|
121
|
+
type: "object",
|
|
122
|
+
additionalProperties: false,
|
|
123
|
+
properties: {
|
|
124
|
+
roomName: { type: "string", description: "LiveKit room containing the SIP participant." },
|
|
125
|
+
participantIdentity: { type: "string", description: "Identity of the SIP participant to transfer." },
|
|
126
|
+
transferTo: { type: "string", description: "Phone number or SIP URI to transfer the call to." },
|
|
127
|
+
playDialtone: { type: "boolean", description: "Play dial tone during transfer." }
|
|
128
|
+
},
|
|
129
|
+
required: ["roomName", "participantIdentity", "transferTo"]
|
|
130
|
+
},
|
|
131
|
+
async execute(input, ctx) {
|
|
132
|
+
const request = input;
|
|
133
|
+
const result = await liveKitClientFromToolContext(ctx, options).transferSipParticipant(request);
|
|
134
|
+
const output = compactJsonObject({
|
|
135
|
+
provider: "livekit",
|
|
136
|
+
action: "transfer_call",
|
|
137
|
+
roomName: request.roomName,
|
|
138
|
+
participantIdentity: request.participantIdentity,
|
|
139
|
+
transferTo: request.transferTo,
|
|
140
|
+
result
|
|
141
|
+
});
|
|
142
|
+
await ctx.emit("livekit.call_transferred", publicJson(output));
|
|
143
|
+
return output;
|
|
144
|
+
}
|
|
145
|
+
}), options);
|
|
146
|
+
}
|
|
147
|
+
function liveKitClientFromToolContext(ctx, options) {
|
|
148
|
+
return createLiveKitClient({
|
|
149
|
+
...(options.client ?? {}),
|
|
150
|
+
env: toolEnv(ctx, options),
|
|
151
|
+
fetch: options.client?.fetch ?? ctx.channel?.fetch ?? fetch
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
function toolEnv(ctx, options) {
|
|
155
|
+
return {
|
|
156
|
+
...processEnv(),
|
|
157
|
+
...(ctx.channel?.env ?? {}),
|
|
158
|
+
...(options.client?.env ?? {})
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function withLiveKitToolDefaults(definition, options) {
|
|
162
|
+
if (options.description)
|
|
163
|
+
definition.description = options.description;
|
|
164
|
+
definition.needsApproval = options.needsApproval ?? {
|
|
165
|
+
mode: "always",
|
|
166
|
+
reason: "LiveKit phone calls and agent dispatches create external realtime sessions.",
|
|
167
|
+
sideEffect: "external"
|
|
168
|
+
};
|
|
169
|
+
return definition;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import type { ApprovalPolicy, JsonObject, JsonValue } from "@assemblyline-agents/core";
|
|
2
|
+
export declare const LIVEKIT_REQUIRED_ENV: readonly ["LIVEKIT_URL", "LIVEKIT_API_KEY", "LIVEKIT_API_SECRET"];
|
|
3
|
+
export declare const LIVEKIT_OPTIONAL_ENV: readonly ["LIVEKIT_OUTBOUND_TRUNK_ID", "LIVEKIT_VOICE_AGENT_NAME"];
|
|
4
|
+
export interface LiveKitEnvironment {
|
|
5
|
+
LIVEKIT_URL?: string;
|
|
6
|
+
LIVEKIT_API_KEY?: string;
|
|
7
|
+
LIVEKIT_API_SECRET?: string;
|
|
8
|
+
LIVEKIT_OUTBOUND_TRUNK_ID?: string;
|
|
9
|
+
LIVEKIT_VOICE_AGENT_NAME?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface LiveKitVideoGrant {
|
|
12
|
+
roomCreate?: boolean;
|
|
13
|
+
roomList?: boolean;
|
|
14
|
+
roomJoin?: boolean;
|
|
15
|
+
roomAdmin?: boolean;
|
|
16
|
+
roomRecord?: boolean;
|
|
17
|
+
ingressAdmin?: boolean;
|
|
18
|
+
room?: string;
|
|
19
|
+
canPublish?: boolean;
|
|
20
|
+
canPublishData?: boolean;
|
|
21
|
+
canPublishSources?: string[];
|
|
22
|
+
canSubscribe?: boolean;
|
|
23
|
+
canUpdateOwnMetadata?: boolean;
|
|
24
|
+
hidden?: boolean;
|
|
25
|
+
kind?: string;
|
|
26
|
+
destinationRoom?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface LiveKitSipGrant {
|
|
29
|
+
admin?: boolean;
|
|
30
|
+
call?: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface LiveKitAccessTokenInput {
|
|
33
|
+
apiKey: string;
|
|
34
|
+
apiSecret: string;
|
|
35
|
+
identity?: string;
|
|
36
|
+
name?: string;
|
|
37
|
+
ttlSeconds?: number;
|
|
38
|
+
now?: () => Date | number;
|
|
39
|
+
video?: LiveKitVideoGrant;
|
|
40
|
+
sip?: LiveKitSipGrant;
|
|
41
|
+
metadata?: string | JsonValue;
|
|
42
|
+
attributes?: Record<string, string>;
|
|
43
|
+
roomConfig?: JsonObject;
|
|
44
|
+
}
|
|
45
|
+
export interface LiveKitClientOptions {
|
|
46
|
+
url?: string;
|
|
47
|
+
apiKey?: string;
|
|
48
|
+
apiSecret?: string;
|
|
49
|
+
env?: Record<string, string | undefined>;
|
|
50
|
+
fetch?: typeof fetch;
|
|
51
|
+
now?: () => Date | number;
|
|
52
|
+
tokenTtlSeconds?: number;
|
|
53
|
+
}
|
|
54
|
+
export interface CreateLiveKitDispatchInput {
|
|
55
|
+
roomName?: string;
|
|
56
|
+
room?: string;
|
|
57
|
+
agentName: string;
|
|
58
|
+
metadata?: string | JsonValue;
|
|
59
|
+
restartPolicy?: "JRP_ON_FAILURE" | "JRP_NEVER" | string;
|
|
60
|
+
}
|
|
61
|
+
export interface DeleteLiveKitDispatchInput {
|
|
62
|
+
roomName?: string;
|
|
63
|
+
room?: string;
|
|
64
|
+
dispatchId: string;
|
|
65
|
+
}
|
|
66
|
+
export interface ListLiveKitDispatchInput {
|
|
67
|
+
roomName?: string;
|
|
68
|
+
room?: string;
|
|
69
|
+
dispatchId?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface LiveKitOutboundTrunkConfig {
|
|
72
|
+
address?: string;
|
|
73
|
+
hostname?: string;
|
|
74
|
+
numbers?: string[];
|
|
75
|
+
metadata?: string;
|
|
76
|
+
destinationCountry?: string;
|
|
77
|
+
destination_country?: string;
|
|
78
|
+
transport?: "SIP_TRANSPORT_AUTO" | "SIP_TRANSPORT_UDP" | "SIP_TRANSPORT_TCP" | "SIP_TRANSPORT_TLS" | string;
|
|
79
|
+
authUsername?: string;
|
|
80
|
+
auth_username?: string;
|
|
81
|
+
authPassword?: string;
|
|
82
|
+
auth_password?: string;
|
|
83
|
+
headersToAttributes?: Record<string, string>;
|
|
84
|
+
headers_to_attributes?: Record<string, string>;
|
|
85
|
+
attributesToHeaders?: Record<string, string>;
|
|
86
|
+
attributes_to_headers?: Record<string, string>;
|
|
87
|
+
fromHost?: string;
|
|
88
|
+
from_host?: string;
|
|
89
|
+
}
|
|
90
|
+
export interface CreateLiveKitSipParticipantInput {
|
|
91
|
+
outboundTrunkId?: string;
|
|
92
|
+
sipTrunkId?: string;
|
|
93
|
+
trunk?: LiveKitOutboundTrunkConfig | JsonObject;
|
|
94
|
+
phoneNumber?: string;
|
|
95
|
+
sipCallTo?: string;
|
|
96
|
+
sipNumber?: string;
|
|
97
|
+
roomName?: string;
|
|
98
|
+
room?: string;
|
|
99
|
+
participantIdentity?: string;
|
|
100
|
+
participantName?: string;
|
|
101
|
+
participantMetadata?: string | JsonValue;
|
|
102
|
+
participantAttributes?: Record<string, string>;
|
|
103
|
+
dtmf?: string;
|
|
104
|
+
playDialtone?: boolean;
|
|
105
|
+
hidePhoneNumber?: boolean;
|
|
106
|
+
headers?: Record<string, string>;
|
|
107
|
+
includeHeaders?: "SIP_NO_HEADERS" | "SIP_X_HEADERS" | "SIP_ALL_HEADERS" | string | number;
|
|
108
|
+
ringingTimeoutSeconds?: number;
|
|
109
|
+
maxCallDurationSeconds?: number;
|
|
110
|
+
krispEnabled?: boolean;
|
|
111
|
+
mediaEncryption?: "SIP_MEDIA_ENCRYPT_DISABLE" | "SIP_MEDIA_ENCRYPT_ALLOW" | "SIP_MEDIA_ENCRYPT_REQUIRE" | string | number;
|
|
112
|
+
waitUntilAnswered?: boolean;
|
|
113
|
+
displayName?: string;
|
|
114
|
+
extra?: JsonObject;
|
|
115
|
+
}
|
|
116
|
+
export interface TransferLiveKitSipParticipantInput {
|
|
117
|
+
roomName?: string;
|
|
118
|
+
room?: string;
|
|
119
|
+
participantIdentity: string;
|
|
120
|
+
transferTo: string;
|
|
121
|
+
playDialtone?: boolean;
|
|
122
|
+
}
|
|
123
|
+
export interface LiveKitToolOptions {
|
|
124
|
+
description?: string;
|
|
125
|
+
needsApproval?: boolean | ApprovalPolicy;
|
|
126
|
+
agentName?: string;
|
|
127
|
+
outboundTrunkId?: string;
|
|
128
|
+
roomPrefix?: string;
|
|
129
|
+
waitUntilAnswered?: boolean;
|
|
130
|
+
client?: LiveKitClientOptions;
|
|
131
|
+
}
|
|
132
|
+
export interface LiveKitConnectionOptions {
|
|
133
|
+
description?: string;
|
|
134
|
+
required?: boolean;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,aAAa,EAAE,iBAAiB,EAAE,oBAAoB,CAAU,CAAC;AACtG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,2BAA2B,EAAE,0BAA0B,CAAU,CAAC"}
|
package/dist/util.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { JsonObject } from "@assemblyline-agents/core";
|
|
2
|
+
export declare function generatedRoomName(prefix: string, seed: string): string;
|
|
3
|
+
export declare function compactJsonObject(input: Record<string, unknown>): JsonObject;
|
|
4
|
+
export declare function publicJson(input: unknown): JsonObject;
|
|
5
|
+
export declare function isJsonObject(value: unknown): value is JsonObject;
|
|
6
|
+
export declare function recordValue(value: unknown): Record<string, unknown> | undefined;
|
|
7
|
+
export declare function valueAt(record: unknown, key: string): unknown;
|
|
8
|
+
export declare function stringFrom(record: unknown, ...keys: string[]): string | undefined;
|
|
9
|
+
export declare function booleanFrom(record: unknown, ...keys: string[]): boolean | undefined;
|
|
10
|
+
export declare function stringValue(value: unknown): string | undefined;
|
|
11
|
+
export declare function requiredValue(value: string | undefined, name: string): string;
|
|
12
|
+
export declare function processEnv(): Record<string, string | undefined>;
|
|
13
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,2BAA2B,CAAC;AAEvE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtE;AAMD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAQ5E;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAWrD;AAmBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAEhE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAE/E;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAQjF;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,GAAG,SAAS,CAOnF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE9D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7E;AAED,wBAAgB,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAE/D"}
|
package/dist/util.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
export function generatedRoomName(prefix, seed) {
|
|
2
|
+
return `${safeRoomToken(prefix)}-${safeRoomToken(seed).slice(0, 48)}`;
|
|
3
|
+
}
|
|
4
|
+
function safeRoomToken(value) {
|
|
5
|
+
return value.trim().toLowerCase().replace(/[^a-z0-9_-]+/gu, "-").replace(/^-+|-+$/gu, "") || "room";
|
|
6
|
+
}
|
|
7
|
+
export function compactJsonObject(input) {
|
|
8
|
+
const out = {};
|
|
9
|
+
for (const [key, value] of Object.entries(input)) {
|
|
10
|
+
if (value === undefined)
|
|
11
|
+
continue;
|
|
12
|
+
const json = toJsonValue(value);
|
|
13
|
+
if (json !== undefined)
|
|
14
|
+
out[key] = json;
|
|
15
|
+
}
|
|
16
|
+
return out;
|
|
17
|
+
}
|
|
18
|
+
export function publicJson(input) {
|
|
19
|
+
if (!isJsonObject(input))
|
|
20
|
+
return {};
|
|
21
|
+
const out = {};
|
|
22
|
+
for (const [key, value] of Object.entries(input)) {
|
|
23
|
+
if (/secret|token|authorization|password|api[_-]?key/iu.test(key))
|
|
24
|
+
out[key] = "[REDACTED]";
|
|
25
|
+
else {
|
|
26
|
+
const json = publicJsonValue(value);
|
|
27
|
+
if (json !== undefined)
|
|
28
|
+
out[key] = json;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return out;
|
|
32
|
+
}
|
|
33
|
+
function publicJsonValue(value) {
|
|
34
|
+
if (Array.isArray(value))
|
|
35
|
+
return value.map((item) => publicJsonValue(item) ?? null);
|
|
36
|
+
if (isJsonObject(value))
|
|
37
|
+
return publicJson(value);
|
|
38
|
+
return primitiveJson(value);
|
|
39
|
+
}
|
|
40
|
+
function toJsonValue(value) {
|
|
41
|
+
if (Array.isArray(value))
|
|
42
|
+
return value.map((item) => toJsonValue(item) ?? null);
|
|
43
|
+
if (isJsonObject(value))
|
|
44
|
+
return compactJsonObject(value);
|
|
45
|
+
return primitiveJson(value);
|
|
46
|
+
}
|
|
47
|
+
function primitiveJson(value) {
|
|
48
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean" || value === null)
|
|
49
|
+
return value;
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
export function isJsonObject(value) {
|
|
53
|
+
return Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
54
|
+
}
|
|
55
|
+
export function recordValue(value) {
|
|
56
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : undefined;
|
|
57
|
+
}
|
|
58
|
+
export function valueAt(record, key) {
|
|
59
|
+
return recordValue(record)?.[key];
|
|
60
|
+
}
|
|
61
|
+
export function stringFrom(record, ...keys) {
|
|
62
|
+
const source = recordValue(record);
|
|
63
|
+
if (!source)
|
|
64
|
+
return undefined;
|
|
65
|
+
for (const key of keys) {
|
|
66
|
+
const value = stringValue(source[key]);
|
|
67
|
+
if (value)
|
|
68
|
+
return value;
|
|
69
|
+
}
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
export function booleanFrom(record, ...keys) {
|
|
73
|
+
const source = recordValue(record);
|
|
74
|
+
if (!source)
|
|
75
|
+
return undefined;
|
|
76
|
+
for (const key of keys) {
|
|
77
|
+
if (typeof source[key] === "boolean")
|
|
78
|
+
return source[key];
|
|
79
|
+
}
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
export function stringValue(value) {
|
|
83
|
+
return typeof value === "string" && value.trim().length > 0 ? value : undefined;
|
|
84
|
+
}
|
|
85
|
+
export function requiredValue(value, name) {
|
|
86
|
+
if (!value?.trim())
|
|
87
|
+
throw new Error(`Missing required LiveKit value: ${name}.`);
|
|
88
|
+
return value.trim();
|
|
89
|
+
}
|
|
90
|
+
export function processEnv() {
|
|
91
|
+
return typeof process === "object" && process?.env ? process.env : {};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@assemblyline-agents/livekit",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": {
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"default": "./dist/index.js"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@assemblyline-agents/core": "0.1.0",
|
|
13
|
+
"@assemblyline-agents/runtime": "0.1.0"
|
|
14
|
+
},
|
|
15
|
+
"description": "Official OpenEve LiveKit voice, telephony, and agent-dispatch plugin.",
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"engines": {
|
|
20
|
+
"node": ">=22.19.0"
|
|
21
|
+
},
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "git+https://github.com/jasonbadeaux/openeve.git",
|
|
26
|
+
"directory": "capabilities/livekit"
|
|
27
|
+
},
|
|
28
|
+
"bugs": {
|
|
29
|
+
"url": "https://github.com/jasonbadeaux/openeve/issues"
|
|
30
|
+
},
|
|
31
|
+
"homepage": "https://github.com/jasonbadeaux/openeve#readme",
|
|
32
|
+
"author": "OpenEve contributors",
|
|
33
|
+
"keywords": [
|
|
34
|
+
"openeve",
|
|
35
|
+
"ai",
|
|
36
|
+
"agents",
|
|
37
|
+
"livekit",
|
|
38
|
+
"voice",
|
|
39
|
+
"telephony",
|
|
40
|
+
"realtime"
|
|
41
|
+
],
|
|
42
|
+
"publishConfig": {
|
|
43
|
+
"access": "public"
|
|
44
|
+
},
|
|
45
|
+
"scripts": {
|
|
46
|
+
"build": "tsc -p tsconfig.json",
|
|
47
|
+
"check": "tsc -p tsconfig.json --noEmit"
|
|
48
|
+
}
|
|
49
|
+
}
|