@livekit/agents 1.1.0-dev.0 → 1.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 (292) hide show
  1. package/dist/cli.cjs +2 -0
  2. package/dist/cli.cjs.map +1 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +2 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/constants.cjs +3 -0
  7. package/dist/constants.cjs.map +1 -1
  8. package/dist/constants.d.cts +1 -0
  9. package/dist/constants.d.ts +1 -0
  10. package/dist/constants.d.ts.map +1 -1
  11. package/dist/constants.js +2 -0
  12. package/dist/constants.js.map +1 -1
  13. package/dist/cpu.cjs +189 -0
  14. package/dist/cpu.cjs.map +1 -0
  15. package/dist/cpu.d.cts +24 -0
  16. package/dist/cpu.d.ts +24 -0
  17. package/dist/cpu.d.ts.map +1 -0
  18. package/dist/cpu.js +152 -0
  19. package/dist/cpu.js.map +1 -0
  20. package/dist/cpu.test.cjs +227 -0
  21. package/dist/cpu.test.cjs.map +1 -0
  22. package/dist/cpu.test.js +204 -0
  23. package/dist/cpu.test.js.map +1 -0
  24. package/dist/index.cjs +12 -10
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.d.cts +13 -13
  27. package/dist/index.d.ts +13 -13
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +11 -10
  30. package/dist/index.js.map +1 -1
  31. package/dist/inference/interruption/defaults.cjs +1 -1
  32. package/dist/inference/interruption/defaults.cjs.map +1 -1
  33. package/dist/inference/interruption/defaults.d.cts +1 -1
  34. package/dist/inference/interruption/defaults.d.ts +1 -1
  35. package/dist/inference/interruption/defaults.d.ts.map +1 -1
  36. package/dist/inference/interruption/defaults.js +1 -1
  37. package/dist/inference/interruption/defaults.js.map +1 -1
  38. package/dist/inference/interruption/http_transport.cjs +44 -28
  39. package/dist/inference/interruption/http_transport.cjs.map +1 -1
  40. package/dist/inference/interruption/http_transport.d.ts.map +1 -1
  41. package/dist/inference/interruption/http_transport.js +45 -29
  42. package/dist/inference/interruption/http_transport.js.map +1 -1
  43. package/dist/inference/interruption/interruption_detector.cjs +22 -5
  44. package/dist/inference/interruption/interruption_detector.cjs.map +1 -1
  45. package/dist/inference/interruption/interruption_detector.d.cts +2 -2
  46. package/dist/inference/interruption/interruption_detector.d.ts +2 -2
  47. package/dist/inference/interruption/interruption_detector.d.ts.map +1 -1
  48. package/dist/inference/interruption/interruption_detector.js +22 -5
  49. package/dist/inference/interruption/interruption_detector.js.map +1 -1
  50. package/dist/inference/interruption/interruption_stream.cjs +4 -4
  51. package/dist/inference/interruption/interruption_stream.cjs.map +1 -1
  52. package/dist/inference/interruption/interruption_stream.js +4 -4
  53. package/dist/inference/interruption/interruption_stream.js.map +1 -1
  54. package/dist/inference/interruption/types.cjs.map +1 -1
  55. package/dist/inference/interruption/types.d.cts +2 -2
  56. package/dist/inference/interruption/types.d.ts +2 -2
  57. package/dist/inference/interruption/types.d.ts.map +1 -1
  58. package/dist/inference/interruption/ws_transport.cjs +60 -47
  59. package/dist/inference/interruption/ws_transport.cjs.map +1 -1
  60. package/dist/inference/interruption/ws_transport.d.ts.map +1 -1
  61. package/dist/inference/interruption/ws_transport.js +60 -47
  62. package/dist/inference/interruption/ws_transport.js.map +1 -1
  63. package/dist/inference/llm.cjs.map +1 -1
  64. package/dist/inference/llm.d.cts +1 -1
  65. package/dist/inference/llm.d.ts +1 -1
  66. package/dist/inference/llm.d.ts.map +1 -1
  67. package/dist/inference/llm.js.map +1 -1
  68. package/dist/inference/stt.cjs +20 -12
  69. package/dist/inference/stt.cjs.map +1 -1
  70. package/dist/inference/stt.d.cts +3 -2
  71. package/dist/inference/stt.d.ts +3 -2
  72. package/dist/inference/stt.d.ts.map +1 -1
  73. package/dist/inference/stt.js +20 -12
  74. package/dist/inference/stt.js.map +1 -1
  75. package/dist/inference/stt.test.cjs +14 -0
  76. package/dist/inference/stt.test.cjs.map +1 -1
  77. package/dist/inference/stt.test.js +14 -0
  78. package/dist/inference/stt.test.js.map +1 -1
  79. package/dist/inference/tts.cjs +13 -4
  80. package/dist/inference/tts.cjs.map +1 -1
  81. package/dist/inference/tts.d.cts +8 -1
  82. package/dist/inference/tts.d.ts +8 -1
  83. package/dist/inference/tts.d.ts.map +1 -1
  84. package/dist/inference/tts.js +13 -4
  85. package/dist/inference/tts.js.map +1 -1
  86. package/dist/inference/tts.test.cjs +10 -0
  87. package/dist/inference/tts.test.cjs.map +1 -1
  88. package/dist/inference/tts.test.js +10 -0
  89. package/dist/inference/tts.test.js.map +1 -1
  90. package/dist/ipc/job_proc_lazy_main.cjs +41 -23
  91. package/dist/ipc/job_proc_lazy_main.cjs.map +1 -1
  92. package/dist/ipc/job_proc_lazy_main.js +41 -23
  93. package/dist/ipc/job_proc_lazy_main.js.map +1 -1
  94. package/dist/job.cjs +1 -1
  95. package/dist/job.cjs.map +1 -1
  96. package/dist/job.js +1 -1
  97. package/dist/job.js.map +1 -1
  98. package/dist/language.cjs +394 -0
  99. package/dist/language.cjs.map +1 -0
  100. package/dist/language.d.cts +15 -0
  101. package/dist/language.d.ts +15 -0
  102. package/dist/language.d.ts.map +1 -0
  103. package/dist/language.js +363 -0
  104. package/dist/language.js.map +1 -0
  105. package/dist/language.test.cjs +43 -0
  106. package/dist/language.test.cjs.map +1 -0
  107. package/dist/language.test.js +49 -0
  108. package/dist/language.test.js.map +1 -0
  109. package/dist/llm/index.cjs +2 -0
  110. package/dist/llm/index.cjs.map +1 -1
  111. package/dist/llm/index.d.cts +1 -1
  112. package/dist/llm/index.d.ts +1 -1
  113. package/dist/llm/index.d.ts.map +1 -1
  114. package/dist/llm/index.js +2 -0
  115. package/dist/llm/index.js.map +1 -1
  116. package/dist/stream/deferred_stream.cjs +6 -2
  117. package/dist/stream/deferred_stream.cjs.map +1 -1
  118. package/dist/stream/deferred_stream.d.ts.map +1 -1
  119. package/dist/stream/deferred_stream.js +6 -2
  120. package/dist/stream/deferred_stream.js.map +1 -1
  121. package/dist/stt/stt.cjs.map +1 -1
  122. package/dist/stt/stt.d.cts +2 -1
  123. package/dist/stt/stt.d.ts +2 -1
  124. package/dist/stt/stt.d.ts.map +1 -1
  125. package/dist/stt/stt.js.map +1 -1
  126. package/dist/utils.cjs +15 -0
  127. package/dist/utils.cjs.map +1 -1
  128. package/dist/utils.d.cts +8 -0
  129. package/dist/utils.d.ts +8 -0
  130. package/dist/utils.d.ts.map +1 -1
  131. package/dist/utils.js +13 -0
  132. package/dist/utils.js.map +1 -1
  133. package/dist/version.cjs +1 -1
  134. package/dist/version.js +1 -1
  135. package/dist/voice/agent.cjs +14 -17
  136. package/dist/voice/agent.cjs.map +1 -1
  137. package/dist/voice/agent.d.cts +10 -11
  138. package/dist/voice/agent.d.ts +10 -11
  139. package/dist/voice/agent.d.ts.map +1 -1
  140. package/dist/voice/agent.js +15 -18
  141. package/dist/voice/agent.js.map +1 -1
  142. package/dist/voice/agent.test.cjs +194 -0
  143. package/dist/voice/agent.test.cjs.map +1 -1
  144. package/dist/voice/agent.test.js +195 -1
  145. package/dist/voice/agent.test.js.map +1 -1
  146. package/dist/voice/agent_activity.cjs +116 -39
  147. package/dist/voice/agent_activity.cjs.map +1 -1
  148. package/dist/voice/agent_activity.d.cts +2 -0
  149. package/dist/voice/agent_activity.d.ts +2 -0
  150. package/dist/voice/agent_activity.d.ts.map +1 -1
  151. package/dist/voice/agent_activity.js +117 -40
  152. package/dist/voice/agent_activity.js.map +1 -1
  153. package/dist/voice/agent_activity.test.cjs +135 -0
  154. package/dist/voice/agent_activity.test.cjs.map +1 -0
  155. package/dist/voice/agent_activity.test.js +134 -0
  156. package/dist/voice/agent_activity.test.js.map +1 -0
  157. package/dist/voice/agent_session.cjs +38 -38
  158. package/dist/voice/agent_session.cjs.map +1 -1
  159. package/dist/voice/agent_session.d.cts +65 -56
  160. package/dist/voice/agent_session.d.ts +65 -56
  161. package/dist/voice/agent_session.d.ts.map +1 -1
  162. package/dist/voice/agent_session.js +37 -37
  163. package/dist/voice/agent_session.js.map +1 -1
  164. package/dist/voice/audio_recognition.cjs +106 -52
  165. package/dist/voice/audio_recognition.cjs.map +1 -1
  166. package/dist/voice/audio_recognition.d.cts +4 -2
  167. package/dist/voice/audio_recognition.d.ts +4 -2
  168. package/dist/voice/audio_recognition.d.ts.map +1 -1
  169. package/dist/voice/audio_recognition.js +106 -52
  170. package/dist/voice/audio_recognition.js.map +1 -1
  171. package/dist/voice/audio_recognition_span.test.cjs +84 -22
  172. package/dist/voice/audio_recognition_span.test.cjs.map +1 -1
  173. package/dist/voice/audio_recognition_span.test.js +90 -23
  174. package/dist/voice/audio_recognition_span.test.js.map +1 -1
  175. package/dist/voice/events.cjs +1 -1
  176. package/dist/voice/events.cjs.map +1 -1
  177. package/dist/voice/events.d.cts +4 -3
  178. package/dist/voice/events.d.ts +4 -3
  179. package/dist/voice/events.d.ts.map +1 -1
  180. package/dist/voice/events.js +1 -1
  181. package/dist/voice/events.js.map +1 -1
  182. package/dist/voice/index.cjs +9 -1
  183. package/dist/voice/index.cjs.map +1 -1
  184. package/dist/voice/index.d.cts +1 -1
  185. package/dist/voice/index.d.ts +1 -1
  186. package/dist/voice/index.d.ts.map +1 -1
  187. package/dist/voice/index.js +10 -1
  188. package/dist/voice/index.js.map +1 -1
  189. package/dist/voice/remote_session.cjs +922 -0
  190. package/dist/voice/remote_session.cjs.map +1 -0
  191. package/dist/voice/remote_session.d.cts +108 -0
  192. package/dist/voice/remote_session.d.ts +108 -0
  193. package/dist/voice/remote_session.d.ts.map +1 -0
  194. package/dist/voice/remote_session.js +887 -0
  195. package/dist/voice/remote_session.js.map +1 -0
  196. package/dist/voice/report.cjs +11 -10
  197. package/dist/voice/report.cjs.map +1 -1
  198. package/dist/voice/report.d.cts +5 -3
  199. package/dist/voice/report.d.ts +5 -3
  200. package/dist/voice/report.d.ts.map +1 -1
  201. package/dist/voice/report.js +11 -10
  202. package/dist/voice/report.js.map +1 -1
  203. package/dist/voice/report.test.cjs +15 -0
  204. package/dist/voice/report.test.cjs.map +1 -1
  205. package/dist/voice/report.test.js +15 -0
  206. package/dist/voice/report.test.js.map +1 -1
  207. package/dist/voice/room_io/room_io.cjs +39 -0
  208. package/dist/voice/room_io/room_io.cjs.map +1 -1
  209. package/dist/voice/room_io/room_io.d.cts +3 -1
  210. package/dist/voice/room_io/room_io.d.ts +3 -1
  211. package/dist/voice/room_io/room_io.d.ts.map +1 -1
  212. package/dist/voice/room_io/room_io.js +40 -1
  213. package/dist/voice/room_io/room_io.js.map +1 -1
  214. package/dist/voice/turn_config/interruption.cjs.map +1 -1
  215. package/dist/voice/turn_config/interruption.d.cts +1 -1
  216. package/dist/voice/turn_config/interruption.d.ts +1 -1
  217. package/dist/voice/turn_config/interruption.d.ts.map +1 -1
  218. package/dist/voice/turn_config/interruption.js.map +1 -1
  219. package/dist/voice/turn_config/utils.cjs +95 -35
  220. package/dist/voice/turn_config/utils.cjs.map +1 -1
  221. package/dist/voice/turn_config/utils.d.cts +17 -5
  222. package/dist/voice/turn_config/utils.d.ts +17 -5
  223. package/dist/voice/turn_config/utils.d.ts.map +1 -1
  224. package/dist/voice/turn_config/utils.js +93 -35
  225. package/dist/voice/turn_config/utils.js.map +1 -1
  226. package/dist/voice/turn_config/utils.test.cjs +83 -41
  227. package/dist/voice/turn_config/utils.test.cjs.map +1 -1
  228. package/dist/voice/turn_config/utils.test.js +84 -42
  229. package/dist/voice/turn_config/utils.test.js.map +1 -1
  230. package/dist/worker.cjs +6 -29
  231. package/dist/worker.cjs.map +1 -1
  232. package/dist/worker.d.ts.map +1 -1
  233. package/dist/worker.js +6 -19
  234. package/dist/worker.js.map +1 -1
  235. package/package.json +3 -2
  236. package/src/cli.ts +2 -0
  237. package/src/constants.ts +1 -0
  238. package/src/cpu.test.ts +239 -0
  239. package/src/cpu.ts +173 -0
  240. package/src/index.ts +13 -15
  241. package/src/inference/interruption/defaults.ts +1 -1
  242. package/src/inference/interruption/http_transport.ts +49 -30
  243. package/src/inference/interruption/interruption_detector.ts +22 -6
  244. package/src/inference/interruption/interruption_stream.ts +4 -4
  245. package/src/inference/interruption/types.ts +2 -2
  246. package/src/inference/interruption/ws_transport.ts +63 -59
  247. package/src/inference/llm.ts +3 -1
  248. package/src/inference/stt.test.ts +17 -0
  249. package/src/inference/stt.ts +22 -14
  250. package/src/inference/tts.test.ts +12 -0
  251. package/src/inference/tts.ts +22 -6
  252. package/src/ipc/job_proc_lazy_main.ts +44 -24
  253. package/src/job.ts +1 -1
  254. package/src/language.test.ts +62 -0
  255. package/src/language.ts +380 -0
  256. package/src/llm/index.ts +2 -0
  257. package/src/stream/deferred_stream.ts +5 -1
  258. package/src/stt/stt.ts +2 -1
  259. package/src/utils.ts +20 -0
  260. package/src/voice/agent.test.ts +208 -1
  261. package/src/voice/agent.ts +21 -22
  262. package/src/voice/agent_activity.test.ts +194 -0
  263. package/src/voice/agent_activity.ts +161 -43
  264. package/src/voice/agent_session.ts +103 -92
  265. package/src/voice/audio_recognition.ts +124 -61
  266. package/src/voice/audio_recognition_span.test.ts +115 -35
  267. package/src/voice/events.ts +4 -3
  268. package/src/voice/index.ts +10 -1
  269. package/src/voice/remote_session.ts +1083 -0
  270. package/src/voice/report.test.ts +22 -3
  271. package/src/voice/report.ts +31 -14
  272. package/src/voice/room_io/room_io.ts +52 -2
  273. package/src/voice/turn_config/interruption.ts +1 -1
  274. package/src/voice/turn_config/utils.test.ts +91 -43
  275. package/src/voice/turn_config/utils.ts +120 -56
  276. package/src/worker.ts +34 -50
  277. package/dist/voice/client_events.cjs +0 -554
  278. package/dist/voice/client_events.cjs.map +0 -1
  279. package/dist/voice/client_events.d.cts +0 -195
  280. package/dist/voice/client_events.d.ts +0 -195
  281. package/dist/voice/client_events.d.ts.map +0 -1
  282. package/dist/voice/client_events.js +0 -548
  283. package/dist/voice/client_events.js.map +0 -1
  284. package/dist/voice/wire_format.cjs +0 -798
  285. package/dist/voice/wire_format.cjs.map +0 -1
  286. package/dist/voice/wire_format.d.cts +0 -5503
  287. package/dist/voice/wire_format.d.ts +0 -5503
  288. package/dist/voice/wire_format.d.ts.map +0 -1
  289. package/dist/voice/wire_format.js +0 -728
  290. package/dist/voice/wire_format.js.map +0 -1
  291. package/src/voice/client_events.ts +0 -838
  292. package/src/voice/wire_format.ts +0 -827
