@agimon-ai/doompi-runner 0.0.1-alpha.3 → 0.0.1-alpha.30
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 +102 -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 +5 -7
- package/dist/index.d.mts +5 -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/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/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/{services → src/adapters}/BashRunService/BashRunService.mjs.map +1 -1
- 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/{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 +2 -0
- package/dist/src/services/RunnerPaths/types.d.cts.map +1 -0
- package/dist/{services → src/services}/RunnerPaths/types.d.mts +2 -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/{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} +2 -2
- package/dist/{services/BashRunService/types.d.cts.map → src/types/bashRunService.d.cts.map} +1 -1
- package/dist/{services/BashRunService/types.d.mts → src/types/bashRunService.d.mts} +2 -2
- package/dist/{services/BashRunService/types.d.mts.map → src/types/bashRunService.d.mts.map} +1 -1
- 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 +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/{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} +2 -2
- package/dist/src/types/logFile.d.cts.map +1 -0
- package/dist/{services/LogFile/types.d.mts → src/types/logFile.d.mts} +2 -2
- package/dist/src/types/logFile.d.mts.map +1 -0
- package/dist/{services/LogReader/types.d.cts → src/types/logReader.d.cts} +2 -2
- package/dist/src/types/logReader.d.cts.map +1 -0
- package/dist/{services/LogReader/types.d.mts → src/types/logReader.d.mts} +2 -2
- package/dist/src/types/logReader.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} +2 -2
- package/dist/src/types/ptySpawner.d.cts.map +1 -0
- package/dist/{services/PtySpawner/types.d.mts → src/types/ptySpawner.d.mts} +2 -2
- 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/{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/{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/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 +2 -28
- package/dist/types.d.mts +2 -28
- package/dist/types.mjs +1 -2
- package/llms.txt +9 -0
- package/package.json +38 -32
- package/src/prompts/doompi-use-runner/SKILL.md +38 -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/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,125 @@
|
|
|
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.2 and Pi TUI 0.84.2
|
|
16
|
+
- `/bin/bash`
|
|
17
|
+
- macOS or Linux on arm64 or x64 for bundled RMUX support
|
|
18
|
+
|
|
19
|
+
Linux native loading also depends on a compatible system loader and libc. Runner uses a `node-pty`
|
|
20
|
+
fallback when RMUX is unavailable.
|
|
12
21
|
|
|
13
22
|
## Install
|
|
14
23
|
|
|
24
|
+
DoomPi includes Runner in every composition, so no layer declaration is required. For direct Pi
|
|
25
|
+
installation:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pi install npm:@agimon-ai/doompi-runner
|
|
29
|
+
```
|
|
30
|
+
|
|
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.
|
|
34
|
+
|
|
35
|
+
## Use the `bash` tool
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"command": "pnpm test",
|
|
40
|
+
"timeout": 60
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
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.
|
|
47
|
+
|
|
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.
|
|
50
|
+
|
|
51
|
+
## Inspect and control runs
|
|
52
|
+
|
|
53
|
+
Use `/runners` or `SPC r r` in the TUI. The `doom-runner` CLI supports:
|
|
54
|
+
|
|
15
55
|
```bash
|
|
16
|
-
|
|
56
|
+
doom-runner list
|
|
57
|
+
doom-runner status <runner-id>
|
|
58
|
+
doom-runner logs <runner-id>
|
|
59
|
+
doom-runner input <runner-id> --text "y" --enter
|
|
60
|
+
doom-runner stop <runner-id>
|
|
61
|
+
doom-runner stop-all
|
|
17
62
|
```
|
|
18
63
|
|
|
19
|
-
|
|
64
|
+
The `input` command requires a running interactive process backed by RMUX.
|
|
65
|
+
|
|
66
|
+
Stop runs that are no longer required.
|
|
20
67
|
|
|
21
|
-
|
|
68
|
+
## Storage and limits
|
|
22
69
|
|
|
23
|
-
|
|
24
|
-
layers:
|
|
25
|
-
runner:
|
|
26
|
-
packages: ['@agimon-ai/doompi-runner/extensions/pi']
|
|
70
|
+
By default, session-scoped logs and registry data live under:
|
|
27
71
|
|
|
28
|
-
|
|
29
|
-
|
|
72
|
+
```text
|
|
73
|
+
~/.pi/agent/doom-runner/<session>/
|
|
30
74
|
```
|
|
31
75
|
|
|
32
|
-
|
|
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.
|
|
79
|
+
|
|
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.
|
|
83
|
+
|
|
84
|
+
## Native artifacts
|
|
85
|
+
|
|
86
|
+
Runner selects one optional dependency automatically:
|
|
33
87
|
|
|
34
|
-
|
|
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` |
|
|
35
94
|
|
|
36
|
-
|
|
95
|
+
Do not install these platform packages directly. They contain native RMUX executables and export
|
|
96
|
+
only package metadata.
|
|
37
97
|
|
|
38
|
-
|
|
39
|
-
optional dependencies.
|
|
98
|
+
## Public API
|
|
40
99
|
|
|
41
|
-
|
|
100
|
+
```ts
|
|
101
|
+
import {
|
|
102
|
+
createRunnerContainer,
|
|
103
|
+
DEFAULT_BG_THRESHOLD_MS,
|
|
104
|
+
DEFAULT_LOG_MAX_BYTES,
|
|
105
|
+
DEFAULT_LOG_TTL_MS,
|
|
106
|
+
RmuxBackend,
|
|
107
|
+
} from '@agimon-ai/doompi-runner';
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Declared subpaths expose process supervision, configuration, tools, response envelopes, and TUI
|
|
111
|
+
integration for host authors.
|
|
112
|
+
|
|
113
|
+
## Development
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
pnpm build
|
|
117
|
+
pnpm typecheck
|
|
118
|
+
pnpm test
|
|
119
|
+
pnpm lint
|
|
120
|
+
```
|
|
42
121
|
|
|
43
|
-
|
|
122
|
+
Maintained by [Agimon](https://agimon.ai/about).
|
|
44
123
|
|
|
45
124
|
## License
|
|
46
125
|
|
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,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
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 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"}
|
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,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
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 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"}
|
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 };
|
package/dist/cli/cliApp.d.mts
CHANGED
|
@@ -1,23 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { ILogReader } from "../services/LogReader/types.mjs";
|
|
4
|
-
import "../services/LogReader/index.mjs";
|
|
5
|
-
import { IRmuxBackend } from "../services/RmuxBackend/types.mjs";
|
|
6
|
-
import "../services/RmuxBackend/index.mjs";
|
|
7
|
-
import { IRunnerRegistry } from "../services/RunnerRegistry/types.mjs";
|
|
8
|
-
import "../services/RunnerRegistry/index.mjs";
|
|
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.mts.map
|
|
1
|
+
import { CliDependencies, runCli } from "../src/commands/cli/cliApp.mjs";
|
|
2
|
+
export { CliDependencies, runCli };
|
package/dist/cli/cliApp.mjs
CHANGED
|
@@ -1,6 +1 @@
|
|
|
1
|
-
import{
|
|
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(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(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(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.openSync(e.logPath,`r`);try{let e=r.readSync(s,o,0,i,a);e>0&&n.stdout(o.subarray(0,e).toString(`utf8`))}finally{r.closeSync(s)}a=t.size},l=()=>{if(!o){o=!0;try{c(r.statSync(e.logPath))}catch(t){t.code!==`ENOENT`&&n.stderr(`Runner ${e.id} failed to flush its final log output: ${t.message}`)}r.unwatchFile(e.logPath,c),clearInterval(s),process.off(`SIGINT`,l),t(0)}};process.once(`SIGINT`,l),r.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
|
-
`)}export{c as runCli};
|
|
6
|
-
//# sourceMappingURL=cliApp.mjs.map
|
|
1
|
+
import{runCli as e}from"../src/commands/cli/cliApp.mjs";export{e as runCli};
|
package/dist/compaction.cjs
CHANGED
|
@@ -1,4 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e
|
|
2
|
-
`)}function n(n,r){return r.length===0||n.includes(e)?n:[n,``,t(r)].join(`
|
|
3
|
-
`)}function r(e,n){e.on(`session_compact`,async()=>{let r=n.getSessionId();if(!r)return;let i;try{i=await n.listBySession(r)}catch{return}let a=t(i);a&&e.sendMessage({customType:`doom-runner-compaction`,content:a,display:!1,details:{sessionId:r,runnerIds:i.map(e=>e.id)}},{triggerTurn:!1,deliverAs:`steer`})})}exports.activeRunnerRecovery=t,exports.appendActiveRunnersToSummary=n,exports.registerRunnerCompactionRecovery=r;
|
|
4
|
-
//# sourceMappingURL=compaction.cjs.map
|
|
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;
|
package/dist/compaction.d.cts
CHANGED
|
@@ -1,14 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
4
|
-
//#region src/compaction.d.ts
|
|
5
|
-
interface RunnerCompactionDependencies {
|
|
6
|
-
getSessionId(): string | undefined;
|
|
7
|
-
listBySession(sessionId: string): Promise<RunnerRecord[]>;
|
|
8
|
-
}
|
|
9
|
-
declare function activeRunnerRecovery(active: readonly RunnerRecord[]): string;
|
|
10
|
-
declare function appendActiveRunnersToSummary(summary: string, active: readonly RunnerRecord[]): string;
|
|
11
|
-
declare function registerRunnerCompactionRecovery(pi: ExtensionAPI, dependencies: RunnerCompactionDependencies): void;
|
|
12
|
-
//#endregion
|
|
13
|
-
export { RunnerCompactionDependencies, activeRunnerRecovery, appendActiveRunnersToSummary, registerRunnerCompactionRecovery };
|
|
14
|
-
//# sourceMappingURL=compaction.d.cts.map
|
|
1
|
+
import { RunnerCompactionDependencies, activeRunnerRecovery, appendActiveRunnersToSummary, registerRunnerCompactionRecovery } from "./src/services/runs/compaction.cjs";
|
|
2
|
+
export { RunnerCompactionDependencies, activeRunnerRecovery, appendActiveRunnersToSummary, registerRunnerCompactionRecovery };
|
package/dist/compaction.d.mts
CHANGED
|
@@ -1,14 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
4
|
-
//#region src/compaction.d.ts
|
|
5
|
-
interface RunnerCompactionDependencies {
|
|
6
|
-
getSessionId(): string | undefined;
|
|
7
|
-
listBySession(sessionId: string): Promise<RunnerRecord[]>;
|
|
8
|
-
}
|
|
9
|
-
declare function activeRunnerRecovery(active: readonly RunnerRecord[]): string;
|
|
10
|
-
declare function appendActiveRunnersToSummary(summary: string, active: readonly RunnerRecord[]): string;
|
|
11
|
-
declare function registerRunnerCompactionRecovery(pi: ExtensionAPI, dependencies: RunnerCompactionDependencies): void;
|
|
12
|
-
//#endregion
|
|
13
|
-
export { RunnerCompactionDependencies, activeRunnerRecovery, appendActiveRunnersToSummary, registerRunnerCompactionRecovery };
|
|
14
|
-
//# sourceMappingURL=compaction.d.mts.map
|
|
1
|
+
import { RunnerCompactionDependencies, activeRunnerRecovery, appendActiveRunnersToSummary, registerRunnerCompactionRecovery } from "./src/services/runs/compaction.mjs";
|
|
2
|
+
export { RunnerCompactionDependencies, activeRunnerRecovery, appendActiveRunnersToSummary, registerRunnerCompactionRecovery };
|
package/dist/compaction.mjs
CHANGED
|
@@ -1,4 +1 @@
|
|
|
1
|
-
|
|
2
|
-
`)}function n(n,r){return r.length===0||n.includes(e)?n:[n,``,t(r)].join(`
|
|
3
|
-
`)}function r(e,n){e.on(`session_compact`,async()=>{let r=n.getSessionId();if(!r)return;let i;try{i=await n.listBySession(r)}catch{return}let a=t(i);a&&e.sendMessage({customType:`doom-runner-compaction`,content:a,display:!1,details:{sessionId:r,runnerIds:i.map(e=>e.id)}},{triggerTurn:!1,deliverAs:`steer`})})}export{t as activeRunnerRecovery,n as appendActiveRunnersToSummary,r as registerRunnerCompactionRecovery};
|
|
4
|
-
//# sourceMappingURL=compaction.mjs.map
|
|
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
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e
|
|
2
|
-
//# sourceMappingURL=config.cjs.map
|
|
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;
|