@livekit/agents 0.1.0 → 0.3.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 (155) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +47 -0
  3. package/LICENSE +201 -0
  4. package/dist/audio.d.ts +9 -0
  5. package/dist/audio.d.ts.map +1 -0
  6. package/dist/audio.js +54 -0
  7. package/dist/audio.js.map +1 -0
  8. package/dist/cli.d.ts +12 -1
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +102 -19
  11. package/dist/cli.js.map +1 -1
  12. package/dist/generator.d.ts +17 -6
  13. package/dist/generator.d.ts.map +1 -1
  14. package/dist/generator.js +20 -3
  15. package/dist/generator.js.map +1 -1
  16. package/dist/http_server.d.ts +1 -1
  17. package/dist/http_server.d.ts.map +1 -1
  18. package/dist/http_server.js +5 -3
  19. package/dist/http_server.js.map +1 -1
  20. package/dist/index.d.ts +14 -3
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +14 -3
  23. package/dist/index.js.map +1 -1
  24. package/dist/ipc/job_executor.d.ts +19 -0
  25. package/dist/ipc/job_executor.d.ts.map +1 -0
  26. package/dist/ipc/job_executor.js +8 -0
  27. package/dist/ipc/job_executor.js.map +1 -0
  28. package/dist/ipc/job_main.d.ts +7 -4
  29. package/dist/ipc/job_main.d.ts.map +1 -1
  30. package/dist/ipc/job_main.js +102 -59
  31. package/dist/ipc/job_main.js.map +1 -1
  32. package/dist/ipc/message.d.ts +41 -0
  33. package/dist/ipc/message.d.ts.map +1 -0
  34. package/dist/ipc/message.js +2 -0
  35. package/dist/ipc/message.js.map +1 -0
  36. package/dist/ipc/proc_job_executor.d.ts +15 -0
  37. package/dist/ipc/proc_job_executor.d.ts.map +1 -0
  38. package/dist/ipc/proc_job_executor.js +150 -0
  39. package/dist/ipc/proc_job_executor.js.map +1 -0
  40. package/dist/ipc/proc_pool.d.ts +26 -0
  41. package/dist/ipc/proc_pool.d.ts.map +1 -0
  42. package/dist/ipc/proc_pool.js +83 -0
  43. package/dist/ipc/proc_pool.js.map +1 -0
  44. package/dist/job.d.ts +100 -0
  45. package/dist/job.d.ts.map +1 -0
  46. package/dist/job.js +213 -0
  47. package/dist/job.js.map +1 -0
  48. package/dist/llm/function_context.d.ts +20 -0
  49. package/dist/llm/function_context.d.ts.map +1 -0
  50. package/dist/llm/function_context.js +37 -0
  51. package/dist/llm/function_context.js.map +1 -0
  52. package/dist/llm/index.d.ts +3 -0
  53. package/dist/llm/index.d.ts.map +1 -0
  54. package/dist/llm/index.js +6 -0
  55. package/dist/llm/index.js.map +1 -0
  56. package/dist/log.d.ts +12 -1
  57. package/dist/log.d.ts.map +1 -1
  58. package/dist/log.js +28 -11
  59. package/dist/log.js.map +1 -1
  60. package/dist/multimodal/agent_playout.d.ts +34 -0
  61. package/dist/multimodal/agent_playout.d.ts.map +1 -0
  62. package/dist/multimodal/agent_playout.js +221 -0
  63. package/dist/multimodal/agent_playout.js.map +1 -0
  64. package/dist/multimodal/index.d.ts +3 -0
  65. package/dist/multimodal/index.d.ts.map +1 -0
  66. package/dist/multimodal/index.js +6 -0
  67. package/dist/multimodal/index.js.map +1 -0
  68. package/dist/multimodal/multimodal_agent.d.ts +47 -0
  69. package/dist/multimodal/multimodal_agent.d.ts.map +1 -0
  70. package/dist/multimodal/multimodal_agent.js +331 -0
  71. package/dist/multimodal/multimodal_agent.js.map +1 -0
  72. package/dist/plugin.js +20 -7
  73. package/dist/plugin.js.map +1 -1
  74. package/dist/stt/index.d.ts +1 -1
  75. package/dist/stt/index.d.ts.map +1 -1
  76. package/dist/stt/index.js.map +1 -1
  77. package/dist/stt/stream_adapter.d.ts +2 -11
  78. package/dist/stt/stream_adapter.d.ts.map +1 -1
  79. package/dist/stt/stream_adapter.js +47 -33
  80. package/dist/stt/stream_adapter.js.map +1 -1
  81. package/dist/stt/stt.d.ts +27 -0
  82. package/dist/stt/stt.d.ts.map +1 -1
  83. package/dist/stt/stt.js +32 -5
  84. package/dist/stt/stt.js.map +1 -1
  85. package/dist/transcription.d.ts +22 -0
  86. package/dist/transcription.d.ts.map +1 -0
  87. package/dist/transcription.js +111 -0
  88. package/dist/transcription.js.map +1 -0
  89. package/dist/tts/stream_adapter.d.ts +4 -11
  90. package/dist/tts/stream_adapter.d.ts.map +1 -1
  91. package/dist/tts/stream_adapter.js +66 -32
  92. package/dist/tts/stream_adapter.js.map +1 -1
  93. package/dist/tts/tts.d.ts +10 -0
  94. package/dist/tts/tts.d.ts.map +1 -1
  95. package/dist/tts/tts.js +48 -7
  96. package/dist/tts/tts.js.map +1 -1
  97. package/dist/utils.d.ts +59 -0
  98. package/dist/utils.d.ts.map +1 -1
  99. package/dist/utils.js +212 -6
  100. package/dist/utils.js.map +1 -1
  101. package/dist/vad.d.ts +29 -0
  102. package/dist/vad.d.ts.map +1 -1
  103. package/dist/vad.js.map +1 -1
  104. package/dist/worker.d.ts +69 -50
  105. package/dist/worker.d.ts.map +1 -1
  106. package/dist/worker.js +414 -213
  107. package/dist/worker.js.map +1 -1
  108. package/package.json +12 -10
  109. package/src/audio.ts +62 -0
  110. package/src/cli.ts +108 -20
  111. package/src/generator.ts +27 -7
  112. package/src/http_server.ts +5 -0
  113. package/src/index.ts +15 -3
  114. package/src/ipc/job_executor.ts +25 -0
  115. package/src/ipc/job_main.ts +141 -61
  116. package/src/ipc/message.ts +39 -0
  117. package/src/ipc/proc_job_executor.ts +162 -0
  118. package/src/ipc/proc_pool.ts +109 -0
  119. package/src/job.ts +278 -0
  120. package/src/llm/function_context.ts +61 -0
  121. package/src/llm/index.ts +11 -0
  122. package/src/log.ts +40 -8
  123. package/src/multimodal/agent_playout.ts +254 -0
  124. package/src/multimodal/index.ts +5 -0
  125. package/src/multimodal/multimodal_agent.ts +428 -0
  126. package/src/stt/index.ts +1 -1
  127. package/src/stt/stream_adapter.ts +32 -32
  128. package/src/stt/stt.ts +27 -0
  129. package/src/transcription.ts +128 -0
  130. package/src/tts/stream_adapter.ts +32 -31
  131. package/src/tts/tts.ts +10 -0
  132. package/src/utils.ts +257 -3
  133. package/src/vad.ts +29 -0
  134. package/src/worker.ts +465 -172
  135. package/tsconfig.json +7 -1
  136. package/dist/ipc/job_process.d.ts +0 -22
  137. package/dist/ipc/job_process.d.ts.map +0 -1
  138. package/dist/ipc/job_process.js +0 -73
  139. package/dist/ipc/job_process.js.map +0 -1
  140. package/dist/ipc/protocol.d.ts +0 -40
  141. package/dist/ipc/protocol.d.ts.map +0 -1
  142. package/dist/ipc/protocol.js +0 -14
  143. package/dist/ipc/protocol.js.map +0 -1
  144. package/dist/job_context.d.ts +0 -16
  145. package/dist/job_context.d.ts.map +0 -1
  146. package/dist/job_context.js +0 -31
  147. package/dist/job_context.js.map +0 -1
  148. package/dist/job_request.d.ts +0 -42
  149. package/dist/job_request.d.ts.map +0 -1
  150. package/dist/job_request.js +0 -79
  151. package/dist/job_request.js.map +0 -1
  152. package/src/ipc/job_process.ts +0 -96
  153. package/src/ipc/protocol.ts +0 -51
  154. package/src/job_context.ts +0 -49
  155. package/src/job_request.ts +0 -118
