@agimon-ai/doompi-runner 0.0.1-alpha.27 → 0.0.1-alpha.29
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 +32 -17
- package/dist/_virtual/_rolldown/runtime.cjs +1 -0
- package/dist/bin/cli.cjs +5 -0
- package/dist/bin/cli.cjs.map +1 -0
- package/dist/bin/cli.d.cts +5 -0
- package/dist/bin/cli.d.cts.map +1 -0
- package/dist/bin/cli.d.mts +5 -0
- package/dist/bin/cli.d.mts.map +1 -0
- package/dist/bin/cli.mjs +5 -0
- package/dist/bin/cli.mjs.map +1 -0
- package/dist/bin/logSink.cjs +2 -0
- package/dist/bin/logSink.cjs.map +1 -0
- package/dist/bin/logSink.d.cts +5 -0
- package/dist/bin/logSink.d.cts.map +1 -0
- package/dist/bin/logSink.d.mts +5 -0
- package/dist/bin/logSink.d.mts.map +1 -0
- package/dist/bin/logSink.mjs +2 -0
- package/dist/bin/logSink.mjs.map +1 -0
- package/dist/bin/runnerHost.cjs +2 -0
- package/dist/bin/runnerHost.cjs.map +1 -0
- package/dist/bin/runnerHost.d.cts +5 -0
- package/dist/bin/runnerHost.d.cts.map +1 -0
- package/dist/bin/runnerHost.d.mts +5 -0
- package/dist/bin/runnerHost.d.mts.map +1 -0
- package/dist/bin/runnerHost.mjs +2 -0
- package/dist/bin/runnerHost.mjs.map +1 -0
- package/dist/cli/cliApp.cjs +1 -0
- package/dist/cli/cliApp.d.cts +2 -0
- package/dist/cli/cliApp.d.mts +2 -0
- package/dist/cli/cliApp.mjs +1 -0
- package/dist/compaction.cjs +1 -0
- package/dist/compaction.d.cts +2 -0
- package/dist/compaction.d.mts +2 -0
- package/dist/compaction.mjs +1 -0
- package/dist/config.cjs +1 -0
- package/dist/config.d.cts +2 -0
- package/dist/config.d.mts +2 -0
- package/dist/config.mjs +1 -0
- package/dist/container/index.cjs +1 -0
- package/dist/container/index.d.cts +2 -0
- package/dist/container/index.d.mts +2 -0
- package/dist/container/index.mjs +1 -0
- package/dist/extensions/pi.cjs +1 -0
- package/dist/extensions/pi.d.cts +2 -0
- package/dist/extensions/pi.d.mts +2 -0
- package/dist/extensions/pi.mjs +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +5 -0
- package/dist/index.d.mts +5 -0
- package/dist/index.mjs +1 -0
- package/dist/reconcile.cjs +1 -0
- package/dist/reconcile.d.cts +2 -0
- package/dist/reconcile.d.mts +2 -0
- package/dist/reconcile.mjs +1 -0
- package/dist/services/AnsiScrub/ansiScrub.cjs +1 -0
- package/dist/services/AnsiScrub/ansiScrub.d.cts +2 -0
- package/dist/services/AnsiScrub/ansiScrub.d.mts +2 -0
- package/dist/services/AnsiScrub/ansiScrub.mjs +1 -0
- package/dist/services/AnsiScrub/index.cjs +1 -0
- package/dist/services/AnsiScrub/index.d.cts +2 -0
- package/dist/services/AnsiScrub/index.d.mts +2 -0
- package/dist/services/AnsiScrub/index.mjs +1 -0
- package/dist/services/BashRunService/BashRunService.cjs +1 -0
- package/dist/services/BashRunService/BashRunService.d.cts +2 -0
- package/dist/services/BashRunService/BashRunService.d.mts +2 -0
- package/dist/services/BashRunService/BashRunService.mjs +1 -0
- package/dist/services/BashRunService/index.cjs +1 -0
- package/dist/services/BashRunService/index.d.cts +3 -0
- package/dist/services/BashRunService/index.d.mts +3 -0
- package/dist/services/BashRunService/index.mjs +1 -0
- package/dist/services/Clock/SystemClock.cjs +1 -0
- package/dist/services/Clock/SystemClock.d.cts +2 -0
- package/dist/services/Clock/SystemClock.d.mts +2 -0
- package/dist/services/Clock/SystemClock.mjs +1 -0
- package/dist/services/Clock/index.cjs +1 -0
- package/dist/services/Clock/index.d.cts +3 -0
- package/dist/services/Clock/index.d.mts +3 -0
- package/dist/services/Clock/index.mjs +1 -0
- package/dist/services/Launcher/Launcher.cjs +1 -0
- package/dist/services/Launcher/Launcher.d.cts +2 -0
- package/dist/services/Launcher/Launcher.d.mts +2 -0
- package/dist/services/Launcher/Launcher.mjs +1 -0
- package/dist/services/Launcher/index.cjs +1 -0
- package/dist/services/Launcher/index.d.cts +3 -0
- package/dist/services/Launcher/index.d.mts +3 -0
- package/dist/services/Launcher/index.mjs +1 -0
- package/dist/services/Lifeline/NodeLifeline.cjs +1 -0
- package/dist/services/Lifeline/NodeLifeline.d.cts +2 -0
- package/dist/services/Lifeline/NodeLifeline.d.mts +2 -0
- package/dist/services/Lifeline/NodeLifeline.mjs +1 -0
- package/dist/services/Lifeline/client.cjs +1 -0
- package/dist/services/Lifeline/client.d.cts +2 -0
- package/dist/services/Lifeline/client.d.mts +2 -0
- package/dist/services/Lifeline/client.mjs +1 -0
- package/dist/services/Lifeline/index.cjs +1 -0
- package/dist/services/Lifeline/index.d.cts +4 -0
- package/dist/services/Lifeline/index.d.mts +4 -0
- package/dist/services/Lifeline/index.mjs +1 -0
- package/dist/services/LogFile/LogFile.cjs +1 -0
- package/dist/services/LogFile/LogFile.d.cts +2 -0
- package/dist/services/LogFile/LogFile.d.mts +2 -0
- package/dist/services/LogFile/LogFile.mjs +1 -0
- package/dist/services/LogFile/index.cjs +1 -0
- package/dist/services/LogFile/index.d.cts +3 -0
- package/dist/services/LogFile/index.d.mts +3 -0
- package/dist/services/LogFile/index.mjs +1 -0
- package/dist/services/LogReader/LogReader.cjs +1 -0
- package/dist/services/LogReader/LogReader.d.cts +2 -0
- package/dist/services/LogReader/LogReader.d.mts +2 -0
- package/dist/services/LogReader/LogReader.mjs +1 -0
- package/dist/services/LogReader/index.cjs +1 -0
- package/dist/services/LogReader/index.d.cts +3 -0
- package/dist/services/LogReader/index.d.mts +3 -0
- package/dist/services/LogReader/index.mjs +1 -0
- package/dist/services/ProcessControl/NodeProcessControl.cjs +1 -0
- package/dist/services/ProcessControl/NodeProcessControl.d.cts +2 -0
- package/dist/services/ProcessControl/NodeProcessControl.d.mts +2 -0
- package/dist/services/ProcessControl/NodeProcessControl.mjs +1 -0
- package/dist/services/ProcessControl/index.cjs +1 -0
- package/dist/services/ProcessControl/index.d.cts +3 -0
- package/dist/services/ProcessControl/index.d.mts +3 -0
- package/dist/services/ProcessControl/index.mjs +1 -0
- package/dist/services/PtyHost/PtyHost.cjs +1 -0
- package/dist/services/PtyHost/PtyHost.d.cts +2 -0
- package/dist/services/PtyHost/PtyHost.d.mts +2 -0
- package/dist/services/PtyHost/PtyHost.mjs +1 -0
- package/dist/services/PtyHost/index.cjs +1 -0
- package/dist/services/PtyHost/index.d.cts +3 -0
- package/dist/services/PtyHost/index.d.mts +3 -0
- package/dist/services/PtyHost/index.mjs +1 -0
- package/dist/services/PtySpawner/NodePtySpawner.cjs +1 -0
- package/dist/services/PtySpawner/NodePtySpawner.d.cts +2 -0
- package/dist/services/PtySpawner/NodePtySpawner.d.mts +2 -0
- package/dist/services/PtySpawner/NodePtySpawner.mjs +1 -0
- package/dist/services/PtySpawner/index.cjs +1 -0
- package/dist/services/PtySpawner/index.d.cts +3 -0
- package/dist/services/PtySpawner/index.d.mts +3 -0
- package/dist/services/PtySpawner/index.mjs +1 -0
- package/dist/services/RmuxBackend/RmuxBackend.cjs +1 -0
- package/dist/services/RmuxBackend/RmuxBackend.d.cts +2 -0
- package/dist/services/RmuxBackend/RmuxBackend.d.mts +2 -0
- package/dist/services/RmuxBackend/RmuxBackend.mjs +1 -0
- package/dist/services/RmuxBackend/index.cjs +1 -0
- package/dist/services/RmuxBackend/index.d.cts +3 -0
- package/dist/services/RmuxBackend/index.d.mts +3 -0
- package/dist/services/RmuxBackend/index.mjs +1 -0
- package/dist/services/RunnerNamer/RunnerNamer.cjs +1 -0
- package/dist/services/RunnerNamer/RunnerNamer.d.cts +2 -0
- package/dist/services/RunnerNamer/RunnerNamer.d.mts +2 -0
- package/dist/services/RunnerNamer/RunnerNamer.mjs +1 -0
- package/dist/services/RunnerNamer/index.cjs +1 -0
- package/dist/services/RunnerNamer/index.d.cts +3 -0
- package/dist/services/RunnerNamer/index.d.mts +3 -0
- package/dist/services/RunnerNamer/index.mjs +1 -0
- package/dist/services/RunnerPaths/RunnerPaths.cjs +1 -0
- package/dist/services/RunnerPaths/RunnerPaths.d.cts +2 -0
- package/dist/services/RunnerPaths/RunnerPaths.d.mts +2 -0
- package/dist/services/RunnerPaths/RunnerPaths.mjs +1 -0
- package/dist/services/RunnerPaths/index.cjs +1 -0
- package/dist/services/RunnerPaths/index.d.cts +3 -0
- package/dist/services/RunnerPaths/index.d.mts +3 -0
- package/dist/services/RunnerPaths/index.mjs +1 -0
- package/dist/services/RunnerRegistry/RunnerRegistry.cjs +1 -0
- package/dist/services/RunnerRegistry/RunnerRegistry.d.cts +2 -0
- package/dist/services/RunnerRegistry/RunnerRegistry.d.mts +2 -0
- package/dist/services/RunnerRegistry/RunnerRegistry.mjs +1 -0
- package/dist/services/RunnerRegistry/index.cjs +1 -0
- package/dist/services/RunnerRegistry/index.d.cts +3 -0
- package/dist/services/RunnerRegistry/index.d.mts +3 -0
- package/dist/services/RunnerRegistry/index.mjs +1 -0
- package/dist/services/Spawner/NodeSpawner.cjs +1 -0
- package/dist/services/Spawner/NodeSpawner.d.cts +2 -0
- package/dist/services/Spawner/NodeSpawner.d.mts +2 -0
- package/dist/services/Spawner/NodeSpawner.mjs +1 -0
- package/dist/services/Spawner/index.cjs +1 -0
- package/dist/services/Spawner/index.d.cts +3 -0
- package/dist/services/Spawner/index.d.mts +3 -0
- package/dist/services/Spawner/index.mjs +1 -0
- package/dist/session.cjs +1 -0
- package/dist/session.d.cts +2 -0
- package/dist/session.d.mts +2 -0
- package/dist/session.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 +31 -0
- package/dist/src/adapters/BashRunService/BashRunService.d.cts.map +1 -0
- package/dist/src/adapters/BashRunService/BashRunService.d.mts +31 -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 +10 -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 +10 -0
- package/dist/src/adapters/LogReader/LogReader.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/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 +17 -0
- package/dist/src/adapters/PtySpawner/NodePtySpawner.d.cts.map +1 -0
- package/dist/src/adapters/PtySpawner/NodePtySpawner.d.mts +17 -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/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/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/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/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 +10 -0
- package/dist/src/commands/bash/responseEnvelope.cjs.map +1 -0
- package/dist/src/commands/bash/responseEnvelope.d.cts +44 -0
- package/dist/src/commands/bash/responseEnvelope.d.cts.map +1 -0
- package/dist/src/commands/bash/responseEnvelope.d.mts +44 -0
- package/dist/src/commands/bash/responseEnvelope.d.mts.map +1 -0
- package/dist/src/commands/bash/responseEnvelope.mjs +10 -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 +38 -0
- package/dist/src/container/types.d.cts.map +1 -0
- package/dist/src/container/types.d.mts +38 -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/src/schemas/runnerSpec.mjs +2 -0
- 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 +12 -0
- package/dist/src/services/RunnerNamer/types.d.cts.map +1 -0
- package/dist/src/services/RunnerNamer/types.d.mts +12 -0
- package/dist/src/services/RunnerNamer/types.d.mts.map +1 -0
- package/dist/src/services/RunnerPaths/types.d.cts +35 -0
- package/dist/src/services/RunnerPaths/types.d.cts.map +1 -0
- package/dist/src/services/RunnerPaths/types.d.mts +35 -0
- package/dist/src/services/RunnerPaths/types.d.mts.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/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/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/src/tui/format.cjs.map +1 -0
- 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/src/tui/format.mjs.map +1 -0
- 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/src/types/bashRunService.d.cts +62 -0
- package/dist/src/types/bashRunService.d.cts.map +1 -0
- package/dist/src/types/bashRunService.d.mts +62 -0
- package/dist/src/types/bashRunService.d.mts.map +1 -0
- package/dist/src/types/clock.d.cts +11 -0
- package/dist/src/types/clock.d.cts.map +1 -0
- package/dist/src/types/clock.d.mts +11 -0
- 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 +32 -0
- package/dist/src/types/config.d.cts.map +1 -0
- package/dist/src/types/config.d.mts +32 -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/src/types/launcher.d.cts +39 -0
- package/dist/src/types/launcher.d.cts.map +1 -0
- package/dist/src/types/launcher.d.mts +39 -0
- package/dist/src/types/launcher.d.mts.map +1 -0
- package/dist/src/types/lifeline.d.cts +19 -0
- package/dist/src/types/lifeline.d.cts.map +1 -0
- package/dist/src/types/lifeline.d.mts +19 -0
- package/dist/src/types/lifeline.d.mts.map +1 -0
- package/dist/src/types/logFile.d.cts +16 -0
- package/dist/src/types/logFile.d.cts.map +1 -0
- package/dist/src/types/logFile.d.mts +16 -0
- package/dist/src/types/logFile.d.mts.map +1 -0
- package/dist/src/types/logReader.d.cts +27 -0
- package/dist/src/types/logReader.d.cts.map +1 -0
- package/dist/src/types/logReader.d.mts +27 -0
- package/dist/src/types/logReader.d.mts.map +1 -0
- package/dist/src/types/processControl.d.cts +14 -0
- package/dist/src/types/processControl.d.cts.map +1 -0
- package/dist/src/types/processControl.d.mts +14 -0
- package/dist/src/types/processControl.d.mts.map +1 -0
- package/dist/src/types/ptyHost.d.cts +38 -0
- package/dist/src/types/ptyHost.d.cts.map +1 -0
- package/dist/src/types/ptyHost.d.mts +38 -0
- package/dist/src/types/ptyHost.d.mts.map +1 -0
- package/dist/src/types/ptySpawner.d.cts +28 -0
- package/dist/src/types/ptySpawner.d.cts.map +1 -0
- package/dist/src/types/ptySpawner.d.mts +28 -0
- package/dist/src/types/ptySpawner.d.mts.map +1 -0
- package/dist/src/types/rmuxBackend.d.cts +26 -0
- package/dist/src/types/rmuxBackend.d.cts.map +1 -0
- package/dist/src/types/rmuxBackend.d.mts +26 -0
- package/dist/src/types/rmuxBackend.d.mts.map +1 -0
- package/dist/src/types/runnerRegistry.d.cts +98 -0
- package/dist/src/types/runnerRegistry.d.cts.map +1 -0
- package/dist/src/types/runnerRegistry.d.mts +98 -0
- package/dist/src/types/runnerRegistry.d.mts.map +1 -0
- package/dist/src/types/spawner.d.cts +31 -0
- package/dist/src/types/spawner.d.cts.map +1 -0
- package/dist/src/types/spawner.d.mts +31 -0
- package/dist/src/types/spawner.d.mts.map +1 -0
- package/dist/tool/bashTool.cjs +1 -0
- package/dist/tool/bashTool.d.cts +2 -0
- package/dist/tool/bashTool.d.mts +2 -0
- package/dist/tool/bashTool.mjs +1 -0
- package/dist/tool/responseEnvelope.cjs +1 -0
- package/dist/tool/responseEnvelope.d.cts +2 -0
- package/dist/tool/responseEnvelope.d.mts +2 -0
- package/dist/tool/responseEnvelope.mjs +1 -0
- package/dist/tool/schema.cjs +1 -0
- package/dist/tool/schema.d.cts +2 -0
- package/dist/tool/schema.d.mts +2 -0
- package/dist/tool/schema.mjs +1 -0
- package/dist/tui/bashRender.cjs +1 -0
- package/dist/tui/bashRender.d.cts +2 -0
- package/dist/tui/bashRender.d.mts +2 -0
- package/dist/tui/bashRender.mjs +1 -0
- package/dist/tui/format.cjs +1 -0
- package/dist/tui/format.d.cts +2 -0
- package/dist/tui/format.d.mts +2 -0
- package/dist/tui/format.mjs +1 -0
- package/dist/tui/runnerSpace.cjs +1 -0
- package/dist/tui/runnerSpace.d.cts +2 -0
- package/dist/tui/runnerSpace.d.mts +2 -0
- package/dist/tui/runnerSpace.mjs +1 -0
- package/dist/types.cjs +0 -0
- package/dist/types.d.cts +2 -0
- package/dist/types.d.mts +2 -0
- package/dist/types.mjs +1 -0
- package/llms.txt +9 -0
- package/package.json +19 -14
- package/src/prompts/doompi-use-runner/SKILL.md +38 -0
package/README.md
CHANGED
|
@@ -4,7 +4,8 @@ Supervised shell execution, background process control, durable logs, and Runner
|
|
|
4
4
|
|
|
5
5
|
Part of the [DoomPi distribution](https://www.npmjs.com/package/@agimon-ai/doompi).
|
|
6
6
|
|
|
7
|
-
Runner replaces Pi's built-in `bash` tool only in sessions that load it. Short commands return
|
|
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.
|
|
8
9
|
|
|
9
10
|
> **Alpha:** tool and process contracts may change between releases.
|
|
10
11
|
|
|
@@ -15,7 +16,8 @@ Runner replaces Pi's built-in `bash` tool only in sessions that load it. Short c
|
|
|
15
16
|
- `/bin/bash`
|
|
16
17
|
- macOS or Linux on arm64 or x64 for bundled RMUX support
|
|
17
18
|
|
|
18
|
-
Linux native loading also depends on a compatible system loader
|
|
19
|
+
Linux native loading also depends on a compatible system loader and libc. Runner uses a `node-pty`
|
|
20
|
+
fallback when RMUX is unavailable.
|
|
19
21
|
|
|
20
22
|
## Install
|
|
21
23
|
|
|
@@ -26,7 +28,9 @@ installation:
|
|
|
26
28
|
pi install npm:@agimon-ai/doompi-runner
|
|
27
29
|
```
|
|
28
30
|
|
|
29
|
-
Pi discovers Runner's sole extension factory from `package.json.pi.extensions`. The
|
|
31
|
+
Pi discovers Runner's sole extension factory from `package.json.pi.extensions`. The extension joins
|
|
32
|
+
the runner-scoped Cordis host and releases its plugin resources and host lease when the Pi session
|
|
33
|
+
shuts down.
|
|
30
34
|
|
|
31
35
|
## Use the `bash` tool
|
|
32
36
|
|
|
@@ -37,9 +41,12 @@ Pi discovers Runner's sole extension factory from `package.json.pi.extensions`.
|
|
|
37
41
|
}
|
|
38
42
|
```
|
|
39
43
|
|
|
40
|
-
Commands crossing the promotion threshold move to a supervised runner. The default threshold is 60
|
|
44
|
+
Commands crossing the promotion threshold move to a supervised runner. The default threshold is 60
|
|
45
|
+
seconds. Set `background: true` to detach immediately, or `interactive: true` only when a command
|
|
46
|
+
needs terminal input.
|
|
41
47
|
|
|
42
|
-
Runner requires `PI_SESSION_ID` for session ownership. Processes, controls, and logs remain
|
|
48
|
+
Runner requires `PI_SESSION_ID` for session ownership. Processes, controls, and logs remain
|
|
49
|
+
addressable after transcript compaction because their identity is outside model context.
|
|
43
50
|
|
|
44
51
|
## Inspect and control runs
|
|
45
52
|
|
|
@@ -49,37 +56,44 @@ Use `/runners` or `SPC r r` in the TUI. The `doom-runner` CLI supports:
|
|
|
49
56
|
doom-runner list
|
|
50
57
|
doom-runner status <runner-id>
|
|
51
58
|
doom-runner logs <runner-id>
|
|
52
|
-
doom-runner input <runner-id> "y"
|
|
59
|
+
doom-runner input <runner-id> --text "y" --enter
|
|
53
60
|
doom-runner stop <runner-id>
|
|
54
61
|
doom-runner stop-all
|
|
55
62
|
```
|
|
56
63
|
|
|
64
|
+
The `input` command requires a running interactive process backed by RMUX.
|
|
65
|
+
|
|
57
66
|
Stop runs that are no longer required.
|
|
58
67
|
|
|
59
68
|
## Storage and limits
|
|
60
69
|
|
|
61
|
-
|
|
70
|
+
By default, session-scoped logs and registry data live under:
|
|
62
71
|
|
|
63
72
|
```text
|
|
64
73
|
~/.pi/agent/doom-runner/<session>/
|
|
65
74
|
```
|
|
66
75
|
|
|
67
|
-
Logs rotate at 5 MiB by default and are eligible for cleanup after seven days. Limits and the
|
|
76
|
+
Logs rotate at 5 MiB by default and are eligible for cleanup after seven days. Limits and the
|
|
77
|
+
promotion threshold can be configured through Runner's exported configuration helpers and
|
|
78
|
+
environment-backed runtime settings.
|
|
68
79
|
|
|
69
|
-
Commands inherit the DoomPi process environment and the operating
|
|
80
|
+
Commands inherit the DoomPi process environment and the operating system user's privileges. Logs
|
|
81
|
+
may contain prompts, source, command output, credentials, or other secrets; restrict access and
|
|
82
|
+
retention accordingly.
|
|
70
83
|
|
|
71
84
|
## Native artifacts
|
|
72
85
|
|
|
73
86
|
Runner selects one optional dependency automatically:
|
|
74
87
|
|
|
75
|
-
| Host | Package
|
|
76
|
-
| ----------- |
|
|
77
|
-
| macOS arm64 |
|
|
78
|
-
| macOS x64 |
|
|
79
|
-
| Linux arm64 |
|
|
80
|
-
| Linux x64 |
|
|
88
|
+
| Host | Package |
|
|
89
|
+
| ----------- | -------------------------------------------- |
|
|
90
|
+
| macOS arm64 | `@agimon-ai/doompi-runner-rmux-darwin-arm64` |
|
|
91
|
+
| macOS x64 | `@agimon-ai/doompi-runner-rmux-darwin-x64` |
|
|
92
|
+
| Linux arm64 | `@agimon-ai/doompi-runner-rmux-linux-arm64` |
|
|
93
|
+
| Linux x64 | `@agimon-ai/doompi-runner-rmux-linux-x64` |
|
|
81
94
|
|
|
82
|
-
Do not install these
|
|
95
|
+
Do not install these platform packages directly. They contain native RMUX executables and export
|
|
96
|
+
only package metadata.
|
|
83
97
|
|
|
84
98
|
## Public API
|
|
85
99
|
|
|
@@ -93,7 +107,8 @@ import {
|
|
|
93
107
|
} from '@agimon-ai/doompi-runner';
|
|
94
108
|
```
|
|
95
109
|
|
|
96
|
-
Declared subpaths expose process supervision, configuration, tools, response envelopes, and TUI
|
|
110
|
+
Declared subpaths expose process supervision, configuration, tools, response envelopes, and TUI
|
|
111
|
+
integration for host authors.
|
|
97
112
|
|
|
98
113
|
## Development
|
|
99
114
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));exports.__toESM=s;
|
package/dist/bin/cli.cjs
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
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
|
+
//# sourceMappingURL=cli.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.cts","names":[],"sources":["../../src/bin/cli.ts"],"mappings":";iBAasB,KAAK,2BAAkD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.mts","names":[],"sources":["../../src/bin/cli.ts"],"mappings":";iBAasB,KAAK,2BAAkD"}
|
package/dist/bin/cli.mjs
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
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
|
+
//# sourceMappingURL=cli.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
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,d;try{if(!s||!c||!l||!u)throw Error(`logSink requires log, rotated log, max bytes, and completion paths`);if(d=Number(l),!Number.isFinite(d)||d<=0)throw Error(`logSink max bytes must be positive`)}catch(e){throw await a.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-r}),await a.shutdown(),e}let f,p;try{f=n.default.openSync(s,`a`),p=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 m=0,h=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`);p+i.byteLength>d&&(n.default.closeSync(f),n.default.renameSync(s,c),f=n.default.openSync(s,`w`),p=0,h+=1),n.default.writeSync(f,i),p+=i.byteLength,m+=1}return n.default.closeSync(f),o(u),await a.recordEvent(`doom_runner.file_sink_finished`,{outcome:`completed`,"runner.chunk_count":m,"runner.bytes_written":p,"runner.rotation_count":h,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
|
+
//# sourceMappingURL=logSink.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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 let maxBytes: number;\n try {\n if (!logPath || !rotatedPath || !maxBytesRaw || !donePath) {\n throw new Error('logSink requires log, rotated log, max bytes, and completion paths');\n }\n maxBytes = Number(maxBytesRaw);\n if (!Number.isFinite(maxBytes) || maxBytes <= 0) throw new Error('logSink max bytes must be positive');\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 let rotations = 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 if (written + bytes.byteLength > maxBytes) {\n fs.closeSync(handle);\n fs.renameSync(logPath, rotatedPath);\n handle = fs.openSync(logPath, 'w');\n written = 0;\n rotations += 1;\n }\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 'runner.rotation_count': rotations,\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,EAClD,EACJ,GAAI,CACF,GAAI,CAAC,GAAW,CAAC,GAAe,CAAC,GAAe,CAAC,EAC/C,MAAU,MAAM,oEAAoE,EAGtF,GADA,EAAW,OAAO,CAAW,EACzB,CAAC,OAAO,SAAS,CAAQ,GAAK,GAAY,EAAG,MAAU,MAAM,oCAAoC,CACvG,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,EACT,EAAY,EAChB,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,EAClC,EAAU,EAAM,WAAa,IAC/B,EAAA,QAAG,UAAU,CAAM,EACnB,EAAA,QAAG,WAAW,EAAS,CAAW,EAClC,EAASD,EAAAA,QAAG,SAAS,EAAS,GAAG,EACjC,EAAU,EACV,GAAa,GAEf,EAAA,QAAG,UAAU,EAAQ,CAAK,EAC1B,GAAW,EAAM,WACjB,GAAU,CACZ,CAUA,OATA,EAAA,QAAG,UAAU,CAAM,EACnB,EAAU,CAAQ,EAClB,MAAM,EAAU,YAAY,iCAAkC,CAC5D,QAAS,YACT,qBAAsB,EACtB,uBAAwB,EACxB,wBAAyB,EACzB,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,EAA0BE,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logSink.d.cts","names":[],"sources":["../../src/bin/logSink.ts"],"mappings":";iBAKsB,KAAK,2BAAkD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logSink.d.mts","names":[],"sources":["../../src/bin/logSink.ts"],"mappings":";iBAKsB,KAAK,2BAAkD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
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,d;try{if(!s||!c||!l||!u)throw Error(`logSink requires log, rotated log, max bytes, and completion paths`);if(d=Number(l),!Number.isFinite(d)||d<=0)throw Error(`logSink max bytes must be positive`)}catch(e){throw await o.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-i}),await o.shutdown(),e}let f,p;try{f=t.openSync(s,`a`),p=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 m=0,h=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`);p+i.byteLength>d&&(t.closeSync(f),t.renameSync(s,c),f=t.openSync(s,`w`),p=0,h+=1),t.writeSync(f,i),p+=i.byteLength,m+=1}return t.closeSync(f),a(u),await o.recordEvent(`doom_runner.file_sink_finished`,{outcome:`completed`,"runner.chunk_count":m,"runner.bytes_written":p,"runner.rotation_count":h,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
|
+
//# sourceMappingURL=logSink.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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 let maxBytes: number;\n try {\n if (!logPath || !rotatedPath || !maxBytesRaw || !donePath) {\n throw new Error('logSink requires log, rotated log, max bytes, and completion paths');\n }\n maxBytes = Number(maxBytesRaw);\n if (!Number.isFinite(maxBytes) || maxBytes <= 0) throw new Error('logSink max bytes must be positive');\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 let rotations = 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 if (written + bytes.byteLength > maxBytes) {\n fs.closeSync(handle);\n fs.renameSync(logPath, rotatedPath);\n handle = fs.openSync(logPath, 'w');\n written = 0;\n rotations += 1;\n }\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 'runner.rotation_count': rotations,\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,EAClD,EACJ,GAAI,CACF,GAAI,CAAC,GAAW,CAAC,GAAe,CAAC,GAAe,CAAC,EAC/C,MAAU,MAAM,oEAAoE,EAGtF,GADA,EAAW,OAAO,CAAW,EACzB,CAAC,OAAO,SAAS,CAAQ,GAAK,GAAY,EAAG,MAAU,MAAM,oCAAoC,CACvG,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,EACT,EAAY,EAChB,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,EAClC,EAAU,EAAM,WAAa,IAC/B,EAAG,UAAU,CAAM,EACnB,EAAG,WAAW,EAAS,CAAW,EAClC,EAAS,EAAG,SAAS,EAAS,GAAG,EACjC,EAAU,EACV,GAAa,GAEf,EAAG,UAAU,EAAQ,CAAK,EAC1B,GAAW,EAAM,WACjB,GAAU,CACZ,CAUA,OATA,EAAG,UAAU,CAAM,EACnB,EAAU,CAAQ,EAClB,MAAM,EAAU,YAAY,iCAAkC,CAC5D,QAAS,YACT,qBAAsB,EACtB,uBAAwB,EACxB,wBAAyB,EACzB,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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
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
|
+
//# sourceMappingURL=runnerHost.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runnerHost.d.cts","names":[],"sources":["../../src/bin/runnerHost.ts"],"mappings":";iBAkBsB,KAAK,2BAAkD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runnerHost.d.mts","names":[],"sources":["../../src/bin/runnerHost.ts"],"mappings":";iBAkBsB,KAAK,2BAAkD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
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
|
+
//# sourceMappingURL=runnerHost.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../src/commands/cli/cliApp.cjs");exports.runCli=e.runCli;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{runCli as e}from"../src/commands/cli/cliApp.mjs";export{e as runCli};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./src/services/runs/compaction.cjs");exports.activeRunnerRecovery=e.activeRunnerRecovery,exports.appendActiveRunnersToSummary=e.appendActiveRunnersToSummary,exports.registerRunnerCompactionRecovery=e.registerRunnerCompactionRecovery;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { RunnerCompactionDependencies, activeRunnerRecovery, appendActiveRunnersToSummary, registerRunnerCompactionRecovery } from "./src/services/runs/compaction.cjs";
|
|
2
|
+
export { RunnerCompactionDependencies, activeRunnerRecovery, appendActiveRunnersToSummary, registerRunnerCompactionRecovery };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { RunnerCompactionDependencies, activeRunnerRecovery, appendActiveRunnersToSummary, registerRunnerCompactionRecovery } from "./src/services/runs/compaction.mjs";
|
|
2
|
+
export { RunnerCompactionDependencies, activeRunnerRecovery, appendActiveRunnersToSummary, registerRunnerCompactionRecovery };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{activeRunnerRecovery as e,appendActiveRunnersToSummary as t,registerRunnerCompactionRecovery as n}from"./src/services/runs/compaction.mjs";export{e as activeRunnerRecovery,t as appendActiveRunnersToSummary,n as registerRunnerCompactionRecovery};
|
package/dist/config.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./src/types/config.cjs");exports.BG_THRESHOLD_MS_ENV=e.BG_THRESHOLD_MS_ENV,exports.DEFAULT_BG_THRESHOLD_MS=e.DEFAULT_BG_THRESHOLD_MS,exports.DEFAULT_LOG_MAX_BYTES=e.DEFAULT_LOG_MAX_BYTES,exports.DEFAULT_LOG_TTL_MS=e.DEFAULT_LOG_TTL_MS,exports.DEFAULT_RESULT_MAX_BYTES=e.DEFAULT_RESULT_MAX_BYTES,exports.LOG_DIR_ENV=e.LOG_DIR_ENV,exports.LOG_MAX_BYTES_ENV=e.LOG_MAX_BYTES_ENV,exports.LOG_TTL_MS_ENV=e.LOG_TTL_MS_ENV,exports.RESULT_MAX_BYTES_ENV=e.RESULT_MAX_BYTES_ENV,exports.getBackgroundThresholdMs=e.getBackgroundThresholdMs,exports.getLogMaxBytes=e.getLogMaxBytes,exports.getLogTtlMs=e.getLogTtlMs,exports.getResultMaxBytes=e.getResultMaxBytes;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { BG_THRESHOLD_MS_ENV, DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, LOG_DIR_ENV, LOG_MAX_BYTES_ENV, LOG_TTL_MS_ENV, RESULT_MAX_BYTES_ENV, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes } from "./src/types/config.cjs";
|
|
2
|
+
export { BG_THRESHOLD_MS_ENV, DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, LOG_DIR_ENV, LOG_MAX_BYTES_ENV, LOG_TTL_MS_ENV, RESULT_MAX_BYTES_ENV, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { BG_THRESHOLD_MS_ENV, DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, LOG_DIR_ENV, LOG_MAX_BYTES_ENV, LOG_TTL_MS_ENV, RESULT_MAX_BYTES_ENV, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes } from "./src/types/config.mjs";
|
|
2
|
+
export { BG_THRESHOLD_MS_ENV, DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, LOG_DIR_ENV, LOG_MAX_BYTES_ENV, LOG_TTL_MS_ENV, RESULT_MAX_BYTES_ENV, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes };
|
package/dist/config.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BG_THRESHOLD_MS_ENV as e,DEFAULT_BG_THRESHOLD_MS as t,DEFAULT_LOG_MAX_BYTES as n,DEFAULT_LOG_TTL_MS as r,DEFAULT_RESULT_MAX_BYTES as i,LOG_DIR_ENV as a,LOG_MAX_BYTES_ENV as o,LOG_TTL_MS_ENV as s,RESULT_MAX_BYTES_ENV as c,getBackgroundThresholdMs as l,getLogMaxBytes as u,getLogTtlMs as d,getResultMaxBytes as f}from"./src/types/config.mjs";export{e as BG_THRESHOLD_MS_ENV,t as DEFAULT_BG_THRESHOLD_MS,n as DEFAULT_LOG_MAX_BYTES,r as DEFAULT_LOG_TTL_MS,i as DEFAULT_RESULT_MAX_BYTES,a as LOG_DIR_ENV,o as LOG_MAX_BYTES_ENV,s as LOG_TTL_MS_ENV,c as RESULT_MAX_BYTES_ENV,l as getBackgroundThresholdMs,u as getLogMaxBytes,d as getLogTtlMs,f as getResultMaxBytes};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../src/container/index.cjs");exports.createRunnerContainer=e.createRunnerContainer;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createRunnerContainer as e}from"../src/container/index.mjs";export{e as createRunnerContainer};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../src/adapters/pi/extension.cjs");exports.default=e.default,exports.runnerExtension=e.default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"../src/adapters/pi/extension.mjs";export{e as default,e as runnerExtension};
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./src/types/config.cjs"),t=require("./src/adapters/RmuxBackend/RmuxBackend.cjs"),n=require("./src/container/index.cjs");exports.DEFAULT_BG_THRESHOLD_MS=e.DEFAULT_BG_THRESHOLD_MS,exports.DEFAULT_LOG_MAX_BYTES=e.DEFAULT_LOG_MAX_BYTES,exports.DEFAULT_LOG_TTL_MS=e.DEFAULT_LOG_TTL_MS,exports.DEFAULT_RESULT_MAX_BYTES=e.DEFAULT_RESULT_MAX_BYTES,exports.RmuxBackend=t.RmuxBackend,exports.createRunnerContainer=n.createRunnerContainer,exports.getBackgroundThresholdMs=e.getBackgroundThresholdMs,exports.getLogMaxBytes=e.getLogMaxBytes,exports.getLogTtlMs=e.getLogTtlMs,exports.getResultMaxBytes=e.getResultMaxBytes;
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { IRmuxBackend, RmuxLaunchRequest } from "./src/types/rmuxBackend.cjs";
|
|
2
|
+
import { DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes } from "./src/types/config.cjs";
|
|
3
|
+
import { createRunnerContainer } from "./src/container/index.cjs";
|
|
4
|
+
import { RmuxBackend } from "./src/adapters/RmuxBackend/RmuxBackend.cjs";
|
|
5
|
+
export { DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, type IRmuxBackend, RmuxBackend, type RmuxLaunchRequest, createRunnerContainer, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes };
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { IRmuxBackend, RmuxLaunchRequest } from "./src/types/rmuxBackend.mjs";
|
|
2
|
+
import { DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes } from "./src/types/config.mjs";
|
|
3
|
+
import { createRunnerContainer } from "./src/container/index.mjs";
|
|
4
|
+
import { RmuxBackend } from "./src/adapters/RmuxBackend/RmuxBackend.mjs";
|
|
5
|
+
export { DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, type IRmuxBackend, RmuxBackend, type RmuxLaunchRequest, createRunnerContainer, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes };
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{DEFAULT_BG_THRESHOLD_MS as e,DEFAULT_LOG_MAX_BYTES as t,DEFAULT_LOG_TTL_MS as n,DEFAULT_RESULT_MAX_BYTES as r,getBackgroundThresholdMs as i,getLogMaxBytes as a,getLogTtlMs as o,getResultMaxBytes as s}from"./src/types/config.mjs";import{RmuxBackend as c}from"./src/adapters/RmuxBackend/RmuxBackend.mjs";import{createRunnerContainer as l}from"./src/container/index.mjs";export{e as DEFAULT_BG_THRESHOLD_MS,t as DEFAULT_LOG_MAX_BYTES,n as DEFAULT_LOG_TTL_MS,r as DEFAULT_RESULT_MAX_BYTES,c as RmuxBackend,l as createRunnerContainer,i as getBackgroundThresholdMs,a as getLogMaxBytes,o as getLogTtlMs,s as getResultMaxBytes};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./src/services/runs/reconcile.cjs");exports.cleanupLegacyRunnerStore=e.cleanupLegacyRunnerStore,exports.reconcileActiveRunners=e.reconcileActiveRunners,exports.stopRunnerProcess=e.stopRunnerProcess;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{cleanupLegacyRunnerStore as e,reconcileActiveRunners as t,stopRunnerProcess as n}from"./src/services/runs/reconcile.mjs";export{e as cleanupLegacyRunnerStore,t as reconcileActiveRunners,n as stopRunnerProcess};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../src/services/AnsiScrub/ansiScrub.cjs");exports.collapseCarriageReturns=e.collapseCarriageReturns,exports.scrubTerminalOutput=e.scrubTerminalOutput,exports.scrubTerminalOutputToPlainText=e.scrubTerminalOutputToPlainText,exports.stripAnsi=e.stripAnsi,exports.stripAnsiKeepingColour=e.stripAnsiKeepingColour;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { collapseCarriageReturns, scrubTerminalOutput, scrubTerminalOutputToPlainText, stripAnsi, stripAnsiKeepingColour } from "../../src/services/AnsiScrub/ansiScrub.cjs";
|
|
2
|
+
export { collapseCarriageReturns, scrubTerminalOutput, scrubTerminalOutputToPlainText, stripAnsi, stripAnsiKeepingColour };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { collapseCarriageReturns, scrubTerminalOutput, scrubTerminalOutputToPlainText, stripAnsi, stripAnsiKeepingColour } from "../../src/services/AnsiScrub/ansiScrub.mjs";
|
|
2
|
+
export { collapseCarriageReturns, scrubTerminalOutput, scrubTerminalOutputToPlainText, stripAnsi, stripAnsiKeepingColour };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{collapseCarriageReturns as e,scrubTerminalOutput as t,scrubTerminalOutputToPlainText as n,stripAnsi as r,stripAnsiKeepingColour as i}from"../../src/services/AnsiScrub/ansiScrub.mjs";export{e as collapseCarriageReturns,t as scrubTerminalOutput,n as scrubTerminalOutputToPlainText,r as stripAnsi,i as stripAnsiKeepingColour};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../src/services/AnsiScrub/ansiScrub.cjs");exports.collapseCarriageReturns=e.collapseCarriageReturns,exports.scrubTerminalOutput=e.scrubTerminalOutput,exports.scrubTerminalOutputToPlainText=e.scrubTerminalOutputToPlainText,exports.stripAnsi=e.stripAnsi,exports.stripAnsiKeepingColour=e.stripAnsiKeepingColour;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { collapseCarriageReturns, scrubTerminalOutput, scrubTerminalOutputToPlainText, stripAnsi, stripAnsiKeepingColour } from "../../src/services/AnsiScrub/ansiScrub.cjs";
|
|
2
|
+
export { collapseCarriageReturns, scrubTerminalOutput, scrubTerminalOutputToPlainText, stripAnsi, stripAnsiKeepingColour };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { collapseCarriageReturns, scrubTerminalOutput, scrubTerminalOutputToPlainText, stripAnsi, stripAnsiKeepingColour } from "../../src/services/AnsiScrub/ansiScrub.mjs";
|
|
2
|
+
export { collapseCarriageReturns, scrubTerminalOutput, scrubTerminalOutputToPlainText, stripAnsi, stripAnsiKeepingColour };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{collapseCarriageReturns as e,scrubTerminalOutput as t,scrubTerminalOutputToPlainText as n,stripAnsi as r,stripAnsiKeepingColour as i}from"../../src/services/AnsiScrub/ansiScrub.mjs";export{e as collapseCarriageReturns,t as scrubTerminalOutput,n as scrubTerminalOutputToPlainText,r as stripAnsi,i as stripAnsiKeepingColour};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../src/adapters/BashRunService/BashRunService.cjs");exports.BashRunService=e.BashRunService;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BashRunService as e}from"../../src/adapters/BashRunService/BashRunService.mjs";export{e as BashRunService};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../src/adapters/BashRunService/BashRunService.cjs");exports.BashRunService=e.BashRunService;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { BashRunRequest, BashRunResult, CompletedRun, FailedRun, IBashRunService, PromotedRun } from "../../src/types/bashRunService.cjs";
|
|
2
|
+
import { BashRunService } from "../../src/adapters/BashRunService/BashRunService.cjs";
|
|
3
|
+
export { type BashRunRequest, type BashRunResult, BashRunService, type CompletedRun, type FailedRun, type IBashRunService, type PromotedRun };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { BashRunRequest, BashRunResult, CompletedRun, FailedRun, IBashRunService, PromotedRun } from "../../src/types/bashRunService.mjs";
|
|
2
|
+
import { BashRunService } from "../../src/adapters/BashRunService/BashRunService.mjs";
|
|
3
|
+
export { type BashRunRequest, type BashRunResult, BashRunService, type CompletedRun, type FailedRun, type IBashRunService, type PromotedRun };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BashRunService as e}from"../../src/adapters/BashRunService/BashRunService.mjs";export{e as BashRunService};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../src/adapters/Clock/SystemClock.cjs");exports.SystemClock=e.SystemClock;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{SystemClock as e}from"../../src/adapters/Clock/SystemClock.mjs";export{e as SystemClock};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../src/adapters/Clock/SystemClock.cjs");exports.SystemClock=e.SystemClock;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{SystemClock as e}from"../../src/adapters/Clock/SystemClock.mjs";export{e as SystemClock};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../src/adapters/Launcher/Launcher.cjs");exports.Launcher=e.Launcher;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Launcher as e}from"../../src/adapters/Launcher/Launcher.mjs";export{e as Launcher};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../src/adapters/Launcher/Launcher.cjs");exports.Launcher=e.Launcher;
|