package/dist/cli.cjs CHANGED
@@ -114,6 +114,7 @@ const runApp = (opts) => {
114
114
  opts.apiSecret = globalOptions.apiSecret || opts.apiSecret;
115
115
  opts.logLevel = commandOptions.logLevel;
116
116
  opts.workerToken = globalOptions.workerToken || opts.workerToken;
117
+ process.env.LIVEKIT_DEV_MODE = "1";
117
118
  runServer({
118
119
  opts,
119
120
  production: false,
@@ -128,6 +129,7 @@ const runApp = (opts) => {
128
129
  opts.apiSecret = globalOptions.apiSecret || opts.apiSecret;
129
130
  opts.logLevel = commandOptions.logLevel;
130
131
  opts.workerToken = globalOptions.workerToken || opts.workerToken;
132
+ process.env.LIVEKIT_DEV_MODE = "1";
131
133
  runServer({
132
134
  opts,
133
135
  production: false,
package/dist/cli.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts","../../node_modules/.pnpm/tsup@8.4.0_@microsoft+api-extractor@7.43.7_@types+node@22.15.30__postcss@8.5.6_tsx@4.21.0_typescript@5.4.5/node_modules/tsup/assets/cjs_shims.js"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { Command, Option } from 'commander';\nimport type { EventEmitter } from 'node:events';\nimport { initializeLogger, log } from './log.js';\nimport { Plugin } from './plugin.js';\nimport { version } from './version.js';\nimport { AgentServer, ServerOptions } from './worker.js';\n\ntype CliArgs = {\n opts: ServerOptions;\n production: boolean;\n watch: boolean;\n event?: EventEmitter;\n room?: string;\n participantIdentity?: string;\n};\n\nconst runServer = async (args: CliArgs) => {\n initializeLogger({ pretty: !args.production, level: args.opts.logLevel });\n const logger = log();\n\n // though `production` is defined in ServerOptions, it will always be overridden by CLI.\n const { production: _, ...opts } = args.opts; // eslint-disable-line @typescript-eslint/no-unused-vars\n const server = new AgentServer(new ServerOptions({ production: args.production, ...opts }));\n\n if (args.room) {\n server.event.once('worker_registered', () => {\n logger.info(`connecting to room ${args.room}`);\n server.simulateJob(args.room!, args.participantIdentity);\n });\n }\n\n process.once('SIGINT', async () => {\n logger.debug('SIGINT received in CLI');\n // allow C-c C-c for force interrupt\n process.once('SIGINT', () => {\n console.log('Force exit (Ctrl+C pressed twice)');\n process.exit(130); // SIGINT exit code\n });\n if (args.production) {\n await server.drain();\n }\n await server.close();\n logger.debug('worker closed due to SIGINT.');\n process.exit(130); // SIGINT exit code\n });\n\n process.once('SIGTERM', async () => {\n logger.debug('SIGTERM received in CLI.');\n if (args.production) {\n await server.drain();\n }\n await server.close();\n logger.debug('worker closed due to SIGTERM.');\n process.exit(143); // SIGTERM exit code\n });\n\n try {\n await server.run();\n } catch {\n logger.fatal('closing worker due to error.');\n process.exit(1);\n }\n};\n\n/**\n * Exposes a CLI for creating a new worker, in development or production mode.\n *\n * @param opts - Options to launch the worker with\n * @example\n * ```\n * if (process.argv[1] === fileURLToPath(import.meta.url)) {\n * cli.runApp(new ServerOptions({ agent: import.meta.filename }));\n * }\n * ```\n */\nexport const runApp = (opts: ServerOptions) => {\n const logLevelOption = (defaultLevel: string) =>\n new Option('--log-level <level>', 'Set the logging level')\n .choices(['trace', 'debug', 'info', 'warn', 'error', 'fatal'])\n .default(defaultLevel)\n .env('LOG_LEVEL');\n\n const program = new Command()\n .name('agents')\n .description('LiveKit Agents CLI')\n .version(version)\n .addOption(\n new Option('--url <string>', 'LiveKit server or Cloud project websocket URL').env(\n 'LIVEKIT_URL',\n ),\n )\n .addOption(\n new Option('--api-key <string>', \"LiveKit server or Cloud project's API key\").env(\n 'LIVEKIT_API_KEY',\n ),\n )\n .addOption(\n new Option('--api-secret <string>', \"LiveKit server or Cloud project's API secret\").env(\n 'LIVEKIT_API_SECRET',\n ),\n )\n .addOption(\n new Option('--worker-token <string>', 'Internal use only')\n .env('LIVEKIT_WORKER_TOKEN')\n .hideHelp(),\n )\n .action(() => {\n if (\n // do not run CLI if origin file is agents/ipc/job_main.js\n process.argv[1] !== new URL('ipc/job_main.js', import.meta.url).pathname &&\n process.argv.length < 3\n ) {\n program.help();\n }\n });\n\n program\n .command('start')\n .description('Start the worker in production mode')\n .addOption(logLevelOption('info'))\n .action((...[, command]) => {\n const globalOptions = program.optsWithGlobals();\n const commandOptions = command.opts();\n opts.wsURL = globalOptions.url || opts.wsURL;\n opts.apiKey = globalOptions.apiKey || opts.apiKey;\n opts.apiSecret = globalOptions.apiSecret || opts.apiSecret;\n opts.logLevel = commandOptions.logLevel;\n opts.workerToken = globalOptions.workerToken || opts.workerToken;\n runServer({\n opts,\n production: true,\n watch: false,\n });\n });\n\n program\n .command('dev')\n .description('Start the worker in development mode')\n .addOption(logLevelOption('debug'))\n .action((...[, command]) => {\n const globalOptions = program.optsWithGlobals();\n const commandOptions = command.opts();\n opts.wsURL = globalOptions.url || opts.wsURL;\n opts.apiKey = globalOptions.apiKey || opts.apiKey;\n opts.apiSecret = globalOptions.apiSecret || opts.apiSecret;\n opts.logLevel = commandOptions.logLevel;\n opts.workerToken = globalOptions.workerToken || opts.workerToken;\n runServer({\n opts,\n production: false,\n watch: false,\n });\n });\n\n program\n .command('connect')\n .description('Connect to a specific room')\n .requiredOption('--room <string>', 'Room name to connect to')\n .option('--participant-identity <string>', 'Identity of user to listen to')\n .addOption(logLevelOption('info'))\n .action((...[, command]) => {\n const globalOptions = program.optsWithGlobals();\n const commandOptions = command.opts();\n opts.wsURL = globalOptions.url || opts.wsURL;\n opts.apiKey = globalOptions.apiKey || opts.apiKey;\n opts.apiSecret = globalOptions.apiSecret || opts.apiSecret;\n opts.logLevel = commandOptions.logLevel;\n opts.workerToken = globalOptions.workerToken || opts.workerToken;\n runServer({\n opts,\n production: false,\n watch: false,\n room: commandOptions.room,\n participantIdentity: commandOptions.participantIdentity,\n });\n });\n\n program\n .command('download-files')\n .description('Download plugin dependency files')\n .addOption(logLevelOption('debug'))\n .action((...[, command]) => {\n const commandOptions = command.opts();\n initializeLogger({ pretty: true, level: commandOptions.logLevel });\n const logger = log();\n\n const downloadFiles = async () => {\n for (const plugin of Plugin.registeredPlugins) {\n logger.info(`Downloading files for ${plugin.title}`);\n try {\n await plugin.downloadFiles();\n logger.info(`Finished downloading files for ${plugin.title}`);\n } catch (error) {\n logger.error(`Failed to download files for ${plugin.title}: ${error}`);\n }\n }\n };\n\n downloadFiles()\n .catch((error) => {\n logger.fatal(`Error during file downloads: ${error}`);\n process.exit(1);\n })\n .finally(() => {\n process.exit(0);\n });\n });\n\n program.parse();\n};\n","// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () =>\n typeof document === 'undefined'\n ? new URL(`file:${__filename}`).href\n : (document.currentScript && document.currentScript.src) ||\n new URL('main.js', document.baseURI).href\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/cli.ts","../../node_modules/.pnpm/tsup@8.4.0_@microsoft+api-extractor@7.43.7_@types+node@22.15.30__postcss@8.5.6_tsx@4.21.0_typescript@5.4.5/node_modules/tsup/assets/cjs_shims.js"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { Command, Option } from 'commander';\nimport type { EventEmitter } from 'node:events';\nimport { initializeLogger, log } from './log.js';\nimport { Plugin } from './plugin.js';\nimport { version } from './version.js';\nimport { AgentServer, ServerOptions } from './worker.js';\n\ntype CliArgs = {\n opts: ServerOptions;\n production: boolean;\n watch: boolean;\n event?: EventEmitter;\n room?: string;\n participantIdentity?: string;\n};\n\nconst runServer = async (args: CliArgs) => {\n initializeLogger({ pretty: !args.production, level: args.opts.logLevel });\n const logger = log();\n\n // though `production` is defined in ServerOptions, it will always be overridden by CLI.\n const { production: _, ...opts } = args.opts; // eslint-disable-line @typescript-eslint/no-unused-vars\n const server = new AgentServer(new ServerOptions({ production: args.production, ...opts }));\n\n if (args.room) {\n server.event.once('worker_registered', () => {\n logger.info(`connecting to room ${args.room}`);\n server.simulateJob(args.room!, args.participantIdentity);\n });\n }\n\n process.once('SIGINT', async () => {\n logger.debug('SIGINT received in CLI');\n // allow C-c C-c for force interrupt\n process.once('SIGINT', () => {\n console.log('Force exit (Ctrl+C pressed twice)');\n process.exit(130); // SIGINT exit code\n });\n if (args.production) {\n await server.drain();\n }\n await server.close();\n logger.debug('worker closed due to SIGINT.');\n process.exit(130); // SIGINT exit code\n });\n\n process.once('SIGTERM', async () => {\n logger.debug('SIGTERM received in CLI.');\n if (args.production) {\n await server.drain();\n }\n await server.close();\n logger.debug('worker closed due to SIGTERM.');\n process.exit(143); // SIGTERM exit code\n });\n\n try {\n await server.run();\n } catch {\n logger.fatal('closing worker due to error.');\n process.exit(1);\n }\n};\n\n/**\n * Exposes a CLI for creating a new worker, in development or production mode.\n *\n * @param opts - Options to launch the worker with\n * @example\n * ```\n * if (process.argv[1] === fileURLToPath(import.meta.url)) {\n * cli.runApp(new ServerOptions({ agent: import.meta.filename }));\n * }\n * ```\n */\nexport const runApp = (opts: ServerOptions) => {\n const logLevelOption = (defaultLevel: string) =>\n new Option('--log-level <level>', 'Set the logging level')\n .choices(['trace', 'debug', 'info', 'warn', 'error', 'fatal'])\n .default(defaultLevel)\n .env('LOG_LEVEL');\n\n const program = new Command()\n .name('agents')\n .description('LiveKit Agents CLI')\n .version(version)\n .addOption(\n new Option('--url <string>', 'LiveKit server or Cloud project websocket URL').env(\n 'LIVEKIT_URL',\n ),\n )\n .addOption(\n new Option('--api-key <string>', \"LiveKit server or Cloud project's API key\").env(\n 'LIVEKIT_API_KEY',\n ),\n )\n .addOption(\n new Option('--api-secret <string>', \"LiveKit server or Cloud project's API secret\").env(\n 'LIVEKIT_API_SECRET',\n ),\n )\n .addOption(\n new Option('--worker-token <string>', 'Internal use only')\n .env('LIVEKIT_WORKER_TOKEN')\n .hideHelp(),\n )\n .action(() => {\n if (\n // do not run CLI if origin file is agents/ipc/job_main.js\n process.argv[1] !== new URL('ipc/job_main.js', import.meta.url).pathname &&\n process.argv.length < 3\n ) {\n program.help();\n }\n });\n\n program\n .command('start')\n .description('Start the worker in production mode')\n .addOption(logLevelOption('info'))\n .action((...[, command]) => {\n const globalOptions = program.optsWithGlobals();\n const commandOptions = command.opts();\n opts.wsURL = globalOptions.url || opts.wsURL;\n opts.apiKey = globalOptions.apiKey || opts.apiKey;\n opts.apiSecret = globalOptions.apiSecret || opts.apiSecret;\n opts.logLevel = commandOptions.logLevel;\n opts.workerToken = globalOptions.workerToken || opts.workerToken;\n runServer({\n opts,\n production: true,\n watch: false,\n });\n });\n\n program\n .command('dev')\n .description('Start the worker in development mode')\n .addOption(logLevelOption('debug'))\n .action((...[, command]) => {\n const globalOptions = program.optsWithGlobals();\n const commandOptions = command.opts();\n opts.wsURL = globalOptions.url || opts.wsURL;\n opts.apiKey = globalOptions.apiKey || opts.apiKey;\n opts.apiSecret = globalOptions.apiSecret || opts.apiSecret;\n opts.logLevel = commandOptions.logLevel;\n opts.workerToken = globalOptions.workerToken || opts.workerToken;\n process.env.LIVEKIT_DEV_MODE = '1';\n runServer({\n opts,\n production: false,\n watch: false,\n });\n });\n\n program\n .command('connect')\n .description('Connect to a specific room')\n .requiredOption('--room <string>', 'Room name to connect to')\n .option('--participant-identity <string>', 'Identity of user to listen to')\n .addOption(logLevelOption('info'))\n .action((...[, command]) => {\n const globalOptions = program.optsWithGlobals();\n const commandOptions = command.opts();\n opts.wsURL = globalOptions.url || opts.wsURL;\n opts.apiKey = globalOptions.apiKey || opts.apiKey;\n opts.apiSecret = globalOptions.apiSecret || opts.apiSecret;\n opts.logLevel = commandOptions.logLevel;\n opts.workerToken = globalOptions.workerToken || opts.workerToken;\n process.env.LIVEKIT_DEV_MODE = '1';\n runServer({\n opts,\n production: false,\n watch: false,\n room: commandOptions.room,\n participantIdentity: commandOptions.participantIdentity,\n });\n });\n\n program\n .command('download-files')\n .description('Download plugin dependency files')\n .addOption(logLevelOption('debug'))\n .action((...[, command]) => {\n const commandOptions = command.opts();\n initializeLogger({ pretty: true, level: commandOptions.logLevel });\n const logger = log();\n\n const downloadFiles = async () => {\n for (const plugin of Plugin.registeredPlugins) {\n logger.info(`Downloading files for ${plugin.title}`);\n try {\n await plugin.downloadFiles();\n logger.info(`Finished downloading files for ${plugin.title}`);\n } catch (error) {\n logger.error(`Failed to download files for ${plugin.title}: ${error}`);\n }\n }\n };\n\n downloadFiles()\n .catch((error) => {\n logger.fatal(`Error during file downloads: ${error}`);\n process.exit(1);\n })\n .finally(() => {\n process.exit(0);\n });\n });\n\n program.parse();\n};\n","// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () =>\n typeof document === 'undefined'\n ? new URL(`file:${__filename}`).href\n : (document.currentScript && document.currentScript.src) ||\n new URL('main.js', document.baseURI).href\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n"],"mappings":"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","names":[]}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAQA,OAAO,EAAe,aAAa,EAAE,MAAM,aAAa,CAAC;AA2DzD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,MAAM,SAAU,aAAa,SAsIzC,CAAC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAQA,OAAO,EAAe,aAAa,EAAE,MAAM,aAAa,CAAC;AA2DzD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,MAAM,SAAU,aAAa,SAwIzC,CAAC"}
package/dist/cli.js CHANGED
@@ -89,6 +89,7 @@ const runApp = (opts) => {
89
89
  opts.apiSecret = globalOptions.apiSecret || opts.apiSecret;
90
90
  opts.logLevel = commandOptions.logLevel;
91
91
  opts.workerToken = globalOptions.workerToken || opts.workerToken;
92
+ process.env.LIVEKIT_DEV_MODE = "1";
92
93
  runServer({
93
94
  opts,
94
95
  production: false,
@@ -103,6 +104,7 @@ const runApp = (opts) => {
103
104
  opts.apiSecret = globalOptions.apiSecret || opts.apiSecret;
104
105
  opts.logLevel = commandOptions.logLevel;
105
106
  opts.workerToken = globalOptions.workerToken || opts.workerToken;
107
+ process.env.LIVEKIT_DEV_MODE = "1";
106
108
  runServer({
107
109
  opts,
108
110
  production: false,
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { Command, Option } from 'commander';\nimport type { EventEmitter } from 'node:events';\nimport { initializeLogger, log } from './log.js';\nimport { Plugin } from './plugin.js';\nimport { version } from './version.js';\nimport { AgentServer, ServerOptions } from './worker.js';\n\ntype CliArgs = {\n opts: ServerOptions;\n production: boolean;\n watch: boolean;\n event?: EventEmitter;\n room?: string;\n participantIdentity?: string;\n};\n\nconst runServer = async (args: CliArgs) => {\n initializeLogger({ pretty: !args.production, level: args.opts.logLevel });\n const logger = log();\n\n // though `production` is defined in ServerOptions, it will always be overridden by CLI.\n const { production: _, ...opts } = args.opts; // eslint-disable-line @typescript-eslint/no-unused-vars\n const server = new AgentServer(new ServerOptions({ production: args.production, ...opts }));\n\n if (args.room) {\n server.event.once('worker_registered', () => {\n logger.info(`connecting to room ${args.room}`);\n server.simulateJob(args.room!, args.participantIdentity);\n });\n }\n\n process.once('SIGINT', async () => {\n logger.debug('SIGINT received in CLI');\n // allow C-c C-c for force interrupt\n process.once('SIGINT', () => {\n console.log('Force exit (Ctrl+C pressed twice)');\n process.exit(130); // SIGINT exit code\n });\n if (args.production) {\n await server.drain();\n }\n await server.close();\n logger.debug('worker closed due to SIGINT.');\n process.exit(130); // SIGINT exit code\n });\n\n process.once('SIGTERM', async () => {\n logger.debug('SIGTERM received in CLI.');\n if (args.production) {\n await server.drain();\n }\n await server.close();\n logger.debug('worker closed due to SIGTERM.');\n process.exit(143); // SIGTERM exit code\n });\n\n try {\n await server.run();\n } catch {\n logger.fatal('closing worker due to error.');\n process.exit(1);\n }\n};\n\n/**\n * Exposes a CLI for creating a new worker, in development or production mode.\n *\n * @param opts - Options to launch the worker with\n * @example\n * ```\n * if (process.argv[1] === fileURLToPath(import.meta.url)) {\n * cli.runApp(new ServerOptions({ agent: import.meta.filename }));\n * }\n * ```\n */\nexport const runApp = (opts: ServerOptions) => {\n const logLevelOption = (defaultLevel: string) =>\n new Option('--log-level <level>', 'Set the logging level')\n .choices(['trace', 'debug', 'info', 'warn', 'error', 'fatal'])\n .default(defaultLevel)\n .env('LOG_LEVEL');\n\n const program = new Command()\n .name('agents')\n .description('LiveKit Agents CLI')\n .version(version)\n .addOption(\n new Option('--url <string>', 'LiveKit server or Cloud project websocket URL').env(\n 'LIVEKIT_URL',\n ),\n )\n .addOption(\n new Option('--api-key <string>', \"LiveKit server or Cloud project's API key\").env(\n 'LIVEKIT_API_KEY',\n ),\n )\n .addOption(\n new Option('--api-secret <string>', \"LiveKit server or Cloud project's API secret\").env(\n 'LIVEKIT_API_SECRET',\n ),\n )\n .addOption(\n new Option('--worker-token <string>', 'Internal use only')\n .env('LIVEKIT_WORKER_TOKEN')\n .hideHelp(),\n )\n .action(() => {\n if (\n // do not run CLI if origin file is agents/ipc/job_main.js\n process.argv[1] !== new URL('ipc/job_main.js', import.meta.url).pathname &&\n process.argv.length < 3\n ) {\n program.help();\n }\n });\n\n program\n .command('start')\n .description('Start the worker in production mode')\n .addOption(logLevelOption('info'))\n .action((...[, command]) => {\n const globalOptions = program.optsWithGlobals();\n const commandOptions = command.opts();\n opts.wsURL = globalOptions.url || opts.wsURL;\n opts.apiKey = globalOptions.apiKey || opts.apiKey;\n opts.apiSecret = globalOptions.apiSecret || opts.apiSecret;\n opts.logLevel = commandOptions.logLevel;\n opts.workerToken = globalOptions.workerToken || opts.workerToken;\n runServer({\n opts,\n production: true,\n watch: false,\n });\n });\n\n program\n .command('dev')\n .description('Start the worker in development mode')\n .addOption(logLevelOption('debug'))\n .action((...[, command]) => {\n const globalOptions = program.optsWithGlobals();\n const commandOptions = command.opts();\n opts.wsURL = globalOptions.url || opts.wsURL;\n opts.apiKey = globalOptions.apiKey || opts.apiKey;\n opts.apiSecret = globalOptions.apiSecret || opts.apiSecret;\n opts.logLevel = commandOptions.logLevel;\n opts.workerToken = globalOptions.workerToken || opts.workerToken;\n runServer({\n opts,\n production: false,\n watch: false,\n });\n });\n\n program\n .command('connect')\n .description('Connect to a specific room')\n .requiredOption('--room <string>', 'Room name to connect to')\n .option('--participant-identity <string>', 'Identity of user to listen to')\n .addOption(logLevelOption('info'))\n .action((...[, command]) => {\n const globalOptions = program.optsWithGlobals();\n const commandOptions = command.opts();\n opts.wsURL = globalOptions.url || opts.wsURL;\n opts.apiKey = globalOptions.apiKey || opts.apiKey;\n opts.apiSecret = globalOptions.apiSecret || opts.apiSecret;\n opts.logLevel = commandOptions.logLevel;\n opts.workerToken = globalOptions.workerToken || opts.workerToken;\n runServer({\n opts,\n production: false,\n watch: false,\n room: commandOptions.room,\n participantIdentity: commandOptions.participantIdentity,\n });\n });\n\n program\n .command('download-files')\n .description('Download plugin dependency files')\n .addOption(logLevelOption('debug'))\n .action((...[, command]) => {\n const commandOptions = command.opts();\n initializeLogger({ pretty: true, level: commandOptions.logLevel });\n const logger = log();\n\n const downloadFiles = async () => {\n for (const plugin of Plugin.registeredPlugins) {\n logger.info(`Downloading files for ${plugin.title}`);\n try {\n await plugin.downloadFiles();\n logger.info(`Finished downloading files for ${plugin.title}`);\n } catch (error) {\n logger.error(`Failed to download files for ${plugin.title}: ${error}`);\n }\n }\n };\n\n downloadFiles()\n .catch((error) => {\n logger.fatal(`Error during file downloads: ${error}`);\n process.exit(1);\n })\n .finally(() => {\n process.exit(0);\n });\n });\n\n program.parse();\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { Command, Option } from 'commander';\nimport type { EventEmitter } from 'node:events';\nimport { initializeLogger, log } from './log.js';\nimport { Plugin } from './plugin.js';\nimport { version } from './version.js';\nimport { AgentServer, ServerOptions } from './worker.js';\n\ntype CliArgs = {\n opts: ServerOptions;\n production: boolean;\n watch: boolean;\n event?: EventEmitter;\n room?: string;\n participantIdentity?: string;\n};\n\nconst runServer = async (args: CliArgs) => {\n initializeLogger({ pretty: !args.production, level: args.opts.logLevel });\n const logger = log();\n\n // though `production` is defined in ServerOptions, it will always be overridden by CLI.\n const { production: _, ...opts } = args.opts; // eslint-disable-line @typescript-eslint/no-unused-vars\n const server = new AgentServer(new ServerOptions({ production: args.production, ...opts }));\n\n if (args.room) {\n server.event.once('worker_registered', () => {\n logger.info(`connecting to room ${args.room}`);\n server.simulateJob(args.room!, args.participantIdentity);\n });\n }\n\n process.once('SIGINT', async () => {\n logger.debug('SIGINT received in CLI');\n // allow C-c C-c for force interrupt\n process.once('SIGINT', () => {\n console.log('Force exit (Ctrl+C pressed twice)');\n process.exit(130); // SIGINT exit code\n });\n if (args.production) {\n await server.drain();\n }\n await server.close();\n logger.debug('worker closed due to SIGINT.');\n process.exit(130); // SIGINT exit code\n });\n\n process.once('SIGTERM', async () => {\n logger.debug('SIGTERM received in CLI.');\n if (args.production) {\n await server.drain();\n }\n await server.close();\n logger.debug('worker closed due to SIGTERM.');\n process.exit(143); // SIGTERM exit code\n });\n\n try {\n await server.run();\n } catch {\n logger.fatal('closing worker due to error.');\n process.exit(1);\n }\n};\n\n/**\n * Exposes a CLI for creating a new worker, in development or production mode.\n *\n * @param opts - Options to launch the worker with\n * @example\n * ```\n * if (process.argv[1] === fileURLToPath(import.meta.url)) {\n * cli.runApp(new ServerOptions({ agent: import.meta.filename }));\n * }\n * ```\n */\nexport const runApp = (opts: ServerOptions) => {\n const logLevelOption = (defaultLevel: string) =>\n new Option('--log-level <level>', 'Set the logging level')\n .choices(['trace', 'debug', 'info', 'warn', 'error', 'fatal'])\n .default(defaultLevel)\n .env('LOG_LEVEL');\n\n const program = new Command()\n .name('agents')\n .description('LiveKit Agents CLI')\n .version(version)\n .addOption(\n new Option('--url <string>', 'LiveKit server or Cloud project websocket URL').env(\n 'LIVEKIT_URL',\n ),\n )\n .addOption(\n new Option('--api-key <string>', \"LiveKit server or Cloud project's API key\").env(\n 'LIVEKIT_API_KEY',\n ),\n )\n .addOption(\n new Option('--api-secret <string>', \"LiveKit server or Cloud project's API secret\").env(\n 'LIVEKIT_API_SECRET',\n ),\n )\n .addOption(\n new Option('--worker-token <string>', 'Internal use only')\n .env('LIVEKIT_WORKER_TOKEN')\n .hideHelp(),\n )\n .action(() => {\n if (\n // do not run CLI if origin file is agents/ipc/job_main.js\n process.argv[1] !== new URL('ipc/job_main.js', import.meta.url).pathname &&\n process.argv.length < 3\n ) {\n program.help();\n }\n });\n\n program\n .command('start')\n .description('Start the worker in production mode')\n .addOption(logLevelOption('info'))\n .action((...[, command]) => {\n const globalOptions = program.optsWithGlobals();\n const commandOptions = command.opts();\n opts.wsURL = globalOptions.url || opts.wsURL;\n opts.apiKey = globalOptions.apiKey || opts.apiKey;\n opts.apiSecret = globalOptions.apiSecret || opts.apiSecret;\n opts.logLevel = commandOptions.logLevel;\n opts.workerToken = globalOptions.workerToken || opts.workerToken;\n runServer({\n opts,\n production: true,\n watch: false,\n });\n });\n\n program\n .command('dev')\n .description('Start the worker in development mode')\n .addOption(logLevelOption('debug'))\n .action((...[, command]) => {\n const globalOptions = program.optsWithGlobals();\n const commandOptions = command.opts();\n opts.wsURL = globalOptions.url || opts.wsURL;\n opts.apiKey = globalOptions.apiKey || opts.apiKey;\n opts.apiSecret = globalOptions.apiSecret || opts.apiSecret;\n opts.logLevel = commandOptions.logLevel;\n opts.workerToken = globalOptions.workerToken || opts.workerToken;\n process.env.LIVEKIT_DEV_MODE = '1';\n runServer({\n opts,\n production: false,\n watch: false,\n });\n });\n\n program\n .command('connect')\n .description('Connect to a specific room')\n .requiredOption('--room <string>', 'Room name to connect to')\n .option('--participant-identity <string>', 'Identity of user to listen to')\n .addOption(logLevelOption('info'))\n .action((...[, command]) => {\n const globalOptions = program.optsWithGlobals();\n const commandOptions = command.opts();\n opts.wsURL = globalOptions.url || opts.wsURL;\n opts.apiKey = globalOptions.apiKey || opts.apiKey;\n opts.apiSecret = globalOptions.apiSecret || opts.apiSecret;\n opts.logLevel = commandOptions.logLevel;\n opts.workerToken = globalOptions.workerToken || opts.workerToken;\n process.env.LIVEKIT_DEV_MODE = '1';\n runServer({\n opts,\n production: false,\n watch: false,\n room: commandOptions.room,\n participantIdentity: commandOptions.participantIdentity,\n });\n });\n\n program\n .command('download-files')\n .description('Download plugin dependency files')\n .addOption(logLevelOption('debug'))\n .action((...[, command]) => {\n const commandOptions = command.opts();\n initializeLogger({ pretty: true, level: commandOptions.logLevel });\n const logger = log();\n\n const downloadFiles = async () => {\n for (const plugin of Plugin.registeredPlugins) {\n logger.info(`Downloading files for ${plugin.title}`);\n try {\n await plugin.downloadFiles();\n logger.info(`Finished downloading files for ${plugin.title}`);\n } catch (error) {\n logger.error(`Failed to download files for ${plugin.title}: ${error}`);\n }\n }\n };\n\n downloadFiles()\n .catch((error) => {\n logger.fatal(`Error during file downloads: ${error}`);\n process.exit(1);\n })\n .finally(() => {\n process.exit(0);\n });\n });\n\n program.parse();\n};\n"],"mappings":"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","names":[]}
@@ -32,6 +32,7 @@ __export(constants_exports, {
32
32
  TOPIC_AGENT_RESPONSE: () => TOPIC_AGENT_RESPONSE,
33
33
  TOPIC_CHAT: () => TOPIC_CHAT,
34
34
  TOPIC_CLIENT_EVENTS: () => TOPIC_CLIENT_EVENTS,
35
+ TOPIC_SESSION_MESSAGES: () => TOPIC_SESSION_MESSAGES,
35
36
  TOPIC_TRANSCRIPTION: () => TOPIC_TRANSCRIPTION
36
37
  });
37
38
  module.exports = __toCommonJS(constants_exports);
@@ -50,6 +51,7 @@ const RPC_GET_AGENT_INFO = "lk.agent.get_agent_info";
50
51
  const RPC_SEND_MESSAGE = "lk.agent.send_message";
51
52
  const TOPIC_AGENT_REQUEST = "lk.agent.request";
52
53
  const TOPIC_AGENT_RESPONSE = "lk.agent.response";
54
+ const TOPIC_SESSION_MESSAGES = "lk.agent.session";
53
55
  // Annotate the CommonJS export names for ESM import in node:
54
56
  0 && (module.exports = {
55
57
  ATTRIBUTE_AGENT_NAME,
@@ -66,6 +68,7 @@ const TOPIC_AGENT_RESPONSE = "lk.agent.response";
66
68
  TOPIC_AGENT_RESPONSE,
67
69
  TOPIC_CHAT,
68
70
  TOPIC_CLIENT_EVENTS,
71
+ TOPIC_SESSION_MESSAGES,
69
72
  TOPIC_TRANSCRIPTION
70
73
  });
71
74
  //# sourceMappingURL=constants.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nexport const ATTRIBUTE_TRANSCRIPTION_TRACK_ID = 'lk.transcribed_track_id';\nexport const ATTRIBUTE_TRANSCRIPTION_FINAL = 'lk.transcription_final';\nexport const TOPIC_TRANSCRIPTION = 'lk.transcription';\nexport const ATTRIBUTE_TRANSCRIPTION_SEGMENT_ID = 'lk.segment_id';\nexport const ATTRIBUTE_PUBLISH_ON_BEHALF = 'lk.publish_on_behalf';\nexport const TOPIC_CHAT = 'lk.chat';\n\nexport const ATTRIBUTE_AGENT_STATE = 'lk.agent.state';\nexport const ATTRIBUTE_AGENT_NAME = 'lk.agent.name';\n\n// TODO(eval): export const ATTRIBUTE_SIMULATOR = 'lk.simulator';\n\nexport const TOPIC_CLIENT_EVENTS = 'lk.agent.events';\nexport const RPC_GET_SESSION_STATE = 'lk.agent.get_session_state';\nexport const RPC_GET_CHAT_HISTORY = 'lk.agent.get_chat_history';\nexport const RPC_GET_AGENT_INFO = 'lk.agent.get_agent_info';\nexport const RPC_SEND_MESSAGE = 'lk.agent.send_message';\nexport const TOPIC_AGENT_REQUEST = 'lk.agent.request';\nexport const TOPIC_AGENT_RESPONSE = 'lk.agent.response';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,MAAM,mCAAmC;AACzC,MAAM,gCAAgC;AACtC,MAAM,sBAAsB;AAC5B,MAAM,qCAAqC;AAC3C,MAAM,8BAA8B;AACpC,MAAM,aAAa;AAEnB,MAAM,wBAAwB;AAC9B,MAAM,uBAAuB;AAI7B,MAAM,sBAAsB;AAC5B,MAAM,wBAAwB;AAC9B,MAAM,uBAAuB;AAC7B,MAAM,qBAAqB;AAC3B,MAAM,mBAAmB;AACzB,MAAM,sBAAsB;AAC5B,MAAM,uBAAuB;","names":[]}
1
+ {"version":3,"sources":["../src/constants.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nexport const ATTRIBUTE_TRANSCRIPTION_TRACK_ID = 'lk.transcribed_track_id';\nexport const ATTRIBUTE_TRANSCRIPTION_FINAL = 'lk.transcription_final';\nexport const TOPIC_TRANSCRIPTION = 'lk.transcription';\nexport const ATTRIBUTE_TRANSCRIPTION_SEGMENT_ID = 'lk.segment_id';\nexport const ATTRIBUTE_PUBLISH_ON_BEHALF = 'lk.publish_on_behalf';\nexport const TOPIC_CHAT = 'lk.chat';\n\nexport const ATTRIBUTE_AGENT_STATE = 'lk.agent.state';\nexport const ATTRIBUTE_AGENT_NAME = 'lk.agent.name';\n\n// TODO(eval): export const ATTRIBUTE_SIMULATOR = 'lk.simulator';\n\nexport const TOPIC_CLIENT_EVENTS = 'lk.agent.events';\nexport const RPC_GET_SESSION_STATE = 'lk.agent.get_session_state';\nexport const RPC_GET_CHAT_HISTORY = 'lk.agent.get_chat_history';\nexport const RPC_GET_AGENT_INFO = 'lk.agent.get_agent_info';\nexport const RPC_SEND_MESSAGE = 'lk.agent.send_message';\nexport const TOPIC_AGENT_REQUEST = 'lk.agent.request';\nexport const TOPIC_AGENT_RESPONSE = 'lk.agent.response';\nexport const TOPIC_SESSION_MESSAGES = 'lk.agent.session';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,MAAM,mCAAmC;AACzC,MAAM,gCAAgC;AACtC,MAAM,sBAAsB;AAC5B,MAAM,qCAAqC;AAC3C,MAAM,8BAA8B;AACpC,MAAM,aAAa;AAEnB,MAAM,wBAAwB;AAC9B,MAAM,uBAAuB;AAI7B,MAAM,sBAAsB;AAC5B,MAAM,wBAAwB;AAC9B,MAAM,uBAAuB;AAC7B,MAAM,qBAAqB;AAC3B,MAAM,mBAAmB;AACzB,MAAM,sBAAsB;AAC5B,MAAM,uBAAuB;AAC7B,MAAM,yBAAyB;","names":[]}
@@ -13,4 +13,5 @@ export declare const RPC_GET_AGENT_INFO = "lk.agent.get_agent_info";
13
13
  export declare const RPC_SEND_MESSAGE = "lk.agent.send_message";
14
14
  export declare const TOPIC_AGENT_REQUEST = "lk.agent.request";
15
15
  export declare const TOPIC_AGENT_RESPONSE = "lk.agent.response";
16
+ export declare const TOPIC_SESSION_MESSAGES = "lk.agent.session";
16
17
  //# sourceMappingURL=constants.d.ts.map
@@ -13,4 +13,5 @@ export declare const RPC_GET_AGENT_INFO = "lk.agent.get_agent_info";
13
13
  export declare const RPC_SEND_MESSAGE = "lk.agent.send_message";
14
14
  export declare const TOPIC_AGENT_REQUEST = "lk.agent.request";
15
15
  export declare const TOPIC_AGENT_RESPONSE = "lk.agent.response";
16
+ export declare const TOPIC_SESSION_MESSAGES = "lk.agent.session";
16
17
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gCAAgC,4BAA4B,CAAC;AAC1E,eAAO,MAAM,6BAA6B,2BAA2B,CAAC;AACtE,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,kCAAkC,kBAAkB,CAAC;AAClE,eAAO,MAAM,2BAA2B,yBAAyB,CAAC;AAClE,eAAO,MAAM,UAAU,YAAY,CAAC;AAEpC,eAAO,MAAM,qBAAqB,mBAAmB,CAAC;AACtD,eAAO,MAAM,oBAAoB,kBAAkB,CAAC;AAIpD,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AACrD,eAAO,MAAM,qBAAqB,+BAA+B,CAAC;AAClE,eAAO,MAAM,oBAAoB,8BAA8B,CAAC;AAChE,eAAO,MAAM,kBAAkB,4BAA4B,CAAC;AAC5D,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AACxD,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,oBAAoB,sBAAsB,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gCAAgC,4BAA4B,CAAC;AAC1E,eAAO,MAAM,6BAA6B,2BAA2B,CAAC;AACtE,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,kCAAkC,kBAAkB,CAAC;AAClE,eAAO,MAAM,2BAA2B,yBAAyB,CAAC;AAClE,eAAO,MAAM,UAAU,YAAY,CAAC;AAEpC,eAAO,MAAM,qBAAqB,mBAAmB,CAAC;AACtD,eAAO,MAAM,oBAAoB,kBAAkB,CAAC;AAIpD,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AACrD,eAAO,MAAM,qBAAqB,+BAA+B,CAAC;AAClE,eAAO,MAAM,oBAAoB,8BAA8B,CAAC;AAChE,eAAO,MAAM,kBAAkB,4BAA4B,CAAC;AAC5D,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AACxD,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AACxD,eAAO,MAAM,sBAAsB,qBAAqB,CAAC"}
package/dist/constants.js CHANGED
@@ -13,6 +13,7 @@ const RPC_GET_AGENT_INFO = "lk.agent.get_agent_info";
13
13
  const RPC_SEND_MESSAGE = "lk.agent.send_message";
14
14
  const TOPIC_AGENT_REQUEST = "lk.agent.request";
15
15
  const TOPIC_AGENT_RESPONSE = "lk.agent.response";
16
+ const TOPIC_SESSION_MESSAGES = "lk.agent.session";
16
17
  export {
17
18
  ATTRIBUTE_AGENT_NAME,
18
19
  ATTRIBUTE_AGENT_STATE,
@@ -28,6 +29,7 @@ export {
28
29
  TOPIC_AGENT_RESPONSE,
29
30
  TOPIC_CHAT,
30
31
  TOPIC_CLIENT_EVENTS,
32
+ TOPIC_SESSION_MESSAGES,
31
33
  TOPIC_TRANSCRIPTION
32
34
  };
33
35
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nexport const ATTRIBUTE_TRANSCRIPTION_TRACK_ID = 'lk.transcribed_track_id';\nexport const ATTRIBUTE_TRANSCRIPTION_FINAL = 'lk.transcription_final';\nexport const TOPIC_TRANSCRIPTION = 'lk.transcription';\nexport const ATTRIBUTE_TRANSCRIPTION_SEGMENT_ID = 'lk.segment_id';\nexport const ATTRIBUTE_PUBLISH_ON_BEHALF = 'lk.publish_on_behalf';\nexport const TOPIC_CHAT = 'lk.chat';\n\nexport const ATTRIBUTE_AGENT_STATE = 'lk.agent.state';\nexport const ATTRIBUTE_AGENT_NAME = 'lk.agent.name';\n\n// TODO(eval): export const ATTRIBUTE_SIMULATOR = 'lk.simulator';\n\nexport const TOPIC_CLIENT_EVENTS = 'lk.agent.events';\nexport const RPC_GET_SESSION_STATE = 'lk.agent.get_session_state';\nexport const RPC_GET_CHAT_HISTORY = 'lk.agent.get_chat_history';\nexport const RPC_GET_AGENT_INFO = 'lk.agent.get_agent_info';\nexport const RPC_SEND_MESSAGE = 'lk.agent.send_message';\nexport const TOPIC_AGENT_REQUEST = 'lk.agent.request';\nexport const TOPIC_AGENT_RESPONSE = 'lk.agent.response';\n"],"mappings":"AAGO,MAAM,mCAAmC;AACzC,MAAM,gCAAgC;AACtC,MAAM,sBAAsB;AAC5B,MAAM,qCAAqC;AAC3C,MAAM,8BAA8B;AACpC,MAAM,aAAa;AAEnB,MAAM,wBAAwB;AAC9B,MAAM,uBAAuB;AAI7B,MAAM,sBAAsB;AAC5B,MAAM,wBAAwB;AAC9B,MAAM,uBAAuB;AAC7B,MAAM,qBAAqB;AAC3B,MAAM,mBAAmB;AACzB,MAAM,sBAAsB;AAC5B,MAAM,uBAAuB;","names":[]}
1
+ {"version":3,"sources":["../src/constants.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nexport const ATTRIBUTE_TRANSCRIPTION_TRACK_ID = 'lk.transcribed_track_id';\nexport const ATTRIBUTE_TRANSCRIPTION_FINAL = 'lk.transcription_final';\nexport const TOPIC_TRANSCRIPTION = 'lk.transcription';\nexport const ATTRIBUTE_TRANSCRIPTION_SEGMENT_ID = 'lk.segment_id';\nexport const ATTRIBUTE_PUBLISH_ON_BEHALF = 'lk.publish_on_behalf';\nexport const TOPIC_CHAT = 'lk.chat';\n\nexport const ATTRIBUTE_AGENT_STATE = 'lk.agent.state';\nexport const ATTRIBUTE_AGENT_NAME = 'lk.agent.name';\n\n// TODO(eval): export const ATTRIBUTE_SIMULATOR = 'lk.simulator';\n\nexport const TOPIC_CLIENT_EVENTS = 'lk.agent.events';\nexport const RPC_GET_SESSION_STATE = 'lk.agent.get_session_state';\nexport const RPC_GET_CHAT_HISTORY = 'lk.agent.get_chat_history';\nexport const RPC_GET_AGENT_INFO = 'lk.agent.get_agent_info';\nexport const RPC_SEND_MESSAGE = 'lk.agent.send_message';\nexport const TOPIC_AGENT_REQUEST = 'lk.agent.request';\nexport const TOPIC_AGENT_RESPONSE = 'lk.agent.response';\nexport const TOPIC_SESSION_MESSAGES = 'lk.agent.session';\n"],"mappings":"AAGO,MAAM,mCAAmC;AACzC,MAAM,gCAAgC;AACtC,MAAM,sBAAsB;AAC5B,MAAM,qCAAqC;AAC3C,MAAM,8BAA8B;AACpC,MAAM,aAAa;AAEnB,MAAM,wBAAwB;AAC9B,MAAM,uBAAuB;AAI7B,MAAM,sBAAsB;AAC5B,MAAM,wBAAwB;AAC9B,MAAM,uBAAuB;AAC7B,MAAM,qBAAqB;AAC3B,MAAM,mBAAmB;AACzB,MAAM,sBAAsB;AAC5B,MAAM,uBAAuB;AAC7B,MAAM,yBAAyB;","names":[]}
package/dist/cpu.cjs ADDED
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var cpu_exports = {};
30
+ __export(cpu_exports, {
31
+ CGroupV1CpuMonitor: () => CGroupV1CpuMonitor,
32
+ CGroupV2CpuMonitor: () => CGroupV2CpuMonitor,
33
+ DefaultCpuMonitor: () => DefaultCpuMonitor,
34
+ getCpuMonitor: () => getCpuMonitor
35
+ });
36
+ module.exports = __toCommonJS(cpu_exports);
37
+ var import_node_fs = require("node:fs");
38
+ var import_node_os = __toESM(require("node:os"), 1);
39
+ function cpuCountFromEnv() {
40
+ const raw = process.env.NUM_CPUS;
41
+ if (raw === void 0) return void 0;
42
+ const parsed = parseFloat(raw);
43
+ if (Number.isNaN(parsed)) {
44
+ console.warn("Failed to parse NUM_CPUS from environment");
45
+ return void 0;
46
+ }
47
+ return parsed;
48
+ }
49
+ class DefaultCpuMonitor {
50
+ cpuCount() {
51
+ return cpuCountFromEnv() ?? (import_node_os.default.cpus().length || 1);
52
+ }
53
+ cpuPercent(intervalMs) {
54
+ return new Promise((resolve) => {
55
+ const cpus1 = import_node_os.default.cpus();
56
+ const timer = setTimeout(() => {
57
+ const cpus2 = import_node_os.default.cpus();
58
+ let idle = 0;
59
+ let total = 0;
60
+ for (let i = 0; i < cpus1.length; i++) {
61
+ const cpu1 = cpus1[i].times;
62
+ const cpu2 = cpus2[i].times;
63
+ idle += cpu2.idle - cpu1.idle;
64
+ const total1 = Object.values(cpu1).reduce((acc, v) => acc + v, 0);
65
+ const total2 = Object.values(cpu2).reduce((acc, v) => acc + v, 0);
66
+ total += total2 - total1;
67
+ }
68
+ resolve(total === 0 ? 0 : Math.max(Math.min(+(1 - idle / total).toFixed(2), 1), 0));
69
+ }, intervalMs);
70
+ timer.unref();
71
+ });
72
+ }
73
+ }
74
+ class CGroupV2CpuMonitor {
75
+ cpuCount() {
76
+ const envCpus = cpuCountFromEnv();
77
+ if (envCpus !== void 0) return envCpus;
78
+ const [quota, period] = this.#readCpuMax();
79
+ if (quota === "max") return import_node_os.default.cpus().length || 1;
80
+ return parseInt(quota) / period;
81
+ }
82
+ cpuPercent(intervalMs) {
83
+ return new Promise((resolve, reject) => {
84
+ const usageStart = this.#readCpuUsage();
85
+ const timer = setTimeout(() => {
86
+ try {
87
+ const usageEnd = this.#readCpuUsage();
88
+ const usageDiffUsec = usageEnd - usageStart;
89
+ const usageSeconds = usageDiffUsec / 1e6;
90
+ const numCpus = this.cpuCount();
91
+ const intervalSeconds = intervalMs / 1e3;
92
+ const percent = usageSeconds / (intervalSeconds * numCpus);
93
+ resolve(Math.max(Math.min(percent, 1), 0));
94
+ } catch (e) {
95
+ reject(e);
96
+ }
97
+ }, intervalMs);
98
+ timer.unref();
99
+ });
100
+ }
101
+ #readCpuMax() {
102
+ try {
103
+ const data = (0, import_node_fs.readFileSync)("/sys/fs/cgroup/cpu.max", "utf-8").trim().split(/\s+/);
104
+ const quota = data[0] ?? "max";
105
+ const period = data[1] ? parseInt(data[1]) : 1e5;
106
+ return [quota, Number.isNaN(period) ? 1e5 : period];
107
+ } catch {
108
+ return ["max", 1e5];
109
+ }
110
+ }
111
+ #readCpuUsage() {
112
+ const content = (0, import_node_fs.readFileSync)("/sys/fs/cgroup/cpu.stat", "utf-8");
113
+ for (const line of content.split("\n")) {
114
+ if (line.startsWith("usage_usec")) {
115
+ return parseInt(line.split(/\s+/)[1]);
116
+ }
117
+ }
118
+ throw new Error("Failed to read CPU usage from /sys/fs/cgroup/cpu.stat");
119
+ }
120
+ }
121
+ class CGroupV1CpuMonitor {
122
+ cpuCount() {
123
+ const envCpus = cpuCountFromEnv();
124
+ if (envCpus !== void 0) return envCpus;
125
+ const [quota, period] = this.#readCfsQuotaAndPeriod();
126
+ if (quota === null || quota < 0 || period === null || period <= 0) {
127
+ return 2;
128
+ }
129
+ return Math.max(quota / period, 1);
130
+ }
131
+ cpuPercent(intervalMs) {
132
+ return new Promise((resolve, reject) => {
133
+ const usageStart = this.#readCpuacctUsage();
134
+ const timer = setTimeout(() => {
135
+ try {
136
+ const usageEnd = this.#readCpuacctUsage();
137
+ const usageDiffNs = usageEnd - usageStart;
138
+ const usageSeconds = usageDiffNs / 1e9;
139
+ const numCpus = this.cpuCount();
140
+ const intervalSeconds = intervalMs / 1e3;
141
+ const percent = usageSeconds / (intervalSeconds * numCpus);
142
+ resolve(Math.max(Math.min(percent, 1), 0));
143
+ } catch (e) {
144
+ reject(e);
145
+ }
146
+ }, intervalMs);
147
+ timer.unref();
148
+ });
149
+ }
150
+ #readCfsQuotaAndPeriod() {
151
+ const quota = readFirstInt("/sys/fs/cgroup/cpu/cpu.cfs_quota_us");
152
+ const period = readFirstInt("/sys/fs/cgroup/cpu/cpu.cfs_period_us");
153
+ return [quota, period];
154
+ }
155
+ #readCpuacctUsage() {
156
+ const value = readFirstInt("/sys/fs/cgroup/cpuacct/cpuacct.usage");
157
+ if (value === null) {
158
+ throw new Error("Failed to read cpuacct.usage for cgroup v1");
159
+ }
160
+ return value;
161
+ }
162
+ }
163
+ function readFirstInt(path) {
164
+ try {
165
+ const val = parseInt((0, import_node_fs.readFileSync)(path, "utf-8").trim());
166
+ return Number.isNaN(val) ? null : val;
167
+ } catch {
168
+ return null;
169
+ }
170
+ }
171
+ function isCGroupV2() {
172
+ return (0, import_node_fs.existsSync)("/sys/fs/cgroup/cpu.stat");
173
+ }
174
+ function isCGroupV1() {
175
+ return (0, import_node_fs.existsSync)("/sys/fs/cgroup/cpuacct/cpuacct.usage");
176
+ }
177
+ function getCpuMonitor() {
178
+ if (isCGroupV2()) return new CGroupV2CpuMonitor();
179
+ if (isCGroupV1()) return new CGroupV1CpuMonitor();
180
+ return new DefaultCpuMonitor();
181
+ }
182
+ // Annotate the CommonJS export names for ESM import in node:
183
+ 0 && (module.exports = {
184
+ CGroupV1CpuMonitor,
185
+ CGroupV2CpuMonitor,
186
+ DefaultCpuMonitor,
187
+ getCpuMonitor
188
+ });
189
+ //# sourceMappingURL=cpu.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cpu.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { existsSync, readFileSync } from 'node:fs';\nimport os from 'node:os';\n\n/** @internal */\nexport interface CpuMonitor {\n cpuCount(): number;\n cpuPercent(intervalMs: number): Promise<number>;\n}\n\nfunction cpuCountFromEnv(): number | undefined {\n const raw = process.env.NUM_CPUS;\n if (raw === undefined) return undefined;\n const parsed = parseFloat(raw);\n if (Number.isNaN(parsed)) {\n console.warn('Failed to parse NUM_CPUS from environment');\n return undefined;\n }\n return parsed;\n}\n\n/** @internal */\nexport class DefaultCpuMonitor implements CpuMonitor {\n cpuCount(): number {\n return cpuCountFromEnv() ?? (os.cpus().length || 1);\n }\n\n cpuPercent(intervalMs: number): Promise<number> {\n return new Promise((resolve) => {\n const cpus1 = os.cpus();\n const timer = setTimeout(() => {\n const cpus2 = os.cpus();\n let idle = 0;\n let total = 0;\n for (let i = 0; i < cpus1.length; i++) {\n const cpu1 = cpus1[i]!.times;\n const cpu2 = cpus2[i]!.times;\n idle += cpu2.idle - cpu1.idle;\n const total1 = Object.values(cpu1).reduce((acc, v) => acc + v, 0);\n const total2 = Object.values(cpu2).reduce((acc, v) => acc + v, 0);\n total += total2 - total1;\n }\n resolve(total === 0 ? 0 : Math.max(Math.min(+(1 - idle / total).toFixed(2), 1), 0));\n }, intervalMs);\n timer.unref();\n });\n }\n}\n\n/** @internal */\nexport class CGroupV2CpuMonitor implements CpuMonitor {\n cpuCount(): number {\n const envCpus = cpuCountFromEnv();\n if (envCpus !== undefined) return envCpus;\n const [quota, period] = this.#readCpuMax();\n if (quota === 'max') return os.cpus().length || 1;\n return parseInt(quota) / period;\n }\n\n cpuPercent(intervalMs: number): Promise<number> {\n return new Promise((resolve, reject) => {\n const usageStart = this.#readCpuUsage();\n const timer = setTimeout(() => {\n try {\n const usageEnd = this.#readCpuUsage();\n const usageDiffUsec = usageEnd - usageStart;\n const usageSeconds = usageDiffUsec / 1_000_000;\n const numCpus = this.cpuCount();\n const intervalSeconds = intervalMs / 1000;\n const percent = usageSeconds / (intervalSeconds * numCpus);\n resolve(Math.max(Math.min(percent, 1), 0));\n } catch (e) {\n reject(e);\n }\n }, intervalMs);\n timer.unref();\n });\n }\n\n #readCpuMax(): [string, number] {\n try {\n const data = readFileSync('/sys/fs/cgroup/cpu.max', 'utf-8').trim().split(/\\s+/);\n const quota = data[0] ?? 'max';\n const period = data[1] ? parseInt(data[1]) : 100_000;\n return [quota, Number.isNaN(period) ? 100_000 : period];\n } catch {\n return ['max', 100_000];\n }\n }\n\n #readCpuUsage(): number {\n const content = readFileSync('/sys/fs/cgroup/cpu.stat', 'utf-8');\n for (const line of content.split('\\n')) {\n if (line.startsWith('usage_usec')) {\n return parseInt(line.split(/\\s+/)[1]!);\n }\n }\n throw new Error('Failed to read CPU usage from /sys/fs/cgroup/cpu.stat');\n }\n}\n\n/** @internal */\nexport class CGroupV1CpuMonitor implements CpuMonitor {\n cpuCount(): number {\n const envCpus = cpuCountFromEnv();\n if (envCpus !== undefined) return envCpus;\n const [quota, period] = this.#readCfsQuotaAndPeriod();\n if (quota === null || quota < 0 || period === null || period <= 0) {\n // do not use the host CPU count as it could overstate the number available to the container\n return 2.0;\n }\n return Math.max(quota / period, 1.0);\n }\n\n cpuPercent(intervalMs: number): Promise<number> {\n return new Promise((resolve, reject) => {\n const usageStart = this.#readCpuacctUsage();\n const timer = setTimeout(() => {\n try {\n const usageEnd = this.#readCpuacctUsage();\n const usageDiffNs = usageEnd - usageStart;\n const usageSeconds = usageDiffNs / 1_000_000_000;\n const numCpus = this.cpuCount();\n const intervalSeconds = intervalMs / 1000;\n const percent = usageSeconds / (intervalSeconds * numCpus);\n resolve(Math.max(Math.min(percent, 1.0), 0.0));\n } catch (e) {\n reject(e);\n }\n }, intervalMs);\n timer.unref();\n });\n }\n\n #readCfsQuotaAndPeriod(): [number | null, number | null] {\n const quota = readFirstInt('/sys/fs/cgroup/cpu/cpu.cfs_quota_us');\n const period = readFirstInt('/sys/fs/cgroup/cpu/cpu.cfs_period_us');\n return [quota, period];\n }\n\n #readCpuacctUsage(): number {\n const value = readFirstInt('/sys/fs/cgroup/cpuacct/cpuacct.usage');\n if (value === null) {\n throw new Error('Failed to read cpuacct.usage for cgroup v1');\n }\n return value;\n }\n}\n\nfunction readFirstInt(path: string): number | null {\n try {\n const val = parseInt(readFileSync(path, 'utf-8').trim());\n return Number.isNaN(val) ? null : val;\n } catch {\n return null;\n }\n}\n\nfunction isCGroupV2(): boolean {\n return existsSync('/sys/fs/cgroup/cpu.stat');\n}\n\nfunction isCGroupV1(): boolean {\n return existsSync('/sys/fs/cgroup/cpuacct/cpuacct.usage');\n}\n\nexport function getCpuMonitor(): CpuMonitor {\n if (isCGroupV2()) return new CGroupV2CpuMonitor();\n if (isCGroupV1()) return new CGroupV1CpuMonitor();\n return new DefaultCpuMonitor();\n}\n"],"mappings":"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","names":["os"]}
package/dist/cpu.d.cts ADDED
@@ -0,0 +1,24 @@
1
+ /** @internal */
2
+ export interface CpuMonitor {
3
+ cpuCount(): number;
4
+ cpuPercent(intervalMs: number): Promise<number>;
5
+ }
6
+ /** @internal */
7
+ export declare class DefaultCpuMonitor implements CpuMonitor {
8
+ cpuCount(): number;
9
+ cpuPercent(intervalMs: number): Promise<number>;
10
+ }
11
+ /** @internal */
12
+ export declare class CGroupV2CpuMonitor implements CpuMonitor {
13
+ #private;
14
+ cpuCount(): number;
15
+ cpuPercent(intervalMs: number): Promise<number>;
16
+ }
17
+ /** @internal */
18
+ export declare class CGroupV1CpuMonitor implements CpuMonitor {
19
+ #private;
20
+ cpuCount(): number;
21
+ cpuPercent(intervalMs: number): Promise<number>;
22
+ }
23
+ export declare function getCpuMonitor(): CpuMonitor;
24
+ //# sourceMappingURL=cpu.d.ts.map
package/dist/cpu.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ /** @internal */
2
+ export interface CpuMonitor {
3
+ cpuCount(): number;
4
+ cpuPercent(intervalMs: number): Promise<number>;
5
+ }
6
+ /** @internal */
7
+ export declare class DefaultCpuMonitor implements CpuMonitor {
8
+ cpuCount(): number;
9
+ cpuPercent(intervalMs: number): Promise<number>;
10
+ }
11
+ /** @internal */
12
+ export declare class CGroupV2CpuMonitor implements CpuMonitor {
13
+ #private;
14
+ cpuCount(): number;
15
+ cpuPercent(intervalMs: number): Promise<number>;
16
+ }
17
+ /** @internal */
18
+ export declare class CGroupV1CpuMonitor implements CpuMonitor {
19
+ #private;
20
+ cpuCount(): number;
21
+ cpuPercent(intervalMs: number): Promise<number>;
22
+ }
23
+ export declare function getCpuMonitor(): CpuMonitor;
24
+ //# sourceMappingURL=cpu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cpu.d.ts","sourceRoot":"","sources":["../src/cpu.ts"],"names":[],"mappings":"AAMA,gBAAgB;AAChB,MAAM,WAAW,UAAU;IACzB,QAAQ,IAAI,MAAM,CAAC;IACnB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACjD;AAaD,gBAAgB;AAChB,qBAAa,iBAAkB,YAAW,UAAU;IAClD,QAAQ,IAAI,MAAM;IAIlB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAoBhD;AAED,gBAAgB;AAChB,qBAAa,kBAAmB,YAAW,UAAU;;IACnD,QAAQ,IAAI,MAAM;IAQlB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAwChD;AAED,gBAAgB;AAChB,qBAAa,kBAAmB,YAAW,UAAU;;IACnD,QAAQ,IAAI,MAAM;IAWlB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAiChD;AAmBD,wBAAgB,aAAa,IAAI,UAAU,CAI1C"}