@agimon-ai/doompi-runner 0.0.1-alpha.4 → 0.0.1-alpha.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +211 -23
- package/dist/bin/cli.cjs +3 -3
- package/dist/bin/cli.cjs.map +1 -1
- package/dist/bin/cli.d.cts.map +1 -1
- package/dist/bin/cli.d.mts.map +1 -1
- package/dist/bin/cli.mjs +3 -3
- package/dist/bin/cli.mjs.map +1 -1
- package/dist/bin/logSink.cjs +1 -1
- package/dist/bin/logSink.cjs.map +1 -1
- package/dist/bin/logSink.mjs +1 -1
- package/dist/bin/logSink.mjs.map +1 -1
- package/dist/bin/runnerHost.cjs +1 -1
- package/dist/bin/runnerHost.cjs.map +1 -1
- package/dist/bin/runnerHost.mjs +1 -1
- package/dist/bin/runnerHost.mjs.map +1 -1
- package/dist/cli/cliApp.cjs +1 -6
- package/dist/cli/cliApp.d.cts +2 -23
- package/dist/cli/cliApp.d.mts +2 -23
- package/dist/cli/cliApp.mjs +1 -6
- package/dist/compaction.cjs +1 -4
- package/dist/compaction.d.cts +2 -14
- package/dist/compaction.d.mts +2 -14
- package/dist/compaction.mjs +1 -4
- package/dist/config.cjs +1 -2
- package/dist/config.d.cts +2 -32
- package/dist/config.d.mts +2 -32
- package/dist/config.mjs +1 -2
- package/dist/container/index.cjs +1 -2
- package/dist/container/index.d.cts +2 -14
- package/dist/container/index.d.mts +2 -14
- package/dist/container/index.mjs +1 -2
- package/dist/extensions/pi.cjs +1 -2
- package/dist/extensions/pi.d.cts +2 -2
- package/dist/extensions/pi.d.mts +2 -2
- package/dist/extensions/pi.mjs +1 -2
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +6 -7
- package/dist/index.d.mts +6 -7
- package/dist/index.mjs +1 -1
- package/dist/reconcile.cjs +1 -2
- package/dist/reconcile.d.cts +2 -37
- package/dist/reconcile.d.mts +2 -37
- package/dist/reconcile.mjs +1 -2
- package/dist/services/AnsiScrub/ansiScrub.cjs +1 -5
- package/dist/services/AnsiScrub/ansiScrub.d.cts +2 -34
- package/dist/services/AnsiScrub/ansiScrub.d.mts +2 -34
- package/dist/services/AnsiScrub/ansiScrub.mjs +1 -5
- package/dist/services/AnsiScrub/index.cjs +1 -1
- package/dist/services/AnsiScrub/index.d.cts +1 -1
- package/dist/services/AnsiScrub/index.d.mts +1 -1
- package/dist/services/AnsiScrub/index.mjs +1 -1
- package/dist/services/BashRunService/BashRunService.cjs +1 -2
- package/dist/services/BashRunService/BashRunService.d.cts +2 -38
- package/dist/services/BashRunService/BashRunService.d.mts +2 -38
- package/dist/services/BashRunService/BashRunService.mjs +1 -2
- package/dist/services/BashRunService/index.cjs +1 -1
- package/dist/services/BashRunService/index.d.cts +2 -2
- package/dist/services/BashRunService/index.d.mts +2 -2
- package/dist/services/BashRunService/index.mjs +1 -1
- package/dist/services/Clock/SystemClock.cjs +1 -2
- package/dist/services/Clock/SystemClock.d.cts +2 -11
- package/dist/services/Clock/SystemClock.d.mts +2 -11
- package/dist/services/Clock/SystemClock.mjs +1 -2
- package/dist/services/Clock/index.cjs +1 -1
- package/dist/services/Clock/index.d.cts +2 -2
- package/dist/services/Clock/index.d.mts +2 -2
- package/dist/services/Clock/index.mjs +1 -1
- package/dist/services/Launcher/Launcher.cjs +1 -2
- package/dist/services/Launcher/Launcher.d.cts +2 -27
- package/dist/services/Launcher/Launcher.d.mts +2 -27
- package/dist/services/Launcher/Launcher.mjs +1 -2
- package/dist/services/Launcher/index.cjs +1 -1
- package/dist/services/Launcher/index.d.cts +2 -2
- package/dist/services/Launcher/index.d.mts +2 -2
- package/dist/services/Launcher/index.mjs +1 -1
- package/dist/services/Lifeline/NodeLifeline.cjs +1 -2
- package/dist/services/Lifeline/NodeLifeline.d.cts +2 -21
- package/dist/services/Lifeline/NodeLifeline.d.mts +2 -21
- package/dist/services/Lifeline/NodeLifeline.mjs +1 -2
- package/dist/services/Lifeline/client.cjs +1 -2
- package/dist/services/Lifeline/client.d.cts +2 -23
- package/dist/services/Lifeline/client.d.mts +2 -23
- package/dist/services/Lifeline/client.mjs +1 -2
- package/dist/services/Lifeline/index.cjs +1 -1
- package/dist/services/Lifeline/index.d.cts +3 -3
- package/dist/services/Lifeline/index.d.mts +3 -3
- package/dist/services/Lifeline/index.mjs +1 -1
- package/dist/services/LogFile/LogFile.cjs +1 -2
- package/dist/services/LogFile/LogFile.d.cts +2 -13
- package/dist/services/LogFile/LogFile.d.mts +2 -13
- package/dist/services/LogFile/LogFile.mjs +1 -2
- package/dist/services/LogFile/index.cjs +1 -1
- package/dist/services/LogFile/index.d.cts +2 -2
- package/dist/services/LogFile/index.d.mts +2 -2
- package/dist/services/LogFile/index.mjs +1 -1
- package/dist/services/LogReader/LogReader.cjs +1 -10
- package/dist/services/LogReader/LogReader.d.cts +2 -14
- package/dist/services/LogReader/LogReader.d.mts +2 -14
- package/dist/services/LogReader/LogReader.mjs +1 -10
- package/dist/services/LogReader/index.cjs +1 -1
- package/dist/services/LogReader/index.d.cts +2 -2
- package/dist/services/LogReader/index.d.mts +2 -2
- package/dist/services/LogReader/index.mjs +1 -1
- package/dist/services/ProcessControl/NodeProcessControl.cjs +1 -2
- package/dist/services/ProcessControl/NodeProcessControl.d.cts +2 -11
- package/dist/services/ProcessControl/NodeProcessControl.d.mts +2 -11
- package/dist/services/ProcessControl/NodeProcessControl.mjs +1 -2
- package/dist/services/ProcessControl/index.cjs +1 -1
- package/dist/services/ProcessControl/index.d.cts +2 -2
- package/dist/services/ProcessControl/index.d.mts +2 -2
- package/dist/services/ProcessControl/index.mjs +1 -1
- package/dist/services/PtyHost/PtyHost.cjs +1 -5
- package/dist/services/PtyHost/PtyHost.d.cts +2 -28
- package/dist/services/PtyHost/PtyHost.d.mts +2 -28
- package/dist/services/PtyHost/PtyHost.mjs +1 -5
- package/dist/services/PtyHost/index.cjs +1 -1
- package/dist/services/PtyHost/index.d.cts +2 -2
- package/dist/services/PtyHost/index.d.mts +2 -2
- package/dist/services/PtyHost/index.mjs +1 -1
- package/dist/services/PtySpawner/NodePtySpawner.cjs +1 -2
- package/dist/services/PtySpawner/NodePtySpawner.d.cts +2 -18
- package/dist/services/PtySpawner/NodePtySpawner.d.mts +2 -18
- package/dist/services/PtySpawner/NodePtySpawner.mjs +1 -2
- package/dist/services/PtySpawner/index.cjs +1 -1
- package/dist/services/PtySpawner/index.d.cts +2 -2
- package/dist/services/PtySpawner/index.d.mts +2 -2
- package/dist/services/PtySpawner/index.mjs +1 -1
- package/dist/services/RmuxBackend/RmuxBackend.cjs +1 -2
- package/dist/services/RmuxBackend/RmuxBackend.d.cts +2 -36
- package/dist/services/RmuxBackend/RmuxBackend.d.mts +2 -36
- package/dist/services/RmuxBackend/RmuxBackend.mjs +1 -2
- package/dist/services/RmuxBackend/index.cjs +1 -1
- package/dist/services/RmuxBackend/index.d.cts +2 -2
- package/dist/services/RmuxBackend/index.d.mts +2 -2
- package/dist/services/RmuxBackend/index.mjs +1 -1
- package/dist/services/RtkProcessor/RtkProcessor.cjs +1 -0
- package/dist/services/RtkProcessor/RtkProcessor.d.cts +2 -0
- package/dist/services/RtkProcessor/RtkProcessor.d.mts +2 -0
- package/dist/services/RtkProcessor/RtkProcessor.mjs +1 -0
- package/dist/services/RtkProcessor/index.cjs +1 -0
- package/dist/services/RtkProcessor/index.d.cts +3 -0
- package/dist/services/RtkProcessor/index.d.mts +3 -0
- package/dist/services/RtkProcessor/index.mjs +1 -0
- package/dist/services/RunnerNamer/RunnerNamer.cjs +1 -2
- package/dist/services/RunnerNamer/RunnerNamer.d.cts +2 -13
- package/dist/services/RunnerNamer/RunnerNamer.d.mts +2 -13
- package/dist/services/RunnerNamer/RunnerNamer.mjs +1 -2
- package/dist/services/RunnerNamer/index.cjs +1 -1
- package/dist/services/RunnerNamer/index.d.cts +2 -2
- package/dist/services/RunnerNamer/index.d.mts +2 -2
- package/dist/services/RunnerNamer/index.mjs +1 -1
- package/dist/services/RunnerPaths/RunnerPaths.cjs +1 -2
- package/dist/services/RunnerPaths/RunnerPaths.d.cts +2 -31
- package/dist/services/RunnerPaths/RunnerPaths.d.mts +2 -31
- package/dist/services/RunnerPaths/RunnerPaths.mjs +1 -2
- package/dist/services/RunnerPaths/index.cjs +1 -1
- package/dist/services/RunnerPaths/index.d.cts +2 -2
- package/dist/services/RunnerPaths/index.d.mts +2 -2
- package/dist/services/RunnerPaths/index.mjs +1 -1
- package/dist/services/RunnerRegistry/RunnerRegistry.cjs +1 -2
- package/dist/services/RunnerRegistry/RunnerRegistry.d.cts +2 -40
- package/dist/services/RunnerRegistry/RunnerRegistry.d.mts +2 -40
- package/dist/services/RunnerRegistry/RunnerRegistry.mjs +1 -2
- package/dist/services/RunnerRegistry/index.cjs +1 -1
- package/dist/services/RunnerRegistry/index.d.cts +2 -2
- package/dist/services/RunnerRegistry/index.d.mts +2 -2
- package/dist/services/RunnerRegistry/index.mjs +1 -1
- package/dist/services/Spawner/NodeSpawner.cjs +1 -2
- package/dist/services/Spawner/NodeSpawner.d.cts +2 -10
- package/dist/services/Spawner/NodeSpawner.d.mts +2 -10
- package/dist/services/Spawner/NodeSpawner.mjs +1 -2
- package/dist/services/Spawner/index.cjs +1 -1
- package/dist/services/Spawner/index.d.cts +2 -2
- package/dist/services/Spawner/index.d.mts +2 -2
- package/dist/services/Spawner/index.mjs +1 -1
- package/dist/session.cjs +1 -2
- package/dist/session.d.cts +2 -10
- package/dist/session.d.mts +2 -10
- package/dist/session.mjs +1 -2
- package/dist/sessionApi.cjs +1 -0
- package/dist/sessionApi.d.cts +2 -0
- package/dist/sessionApi.d.mts +2 -0
- package/dist/sessionApi.mjs +1 -0
- package/dist/src/adapters/BashRunService/BashRunService.cjs +2 -0
- package/dist/src/adapters/BashRunService/BashRunService.cjs.map +1 -0
- package/dist/src/adapters/BashRunService/BashRunService.d.cts +32 -0
- package/dist/src/adapters/BashRunService/BashRunService.d.cts.map +1 -0
- package/dist/src/adapters/BashRunService/BashRunService.d.mts +32 -0
- package/dist/src/adapters/BashRunService/BashRunService.d.mts.map +1 -0
- package/dist/src/adapters/BashRunService/BashRunService.mjs +2 -0
- package/dist/src/adapters/BashRunService/BashRunService.mjs.map +1 -0
- package/dist/src/adapters/Clock/SystemClock.cjs +2 -0
- package/dist/src/adapters/Clock/SystemClock.cjs.map +1 -0
- package/dist/src/adapters/Clock/SystemClock.d.cts +10 -0
- package/dist/src/adapters/Clock/SystemClock.d.cts.map +1 -0
- package/dist/src/adapters/Clock/SystemClock.d.mts +10 -0
- package/dist/src/adapters/Clock/SystemClock.d.mts.map +1 -0
- package/dist/src/adapters/Clock/SystemClock.mjs +2 -0
- package/dist/src/adapters/Clock/SystemClock.mjs.map +1 -0
- package/dist/src/adapters/Launcher/Launcher.cjs +2 -0
- package/dist/src/adapters/Launcher/Launcher.cjs.map +1 -0
- package/dist/src/adapters/Launcher/Launcher.d.cts +21 -0
- package/dist/src/adapters/Launcher/Launcher.d.cts.map +1 -0
- package/dist/src/adapters/Launcher/Launcher.d.mts +21 -0
- package/dist/src/adapters/Launcher/Launcher.d.mts.map +1 -0
- package/dist/src/adapters/Launcher/Launcher.mjs +2 -0
- package/dist/src/adapters/Launcher/Launcher.mjs.map +1 -0
- package/dist/src/adapters/Lifeline/NodeLifeline.cjs +2 -0
- package/dist/src/adapters/Lifeline/NodeLifeline.cjs.map +1 -0
- package/dist/src/adapters/Lifeline/NodeLifeline.d.cts +19 -0
- package/dist/src/adapters/Lifeline/NodeLifeline.d.cts.map +1 -0
- package/dist/src/adapters/Lifeline/NodeLifeline.d.mts +19 -0
- package/dist/src/adapters/Lifeline/NodeLifeline.d.mts.map +1 -0
- package/dist/src/adapters/Lifeline/NodeLifeline.mjs +2 -0
- package/dist/src/adapters/Lifeline/NodeLifeline.mjs.map +1 -0
- package/dist/src/adapters/Lifeline/client.cjs +2 -0
- package/dist/src/adapters/Lifeline/client.cjs.map +1 -0
- package/dist/src/adapters/Lifeline/client.d.cts +23 -0
- package/dist/src/adapters/Lifeline/client.d.cts.map +1 -0
- package/dist/src/adapters/Lifeline/client.d.mts +23 -0
- package/dist/src/adapters/Lifeline/client.d.mts.map +1 -0
- package/dist/src/adapters/Lifeline/client.mjs +2 -0
- package/dist/src/adapters/Lifeline/client.mjs.map +1 -0
- package/dist/src/adapters/LogFile/LogFile.cjs +2 -0
- package/dist/src/adapters/LogFile/LogFile.cjs.map +1 -0
- package/dist/src/adapters/LogFile/LogFile.d.cts +11 -0
- package/dist/src/adapters/LogFile/LogFile.d.cts.map +1 -0
- package/dist/src/adapters/LogFile/LogFile.d.mts +11 -0
- package/dist/src/adapters/LogFile/LogFile.d.mts.map +1 -0
- package/dist/src/adapters/LogFile/LogFile.mjs +2 -0
- package/dist/src/adapters/LogFile/LogFile.mjs.map +1 -0
- package/dist/src/adapters/LogReader/LogReader.cjs +8 -0
- package/dist/src/adapters/LogReader/LogReader.cjs.map +1 -0
- package/dist/src/adapters/LogReader/LogReader.d.cts +13 -0
- package/dist/src/adapters/LogReader/LogReader.d.cts.map +1 -0
- package/dist/src/adapters/LogReader/LogReader.d.mts +13 -0
- package/dist/src/adapters/LogReader/LogReader.d.mts.map +1 -0
- package/dist/src/adapters/LogReader/LogReader.mjs +8 -0
- package/dist/src/adapters/LogReader/LogReader.mjs.map +1 -0
- package/dist/src/adapters/LogTail/LogTail.cjs +3 -0
- package/dist/src/adapters/LogTail/LogTail.cjs.map +1 -0
- package/dist/src/adapters/LogTail/LogTail.mjs +3 -0
- package/dist/src/adapters/LogTail/LogTail.mjs.map +1 -0
- package/dist/src/adapters/ProcessControl/NodeProcessControl.cjs +2 -0
- package/dist/src/adapters/ProcessControl/NodeProcessControl.cjs.map +1 -0
- package/dist/src/adapters/ProcessControl/NodeProcessControl.d.cts +10 -0
- package/dist/src/adapters/ProcessControl/NodeProcessControl.d.cts.map +1 -0
- package/dist/src/adapters/ProcessControl/NodeProcessControl.d.mts +10 -0
- package/dist/src/adapters/ProcessControl/NodeProcessControl.d.mts.map +1 -0
- package/dist/src/adapters/ProcessControl/NodeProcessControl.mjs +2 -0
- package/dist/src/adapters/ProcessControl/NodeProcessControl.mjs.map +1 -0
- package/dist/src/adapters/PtyBackendChain/PtyBackendChain.cjs +2 -0
- package/dist/src/adapters/PtyBackendChain/PtyBackendChain.cjs.map +1 -0
- package/dist/src/adapters/PtyBackendChain/PtyBackendChain.mjs +2 -0
- package/dist/src/adapters/PtyBackendChain/PtyBackendChain.mjs.map +1 -0
- package/dist/src/adapters/PtyHost/PtyHost.cjs +5 -0
- package/dist/src/adapters/PtyHost/PtyHost.cjs.map +1 -0
- package/dist/src/adapters/PtyHost/PtyHost.d.cts +23 -0
- package/dist/src/adapters/PtyHost/PtyHost.d.cts.map +1 -0
- package/dist/src/adapters/PtyHost/PtyHost.d.mts +23 -0
- package/dist/src/adapters/PtyHost/PtyHost.d.mts.map +1 -0
- package/dist/src/adapters/PtyHost/PtyHost.mjs +5 -0
- package/dist/src/adapters/PtyHost/PtyHost.mjs.map +1 -0
- package/dist/src/adapters/PtySpawner/NodePtySpawner.cjs +2 -0
- package/dist/src/adapters/PtySpawner/NodePtySpawner.cjs.map +1 -0
- package/dist/src/adapters/PtySpawner/NodePtySpawner.d.cts +14 -0
- package/dist/src/adapters/PtySpawner/NodePtySpawner.d.cts.map +1 -0
- package/dist/src/adapters/PtySpawner/NodePtySpawner.d.mts +14 -0
- package/dist/src/adapters/PtySpawner/NodePtySpawner.d.mts.map +1 -0
- package/dist/src/adapters/PtySpawner/NodePtySpawner.mjs +2 -0
- package/dist/src/adapters/PtySpawner/NodePtySpawner.mjs.map +1 -0
- package/dist/src/adapters/RmuxBackend/RmuxBackend.cjs +2 -0
- package/dist/src/adapters/RmuxBackend/RmuxBackend.cjs.map +1 -0
- package/dist/src/adapters/RmuxBackend/RmuxBackend.d.cts +31 -0
- package/dist/src/adapters/RmuxBackend/RmuxBackend.d.cts.map +1 -0
- package/dist/src/adapters/RmuxBackend/RmuxBackend.d.mts +31 -0
- package/dist/src/adapters/RmuxBackend/RmuxBackend.d.mts.map +1 -0
- package/dist/src/adapters/RmuxBackend/RmuxBackend.mjs +2 -0
- package/dist/src/adapters/RmuxBackend/RmuxBackend.mjs.map +1 -0
- package/dist/src/adapters/RtkProcessor/RtkProcessor.cjs +2 -0
- package/dist/src/adapters/RtkProcessor/RtkProcessor.cjs.map +1 -0
- package/dist/src/adapters/RtkProcessor/RtkProcessor.d.cts +29 -0
- package/dist/src/adapters/RtkProcessor/RtkProcessor.d.cts.map +1 -0
- package/dist/src/adapters/RtkProcessor/RtkProcessor.d.mts +29 -0
- package/dist/src/adapters/RtkProcessor/RtkProcessor.d.mts.map +1 -0
- package/dist/src/adapters/RtkProcessor/RtkProcessor.mjs +2 -0
- package/dist/src/adapters/RtkProcessor/RtkProcessor.mjs.map +1 -0
- package/dist/src/adapters/RunnerPaths.cjs +2 -0
- package/dist/src/adapters/RunnerPaths.cjs.map +1 -0
- package/dist/src/adapters/RunnerPaths.d.cts +34 -0
- package/dist/src/adapters/RunnerPaths.d.cts.map +1 -0
- package/dist/src/adapters/RunnerPaths.d.mts +34 -0
- package/dist/src/adapters/RunnerPaths.d.mts.map +1 -0
- package/dist/src/adapters/RunnerPaths.mjs +2 -0
- package/dist/src/adapters/RunnerPaths.mjs.map +1 -0
- package/dist/src/adapters/RunnerRegistry/RunnerRegistry.cjs +2 -0
- package/dist/src/adapters/RunnerRegistry/RunnerRegistry.cjs.map +1 -0
- package/dist/src/adapters/RunnerRegistry/RunnerRegistry.d.cts +37 -0
- package/dist/src/adapters/RunnerRegistry/RunnerRegistry.d.cts.map +1 -0
- package/dist/src/adapters/RunnerRegistry/RunnerRegistry.d.mts +37 -0
- package/dist/src/adapters/RunnerRegistry/RunnerRegistry.d.mts.map +1 -0
- package/dist/src/adapters/RunnerRegistry/RunnerRegistry.mjs +2 -0
- package/dist/src/adapters/RunnerRegistry/RunnerRegistry.mjs.map +1 -0
- package/dist/src/adapters/RunnerSettings/RunnerSettingsLoader.cjs +2 -0
- package/dist/src/adapters/RunnerSettings/RunnerSettingsLoader.cjs.map +1 -0
- package/dist/src/adapters/RunnerSettings/RunnerSettingsLoader.mjs +2 -0
- package/dist/src/adapters/RunnerSettings/RunnerSettingsLoader.mjs.map +1 -0
- package/dist/src/adapters/Spawner/NodeSpawner.cjs +2 -0
- package/dist/src/adapters/Spawner/NodeSpawner.cjs.map +1 -0
- package/dist/src/adapters/Spawner/NodeSpawner.d.cts +9 -0
- package/dist/src/adapters/Spawner/NodeSpawner.d.cts.map +1 -0
- package/dist/src/adapters/Spawner/NodeSpawner.d.mts +9 -0
- package/dist/src/adapters/Spawner/NodeSpawner.d.mts.map +1 -0
- package/dist/src/adapters/Spawner/NodeSpawner.mjs +2 -0
- package/dist/src/adapters/Spawner/NodeSpawner.mjs.map +1 -0
- package/dist/src/adapters/TmuxBackend/TmuxBackend.cjs +2 -0
- package/dist/src/adapters/TmuxBackend/TmuxBackend.cjs.map +1 -0
- package/dist/src/adapters/TmuxBackend/TmuxBackend.mjs +2 -0
- package/dist/src/adapters/TmuxBackend/TmuxBackend.mjs.map +1 -0
- package/dist/src/adapters/TmuxBackend/TmuxClient.cjs +2 -0
- package/dist/src/adapters/TmuxBackend/TmuxClient.cjs.map +1 -0
- package/dist/src/adapters/TmuxBackend/TmuxClient.mjs +2 -0
- package/dist/src/adapters/TmuxBackend/TmuxClient.mjs.map +1 -0
- package/dist/src/adapters/pi/extension.cjs +3 -0
- package/dist/src/adapters/pi/extension.cjs.map +1 -0
- package/dist/src/adapters/pi/extension.d.cts +8 -0
- package/dist/src/adapters/pi/extension.d.cts.map +1 -0
- package/dist/src/adapters/pi/extension.d.mts +8 -0
- package/dist/src/adapters/pi/extension.d.mts.map +1 -0
- package/dist/src/adapters/pi/extension.mjs +3 -0
- package/dist/src/adapters/pi/extension.mjs.map +1 -0
- package/dist/src/adapters/runnerLogApi.cjs +2 -0
- package/dist/src/adapters/runnerLogApi.cjs.map +1 -0
- package/dist/src/adapters/runnerLogApi.d.cts +28 -0
- package/dist/src/adapters/runnerLogApi.d.cts.map +1 -0
- package/dist/src/adapters/runnerLogApi.d.mts +28 -0
- package/dist/src/adapters/runnerLogApi.d.mts.map +1 -0
- package/dist/src/adapters/runnerLogApi.mjs +2 -0
- package/dist/src/adapters/runnerLogApi.mjs.map +1 -0
- package/dist/src/adapters/webRunnerWatcher.cjs +2 -0
- package/dist/src/adapters/webRunnerWatcher.cjs.map +1 -0
- package/dist/src/adapters/webRunnerWatcher.d.cts +22 -0
- package/dist/src/adapters/webRunnerWatcher.d.cts.map +1 -0
- package/dist/src/adapters/webRunnerWatcher.d.mts +22 -0
- package/dist/src/adapters/webRunnerWatcher.d.mts.map +1 -0
- package/dist/src/adapters/webRunnerWatcher.mjs +2 -0
- package/dist/src/adapters/webRunnerWatcher.mjs.map +1 -0
- package/dist/src/adapters/webRunnersChannel.cjs +2 -0
- package/dist/src/adapters/webRunnersChannel.cjs.map +1 -0
- package/dist/src/adapters/webRunnersChannel.d.cts +15 -0
- package/dist/src/adapters/webRunnersChannel.d.cts.map +1 -0
- package/dist/src/adapters/webRunnersChannel.d.mts +15 -0
- package/dist/src/adapters/webRunnersChannel.d.mts.map +1 -0
- package/dist/src/adapters/webRunnersChannel.mjs +2 -0
- package/dist/src/adapters/webRunnersChannel.mjs.map +1 -0
- package/dist/src/commands/bash/bashTool.cjs +6 -0
- package/dist/src/commands/bash/bashTool.cjs.map +1 -0
- package/dist/src/commands/bash/bashTool.d.cts +24 -0
- package/dist/src/commands/bash/bashTool.d.cts.map +1 -0
- package/dist/src/commands/bash/bashTool.d.mts +24 -0
- package/dist/src/commands/bash/bashTool.d.mts.map +1 -0
- package/dist/src/commands/bash/bashTool.mjs +6 -0
- package/dist/src/commands/bash/bashTool.mjs.map +1 -0
- package/dist/src/commands/bash/responseEnvelope.cjs +14 -0
- package/dist/src/commands/bash/responseEnvelope.cjs.map +1 -0
- package/dist/src/commands/bash/responseEnvelope.d.cts +94 -0
- package/dist/src/commands/bash/responseEnvelope.d.cts.map +1 -0
- package/dist/src/commands/bash/responseEnvelope.d.mts +94 -0
- package/dist/src/commands/bash/responseEnvelope.d.mts.map +1 -0
- package/dist/src/commands/bash/responseEnvelope.mjs +14 -0
- package/dist/src/commands/bash/responseEnvelope.mjs.map +1 -0
- package/dist/src/commands/cli/cliApp.cjs +6 -0
- package/dist/src/commands/cli/cliApp.cjs.map +1 -0
- package/dist/src/commands/cli/cliApp.d.cts +19 -0
- package/dist/src/commands/cli/cliApp.d.cts.map +1 -0
- package/dist/src/commands/cli/cliApp.d.mts +19 -0
- package/dist/src/commands/cli/cliApp.d.mts.map +1 -0
- package/dist/src/commands/cli/cliApp.mjs +6 -0
- package/dist/src/commands/cli/cliApp.mjs.map +1 -0
- package/dist/src/container/index.cjs +2 -0
- package/dist/src/container/index.cjs.map +1 -0
- package/dist/src/container/index.d.cts +17 -0
- package/dist/src/container/index.d.cts.map +1 -0
- package/dist/src/container/index.d.mts +17 -0
- package/dist/src/container/index.d.mts.map +1 -0
- package/dist/src/container/index.mjs +2 -0
- package/dist/src/container/index.mjs.map +1 -0
- package/dist/src/container/types.d.cts +40 -0
- package/dist/src/container/types.d.cts.map +1 -0
- package/dist/src/container/types.d.mts +40 -0
- package/dist/src/container/types.d.mts.map +1 -0
- package/dist/src/schemas/bashTool.cjs +2 -0
- package/dist/src/schemas/bashTool.cjs.map +1 -0
- package/dist/src/schemas/bashTool.d.cts +25 -0
- package/dist/src/schemas/bashTool.d.cts.map +1 -0
- package/dist/src/schemas/bashTool.d.mts +25 -0
- package/dist/src/schemas/bashTool.d.mts.map +1 -0
- package/dist/src/schemas/bashTool.mjs +2 -0
- package/dist/src/schemas/bashTool.mjs.map +1 -0
- package/dist/src/schemas/runnerSpec.cjs +2 -0
- package/dist/src/schemas/runnerSpec.cjs.map +1 -0
- package/dist/{runnerSpec.mjs → src/schemas/runnerSpec.mjs} +1 -1
- package/dist/src/schemas/runnerSpec.mjs.map +1 -0
- package/dist/src/services/AnsiScrub/ansiScrub.cjs +5 -0
- package/dist/src/services/AnsiScrub/ansiScrub.cjs.map +1 -0
- package/dist/src/services/AnsiScrub/ansiScrub.d.cts +34 -0
- package/dist/src/services/AnsiScrub/ansiScrub.d.cts.map +1 -0
- package/dist/src/services/AnsiScrub/ansiScrub.d.mts +34 -0
- package/dist/src/services/AnsiScrub/ansiScrub.d.mts.map +1 -0
- package/dist/src/services/AnsiScrub/ansiScrub.mjs +5 -0
- package/dist/src/services/AnsiScrub/ansiScrub.mjs.map +1 -0
- package/dist/src/services/RunnerNamer/RunnerNamer.cjs +2 -0
- package/dist/src/services/RunnerNamer/RunnerNamer.cjs.map +1 -0
- package/dist/src/services/RunnerNamer/RunnerNamer.d.cts +11 -0
- package/dist/src/services/RunnerNamer/RunnerNamer.d.cts.map +1 -0
- package/dist/src/services/RunnerNamer/RunnerNamer.d.mts +11 -0
- package/dist/src/services/RunnerNamer/RunnerNamer.d.mts.map +1 -0
- package/dist/src/services/RunnerNamer/RunnerNamer.mjs +2 -0
- package/dist/src/services/RunnerNamer/RunnerNamer.mjs.map +1 -0
- package/dist/src/services/RunnerNamer/types.d.cts.map +1 -0
- package/dist/src/services/RunnerNamer/types.d.mts.map +1 -0
- package/dist/{services → src/services}/RunnerPaths/types.d.cts +3 -1
- package/dist/src/services/RunnerPaths/types.d.cts.map +1 -0
- package/dist/{services → src/services}/RunnerPaths/types.d.mts +3 -1
- package/dist/src/services/RunnerPaths/types.d.mts.map +1 -0
- package/dist/src/services/TokenEstimate/tokenEstimate.cjs +2 -0
- package/dist/src/services/TokenEstimate/tokenEstimate.cjs.map +1 -0
- package/dist/src/services/TokenEstimate/tokenEstimate.mjs +2 -0
- package/dist/src/services/TokenEstimate/tokenEstimate.mjs.map +1 -0
- package/dist/src/services/runs/compaction.cjs +4 -0
- package/dist/src/services/runs/compaction.cjs.map +1 -0
- package/dist/src/services/runs/compaction.d.cts +13 -0
- package/dist/src/services/runs/compaction.d.cts.map +1 -0
- package/dist/src/services/runs/compaction.d.mts +13 -0
- package/dist/src/services/runs/compaction.d.mts.map +1 -0
- package/dist/src/services/runs/compaction.mjs +4 -0
- package/dist/src/services/runs/compaction.mjs.map +1 -0
- package/dist/src/services/runs/reconcile.cjs +2 -0
- package/dist/src/services/runs/reconcile.cjs.map +1 -0
- package/dist/src/services/runs/reconcile.d.cts +32 -0
- package/dist/src/services/runs/reconcile.d.cts.map +1 -0
- package/dist/src/services/runs/reconcile.d.mts +32 -0
- package/dist/src/services/runs/reconcile.d.mts.map +1 -0
- package/dist/src/services/runs/reconcile.mjs +2 -0
- package/dist/src/services/runs/reconcile.mjs.map +1 -0
- package/dist/src/services/runs/runnerRecord.cjs +2 -0
- package/dist/src/services/runs/runnerRecord.cjs.map +1 -0
- package/dist/src/services/runs/runnerRecord.mjs +2 -0
- package/dist/src/services/runs/runnerRecord.mjs.map +1 -0
- package/dist/src/services/runs/runnersCommand.cjs +2 -0
- package/dist/src/services/runs/runnersCommand.cjs.map +1 -0
- package/dist/src/services/runs/runnersCommand.mjs +2 -0
- package/dist/src/services/runs/runnersCommand.mjs.map +1 -0
- package/dist/src/services/runs/session.cjs +2 -0
- package/dist/src/services/runs/session.cjs.map +1 -0
- package/dist/src/services/runs/session.d.cts +10 -0
- package/dist/src/services/runs/session.d.cts.map +1 -0
- package/dist/src/services/runs/session.d.mts +10 -0
- package/dist/src/services/runs/session.d.mts.map +1 -0
- package/dist/src/services/runs/session.mjs +2 -0
- package/dist/src/services/runs/session.mjs.map +1 -0
- package/dist/src/services/webRunnerRuns.cjs +2 -0
- package/dist/src/services/webRunnerRuns.cjs.map +1 -0
- package/dist/src/services/webRunnerRuns.mjs +2 -0
- package/dist/src/services/webRunnerRuns.mjs.map +1 -0
- package/dist/src/tui/bashRender.cjs +5 -0
- package/dist/src/tui/bashRender.cjs.map +1 -0
- package/dist/src/tui/bashRender.d.cts +51 -0
- package/dist/src/tui/bashRender.d.cts.map +1 -0
- package/dist/src/tui/bashRender.d.mts +51 -0
- package/dist/src/tui/bashRender.d.mts.map +1 -0
- package/dist/src/tui/bashRender.mjs +5 -0
- package/dist/src/tui/bashRender.mjs.map +1 -0
- package/dist/src/tui/format.cjs +2 -0
- package/dist/{tui → src/tui}/format.cjs.map +1 -1
- package/dist/src/tui/format.d.cts +24 -0
- package/dist/src/tui/format.d.cts.map +1 -0
- package/dist/src/tui/format.d.mts +24 -0
- package/dist/src/tui/format.d.mts.map +1 -0
- package/dist/src/tui/format.mjs +2 -0
- package/dist/{tui → src/tui}/format.mjs.map +1 -1
- package/dist/src/tui/runnerSpace.cjs +6 -0
- package/dist/src/tui/runnerSpace.cjs.map +1 -0
- package/dist/src/tui/runnerSpace.d.cts +50 -0
- package/dist/src/tui/runnerSpace.d.cts.map +1 -0
- package/dist/src/tui/runnerSpace.d.mts +50 -0
- package/dist/src/tui/runnerSpace.d.mts.map +1 -0
- package/dist/src/tui/runnerSpace.mjs +6 -0
- package/dist/src/tui/runnerSpace.mjs.map +1 -0
- package/dist/{services/BashRunService/types.d.cts → src/types/bashRunService.d.cts} +7 -2
- package/dist/src/types/bashRunService.d.cts.map +1 -0
- package/dist/{services/BashRunService/types.d.mts → src/types/bashRunService.d.mts} +7 -2
- package/dist/src/types/bashRunService.d.mts.map +1 -0
- package/dist/{services/Clock/types.d.cts → src/types/clock.d.cts} +2 -2
- package/dist/src/types/clock.d.cts.map +1 -0
- package/dist/{services/Clock/types.d.mts → src/types/clock.d.mts} +2 -2
- package/dist/src/types/clock.d.mts.map +1 -0
- package/dist/src/types/config.cjs +2 -0
- package/dist/src/types/config.cjs.map +1 -0
- package/dist/src/types/config.d.cts +74 -0
- package/dist/src/types/config.d.cts.map +1 -0
- package/dist/src/types/config.d.mts +74 -0
- package/dist/src/types/config.d.mts.map +1 -0
- package/dist/src/types/config.mjs +2 -0
- package/dist/src/types/config.mjs.map +1 -0
- package/dist/{services/Launcher/types.d.cts → src/types/launcher.d.cts} +3 -4
- package/dist/src/types/launcher.d.cts.map +1 -0
- package/dist/{services/Launcher/types.d.mts → src/types/launcher.d.mts} +3 -4
- package/dist/src/types/launcher.d.mts.map +1 -0
- package/dist/{services/Lifeline/types.d.cts → src/types/lifeline.d.cts} +2 -2
- package/dist/src/types/lifeline.d.cts.map +1 -0
- package/dist/{services/Lifeline/types.d.mts → src/types/lifeline.d.mts} +2 -2
- package/dist/src/types/lifeline.d.mts.map +1 -0
- package/dist/{services/LogFile/types.d.cts → src/types/logFile.d.cts} +3 -3
- package/dist/src/types/logFile.d.cts.map +1 -0
- package/dist/{services/LogFile/types.d.mts → src/types/logFile.d.mts} +3 -3
- package/dist/src/types/logFile.d.mts.map +1 -0
- package/dist/{services/LogReader/types.d.cts → src/types/logReader.d.cts} +3 -3
- package/dist/src/types/logReader.d.cts.map +1 -0
- package/dist/{services/LogReader/types.d.mts → src/types/logReader.d.mts} +3 -3
- package/dist/src/types/logReader.d.mts.map +1 -0
- package/dist/src/types/logTail.d.cts +23 -0
- package/dist/src/types/logTail.d.cts.map +1 -0
- package/dist/src/types/logTail.d.mts +23 -0
- package/dist/src/types/logTail.d.mts.map +1 -0
- package/dist/{services/ProcessControl/types.d.cts → src/types/processControl.d.cts} +2 -2
- package/dist/src/types/processControl.d.cts.map +1 -0
- package/dist/{services/ProcessControl/types.d.mts → src/types/processControl.d.mts} +2 -2
- package/dist/src/types/processControl.d.mts.map +1 -0
- package/dist/{services/PtyHost/types.d.cts → src/types/ptyHost.d.cts} +3 -4
- package/dist/src/types/ptyHost.d.cts.map +1 -0
- package/dist/{services/PtyHost/types.d.mts → src/types/ptyHost.d.mts} +3 -4
- package/dist/src/types/ptyHost.d.mts.map +1 -0
- package/dist/{services/PtySpawner/types.d.cts → src/types/ptySpawner.d.cts} +3 -3
- package/dist/src/types/ptySpawner.d.cts.map +1 -0
- package/dist/{services/PtySpawner/types.d.mts → src/types/ptySpawner.d.mts} +3 -3
- package/dist/src/types/ptySpawner.d.mts.map +1 -0
- package/dist/{services/RmuxBackend/types.d.cts → src/types/rmuxBackend.d.cts} +5 -8
- package/dist/src/types/rmuxBackend.d.cts.map +1 -0
- package/dist/{services/RmuxBackend/types.d.mts → src/types/rmuxBackend.d.mts} +5 -8
- package/dist/src/types/rmuxBackend.d.mts.map +1 -0
- package/dist/src/types/rtkProcessor.cjs +2 -0
- package/dist/src/types/rtkProcessor.cjs.map +1 -0
- package/dist/src/types/rtkProcessor.d.cts +35 -0
- package/dist/src/types/rtkProcessor.d.cts.map +1 -0
- package/dist/src/types/rtkProcessor.d.mts +35 -0
- package/dist/src/types/rtkProcessor.d.mts.map +1 -0
- package/dist/src/types/rtkProcessor.mjs +2 -0
- package/dist/src/types/rtkProcessor.mjs.map +1 -0
- package/dist/{services/RunnerRegistry/types.d.cts → src/types/runnerRegistry.d.cts} +2 -2
- package/dist/{services/RunnerRegistry/types.d.cts.map → src/types/runnerRegistry.d.cts.map} +1 -1
- package/dist/{services/RunnerRegistry/types.d.mts → src/types/runnerRegistry.d.mts} +2 -2
- package/dist/{services/RunnerRegistry/types.d.mts.map → src/types/runnerRegistry.d.mts.map} +1 -1
- package/dist/src/types/runnerSettings.d.cts +34 -0
- package/dist/src/types/runnerSettings.d.cts.map +1 -0
- package/dist/src/types/runnerSettings.d.mts +34 -0
- package/dist/src/types/runnerSettings.d.mts.map +1 -0
- package/dist/{services/Spawner/types.d.cts → src/types/spawner.d.cts} +2 -2
- package/dist/src/types/spawner.d.cts.map +1 -0
- package/dist/{services/Spawner/types.d.mts → src/types/spawner.d.mts} +2 -2
- package/dist/src/types/spawner.d.mts.map +1 -0
- package/dist/src/types/webRunnerLog.cjs +2 -0
- package/dist/src/types/webRunnerLog.cjs.map +1 -0
- package/dist/src/types/webRunnerLog.mjs +2 -0
- package/dist/src/types/webRunnerLog.mjs.map +1 -0
- package/dist/src/types/webRunners.cjs +2 -0
- package/dist/src/types/webRunners.cjs.map +1 -0
- package/dist/src/types/webRunners.d.cts +38 -0
- package/dist/src/types/webRunners.d.cts.map +1 -0
- package/dist/src/types/webRunners.d.mts +38 -0
- package/dist/src/types/webRunners.d.mts.map +1 -0
- package/dist/src/types/webRunners.mjs +2 -0
- package/dist/src/types/webRunners.mjs.map +1 -0
- package/dist/tool/bashTool.cjs +1 -7
- package/dist/tool/bashTool.d.cts +2 -25
- package/dist/tool/bashTool.d.mts +2 -25
- package/dist/tool/bashTool.mjs +1 -7
- package/dist/tool/responseEnvelope.cjs +1 -10
- package/dist/tool/responseEnvelope.d.cts +2 -45
- package/dist/tool/responseEnvelope.d.mts +2 -45
- package/dist/tool/responseEnvelope.mjs +1 -10
- package/dist/tool/schema.cjs +1 -2
- package/dist/tool/schema.d.cts +2 -25
- package/dist/tool/schema.d.mts +2 -25
- package/dist/tool/schema.mjs +1 -2
- package/dist/tui/bashRender.cjs +1 -8
- package/dist/tui/bashRender.d.cts +2 -51
- package/dist/tui/bashRender.d.mts +2 -51
- package/dist/tui/bashRender.mjs +1 -8
- package/dist/tui/format.cjs +1 -2
- package/dist/tui/format.d.cts +2 -25
- package/dist/tui/format.d.mts +2 -25
- package/dist/tui/format.mjs +1 -2
- package/dist/tui/runnerSpace.cjs +1 -6
- package/dist/tui/runnerSpace.d.cts +2 -52
- package/dist/tui/runnerSpace.d.mts +2 -52
- package/dist/tui/runnerSpace.mjs +1 -6
- package/dist/types.cjs +0 -2
- package/dist/types.d.cts +3 -28
- package/dist/types.d.mts +3 -28
- package/dist/types.mjs +1 -2
- package/dist/webHub.cjs +1 -0
- package/dist/webHub.d.cts +2 -0
- package/dist/webHub.d.mts +2 -0
- package/dist/webHub.mjs +1 -0
- package/llms.txt +9 -0
- package/package.json +100 -34
- package/skills/doom-runner/SKILL.md +7 -4
- package/src/prompts/doompi-use-runner/SKILL.md +38 -0
- package/src/types/webRunnerLog.ts +95 -0
- package/src/types/webRunners.ts +39 -0
- package/web/BashToolMessage.tsx +156 -0
- package/web/RunnerLogPanel.tsx +269 -0
- package/web/RunnersActivitySection.tsx +107 -0
- package/web/bashToolFormat.ts +216 -0
- package/web/format.ts +42 -0
- package/web/index.ts +21 -0
- package/web/logApi.ts +82 -0
- package/web/runnersStore.ts +50 -0
- package/web/tsconfig.json +23 -0
- package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorate.cjs +0 -1
- package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorate.mjs +0 -1
- package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorateMetadata.cjs +0 -1
- package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorateMetadata.mjs +0 -1
- package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorateParam.cjs +0 -1
- package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorateParam.mjs +0 -1
- package/dist/cli/cliApp.cjs.map +0 -1
- package/dist/cli/cliApp.d.cts.map +0 -1
- package/dist/cli/cliApp.d.mts.map +0 -1
- package/dist/cli/cliApp.mjs.map +0 -1
- package/dist/compaction.cjs.map +0 -1
- package/dist/compaction.d.cts.map +0 -1
- package/dist/compaction.d.mts.map +0 -1
- package/dist/compaction.mjs.map +0 -1
- package/dist/config.cjs.map +0 -1
- package/dist/config.d.cts.map +0 -1
- package/dist/config.d.mts.map +0 -1
- package/dist/config.mjs.map +0 -1
- package/dist/container/index.cjs.map +0 -1
- package/dist/container/index.d.cts.map +0 -1
- package/dist/container/index.d.mts.map +0 -1
- package/dist/container/index.mjs.map +0 -1
- package/dist/extension.cjs +0 -3
- package/dist/extension.cjs.map +0 -1
- package/dist/extension.d.cts +0 -10
- package/dist/extension.d.cts.map +0 -1
- package/dist/extension.d.mts +0 -10
- package/dist/extension.d.mts.map +0 -1
- package/dist/extension.mjs +0 -3
- package/dist/extension.mjs.map +0 -1
- package/dist/extensions/pi.cjs.map +0 -1
- package/dist/extensions/pi.mjs.map +0 -1
- package/dist/ptyProvider.cjs +0 -2
- package/dist/ptyProvider.cjs.map +0 -1
- package/dist/ptyProvider.d.cts +0 -13
- package/dist/ptyProvider.d.cts.map +0 -1
- package/dist/ptyProvider.d.mts +0 -13
- package/dist/ptyProvider.d.mts.map +0 -1
- package/dist/ptyProvider.mjs +0 -2
- package/dist/ptyProvider.mjs.map +0 -1
- package/dist/reconcile.cjs.map +0 -1
- package/dist/reconcile.d.cts.map +0 -1
- package/dist/reconcile.d.mts.map +0 -1
- package/dist/reconcile.mjs.map +0 -1
- package/dist/runnerSpec.cjs +0 -2
- package/dist/runnerSpec.cjs.map +0 -1
- package/dist/runnerSpec.d.cts +0 -50
- package/dist/runnerSpec.d.cts.map +0 -1
- package/dist/runnerSpec.d.mts +0 -50
- package/dist/runnerSpec.d.mts.map +0 -1
- package/dist/runnerSpec.mjs.map +0 -1
- package/dist/services/AnsiScrub/ansiScrub.cjs.map +0 -1
- package/dist/services/AnsiScrub/ansiScrub.d.cts.map +0 -1
- package/dist/services/AnsiScrub/ansiScrub.d.mts.map +0 -1
- package/dist/services/AnsiScrub/ansiScrub.mjs.map +0 -1
- package/dist/services/BashRunService/BashRunService.cjs.map +0 -1
- package/dist/services/BashRunService/BashRunService.d.cts.map +0 -1
- package/dist/services/BashRunService/BashRunService.d.mts.map +0 -1
- package/dist/services/BashRunService/BashRunService.mjs.map +0 -1
- package/dist/services/BashRunService/types.d.cts.map +0 -1
- package/dist/services/BashRunService/types.d.mts.map +0 -1
- package/dist/services/Clock/SystemClock.cjs.map +0 -1
- package/dist/services/Clock/SystemClock.d.cts.map +0 -1
- package/dist/services/Clock/SystemClock.d.mts.map +0 -1
- package/dist/services/Clock/SystemClock.mjs.map +0 -1
- package/dist/services/Clock/types.d.cts.map +0 -1
- package/dist/services/Clock/types.d.mts.map +0 -1
- package/dist/services/Launcher/Launcher.cjs.map +0 -1
- package/dist/services/Launcher/Launcher.d.cts.map +0 -1
- package/dist/services/Launcher/Launcher.d.mts.map +0 -1
- package/dist/services/Launcher/Launcher.mjs.map +0 -1
- package/dist/services/Launcher/types.d.cts.map +0 -1
- package/dist/services/Launcher/types.d.mts.map +0 -1
- package/dist/services/Lifeline/NodeLifeline.cjs.map +0 -1
- package/dist/services/Lifeline/NodeLifeline.d.cts.map +0 -1
- package/dist/services/Lifeline/NodeLifeline.d.mts.map +0 -1
- package/dist/services/Lifeline/NodeLifeline.mjs.map +0 -1
- package/dist/services/Lifeline/client.cjs.map +0 -1
- package/dist/services/Lifeline/client.d.cts.map +0 -1
- package/dist/services/Lifeline/client.d.mts.map +0 -1
- package/dist/services/Lifeline/client.mjs.map +0 -1
- package/dist/services/Lifeline/types.d.cts.map +0 -1
- package/dist/services/Lifeline/types.d.mts.map +0 -1
- package/dist/services/LogFile/LogFile.cjs.map +0 -1
- package/dist/services/LogFile/LogFile.d.cts.map +0 -1
- package/dist/services/LogFile/LogFile.d.mts.map +0 -1
- package/dist/services/LogFile/LogFile.mjs.map +0 -1
- package/dist/services/LogFile/types.d.cts.map +0 -1
- package/dist/services/LogFile/types.d.mts.map +0 -1
- package/dist/services/LogReader/LogReader.cjs.map +0 -1
- package/dist/services/LogReader/LogReader.d.cts.map +0 -1
- package/dist/services/LogReader/LogReader.d.mts.map +0 -1
- package/dist/services/LogReader/LogReader.mjs.map +0 -1
- package/dist/services/LogReader/types.d.cts.map +0 -1
- package/dist/services/LogReader/types.d.mts.map +0 -1
- package/dist/services/ProcessControl/NodeProcessControl.cjs.map +0 -1
- package/dist/services/ProcessControl/NodeProcessControl.d.cts.map +0 -1
- package/dist/services/ProcessControl/NodeProcessControl.d.mts.map +0 -1
- package/dist/services/ProcessControl/NodeProcessControl.mjs.map +0 -1
- package/dist/services/ProcessControl/types.d.cts.map +0 -1
- package/dist/services/ProcessControl/types.d.mts.map +0 -1
- package/dist/services/PtyHost/PtyHost.cjs.map +0 -1
- package/dist/services/PtyHost/PtyHost.d.cts.map +0 -1
- package/dist/services/PtyHost/PtyHost.d.mts.map +0 -1
- package/dist/services/PtyHost/PtyHost.mjs.map +0 -1
- package/dist/services/PtyHost/types.d.cts.map +0 -1
- package/dist/services/PtyHost/types.d.mts.map +0 -1
- package/dist/services/PtySpawner/NodePtySpawner.cjs.map +0 -1
- package/dist/services/PtySpawner/NodePtySpawner.d.cts.map +0 -1
- package/dist/services/PtySpawner/NodePtySpawner.d.mts.map +0 -1
- package/dist/services/PtySpawner/NodePtySpawner.mjs.map +0 -1
- package/dist/services/PtySpawner/types.d.cts.map +0 -1
- package/dist/services/PtySpawner/types.d.mts.map +0 -1
- package/dist/services/RmuxBackend/RmuxBackend.cjs.map +0 -1
- package/dist/services/RmuxBackend/RmuxBackend.d.cts.map +0 -1
- package/dist/services/RmuxBackend/RmuxBackend.d.mts.map +0 -1
- package/dist/services/RmuxBackend/RmuxBackend.mjs.map +0 -1
- package/dist/services/RmuxBackend/types.d.cts.map +0 -1
- package/dist/services/RmuxBackend/types.d.mts.map +0 -1
- package/dist/services/RunnerNamer/RunnerNamer.cjs.map +0 -1
- package/dist/services/RunnerNamer/RunnerNamer.d.cts.map +0 -1
- package/dist/services/RunnerNamer/RunnerNamer.d.mts.map +0 -1
- package/dist/services/RunnerNamer/RunnerNamer.mjs.map +0 -1
- package/dist/services/RunnerNamer/types.d.cts.map +0 -1
- package/dist/services/RunnerNamer/types.d.mts.map +0 -1
- package/dist/services/RunnerPaths/RunnerPaths.cjs.map +0 -1
- package/dist/services/RunnerPaths/RunnerPaths.d.cts.map +0 -1
- package/dist/services/RunnerPaths/RunnerPaths.d.mts.map +0 -1
- package/dist/services/RunnerPaths/RunnerPaths.mjs.map +0 -1
- package/dist/services/RunnerPaths/types.d.cts.map +0 -1
- package/dist/services/RunnerPaths/types.d.mts.map +0 -1
- package/dist/services/RunnerRegistry/RunnerRegistry.cjs.map +0 -1
- package/dist/services/RunnerRegistry/RunnerRegistry.d.cts.map +0 -1
- package/dist/services/RunnerRegistry/RunnerRegistry.d.mts.map +0 -1
- package/dist/services/RunnerRegistry/RunnerRegistry.mjs.map +0 -1
- package/dist/services/Spawner/NodeSpawner.cjs.map +0 -1
- package/dist/services/Spawner/NodeSpawner.d.cts.map +0 -1
- package/dist/services/Spawner/NodeSpawner.d.mts.map +0 -1
- package/dist/services/Spawner/NodeSpawner.mjs.map +0 -1
- package/dist/services/Spawner/types.d.cts.map +0 -1
- package/dist/services/Spawner/types.d.mts.map +0 -1
- package/dist/session.cjs.map +0 -1
- package/dist/session.d.cts.map +0 -1
- package/dist/session.d.mts.map +0 -1
- package/dist/session.mjs.map +0 -1
- package/dist/tool/bashTool.cjs.map +0 -1
- package/dist/tool/bashTool.d.cts.map +0 -1
- package/dist/tool/bashTool.d.mts.map +0 -1
- package/dist/tool/bashTool.mjs.map +0 -1
- package/dist/tool/responseEnvelope.cjs.map +0 -1
- package/dist/tool/responseEnvelope.d.cts.map +0 -1
- package/dist/tool/responseEnvelope.d.mts.map +0 -1
- package/dist/tool/responseEnvelope.mjs.map +0 -1
- package/dist/tool/schema.cjs.map +0 -1
- package/dist/tool/schema.d.cts.map +0 -1
- package/dist/tool/schema.d.mts.map +0 -1
- package/dist/tool/schema.mjs.map +0 -1
- package/dist/tui/bashRender.cjs.map +0 -1
- package/dist/tui/bashRender.d.cts.map +0 -1
- package/dist/tui/bashRender.d.mts.map +0 -1
- package/dist/tui/bashRender.mjs.map +0 -1
- package/dist/tui/format.d.cts.map +0 -1
- package/dist/tui/format.d.mts.map +0 -1
- package/dist/tui/runnerSpace.cjs.map +0 -1
- package/dist/tui/runnerSpace.d.cts.map +0 -1
- package/dist/tui/runnerSpace.d.mts.map +0 -1
- package/dist/tui/runnerSpace.mjs.map +0 -1
- package/dist/types.cjs.map +0 -1
- package/dist/types.d.cts.map +0 -1
- package/dist/types.d.mts.map +0 -1
- package/dist/types.mjs.map +0 -1
- /package/dist/{services → src/services}/RunnerNamer/types.d.cts +0 -0
- /package/dist/{services → src/services}/RunnerNamer/types.d.mts +0 -0
package/README.md
CHANGED
|
@@ -1,46 +1,234 @@
|
|
|
1
1
|
# @agimon-ai/doompi-runner
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Supervised shell execution, background process control, durable logs, and Runner Space for Pi.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
instead of blocking, a process tool manages them, and detached runs reconcile themselves
|
|
7
|
-
after the context is rewritten.
|
|
5
|
+
Part of the [DoomPi distribution](https://www.npmjs.com/package/@agimon-ai/doompi).
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
Runner replaces Pi's built-in `bash` tool only in sessions that load it. Short commands return
|
|
8
|
+
inline; long commands can be promoted to a background runner instead of blocking the agent.
|
|
9
|
+
|
|
10
|
+
> **Alpha:** tool and process contracts may change between releases.
|
|
11
|
+
|
|
12
|
+
## Requirements
|
|
13
|
+
|
|
14
|
+
- Node.js 22.19.0 or newer
|
|
15
|
+
- Pi 0.84.3 and Pi TUI 0.84.3
|
|
16
|
+
- `/bin/bash`
|
|
17
|
+
- macOS or Linux on arm64 or x64 for bundled RMUX and RTK support
|
|
18
|
+
|
|
19
|
+
Linux native loading also depends on a compatible system loader and libc. The bundled binaries are
|
|
20
|
+
glibc-linked, so a musl host such as Alpine cannot run them.
|
|
21
|
+
|
|
22
|
+
RTK is optional. Where its binary is absent or cannot start, runner results carry the raw log with
|
|
23
|
+
an "RTK is unavailable" note instead of processed output. That verdict is reached once per process
|
|
24
|
+
rather than retried per command, so an unusable binary costs one failed start rather than one on
|
|
25
|
+
every run.
|
|
26
|
+
|
|
27
|
+
Panes come from the first backend that answers: bundled RMUX, then `rmux` on PATH, then `tmux` on
|
|
28
|
+
PATH. Only when none is available does a non-interactive command fall back to a supervised
|
|
29
|
+
subprocess, and interactive commands need one of them. A tmux-backed run is supervised by the same
|
|
30
|
+
host process as an RMUX one, so exit metadata and logs behave the same; its session names carry a
|
|
31
|
+
`doom-tmux-` prefix rather than `doom-runner-`.
|
|
12
32
|
|
|
13
33
|
## Install
|
|
14
34
|
|
|
35
|
+
DoomPi includes Runner in every composition, so no layer declaration is required. For direct Pi
|
|
36
|
+
installation:
|
|
37
|
+
|
|
15
38
|
```bash
|
|
16
|
-
|
|
39
|
+
pi install npm:@agimon-ai/doompi-runner
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Pi discovers Runner's sole extension factory from `package.json.pi.extensions`. The extension joins
|
|
43
|
+
the runner-scoped Cordis host and releases its plugin resources and host lease when the Pi session
|
|
44
|
+
shuts down.
|
|
45
|
+
|
|
46
|
+
## Use the `bash` tool
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"command": "pnpm test",
|
|
51
|
+
"timeout": 60
|
|
52
|
+
}
|
|
17
53
|
```
|
|
18
54
|
|
|
19
|
-
|
|
55
|
+
Commands crossing the promotion threshold move to a supervised runner. The default threshold is 60
|
|
56
|
+
seconds. Set `background: true` to detach immediately, or `interactive: true` only when a command
|
|
57
|
+
needs terminal input.
|
|
20
58
|
|
|
21
|
-
|
|
59
|
+
Runner requires `PI_SESSION_ID` for session ownership. Processes, controls, and logs remain
|
|
60
|
+
addressable after transcript compaction because their identity is outside model context.
|
|
22
61
|
|
|
23
|
-
|
|
24
|
-
layers:
|
|
25
|
-
runner:
|
|
26
|
-
packages: ['@agimon-ai/doompi-runner/extensions/pi']
|
|
62
|
+
### RTK result processing
|
|
27
63
|
|
|
28
|
-
|
|
29
|
-
|
|
64
|
+
Runner keeps the complete original log, then uses the matching RTK stdin filter only for
|
|
65
|
+
conservatively recognized single commands. Current safe mappings cover `cargo test`, `pytest`, plain
|
|
66
|
+
unified `git diff`, structured `grep` or `rg`, `go test -json`, and JSON-formatted `ruff check`.
|
|
67
|
+
Compound commands, pipelines, redirects, substitutions, incompatible formats, unsupported commands,
|
|
68
|
+
and logs above RTK's 10 MiB stdin limit return bounded raw output instead. An eligible RTK failure
|
|
69
|
+
also returns bounded raw output with a warning and does not change the command exit result.
|
|
70
|
+
|
|
71
|
+
## Inspect and control runs
|
|
72
|
+
|
|
73
|
+
Use `/runners` or `SPC r l` in the TUI. The `doom-runner` CLI supports:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
doom-runner list
|
|
77
|
+
doom-runner status <runner-id>
|
|
78
|
+
doom-runner logs <runner-id>
|
|
79
|
+
doom-runner input <runner-id> --text "y" --enter
|
|
80
|
+
doom-runner stop <runner-id>
|
|
81
|
+
doom-runner stop-all
|
|
30
82
|
```
|
|
31
83
|
|
|
32
|
-
|
|
84
|
+
The `input` command requires a running interactive process backed by RMUX or tmux.
|
|
85
|
+
|
|
86
|
+
Stop runs that are no longer required.
|
|
87
|
+
|
|
88
|
+
## Storage and limits
|
|
33
89
|
|
|
34
|
-
|
|
90
|
+
By default, session-scoped logs and registry data live under:
|
|
35
91
|
|
|
36
|
-
|
|
92
|
+
```text
|
|
93
|
+
~/.pi/agent/doom-runner/<session>/
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Logs remain complete until TTL cleanup and are eligible for cleanup after seven days by default. The
|
|
97
|
+
legacy log-size configuration exports remain available for compatibility but no longer rotate log
|
|
98
|
+
content. Result limits, retention, and the promotion threshold remain environment-configurable.
|
|
99
|
+
|
|
100
|
+
### Result excerpts
|
|
101
|
+
|
|
102
|
+
A result that exceeds the ceiling is returned as an excerpt: roughly the first fifth of the budget
|
|
103
|
+
holds the opening lines, the rest holds the closing ones, and a marker between them states how many
|
|
104
|
+
lines were dropped.
|
|
105
|
+
|
|
106
|
+
The budget depends on the exit status. A command that **failed** gets 8 KiB and 120 lines, because
|
|
107
|
+
its output is the evidence. A command that **succeeded** gets 2 KiB, because exiting 0 has already
|
|
108
|
+
reported the outcome and the rest is mostly progress lines and repeated warnings:
|
|
109
|
+
|
|
110
|
+
```text
|
|
111
|
+
Log excerpt (71 of 604 lines):
|
|
112
|
+
$ pnpm build
|
|
113
|
+
Compiling 1200 modules...
|
|
114
|
+
compiled src/module-0.ts
|
|
115
|
+
… [5 lines elided] …
|
|
116
|
+
compiled src/module-599.ts
|
|
117
|
+
Build succeeded in 12.4s
|
|
118
|
+
exit status 0
|
|
119
|
+
Full log: /path/to/run.log (17.0 KB, 604 lines); inspect with doom-runner logs run-a
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Three ceilings apply and whichever binds first wins: bytes, lines, and tokens. Tokens are there
|
|
123
|
+
because bytes do not track context cost. Measured against `gpt-tokenizer`, real text runs from about
|
|
124
|
+
1.4 characters per token for base64 to 4.7 for English prose, so 8 KiB of one costs several times
|
|
125
|
+
what 8 KiB of the other does. The defaults are 2,048 tokens on failure and 512 on success.
|
|
126
|
+
|
|
127
|
+
Token counts are estimated rather than tokenized: truncation runs on every command and is
|
|
128
|
+
synchronous, so loading a vocabulary would charge every session for a table most never need. The
|
|
129
|
+
estimator models how BPE behaves, with punctuation forcing boundaries, natural words cheap, and
|
|
130
|
+
letter-digit runs expensive. Its worst error against `gpt-tokenizer` is a factor of about 1.46
|
|
131
|
+
either way, which is why the byte ceiling stays behind it as the hard bound.
|
|
132
|
+
|
|
133
|
+
`DOOM_RUNNER_RESULT_MAX_BYTES`, `DOOM_RUNNER_RESULT_MAX_TOKENS`, and their
|
|
134
|
+
`DOOM_RUNNER_SUCCESS_*` counterparts move these for one invocation. A pragma overrides all of
|
|
135
|
+
them, which is how one noisy successful command can still ask for the wider result. Raising only
|
|
136
|
+
`maxResultBytes` will not help when the token ceiling is the one binding.
|
|
137
|
+
|
|
138
|
+
Error lines found in the dropped span are rescued into that marker's block, up to ten entries.
|
|
139
|
+
Matching looks for a severity word in the first 60 characters, so `[widget] build: error TS2322`
|
|
140
|
+
and a line behind a timestamp both count, while `0 errors`, `no failures`, and `--error-format` do
|
|
141
|
+
not. Byte-identical lines collapse to one entry with an occurrence count. Lines that share a shape
|
|
142
|
+
but differ in detail keep every variant, joined inside brackets so nothing actionable is lost:
|
|
143
|
+
|
|
144
|
+
```text
|
|
145
|
+
ERROR in [src/widget-100.ts:100:7|src/widget-200.ts:200:7] - Type mismatch
|
|
146
|
+
error: connection refused (×40)
|
|
147
|
+
```
|
|
37
148
|
|
|
38
|
-
|
|
39
|
-
optional dependencies.
|
|
149
|
+
The complete raw log on disk is never truncated.
|
|
40
150
|
|
|
41
|
-
|
|
151
|
+
### Configuration
|
|
152
|
+
|
|
153
|
+
Four layers, most specific first: a per-command pragma, then an environment variable, then project
|
|
154
|
+
configuration, then the built-in default. Project configuration is the project's baseline, so an
|
|
155
|
+
environment variable set for one invocation still wins over it.
|
|
156
|
+
|
|
157
|
+
One command that needs a wider result can say so on its first line. The pragma is a shell comment,
|
|
158
|
+
so it stays harmless to the command itself:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# @doom: {"maxResultBytes": 32768, "maxResultTokens": 8192, "maxResultLines": 300}
|
|
162
|
+
pnpm build
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Project settings follow Pi's convention for extension configuration: one JSON file per extension
|
|
166
|
+
under the config directory, at `.pi/doompi-runner.json`. It is read only when the project is
|
|
167
|
+
trusted, and an unrecognized or out-of-range key is reported rather than silently ignored.
|
|
168
|
+
|
|
169
|
+
```json
|
|
170
|
+
{
|
|
171
|
+
"maxResultBytes": 16384,
|
|
172
|
+
"maxResultLines": 200,
|
|
173
|
+
"successMaxResultBytes": 2048,
|
|
174
|
+
"maxResultTokens": 2048,
|
|
175
|
+
"successMaxResultTokens": 512,
|
|
176
|
+
"headRatio": 0.2,
|
|
177
|
+
"errorPatterns": ["^FEHLER", "^\\s*FAILED\\b"],
|
|
178
|
+
"errorMaxEntries": 10,
|
|
179
|
+
"errorMaxVariantsJoined": 6,
|
|
180
|
+
"errorBudgetRatio": 0.2
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
`errorPatterns` extends the built-in matcher rather than replacing it, which is what makes output
|
|
185
|
+
it does not recognize reachable. Ceilings apply to every numeric key so a checked-in file cannot
|
|
186
|
+
flood the model's context.
|
|
187
|
+
|
|
188
|
+
Commands inherit the DoomPi process environment and the operating system user's privileges. Logs
|
|
189
|
+
may contain prompts, source, command output, credentials, or other secrets; restrict access and
|
|
190
|
+
retention accordingly.
|
|
191
|
+
|
|
192
|
+
## Native artifacts
|
|
193
|
+
|
|
194
|
+
Runner selects the matching optional dependencies automatically:
|
|
195
|
+
|
|
196
|
+
| Host | RMUX package | RTK package |
|
|
197
|
+
| ----------- | -------------------------------------------- | ------------------------------------------- |
|
|
198
|
+
| macOS arm64 | `@agimon-ai/doompi-runner-rmux-darwin-arm64` | `@agimon-ai/doompi-runner-rtk-darwin-arm64` |
|
|
199
|
+
| macOS x64 | `@agimon-ai/doompi-runner-rmux-darwin-x64` | `@agimon-ai/doompi-runner-rtk-darwin-x64` |
|
|
200
|
+
| Linux arm64 | `@agimon-ai/doompi-runner-rmux-linux-arm64` | `@agimon-ai/doompi-runner-rtk-linux-arm64` |
|
|
201
|
+
| Linux x64 | `@agimon-ai/doompi-runner-rmux-linux-x64` | `@agimon-ai/doompi-runner-rtk-linux-x64` |
|
|
202
|
+
|
|
203
|
+
Do not install platform packages directly. They contain native executables and export only package
|
|
204
|
+
metadata. RMUX is dual-licensed under MIT or Apache-2.0. RTK v0.45.0 is licensed under Apache-2.0.
|
|
205
|
+
|
|
206
|
+
## Public API
|
|
207
|
+
|
|
208
|
+
```ts
|
|
209
|
+
import {
|
|
210
|
+
createRunnerContainer,
|
|
211
|
+
DEFAULT_BG_THRESHOLD_MS,
|
|
212
|
+
DEFAULT_LOG_MAX_BYTES,
|
|
213
|
+
DEFAULT_LOG_TTL_MS,
|
|
214
|
+
RmuxBackend,
|
|
215
|
+
rtkPackageForTarget,
|
|
216
|
+
} from '@agimon-ai/doompi-runner';
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Declared subpaths expose process supervision, configuration, tools, response envelopes, and TUI
|
|
220
|
+
integration for host authors.
|
|
221
|
+
|
|
222
|
+
## Development
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
pnpm build
|
|
226
|
+
pnpm typecheck
|
|
227
|
+
pnpm test
|
|
228
|
+
pnpm lint
|
|
229
|
+
```
|
|
42
230
|
|
|
43
|
-
|
|
231
|
+
Maintained by [Agimon](https://agimon.ai/about).
|
|
44
232
|
|
|
45
233
|
## License
|
|
46
234
|
|
package/dist/bin/cli.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../
|
|
3
|
-
`)?e:`${e}\n`;
|
|
4
|
-
`)?e:`${e}\n`;
|
|
2
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../src/container/index.cjs"),t=require("../src/commands/cli/cliApp.cjs");let n=require("node:url"),r=require("@agimon-ai/doompi-telemetry");async function i(){let e=[];for await(let t of process.stdin)e.push(Buffer.isBuffer(t)?t:Buffer.from(t));return Buffer.concat(e).toString(`utf8`)}async function a(n=process.argv.slice(2)){let a=Date.now(),o=(0,r.createDoomTelemetry)({serviceName:`doom-runner-cli`,packageName:`@agimon-ai/doompi-runner`,env:process.env,enableLogs:!0,enableTraces:!0}),s=e.createRunnerContainer(),c=s.runnerRegistry,l=0,u=0;try{let e=await t.runCli(n,{registry:c,launcher:s.launcher,rmuxBackend:s.rmuxBackend,logReader:s.logReader,env:process.env,stdout:e=>{let t=e.endsWith(`
|
|
3
|
+
`)?e:`${e}\n`;l+=Buffer.byteLength(t,`utf8`),process.stdout.write(t)},stderr:e=>{let t=e.endsWith(`
|
|
4
|
+
`)?e:`${e}\n`;u+=Buffer.byteLength(t,`utf8`),process.stderr.write(t)},readStdin:i});return await o.recordEvent(`doom_runner.cli_finished`,{outcome:e===0?`completed`:`failed`,"runner.exit_code":e,duration_ms:Date.now()-a,"runner.argument_count":n.length,"runner.stdout_bytes":l,"runner.stderr_bytes":u}),e}catch(e){throw await o.recordError(`doom_runner.cli_failed`,e,{duration_ms:Date.now()-a,"runner.argument_count":n.length,"runner.stdout_bytes":l,"runner.stderr_bytes":u}),e}finally{c.close(),await o.shutdown()}}process.argv[1]&&require("url").pathToFileURL(__filename).href===(0,n.pathToFileURL)(process.argv[1]).href&&a().then(e=>{process.exitCode=e},e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}),exports.main=a;
|
|
5
5
|
//# sourceMappingURL=cli.cjs.map
|
package/dist/bin/cli.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.cjs","names":["createDoomTelemetry","createRunnerContainer","
|
|
1
|
+
{"version":3,"file":"cli.cjs","names":["createDoomTelemetry","createRunnerContainer","runCli","pathToFileURL"],"sources":["../../src/bin/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { pathToFileURL } from 'node:url';\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\nimport { runCli } from '../commands/cli/cliApp.ts';\nimport { createRunnerContainer } from '../container/index.ts';\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n return Buffer.concat(chunks).toString('utf8');\n}\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-cli',\n packageName: '@agimon-ai/doompi-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const container = createRunnerContainer();\n const registry = container.runnerRegistry;\n let stdoutBytes = 0;\n let stderrBytes = 0;\n try {\n const exitCode = await runCli(argv, {\n registry,\n launcher: container.launcher,\n rmuxBackend: container.rmuxBackend,\n logReader: container.logReader,\n env: process.env,\n stdout: (text) => {\n const output = text.endsWith('\\n') ? text : `${text}\\n`;\n stdoutBytes += Buffer.byteLength(output, 'utf8');\n process.stdout.write(output);\n },\n stderr: (text) => {\n const output = text.endsWith('\\n') ? text : `${text}\\n`;\n stderrBytes += Buffer.byteLength(output, 'utf8');\n process.stderr.write(output);\n },\n readStdin,\n });\n await telemetry.recordEvent('doom_runner.cli_finished', {\n outcome: exitCode === 0 ? 'completed' : 'failed',\n 'runner.exit_code': exitCode,\n duration_ms: Date.now() - startedAt,\n 'runner.argument_count': argv.length,\n 'runner.stdout_bytes': stdoutBytes,\n 'runner.stderr_bytes': stderrBytes,\n });\n return exitCode;\n } catch (error) {\n await telemetry.recordError('doom_runner.cli_failed', error, {\n duration_ms: Date.now() - startedAt,\n 'runner.argument_count': argv.length,\n 'runner.stdout_bytes': stdoutBytes,\n 'runner.stderr_bytes': stderrBytes,\n });\n throw error;\n } finally {\n registry.close();\n await telemetry.shutdown();\n }\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":";gOAOA,eAAe,GAA6B,CAC1C,IAAM,EAAmB,CAAC,EAC1B,UAAW,IAAM,KAAS,QAAQ,MAAO,EAAO,KAAK,OAAO,SAAS,CAAK,EAAI,EAAQ,OAAO,KAAK,CAAK,CAAC,EACxG,OAAO,OAAO,OAAO,CAAM,CAAC,CAAC,SAAS,MAAM,CAC9C,CAEA,eAAsB,EAAK,EAA0B,QAAQ,KAAK,MAAM,CAAC,EAAoB,CAC3F,IAAM,EAAY,KAAK,IAAI,EACrB,GAAA,EAAYA,EAAAA,oBAAAA,CAAoB,CACpC,YAAa,kBACb,YAAa,2BACb,IAAK,QAAQ,IACb,WAAY,GACZ,aAAc,EAChB,CAAC,EACK,EAAYC,EAAAA,sBAAsB,EAClC,EAAW,EAAU,eACvB,EAAc,EACd,EAAc,EAClB,GAAI,CACF,IAAM,EAAW,MAAMC,EAAAA,OAAO,EAAM,CAClC,WACA,SAAU,EAAU,SACpB,YAAa,EAAU,YACvB,UAAW,EAAU,UACrB,IAAK,QAAQ,IACb,OAAS,GAAS,CAChB,IAAM,EAAS,EAAK,SAAS;CAAI,EAAI,EAAO,GAAG,EAAK,IACpD,GAAe,OAAO,WAAW,EAAQ,MAAM,EAC/C,QAAQ,OAAO,MAAM,CAAM,CAC7B,EACA,OAAS,GAAS,CAChB,IAAM,EAAS,EAAK,SAAS;CAAI,EAAI,EAAO,GAAG,EAAK,IACpD,GAAe,OAAO,WAAW,EAAQ,MAAM,EAC/C,QAAQ,OAAO,MAAM,CAAM,CAC7B,EACA,WACF,CAAC,EASD,OARA,MAAM,EAAU,YAAY,2BAA4B,CACtD,QAAS,IAAa,EAAI,YAAc,SACxC,mBAAoB,EACpB,YAAa,KAAK,IAAI,EAAI,EAC1B,wBAAyB,EAAK,OAC9B,sBAAuB,EACvB,sBAAuB,CACzB,CAAC,EACM,CACT,OAAS,EAAO,CAOd,MANA,MAAM,EAAU,YAAY,yBAA0B,EAAO,CAC3D,YAAa,KAAK,IAAI,EAAI,EAC1B,wBAAyB,EAAK,OAC9B,sBAAuB,EACvB,sBAAuB,CACzB,CAAC,EACK,CACR,QAAU,CACR,EAAS,MAAM,EACf,MAAM,EAAU,SAAS,CAC3B,CACF,CAEI,QAAQ,KAAK,IAAA,QAAA,KAAA,CAAA,CAAA,cAAA,UAAA,CAAA,CAAA,QAAA,EAA0BC,EAAAA,cAAAA,CAAc,QAAQ,KAAK,EAAE,CAAC,CAAC,MACxE,EAAK,CAAC,CAAC,KACJ,GAAS,CACR,QAAQ,SAAW,CACrB,EACC,GAAmB,CAClB,QAAQ,OAAO,MAAM,GAAG,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAAE,GAAG,EAClF,QAAQ,SAAW,CACrB,CACF"}
|
package/dist/bin/cli.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.cts","names":[],"sources":["../../src/bin/cli.ts"],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.d.cts","names":[],"sources":["../../src/bin/cli.ts"],"mappings":";iBAasB,KAAK,2BAAkD"}
|
package/dist/bin/cli.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.mts","names":[],"sources":["../../src/bin/cli.ts"],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.d.mts","names":[],"sources":["../../src/bin/cli.ts"],"mappings":";iBAasB,KAAK,2BAAkD"}
|
package/dist/bin/cli.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{
|
|
3
|
-
`)?e:`${e}\n`;
|
|
4
|
-
`)?e:`${e}\n`;
|
|
2
|
+
import{createRunnerContainer as e}from"../src/container/index.mjs";import{runCli as t}from"../src/commands/cli/cliApp.mjs";import{pathToFileURL as n}from"node:url";import{createDoomTelemetry as r}from"@agimon-ai/doompi-telemetry";async function i(){let e=[];for await(let t of process.stdin)e.push(Buffer.isBuffer(t)?t:Buffer.from(t));return Buffer.concat(e).toString(`utf8`)}async function a(n=process.argv.slice(2)){let a=Date.now(),o=r({serviceName:`doom-runner-cli`,packageName:`@agimon-ai/doompi-runner`,env:process.env,enableLogs:!0,enableTraces:!0}),s=e(),c=s.runnerRegistry,l=0,u=0;try{let e=await t(n,{registry:c,launcher:s.launcher,rmuxBackend:s.rmuxBackend,logReader:s.logReader,env:process.env,stdout:e=>{let t=e.endsWith(`
|
|
3
|
+
`)?e:`${e}\n`;l+=Buffer.byteLength(t,`utf8`),process.stdout.write(t)},stderr:e=>{let t=e.endsWith(`
|
|
4
|
+
`)?e:`${e}\n`;u+=Buffer.byteLength(t,`utf8`),process.stderr.write(t)},readStdin:i});return await o.recordEvent(`doom_runner.cli_finished`,{outcome:e===0?`completed`:`failed`,"runner.exit_code":e,duration_ms:Date.now()-a,"runner.argument_count":n.length,"runner.stdout_bytes":l,"runner.stderr_bytes":u}),e}catch(e){throw await o.recordError(`doom_runner.cli_failed`,e,{duration_ms:Date.now()-a,"runner.argument_count":n.length,"runner.stdout_bytes":l,"runner.stderr_bytes":u}),e}finally{c.close(),await o.shutdown()}}process.argv[1]&&import.meta.url===n(process.argv[1]).href&&a().then(e=>{process.exitCode=e},e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1});export{a as main};
|
|
5
5
|
//# sourceMappingURL=cli.mjs.map
|
package/dist/bin/cli.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.mjs","names":[],"sources":["../../src/bin/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport {
|
|
1
|
+
{"version":3,"file":"cli.mjs","names":[],"sources":["../../src/bin/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { pathToFileURL } from 'node:url';\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\nimport { runCli } from '../commands/cli/cliApp.ts';\nimport { createRunnerContainer } from '../container/index.ts';\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n return Buffer.concat(chunks).toString('utf8');\n}\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-cli',\n packageName: '@agimon-ai/doompi-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const container = createRunnerContainer();\n const registry = container.runnerRegistry;\n let stdoutBytes = 0;\n let stderrBytes = 0;\n try {\n const exitCode = await runCli(argv, {\n registry,\n launcher: container.launcher,\n rmuxBackend: container.rmuxBackend,\n logReader: container.logReader,\n env: process.env,\n stdout: (text) => {\n const output = text.endsWith('\\n') ? text : `${text}\\n`;\n stdoutBytes += Buffer.byteLength(output, 'utf8');\n process.stdout.write(output);\n },\n stderr: (text) => {\n const output = text.endsWith('\\n') ? text : `${text}\\n`;\n stderrBytes += Buffer.byteLength(output, 'utf8');\n process.stderr.write(output);\n },\n readStdin,\n });\n await telemetry.recordEvent('doom_runner.cli_finished', {\n outcome: exitCode === 0 ? 'completed' : 'failed',\n 'runner.exit_code': exitCode,\n duration_ms: Date.now() - startedAt,\n 'runner.argument_count': argv.length,\n 'runner.stdout_bytes': stdoutBytes,\n 'runner.stderr_bytes': stderrBytes,\n });\n return exitCode;\n } catch (error) {\n await telemetry.recordError('doom_runner.cli_failed', error, {\n duration_ms: Date.now() - startedAt,\n 'runner.argument_count': argv.length,\n 'runner.stdout_bytes': stdoutBytes,\n 'runner.stderr_bytes': stderrBytes,\n });\n throw error;\n } finally {\n registry.close();\n await telemetry.shutdown();\n }\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":";sOAOA,eAAe,GAA6B,CAC1C,IAAM,EAAmB,CAAC,EAC1B,UAAW,IAAM,KAAS,QAAQ,MAAO,EAAO,KAAK,OAAO,SAAS,CAAK,EAAI,EAAQ,OAAO,KAAK,CAAK,CAAC,EACxG,OAAO,OAAO,OAAO,CAAM,CAAC,CAAC,SAAS,MAAM,CAC9C,CAEA,eAAsB,EAAK,EAA0B,QAAQ,KAAK,MAAM,CAAC,EAAoB,CAC3F,IAAM,EAAY,KAAK,IAAI,EACrB,EAAY,EAAoB,CACpC,YAAa,kBACb,YAAa,2BACb,IAAK,QAAQ,IACb,WAAY,GACZ,aAAc,EAChB,CAAC,EACK,EAAY,EAAsB,EAClC,EAAW,EAAU,eACvB,EAAc,EACd,EAAc,EAClB,GAAI,CACF,IAAM,EAAW,MAAM,EAAO,EAAM,CAClC,WACA,SAAU,EAAU,SACpB,YAAa,EAAU,YACvB,UAAW,EAAU,UACrB,IAAK,QAAQ,IACb,OAAS,GAAS,CAChB,IAAM,EAAS,EAAK,SAAS;CAAI,EAAI,EAAO,GAAG,EAAK,IACpD,GAAe,OAAO,WAAW,EAAQ,MAAM,EAC/C,QAAQ,OAAO,MAAM,CAAM,CAC7B,EACA,OAAS,GAAS,CAChB,IAAM,EAAS,EAAK,SAAS;CAAI,EAAI,EAAO,GAAG,EAAK,IACpD,GAAe,OAAO,WAAW,EAAQ,MAAM,EAC/C,QAAQ,OAAO,MAAM,CAAM,CAC7B,EACA,WACF,CAAC,EASD,OARA,MAAM,EAAU,YAAY,2BAA4B,CACtD,QAAS,IAAa,EAAI,YAAc,SACxC,mBAAoB,EACpB,YAAa,KAAK,IAAI,EAAI,EAC1B,wBAAyB,EAAK,OAC9B,sBAAuB,EACvB,sBAAuB,CACzB,CAAC,EACM,CACT,OAAS,EAAO,CAOd,MANA,MAAM,EAAU,YAAY,yBAA0B,EAAO,CAC3D,YAAa,KAAK,IAAI,EAAI,EAC1B,wBAAyB,EAAK,OAC9B,sBAAuB,EACvB,sBAAuB,CACzB,CAAC,EACK,CACR,QAAU,CACR,EAAS,MAAM,EACf,MAAM,EAAU,SAAS,CAC3B,CACF,CAEI,QAAQ,KAAK,IAAM,YAAY,MAAQ,EAAc,QAAQ,KAAK,EAAE,CAAC,CAAC,MACxE,EAAK,CAAC,CAAC,KACJ,GAAS,CACR,QAAQ,SAAW,CACrB,EACC,GAAmB,CAClB,QAAQ,OAAO,MAAM,GAAG,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAAE,GAAG,EAClF,QAAQ,SAAW,CACrB,CACF"}
|
package/dist/bin/logSink.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../services/AnsiScrub/ansiScrub.cjs");
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../src/services/AnsiScrub/ansiScrub.cjs");let n=require("node:fs");n=e.__toESM(n,1);let r=require("node:url"),i=require("@agimon-ai/doompi-telemetry");async function a(e=process.argv.slice(2)){let r=Date.now(),a=(0,i.createDoomTelemetry)({serviceName:`doom-runner-log-sink`,packageName:`@agimon-ai/doompi-runner`,env:process.env,enableLogs:!0,enableTraces:!0}),[s,c,l,u]=e;try{if(!s||!c||!l||!u)throw Error(`logSink requires log, rotated log, max bytes, and completion paths`)}catch(e){throw await a.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-r}),await a.shutdown(),e}let d,f;try{d=n.default.openSync(s,`a`),f=n.default.statSync(s).size}catch(e){throw await a.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-r}),await a.shutdown(),e}let p=0;try{process.stdin.setEncoding(`utf8`);for await(let e of process.stdin){let r=t.scrubTerminalOutput(String(e));if(!r)continue;let i=Buffer.from(r,`utf8`);n.default.writeSync(d,i),f+=i.byteLength,p+=1}return n.default.closeSync(d),o(u),await a.recordEvent(`doom_runner.file_sink_finished`,{outcome:`completed`,"runner.chunk_count":p,"runner.bytes_written":f,duration_ms:Date.now()-r}),0}catch(e){throw await a.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-r}),e}finally{await a.shutdown()}}function o(e){let t=`${e}.${process.pid}.tmp`;n.default.writeFileSync(t,``,{mode:384}),n.default.renameSync(t,e)}process.argv[1]&&require("url").pathToFileURL(__filename).href===(0,r.pathToFileURL)(process.argv[1]).href&&a().then(e=>{process.exitCode=e},e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}),exports.main=a;
|
|
2
2
|
//# sourceMappingURL=logSink.cjs.map
|
package/dist/bin/logSink.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logSink.cjs","names":["createDoomTelemetry","fs","scrubTerminalOutput","pathToFileURL"],"sources":["../../src/bin/logSink.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"logSink.cjs","names":["createDoomTelemetry","fs","scrubTerminalOutput","pathToFileURL"],"sources":["../../src/bin/logSink.ts"],"sourcesContent":["import fs from 'node:fs';\nimport { pathToFileURL } from 'node:url';\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\nimport { scrubTerminalOutput } from '../services/AnsiScrub/ansiScrub';\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-log-sink',\n packageName: '@agimon-ai/doompi-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const [logPath, rotatedPath, maxBytesRaw, donePath] = argv;\n try {\n // Keep the legacy argument shape for the published executable subpath. Raw\n // logs are append-only now, so the former rotation path and ceiling are not used.\n if (!logPath || !rotatedPath || !maxBytesRaw || !donePath) {\n throw new Error('logSink requires log, rotated log, max bytes, and completion paths');\n }\n } catch (error) {\n await telemetry.recordError('doom_runner.file_sink_failed', error, { duration_ms: Date.now() - startedAt });\n await telemetry.shutdown();\n throw error;\n }\n\n let handle: number;\n let written: number;\n try {\n handle = fs.openSync(logPath, 'a');\n written = fs.statSync(logPath).size;\n } catch (error) {\n await telemetry.recordError('doom_runner.file_sink_failed', error, { duration_ms: Date.now() - startedAt });\n await telemetry.shutdown();\n throw error;\n }\n let chunks = 0;\n try {\n process.stdin.setEncoding('utf8');\n for await (const chunk of process.stdin) {\n const text = scrubTerminalOutput(String(chunk));\n if (!text) continue;\n const bytes = Buffer.from(text, 'utf8');\n fs.writeSync(handle, bytes);\n written += bytes.byteLength;\n chunks += 1;\n }\n fs.closeSync(handle);\n writeDone(donePath);\n await telemetry.recordEvent('doom_runner.file_sink_finished', {\n outcome: 'completed',\n 'runner.chunk_count': chunks,\n 'runner.bytes_written': written,\n duration_ms: Date.now() - startedAt,\n });\n return 0;\n } catch (error) {\n await telemetry.recordError('doom_runner.file_sink_failed', error, { duration_ms: Date.now() - startedAt });\n throw error;\n } finally {\n await telemetry.shutdown();\n }\n}\n\nfunction writeDone(target: string): void {\n const temporary = `${target}.${process.pid}.tmp`;\n fs.writeFileSync(temporary, '', { mode: 0o600 });\n fs.renameSync(temporary, target);\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":"0RAKA,eAAsB,EAAK,EAA0B,QAAQ,KAAK,MAAM,CAAC,EAAoB,CAC3F,IAAM,EAAY,KAAK,IAAI,EACrB,GAAA,EAAYA,EAAAA,oBAAAA,CAAoB,CACpC,YAAa,uBACb,YAAa,2BACb,IAAK,QAAQ,IACb,WAAY,GACZ,aAAc,EAChB,CAAC,EACK,CAAC,EAAS,EAAa,EAAa,GAAY,EACtD,GAAI,CAGF,GAAI,CAAC,GAAW,CAAC,GAAe,CAAC,GAAe,CAAC,EAC/C,MAAU,MAAM,oEAAoE,CAExF,OAAS,EAAO,CAGd,MAFA,MAAM,EAAU,YAAY,+BAAgC,EAAO,CAAE,YAAa,KAAK,IAAI,EAAI,CAAU,CAAC,EAC1G,MAAM,EAAU,SAAS,EACnB,CACR,CAEA,IAAI,EACA,EACJ,GAAI,CACF,EAASC,EAAAA,QAAG,SAAS,EAAS,GAAG,EACjC,EAAUA,EAAAA,QAAG,SAAS,CAAO,CAAC,CAAC,IACjC,OAAS,EAAO,CAGd,MAFA,MAAM,EAAU,YAAY,+BAAgC,EAAO,CAAE,YAAa,KAAK,IAAI,EAAI,CAAU,CAAC,EAC1G,MAAM,EAAU,SAAS,EACnB,CACR,CACA,IAAI,EAAS,EACb,GAAI,CACF,QAAQ,MAAM,YAAY,MAAM,EAChC,UAAW,IAAM,KAAS,QAAQ,MAAO,CACvC,IAAM,EAAOC,EAAAA,oBAAoB,OAAO,CAAK,CAAC,EAC9C,GAAI,CAAC,EAAM,SACX,IAAM,EAAQ,OAAO,KAAK,EAAM,MAAM,EACtC,EAAA,QAAG,UAAU,EAAQ,CAAK,EAC1B,GAAW,EAAM,WACjB,GAAU,CACZ,CASA,OARA,EAAA,QAAG,UAAU,CAAM,EACnB,EAAU,CAAQ,EAClB,MAAM,EAAU,YAAY,iCAAkC,CAC5D,QAAS,YACT,qBAAsB,EACtB,uBAAwB,EACxB,YAAa,KAAK,IAAI,EAAI,CAC5B,CAAC,EACM,CACT,OAAS,EAAO,CAEd,MADA,MAAM,EAAU,YAAY,+BAAgC,EAAO,CAAE,YAAa,KAAK,IAAI,EAAI,CAAU,CAAC,EACpG,CACR,QAAU,CACR,MAAM,EAAU,SAAS,CAC3B,CACF,CAEA,SAAS,EAAU,EAAsB,CACvC,IAAM,EAAY,GAAG,EAAO,GAAG,QAAQ,IAAI,MAC3C,EAAA,QAAG,cAAc,EAAW,GAAI,CAAE,KAAM,GAAM,CAAC,EAC/C,EAAA,QAAG,WAAW,EAAW,CAAM,CACjC,CAEI,QAAQ,KAAK,IAAA,QAAA,KAAA,CAAA,CAAA,cAAA,UAAA,CAAA,CAAA,QAAA,EAA0BC,EAAAA,cAAAA,CAAc,QAAQ,KAAK,EAAE,CAAC,CAAC,MACxE,EAAK,CAAC,CAAC,KACJ,GAAS,CACR,QAAQ,SAAW,CACrB,EACC,GAAmB,CAClB,QAAQ,OAAO,MAAM,GAAG,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAAE,GAAG,EAClF,QAAQ,SAAW,CACrB,CACF"}
|
package/dist/bin/logSink.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{scrubTerminalOutput as e}from"../services/AnsiScrub/ansiScrub.mjs";import
|
|
1
|
+
import{scrubTerminalOutput as e}from"../src/services/AnsiScrub/ansiScrub.mjs";import t from"node:fs";import{pathToFileURL as n}from"node:url";import{createDoomTelemetry as r}from"@agimon-ai/doompi-telemetry";async function i(n=process.argv.slice(2)){let i=Date.now(),o=r({serviceName:`doom-runner-log-sink`,packageName:`@agimon-ai/doompi-runner`,env:process.env,enableLogs:!0,enableTraces:!0}),[s,c,l,u]=n;try{if(!s||!c||!l||!u)throw Error(`logSink requires log, rotated log, max bytes, and completion paths`)}catch(e){throw await o.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-i}),await o.shutdown(),e}let d,f;try{d=t.openSync(s,`a`),f=t.statSync(s).size}catch(e){throw await o.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-i}),await o.shutdown(),e}let p=0;try{process.stdin.setEncoding(`utf8`);for await(let n of process.stdin){let r=e(String(n));if(!r)continue;let i=Buffer.from(r,`utf8`);t.writeSync(d,i),f+=i.byteLength,p+=1}return t.closeSync(d),a(u),await o.recordEvent(`doom_runner.file_sink_finished`,{outcome:`completed`,"runner.chunk_count":p,"runner.bytes_written":f,duration_ms:Date.now()-i}),0}catch(e){throw await o.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-i}),e}finally{await o.shutdown()}}function a(e){let n=`${e}.${process.pid}.tmp`;t.writeFileSync(n,``,{mode:384}),t.renameSync(n,e)}process.argv[1]&&import.meta.url===n(process.argv[1]).href&&i().then(e=>{process.exitCode=e},e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1});export{i as main};
|
|
2
2
|
//# sourceMappingURL=logSink.mjs.map
|
package/dist/bin/logSink.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logSink.mjs","names":[],"sources":["../../src/bin/logSink.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"logSink.mjs","names":[],"sources":["../../src/bin/logSink.ts"],"sourcesContent":["import fs from 'node:fs';\nimport { pathToFileURL } from 'node:url';\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\nimport { scrubTerminalOutput } from '../services/AnsiScrub/ansiScrub';\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-log-sink',\n packageName: '@agimon-ai/doompi-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const [logPath, rotatedPath, maxBytesRaw, donePath] = argv;\n try {\n // Keep the legacy argument shape for the published executable subpath. Raw\n // logs are append-only now, so the former rotation path and ceiling are not used.\n if (!logPath || !rotatedPath || !maxBytesRaw || !donePath) {\n throw new Error('logSink requires log, rotated log, max bytes, and completion paths');\n }\n } catch (error) {\n await telemetry.recordError('doom_runner.file_sink_failed', error, { duration_ms: Date.now() - startedAt });\n await telemetry.shutdown();\n throw error;\n }\n\n let handle: number;\n let written: number;\n try {\n handle = fs.openSync(logPath, 'a');\n written = fs.statSync(logPath).size;\n } catch (error) {\n await telemetry.recordError('doom_runner.file_sink_failed', error, { duration_ms: Date.now() - startedAt });\n await telemetry.shutdown();\n throw error;\n }\n let chunks = 0;\n try {\n process.stdin.setEncoding('utf8');\n for await (const chunk of process.stdin) {\n const text = scrubTerminalOutput(String(chunk));\n if (!text) continue;\n const bytes = Buffer.from(text, 'utf8');\n fs.writeSync(handle, bytes);\n written += bytes.byteLength;\n chunks += 1;\n }\n fs.closeSync(handle);\n writeDone(donePath);\n await telemetry.recordEvent('doom_runner.file_sink_finished', {\n outcome: 'completed',\n 'runner.chunk_count': chunks,\n 'runner.bytes_written': written,\n duration_ms: Date.now() - startedAt,\n });\n return 0;\n } catch (error) {\n await telemetry.recordError('doom_runner.file_sink_failed', error, { duration_ms: Date.now() - startedAt });\n throw error;\n } finally {\n await telemetry.shutdown();\n }\n}\n\nfunction writeDone(target: string): void {\n const temporary = `${target}.${process.pid}.tmp`;\n fs.writeFileSync(temporary, '', { mode: 0o600 });\n fs.renameSync(temporary, target);\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":"gNAKA,eAAsB,EAAK,EAA0B,QAAQ,KAAK,MAAM,CAAC,EAAoB,CAC3F,IAAM,EAAY,KAAK,IAAI,EACrB,EAAY,EAAoB,CACpC,YAAa,uBACb,YAAa,2BACb,IAAK,QAAQ,IACb,WAAY,GACZ,aAAc,EAChB,CAAC,EACK,CAAC,EAAS,EAAa,EAAa,GAAY,EACtD,GAAI,CAGF,GAAI,CAAC,GAAW,CAAC,GAAe,CAAC,GAAe,CAAC,EAC/C,MAAU,MAAM,oEAAoE,CAExF,OAAS,EAAO,CAGd,MAFA,MAAM,EAAU,YAAY,+BAAgC,EAAO,CAAE,YAAa,KAAK,IAAI,EAAI,CAAU,CAAC,EAC1G,MAAM,EAAU,SAAS,EACnB,CACR,CAEA,IAAI,EACA,EACJ,GAAI,CACF,EAAS,EAAG,SAAS,EAAS,GAAG,EACjC,EAAU,EAAG,SAAS,CAAO,CAAC,CAAC,IACjC,OAAS,EAAO,CAGd,MAFA,MAAM,EAAU,YAAY,+BAAgC,EAAO,CAAE,YAAa,KAAK,IAAI,EAAI,CAAU,CAAC,EAC1G,MAAM,EAAU,SAAS,EACnB,CACR,CACA,IAAI,EAAS,EACb,GAAI,CACF,QAAQ,MAAM,YAAY,MAAM,EAChC,UAAW,IAAM,KAAS,QAAQ,MAAO,CACvC,IAAM,EAAO,EAAoB,OAAO,CAAK,CAAC,EAC9C,GAAI,CAAC,EAAM,SACX,IAAM,EAAQ,OAAO,KAAK,EAAM,MAAM,EACtC,EAAG,UAAU,EAAQ,CAAK,EAC1B,GAAW,EAAM,WACjB,GAAU,CACZ,CASA,OARA,EAAG,UAAU,CAAM,EACnB,EAAU,CAAQ,EAClB,MAAM,EAAU,YAAY,iCAAkC,CAC5D,QAAS,YACT,qBAAsB,EACtB,uBAAwB,EACxB,YAAa,KAAK,IAAI,EAAI,CAC5B,CAAC,EACM,CACT,OAAS,EAAO,CAEd,MADA,MAAM,EAAU,YAAY,+BAAgC,EAAO,CAAE,YAAa,KAAK,IAAI,EAAI,CAAU,CAAC,EACpG,CACR,QAAU,CACR,MAAM,EAAU,SAAS,CAC3B,CACF,CAEA,SAAS,EAAU,EAAsB,CACvC,IAAM,EAAY,GAAG,EAAO,GAAG,QAAQ,IAAI,MAC3C,EAAG,cAAc,EAAW,GAAI,CAAE,KAAM,GAAM,CAAC,EAC/C,EAAG,WAAW,EAAW,CAAM,CACjC,CAEI,QAAQ,KAAK,IAAM,YAAY,MAAQ,EAAc,QAAQ,KAAK,EAAE,CAAC,CAAC,MACxE,EAAK,CAAC,CAAC,KACJ,GAAS,CACR,QAAQ,SAAW,CACrB,EACC,GAAmB,CAClB,QAAQ,OAAO,MAAM,GAAG,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAAE,GAAG,EAClF,QAAQ,SAAW,CACrB,CACF"}
|
package/dist/bin/runnerHost.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../src/adapters/Lifeline/client.cjs");let n=require("node:fs");n=e.__toESM(n,1);let r=require("node:url"),i=require("node:os");i=e.__toESM(i,1);let a=require("node:child_process"),o=require("@agimon-ai/doompi-telemetry");const s=`doom_runner.host_failed`,c=`invalid runner command spec`;async function l(e=process.argv.slice(2)){let n=Date.now(),r=(0,o.createDoomTelemetry)({serviceName:`doom-runner-host`,packageName:`@agimon-ai/doompi-runner`,env:process.env,enableLogs:!0,enableTraces:!0}),[c,l,p]=e,m;try{if(!c||!l||!p)throw Error(`runnerHost requires spec, gate, and exit paths`);m=u(c),await d(l)}catch(e){throw await r.recordError(s,e,{duration_ms:Date.now()-n}),await r.shutdown(),e}let h,g=null,_,v=e=>{if(h?.pid)try{process.kill(-h.pid,e)}catch{h.kill(e)}},y=e=>{g=e,v(e),_??=setTimeout(()=>v(`SIGKILL`),2e3)};for(let e of[`SIGTERM`,`SIGINT`,`SIGHUP`])process.once(e,()=>y(e));h=(0,a.spawn)(m.command,{cwd:m.cwd,env:m.env,shell:`/bin/bash`,stdio:`inherit`,detached:!0}),g&&y(g);let b=t.watchOwner(()=>y(`SIGTERM`),m.env[t.LIFELINE_ENV]);try{let e=await new Promise((e,t)=>{h?.once(`error`,t),h?.once(`exit`,(t,n)=>e({code:t,signal:n??g}))});f(p,e);let t=e.code===null?e.signal?128+i.default.constants.signals[e.signal]:1:e.code;return await r.recordEvent(`doom_runner.host_finished`,{outcome:e.signal||g?`signaled`:t===0?`completed`:`failed`,"runner.exit_code":t,...e.signal||g?{"runner.signal":e.signal??g??``}:{},duration_ms:Date.now()-n}),t}catch(e){throw await r.recordError(s,e,{duration_ms:Date.now()-n}),e}finally{b(),_&&clearTimeout(_),await r.shutdown()}}function u(e){let t=JSON.parse(n.default.readFileSync(e,`utf8`));if(typeof t!=`object`||!t)throw Error(c);let r=t;if(typeof r.command!=`string`||typeof r.cwd!=`string`||!r.env)throw Error(c);return{command:r.command,cwd:r.cwd,env:r.env}}async function d(e){for(;!n.default.existsSync(e);)await new Promise(e=>setTimeout(e,10))}function f(e,t){let r=`${e}.${process.pid}.tmp`;n.default.writeFileSync(r,`${JSON.stringify(t)}\n`,{mode:384}),n.default.renameSync(r,e)}process.argv[1]&&require("url").pathToFileURL(__filename).href===(0,r.pathToFileURL)(process.argv[1]).href&&l().then(e=>{process.exitCode=e},e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}),exports.main=l;
|
|
2
2
|
//# sourceMappingURL=runnerHost.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runnerHost.cjs","names":["createDoomTelemetry","spawn","watchOwner","LIFELINE_ENV","os","fs","pathToFileURL"],"sources":["../../src/bin/runnerHost.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"runnerHost.cjs","names":["createDoomTelemetry","spawn","watchOwner","LIFELINE_ENV","os","fs","pathToFileURL"],"sources":["../../src/bin/runnerHost.ts"],"sourcesContent":["import { type ChildProcess, spawn } from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport { pathToFileURL } from 'node:url';\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\nimport { LIFELINE_ENV, watchOwner } from '../adapters/Lifeline/client.ts';\n\ninterface CommandSpec {\n command: string;\n cwd: string;\n env: Record<string, string>;\n}\n\nconst POLL_MS = 10;\nconst FORWARDED_SIGNAL_GRACE_MS = 2_000;\nconst HOST_FAILED_EVENT = 'doom_runner.host_failed';\nconst INVALID_COMMAND_SPEC_ERROR = 'invalid runner command spec';\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-host',\n packageName: '@agimon-ai/doompi-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const [specPath, gatePath, exitPath] = argv;\n let spec: CommandSpec;\n try {\n if (!specPath || !gatePath || !exitPath) throw new Error('runnerHost requires spec, gate, and exit paths');\n spec = readSpec(specPath);\n await waitForGate(gatePath);\n } catch (error) {\n await telemetry.recordError(HOST_FAILED_EVENT, error, { duration_ms: Date.now() - startedAt });\n await telemetry.shutdown();\n throw error;\n }\n let child: ChildProcess | undefined;\n let forwardedSignal: NodeJS.Signals | null = null;\n let escalationTimer: NodeJS.Timeout | undefined;\n const signalChild = (signal: NodeJS.Signals): void => {\n if (!child?.pid) return;\n try {\n process.kill(-child.pid, signal);\n } catch {\n child.kill(signal);\n }\n };\n const forward = (signal: NodeJS.Signals): void => {\n forwardedSignal = signal;\n signalChild(signal);\n escalationTimer ??= setTimeout(() => signalChild('SIGKILL'), FORWARDED_SIGNAL_GRACE_MS);\n };\n const signals: NodeJS.Signals[] = ['SIGTERM', 'SIGINT', 'SIGHUP'];\n for (const signal of signals) process.once(signal, () => forward(signal));\n\n child = spawn(spec.command, {\n cwd: spec.cwd,\n env: spec.env,\n shell: '/bin/bash',\n stdio: 'inherit',\n detached: true,\n });\n if (forwardedSignal) forward(forwardedSignal);\n\n // This process supervises the command for its whole life, so it is also the\n // right place to notice an owner that died without stopping it.\n //\n // The lifeline comes from the spec rather than this process's environment: an\n // rmux server outlives the session that started it, so its own environment can\n // still name a previous session's socket.\n const detachLifeline = watchOwner(() => forward('SIGTERM'), spec.env[LIFELINE_ENV]);\n\n try {\n const result = await new Promise<{ code: number | null; signal: NodeJS.Signals | null }>((resolve, reject) => {\n child?.once('error', reject);\n child?.once('exit', (code, signal) => resolve({ code, signal: signal ?? forwardedSignal }));\n });\n writeAtomic(exitPath, result);\n const exitCode = result.code !== null ? result.code : result.signal ? 128 + os.constants.signals[result.signal] : 1;\n await telemetry.recordEvent('doom_runner.host_finished', {\n outcome: result.signal || forwardedSignal ? 'signaled' : exitCode === 0 ? 'completed' : 'failed',\n 'runner.exit_code': exitCode,\n ...(result.signal || forwardedSignal ? { 'runner.signal': result.signal ?? forwardedSignal ?? '' } : {}),\n duration_ms: Date.now() - startedAt,\n });\n return exitCode;\n } catch (error) {\n await telemetry.recordError(HOST_FAILED_EVENT, error, { duration_ms: Date.now() - startedAt });\n throw error;\n } finally {\n detachLifeline();\n if (escalationTimer) clearTimeout(escalationTimer);\n await telemetry.shutdown();\n }\n}\n\nfunction readSpec(target: string): CommandSpec {\n const value: unknown = JSON.parse(fs.readFileSync(target, 'utf8'));\n if (typeof value !== 'object' || value === null) throw new Error(INVALID_COMMAND_SPEC_ERROR);\n const spec = value as Partial<CommandSpec>;\n if (typeof spec.command !== 'string' || typeof spec.cwd !== 'string' || !spec.env) {\n throw new Error(INVALID_COMMAND_SPEC_ERROR);\n }\n return { command: spec.command, cwd: spec.cwd, env: spec.env };\n}\n\nasync function waitForGate(target: string): Promise<void> {\n while (!fs.existsSync(target)) await new Promise((resolve) => setTimeout(resolve, POLL_MS));\n}\n\nfunction writeAtomic(target: string, value: unknown): void {\n const temporary = `${target}.${process.pid}.tmp`;\n fs.writeFileSync(temporary, `${JSON.stringify(value)}\\n`, { mode: 0o600 });\n fs.renameSync(temporary, target);\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":"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"}
|
package/dist/bin/runnerHost.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{LIFELINE_ENV as e,watchOwner as t}from"../
|
|
1
|
+
import{LIFELINE_ENV as e,watchOwner as t}from"../src/adapters/Lifeline/client.mjs";import n from"node:fs";import{pathToFileURL as r}from"node:url";import i from"node:os";import{spawn as a}from"node:child_process";import{createDoomTelemetry as o}from"@agimon-ai/doompi-telemetry";const s=`doom_runner.host_failed`,c=`invalid runner command spec`;async function l(n=process.argv.slice(2)){let r=Date.now(),c=o({serviceName:`doom-runner-host`,packageName:`@agimon-ai/doompi-runner`,env:process.env,enableLogs:!0,enableTraces:!0}),[l,p,m]=n,h;try{if(!l||!p||!m)throw Error(`runnerHost requires spec, gate, and exit paths`);h=u(l),await d(p)}catch(e){throw await c.recordError(s,e,{duration_ms:Date.now()-r}),await c.shutdown(),e}let g,_=null,v,y=e=>{if(g?.pid)try{process.kill(-g.pid,e)}catch{g.kill(e)}},b=e=>{_=e,y(e),v??=setTimeout(()=>y(`SIGKILL`),2e3)};for(let e of[`SIGTERM`,`SIGINT`,`SIGHUP`])process.once(e,()=>b(e));g=a(h.command,{cwd:h.cwd,env:h.env,shell:`/bin/bash`,stdio:`inherit`,detached:!0}),_&&b(_);let x=t(()=>b(`SIGTERM`),h.env[e]);try{let e=await new Promise((e,t)=>{g?.once(`error`,t),g?.once(`exit`,(t,n)=>e({code:t,signal:n??_}))});f(m,e);let t=e.code===null?e.signal?128+i.constants.signals[e.signal]:1:e.code;return await c.recordEvent(`doom_runner.host_finished`,{outcome:e.signal||_?`signaled`:t===0?`completed`:`failed`,"runner.exit_code":t,...e.signal||_?{"runner.signal":e.signal??_??``}:{},duration_ms:Date.now()-r}),t}catch(e){throw await c.recordError(s,e,{duration_ms:Date.now()-r}),e}finally{x(),v&&clearTimeout(v),await c.shutdown()}}function u(e){let t=JSON.parse(n.readFileSync(e,`utf8`));if(typeof t!=`object`||!t)throw Error(c);let r=t;if(typeof r.command!=`string`||typeof r.cwd!=`string`||!r.env)throw Error(c);return{command:r.command,cwd:r.cwd,env:r.env}}async function d(e){for(;!n.existsSync(e);)await new Promise(e=>setTimeout(e,10))}function f(e,t){let r=`${e}.${process.pid}.tmp`;n.writeFileSync(r,`${JSON.stringify(t)}\n`,{mode:384}),n.renameSync(r,e)}process.argv[1]&&import.meta.url===r(process.argv[1]).href&&l().then(e=>{process.exitCode=e},e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1});export{l as main};
|
|
2
2
|
//# sourceMappingURL=runnerHost.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runnerHost.mjs","names":[],"sources":["../../src/bin/runnerHost.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"runnerHost.mjs","names":[],"sources":["../../src/bin/runnerHost.ts"],"sourcesContent":["import { type ChildProcess, spawn } from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport { pathToFileURL } from 'node:url';\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\nimport { LIFELINE_ENV, watchOwner } from '../adapters/Lifeline/client.ts';\n\ninterface CommandSpec {\n command: string;\n cwd: string;\n env: Record<string, string>;\n}\n\nconst POLL_MS = 10;\nconst FORWARDED_SIGNAL_GRACE_MS = 2_000;\nconst HOST_FAILED_EVENT = 'doom_runner.host_failed';\nconst INVALID_COMMAND_SPEC_ERROR = 'invalid runner command spec';\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-host',\n packageName: '@agimon-ai/doompi-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const [specPath, gatePath, exitPath] = argv;\n let spec: CommandSpec;\n try {\n if (!specPath || !gatePath || !exitPath) throw new Error('runnerHost requires spec, gate, and exit paths');\n spec = readSpec(specPath);\n await waitForGate(gatePath);\n } catch (error) {\n await telemetry.recordError(HOST_FAILED_EVENT, error, { duration_ms: Date.now() - startedAt });\n await telemetry.shutdown();\n throw error;\n }\n let child: ChildProcess | undefined;\n let forwardedSignal: NodeJS.Signals | null = null;\n let escalationTimer: NodeJS.Timeout | undefined;\n const signalChild = (signal: NodeJS.Signals): void => {\n if (!child?.pid) return;\n try {\n process.kill(-child.pid, signal);\n } catch {\n child.kill(signal);\n }\n };\n const forward = (signal: NodeJS.Signals): void => {\n forwardedSignal = signal;\n signalChild(signal);\n escalationTimer ??= setTimeout(() => signalChild('SIGKILL'), FORWARDED_SIGNAL_GRACE_MS);\n };\n const signals: NodeJS.Signals[] = ['SIGTERM', 'SIGINT', 'SIGHUP'];\n for (const signal of signals) process.once(signal, () => forward(signal));\n\n child = spawn(spec.command, {\n cwd: spec.cwd,\n env: spec.env,\n shell: '/bin/bash',\n stdio: 'inherit',\n detached: true,\n });\n if (forwardedSignal) forward(forwardedSignal);\n\n // This process supervises the command for its whole life, so it is also the\n // right place to notice an owner that died without stopping it.\n //\n // The lifeline comes from the spec rather than this process's environment: an\n // rmux server outlives the session that started it, so its own environment can\n // still name a previous session's socket.\n const detachLifeline = watchOwner(() => forward('SIGTERM'), spec.env[LIFELINE_ENV]);\n\n try {\n const result = await new Promise<{ code: number | null; signal: NodeJS.Signals | null }>((resolve, reject) => {\n child?.once('error', reject);\n child?.once('exit', (code, signal) => resolve({ code, signal: signal ?? forwardedSignal }));\n });\n writeAtomic(exitPath, result);\n const exitCode = result.code !== null ? result.code : result.signal ? 128 + os.constants.signals[result.signal] : 1;\n await telemetry.recordEvent('doom_runner.host_finished', {\n outcome: result.signal || forwardedSignal ? 'signaled' : exitCode === 0 ? 'completed' : 'failed',\n 'runner.exit_code': exitCode,\n ...(result.signal || forwardedSignal ? { 'runner.signal': result.signal ?? forwardedSignal ?? '' } : {}),\n duration_ms: Date.now() - startedAt,\n });\n return exitCode;\n } catch (error) {\n await telemetry.recordError(HOST_FAILED_EVENT, error, { duration_ms: Date.now() - startedAt });\n throw error;\n } finally {\n detachLifeline();\n if (escalationTimer) clearTimeout(escalationTimer);\n await telemetry.shutdown();\n }\n}\n\nfunction readSpec(target: string): CommandSpec {\n const value: unknown = JSON.parse(fs.readFileSync(target, 'utf8'));\n if (typeof value !== 'object' || value === null) throw new Error(INVALID_COMMAND_SPEC_ERROR);\n const spec = value as Partial<CommandSpec>;\n if (typeof spec.command !== 'string' || typeof spec.cwd !== 'string' || !spec.env) {\n throw new Error(INVALID_COMMAND_SPEC_ERROR);\n }\n return { command: spec.command, cwd: spec.cwd, env: spec.env };\n}\n\nasync function waitForGate(target: string): Promise<void> {\n while (!fs.existsSync(target)) await new Promise((resolve) => setTimeout(resolve, POLL_MS));\n}\n\nfunction writeAtomic(target: string, value: unknown): void {\n const temporary = `${target}.${process.pid}.tmp`;\n fs.writeFileSync(temporary, `${JSON.stringify(value)}\\n`, { mode: 0o600 });\n fs.renameSync(temporary, target);\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":"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"}
|
package/dist/cli/cliApp.cjs
CHANGED
|
@@ -1,6 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../
|
|
2
|
-
`):`No runners`),0}async function u(e,t){let n=await h(e[0],t);return n?(t.stdout([`ID: ${n.id}`,`Name: ${n.name}`,`State: ${n.state}`,`Backend: ${n.backend}`,...n.backendTarget?[`Backend target: ${n.backendTarget}`]:[],`PID: ${n.pid}`,`Command: ${n.command}`,`CWD: ${n.cwd}`,`Session: ${n.sessionId}`,`Log: ${n.logPath}`,...n.exit?[`Exit: ${_(n)}`]:[]].join(`
|
|
3
|
-
`)),0):1}async function d(e,t){let n=await h(e[0],t);if(!n)return 1;let r=y(v(e,`--lines`))??200,i=t.logReader.read(n.logPath,{lines:r});return i.exists?(i.text&&t.stdout(i.text),e.includes(`--follow`)?b(n,i.fileSize,t):0):(t.stderr(`Runner ${n.id} has not written a log yet`),1)}async function f(e,t){let n=await h(e[0],t);if(!n)return 1;if(n.state!==`running`)return t.stderr(`Runner ${n.id} is already ${n.state}`),1;await x(n,t);let r=v(e,`--reason`);return await t.registry.complete(n.id,{reason:o,code:null,signal:s,...r?{stopReason:r}:{}},n.sessionId),t.stdout(`Stopped ${n.id}\nLog: ${n.logPath}`),0}async function p(e,n){let r=t.requiredSessionId(n.env),i=await n.registry.listBySession(r),a=v(e,`--reason`);for(let e of i)await x(e,n),await n.registry.complete(e.id,{reason:o,code:null,signal:s,...a?{stopReason:a}:{}},e.sessionId);return n.stdout(i.length>0?`Stopped ${i.length} runner(s) for session ${r}: ${i.map(e=>e.id).join(`, `)}`:`No active runners for session ${r}`),0}async function m(e,t){let n=await h(e[0],t);if(!n)return 1;if(n.state===i)return t.stderr(`Runner ${n.id} is already completed; use doom-runner logs ${n.id}`),1;if(!n.interactive)return t.stderr(`Runner ${n.id} was not started with interactive: true`),1;let r=v(e,`--text`)??await t.readStdin(),o=e.includes(`--enter`)&&!r.endsWith(`
|
|
4
|
-
`)?`${r}\n`:r;return n.backend!==a||!n.backendTarget?(t.stderr(`Runner ${n.id} uses the ${n.backend} backend, which does not expose CLI input`),1):await t.rmuxBackend.input(n.backendTarget,o)?(t.stdout(`Sent input to ${n.id}`),0):(t.stderr(`Runner ${n.id} is no longer accepting RMUX input`),1)}async function h(e,n){if(!e){n.stderr(`A runner ID is required`);return}let r=t.requiredSessionId(n.env),i=await n.registry.get(e,r);if(!i){n.stderr(`No runner with id ${e}`);return}return i}function g(e){let t=n.formatRunnerLine(e);return`${e.id} ${e.state} ${e.backend} ${t}`}function _(e){let t=e.exit;if(!t)return`unknown`;let n=t.code===null?t.signal?` ${t.signal}`:``:` code ${t.code}`,r=t.stopReason?` (${t.stopReason})`:``;return`${t.reason}${n}${r}`}function v(e,t){let n=e.indexOf(t);return n>=0?e[n+1]:void 0}function y(e){if(e===void 0)return;let t=Number(e);return Number.isInteger(t)&&t>0?t:void 0}async function b(e,t,n){let a=t;return new Promise(t=>{let o=!1,s,c=t=>{if(t.size<a&&(a=0),t.size===a)return;let i=t.size-a,o=Buffer.alloc(i),s=r.default.openSync(e.logPath,`r`);try{let e=r.default.readSync(s,o,0,i,a);e>0&&n.stdout(o.subarray(0,e).toString(`utf8`))}finally{r.default.closeSync(s)}a=t.size},l=()=>{if(!o){o=!0;try{c(r.default.statSync(e.logPath))}catch(t){t.code!==`ENOENT`&&n.stderr(`Runner ${e.id} failed to flush its final log output: ${t.message}`)}r.default.unwatchFile(e.logPath,c),clearInterval(s),process.off(`SIGINT`,l),t(0)}};process.once(`SIGINT`,l),r.default.watchFile(e.logPath,{interval:250},c),s=setInterval(()=>{n.registry.get(e.id).then(e=>{e?.state===i&&l()})},250)})}async function x(e,t){return e.backend===a&&e.backendTarget?t.rmuxBackend.stop(e.backendTarget,e.pid):t.launcher.stop(e.pid)}function S(){return[`Usage: doom-runner <command>`,``,`Commands:`,` list [--all]`,` status <id>`,` logs <id> [--lines N] [--follow]`,` stop <id> [--reason <text>]`,` stop-all [--reason <text>]`,` input <id> [--text <text>] [--enter]`].join(`
|
|
5
|
-
`)}exports.runCli=c;
|
|
6
|
-
//# sourceMappingURL=cliApp.cjs.map
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../src/commands/cli/cliApp.cjs");exports.runCli=e.runCli;
|
package/dist/cli/cliApp.d.cts
CHANGED
|
@@ -1,23 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { ILogReader } from "../services/LogReader/types.cjs";
|
|
4
|
-
import "../services/LogReader/index.cjs";
|
|
5
|
-
import { IRmuxBackend } from "../services/RmuxBackend/types.cjs";
|
|
6
|
-
import "../services/RmuxBackend/index.cjs";
|
|
7
|
-
import { IRunnerRegistry } from "../services/RunnerRegistry/types.cjs";
|
|
8
|
-
import "../services/RunnerRegistry/index.cjs";
|
|
9
|
-
//#region src/cli/cliApp.d.ts
|
|
10
|
-
interface CliDependencies {
|
|
11
|
-
registry: IRunnerRegistry;
|
|
12
|
-
launcher: ILauncher;
|
|
13
|
-
rmuxBackend: IRmuxBackend;
|
|
14
|
-
logReader: ILogReader;
|
|
15
|
-
env?: NodeJS.ProcessEnv;
|
|
16
|
-
stdout(text: string): void;
|
|
17
|
-
stderr(text: string): void;
|
|
18
|
-
readStdin(): Promise<string>;
|
|
19
|
-
}
|
|
20
|
-
declare function runCli(argv: readonly string[], dependencies: CliDependencies): Promise<number>;
|
|
21
|
-
//#endregion
|
|
22
|
-
export { CliDependencies, runCli };
|
|
23
|
-
//# sourceMappingURL=cliApp.d.cts.map
|
|
1
|
+
import { CliDependencies, runCli } from "../src/commands/cli/cliApp.cjs";
|
|
2
|
+
export { CliDependencies, runCli };
|