@agimon-ai/doompi-runner 0.0.1-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +47 -0
- package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorate.cjs +1 -0
- package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorate.mjs +1 -0
- package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorateMetadata.cjs +1 -0
- package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorateMetadata.mjs +1 -0
- package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorateParam.cjs +1 -0
- package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorateParam.mjs +1 -0
- package/dist/_virtual/_rolldown/runtime.cjs +1 -0
- package/dist/bin/cli.cjs +5 -0
- package/dist/bin/cli.cjs.map +1 -0
- package/dist/bin/cli.d.cts +5 -0
- package/dist/bin/cli.d.cts.map +1 -0
- package/dist/bin/cli.d.mts +5 -0
- package/dist/bin/cli.d.mts.map +1 -0
- package/dist/bin/cli.mjs +5 -0
- package/dist/bin/cli.mjs.map +1 -0
- package/dist/bin/logSink.cjs +2 -0
- package/dist/bin/logSink.cjs.map +1 -0
- package/dist/bin/logSink.d.cts +5 -0
- package/dist/bin/logSink.d.cts.map +1 -0
- package/dist/bin/logSink.d.mts +5 -0
- package/dist/bin/logSink.d.mts.map +1 -0
- package/dist/bin/logSink.mjs +2 -0
- package/dist/bin/logSink.mjs.map +1 -0
- package/dist/bin/runnerHost.cjs +2 -0
- package/dist/bin/runnerHost.cjs.map +1 -0
- package/dist/bin/runnerHost.d.cts +5 -0
- package/dist/bin/runnerHost.d.cts.map +1 -0
- package/dist/bin/runnerHost.d.mts +5 -0
- package/dist/bin/runnerHost.d.mts.map +1 -0
- package/dist/bin/runnerHost.mjs +2 -0
- package/dist/bin/runnerHost.mjs.map +1 -0
- package/dist/cli/cliApp.cjs +6 -0
- package/dist/cli/cliApp.cjs.map +1 -0
- package/dist/cli/cliApp.d.cts +23 -0
- package/dist/cli/cliApp.d.cts.map +1 -0
- package/dist/cli/cliApp.d.mts +23 -0
- package/dist/cli/cliApp.d.mts.map +1 -0
- package/dist/cli/cliApp.mjs +6 -0
- package/dist/cli/cliApp.mjs.map +1 -0
- package/dist/compaction.cjs +4 -0
- package/dist/compaction.cjs.map +1 -0
- package/dist/compaction.d.cts +14 -0
- package/dist/compaction.d.cts.map +1 -0
- package/dist/compaction.d.mts +14 -0
- package/dist/compaction.d.mts.map +1 -0
- package/dist/compaction.mjs +4 -0
- package/dist/compaction.mjs.map +1 -0
- package/dist/config.cjs +2 -0
- package/dist/config.cjs.map +1 -0
- package/dist/config.d.cts +32 -0
- package/dist/config.d.cts.map +1 -0
- package/dist/config.d.mts +32 -0
- package/dist/config.d.mts.map +1 -0
- package/dist/config.mjs +2 -0
- package/dist/config.mjs.map +1 -0
- package/dist/container/index.cjs +2 -0
- package/dist/container/index.cjs.map +1 -0
- package/dist/container/index.d.cts +14 -0
- package/dist/container/index.d.cts.map +1 -0
- package/dist/container/index.d.mts +14 -0
- package/dist/container/index.d.mts.map +1 -0
- package/dist/container/index.mjs +2 -0
- package/dist/container/index.mjs.map +1 -0
- package/dist/extension.cjs +3 -0
- package/dist/extension.cjs.map +1 -0
- package/dist/extension.d.cts +10 -0
- package/dist/extension.d.cts.map +1 -0
- package/dist/extension.d.mts +10 -0
- package/dist/extension.d.mts.map +1 -0
- package/dist/extension.mjs +3 -0
- package/dist/extension.mjs.map +1 -0
- package/dist/extensions/pi.cjs +2 -0
- package/dist/extensions/pi.cjs.map +1 -0
- package/dist/extensions/pi.d.cts +2 -0
- package/dist/extensions/pi.d.mts +2 -0
- package/dist/extensions/pi.mjs +2 -0
- package/dist/extensions/pi.mjs.map +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +7 -0
- package/dist/index.d.mts +7 -0
- package/dist/index.mjs +1 -0
- package/dist/ptyProvider.cjs +2 -0
- package/dist/ptyProvider.cjs.map +1 -0
- package/dist/ptyProvider.d.cts +13 -0
- package/dist/ptyProvider.d.cts.map +1 -0
- package/dist/ptyProvider.d.mts +13 -0
- package/dist/ptyProvider.d.mts.map +1 -0
- package/dist/ptyProvider.mjs +2 -0
- package/dist/ptyProvider.mjs.map +1 -0
- package/dist/reconcile.cjs +2 -0
- package/dist/reconcile.cjs.map +1 -0
- package/dist/reconcile.d.cts +37 -0
- package/dist/reconcile.d.cts.map +1 -0
- package/dist/reconcile.d.mts +37 -0
- package/dist/reconcile.d.mts.map +1 -0
- package/dist/reconcile.mjs +2 -0
- package/dist/reconcile.mjs.map +1 -0
- package/dist/runnerSpec.cjs +2 -0
- package/dist/runnerSpec.cjs.map +1 -0
- package/dist/runnerSpec.d.cts +50 -0
- package/dist/runnerSpec.d.cts.map +1 -0
- package/dist/runnerSpec.d.mts +50 -0
- package/dist/runnerSpec.d.mts.map +1 -0
- package/dist/runnerSpec.mjs +2 -0
- package/dist/runnerSpec.mjs.map +1 -0
- package/dist/services/AnsiScrub/ansiScrub.cjs +5 -0
- package/dist/services/AnsiScrub/ansiScrub.cjs.map +1 -0
- package/dist/services/AnsiScrub/ansiScrub.d.cts +34 -0
- package/dist/services/AnsiScrub/ansiScrub.d.cts.map +1 -0
- package/dist/services/AnsiScrub/ansiScrub.d.mts +34 -0
- package/dist/services/AnsiScrub/ansiScrub.d.mts.map +1 -0
- package/dist/services/AnsiScrub/ansiScrub.mjs +5 -0
- package/dist/services/AnsiScrub/ansiScrub.mjs.map +1 -0
- package/dist/services/AnsiScrub/index.cjs +1 -0
- package/dist/services/AnsiScrub/index.d.cts +2 -0
- package/dist/services/AnsiScrub/index.d.mts +2 -0
- package/dist/services/AnsiScrub/index.mjs +1 -0
- package/dist/services/BashRunService/BashRunService.cjs +2 -0
- package/dist/services/BashRunService/BashRunService.cjs.map +1 -0
- package/dist/services/BashRunService/BashRunService.d.cts +38 -0
- package/dist/services/BashRunService/BashRunService.d.cts.map +1 -0
- package/dist/services/BashRunService/BashRunService.d.mts +38 -0
- package/dist/services/BashRunService/BashRunService.d.mts.map +1 -0
- package/dist/services/BashRunService/BashRunService.mjs +2 -0
- package/dist/services/BashRunService/BashRunService.mjs.map +1 -0
- package/dist/services/BashRunService/index.cjs +1 -0
- package/dist/services/BashRunService/index.d.cts +3 -0
- package/dist/services/BashRunService/index.d.mts +3 -0
- package/dist/services/BashRunService/index.mjs +1 -0
- package/dist/services/BashRunService/types.d.cts +62 -0
- package/dist/services/BashRunService/types.d.cts.map +1 -0
- package/dist/services/BashRunService/types.d.mts +62 -0
- package/dist/services/BashRunService/types.d.mts.map +1 -0
- package/dist/services/Clock/SystemClock.cjs +2 -0
- package/dist/services/Clock/SystemClock.cjs.map +1 -0
- package/dist/services/Clock/SystemClock.d.cts +11 -0
- package/dist/services/Clock/SystemClock.d.cts.map +1 -0
- package/dist/services/Clock/SystemClock.d.mts +11 -0
- package/dist/services/Clock/SystemClock.d.mts.map +1 -0
- package/dist/services/Clock/SystemClock.mjs +2 -0
- package/dist/services/Clock/SystemClock.mjs.map +1 -0
- package/dist/services/Clock/index.cjs +1 -0
- package/dist/services/Clock/index.d.cts +3 -0
- package/dist/services/Clock/index.d.mts +3 -0
- package/dist/services/Clock/index.mjs +1 -0
- package/dist/services/Clock/types.d.cts +11 -0
- package/dist/services/Clock/types.d.cts.map +1 -0
- package/dist/services/Clock/types.d.mts +11 -0
- package/dist/services/Clock/types.d.mts.map +1 -0
- package/dist/services/Launcher/Launcher.cjs +2 -0
- package/dist/services/Launcher/Launcher.cjs.map +1 -0
- package/dist/services/Launcher/Launcher.d.cts +27 -0
- package/dist/services/Launcher/Launcher.d.cts.map +1 -0
- package/dist/services/Launcher/Launcher.d.mts +27 -0
- package/dist/services/Launcher/Launcher.d.mts.map +1 -0
- package/dist/services/Launcher/Launcher.mjs +2 -0
- package/dist/services/Launcher/Launcher.mjs.map +1 -0
- package/dist/services/Launcher/index.cjs +1 -0
- package/dist/services/Launcher/index.d.cts +3 -0
- package/dist/services/Launcher/index.d.mts +3 -0
- package/dist/services/Launcher/index.mjs +1 -0
- package/dist/services/Launcher/types.d.cts +40 -0
- package/dist/services/Launcher/types.d.cts.map +1 -0
- package/dist/services/Launcher/types.d.mts +40 -0
- package/dist/services/Launcher/types.d.mts.map +1 -0
- package/dist/services/Lifeline/NodeLifeline.cjs +2 -0
- package/dist/services/Lifeline/NodeLifeline.cjs.map +1 -0
- package/dist/services/Lifeline/NodeLifeline.d.cts +21 -0
- package/dist/services/Lifeline/NodeLifeline.d.cts.map +1 -0
- package/dist/services/Lifeline/NodeLifeline.d.mts +21 -0
- package/dist/services/Lifeline/NodeLifeline.d.mts.map +1 -0
- package/dist/services/Lifeline/NodeLifeline.mjs +2 -0
- package/dist/services/Lifeline/NodeLifeline.mjs.map +1 -0
- package/dist/services/Lifeline/client.cjs +2 -0
- package/dist/services/Lifeline/client.cjs.map +1 -0
- package/dist/services/Lifeline/client.d.cts +23 -0
- package/dist/services/Lifeline/client.d.cts.map +1 -0
- package/dist/services/Lifeline/client.d.mts +23 -0
- package/dist/services/Lifeline/client.d.mts.map +1 -0
- package/dist/services/Lifeline/client.mjs +2 -0
- package/dist/services/Lifeline/client.mjs.map +1 -0
- package/dist/services/Lifeline/index.cjs +1 -0
- package/dist/services/Lifeline/index.d.cts +4 -0
- package/dist/services/Lifeline/index.d.mts +4 -0
- package/dist/services/Lifeline/index.mjs +1 -0
- package/dist/services/Lifeline/types.d.cts +19 -0
- package/dist/services/Lifeline/types.d.cts.map +1 -0
- package/dist/services/Lifeline/types.d.mts +19 -0
- package/dist/services/Lifeline/types.d.mts.map +1 -0
- package/dist/services/LogFile/LogFile.cjs +2 -0
- package/dist/services/LogFile/LogFile.cjs.map +1 -0
- package/dist/services/LogFile/LogFile.d.cts +13 -0
- package/dist/services/LogFile/LogFile.d.cts.map +1 -0
- package/dist/services/LogFile/LogFile.d.mts +13 -0
- package/dist/services/LogFile/LogFile.d.mts.map +1 -0
- package/dist/services/LogFile/LogFile.mjs +2 -0
- package/dist/services/LogFile/LogFile.mjs.map +1 -0
- package/dist/services/LogFile/index.cjs +1 -0
- package/dist/services/LogFile/index.d.cts +3 -0
- package/dist/services/LogFile/index.d.mts +3 -0
- package/dist/services/LogFile/index.mjs +1 -0
- package/dist/services/LogFile/types.d.cts +16 -0
- package/dist/services/LogFile/types.d.cts.map +1 -0
- package/dist/services/LogFile/types.d.mts +16 -0
- package/dist/services/LogFile/types.d.mts.map +1 -0
- package/dist/services/LogReader/LogReader.cjs +10 -0
- package/dist/services/LogReader/LogReader.cjs.map +1 -0
- package/dist/services/LogReader/LogReader.d.cts +14 -0
- package/dist/services/LogReader/LogReader.d.cts.map +1 -0
- package/dist/services/LogReader/LogReader.d.mts +14 -0
- package/dist/services/LogReader/LogReader.d.mts.map +1 -0
- package/dist/services/LogReader/LogReader.mjs +10 -0
- package/dist/services/LogReader/LogReader.mjs.map +1 -0
- package/dist/services/LogReader/index.cjs +1 -0
- package/dist/services/LogReader/index.d.cts +3 -0
- package/dist/services/LogReader/index.d.mts +3 -0
- package/dist/services/LogReader/index.mjs +1 -0
- package/dist/services/LogReader/types.d.cts +27 -0
- package/dist/services/LogReader/types.d.cts.map +1 -0
- package/dist/services/LogReader/types.d.mts +27 -0
- package/dist/services/LogReader/types.d.mts.map +1 -0
- package/dist/services/ProcessControl/NodeProcessControl.cjs +2 -0
- package/dist/services/ProcessControl/NodeProcessControl.cjs.map +1 -0
- package/dist/services/ProcessControl/NodeProcessControl.d.cts +11 -0
- package/dist/services/ProcessControl/NodeProcessControl.d.cts.map +1 -0
- package/dist/services/ProcessControl/NodeProcessControl.d.mts +11 -0
- package/dist/services/ProcessControl/NodeProcessControl.d.mts.map +1 -0
- package/dist/services/ProcessControl/NodeProcessControl.mjs +2 -0
- package/dist/services/ProcessControl/NodeProcessControl.mjs.map +1 -0
- package/dist/services/ProcessControl/index.cjs +1 -0
- package/dist/services/ProcessControl/index.d.cts +3 -0
- package/dist/services/ProcessControl/index.d.mts +3 -0
- package/dist/services/ProcessControl/index.mjs +1 -0
- package/dist/services/ProcessControl/types.d.cts +14 -0
- package/dist/services/ProcessControl/types.d.cts.map +1 -0
- package/dist/services/ProcessControl/types.d.mts +14 -0
- package/dist/services/ProcessControl/types.d.mts.map +1 -0
- package/dist/services/PtyHost/PtyHost.cjs +5 -0
- package/dist/services/PtyHost/PtyHost.cjs.map +1 -0
- package/dist/services/PtyHost/PtyHost.d.cts +28 -0
- package/dist/services/PtyHost/PtyHost.d.cts.map +1 -0
- package/dist/services/PtyHost/PtyHost.d.mts +28 -0
- package/dist/services/PtyHost/PtyHost.d.mts.map +1 -0
- package/dist/services/PtyHost/PtyHost.mjs +5 -0
- package/dist/services/PtyHost/PtyHost.mjs.map +1 -0
- package/dist/services/PtyHost/index.cjs +1 -0
- package/dist/services/PtyHost/index.d.cts +3 -0
- package/dist/services/PtyHost/index.d.mts +3 -0
- package/dist/services/PtyHost/index.mjs +1 -0
- package/dist/services/PtyHost/types.d.cts +39 -0
- package/dist/services/PtyHost/types.d.cts.map +1 -0
- package/dist/services/PtyHost/types.d.mts +39 -0
- package/dist/services/PtyHost/types.d.mts.map +1 -0
- package/dist/services/PtySpawner/NodePtySpawner.cjs +2 -0
- package/dist/services/PtySpawner/NodePtySpawner.cjs.map +1 -0
- package/dist/services/PtySpawner/NodePtySpawner.d.cts +18 -0
- package/dist/services/PtySpawner/NodePtySpawner.d.cts.map +1 -0
- package/dist/services/PtySpawner/NodePtySpawner.d.mts +18 -0
- package/dist/services/PtySpawner/NodePtySpawner.d.mts.map +1 -0
- package/dist/services/PtySpawner/NodePtySpawner.mjs +2 -0
- package/dist/services/PtySpawner/NodePtySpawner.mjs.map +1 -0
- package/dist/services/PtySpawner/index.cjs +1 -0
- package/dist/services/PtySpawner/index.d.cts +3 -0
- package/dist/services/PtySpawner/index.d.mts +3 -0
- package/dist/services/PtySpawner/index.mjs +1 -0
- package/dist/services/PtySpawner/types.d.cts +28 -0
- package/dist/services/PtySpawner/types.d.cts.map +1 -0
- package/dist/services/PtySpawner/types.d.mts +28 -0
- package/dist/services/PtySpawner/types.d.mts.map +1 -0
- package/dist/services/RmuxBackend/RmuxBackend.cjs +2 -0
- package/dist/services/RmuxBackend/RmuxBackend.cjs.map +1 -0
- package/dist/services/RmuxBackend/RmuxBackend.d.cts +36 -0
- package/dist/services/RmuxBackend/RmuxBackend.d.cts.map +1 -0
- package/dist/services/RmuxBackend/RmuxBackend.d.mts +36 -0
- package/dist/services/RmuxBackend/RmuxBackend.d.mts.map +1 -0
- package/dist/services/RmuxBackend/RmuxBackend.mjs +2 -0
- package/dist/services/RmuxBackend/RmuxBackend.mjs.map +1 -0
- package/dist/services/RmuxBackend/index.cjs +1 -0
- package/dist/services/RmuxBackend/index.d.cts +3 -0
- package/dist/services/RmuxBackend/index.d.mts +3 -0
- package/dist/services/RmuxBackend/index.mjs +1 -0
- package/dist/services/RmuxBackend/types.d.cts +29 -0
- package/dist/services/RmuxBackend/types.d.cts.map +1 -0
- package/dist/services/RmuxBackend/types.d.mts +29 -0
- package/dist/services/RmuxBackend/types.d.mts.map +1 -0
- package/dist/services/RunnerNamer/RunnerNamer.cjs +2 -0
- package/dist/services/RunnerNamer/RunnerNamer.cjs.map +1 -0
- package/dist/services/RunnerNamer/RunnerNamer.d.cts +13 -0
- package/dist/services/RunnerNamer/RunnerNamer.d.cts.map +1 -0
- package/dist/services/RunnerNamer/RunnerNamer.d.mts +13 -0
- package/dist/services/RunnerNamer/RunnerNamer.d.mts.map +1 -0
- package/dist/services/RunnerNamer/RunnerNamer.mjs +2 -0
- package/dist/services/RunnerNamer/RunnerNamer.mjs.map +1 -0
- package/dist/services/RunnerNamer/index.cjs +1 -0
- package/dist/services/RunnerNamer/index.d.cts +3 -0
- package/dist/services/RunnerNamer/index.d.mts +3 -0
- package/dist/services/RunnerNamer/index.mjs +1 -0
- package/dist/services/RunnerNamer/types.d.cts +12 -0
- package/dist/services/RunnerNamer/types.d.cts.map +1 -0
- package/dist/services/RunnerNamer/types.d.mts +12 -0
- package/dist/services/RunnerNamer/types.d.mts.map +1 -0
- package/dist/services/RunnerPaths/RunnerPaths.cjs +2 -0
- package/dist/services/RunnerPaths/RunnerPaths.cjs.map +1 -0
- package/dist/services/RunnerPaths/RunnerPaths.d.cts +31 -0
- package/dist/services/RunnerPaths/RunnerPaths.d.cts.map +1 -0
- package/dist/services/RunnerPaths/RunnerPaths.d.mts +31 -0
- package/dist/services/RunnerPaths/RunnerPaths.d.mts.map +1 -0
- package/dist/services/RunnerPaths/RunnerPaths.mjs +2 -0
- package/dist/services/RunnerPaths/RunnerPaths.mjs.map +1 -0
- package/dist/services/RunnerPaths/index.cjs +1 -0
- package/dist/services/RunnerPaths/index.d.cts +3 -0
- package/dist/services/RunnerPaths/index.d.mts +3 -0
- package/dist/services/RunnerPaths/index.mjs +1 -0
- package/dist/services/RunnerPaths/types.d.cts +33 -0
- package/dist/services/RunnerPaths/types.d.cts.map +1 -0
- package/dist/services/RunnerPaths/types.d.mts +33 -0
- package/dist/services/RunnerPaths/types.d.mts.map +1 -0
- package/dist/services/RunnerRegistry/RunnerRegistry.cjs +2 -0
- package/dist/services/RunnerRegistry/RunnerRegistry.cjs.map +1 -0
- package/dist/services/RunnerRegistry/RunnerRegistry.d.cts +40 -0
- package/dist/services/RunnerRegistry/RunnerRegistry.d.cts.map +1 -0
- package/dist/services/RunnerRegistry/RunnerRegistry.d.mts +40 -0
- package/dist/services/RunnerRegistry/RunnerRegistry.d.mts.map +1 -0
- package/dist/services/RunnerRegistry/RunnerRegistry.mjs +2 -0
- package/dist/services/RunnerRegistry/RunnerRegistry.mjs.map +1 -0
- package/dist/services/RunnerRegistry/index.cjs +1 -0
- package/dist/services/RunnerRegistry/index.d.cts +3 -0
- package/dist/services/RunnerRegistry/index.d.mts +3 -0
- package/dist/services/RunnerRegistry/index.mjs +1 -0
- package/dist/services/RunnerRegistry/types.d.cts +98 -0
- package/dist/services/RunnerRegistry/types.d.cts.map +1 -0
- package/dist/services/RunnerRegistry/types.d.mts +98 -0
- package/dist/services/RunnerRegistry/types.d.mts.map +1 -0
- package/dist/services/Spawner/NodeSpawner.cjs +2 -0
- package/dist/services/Spawner/NodeSpawner.cjs.map +1 -0
- package/dist/services/Spawner/NodeSpawner.d.cts +10 -0
- package/dist/services/Spawner/NodeSpawner.d.cts.map +1 -0
- package/dist/services/Spawner/NodeSpawner.d.mts +10 -0
- package/dist/services/Spawner/NodeSpawner.d.mts.map +1 -0
- package/dist/services/Spawner/NodeSpawner.mjs +2 -0
- package/dist/services/Spawner/NodeSpawner.mjs.map +1 -0
- package/dist/services/Spawner/index.cjs +1 -0
- package/dist/services/Spawner/index.d.cts +3 -0
- package/dist/services/Spawner/index.d.mts +3 -0
- package/dist/services/Spawner/index.mjs +1 -0
- package/dist/services/Spawner/types.d.cts +31 -0
- package/dist/services/Spawner/types.d.cts.map +1 -0
- package/dist/services/Spawner/types.d.mts +31 -0
- package/dist/services/Spawner/types.d.mts.map +1 -0
- package/dist/session.cjs +2 -0
- package/dist/session.cjs.map +1 -0
- package/dist/session.d.cts +10 -0
- package/dist/session.d.cts.map +1 -0
- package/dist/session.d.mts +10 -0
- package/dist/session.d.mts.map +1 -0
- package/dist/session.mjs +2 -0
- package/dist/session.mjs.map +1 -0
- package/dist/tool/bashTool.cjs +7 -0
- package/dist/tool/bashTool.cjs.map +1 -0
- package/dist/tool/bashTool.d.cts +25 -0
- package/dist/tool/bashTool.d.cts.map +1 -0
- package/dist/tool/bashTool.d.mts +25 -0
- package/dist/tool/bashTool.d.mts.map +1 -0
- package/dist/tool/bashTool.mjs +7 -0
- package/dist/tool/bashTool.mjs.map +1 -0
- package/dist/tool/responseEnvelope.cjs +10 -0
- package/dist/tool/responseEnvelope.cjs.map +1 -0
- package/dist/tool/responseEnvelope.d.cts +45 -0
- package/dist/tool/responseEnvelope.d.cts.map +1 -0
- package/dist/tool/responseEnvelope.d.mts +45 -0
- package/dist/tool/responseEnvelope.d.mts.map +1 -0
- package/dist/tool/responseEnvelope.mjs +10 -0
- package/dist/tool/responseEnvelope.mjs.map +1 -0
- package/dist/tool/schema.cjs +2 -0
- package/dist/tool/schema.cjs.map +1 -0
- package/dist/tool/schema.d.cts +25 -0
- package/dist/tool/schema.d.cts.map +1 -0
- package/dist/tool/schema.d.mts +25 -0
- package/dist/tool/schema.d.mts.map +1 -0
- package/dist/tool/schema.mjs +2 -0
- package/dist/tool/schema.mjs.map +1 -0
- package/dist/tui/bashRender.cjs +8 -0
- package/dist/tui/bashRender.cjs.map +1 -0
- package/dist/tui/bashRender.d.cts +51 -0
- package/dist/tui/bashRender.d.cts.map +1 -0
- package/dist/tui/bashRender.d.mts +51 -0
- package/dist/tui/bashRender.d.mts.map +1 -0
- package/dist/tui/bashRender.mjs +8 -0
- package/dist/tui/bashRender.mjs.map +1 -0
- package/dist/tui/format.cjs +2 -0
- package/dist/tui/format.cjs.map +1 -0
- package/dist/tui/format.d.cts +25 -0
- package/dist/tui/format.d.cts.map +1 -0
- package/dist/tui/format.d.mts +25 -0
- package/dist/tui/format.d.mts.map +1 -0
- package/dist/tui/format.mjs +2 -0
- package/dist/tui/format.mjs.map +1 -0
- package/dist/tui/runnerSpace.cjs +6 -0
- package/dist/tui/runnerSpace.cjs.map +1 -0
- package/dist/tui/runnerSpace.d.cts +52 -0
- package/dist/tui/runnerSpace.d.cts.map +1 -0
- package/dist/tui/runnerSpace.d.mts +52 -0
- package/dist/tui/runnerSpace.d.mts.map +1 -0
- package/dist/tui/runnerSpace.mjs +6 -0
- package/dist/tui/runnerSpace.mjs.map +1 -0
- package/dist/types.cjs +2 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +28 -0
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.mts +28 -0
- package/dist/types.d.mts.map +1 -0
- package/dist/types.mjs +2 -0
- package/dist/types.mjs.map +1 -0
- package/package.json +335 -0
- package/skills/doom-runner/SKILL.md +69 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { RunnerRecord } from "../services/RunnerRegistry/types.mjs";
|
|
2
|
+
import "../services/RunnerRegistry/index.mjs";
|
|
3
|
+
//#region src/tui/format.d.ts
|
|
4
|
+
declare const WIDGET_KEY = "doom-runners";
|
|
5
|
+
declare const OVERLAY_HEADING = "Runners";
|
|
6
|
+
/** Compact footer text. An absent value removes the group entirely. */
|
|
7
|
+
declare function formatRunnerStatus(count: number): string | undefined;
|
|
8
|
+
declare function formatRunnerFooterContribution(count: number): {
|
|
9
|
+
fullText: string;
|
|
10
|
+
compactText: string;
|
|
11
|
+
} | undefined;
|
|
12
|
+
/** `api · 3m · nx dev-start api` — the widget's per-runner line. */
|
|
13
|
+
declare function formatWidgetLine(record: RunnerRecord, now: number): string;
|
|
14
|
+
interface RunnerRow {
|
|
15
|
+
name: string;
|
|
16
|
+
detail: string;
|
|
17
|
+
interactive: boolean;
|
|
18
|
+
}
|
|
19
|
+
/** Rows for the Runner Space list, as plain values so they can be asserted as text. */
|
|
20
|
+
declare function toRunnerRows(records: readonly RunnerRecord[], now: number): RunnerRow[];
|
|
21
|
+
/** Heading text for the widget, hidden entirely when there is nothing running. */
|
|
22
|
+
declare function formatWidgetHeading(count: number): string;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { OVERLAY_HEADING, RunnerRow, WIDGET_KEY, formatRunnerFooterContribution, formatRunnerStatus, formatWidgetHeading, formatWidgetLine, toRunnerRows };
|
|
25
|
+
//# sourceMappingURL=format.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.mts","names":[],"sources":["../../src/tui/format.ts"],"mappings":";;;cAGa;cACA;;iBAGG,mBAAmB;iBAInB,+BAA+B;EAAkB;EAAkB;;;iBAKnE,iBAAiB,QAAQ,cAAc;UAKtC;EACf;EACA;EACA;;;iBAIc,aAAa,kBAAkB,gBAAgB,cAAc;;iBAS7D,oBAAoB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{formatUptime as e}from"../tool/responseEnvelope.mjs";const t=`doom-runners`,n=`Runners`;function r(e){return e>0?`Runners ${e} ●`:void 0}function i(e){return e>0?{fullText:`Runner ${e}`,compactText:`R${e}`}:void 0}function a(t,n){let r=t.interactive?` · tty`:``;return`${t.name} · ${e(t.startedAt,n)}${r} · ${t.command}`}function o(t,n){return t.map(t=>({name:t.name,detail:`pid ${t.pid} · up ${e(t.startedAt,n)} · ${t.command}`,interactive:t.interactive}))}function s(e){return`${n} (${e})`}export{n as OVERLAY_HEADING,t as WIDGET_KEY,i as formatRunnerFooterContribution,r as formatRunnerStatus,s as formatWidgetHeading,a as formatWidgetLine,o as toRunnerRows};
|
|
2
|
+
//# sourceMappingURL=format.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.mjs","names":[],"sources":["../../src/tui/format.ts"],"sourcesContent":["import type { RunnerRecord } from '../services/RunnerRegistry/index.ts';\nimport { formatUptime } from '../tool/responseEnvelope.ts';\n\nexport const WIDGET_KEY = 'doom-runners';\nexport const OVERLAY_HEADING = 'Runners';\n\n/** Compact footer text. An absent value removes the group entirely. */\nexport function formatRunnerStatus(count: number): string | undefined {\n return count > 0 ? `Runners ${count} ●` : undefined;\n}\n\nexport function formatRunnerFooterContribution(count: number): { fullText: string; compactText: string } | undefined {\n return count > 0 ? { fullText: `Runner ${count}`, compactText: `R${count}` } : undefined;\n}\n\n/** `api · 3m · nx dev-start api` — the widget's per-runner line. */\nexport function formatWidgetLine(record: RunnerRecord, now: number): string {\n const mode = record.interactive ? ' · tty' : '';\n return `${record.name} · ${formatUptime(record.startedAt, now)}${mode} · ${record.command}`;\n}\n\nexport interface RunnerRow {\n name: string;\n detail: string;\n interactive: boolean;\n}\n\n/** Rows for the Runner Space list, as plain values so they can be asserted as text. */\nexport function toRunnerRows(records: readonly RunnerRecord[], now: number): RunnerRow[] {\n return records.map((record) => ({\n name: record.name,\n detail: `pid ${record.pid} · up ${formatUptime(record.startedAt, now)} · ${record.command}`,\n interactive: record.interactive,\n }));\n}\n\n/** Heading text for the widget, hidden entirely when there is nothing running. */\nexport function formatWidgetHeading(count: number): string {\n return `${OVERLAY_HEADING} (${count})`;\n}\n"],"mappings":"4DAGA,MAAa,EAAa,eACb,EAAkB,UAG/B,SAAgB,EAAmB,EAAmC,CACpE,OAAO,EAAQ,EAAI,WAAW,EAAM,IAAM,IAAA,EAC5C,CAEA,SAAgB,EAA+B,EAAsE,CACnH,OAAO,EAAQ,EAAI,CAAE,SAAU,UAAU,IAAS,YAAa,IAAI,GAAQ,EAAI,IAAA,EACjF,CAGA,SAAgB,EAAiB,EAAsB,EAAqB,CAC1E,IAAM,EAAO,EAAO,YAAc,SAAW,GAC7C,MAAO,GAAG,EAAO,KAAK,KAAK,EAAa,EAAO,UAAW,CAAG,IAAI,EAAK,KAAK,EAAO,SACpF,CASA,SAAgB,EAAa,EAAkC,EAA0B,CACvF,OAAO,EAAQ,IAAK,IAAY,CAC9B,KAAM,EAAO,KACb,OAAQ,OAAO,EAAO,IAAI,QAAQ,EAAa,EAAO,UAAW,CAAG,EAAE,KAAK,EAAO,UAClF,YAAa,EAAO,WACtB,EAAE,CACJ,CAGA,SAAgB,EAAoB,EAAuB,CACzD,MAAO,GAAG,EAAgB,IAAI,EAAM,EACtC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./format.cjs");let t=require("@earendil-works/pi-tui"),n=require("@agimon-ai/doompi-ui/components/doomOverlay");const r=n.DOOM_FULLSCREEN_UI_OPTIONS.overlayOptions;var i=class extends n.DoomOverlay{options;done;selected=0;attached;viewedLog;unsubscribe;logRefresh;notice;stopReason;constructor(e,t,n,r){super(e,t),this.options=n,this.done=r}handleInput(e){if(this.stopReason){this.handleStopReasonInput(e);return}if(this.attached){this.handleAttachedInput(e);return}if(this.viewedLog){(0,t.matchesKey)(e,`escape`)&&this.detach();return}this.handleListInput(e)}getChrome(){let e=this.options.getRunners();return{title:`RUNNER SPACE`,accent:n.DOOM_OVERLAY_ACCENT,breadcrumb:`SPC › r / runners › r / runner space`,headerRight:this.attached?`attached · ${this.attached.name}`:this.viewedLog?`logs · ${this.viewedLog.name}`:`${e.length} runners · this worktree`,footer:this.attached?`esc back · everything else goes to the runner`:this.viewedLog?`esc back · live stdout/stderr`:`↑↓/jk select · enter open · s stop · r reason · esc close`,footerHints:this.attached||this.viewedLog?void 0:[[`↑↓/jk`,`select`],[`enter`,`open`],[`s`,`stop`],[`r`,`reason`],[`esc`,`close`]],footerRight:this.attached?`live tty`:this.viewedLog?`live log`:e.length>0?`${Math.min(this.selected,e.length-1)+1}/${e.length}`:`empty`}}renderBody(e,n){let r=n=>(0,t.truncateToWidth)(n,e,`…`);return this.attached?this.renderAttached(r,n):this.viewedLog?this.renderLog(r,n):this.renderList(r,n)}handleAttachedInput(e){if((0,t.matchesKey)(e,`escape`)){this.detach();return}this.attached?.write(e)}handleListInput(e){let n=this.options.getRunners();if((0,t.matchesKey)(e,`escape`)||(0,t.matchesKey)(e,`ctrl+c`)){this.close();return}(0,t.matchesKey)(e,`up`)||e===`k`?this.move(-1,n.length):(0,t.matchesKey)(e,`down`)||e===`j`?this.move(1,n.length):e===`\r`||e===`
|
|
2
|
+
`?this.attach(n):e===`s`?this.stop(n):e===`r`&&this.promptStopReason(n)}move(e,t){t!==0&&(this.selected=Math.max(0,Math.min(t-1,this.selected+e)),this.notice=void 0,this.tui.requestRender())}current(e){if(e.length!==0)return e[Math.min(this.selected,e.length-1)]}attach(e){let t=this.current(e);if(!t)return;let n=t.interactive?this.options.getPtyRun(t.name):void 0;this.notice=void 0,n?(this.attached=n,this.unsubscribe=n.onData(()=>this.tui.requestRender())):(this.viewedLog=t,this.logRefresh=setInterval(()=>this.tui.requestRender(!0),250),this.logRefresh.unref?.()),this.tui.requestRender(!0)}detach(){this.unsubscribe?.(),this.unsubscribe=void 0,this.logRefresh&&clearInterval(this.logRefresh),this.logRefresh=void 0,this.attached=void 0,this.viewedLog=void 0,this.tui.requestRender(!0)}stop(e){let t=this.current(e);t&&this.options.stopRunner(t.id).then(()=>{this.notice=`Stopped ${t.name}`,this.tui.requestRender(!0)}).catch(e=>{this.notice=e instanceof Error?e.message:String(e),this.tui.requestRender()})}promptStopReason(e){let t=this.current(e);t&&(this.stopReason={runner:t,text:``},this.tui.requestRender())}handleStopReasonInput(e){let n=this.stopReason;if(n){if((0,t.matchesKey)(e,`escape`)||(0,t.matchesKey)(e,`ctrl+c`)){this.stopReason=void 0,this.tui.requestRender();return}if(e===`\r`||e===`
|
|
3
|
+
`){this.stopReason=void 0,this.options.stopRunner(n.runner.id,n.text.trim()||void 0).then(()=>{this.notice=`Stopped ${n.runner.name}`,this.tui.requestRender(!0)}).catch(e=>{this.notice=e instanceof Error?e.message:String(e),this.tui.requestRender()});return}(0,t.matchesKey)(e,`backspace`)?n.text=n.text.slice(0,-1):e.includes(`\x1B`)||(n.text+=e),this.tui.requestRender()}}close(){this.detach(),this.done(void 0)}renderList(t,n){let r=this.options.getRunners(),i=e.toRunnerRows(r,Date.now()),a=[];if(this.stopReason)return[t(`Stop reason for ${this.stopReason.runner.name}: ${this.stopReason.text}`)];if(i.length===0)a.push(t(this.theme.fg(`dim`,`No background runners. bash backgrounds anything that outlives the threshold.`)));else{let e=this.notice?2:0,r=Math.max(1,n-e),o=Math.max(0,i.length-r),s=Math.min(o,Math.max(0,this.selected-r+1));i.slice(s,s+r).forEach((e,n)=>{let r=s+n===Math.min(this.selected,i.length-1)?`›`:` `,o=e.interactive?` [tty]`:``;a.push(t(`${r} ${e.name}${o} ${this.theme.fg(`dim`,e.detail)}`))})}return this.notice&&a.push(``,t(this.theme.fg(`warning`,this.notice))),a.slice(0,n)}renderAttached(e,t){let n=this.attached;return n?n.screen().split(`
|
|
4
|
+
`).slice(-t).map(e):[]}renderLog(e,t){let n=this.viewedLog;if(!n)return[];let r=this.options.readLog(n.logPath);return r?r.split(`
|
|
5
|
+
`).slice(-t).map(e):[e(this.theme.fg(`dim`,`Waiting for output…`))]}};async function a(e,t){await e.ui.custom((e,n,r,a)=>new i(e,n,t,a),n.DOOM_FULLSCREEN_UI_OPTIONS)}exports.RUNNER_SPACE_OVERLAY_OPTIONS=r,exports.RunnerSpaceComponent=i,exports.openRunnerSpace=a;
|
|
6
|
+
//# sourceMappingURL=runnerSpace.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runnerSpace.cjs","names":["DOOM_FULLSCREEN_UI_OPTIONS","DoomOverlay","matchesKey","DOOM_OVERLAY_ACCENT","truncateToWidth","toRunnerRows"],"sources":["../../src/tui/runnerSpace.ts"],"sourcesContent":["/**\n * Runner Space: the `SPC r r` overlay.\n *\n * Two modes behind one component. The list shows every runner in this worktree\n * and can stop them; attaching to an interactive runner renders its live\n * terminal and forwards keystrokes to it, which is the whole reason PTY runs\n * exist. Rendering is pure, so the surface can be asserted as text.\n */\n\nimport type { ExtensionContext, Theme } from '@earendil-works/pi-coding-agent';\nimport {\n DOOM_OVERLAY_ACCENT,\n DoomOverlay,\n type DoomOverlayChrome,\n type DoomOverlayTui,\n DOOM_FULLSCREEN_UI_OPTIONS,\n} from '@agimon-ai/doompi-ui/components/doomOverlay';\nimport { matchesKey, truncateToWidth } from '@earendil-works/pi-tui';\nimport type { PtyRun } from '../services/PtyHost/index.ts';\nimport type { RunnerRecord } from '../services/RunnerRegistry/index.ts';\nimport { toRunnerRows } from './format.ts';\n\nexport const RUNNER_SPACE_OVERLAY_OPTIONS = DOOM_FULLSCREEN_UI_OPTIONS.overlayOptions;\n\nconst KEY_ENTER = '\\r';\nconst KEY_NEWLINE = '\\n';\nconst TITLE = 'RUNNER SPACE';\nconst EMPTY_MESSAGE = 'No background runners. bash backgrounds anything that outlives the threshold.';\nconst LIST_FOOTER = '↑↓/jk select · enter open · s stop · r reason · esc close';\nconst ATTACH_FOOTER = 'esc back · everything else goes to the runner';\nconst LOG_FOOTER = 'esc back · live stdout/stderr';\nconst LOG_REFRESH_MS = 250;\nconst ELLIPSIS = '…';\n\nexport interface RunnerSpaceOptions {\n getRunners: () => readonly RunnerRecord[];\n /** The hosted terminal for a runner, when this session owns one. */\n getPtyRun: (name: string) => PtyRun | undefined;\n readLog: (logPath: string) => string;\n stopRunner: (id: string, reason?: string) => Promise<void>;\n}\n\nexport class RunnerSpaceComponent extends DoomOverlay {\n private selected = 0;\n private attached: PtyRun | undefined;\n private viewedLog: RunnerRecord | undefined;\n private unsubscribe: (() => void) | undefined;\n private logRefresh: ReturnType<typeof setInterval> | undefined;\n private notice: string | undefined;\n private stopReason: { runner: RunnerRecord; text: string } | undefined;\n\n constructor(\n tui: DoomOverlayTui,\n theme: Theme,\n private readonly options: RunnerSpaceOptions,\n private readonly done: (result: undefined) => void,\n ) {\n super(tui, theme);\n }\n\n handleInput(data: string): void {\n if (this.stopReason) {\n this.handleStopReasonInput(data);\n return;\n }\n if (this.attached) {\n this.handleAttachedInput(data);\n return;\n }\n if (this.viewedLog) {\n if (matchesKey(data, 'escape')) this.detach();\n return;\n }\n this.handleListInput(data);\n }\n\n protected getChrome(): DoomOverlayChrome {\n const runners = this.options.getRunners();\n return {\n title: TITLE,\n accent: DOOM_OVERLAY_ACCENT,\n breadcrumb: 'SPC › r / runners › r / runner space',\n headerRight: this.attached\n ? `attached · ${this.attached.name}`\n : this.viewedLog\n ? `logs · ${this.viewedLog.name}`\n : `${runners.length} runners · this worktree`,\n footer: this.attached ? ATTACH_FOOTER : this.viewedLog ? LOG_FOOTER : LIST_FOOTER,\n footerHints:\n this.attached || this.viewedLog\n ? undefined\n : [\n ['↑↓/jk', 'select'],\n ['enter', 'open'],\n ['s', 'stop'],\n ['r', 'reason'],\n ['esc', 'close'],\n ],\n footerRight: this.attached\n ? 'live tty'\n : this.viewedLog\n ? 'live log'\n : runners.length > 0\n ? `${Math.min(this.selected, runners.length - 1) + 1}/${runners.length}`\n : 'empty',\n };\n }\n\n protected renderBody(width: number, height: number): string[] {\n const truncate = (line: string): string => truncateToWidth(line, width, ELLIPSIS);\n if (this.attached) return this.renderAttached(truncate, height);\n if (this.viewedLog) return this.renderLog(truncate, height);\n return this.renderList(truncate, height);\n }\n\n private handleAttachedInput(data: string): void {\n if (matchesKey(data, 'escape')) {\n this.detach();\n return;\n }\n this.attached?.write(data);\n }\n\n private handleListInput(data: string): void {\n const runners = this.options.getRunners();\n\n if (matchesKey(data, 'escape') || matchesKey(data, 'ctrl+c')) {\n this.close();\n return;\n }\n if (matchesKey(data, 'up') || data === 'k') this.move(-1, runners.length);\n else if (matchesKey(data, 'down') || data === 'j') this.move(1, runners.length);\n else if (data === KEY_ENTER || data === KEY_NEWLINE) this.attach(runners);\n else if (data === 's') this.stop(runners);\n else if (data === 'r') this.promptStopReason(runners);\n }\n\n private move(delta: number, count: number): void {\n if (count === 0) return;\n this.selected = Math.max(0, Math.min(count - 1, this.selected + delta));\n this.notice = undefined;\n this.tui.requestRender();\n }\n\n private current(runners: readonly RunnerRecord[]): RunnerRecord | undefined {\n if (runners.length === 0) return undefined;\n return runners[Math.min(this.selected, runners.length - 1)];\n }\n\n private attach(runners: readonly RunnerRecord[]): void {\n const record = this.current(runners);\n if (!record) return;\n\n const run = record.interactive ? this.options.getPtyRun(record.name) : undefined;\n this.notice = undefined;\n if (run) {\n this.attached = run;\n this.unsubscribe = run.onData(() => this.tui.requestRender());\n } else {\n this.viewedLog = record;\n this.logRefresh = setInterval(() => this.tui.requestRender(true), LOG_REFRESH_MS);\n this.logRefresh.unref?.();\n }\n this.tui.requestRender(true);\n }\n\n private detach(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n if (this.logRefresh) clearInterval(this.logRefresh);\n this.logRefresh = undefined;\n this.attached = undefined;\n this.viewedLog = undefined;\n this.tui.requestRender(true);\n }\n\n private stop(runners: readonly RunnerRecord[]): void {\n const record = this.current(runners);\n if (!record) return;\n\n this.options\n .stopRunner(record.id)\n .then(() => {\n this.notice = `Stopped ${record.name}`;\n this.tui.requestRender(true);\n })\n .catch((error: unknown) => {\n // Shown rather than swallowed: a failed stop means the process is still\n // running and the operator needs to know.\n this.notice = error instanceof Error ? error.message : String(error);\n this.tui.requestRender();\n });\n }\n\n private promptStopReason(runners: readonly RunnerRecord[]): void {\n const runner = this.current(runners);\n if (!runner) return;\n this.stopReason = { runner, text: '' };\n this.tui.requestRender();\n }\n\n private handleStopReasonInput(data: string): void {\n const prompt = this.stopReason;\n if (!prompt) return;\n if (matchesKey(data, 'escape') || matchesKey(data, 'ctrl+c')) {\n this.stopReason = undefined;\n this.tui.requestRender();\n return;\n }\n if (data === KEY_ENTER || data === KEY_NEWLINE) {\n this.stopReason = undefined;\n this.options\n .stopRunner(prompt.runner.id, prompt.text.trim() || undefined)\n .then(() => {\n this.notice = `Stopped ${prompt.runner.name}`;\n this.tui.requestRender(true);\n })\n .catch((error: unknown) => {\n this.notice = error instanceof Error ? error.message : String(error);\n this.tui.requestRender();\n });\n return;\n }\n if (matchesKey(data, 'backspace')) prompt.text = prompt.text.slice(0, -1);\n else if (!data.includes('\\u001b')) prompt.text += data;\n this.tui.requestRender();\n }\n\n private close(): void {\n this.detach();\n this.done(undefined);\n }\n\n private renderList(truncate: (line: string) => string, height: number): string[] {\n const runners = this.options.getRunners();\n const rows = toRunnerRows(runners, Date.now());\n const lines: string[] = [];\n\n if (this.stopReason) {\n return [truncate(`Stop reason for ${this.stopReason.runner.name}: ${this.stopReason.text}`)];\n }\n\n if (rows.length === 0) lines.push(truncate(this.theme.fg('dim', EMPTY_MESSAGE)));\n else {\n const noticeRows = this.notice ? 2 : 0;\n const capacity = Math.max(1, height - noticeRows);\n const maxStart = Math.max(0, rows.length - capacity);\n const start = Math.min(maxStart, Math.max(0, this.selected - capacity + 1));\n rows.slice(start, start + capacity).forEach((row, offset) => {\n const index = start + offset;\n const marker = index === Math.min(this.selected, rows.length - 1) ? '›' : ' ';\n const tty = row.interactive ? ' [tty]' : '';\n lines.push(truncate(`${marker} ${row.name}${tty} ${this.theme.fg('dim', row.detail)}`));\n });\n }\n\n if (this.notice) lines.push('', truncate(this.theme.fg('warning', this.notice)));\n return lines.slice(0, height);\n }\n\n private renderAttached(truncate: (line: string) => string, height: number): string[] {\n const run = this.attached;\n if (!run) return [];\n\n return run.screen().split('\\n').slice(-height).map(truncate);\n }\n\n private renderLog(truncate: (line: string) => string, height: number): string[] {\n const record = this.viewedLog;\n if (!record) return [];\n\n const text = this.options.readLog(record.logPath);\n if (!text) return [truncate(this.theme.fg('dim', 'Waiting for output…'))];\n return text.split('\\n').slice(-height).map(truncate);\n }\n}\n\nexport async function openRunnerSpace(ctx: ExtensionContext, options: RunnerSpaceOptions): Promise<void> {\n await ctx.ui.custom<undefined>(\n (tui, theme, _keybindings, done) => new RunnerSpaceComponent(tui, theme, options, done),\n DOOM_FULLSCREEN_UI_OPTIONS,\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { PtyRun } from "../services/PtyHost/types.cjs";
|
|
2
|
+
import "../services/PtyHost/index.cjs";
|
|
3
|
+
import { RunnerRecord } from "../services/RunnerRegistry/types.cjs";
|
|
4
|
+
import "../services/RunnerRegistry/index.cjs";
|
|
5
|
+
import { ExtensionContext, Theme } from "@earendil-works/pi-coding-agent";
|
|
6
|
+
import { DoomOverlay, DoomOverlayChrome, DoomOverlayTui } from "@agimon-ai/doompi-ui/components/doomOverlay";
|
|
7
|
+
//#region src/tui/runnerSpace.d.ts
|
|
8
|
+
declare const RUNNER_SPACE_OVERLAY_OPTIONS: {
|
|
9
|
+
readonly anchor: "top-left";
|
|
10
|
+
readonly width: "100%";
|
|
11
|
+
readonly maxHeight: "100%";
|
|
12
|
+
readonly margin: 0;
|
|
13
|
+
};
|
|
14
|
+
interface RunnerSpaceOptions {
|
|
15
|
+
getRunners: () => readonly RunnerRecord[];
|
|
16
|
+
/** The hosted terminal for a runner, when this session owns one. */
|
|
17
|
+
getPtyRun: (name: string) => PtyRun | undefined;
|
|
18
|
+
readLog: (logPath: string) => string;
|
|
19
|
+
stopRunner: (id: string, reason?: string) => Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
declare class RunnerSpaceComponent extends DoomOverlay {
|
|
22
|
+
private readonly options;
|
|
23
|
+
private readonly done;
|
|
24
|
+
private selected;
|
|
25
|
+
private attached;
|
|
26
|
+
private viewedLog;
|
|
27
|
+
private unsubscribe;
|
|
28
|
+
private logRefresh;
|
|
29
|
+
private notice;
|
|
30
|
+
private stopReason;
|
|
31
|
+
constructor(tui: DoomOverlayTui, theme: Theme, options: RunnerSpaceOptions, done: (result: undefined) => void);
|
|
32
|
+
handleInput(data: string): void;
|
|
33
|
+
protected getChrome(): DoomOverlayChrome;
|
|
34
|
+
protected renderBody(width: number, height: number): string[];
|
|
35
|
+
private handleAttachedInput;
|
|
36
|
+
private handleListInput;
|
|
37
|
+
private move;
|
|
38
|
+
private current;
|
|
39
|
+
private attach;
|
|
40
|
+
private detach;
|
|
41
|
+
private stop;
|
|
42
|
+
private promptStopReason;
|
|
43
|
+
private handleStopReasonInput;
|
|
44
|
+
private close;
|
|
45
|
+
private renderList;
|
|
46
|
+
private renderAttached;
|
|
47
|
+
private renderLog;
|
|
48
|
+
}
|
|
49
|
+
declare function openRunnerSpace(ctx: ExtensionContext, options: RunnerSpaceOptions): Promise<void>;
|
|
50
|
+
//#endregion
|
|
51
|
+
export { RUNNER_SPACE_OVERLAY_OPTIONS, RunnerSpaceComponent, RunnerSpaceOptions, openRunnerSpace };
|
|
52
|
+
//# sourceMappingURL=runnerSpace.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runnerSpace.d.cts","names":[],"sources":["../../src/tui/runnerSpace.ts"],"mappings":";;;;;;;cAsBa;;;;;;UAYI;EACf,2BAA2B;;EAE3B,YAAY,iBAAiB;EAC7B,UAAU;EACV,aAAa,YAAY,oBAAoB;;cAGlC,6BAA6B;mBAYrB;mBACA;UAZX;UACA;UACA;UACA;UACA;UACA;UACA;EAGN,YAAA,KAAK,gBACL,OAAO,OACU,SAAS,oBACT,OAAO;EAK1B,YAAY;YAgBF,aAAa;YAgCb,WAAW,eAAe;UAO5B;UAQA;UAcA;UAOA;UAKA;UAiBA;UAUA;UAkBA;UAOA;UA2BA;UAKA;UA2BA;UAOA;;iBAUY,gBAAgB,KAAK,kBAAkB,SAAS,qBAAqB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { PtyRun } from "../services/PtyHost/types.mjs";
|
|
2
|
+
import "../services/PtyHost/index.mjs";
|
|
3
|
+
import { RunnerRecord } from "../services/RunnerRegistry/types.mjs";
|
|
4
|
+
import "../services/RunnerRegistry/index.mjs";
|
|
5
|
+
import { ExtensionContext, Theme } from "@earendil-works/pi-coding-agent";
|
|
6
|
+
import { DoomOverlay, DoomOverlayChrome, DoomOverlayTui } from "@agimon-ai/doompi-ui/components/doomOverlay";
|
|
7
|
+
//#region src/tui/runnerSpace.d.ts
|
|
8
|
+
declare const RUNNER_SPACE_OVERLAY_OPTIONS: {
|
|
9
|
+
readonly anchor: "top-left";
|
|
10
|
+
readonly width: "100%";
|
|
11
|
+
readonly maxHeight: "100%";
|
|
12
|
+
readonly margin: 0;
|
|
13
|
+
};
|
|
14
|
+
interface RunnerSpaceOptions {
|
|
15
|
+
getRunners: () => readonly RunnerRecord[];
|
|
16
|
+
/** The hosted terminal for a runner, when this session owns one. */
|
|
17
|
+
getPtyRun: (name: string) => PtyRun | undefined;
|
|
18
|
+
readLog: (logPath: string) => string;
|
|
19
|
+
stopRunner: (id: string, reason?: string) => Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
declare class RunnerSpaceComponent extends DoomOverlay {
|
|
22
|
+
private readonly options;
|
|
23
|
+
private readonly done;
|
|
24
|
+
private selected;
|
|
25
|
+
private attached;
|
|
26
|
+
private viewedLog;
|
|
27
|
+
private unsubscribe;
|
|
28
|
+
private logRefresh;
|
|
29
|
+
private notice;
|
|
30
|
+
private stopReason;
|
|
31
|
+
constructor(tui: DoomOverlayTui, theme: Theme, options: RunnerSpaceOptions, done: (result: undefined) => void);
|
|
32
|
+
handleInput(data: string): void;
|
|
33
|
+
protected getChrome(): DoomOverlayChrome;
|
|
34
|
+
protected renderBody(width: number, height: number): string[];
|
|
35
|
+
private handleAttachedInput;
|
|
36
|
+
private handleListInput;
|
|
37
|
+
private move;
|
|
38
|
+
private current;
|
|
39
|
+
private attach;
|
|
40
|
+
private detach;
|
|
41
|
+
private stop;
|
|
42
|
+
private promptStopReason;
|
|
43
|
+
private handleStopReasonInput;
|
|
44
|
+
private close;
|
|
45
|
+
private renderList;
|
|
46
|
+
private renderAttached;
|
|
47
|
+
private renderLog;
|
|
48
|
+
}
|
|
49
|
+
declare function openRunnerSpace(ctx: ExtensionContext, options: RunnerSpaceOptions): Promise<void>;
|
|
50
|
+
//#endregion
|
|
51
|
+
export { RUNNER_SPACE_OVERLAY_OPTIONS, RunnerSpaceComponent, RunnerSpaceOptions, openRunnerSpace };
|
|
52
|
+
//# sourceMappingURL=runnerSpace.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runnerSpace.d.mts","names":[],"sources":["../../src/tui/runnerSpace.ts"],"mappings":";;;;;;;cAsBa;;;;;;UAYI;EACf,2BAA2B;;EAE3B,YAAY,iBAAiB;EAC7B,UAAU;EACV,aAAa,YAAY,oBAAoB;;cAGlC,6BAA6B;mBAYrB;mBACA;UAZX;UACA;UACA;UACA;UACA;UACA;UACA;EAGN,YAAA,KAAK,gBACL,OAAO,OACU,SAAS,oBACT,OAAO;EAK1B,YAAY;YAgBF,aAAa;YAgCb,WAAW,eAAe;UAO5B;UAQA;UAcA;UAOA;UAKA;UAiBA;UAUA;UAkBA;UAOA;UA2BA;UAKA;UA2BA;UAOA;;iBAUY,gBAAgB,KAAK,kBAAkB,SAAS,qBAAqB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{toRunnerRows as e}from"./format.mjs";import{matchesKey as t,truncateToWidth as n}from"@earendil-works/pi-tui";import{DOOM_FULLSCREEN_UI_OPTIONS as r,DOOM_OVERLAY_ACCENT as i,DoomOverlay as a}from"@agimon-ai/doompi-ui/components/doomOverlay";const o=r.overlayOptions;var s=class extends a{options;done;selected=0;attached;viewedLog;unsubscribe;logRefresh;notice;stopReason;constructor(e,t,n,r){super(e,t),this.options=n,this.done=r}handleInput(e){if(this.stopReason){this.handleStopReasonInput(e);return}if(this.attached){this.handleAttachedInput(e);return}if(this.viewedLog){t(e,`escape`)&&this.detach();return}this.handleListInput(e)}getChrome(){let e=this.options.getRunners();return{title:`RUNNER SPACE`,accent:i,breadcrumb:`SPC › r / runners › r / runner space`,headerRight:this.attached?`attached · ${this.attached.name}`:this.viewedLog?`logs · ${this.viewedLog.name}`:`${e.length} runners · this worktree`,footer:this.attached?`esc back · everything else goes to the runner`:this.viewedLog?`esc back · live stdout/stderr`:`↑↓/jk select · enter open · s stop · r reason · esc close`,footerHints:this.attached||this.viewedLog?void 0:[[`↑↓/jk`,`select`],[`enter`,`open`],[`s`,`stop`],[`r`,`reason`],[`esc`,`close`]],footerRight:this.attached?`live tty`:this.viewedLog?`live log`:e.length>0?`${Math.min(this.selected,e.length-1)+1}/${e.length}`:`empty`}}renderBody(e,t){let r=t=>n(t,e,`…`);return this.attached?this.renderAttached(r,t):this.viewedLog?this.renderLog(r,t):this.renderList(r,t)}handleAttachedInput(e){if(t(e,`escape`)){this.detach();return}this.attached?.write(e)}handleListInput(e){let n=this.options.getRunners();if(t(e,`escape`)||t(e,`ctrl+c`)){this.close();return}t(e,`up`)||e===`k`?this.move(-1,n.length):t(e,`down`)||e===`j`?this.move(1,n.length):e===`\r`||e===`
|
|
2
|
+
`?this.attach(n):e===`s`?this.stop(n):e===`r`&&this.promptStopReason(n)}move(e,t){t!==0&&(this.selected=Math.max(0,Math.min(t-1,this.selected+e)),this.notice=void 0,this.tui.requestRender())}current(e){if(e.length!==0)return e[Math.min(this.selected,e.length-1)]}attach(e){let t=this.current(e);if(!t)return;let n=t.interactive?this.options.getPtyRun(t.name):void 0;this.notice=void 0,n?(this.attached=n,this.unsubscribe=n.onData(()=>this.tui.requestRender())):(this.viewedLog=t,this.logRefresh=setInterval(()=>this.tui.requestRender(!0),250),this.logRefresh.unref?.()),this.tui.requestRender(!0)}detach(){this.unsubscribe?.(),this.unsubscribe=void 0,this.logRefresh&&clearInterval(this.logRefresh),this.logRefresh=void 0,this.attached=void 0,this.viewedLog=void 0,this.tui.requestRender(!0)}stop(e){let t=this.current(e);t&&this.options.stopRunner(t.id).then(()=>{this.notice=`Stopped ${t.name}`,this.tui.requestRender(!0)}).catch(e=>{this.notice=e instanceof Error?e.message:String(e),this.tui.requestRender()})}promptStopReason(e){let t=this.current(e);t&&(this.stopReason={runner:t,text:``},this.tui.requestRender())}handleStopReasonInput(e){let n=this.stopReason;if(n){if(t(e,`escape`)||t(e,`ctrl+c`)){this.stopReason=void 0,this.tui.requestRender();return}if(e===`\r`||e===`
|
|
3
|
+
`){this.stopReason=void 0,this.options.stopRunner(n.runner.id,n.text.trim()||void 0).then(()=>{this.notice=`Stopped ${n.runner.name}`,this.tui.requestRender(!0)}).catch(e=>{this.notice=e instanceof Error?e.message:String(e),this.tui.requestRender()});return}t(e,`backspace`)?n.text=n.text.slice(0,-1):e.includes(`\x1B`)||(n.text+=e),this.tui.requestRender()}}close(){this.detach(),this.done(void 0)}renderList(t,n){let r=this.options.getRunners(),i=e(r,Date.now()),a=[];if(this.stopReason)return[t(`Stop reason for ${this.stopReason.runner.name}: ${this.stopReason.text}`)];if(i.length===0)a.push(t(this.theme.fg(`dim`,`No background runners. bash backgrounds anything that outlives the threshold.`)));else{let e=this.notice?2:0,r=Math.max(1,n-e),o=Math.max(0,i.length-r),s=Math.min(o,Math.max(0,this.selected-r+1));i.slice(s,s+r).forEach((e,n)=>{let r=s+n===Math.min(this.selected,i.length-1)?`›`:` `,o=e.interactive?` [tty]`:``;a.push(t(`${r} ${e.name}${o} ${this.theme.fg(`dim`,e.detail)}`))})}return this.notice&&a.push(``,t(this.theme.fg(`warning`,this.notice))),a.slice(0,n)}renderAttached(e,t){let n=this.attached;return n?n.screen().split(`
|
|
4
|
+
`).slice(-t).map(e):[]}renderLog(e,t){let n=this.viewedLog;if(!n)return[];let r=this.options.readLog(n.logPath);return r?r.split(`
|
|
5
|
+
`).slice(-t).map(e):[e(this.theme.fg(`dim`,`Waiting for output…`))]}};async function c(e,t){await e.ui.custom((e,n,r,i)=>new s(e,n,t,i),r)}export{o as RUNNER_SPACE_OVERLAY_OPTIONS,s as RunnerSpaceComponent,c as openRunnerSpace};
|
|
6
|
+
//# sourceMappingURL=runnerSpace.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runnerSpace.mjs","names":[],"sources":["../../src/tui/runnerSpace.ts"],"sourcesContent":["/**\n * Runner Space: the `SPC r r` overlay.\n *\n * Two modes behind one component. The list shows every runner in this worktree\n * and can stop them; attaching to an interactive runner renders its live\n * terminal and forwards keystrokes to it, which is the whole reason PTY runs\n * exist. Rendering is pure, so the surface can be asserted as text.\n */\n\nimport type { ExtensionContext, Theme } from '@earendil-works/pi-coding-agent';\nimport {\n DOOM_OVERLAY_ACCENT,\n DoomOverlay,\n type DoomOverlayChrome,\n type DoomOverlayTui,\n DOOM_FULLSCREEN_UI_OPTIONS,\n} from '@agimon-ai/doompi-ui/components/doomOverlay';\nimport { matchesKey, truncateToWidth } from '@earendil-works/pi-tui';\nimport type { PtyRun } from '../services/PtyHost/index.ts';\nimport type { RunnerRecord } from '../services/RunnerRegistry/index.ts';\nimport { toRunnerRows } from './format.ts';\n\nexport const RUNNER_SPACE_OVERLAY_OPTIONS = DOOM_FULLSCREEN_UI_OPTIONS.overlayOptions;\n\nconst KEY_ENTER = '\\r';\nconst KEY_NEWLINE = '\\n';\nconst TITLE = 'RUNNER SPACE';\nconst EMPTY_MESSAGE = 'No background runners. bash backgrounds anything that outlives the threshold.';\nconst LIST_FOOTER = '↑↓/jk select · enter open · s stop · r reason · esc close';\nconst ATTACH_FOOTER = 'esc back · everything else goes to the runner';\nconst LOG_FOOTER = 'esc back · live stdout/stderr';\nconst LOG_REFRESH_MS = 250;\nconst ELLIPSIS = '…';\n\nexport interface RunnerSpaceOptions {\n getRunners: () => readonly RunnerRecord[];\n /** The hosted terminal for a runner, when this session owns one. */\n getPtyRun: (name: string) => PtyRun | undefined;\n readLog: (logPath: string) => string;\n stopRunner: (id: string, reason?: string) => Promise<void>;\n}\n\nexport class RunnerSpaceComponent extends DoomOverlay {\n private selected = 0;\n private attached: PtyRun | undefined;\n private viewedLog: RunnerRecord | undefined;\n private unsubscribe: (() => void) | undefined;\n private logRefresh: ReturnType<typeof setInterval> | undefined;\n private notice: string | undefined;\n private stopReason: { runner: RunnerRecord; text: string } | undefined;\n\n constructor(\n tui: DoomOverlayTui,\n theme: Theme,\n private readonly options: RunnerSpaceOptions,\n private readonly done: (result: undefined) => void,\n ) {\n super(tui, theme);\n }\n\n handleInput(data: string): void {\n if (this.stopReason) {\n this.handleStopReasonInput(data);\n return;\n }\n if (this.attached) {\n this.handleAttachedInput(data);\n return;\n }\n if (this.viewedLog) {\n if (matchesKey(data, 'escape')) this.detach();\n return;\n }\n this.handleListInput(data);\n }\n\n protected getChrome(): DoomOverlayChrome {\n const runners = this.options.getRunners();\n return {\n title: TITLE,\n accent: DOOM_OVERLAY_ACCENT,\n breadcrumb: 'SPC › r / runners › r / runner space',\n headerRight: this.attached\n ? `attached · ${this.attached.name}`\n : this.viewedLog\n ? `logs · ${this.viewedLog.name}`\n : `${runners.length} runners · this worktree`,\n footer: this.attached ? ATTACH_FOOTER : this.viewedLog ? LOG_FOOTER : LIST_FOOTER,\n footerHints:\n this.attached || this.viewedLog\n ? undefined\n : [\n ['↑↓/jk', 'select'],\n ['enter', 'open'],\n ['s', 'stop'],\n ['r', 'reason'],\n ['esc', 'close'],\n ],\n footerRight: this.attached\n ? 'live tty'\n : this.viewedLog\n ? 'live log'\n : runners.length > 0\n ? `${Math.min(this.selected, runners.length - 1) + 1}/${runners.length}`\n : 'empty',\n };\n }\n\n protected renderBody(width: number, height: number): string[] {\n const truncate = (line: string): string => truncateToWidth(line, width, ELLIPSIS);\n if (this.attached) return this.renderAttached(truncate, height);\n if (this.viewedLog) return this.renderLog(truncate, height);\n return this.renderList(truncate, height);\n }\n\n private handleAttachedInput(data: string): void {\n if (matchesKey(data, 'escape')) {\n this.detach();\n return;\n }\n this.attached?.write(data);\n }\n\n private handleListInput(data: string): void {\n const runners = this.options.getRunners();\n\n if (matchesKey(data, 'escape') || matchesKey(data, 'ctrl+c')) {\n this.close();\n return;\n }\n if (matchesKey(data, 'up') || data === 'k') this.move(-1, runners.length);\n else if (matchesKey(data, 'down') || data === 'j') this.move(1, runners.length);\n else if (data === KEY_ENTER || data === KEY_NEWLINE) this.attach(runners);\n else if (data === 's') this.stop(runners);\n else if (data === 'r') this.promptStopReason(runners);\n }\n\n private move(delta: number, count: number): void {\n if (count === 0) return;\n this.selected = Math.max(0, Math.min(count - 1, this.selected + delta));\n this.notice = undefined;\n this.tui.requestRender();\n }\n\n private current(runners: readonly RunnerRecord[]): RunnerRecord | undefined {\n if (runners.length === 0) return undefined;\n return runners[Math.min(this.selected, runners.length - 1)];\n }\n\n private attach(runners: readonly RunnerRecord[]): void {\n const record = this.current(runners);\n if (!record) return;\n\n const run = record.interactive ? this.options.getPtyRun(record.name) : undefined;\n this.notice = undefined;\n if (run) {\n this.attached = run;\n this.unsubscribe = run.onData(() => this.tui.requestRender());\n } else {\n this.viewedLog = record;\n this.logRefresh = setInterval(() => this.tui.requestRender(true), LOG_REFRESH_MS);\n this.logRefresh.unref?.();\n }\n this.tui.requestRender(true);\n }\n\n private detach(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n if (this.logRefresh) clearInterval(this.logRefresh);\n this.logRefresh = undefined;\n this.attached = undefined;\n this.viewedLog = undefined;\n this.tui.requestRender(true);\n }\n\n private stop(runners: readonly RunnerRecord[]): void {\n const record = this.current(runners);\n if (!record) return;\n\n this.options\n .stopRunner(record.id)\n .then(() => {\n this.notice = `Stopped ${record.name}`;\n this.tui.requestRender(true);\n })\n .catch((error: unknown) => {\n // Shown rather than swallowed: a failed stop means the process is still\n // running and the operator needs to know.\n this.notice = error instanceof Error ? error.message : String(error);\n this.tui.requestRender();\n });\n }\n\n private promptStopReason(runners: readonly RunnerRecord[]): void {\n const runner = this.current(runners);\n if (!runner) return;\n this.stopReason = { runner, text: '' };\n this.tui.requestRender();\n }\n\n private handleStopReasonInput(data: string): void {\n const prompt = this.stopReason;\n if (!prompt) return;\n if (matchesKey(data, 'escape') || matchesKey(data, 'ctrl+c')) {\n this.stopReason = undefined;\n this.tui.requestRender();\n return;\n }\n if (data === KEY_ENTER || data === KEY_NEWLINE) {\n this.stopReason = undefined;\n this.options\n .stopRunner(prompt.runner.id, prompt.text.trim() || undefined)\n .then(() => {\n this.notice = `Stopped ${prompt.runner.name}`;\n this.tui.requestRender(true);\n })\n .catch((error: unknown) => {\n this.notice = error instanceof Error ? error.message : String(error);\n this.tui.requestRender();\n });\n return;\n }\n if (matchesKey(data, 'backspace')) prompt.text = prompt.text.slice(0, -1);\n else if (!data.includes('\\u001b')) prompt.text += data;\n this.tui.requestRender();\n }\n\n private close(): void {\n this.detach();\n this.done(undefined);\n }\n\n private renderList(truncate: (line: string) => string, height: number): string[] {\n const runners = this.options.getRunners();\n const rows = toRunnerRows(runners, Date.now());\n const lines: string[] = [];\n\n if (this.stopReason) {\n return [truncate(`Stop reason for ${this.stopReason.runner.name}: ${this.stopReason.text}`)];\n }\n\n if (rows.length === 0) lines.push(truncate(this.theme.fg('dim', EMPTY_MESSAGE)));\n else {\n const noticeRows = this.notice ? 2 : 0;\n const capacity = Math.max(1, height - noticeRows);\n const maxStart = Math.max(0, rows.length - capacity);\n const start = Math.min(maxStart, Math.max(0, this.selected - capacity + 1));\n rows.slice(start, start + capacity).forEach((row, offset) => {\n const index = start + offset;\n const marker = index === Math.min(this.selected, rows.length - 1) ? '›' : ' ';\n const tty = row.interactive ? ' [tty]' : '';\n lines.push(truncate(`${marker} ${row.name}${tty} ${this.theme.fg('dim', row.detail)}`));\n });\n }\n\n if (this.notice) lines.push('', truncate(this.theme.fg('warning', this.notice)));\n return lines.slice(0, height);\n }\n\n private renderAttached(truncate: (line: string) => string, height: number): string[] {\n const run = this.attached;\n if (!run) return [];\n\n return run.screen().split('\\n').slice(-height).map(truncate);\n }\n\n private renderLog(truncate: (line: string) => string, height: number): string[] {\n const record = this.viewedLog;\n if (!record) return [];\n\n const text = this.options.readLog(record.logPath);\n if (!text) return [truncate(this.theme.fg('dim', 'Waiting for output…'))];\n return text.split('\\n').slice(-height).map(truncate);\n }\n}\n\nexport async function openRunnerSpace(ctx: ExtensionContext, options: RunnerSpaceOptions): Promise<void> {\n await ctx.ui.custom<undefined>(\n (tui, theme, _keybindings, done) => new RunnerSpaceComponent(tui, theme, options, done),\n DOOM_FULLSCREEN_UI_OPTIONS,\n );\n}\n"],"mappings":"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"}
|
package/dist/types.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e={Clock:Symbol.for(`doom-runner:Clock`),Spawner:Symbol.for(`doom-runner:Spawner`),ProcessControl:Symbol.for(`doom-runner:ProcessControl`),PtySpawner:Symbol.for(`doom-runner:PtySpawner`),ProcessRegistry:Symbol.for(`doom-runner:ProcessRegistry`),RunnerPaths:Symbol.for(`doom-runner:RunnerPaths`),Lifeline:Symbol.for(`doom-runner:Lifeline`),RunnerRegistry:Symbol.for(`doom-runner:RunnerRegistry`),RunnerNamer:Symbol.for(`doom-runner:RunnerNamer`),LogFile:Symbol.for(`doom-runner:LogFile`),LogReader:Symbol.for(`doom-runner:LogReader`),Launcher:Symbol.for(`doom-runner:Launcher`),RmuxBackend:Symbol.for(`doom-runner:RmuxBackend`),PtyHost:Symbol.for(`doom-runner:PtyHost`),BashRunService:Symbol.for(`doom-runner:BashRunService`)};exports.TYPES=e;
|
|
2
|
+
//# sourceMappingURL=types.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.cjs","names":[],"sources":["../src/types.ts"],"sourcesContent":["/**\n * Inversify binding keys.\n *\n * `Symbol.for` is a process-global registry, so every key is namespaced to\n * avoid colliding with the containers of other extensions loaded into the same\n * pi process.\n */\nexport const TYPES = {\n Clock: Symbol.for('doom-runner:Clock'),\n Spawner: Symbol.for('doom-runner:Spawner'),\n ProcessControl: Symbol.for('doom-runner:ProcessControl'),\n PtySpawner: Symbol.for('doom-runner:PtySpawner'),\n ProcessRegistry: Symbol.for('doom-runner:ProcessRegistry'),\n RunnerPaths: Symbol.for('doom-runner:RunnerPaths'),\n Lifeline: Symbol.for('doom-runner:Lifeline'),\n RunnerRegistry: Symbol.for('doom-runner:RunnerRegistry'),\n RunnerNamer: Symbol.for('doom-runner:RunnerNamer'),\n LogFile: Symbol.for('doom-runner:LogFile'),\n LogReader: Symbol.for('doom-runner:LogReader'),\n Launcher: Symbol.for('doom-runner:Launcher'),\n RmuxBackend: Symbol.for('doom-runner:RmuxBackend'),\n PtyHost: Symbol.for('doom-runner:PtyHost'),\n BashRunService: Symbol.for('doom-runner:BashRunService'),\n} as const;\n"],"mappings":"mEAOA,MAAa,EAAQ,CACnB,MAAO,OAAO,IAAI,mBAAmB,EACrC,QAAS,OAAO,IAAI,qBAAqB,EACzC,eAAgB,OAAO,IAAI,4BAA4B,EACvD,WAAY,OAAO,IAAI,wBAAwB,EAC/C,gBAAiB,OAAO,IAAI,6BAA6B,EACzD,YAAa,OAAO,IAAI,yBAAyB,EACjD,SAAU,OAAO,IAAI,sBAAsB,EAC3C,eAAgB,OAAO,IAAI,4BAA4B,EACvD,YAAa,OAAO,IAAI,yBAAyB,EACjD,QAAS,OAAO,IAAI,qBAAqB,EACzC,UAAW,OAAO,IAAI,uBAAuB,EAC7C,SAAU,OAAO,IAAI,sBAAsB,EAC3C,YAAa,OAAO,IAAI,yBAAyB,EACjD,QAAS,OAAO,IAAI,qBAAqB,EACzC,eAAgB,OAAO,IAAI,4BAA4B,CACzD"}
|
package/dist/types.d.cts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//#region src/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Inversify binding keys.
|
|
4
|
+
*
|
|
5
|
+
* `Symbol.for` is a process-global registry, so every key is namespaced to
|
|
6
|
+
* avoid colliding with the containers of other extensions loaded into the same
|
|
7
|
+
* pi process.
|
|
8
|
+
*/
|
|
9
|
+
declare const TYPES: {
|
|
10
|
+
readonly Clock: symbol;
|
|
11
|
+
readonly Spawner: symbol;
|
|
12
|
+
readonly ProcessControl: symbol;
|
|
13
|
+
readonly PtySpawner: symbol;
|
|
14
|
+
readonly ProcessRegistry: symbol;
|
|
15
|
+
readonly RunnerPaths: symbol;
|
|
16
|
+
readonly Lifeline: symbol;
|
|
17
|
+
readonly RunnerRegistry: symbol;
|
|
18
|
+
readonly RunnerNamer: symbol;
|
|
19
|
+
readonly LogFile: symbol;
|
|
20
|
+
readonly LogReader: symbol;
|
|
21
|
+
readonly Launcher: symbol;
|
|
22
|
+
readonly RmuxBackend: symbol;
|
|
23
|
+
readonly PtyHost: symbol;
|
|
24
|
+
readonly BashRunService: symbol;
|
|
25
|
+
};
|
|
26
|
+
//#endregion
|
|
27
|
+
export { TYPES };
|
|
28
|
+
//# sourceMappingURL=types.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.cts","names":[],"sources":["../src/types.ts"],"mappings":";;;;;;;;cAOa"}
|
package/dist/types.d.mts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//#region src/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Inversify binding keys.
|
|
4
|
+
*
|
|
5
|
+
* `Symbol.for` is a process-global registry, so every key is namespaced to
|
|
6
|
+
* avoid colliding with the containers of other extensions loaded into the same
|
|
7
|
+
* pi process.
|
|
8
|
+
*/
|
|
9
|
+
declare const TYPES: {
|
|
10
|
+
readonly Clock: symbol;
|
|
11
|
+
readonly Spawner: symbol;
|
|
12
|
+
readonly ProcessControl: symbol;
|
|
13
|
+
readonly PtySpawner: symbol;
|
|
14
|
+
readonly ProcessRegistry: symbol;
|
|
15
|
+
readonly RunnerPaths: symbol;
|
|
16
|
+
readonly Lifeline: symbol;
|
|
17
|
+
readonly RunnerRegistry: symbol;
|
|
18
|
+
readonly RunnerNamer: symbol;
|
|
19
|
+
readonly LogFile: symbol;
|
|
20
|
+
readonly LogReader: symbol;
|
|
21
|
+
readonly Launcher: symbol;
|
|
22
|
+
readonly RmuxBackend: symbol;
|
|
23
|
+
readonly PtyHost: symbol;
|
|
24
|
+
readonly BashRunService: symbol;
|
|
25
|
+
};
|
|
26
|
+
//#endregion
|
|
27
|
+
export { TYPES };
|
|
28
|
+
//# sourceMappingURL=types.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.mts","names":[],"sources":["../src/types.ts"],"mappings":";;;;;;;;cAOa"}
|
package/dist/types.mjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e={Clock:Symbol.for(`doom-runner:Clock`),Spawner:Symbol.for(`doom-runner:Spawner`),ProcessControl:Symbol.for(`doom-runner:ProcessControl`),PtySpawner:Symbol.for(`doom-runner:PtySpawner`),ProcessRegistry:Symbol.for(`doom-runner:ProcessRegistry`),RunnerPaths:Symbol.for(`doom-runner:RunnerPaths`),Lifeline:Symbol.for(`doom-runner:Lifeline`),RunnerRegistry:Symbol.for(`doom-runner:RunnerRegistry`),RunnerNamer:Symbol.for(`doom-runner:RunnerNamer`),LogFile:Symbol.for(`doom-runner:LogFile`),LogReader:Symbol.for(`doom-runner:LogReader`),Launcher:Symbol.for(`doom-runner:Launcher`),RmuxBackend:Symbol.for(`doom-runner:RmuxBackend`),PtyHost:Symbol.for(`doom-runner:PtyHost`),BashRunService:Symbol.for(`doom-runner:BashRunService`)};export{e as TYPES};
|
|
2
|
+
//# sourceMappingURL=types.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.mjs","names":[],"sources":["../src/types.ts"],"sourcesContent":["/**\n * Inversify binding keys.\n *\n * `Symbol.for` is a process-global registry, so every key is namespaced to\n * avoid colliding with the containers of other extensions loaded into the same\n * pi process.\n */\nexport const TYPES = {\n Clock: Symbol.for('doom-runner:Clock'),\n Spawner: Symbol.for('doom-runner:Spawner'),\n ProcessControl: Symbol.for('doom-runner:ProcessControl'),\n PtySpawner: Symbol.for('doom-runner:PtySpawner'),\n ProcessRegistry: Symbol.for('doom-runner:ProcessRegistry'),\n RunnerPaths: Symbol.for('doom-runner:RunnerPaths'),\n Lifeline: Symbol.for('doom-runner:Lifeline'),\n RunnerRegistry: Symbol.for('doom-runner:RunnerRegistry'),\n RunnerNamer: Symbol.for('doom-runner:RunnerNamer'),\n LogFile: Symbol.for('doom-runner:LogFile'),\n LogReader: Symbol.for('doom-runner:LogReader'),\n Launcher: Symbol.for('doom-runner:Launcher'),\n RmuxBackend: Symbol.for('doom-runner:RmuxBackend'),\n PtyHost: Symbol.for('doom-runner:PtyHost'),\n BashRunService: Symbol.for('doom-runner:BashRunService'),\n} as const;\n"],"mappings":"AAOA,MAAa,EAAQ,CACnB,MAAO,OAAO,IAAI,mBAAmB,EACrC,QAAS,OAAO,IAAI,qBAAqB,EACzC,eAAgB,OAAO,IAAI,4BAA4B,EACvD,WAAY,OAAO,IAAI,wBAAwB,EAC/C,gBAAiB,OAAO,IAAI,6BAA6B,EACzD,YAAa,OAAO,IAAI,yBAAyB,EACjD,SAAU,OAAO,IAAI,sBAAsB,EAC3C,eAAgB,OAAO,IAAI,4BAA4B,EACvD,YAAa,OAAO,IAAI,yBAAyB,EACjD,QAAS,OAAO,IAAI,qBAAqB,EACzC,UAAW,OAAO,IAAI,uBAAuB,EAC7C,SAAU,OAAO,IAAI,sBAAsB,EAC3C,YAAa,OAAO,IAAI,yBAAyB,EACjD,QAAS,OAAO,IAAI,qBAAqB,EACzC,eAAgB,OAAO,IAAI,4BAA4B,CACzD"}
|