@@ -1 +1 @@
1
- {"version":3,"file":"http_server.js","sourceRoot":"","sources":["../src/http_server.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,sCAAsC;AACtC,OAAO,EAA0D,YAAY,EAAE,MAAM,MAAM,CAAC;AAE5F,MAAM,WAAW,GAAG,KAAK,EAAE,GAAmB,EAAE,EAAE;IAChD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACnB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,OAAO,UAAU;IACrB,IAAI,CAAS;IACb,IAAI,CAAS;IACb,GAAG,CAAS;IAEZ,YAAY,IAAY,EAAE,IAAY;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC,GAAoB,EAAE,GAAmB,EAAE,EAAE;YACpE,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBACpB,WAAW,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG;QACP,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE;gBACpD,IAAI,GAAG;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;gBACrB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAW,EAAE,EAAE;gBAC7B,IAAI,GAAG;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;gBACrB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"http_server.js","sourceRoot":"","sources":["../src/http_server.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,sCAAsC;AACtC,OAAO,EAA0D,YAAY,EAAE,MAAM,MAAM,CAAC;AAC5F,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,WAAW,GAAG,KAAK,EAAE,GAAmB,EAAE,EAAE;IAChD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACnB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,OAAO,UAAU;IAKrB,YAAY,IAAY,EAAE,IAAY;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC,GAAoB,EAAE,GAAmB,EAAE,EAAE;YACpE,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBACpB,WAAW,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG;QACP,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE;gBACpD,IAAI,GAAG;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;gBACrB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;gBACnC,IAAI,OAAO,OAAQ,KAAK,QAAQ,EAAE,CAAC;oBACjC,GAAG,EAAE,CAAC,IAAI,CAAC,+BAA+B,OAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC7D,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAW,EAAE,EAAE;gBAC7B,IAAI,GAAG;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;gBACrB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -1,14 +1,25 @@
1
+ /**
2
+ * LiveKit Agents is a framework for building realtime programmable participants that run on
3
+ * servers.
4
+ *
5
+ * @see {@link https://docs.livekit.io/agents/overview | LiveKit Agents documentation}
6
+ * @packageDocumentation
7
+ */
1
8
  import * as cli from './cli.js';
9
+ import * as llm from './llm/index.js';
10
+ import * as multimodal from './multimodal/index.js';
2
11
  import * as stt from './stt/index.js';
3
12
  import * as tts from './tts/index.js';
4
13
  export * from './vad.js';
5
14
  export * from './plugin.js';
6
15
  export * from './version.js';
7
- export * from './job_context.js';
8
- export * from './job_request.js';
16
+ export * from './job.js';
9
17
  export * from './worker.js';
10
18
  export * from './utils.js';
11
19
  export * from './log.js';
12
20
  export * from './generator.js';
13
- export { cli, stt, tts };
21
+ export * from './tokenize.js';
22
+ export * from './audio.js';
23
+ export * from './transcription.js';
24
+ export { cli, stt, tts, llm, multimodal };
14
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AAEtC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AAEtC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AAEnC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -1,17 +1,28 @@
1
1
  // SPDX-FileCopyrightText: 2024 LiveKit, Inc.
2
2
  //
3
3
  // SPDX-License-Identifier: Apache-2.0
4
+ /**
5
+ * LiveKit Agents is a framework for building realtime programmable participants that run on
6
+ * servers.
7
+ *
8
+ * @see {@link https://docs.livekit.io/agents/overview | LiveKit Agents documentation}
9
+ * @packageDocumentation
10
+ */
4
11
  import * as cli from './cli.js';
12
+ import * as llm from './llm/index.js';
13
+ import * as multimodal from './multimodal/index.js';
5
14
  import * as stt from './stt/index.js';
6
15
  import * as tts from './tts/index.js';
7
16
  export * from './vad.js';
8
17
  export * from './plugin.js';
9
18
  export * from './version.js';
10
- export * from './job_context.js';
11
- export * from './job_request.js';
19
+ export * from './job.js';
12
20
  export * from './worker.js';
13
21
  export * from './utils.js';
14
22
  export * from './log.js';
15
23
  export * from './generator.js';
16
- export { cli, stt, tts };
24
+ export * from './tokenize.js';
25
+ export * from './audio.js';
26
+ export * from './transcription.js';
27
+ export { cli, stt, tts, llm, multimodal };
17
28
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,sCAAsC;AACtC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AAEtC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,sCAAsC;AAEtC;;;;;;GAMG;AACH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AAEtC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AAEnC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { RunningJobInfo } from '../job.js';
2
+ export interface ProcOpts {
3
+ agent: string;
4
+ initializeTimeout: number;
5
+ closeTimeout: number;
6
+ }
7
+ export declare abstract class JobExecutor {
8
+ PING_INTERVAL: number;
9
+ PING_TIMEOUT: number;
10
+ HIGH_PING_THRESHOLD: number;
11
+ abstract get started(): boolean;
12
+ abstract get runningJob(): RunningJobInfo | undefined;
13
+ abstract start(): Promise<void>;
14
+ abstract join(): Promise<void>;
15
+ abstract initialize(): Promise<void>;
16
+ abstract close(): Promise<void>;
17
+ abstract launchJob(info: RunningJobInfo): Promise<void>;
18
+ }
19
+ //# sourceMappingURL=job_executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job_executor.d.ts","sourceRoot":"","sources":["../../src/ipc/job_executor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,8BAAsB,WAAW;IAC/B,aAAa,SAAc;IAC3B,YAAY,SAAa;IACzB,mBAAmB,SAAc;IAEjC,QAAQ,KAAK,OAAO,IAAI,OAAO,CAAC;IAChC,QAAQ,KAAK,UAAU,IAAI,cAAc,GAAG,SAAS,CAAC;IAEtD,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAC/B,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAC9B,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IACpC,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CACxD"}
@@ -0,0 +1,8 @@
1
+ export class JobExecutor {
2
+ constructor() {
3
+ this.PING_INTERVAL = 2.5 * 1000;
4
+ this.PING_TIMEOUT = 90 * 1000;
5
+ this.HIGH_PING_THRESHOLD = 0.5 * 1000;
6
+ }
7
+ }
8
+ //# sourceMappingURL=job_executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job_executor.js","sourceRoot":"","sources":["../../src/ipc/job_executor.ts"],"names":[],"mappings":"AAWA,MAAM,OAAgB,WAAW;IAAjC;QACE,kBAAa,GAAG,GAAG,GAAG,IAAI,CAAC;QAC3B,iBAAY,GAAG,EAAE,GAAG,IAAI,CAAC;QACzB,wBAAmB,GAAG,GAAG,GAAG,IAAI,CAAC;IAUnC,CAAC;CAAA"}
@@ -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,120 @@
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 { isAgent } from '../generator.js';
9
+ import { JobContext } from '../job.js';
10
+ import { JobProcess } from '../job.js';
11
+ import { initializeLogger, log } from '../log.js';
12
+ import { defaultInitializeProcessFunc } from '../worker.js';
13
+ const ORPHANED_TIMEOUT = 15 * 1000;
14
+ export const runProcess = (args) => {
15
+ return fork(fileURLToPath(import.meta.url), [args.agentFile]);
16
+ };
17
+ const startJob = (proc, func, info, closeEvent, logger) => {
18
+ let connect = false;
19
+ let shutdown = false;
20
+ const room = new Room();
21
+ room.on(RoomEvent.Disconnected, () => {
22
+ closeEvent.emit('close', false);
23
+ });
24
+ const onConnect = () => {
25
+ connect = true;
26
+ };
27
+ const onShutdown = (reason) => {
28
+ shutdown = true;
29
+ closeEvent.emit('close', true, reason);
30
+ };
31
+ const ctx = new JobContext(proc, info, room, onConnect, onShutdown);
32
+ const task = new Promise(async () => {
33
+ const unconnectedTimeout = setTimeout(() => {
34
+ if (!(connect || shutdown)) {
35
+ logger.warn('room not connect after job_entry was called after 10 seconds, ', 'did you forget to call ctx.connect()?');
36
+ }
37
+ }, 10000);
38
+ func(ctx).finally(() => clearTimeout(unconnectedTimeout));
39
+ await once(closeEvent, 'close').then((close) => {
40
+ logger.debug('shutting down');
41
+ process.send({ case: 'exiting', value: { reason: close[1] } });
42
+ });
43
+ await room.disconnect();
44
+ logger.debug('disconnected from room');
45
+ const shutdownTasks = [];
46
+ for (const callback of ctx.shutdownCallbacks) {
47
+ shutdownTasks.push(callback());
48
+ }
49
+ await Promise.all(shutdownTasks).catch(() => logger.error('error while shutting down the job'));
50
+ process.send({ case: 'done' });
51
+ process.exit();
52
+ });
53
+ return { ctx, task };
13
54
  };
14
55
  if (process.send) {
15
56
  // process.argv:
16
57
  // [0] `node'
17
58
  // [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
- });
59
+ // [2] import.meta.filename of function containing entry file
60
+ const moduleFile = process.argv[2];
61
+ const agent = await import(moduleFile).then((module) => {
62
+ const agent = module.default;
63
+ if (agent === undefined || !isAgent(agent)) {
64
+ throw new Error(`Unable to load agent: Missing or invalid default export in ${moduleFile}`);
40
65
  }
66
+ return agent;
41
67
  });
68
+ if (!agent.prewarm) {
69
+ agent.prewarm = defaultInitializeProcessFunc;
70
+ }
42
71
  // don't do anything on C-c
72
+ // this is handled in cli, triggering a termination of all child processes at once.
43
73
  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
- });
74
+ await once(process, 'message').then(([msg]) => {
75
+ if (msg.case !== 'initializeRequest') {
76
+ throw new Error('first message must be InitializeRequest');
77
+ }
78
+ initializeLogger(msg.value.loggerOptions);
79
+ });
80
+ const proc = new JobProcess();
81
+ let logger = log().child({ pid: proc.pid });
82
+ logger.debug('initializing job runner');
83
+ agent.prewarm(proc);
84
+ logger.debug('job runner initialized');
85
+ process.send({ case: 'initializeResponse' });
86
+ let job = undefined;
87
+ const closeEvent = new EventEmitter();
88
+ const orphanedTimeout = setTimeout(() => {
89
+ logger.warn('process orphaned, shutting down');
90
+ process.exit();
91
+ }, ORPHANED_TIMEOUT);
92
+ process.on('message', (msg) => {
93
+ switch (msg.case) {
94
+ case 'pingRequest': {
95
+ orphanedTimeout.refresh();
96
+ process.send({
97
+ case: 'pongResponse',
98
+ value: { lastTimestamp: msg.value.timestamp, timestamp: Date.now() },
99
+ });
100
+ break;
101
+ }
102
+ case 'startJobRequest': {
103
+ if (job) {
104
+ throw new Error('job task already running');
105
+ }
106
+ logger = logger.child({ jobID: msg.value.runningJob.job.id });
107
+ job = startJob(proc, agent.entry, msg.value.runningJob, closeEvent, logger);
108
+ logger.debug('job started');
109
+ break;
110
+ }
111
+ case 'shutdownRequest': {
112
+ if (!job) {
113
+ break;
114
+ }
115
+ closeEvent.emit('close', '');
116
+ }
53
117
  }
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
118
  });
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
119
  }
77
120
  //# 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":"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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,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;CAUZ"}