@livekit/agents 0.1.0 → 0.2.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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +21 -0
- package/LICENSE +201 -0
- package/dist/audio.d.ts +12 -0
- package/dist/audio.d.ts.map +1 -0
- package/dist/audio.js +37 -0
- package/dist/audio.js.map +1 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +68 -8
- package/dist/cli.js.map +1 -1
- package/dist/generator.d.ts +12 -6
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +9 -3
- package/dist/generator.js.map +1 -1
- package/dist/http_server.d.ts +1 -1
- package/dist/http_server.js +0 -3
- package/dist/http_server.js.map +1 -1
- package/dist/index.d.ts +12 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -3
- package/dist/index.js.map +1 -1
- package/dist/ipc/job_executor.d.ts +19 -0
- package/dist/ipc/job_executor.d.ts.map +1 -0
- package/dist/ipc/job_executor.js +8 -0
- package/dist/ipc/job_executor.js.map +1 -0
- package/dist/ipc/job_main.d.ts +7 -4
- package/dist/ipc/job_main.d.ts.map +1 -1
- package/dist/ipc/job_main.js +96 -61
- package/dist/ipc/job_main.js.map +1 -1
- package/dist/ipc/message.d.ts +41 -0
- package/dist/ipc/message.d.ts.map +1 -0
- package/dist/ipc/message.js +2 -0
- package/dist/ipc/message.js.map +1 -0
- package/dist/ipc/proc_job_executor.d.ts +15 -0
- package/dist/ipc/proc_job_executor.d.ts.map +1 -0
- package/dist/ipc/proc_job_executor.js +150 -0
- package/dist/ipc/proc_job_executor.js.map +1 -0
- package/dist/ipc/proc_pool.d.ts +26 -0
- package/dist/ipc/proc_pool.d.ts.map +1 -0
- package/dist/ipc/proc_pool.js +82 -0
- package/dist/ipc/proc_pool.js.map +1 -0
- package/dist/job.d.ts +99 -0
- package/dist/job.d.ts.map +1 -0
- package/dist/job.js +197 -0
- package/dist/job.js.map +1 -0
- package/dist/llm/function_context.d.ts +20 -0
- package/dist/llm/function_context.d.ts.map +1 -0
- package/dist/llm/function_context.js +37 -0
- package/dist/llm/function_context.js.map +1 -0
- package/dist/llm/index.d.ts +3 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +6 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/log.d.ts +12 -1
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +28 -11
- package/dist/log.js.map +1 -1
- package/dist/plugin.js +20 -7
- package/dist/plugin.js.map +1 -1
- package/dist/stt/index.d.ts +1 -1
- package/dist/stt/index.d.ts.map +1 -1
- package/dist/stt/index.js.map +1 -1
- package/dist/stt/stream_adapter.d.ts +2 -11
- package/dist/stt/stream_adapter.d.ts.map +1 -1
- package/dist/stt/stream_adapter.js +47 -33
- package/dist/stt/stream_adapter.js.map +1 -1
- package/dist/stt/stt.d.ts +27 -0
- package/dist/stt/stt.d.ts.map +1 -1
- package/dist/stt/stt.js +32 -5
- package/dist/stt/stt.js.map +1 -1
- package/dist/tts/stream_adapter.d.ts +4 -11
- package/dist/tts/stream_adapter.d.ts.map +1 -1
- package/dist/tts/stream_adapter.js +66 -32
- package/dist/tts/stream_adapter.js.map +1 -1
- package/dist/tts/tts.d.ts +10 -0
- package/dist/tts/tts.d.ts.map +1 -1
- package/dist/tts/tts.js +48 -7
- package/dist/tts/tts.js.map +1 -1
- package/dist/utils.d.ts +32 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +114 -6
- package/dist/utils.js.map +1 -1
- package/dist/vad.d.ts +29 -0
- package/dist/vad.d.ts.map +1 -1
- package/dist/vad.js.map +1 -1
- package/dist/worker.d.ts +67 -50
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +379 -214
- package/dist/worker.js.map +1 -1
- package/package.json +9 -9
- package/src/audio.ts +62 -0
- package/src/cli.ts +72 -8
- package/src/generator.ts +13 -7
- package/src/index.ts +13 -3
- package/src/ipc/job_executor.ts +25 -0
- package/src/ipc/job_main.ts +134 -61
- package/src/ipc/message.ts +39 -0
- package/src/ipc/proc_job_executor.ts +162 -0
- package/src/ipc/proc_pool.ts +108 -0
- package/src/job.ts +258 -0
- package/src/llm/function_context.ts +61 -0
- package/src/llm/index.ts +11 -0
- package/src/log.ts +40 -8
- package/src/stt/index.ts +1 -1
- package/src/stt/stream_adapter.ts +32 -32
- package/src/stt/stt.ts +27 -0
- package/src/tts/stream_adapter.ts +32 -31
- package/src/tts/tts.ts +10 -0
- package/src/utils.ts +125 -3
- package/src/vad.ts +29 -0
- package/src/worker.ts +419 -170
- package/tsconfig.json +6 -0
- package/dist/ipc/job_process.d.ts +0 -22
- package/dist/ipc/job_process.d.ts.map +0 -1
- package/dist/ipc/job_process.js +0 -73
- package/dist/ipc/job_process.js.map +0 -1
- package/dist/ipc/protocol.d.ts +0 -40
- package/dist/ipc/protocol.d.ts.map +0 -1
- package/dist/ipc/protocol.js +0 -14
- package/dist/ipc/protocol.js.map +0 -1
- package/dist/job_context.d.ts +0 -16
- package/dist/job_context.d.ts.map +0 -1
- package/dist/job_context.js +0 -31
- package/dist/job_context.js.map +0 -1
- package/dist/job_request.d.ts +0 -42
- package/dist/job_request.d.ts.map +0 -1
- package/dist/job_request.js +0 -79
- package/dist/job_request.js.map +0 -1
- package/src/ipc/job_process.ts +0 -96
- package/src/ipc/protocol.ts +0 -51
- package/src/job_context.ts +0 -49
- package/src/job_request.ts +0 -118
package/dist/ipc/job_main.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
/// <reference types="node"
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { ChildProcess } from 'child_process';
|
|
3
|
+
type StartArgs = {
|
|
4
|
+
agentFile: string;
|
|
5
|
+
};
|
|
6
|
+
export declare const runProcess: (args: StartArgs) => ChildProcess;
|
|
7
|
+
export {};
|
|
5
8
|
//# sourceMappingURL=job_main.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job_main.d.ts","sourceRoot":"","sources":["../../src/ipc/job_main.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"job_main.d.ts","sourceRoot":"","sources":["../../src/ipc/job_main.ts"],"names":[],"mappings":";AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAelD,KAAK,SAAS,GAAG;IACf,SAAS,EAAE,MAAM,CAAC;CAEnB,CAAC;AAOF,eAAO,MAAM,UAAU,SAAU,SAAS,KAAG,YAE5C,CAAC"}
|
package/dist/ipc/job_main.js
CHANGED
|
@@ -1,77 +1,112 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2024 LiveKit, Inc.
|
|
2
2
|
//
|
|
3
3
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
import {
|
|
5
|
-
import { Room } from '@livekit/rtc-node';
|
|
4
|
+
import { Room, RoomEvent } from '@livekit/rtc-node';
|
|
6
5
|
import { fork } from 'child_process';
|
|
7
6
|
import { EventEmitter, once } from 'events';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
import { JobContext } from '../job.js';
|
|
9
|
+
import { JobProcess } from '../job.js';
|
|
10
|
+
import { initializeLogger, log } from '../log.js';
|
|
11
|
+
import { defaultInitializeProcessFunc } from '../worker.js';
|
|
12
|
+
const ORPHANED_TIMEOUT = 15 * 1000;
|
|
13
|
+
export const runProcess = (args) => {
|
|
14
|
+
return fork(fileURLToPath(import.meta.url), [args.agentFile]);
|
|
15
|
+
};
|
|
16
|
+
const startJob = (proc, func, info, closeEvent, logger) => {
|
|
17
|
+
let connect = false;
|
|
18
|
+
let shutdown = false;
|
|
19
|
+
const room = new Room();
|
|
20
|
+
room.on(RoomEvent.Disconnected, () => {
|
|
21
|
+
closeEvent.emit('close', false);
|
|
22
|
+
});
|
|
23
|
+
const onConnect = () => {
|
|
24
|
+
connect = true;
|
|
25
|
+
};
|
|
26
|
+
const onShutdown = (reason) => {
|
|
27
|
+
shutdown = true;
|
|
28
|
+
closeEvent.emit('close', true, reason);
|
|
29
|
+
};
|
|
30
|
+
const ctx = new JobContext(proc, info, room, onConnect, onShutdown);
|
|
31
|
+
const task = new Promise(async () => {
|
|
32
|
+
const unconnectedTimeout = setTimeout(() => {
|
|
33
|
+
if (!(connect || shutdown)) {
|
|
34
|
+
logger.warn('room not connect after job_entry was called after 10 seconds, ', 'did you forget to call ctx.connect()?');
|
|
35
|
+
}
|
|
36
|
+
}, 10000);
|
|
37
|
+
func(ctx).finally(() => clearTimeout(unconnectedTimeout));
|
|
38
|
+
await once(closeEvent, 'close').then((close) => {
|
|
39
|
+
logger.debug('shutting down');
|
|
40
|
+
process.send({ case: 'exiting', value: { reason: close[1] } });
|
|
41
|
+
});
|
|
42
|
+
await room.disconnect();
|
|
43
|
+
logger.debug('disconnected from room');
|
|
44
|
+
const shutdownTasks = [];
|
|
45
|
+
for (const callback of ctx.shutdownCallbacks) {
|
|
46
|
+
shutdownTasks.push(callback());
|
|
47
|
+
}
|
|
48
|
+
await Promise.all(shutdownTasks).catch(() => logger.error('error while shutting down the job'));
|
|
49
|
+
process.send({ case: 'done' });
|
|
50
|
+
process.exit();
|
|
51
|
+
});
|
|
52
|
+
return { ctx, task };
|
|
13
53
|
};
|
|
14
54
|
if (process.send) {
|
|
15
55
|
// process.argv:
|
|
16
56
|
// [0] `node'
|
|
17
57
|
// [1] import.meta.filename
|
|
18
|
-
// [2]
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const args = msg.message.value;
|
|
24
|
-
const room = new Room();
|
|
25
|
-
const closeEvent = new EventEmitter();
|
|
26
|
-
let shuttingDown = false;
|
|
27
|
-
let closed = false;
|
|
28
|
-
process.on('message', (msg) => {
|
|
29
|
-
if (msg.type === IPC_MESSAGE.ShutdownRequest) {
|
|
30
|
-
shuttingDown = true;
|
|
31
|
-
closed = true;
|
|
32
|
-
closeEvent.emit('close');
|
|
33
|
-
}
|
|
34
|
-
else if (msg.type === IPC_MESSAGE.Ping) {
|
|
35
|
-
process.send({
|
|
36
|
-
type: IPC_MESSAGE.Pong,
|
|
37
|
-
lastTimestamp: msg.timestamp,
|
|
38
|
-
timestamp: Date.now(),
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
});
|
|
58
|
+
// [2] import.meta.filename of function containing entry file
|
|
59
|
+
const agent = await import(process.argv[2]).then((agent) => agent.default);
|
|
60
|
+
if (!agent.prewarm) {
|
|
61
|
+
agent.prewarm = defaultInitializeProcessFunc;
|
|
62
|
+
}
|
|
42
63
|
// don't do anything on C-c
|
|
64
|
+
// this is handled in cli, triggering a termination of all child processes at once.
|
|
43
65
|
process.on('SIGINT', () => { });
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
66
|
+
await once(process, 'message').then(([msg]) => {
|
|
67
|
+
if (msg.case !== 'initializeRequest') {
|
|
68
|
+
throw new Error('first message must be InitializeRequest');
|
|
69
|
+
}
|
|
70
|
+
initializeLogger(msg.value.loggerOptions);
|
|
71
|
+
});
|
|
72
|
+
const proc = new JobProcess();
|
|
73
|
+
let logger = log().child({ pid: proc.pid });
|
|
74
|
+
logger.debug('initializing job runner');
|
|
75
|
+
agent.prewarm(proc);
|
|
76
|
+
logger.debug('job runner initialized');
|
|
77
|
+
process.send({ case: 'initializeResponse' });
|
|
78
|
+
let job = undefined;
|
|
79
|
+
const closeEvent = new EventEmitter();
|
|
80
|
+
const orphanedTimeout = setTimeout(() => {
|
|
81
|
+
logger.warn('process orphaned, shutting down');
|
|
82
|
+
process.exit();
|
|
83
|
+
}, ORPHANED_TIMEOUT);
|
|
84
|
+
process.on('message', (msg) => {
|
|
85
|
+
switch (msg.case) {
|
|
86
|
+
case 'pingRequest': {
|
|
87
|
+
orphanedTimeout.refresh();
|
|
88
|
+
process.send({
|
|
89
|
+
case: 'pongResponse',
|
|
90
|
+
value: { lastTimestamp: msg.value.timestamp, timestamp: Date.now() },
|
|
91
|
+
});
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
case 'startJobRequest': {
|
|
95
|
+
if (job) {
|
|
96
|
+
throw new Error('job task already running');
|
|
97
|
+
}
|
|
98
|
+
logger = logger.child({ jobID: msg.value.runningJob.job.id });
|
|
99
|
+
job = startJob(proc, agent.entry, msg.value.runningJob, closeEvent, logger);
|
|
100
|
+
logger.debug('job started');
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
case 'shutdownRequest': {
|
|
104
|
+
if (!job) {
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
closeEvent.emit('close', '');
|
|
108
|
+
}
|
|
53
109
|
}
|
|
54
|
-
};
|
|
55
|
-
new Promise(() => {
|
|
56
|
-
conn
|
|
57
|
-
.then(() => {
|
|
58
|
-
if (!closed)
|
|
59
|
-
start();
|
|
60
|
-
})
|
|
61
|
-
.catch((err) => {
|
|
62
|
-
if (!closed)
|
|
63
|
-
process.send({ type: IPC_MESSAGE.StartJobResponse, err });
|
|
64
|
-
});
|
|
65
110
|
});
|
|
66
|
-
await once(closeEvent, 'close');
|
|
67
|
-
log.debug('disconnecting from room');
|
|
68
|
-
await room.disconnect();
|
|
69
|
-
if (shuttingDown) {
|
|
70
|
-
process.send({ type: IPC_MESSAGE.ShutdownResponse });
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
process.send({ type: IPC_MESSAGE.UserExit });
|
|
74
|
-
}
|
|
75
|
-
process.exit();
|
|
76
111
|
}
|
|
77
112
|
//# sourceMappingURL=job_main.js.map
|
package/dist/ipc/job_main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job_main.js","sourceRoot":"","sources":["../../src/ipc/job_main.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,sCAAsC;AACtC,OAAO,
|
|
1
|
+
{"version":3,"file":"job_main.js","sourceRoot":"","sources":["../../src/ipc/job_main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { RunningJobInfo } from '../job.js';
|
|
2
|
+
import type { LoggerOptions } from '../log.js';
|
|
3
|
+
export type IPCMessage = {
|
|
4
|
+
case: 'initializeRequest';
|
|
5
|
+
value: {
|
|
6
|
+
loggerOptions: LoggerOptions;
|
|
7
|
+
};
|
|
8
|
+
} | {
|
|
9
|
+
case: 'initializeResponse';
|
|
10
|
+
value: undefined;
|
|
11
|
+
} | {
|
|
12
|
+
case: 'pingRequest';
|
|
13
|
+
value: {
|
|
14
|
+
timestamp: number;
|
|
15
|
+
};
|
|
16
|
+
} | {
|
|
17
|
+
case: 'pongResponse';
|
|
18
|
+
value: {
|
|
19
|
+
lastTimestamp: number;
|
|
20
|
+
timestamp: number;
|
|
21
|
+
};
|
|
22
|
+
} | {
|
|
23
|
+
case: 'startJobRequest';
|
|
24
|
+
value: {
|
|
25
|
+
runningJob: RunningJobInfo;
|
|
26
|
+
};
|
|
27
|
+
} | {
|
|
28
|
+
case: 'shutdownRequest';
|
|
29
|
+
value: {
|
|
30
|
+
reason?: string;
|
|
31
|
+
};
|
|
32
|
+
} | {
|
|
33
|
+
case: 'exiting';
|
|
34
|
+
value: {
|
|
35
|
+
reason?: string;
|
|
36
|
+
};
|
|
37
|
+
} | {
|
|
38
|
+
case: 'done';
|
|
39
|
+
value: undefined;
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/ipc/message.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE;QAAE,aAAa,EAAE,aAAa,CAAA;KAAE,CAAC;CACzC,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,KAAK,EAAE,SAAS,CAAC;CAClB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9B,GACD;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CACrD,GACD;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE;QAAE,UAAU,EAAE,cAAc,CAAA;KAAE,CAAC;CACvC,GACD;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/ipc/message.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { RunningJobInfo } from '../job.js';
|
|
2
|
+
import { JobExecutor } from './job_executor.js';
|
|
3
|
+
export declare class ProcJobExecutor extends JobExecutor {
|
|
4
|
+
#private;
|
|
5
|
+
constructor(agent: string, initializeTimeout: number, closeTimeout: number);
|
|
6
|
+
get started(): boolean;
|
|
7
|
+
get runningJob(): RunningJobInfo | undefined;
|
|
8
|
+
start(): Promise<void>;
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
join(): Promise<void>;
|
|
11
|
+
initialize(): Promise<void>;
|
|
12
|
+
close(): Promise<void>;
|
|
13
|
+
launchJob(info: RunningJobInfo): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=proc_job_executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proc_job_executor.d.ts","sourceRoot":"","sources":["../../src/ipc/proc_job_executor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAIhD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,qBAAa,eAAgB,SAAQ,WAAW;;gBAYlC,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAS1E,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,UAAU,IAAI,cAAc,GAAG,SAAS,CAE3C;IAEK,KAAK;IAiBL,GAAG;IAiDH,IAAI;IAQJ,UAAU;IAgBV,KAAK;IAuBL,SAAS,CAAC,IAAI,EAAE,cAAc;CAOrC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _ProcJobExecutor_opts, _ProcJobExecutor_started, _ProcJobExecutor_closing, _ProcJobExecutor_runningJob, _ProcJobExecutor_proc, _ProcJobExecutor_pingInterval, _ProcJobExecutor_pongTimeout, _ProcJobExecutor_init, _ProcJobExecutor_join, _ProcJobExecutor_logger;
|
|
13
|
+
import { once } from 'events';
|
|
14
|
+
import { log, loggerOptions } from '../log.js';
|
|
15
|
+
import { Future } from '../utils.js';
|
|
16
|
+
import { JobExecutor } from './job_executor.js';
|
|
17
|
+
export class ProcJobExecutor extends JobExecutor {
|
|
18
|
+
constructor(agent, initializeTimeout, closeTimeout) {
|
|
19
|
+
super();
|
|
20
|
+
_ProcJobExecutor_opts.set(this, void 0);
|
|
21
|
+
_ProcJobExecutor_started.set(this, false);
|
|
22
|
+
_ProcJobExecutor_closing.set(this, false);
|
|
23
|
+
_ProcJobExecutor_runningJob.set(this, undefined);
|
|
24
|
+
_ProcJobExecutor_proc.set(this, void 0);
|
|
25
|
+
_ProcJobExecutor_pingInterval.set(this, void 0);
|
|
26
|
+
_ProcJobExecutor_pongTimeout.set(this, void 0);
|
|
27
|
+
_ProcJobExecutor_init.set(this, new Future());
|
|
28
|
+
_ProcJobExecutor_join.set(this, new Future());
|
|
29
|
+
_ProcJobExecutor_logger.set(this, log().child({ runningJob: __classPrivateFieldGet(this, _ProcJobExecutor_runningJob, "f") }));
|
|
30
|
+
__classPrivateFieldSet(this, _ProcJobExecutor_opts, {
|
|
31
|
+
agent,
|
|
32
|
+
initializeTimeout,
|
|
33
|
+
closeTimeout,
|
|
34
|
+
}, "f");
|
|
35
|
+
}
|
|
36
|
+
get started() {
|
|
37
|
+
return __classPrivateFieldGet(this, _ProcJobExecutor_started, "f");
|
|
38
|
+
}
|
|
39
|
+
get runningJob() {
|
|
40
|
+
return __classPrivateFieldGet(this, _ProcJobExecutor_runningJob, "f");
|
|
41
|
+
}
|
|
42
|
+
async start() {
|
|
43
|
+
if (__classPrivateFieldGet(this, _ProcJobExecutor_started, "f")) {
|
|
44
|
+
throw new Error('runner already started');
|
|
45
|
+
}
|
|
46
|
+
else if (__classPrivateFieldGet(this, _ProcJobExecutor_closing, "f")) {
|
|
47
|
+
throw new Error('runner is closed');
|
|
48
|
+
}
|
|
49
|
+
__classPrivateFieldSet(this, _ProcJobExecutor_proc, await import('./job_main.js').then((m) => m.runProcess({
|
|
50
|
+
agentFile: __classPrivateFieldGet(this, _ProcJobExecutor_opts, "f").agent,
|
|
51
|
+
})), "f");
|
|
52
|
+
__classPrivateFieldSet(this, _ProcJobExecutor_started, true, "f");
|
|
53
|
+
this.run();
|
|
54
|
+
}
|
|
55
|
+
async run() {
|
|
56
|
+
await __classPrivateFieldGet(this, _ProcJobExecutor_init, "f").await;
|
|
57
|
+
__classPrivateFieldSet(this, _ProcJobExecutor_pingInterval, setInterval(() => {
|
|
58
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_proc, "f").send({ case: 'pingRequest', value: { timestamp: Date.now() } });
|
|
59
|
+
}, this.PING_INTERVAL), "f");
|
|
60
|
+
__classPrivateFieldSet(this, _ProcJobExecutor_pongTimeout, setTimeout(() => {
|
|
61
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_logger, "f").warn('job is unresponsive');
|
|
62
|
+
clearTimeout(__classPrivateFieldGet(this, _ProcJobExecutor_pongTimeout, "f"));
|
|
63
|
+
clearInterval(__classPrivateFieldGet(this, _ProcJobExecutor_pingInterval, "f"));
|
|
64
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_proc, "f").kill();
|
|
65
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_join, "f").resolve();
|
|
66
|
+
}, this.PING_TIMEOUT), "f");
|
|
67
|
+
const listener = (msg) => {
|
|
68
|
+
var _a;
|
|
69
|
+
switch (msg.case) {
|
|
70
|
+
case 'pongResponse': {
|
|
71
|
+
const delay = Date.now() - msg.value.timestamp;
|
|
72
|
+
if (delay > this.HIGH_PING_THRESHOLD) {
|
|
73
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_logger, "f").child({ delay }).warn('job executor is unresponsive');
|
|
74
|
+
}
|
|
75
|
+
(_a = __classPrivateFieldGet(this, _ProcJobExecutor_pongTimeout, "f")) === null || _a === void 0 ? void 0 : _a.refresh();
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
case 'exiting': {
|
|
79
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_logger, "f").child({ reason: msg.value.reason }).debug('job exiting');
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
case 'done': {
|
|
83
|
+
__classPrivateFieldSet(this, _ProcJobExecutor_closing, true, "f");
|
|
84
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_proc, "f").off('message', listener);
|
|
85
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_join, "f").resolve();
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_proc, "f").on('message', listener);
|
|
91
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_proc, "f").on('error', (err) => {
|
|
92
|
+
if (__classPrivateFieldGet(this, _ProcJobExecutor_closing, "f"))
|
|
93
|
+
return;
|
|
94
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_logger, "f").child({ err }).warn('job process exited unexpectedly');
|
|
95
|
+
clearTimeout(__classPrivateFieldGet(this, _ProcJobExecutor_pongTimeout, "f"));
|
|
96
|
+
clearInterval(__classPrivateFieldGet(this, _ProcJobExecutor_pingInterval, "f"));
|
|
97
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_join, "f").resolve();
|
|
98
|
+
});
|
|
99
|
+
await __classPrivateFieldGet(this, _ProcJobExecutor_join, "f").await;
|
|
100
|
+
}
|
|
101
|
+
async join() {
|
|
102
|
+
if (!__classPrivateFieldGet(this, _ProcJobExecutor_started, "f")) {
|
|
103
|
+
throw new Error('runner not started');
|
|
104
|
+
}
|
|
105
|
+
await __classPrivateFieldGet(this, _ProcJobExecutor_join, "f").await;
|
|
106
|
+
}
|
|
107
|
+
async initialize() {
|
|
108
|
+
const timer = setTimeout(() => {
|
|
109
|
+
const err = new Error('runner initialization timed out');
|
|
110
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_init, "f").reject(err);
|
|
111
|
+
throw err;
|
|
112
|
+
}, __classPrivateFieldGet(this, _ProcJobExecutor_opts, "f").initializeTimeout);
|
|
113
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_proc, "f").send({ case: 'initializeRequest', value: { loggerOptions } });
|
|
114
|
+
await once(__classPrivateFieldGet(this, _ProcJobExecutor_proc, "f"), 'message').then(([msg]) => {
|
|
115
|
+
clearTimeout(timer);
|
|
116
|
+
if (msg.case !== 'initializeResponse') {
|
|
117
|
+
throw new Error('first message must be InitializeResponse');
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_init, "f").resolve();
|
|
121
|
+
}
|
|
122
|
+
async close() {
|
|
123
|
+
if (!__classPrivateFieldGet(this, _ProcJobExecutor_started, "f")) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
__classPrivateFieldSet(this, _ProcJobExecutor_closing, true, "f");
|
|
127
|
+
if (!__classPrivateFieldGet(this, _ProcJobExecutor_runningJob, "f")) {
|
|
128
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_proc, "f").kill();
|
|
129
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_join, "f").resolve();
|
|
130
|
+
}
|
|
131
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_proc, "f").send({ case: 'shutdownRequest' });
|
|
132
|
+
const timer = setTimeout(() => {
|
|
133
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_logger, "f").error('job shutdown is taking too much time');
|
|
134
|
+
}, __classPrivateFieldGet(this, _ProcJobExecutor_opts, "f").closeTimeout);
|
|
135
|
+
await __classPrivateFieldGet(this, _ProcJobExecutor_join, "f").await.then(() => {
|
|
136
|
+
clearTimeout(timer);
|
|
137
|
+
clearTimeout(__classPrivateFieldGet(this, _ProcJobExecutor_pongTimeout, "f"));
|
|
138
|
+
clearInterval(__classPrivateFieldGet(this, _ProcJobExecutor_pingInterval, "f"));
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
async launchJob(info) {
|
|
142
|
+
if (__classPrivateFieldGet(this, _ProcJobExecutor_runningJob, "f")) {
|
|
143
|
+
throw new Error('executor already has a running job');
|
|
144
|
+
}
|
|
145
|
+
__classPrivateFieldSet(this, _ProcJobExecutor_runningJob, info, "f");
|
|
146
|
+
__classPrivateFieldGet(this, _ProcJobExecutor_proc, "f").send({ case: 'startJobRequest', value: { runningJob: info } });
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
_ProcJobExecutor_opts = new WeakMap(), _ProcJobExecutor_started = new WeakMap(), _ProcJobExecutor_closing = new WeakMap(), _ProcJobExecutor_runningJob = new WeakMap(), _ProcJobExecutor_proc = new WeakMap(), _ProcJobExecutor_pingInterval = new WeakMap(), _ProcJobExecutor_pongTimeout = new WeakMap(), _ProcJobExecutor_init = new WeakMap(), _ProcJobExecutor_join = new WeakMap(), _ProcJobExecutor_logger = new WeakMap();
|
|
150
|
+
//# sourceMappingURL=proc_job_executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proc_job_executor.js","sourceRoot":"","sources":["../../src/ipc/proc_job_executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { RunningJobInfo } from '../job.js';
|
|
2
|
+
import { Mutex, Queue } from '../utils.js';
|
|
3
|
+
import type { JobExecutor } from './job_executor.js';
|
|
4
|
+
export declare class ProcPool {
|
|
5
|
+
agent: string;
|
|
6
|
+
initializeTimeout: number;
|
|
7
|
+
closeTimeout: number;
|
|
8
|
+
executors: JobExecutor[];
|
|
9
|
+
tasks: Promise<void>[];
|
|
10
|
+
started: boolean;
|
|
11
|
+
closed: boolean;
|
|
12
|
+
controller: AbortController;
|
|
13
|
+
initMutex: Mutex;
|
|
14
|
+
procMutex: Mutex;
|
|
15
|
+
procUnlock?: () => void;
|
|
16
|
+
warmedProcQueue: Queue<JobExecutor>;
|
|
17
|
+
constructor(agent: string, numIdleProcesses: number, initializeTimeout: number, closeTimeout: number);
|
|
18
|
+
get processes(): JobExecutor[];
|
|
19
|
+
getByJobId(id: string): JobExecutor | null;
|
|
20
|
+
launchJob(info: RunningJobInfo): Promise<void>;
|
|
21
|
+
procWatchTask(): Promise<void>;
|
|
22
|
+
start(): void;
|
|
23
|
+
run(signal: AbortSignal): Promise<void>;
|
|
24
|
+
close(): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=proc_pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proc_pool.d.ts","sourceRoot":"","sources":["../../src/ipc/proc_pool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,qBAAa,QAAQ;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,WAAW,EAAE,CAAM;IAC9B,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAM;IAC5B,OAAO,UAAS;IAChB,MAAM,UAAS;IACf,UAAU,kBAAyB;IACnC,SAAS,QAAe;IACxB,SAAS,EAAE,KAAK,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,eAAe,qBAA4B;gBAGzC,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,MAAM;IAQtB,IAAI,SAAS,IAAI,WAAW,EAAE,CAE7B;IAED,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAIpC,SAAS,CAAC,IAAI,EAAE,cAAc;IAS9B,aAAa;IA6BnB,KAAK;IASC,GAAG,CAAC,MAAM,EAAE,WAAW;IASvB,KAAK;CASZ"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Mutex, Queue } from '../utils.js';
|
|
2
|
+
import { ProcJobExecutor } from './proc_job_executor.js';
|
|
3
|
+
export class ProcPool {
|
|
4
|
+
constructor(agent, numIdleProcesses, initializeTimeout, closeTimeout) {
|
|
5
|
+
this.executors = [];
|
|
6
|
+
this.tasks = [];
|
|
7
|
+
this.started = false;
|
|
8
|
+
this.closed = false;
|
|
9
|
+
this.controller = new AbortController();
|
|
10
|
+
this.initMutex = new Mutex();
|
|
11
|
+
this.warmedProcQueue = new Queue();
|
|
12
|
+
this.agent = agent;
|
|
13
|
+
this.procMutex = new Mutex(numIdleProcesses);
|
|
14
|
+
this.initializeTimeout = initializeTimeout;
|
|
15
|
+
this.closeTimeout = closeTimeout;
|
|
16
|
+
}
|
|
17
|
+
get processes() {
|
|
18
|
+
return this.executors;
|
|
19
|
+
}
|
|
20
|
+
getByJobId(id) {
|
|
21
|
+
return this.executors.find((x) => x.runningJob && x.runningJob.job.id === id) || null;
|
|
22
|
+
}
|
|
23
|
+
async launchJob(info) {
|
|
24
|
+
const proc = await this.warmedProcQueue.get();
|
|
25
|
+
if (this.procUnlock) {
|
|
26
|
+
this.procUnlock();
|
|
27
|
+
this.procUnlock = undefined;
|
|
28
|
+
}
|
|
29
|
+
await proc.launchJob(info);
|
|
30
|
+
}
|
|
31
|
+
async procWatchTask() {
|
|
32
|
+
const proc = new ProcJobExecutor(this.agent, this.initializeTimeout, this.closeTimeout);
|
|
33
|
+
try {
|
|
34
|
+
this.executors.push(proc);
|
|
35
|
+
const unlock = await this.initMutex.lock();
|
|
36
|
+
if (this.closed) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
await proc.start();
|
|
40
|
+
try {
|
|
41
|
+
await proc.initialize();
|
|
42
|
+
await this.warmedProcQueue.put(proc);
|
|
43
|
+
}
|
|
44
|
+
catch (_a) {
|
|
45
|
+
if (this.procUnlock) {
|
|
46
|
+
this.procUnlock();
|
|
47
|
+
this.procUnlock = undefined;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
unlock();
|
|
51
|
+
await proc.join();
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
this.executors.splice(this.executors.indexOf(proc));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
start() {
|
|
58
|
+
if (this.started) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
this.started = true;
|
|
62
|
+
this.run(this.controller.signal);
|
|
63
|
+
}
|
|
64
|
+
async run(signal) {
|
|
65
|
+
while (!signal.aborted) {
|
|
66
|
+
this.procUnlock = await this.procMutex.lock();
|
|
67
|
+
const task = this.procWatchTask();
|
|
68
|
+
this.tasks.push(task);
|
|
69
|
+
task.finally(() => this.tasks.splice(this.tasks.indexOf(task)));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async close() {
|
|
73
|
+
if (!this.started) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
this.closed = true;
|
|
77
|
+
this.controller.abort();
|
|
78
|
+
this.executors.forEach((e) => e.close());
|
|
79
|
+
await Promise.allSettled(this.tasks);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=proc_pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proc_pool.js","sourceRoot":"","sources":["../../src/ipc/proc_pool.ts"],"names":[],"mappings":"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"}
|