@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.
Files changed (133) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +21 -0
  3. package/LICENSE +201 -0
  4. package/dist/audio.d.ts +12 -0
  5. package/dist/audio.d.ts.map +1 -0
  6. package/dist/audio.js +37 -0
  7. package/dist/audio.js.map +1 -0
  8. package/dist/cli.d.ts +11 -0
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +68 -8
  11. package/dist/cli.js.map +1 -1
  12. package/dist/generator.d.ts +12 -6
  13. package/dist/generator.d.ts.map +1 -1
  14. package/dist/generator.js +9 -3
  15. package/dist/generator.js.map +1 -1
  16. package/dist/http_server.d.ts +1 -1
  17. package/dist/http_server.js +0 -3
  18. package/dist/http_server.js.map +1 -1
  19. package/dist/index.d.ts +12 -3
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +12 -3
  22. package/dist/index.js.map +1 -1
  23. package/dist/ipc/job_executor.d.ts +19 -0
  24. package/dist/ipc/job_executor.d.ts.map +1 -0
  25. package/dist/ipc/job_executor.js +8 -0
  26. package/dist/ipc/job_executor.js.map +1 -0
  27. package/dist/ipc/job_main.d.ts +7 -4
  28. package/dist/ipc/job_main.d.ts.map +1 -1
  29. package/dist/ipc/job_main.js +96 -61
  30. package/dist/ipc/job_main.js.map +1 -1
  31. package/dist/ipc/message.d.ts +41 -0
  32. package/dist/ipc/message.d.ts.map +1 -0
  33. package/dist/ipc/message.js +2 -0
  34. package/dist/ipc/message.js.map +1 -0
  35. package/dist/ipc/proc_job_executor.d.ts +15 -0
  36. package/dist/ipc/proc_job_executor.d.ts.map +1 -0
  37. package/dist/ipc/proc_job_executor.js +150 -0
  38. package/dist/ipc/proc_job_executor.js.map +1 -0
  39. package/dist/ipc/proc_pool.d.ts +26 -0
  40. package/dist/ipc/proc_pool.d.ts.map +1 -0
  41. package/dist/ipc/proc_pool.js +82 -0
  42. package/dist/ipc/proc_pool.js.map +1 -0
  43. package/dist/job.d.ts +99 -0
  44. package/dist/job.d.ts.map +1 -0
  45. package/dist/job.js +197 -0
  46. package/dist/job.js.map +1 -0
  47. package/dist/llm/function_context.d.ts +20 -0
  48. package/dist/llm/function_context.d.ts.map +1 -0
  49. package/dist/llm/function_context.js +37 -0
  50. package/dist/llm/function_context.js.map +1 -0
  51. package/dist/llm/index.d.ts +3 -0
  52. package/dist/llm/index.d.ts.map +1 -0
  53. package/dist/llm/index.js +6 -0
  54. package/dist/llm/index.js.map +1 -0
  55. package/dist/log.d.ts +12 -1
  56. package/dist/log.d.ts.map +1 -1
  57. package/dist/log.js +28 -11
  58. package/dist/log.js.map +1 -1
  59. package/dist/plugin.js +20 -7
  60. package/dist/plugin.js.map +1 -1
  61. package/dist/stt/index.d.ts +1 -1
  62. package/dist/stt/index.d.ts.map +1 -1
  63. package/dist/stt/index.js.map +1 -1
  64. package/dist/stt/stream_adapter.d.ts +2 -11
  65. package/dist/stt/stream_adapter.d.ts.map +1 -1
  66. package/dist/stt/stream_adapter.js +47 -33
  67. package/dist/stt/stream_adapter.js.map +1 -1
  68. package/dist/stt/stt.d.ts +27 -0
  69. package/dist/stt/stt.d.ts.map +1 -1
  70. package/dist/stt/stt.js +32 -5
  71. package/dist/stt/stt.js.map +1 -1
  72. package/dist/tts/stream_adapter.d.ts +4 -11
  73. package/dist/tts/stream_adapter.d.ts.map +1 -1
  74. package/dist/tts/stream_adapter.js +66 -32
  75. package/dist/tts/stream_adapter.js.map +1 -1
  76. package/dist/tts/tts.d.ts +10 -0
  77. package/dist/tts/tts.d.ts.map +1 -1
  78. package/dist/tts/tts.js +48 -7
  79. package/dist/tts/tts.js.map +1 -1
  80. package/dist/utils.d.ts +32 -0
  81. package/dist/utils.d.ts.map +1 -1
  82. package/dist/utils.js +114 -6
  83. package/dist/utils.js.map +1 -1
  84. package/dist/vad.d.ts +29 -0
  85. package/dist/vad.d.ts.map +1 -1
  86. package/dist/vad.js.map +1 -1
  87. package/dist/worker.d.ts +67 -50
  88. package/dist/worker.d.ts.map +1 -1
  89. package/dist/worker.js +379 -214
  90. package/dist/worker.js.map +1 -1
  91. package/package.json +9 -9
  92. package/src/audio.ts +62 -0
  93. package/src/cli.ts +72 -8
  94. package/src/generator.ts +13 -7
  95. package/src/index.ts +13 -3
  96. package/src/ipc/job_executor.ts +25 -0
  97. package/src/ipc/job_main.ts +134 -61
  98. package/src/ipc/message.ts +39 -0
  99. package/src/ipc/proc_job_executor.ts +162 -0
  100. package/src/ipc/proc_pool.ts +108 -0
  101. package/src/job.ts +258 -0
  102. package/src/llm/function_context.ts +61 -0
  103. package/src/llm/index.ts +11 -0
  104. package/src/log.ts +40 -8
  105. package/src/stt/index.ts +1 -1
  106. package/src/stt/stream_adapter.ts +32 -32
  107. package/src/stt/stt.ts +27 -0
  108. package/src/tts/stream_adapter.ts +32 -31
  109. package/src/tts/tts.ts +10 -0
  110. package/src/utils.ts +125 -3
  111. package/src/vad.ts +29 -0
  112. package/src/worker.ts +419 -170
  113. package/tsconfig.json +6 -0
  114. package/dist/ipc/job_process.d.ts +0 -22
  115. package/dist/ipc/job_process.d.ts.map +0 -1
  116. package/dist/ipc/job_process.js +0 -73
  117. package/dist/ipc/job_process.js.map +0 -1
  118. package/dist/ipc/protocol.d.ts +0 -40
  119. package/dist/ipc/protocol.d.ts.map +0 -1
  120. package/dist/ipc/protocol.js +0 -14
  121. package/dist/ipc/protocol.js.map +0 -1
  122. package/dist/job_context.d.ts +0 -16
  123. package/dist/job_context.d.ts.map +0 -1
  124. package/dist/job_context.js +0 -31
  125. package/dist/job_context.js.map +0 -1
  126. package/dist/job_request.d.ts +0 -42
  127. package/dist/job_request.d.ts.map +0 -1
  128. package/dist/job_request.js +0 -79
  129. package/dist/job_request.js.map +0 -1
  130. package/src/ipc/job_process.ts +0 -96
  131. package/src/ipc/protocol.ts +0 -51
  132. package/src/job_context.ts +0 -49
  133. package/src/job_request.ts +0 -118
@@ -1,5 +1,8 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- import { type ChildProcess } from 'child_process';
3
- import { type JobMainArgs } from './protocol.js';
4
- export declare const runJob: (args: JobMainArgs) => ChildProcess;
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":";AAKA,OAAO,EAAE,KAAK,YAAY,EAAQ,MAAM,eAAe,CAAC;AAIxD,OAAO,EAAe,KAAK,WAAW,EAA2B,MAAM,eAAe,CAAC;AAEvF,eAAO,MAAM,MAAM,SAAU,WAAW,KAAG,YAE1C,CAAC"}
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"}
@@ -1,77 +1,112 @@
1
1
  // SPDX-FileCopyrightText: 2024 LiveKit, Inc.
2
2
  //
3
3
  // SPDX-License-Identifier: Apache-2.0
4
- import { ServerMessage } from '@livekit/protocol';
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 { JobContext } from '../job_context.js';
9
- import { log } from '../log.js';
10
- import { IPC_MESSAGE } from './protocol.js';
11
- export const runJob = (args) => {
12
- return fork(import.meta.filename, [args.raw, args.entry, args.fallbackURL]);
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] proto.JobAssignment, serialized to JSON string
19
- // [3] import.meta.filename of function containing entry file
20
- // [4] fallback URL in case JobAssignment.url is empty
21
- const msg = new ServerMessage();
22
- msg.fromJsonString(process.argv[2]);
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
- const conn = room.connect(args.url || process.argv[4], args.token);
45
- const start = () => {
46
- if (room.isConnected && !closed) {
47
- process.send({ type: IPC_MESSAGE.StartJobResponse });
48
- // here we import the file containing the exported entry function, and call it.
49
- // the file must export default an Agent, usually using defineAgent().
50
- import(process.argv[3]).then((agent) => {
51
- agent.default.entry(new JobContext(closeEvent, args.job, room));
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
@@ -1 +1 @@
1
- {"version":3,"file":"job_main.js","sourceRoot":"","sources":["../../src/ipc/job_main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"job_main.js","sourceRoot":"","sources":["../../src/ipc/job_main.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,sCAAsC;AACtC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAGpC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAG5D,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC;AAYnC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAe,EAAgB,EAAE;IAC1D,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CACf,IAAgB,EAChB,IAAwC,EACxC,IAAoB,EACpB,UAAwB,EACxB,MAAc,EACL,EAAE;IACX,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE;QACnC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE;QACpC,QAAQ,GAAG,IAAI,CAAC;QAChB,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAEpE,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,KAAK,IAAI,EAAE;QACxC,MAAM,kBAAkB,GAAG,UAAU,CAAC,GAAG,EAAE;YACzC,IAAI,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CACT,gEAAgE,EAChE,uCAAuC,CACxC,CAAC;YACJ,CAAC;QACH,CAAC,EAAE,KAAK,CAAC,CAAC;QACV,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE1D,MAAM,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7C,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC9B,OAAO,CAAC,IAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAEvC,MAAM,aAAa,GAAG,EAAE,CAAC;QACzB,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,iBAAiB,EAAE,CAAC;YAC7C,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAEhG,OAAO,CAAC,IAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAChC,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACvB,CAAC,CAAC;AAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,gBAAgB;IAChB,eAAe;IACf,6BAA6B;IAC7B,+DAA+D;IAC/D,MAAM,KAAK,GAAU,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClF,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,CAAC,OAAO,GAAG,4BAA4B,CAAC;IAC/C,CAAC;IAED,2BAA2B;IAC3B,mFAAmF;IACnF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAE/B,MAAM,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAe,EAAE,EAAE;QAC1D,IAAI,GAAG,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QACD,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;IAC9B,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAE5C,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACxC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAE7C,IAAI,GAAG,GAAwB,SAAS,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,YAAY,EAAE,CAAC;IAEtC,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,EAAE;QACtC,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAErB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAe,EAAE,EAAE;QACxC,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,eAAe,CAAC,OAAO,EAAE,CAAC;gBAC1B,OAAO,CAAC,IAAK,CAAC;oBACZ,IAAI,EAAE,cAAc;oBACpB,KAAK,EAAE,EAAE,aAAa,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE;iBACrE,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;YACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;gBAC9C,CAAC;gBAED,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;gBAE9D,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;gBAC5E,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBAC5B,MAAM;YACR,CAAC;YACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,MAAM;gBACR,CAAC;gBACD,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=message.js.map
@@ -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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"}