charness 3.7.0 → 3.8.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/CHANGELOG.md +30 -0
- package/DEVELOPMENT.md +6 -2
- package/README.md +5 -5
- package/SETUP.md +16 -5
- package/agent-plugin/skills/charness-manager/SKILL.md +3 -3
- package/dist/adapters/openCodeAdapter.d.ts.map +1 -1
- package/dist/adapters/openCodeAdapter.js +2 -1
- package/dist/adapters/openCodeAdapter.js.map +1 -1
- package/dist/bot.d.ts.map +1 -1
- package/dist/bot.js +50 -9
- package/dist/bot.js.map +1 -1
- package/dist/cli.js +44 -1
- package/dist/cli.js.map +1 -1
- package/dist/configDirFile.d.ts +7 -3
- package/dist/configDirFile.d.ts.map +1 -1
- package/dist/configDirFile.js +12 -5
- package/dist/configDirFile.js.map +1 -1
- package/dist/connectors/telegram/commands/botCore.d.ts +5 -1
- package/dist/connectors/telegram/commands/botCore.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/runners.d.ts +52 -0
- package/dist/connectors/telegram/commands/runners.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/runners.js +486 -0
- package/dist/connectors/telegram/commands/runners.js.map +1 -0
- package/dist/connectors/telegram/runnerPairingMessages.d.ts +27 -0
- package/dist/connectors/telegram/runnerPairingMessages.d.ts.map +1 -0
- package/dist/connectors/telegram/runnerPairingMessages.js +105 -0
- package/dist/connectors/telegram/runnerPairingMessages.js.map +1 -0
- package/dist/i18n/de.d.ts.map +1 -1
- package/dist/i18n/de.js +58 -0
- package/dist/i18n/de.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +58 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/es.d.ts.map +1 -1
- package/dist/i18n/es.js +58 -0
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/fr.d.ts.map +1 -1
- package/dist/i18n/fr.js +58 -0
- package/dist/i18n/fr.js.map +1 -1
- package/dist/i18n/hi.d.ts.map +1 -1
- package/dist/i18n/hi.js +58 -0
- package/dist/i18n/hi.js.map +1 -1
- package/dist/i18n/ja.d.ts.map +1 -1
- package/dist/i18n/ja.js +58 -0
- package/dist/i18n/ja.js.map +1 -1
- package/dist/i18n/ka.d.ts.map +1 -1
- package/dist/i18n/ka.js +58 -0
- package/dist/i18n/ka.js.map +1 -1
- package/dist/i18n/pt.d.ts.map +1 -1
- package/dist/i18n/pt.js +58 -0
- package/dist/i18n/pt.js.map +1 -1
- package/dist/i18n/ru.d.ts.map +1 -1
- package/dist/i18n/ru.js +58 -0
- package/dist/i18n/ru.js.map +1 -1
- package/dist/i18n/uk.d.ts.map +1 -1
- package/dist/i18n/uk.js +58 -0
- package/dist/i18n/uk.js.map +1 -1
- package/dist/i18n/uz.d.ts.map +1 -1
- package/dist/i18n/uz.js +58 -0
- package/dist/i18n/uz.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +58 -0
- package/dist/i18n/zh.js.map +1 -1
- package/dist/installManager.d.ts +57 -1
- package/dist/installManager.d.ts.map +1 -1
- package/dist/installManager.js +88 -10
- package/dist/installManager.js.map +1 -1
- package/dist/instanceSettings.d.ts +12 -2
- package/dist/instanceSettings.d.ts.map +1 -1
- package/dist/instanceSettings.js +17 -3
- package/dist/instanceSettings.js.map +1 -1
- package/dist/outputTrace.d.ts +6 -0
- package/dist/outputTrace.d.ts.map +1 -1
- package/dist/outputTrace.js +24 -1
- package/dist/outputTrace.js.map +1 -1
- package/dist/remoteRun/cliArgs.d.ts +2 -0
- package/dist/remoteRun/cliArgs.d.ts.map +1 -1
- package/dist/remoteRun/cliArgs.js +11 -2
- package/dist/remoteRun/cliArgs.js.map +1 -1
- package/dist/remoteRun/commands.d.ts +21 -0
- package/dist/remoteRun/commands.d.ts.map +1 -1
- package/dist/remoteRun/commands.js +38 -17
- package/dist/remoteRun/commands.js.map +1 -1
- package/dist/remoteRun/interrupts.d.ts +10 -0
- package/dist/remoteRun/interrupts.d.ts.map +1 -1
- package/dist/remoteRun/interrupts.js +43 -6
- package/dist/remoteRun/interrupts.js.map +1 -1
- package/dist/remoteRun/output.d.ts +2 -0
- package/dist/remoteRun/output.d.ts.map +1 -1
- package/dist/remoteRun/output.js +45 -0
- package/dist/remoteRun/output.js.map +1 -1
- package/dist/remoteRun/pairedRunners.d.ts +51 -0
- package/dist/remoteRun/pairedRunners.d.ts.map +1 -0
- package/dist/remoteRun/pairedRunners.js +165 -0
- package/dist/remoteRun/pairedRunners.js.map +1 -0
- package/dist/remoteRun/probe.d.ts +23 -1
- package/dist/remoteRun/probe.d.ts.map +1 -1
- package/dist/remoteRun/probe.js +45 -11
- package/dist/remoteRun/probe.js.map +1 -1
- package/dist/remoteRun/remoteRunCli.d.ts +13 -6
- package/dist/remoteRun/remoteRunCli.d.ts.map +1 -1
- package/dist/remoteRun/remoteRunCli.js +34 -59
- package/dist/remoteRun/remoteRunCli.js.map +1 -1
- package/dist/remoteRun/runnerClient.d.ts +2 -0
- package/dist/remoteRun/runnerClient.d.ts.map +1 -1
- package/dist/remoteRun/runnerClient.js +5 -1
- package/dist/remoteRun/runnerClient.js.map +1 -1
- package/dist/remoteRun/runnerSummary.d.ts +24 -0
- package/dist/remoteRun/runnerSummary.d.ts.map +1 -0
- package/dist/remoteRun/runnerSummary.js +86 -0
- package/dist/remoteRun/runnerSummary.js.map +1 -0
- package/dist/remoteRun/runnerWait.d.ts +68 -0
- package/dist/remoteRun/runnerWait.d.ts.map +1 -0
- package/dist/remoteRun/runnerWait.js +137 -0
- package/dist/remoteRun/runnerWait.js.map +1 -0
- package/dist/remoteRun/runnerWaitTiming.d.ts +16 -0
- package/dist/remoteRun/runnerWaitTiming.d.ts.map +1 -0
- package/dist/remoteRun/runnerWaitTiming.js +37 -0
- package/dist/remoteRun/runnerWaitTiming.js.map +1 -0
- package/dist/remoteRun/runners.d.ts +7 -7
- package/dist/remoteRun/runners.d.ts.map +1 -1
- package/dist/remoteRun/runners.js +45 -17
- package/dist/remoteRun/runners.js.map +1 -1
- package/dist/remoteRun/runnersCatalog.d.ts +14 -0
- package/dist/remoteRun/runnersCatalog.d.ts.map +1 -0
- package/dist/remoteRun/runnersCatalog.js +68 -0
- package/dist/remoteRun/runnersCatalog.js.map +1 -0
- package/dist/remoteRun/runnersConfig.d.ts +29 -20
- package/dist/remoteRun/runnersConfig.d.ts.map +1 -1
- package/dist/remoteRun/runnersConfig.js +14 -12
- package/dist/remoteRun/runnersConfig.js.map +1 -1
- package/dist/remoteRun/ssh.d.ts +22 -2
- package/dist/remoteRun/ssh.d.ts.map +1 -1
- package/dist/remoteRun/ssh.js +41 -7
- package/dist/remoteRun/ssh.js.map +1 -1
- package/dist/runnerUtility/adminCheck.d.ts +11 -0
- package/dist/runnerUtility/adminCheck.d.ts.map +1 -0
- package/dist/runnerUtility/adminCheck.js +68 -0
- package/dist/runnerUtility/adminCheck.js.map +1 -0
- package/dist/runnerUtility/appInstall.d.ts +25 -0
- package/dist/runnerUtility/appInstall.d.ts.map +1 -0
- package/dist/runnerUtility/appInstall.js +147 -0
- package/dist/runnerUtility/appInstall.js.map +1 -0
- package/dist/runnerUtility/appUpdate.d.ts +39 -0
- package/dist/runnerUtility/appUpdate.d.ts.map +1 -0
- package/dist/runnerUtility/appUpdate.js +90 -0
- package/dist/runnerUtility/appUpdate.js.map +1 -0
- package/dist/runnerUtility/execEnv.d.ts +21 -0
- package/dist/runnerUtility/execEnv.d.ts.map +1 -0
- package/dist/runnerUtility/execEnv.js +109 -0
- package/dist/runnerUtility/execEnv.js.map +1 -0
- package/dist/runnerUtility/execSession.d.ts +13 -0
- package/dist/runnerUtility/execSession.d.ts.map +1 -0
- package/dist/runnerUtility/execSession.js +58 -0
- package/dist/runnerUtility/execSession.js.map +1 -0
- package/dist/runnerUtility/hubClient.d.ts +30 -0
- package/dist/runnerUtility/hubClient.d.ts.map +1 -0
- package/dist/runnerUtility/hubClient.js +127 -0
- package/dist/runnerUtility/hubClient.js.map +1 -0
- package/dist/runnerUtility/injectStream.d.ts +9 -0
- package/dist/runnerUtility/injectStream.d.ts.map +1 -0
- package/dist/runnerUtility/injectStream.js +12 -0
- package/dist/runnerUtility/injectStream.js.map +1 -0
- package/dist/runnerUtility/iosCheck.d.ts +62 -0
- package/dist/runnerUtility/iosCheck.d.ts.map +1 -0
- package/dist/runnerUtility/iosCheck.js +200 -0
- package/dist/runnerUtility/iosCheck.js.map +1 -0
- package/dist/runnerUtility/launcher.d.ts +5 -0
- package/dist/runnerUtility/launcher.d.ts.map +1 -0
- package/dist/runnerUtility/launcher.js +85 -0
- package/dist/runnerUtility/launcher.js.map +1 -0
- package/dist/runnerUtility/linkLoop.d.ts +47 -0
- package/dist/runnerUtility/linkLoop.d.ts.map +1 -0
- package/dist/runnerUtility/linkLoop.js +281 -0
- package/dist/runnerUtility/linkLoop.js.map +1 -0
- package/dist/runnerUtility/localLinkStop.d.ts +23 -0
- package/dist/runnerUtility/localLinkStop.d.ts.map +1 -0
- package/dist/runnerUtility/localLinkStop.js +79 -0
- package/dist/runnerUtility/localLinkStop.js.map +1 -0
- package/dist/runnerUtility/machineReport.d.ts +39 -0
- package/dist/runnerUtility/machineReport.d.ts.map +1 -0
- package/dist/runnerUtility/machineReport.js +161 -0
- package/dist/runnerUtility/machineReport.js.map +1 -0
- package/dist/runnerUtility/packageId.d.ts +5 -0
- package/dist/runnerUtility/packageId.d.ts.map +1 -0
- package/dist/runnerUtility/packageId.js +64 -0
- package/dist/runnerUtility/packageId.js.map +1 -0
- package/dist/runnerUtility/pairingRecovery.d.ts +31 -0
- package/dist/runnerUtility/pairingRecovery.d.ts.map +1 -0
- package/dist/runnerUtility/pairingRecovery.js +24 -0
- package/dist/runnerUtility/pairingRecovery.js.map +1 -0
- package/dist/runnerUtility/pueueDaemon.d.ts +36 -0
- package/dist/runnerUtility/pueueDaemon.d.ts.map +1 -0
- package/dist/runnerUtility/pueueDaemon.js +165 -0
- package/dist/runnerUtility/pueueDaemon.js.map +1 -0
- package/dist/runnerUtility/runnerCli.d.ts +18 -0
- package/dist/runnerUtility/runnerCli.d.ts.map +1 -0
- package/dist/runnerUtility/runnerCli.js +184 -0
- package/dist/runnerUtility/runnerCli.js.map +1 -0
- package/dist/runnerUtility/runnerCommands.d.ts +67 -0
- package/dist/runnerUtility/runnerCommands.d.ts.map +1 -0
- package/dist/runnerUtility/runnerCommands.js +418 -0
- package/dist/runnerUtility/runnerCommands.js.map +1 -0
- package/dist/runnerUtility/runnerConfig.d.ts +63 -0
- package/dist/runnerUtility/runnerConfig.d.ts.map +1 -0
- package/dist/runnerUtility/runnerConfig.js +153 -0
- package/dist/runnerUtility/runnerConfig.js.map +1 -0
- package/dist/runnerUtility/runnerFlags.d.ts +9 -0
- package/dist/runnerUtility/runnerFlags.d.ts.map +1 -0
- package/dist/runnerUtility/runnerFlags.js +53 -0
- package/dist/runnerUtility/runnerFlags.js.map +1 -0
- package/dist/runnerUtility/runnerHome.d.ts +30 -0
- package/dist/runnerUtility/runnerHome.d.ts.map +1 -0
- package/dist/runnerUtility/runnerHome.js +82 -0
- package/dist/runnerUtility/runnerHome.js.map +1 -0
- package/dist/runnerUtility/runnerKeys.d.ts +11 -0
- package/dist/runnerUtility/runnerKeys.d.ts.map +1 -0
- package/dist/runnerUtility/runnerKeys.js +80 -0
- package/dist/runnerUtility/runnerKeys.js.map +1 -0
- package/dist/runnerUtility/runnerServers.d.ts +40 -0
- package/dist/runnerUtility/runnerServers.d.ts.map +1 -0
- package/dist/runnerUtility/runnerServers.js +79 -0
- package/dist/runnerUtility/runnerServers.js.map +1 -0
- package/dist/runnerUtility/serviceManager.d.ts +54 -0
- package/dist/runnerUtility/serviceManager.d.ts.map +1 -0
- package/dist/runnerUtility/serviceManager.js +413 -0
- package/dist/runnerUtility/serviceManager.js.map +1 -0
- package/dist/runnerUtility/serviceUnits.d.ts +36 -0
- package/dist/runnerUtility/serviceUnits.d.ts.map +1 -0
- package/dist/runnerUtility/serviceUnits.js +169 -0
- package/dist/runnerUtility/serviceUnits.js.map +1 -0
- package/dist/runnerUtility/toolInstall.d.ts +95 -0
- package/dist/runnerUtility/toolInstall.d.ts.map +1 -0
- package/dist/runnerUtility/toolInstall.js +232 -0
- package/dist/runnerUtility/toolInstall.js.map +1 -0
- package/dist/runnerUtility/versionPollTiming.d.ts +16 -0
- package/dist/runnerUtility/versionPollTiming.d.ts.map +1 -0
- package/dist/runnerUtility/versionPollTiming.js +36 -0
- package/dist/runnerUtility/versionPollTiming.js.map +1 -0
- package/dist/runners/authorizedKeys.d.ts +52 -0
- package/dist/runners/authorizedKeys.d.ts.map +1 -0
- package/dist/runners/authorizedKeys.js +153 -0
- package/dist/runners/authorizedKeys.js.map +1 -0
- package/dist/runners/bootstrapLine.d.ts +4 -0
- package/dist/runners/bootstrapLine.d.ts.map +1 -0
- package/dist/runners/bootstrapLine.js +69 -0
- package/dist/runners/bootstrapLine.js.map +1 -0
- package/dist/runners/gate.d.ts +41 -0
- package/dist/runners/gate.d.ts.map +1 -0
- package/dist/runners/gate.js +216 -0
- package/dist/runners/gate.js.map +1 -0
- package/dist/runners/gateLink.d.ts +26 -0
- package/dist/runners/gateLink.d.ts.map +1 -0
- package/dist/runners/gateLink.js +240 -0
- package/dist/runners/gateLink.js.map +1 -0
- package/dist/runners/gateProtocol.d.ts +98 -0
- package/dist/runners/gateProtocol.d.ts.map +1 -0
- package/dist/runners/gateProtocol.js +149 -0
- package/dist/runners/gateProtocol.js.map +1 -0
- package/dist/runners/gateWrapper.d.ts +6 -0
- package/dist/runners/gateWrapper.d.ts.map +1 -0
- package/dist/runners/gateWrapper.js +70 -0
- package/dist/runners/gateWrapper.js.map +1 -0
- package/dist/runners/hubAddress.d.ts +33 -0
- package/dist/runners/hubAddress.d.ts.map +1 -0
- package/dist/runners/hubAddress.js +88 -0
- package/dist/runners/hubAddress.js.map +1 -0
- package/dist/runners/hubAddressCandidates.d.ts +16 -0
- package/dist/runners/hubAddressCandidates.d.ts.map +1 -0
- package/dist/runners/hubAddressCandidates.js +96 -0
- package/dist/runners/hubAddressCandidates.js.map +1 -0
- package/dist/runners/hubIds.d.ts +16 -0
- package/dist/runners/hubIds.d.ts.map +1 -0
- package/dist/runners/hubIds.js +25 -0
- package/dist/runners/hubIds.js.map +1 -0
- package/dist/runners/hubKey.d.ts +6 -0
- package/dist/runners/hubKey.d.ts.map +1 -0
- package/dist/runners/hubKey.js +78 -0
- package/dist/runners/hubKey.js.map +1 -0
- package/dist/runners/hubLock.d.ts +7 -0
- package/dist/runners/hubLock.d.ts.map +1 -0
- package/dist/runners/hubLock.js +230 -0
- package/dist/runners/hubLock.js.map +1 -0
- package/dist/runners/hubPackage.d.ts +23 -0
- package/dist/runners/hubPackage.d.ts.map +1 -0
- package/dist/runners/hubPackage.js +184 -0
- package/dist/runners/hubPackage.js.map +1 -0
- package/dist/runners/hubPairing.d.ts +63 -0
- package/dist/runners/hubPairing.d.ts.map +1 -0
- package/dist/runners/hubPairing.js +261 -0
- package/dist/runners/hubPairing.js.map +1 -0
- package/dist/runners/hubPaths.d.ts +38 -0
- package/dist/runners/hubPaths.d.ts.map +1 -0
- package/dist/runners/hubPaths.js +94 -0
- package/dist/runners/hubPaths.js.map +1 -0
- package/dist/runners/hubRegistry.d.ts +112 -0
- package/dist/runners/hubRegistry.d.ts.map +1 -0
- package/dist/runners/hubRegistry.js +210 -0
- package/dist/runners/hubRegistry.js.map +1 -0
- package/dist/runners/linkControl.d.ts +27 -0
- package/dist/runners/linkControl.d.ts.map +1 -0
- package/dist/runners/linkControl.js +124 -0
- package/dist/runners/linkControl.js.map +1 -0
- package/dist/runners/pairCode.d.ts +30 -0
- package/dist/runners/pairCode.d.ts.map +1 -0
- package/dist/runners/pairCode.js +46 -0
- package/dist/runners/pairCode.js.map +1 -0
- package/dist/runners/pairingTiming.d.ts +18 -0
- package/dist/runners/pairingTiming.d.ts.map +1 -0
- package/dist/runners/pairingTiming.js +42 -0
- package/dist/runners/pairingTiming.js.map +1 -0
- package/dist/runners/runnerProxy.d.ts +9 -0
- package/dist/runners/runnerProxy.d.ts.map +1 -0
- package/dist/runners/runnerProxy.js +67 -0
- package/dist/runners/runnerProxy.js.map +1 -0
- package/dist/runners/runnerRemoval.d.ts +21 -0
- package/dist/runners/runnerRemoval.d.ts.map +1 -0
- package/dist/runners/runnerRemoval.js +82 -0
- package/dist/runners/runnerRemoval.js.map +1 -0
- package/dist/runners/runnersCli.d.ts +16 -0
- package/dist/runners/runnersCli.d.ts.map +1 -0
- package/dist/runners/runnersCli.js +214 -0
- package/dist/runners/runnersCli.js.map +1 -0
- package/dist/runners/runnersList.d.ts +17 -0
- package/dist/runners/runnersList.d.ts.map +1 -0
- package/dist/runners/runnersList.js +49 -0
- package/dist/runners/runnersList.js.map +1 -0
- package/dist/runners/runnersOverview.d.ts +20 -0
- package/dist/runners/runnersOverview.d.ts.map +1 -0
- package/dist/runners/runnersOverview.js +55 -0
- package/dist/runners/runnersOverview.js.map +1 -0
- package/dist/runners/sshKeys.d.ts +26 -0
- package/dist/runners/sshKeys.d.ts.map +1 -0
- package/dist/runners/sshKeys.js +60 -0
- package/dist/runners/sshKeys.js.map +1 -0
- package/dist/runners/tarArchive.d.ts +20 -0
- package/dist/runners/tarArchive.d.ts.map +1 -0
- package/dist/runners/tarArchive.js +70 -0
- package/dist/runners/tarArchive.js.map +1 -0
- package/dist/scheduler/mcpSurface.d.ts +11 -5
- package/dist/scheduler/mcpSurface.d.ts.map +1 -1
- package/dist/scheduler/mcpSurface.js +59 -26
- package/dist/scheduler/mcpSurface.js.map +1 -1
- package/dist/selfUpdate/selfCheck.js +2 -2
- package/dist/selfUpdate/selfCheck.js.map +1 -1
- package/dist/testTimings.d.ts +5 -2
- package/dist/testTimings.d.ts.map +1 -1
- package/dist/testTimings.js +10 -1
- package/dist/testTimings.js.map +1 -1
- package/dist/utils/agentEnvironment.d.ts +6 -2
- package/dist/utils/agentEnvironment.d.ts.map +1 -1
- package/dist/utils/agentEnvironment.js +13 -2
- package/dist/utils/agentEnvironment.js.map +1 -1
- package/dist/utils/runnersScreenPlan.d.ts +130 -0
- package/dist/utils/runnersScreenPlan.d.ts.map +1 -0
- package/dist/utils/runnersScreenPlan.js +257 -0
- package/dist/utils/runnersScreenPlan.js.map +1 -0
- package/package.json +5 -2
- package/remoteRun/runner.sh +81 -6
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.PairedRunnerSetupError = void 0;
|
|
37
|
+
exports.buildPairedSshOptions = buildPairedSshOptions;
|
|
38
|
+
exports.getPairedRunnerPueue = getPairedRunnerPueue;
|
|
39
|
+
exports.buildPairedRunnerConfig = buildPairedRunnerConfig;
|
|
40
|
+
exports.loadPairedRunners = loadPairedRunners;
|
|
41
|
+
exports.resetPairedRunnersCache = resetPairedRunnersCache;
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const configDirFile_1 = require("../configDirFile");
|
|
44
|
+
const runnerHome_1 = require("../runnerUtility/runnerHome");
|
|
45
|
+
const hubPaths_1 = require("../runners/hubPaths");
|
|
46
|
+
const hubRegistry_1 = require("../runners/hubRegistry");
|
|
47
|
+
const ssh_1 = require("./ssh");
|
|
48
|
+
/**
|
|
49
|
+
* @description Paired runners as `remote-run` sees them: the same `RunnerConfig` an entry of `runners.json` gives, built from the hub's
|
|
50
|
+
* registry (`paired.json`, `src/runners/`), so everything above the ssh layer — the script upload, rsync, Pueue, the lease — is phase 1
|
|
51
|
+
* unchanged. Only the way ssh reaches the machine differs: no host and port, but a `ProxyCommand` that joins ssh to the unix socket of
|
|
52
|
+
* the runner's link (`charness runner-proxy`), the runner's host key pinned under an alias from the hub's own `known_hosts`, and the
|
|
53
|
+
* hub's key. Nothing here talks to the network or to the runner; whether the link is up is `linkControl.ts`'s question.
|
|
54
|
+
*/
|
|
55
|
+
/** @description A path this machine's registry or program lives in cannot be put on an ssh command line; the runner stays out of the catalog, with the reason. */
|
|
56
|
+
class PairedRunnerSetupError extends Error {
|
|
57
|
+
constructor(message) {
|
|
58
|
+
super(message);
|
|
59
|
+
this.name = 'PairedRunnerSetupError';
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.PairedRunnerSetupError = PairedRunnerSetupError;
|
|
63
|
+
/** @description `value` as an ssh path, or a {@link PairedRunnerSetupError} naming what it is the path of. */
|
|
64
|
+
function getUsableSshPath(value, what) {
|
|
65
|
+
if (!(0, ssh_1.checkIsSshPathQuotable)(value))
|
|
66
|
+
throw new PairedRunnerSetupError(`the path of ${what} holds a quote, a backslash, a $ or a line break, which ssh cannot be given safely`);
|
|
67
|
+
return value;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* One word of the `ProxyCommand` (run by the user's shell): plain words stay as they are, anything else is double-quoted. No single quote
|
|
71
|
+
* ever appears in the result — `buildRsyncSshCommand` wraps the whole option in single quotes for rsync's `-e`, whose parser has no way to
|
|
72
|
+
* nest them.
|
|
73
|
+
*/
|
|
74
|
+
function quoteProxyWord(word, what) {
|
|
75
|
+
return (0, ssh_1.checkIsPlainShellWord)(getUsableSshPath(word, what)) ? word : `"${word}"`;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* @description The ssh options of every call to a paired runner (the operator's `-F /dev/null` stands in for a config file: the machine's
|
|
79
|
+
* own ssh config must not change how the link is reached). The host key is checked strictly against the one the runner gave at pairing.
|
|
80
|
+
*/
|
|
81
|
+
function buildPairedSshOptions(input) {
|
|
82
|
+
const files = (0, hubPaths_1.getHubFilePaths)(input.hubDir);
|
|
83
|
+
const socketPath = (0, hubPaths_1.getRunnerLinkPaths)(input.hubDir, input.runnerId).socket;
|
|
84
|
+
const proxyCommand = [quoteProxyWord(input.nodePath, 'node'), quoteProxyWord(input.cliPath, 'the charness cli'), 'runner-proxy', quoteProxyWord(socketPath, 'the runner link')].join(' ');
|
|
85
|
+
return [
|
|
86
|
+
'-F', '/dev/null',
|
|
87
|
+
'-o', `ProxyCommand=${(0, ssh_1.escapeSshTokens)(proxyCommand)}`,
|
|
88
|
+
'-o', `HostKeyAlias=${(0, hubPaths_1.getRunnerHostAlias)(input.runnerId)}`,
|
|
89
|
+
'-o', `UserKnownHostsFile=${(0, ssh_1.quoteSshOptionPath)((0, ssh_1.escapeSshTokens)(getUsableSshPath(files.knownHosts, 'the hub known_hosts')))}`,
|
|
90
|
+
'-o', 'GlobalKnownHostsFile=/dev/null',
|
|
91
|
+
'-o', 'StrictHostKeyChecking=yes',
|
|
92
|
+
'-i', (0, ssh_1.escapeSshTokens)(getUsableSshPath(files.hubKey, 'the hub key')),
|
|
93
|
+
'-o', 'IdentitiesOnly=yes',
|
|
94
|
+
'-o', 'IdentityAgent=none',
|
|
95
|
+
'-o', 'LogLevel=ERROR',
|
|
96
|
+
];
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* @description Where the runner's Pueue lives, from the work dir it reported: the runner utility keeps `work/`, `bin/` and `pueue/` side by
|
|
100
|
+
* side in `~/.charness-runner/` (`runnerHome.ts` is the one place that layout is written down). A work dir that does not follow it gives
|
|
101
|
+
* `undefined` — the runner script then finds Pueue on the `PATH` as for any hand-made runner.
|
|
102
|
+
*/
|
|
103
|
+
function getPairedRunnerPueue(workDir) {
|
|
104
|
+
const stateRoot = path.posix.dirname(workDir);
|
|
105
|
+
const homeDir = path.posix.dirname(stateRoot);
|
|
106
|
+
const paths = (0, runnerHome_1.getRunnerHomePaths)(homeDir);
|
|
107
|
+
if (paths.workDir !== workDir)
|
|
108
|
+
return undefined;
|
|
109
|
+
return { bin: path.posix.join(paths.binDir, 'pueue'), config: paths.pueueConfig };
|
|
110
|
+
}
|
|
111
|
+
/** @description The `RunnerConfig` of one registry entry. Throws a {@link PairedRunnerSetupError} when the paths of this machine cannot be put on an ssh command line. */
|
|
112
|
+
function buildPairedRunnerConfig(runner, hub) {
|
|
113
|
+
const link = { runnerId: runner.id, hubDir: hub.hubDir, isPausedByHub: runner.isPaused, os: runner.os };
|
|
114
|
+
return {
|
|
115
|
+
name: runner.name,
|
|
116
|
+
ssh: (0, hubPaths_1.getRunnerHostAlias)(runner.id),
|
|
117
|
+
sshOptions: buildPairedSshOptions({ runnerId: runner.id, nodePath: hub.nodePath, cliPath: hub.cliPath, hubDir: hub.hubDir }),
|
|
118
|
+
workDir: runner.workDir,
|
|
119
|
+
pueue: getPairedRunnerPueue(runner.workDir),
|
|
120
|
+
paired: link,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
const pairedFileLoader = (0, configDirFile_1.createConfigFileLoader)({
|
|
124
|
+
fileName: 'paired.json',
|
|
125
|
+
createEmpty: () => ({ rev: 0, runners: [] }),
|
|
126
|
+
validate: (parsedJson) => {
|
|
127
|
+
const parsed = hubRegistry_1.pairedFileSchema.safeParse(parsedJson);
|
|
128
|
+
if (parsed.success)
|
|
129
|
+
return { ok: true, config: parsed.data };
|
|
130
|
+
return { ok: false, errors: parsed.error.issues.map((issue) => `paired.json ${issue.path.join('.') || '(root)'}: ${issue.message}`) };
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
function buildRunners(file, hub) {
|
|
134
|
+
const runners = [];
|
|
135
|
+
const errors = [];
|
|
136
|
+
for (const entry of file.runners) {
|
|
137
|
+
try {
|
|
138
|
+
runners.push(buildPairedRunnerConfig(entry, hub));
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
if (!(error instanceof PairedRunnerSetupError))
|
|
142
|
+
throw error;
|
|
143
|
+
errors.push(`paired runner "${entry.name}": ${error.message}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return { runners, errors };
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* @description The paired runners of the user whose home is `homeDir`, from `paired.json` (stamp-cached like `runners.json`: the bot MCP
|
|
150
|
+
* asks on every connect). Missing = none paired; invalid = its errors and the last good list of this process, if any.
|
|
151
|
+
*/
|
|
152
|
+
function loadPairedRunners(homeDir) {
|
|
153
|
+
const context = (0, hubPaths_1.createHubContext)({ homeDir });
|
|
154
|
+
const hub = { hubDir: context.dir, nodePath: context.nodePath, cliPath: context.cliPath };
|
|
155
|
+
const load = pairedFileLoader.load((0, hubPaths_1.getHubFilePaths)(context.dir).paired);
|
|
156
|
+
if (load.status === 'invalid')
|
|
157
|
+
return { status: 'invalid', config: load.config === null ? null : buildRunners(load.config, hub), errors: load.errors };
|
|
158
|
+
const built = buildRunners(load.config, hub);
|
|
159
|
+
return built.errors.length === 0 ? { status: load.status, config: built } : { status: 'invalid', config: built, errors: built.errors };
|
|
160
|
+
}
|
|
161
|
+
/** @description Forget the cached loads (tests that swap files under one path). */
|
|
162
|
+
function resetPairedRunnersCache() {
|
|
163
|
+
pairedFileLoader.resetCache();
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=pairedRunners.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pairedRunners.js","sourceRoot":"","sources":["../../src/remoteRun/pairedRunners.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type RunnerServiceKind } from '../runners/hubRegistry';
|
|
1
2
|
/**
|
|
2
3
|
* @description What a runner says about itself (`runner.sh probe`), parsed, and the short block `remote-run runners` prints for it.
|
|
3
4
|
* The runner prints `key=value` lines; an unknown key is ignored (a newer runner script, an older main box) and a missing one is
|
|
@@ -10,6 +11,9 @@ export interface CapabilityReport {
|
|
|
10
11
|
isAvailable: boolean;
|
|
11
12
|
detail: string;
|
|
12
13
|
}
|
|
14
|
+
/** What the runner's own iOS Simulator boot check found (`ios-check.json`, written by the runner utility's service): it booted one, it could not, or nothing has run the check. */
|
|
15
|
+
export declare const iosBootStatuses: readonly ["ok", "failed", "unchecked"];
|
|
16
|
+
export type IosBootStatus = (typeof iosBootStatuses)[number];
|
|
13
17
|
/** @name RunnerProbe @description The facts of one probe. Numbers are `null` when the runner did not report them. */
|
|
14
18
|
export interface RunnerProbe {
|
|
15
19
|
os: string;
|
|
@@ -30,12 +34,24 @@ export interface RunnerProbe {
|
|
|
30
34
|
jobsQueued: number;
|
|
31
35
|
jobsProjects: number;
|
|
32
36
|
capabilities: Record<RunnerCapability, CapabilityReport>;
|
|
37
|
+
/** Paused on the runner itself (`charness-runner pause`): no job is sent to it while it is. */
|
|
38
|
+
isPaused: boolean;
|
|
39
|
+
/** How the runner utility is kept running; `null` for a hand-made runner (and for an older script that did not say). */
|
|
40
|
+
serviceKind: RunnerServiceKind | null;
|
|
41
|
+
/** The charness version a paired runner runs; `null` for a hand-made one. */
|
|
42
|
+
runnerVersion: string | null;
|
|
43
|
+
/** The runner's iOS Simulator boot check; `null` when the runner did not report one. */
|
|
44
|
+
iosBoot: {
|
|
45
|
+
status: IosBootStatus;
|
|
46
|
+
detail: string;
|
|
47
|
+
} | null;
|
|
33
48
|
}
|
|
34
49
|
/** @description Parse the `key=value` lines of `runner.sh probe`. */
|
|
35
50
|
export declare function parseProbeOutput(text: string): RunnerProbe;
|
|
36
51
|
/** @description Does the probed runner have `capability`? */
|
|
37
52
|
export declare function checkHasCapability(probe: RunnerProbe, capability: RunnerCapability): boolean;
|
|
38
|
-
|
|
53
|
+
export declare function formatGigabytes(megabytes: number | null): string;
|
|
54
|
+
/** @description The lines under a runner's heading: hardware, jobs and groups, capabilities, and for a paired runner its program and service. */
|
|
39
55
|
export declare function formatRunnerDetails(probe: RunnerProbe, groupLimits: Readonly<Record<string, number>>): string[];
|
|
40
56
|
/** @name RunnerReport @description What `runners` knows of one runner after probing: live, or the last snapshot with why it is offline. */
|
|
41
57
|
export type RunnerReport = {
|
|
@@ -43,6 +59,7 @@ export type RunnerReport = {
|
|
|
43
59
|
status: 'online';
|
|
44
60
|
probe: RunnerProbe;
|
|
45
61
|
groupLimits: Record<string, number>;
|
|
62
|
+
isPausedByHub: boolean;
|
|
46
63
|
} | {
|
|
47
64
|
name: string;
|
|
48
65
|
status: 'offline';
|
|
@@ -50,7 +67,12 @@ export type RunnerReport = {
|
|
|
50
67
|
lastSeenAtMs: number | null;
|
|
51
68
|
lastProbe: RunnerProbe | null;
|
|
52
69
|
groupLimits: Record<string, number>;
|
|
70
|
+
isPausedByHub: boolean;
|
|
53
71
|
};
|
|
72
|
+
/** @description Is the runner held back from new jobs — paused from the hub, or on the runner itself (what it said when it was last seen counts too)? */
|
|
73
|
+
export declare function checkIsRunnerPaused(report: RunnerReport): boolean;
|
|
74
|
+
/** @description `2026-10-30 14:02 UTC` */
|
|
75
|
+
export declare function formatLastSeen(timestampMs: number): string;
|
|
54
76
|
/** @description The block `remote-run runners` prints for one runner. An offline one shows its last snapshot, marked as old. */
|
|
55
77
|
export declare function formatRunnerBlock(report: RunnerReport): string;
|
|
56
78
|
//# sourceMappingURL=probe.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../src/remoteRun/probe.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,kBAAkB,qDAAsD,CAAC;AACtF,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE,2HAA2H;AAC3H,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qHAAqH;AACrH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,qEAAqE;IACrE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../src/remoteRun/probe.ts"],"names":[],"mappings":"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"}
|
package/dist/remoteRun/probe.js
CHANGED
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @description What a runner says about itself (`runner.sh probe`), parsed, and the short block `remote-run runners` prints for it.
|
|
4
|
-
* The runner prints `key=value` lines; an unknown key is ignored (a newer runner script, an older main box) and a missing one is
|
|
5
|
-
* "unknown", never a guess.
|
|
6
|
-
*/
|
|
7
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.runnerCapabilities = void 0;
|
|
3
|
+
exports.iosBootStatuses = exports.runnerCapabilities = void 0;
|
|
9
4
|
exports.parseProbeOutput = parseProbeOutput;
|
|
10
5
|
exports.checkHasCapability = checkHasCapability;
|
|
6
|
+
exports.formatGigabytes = formatGigabytes;
|
|
11
7
|
exports.formatRunnerDetails = formatRunnerDetails;
|
|
8
|
+
exports.checkIsRunnerPaused = checkIsRunnerPaused;
|
|
9
|
+
exports.formatLastSeen = formatLastSeen;
|
|
12
10
|
exports.formatRunnerBlock = formatRunnerBlock;
|
|
11
|
+
const hubRegistry_1 = require("../runners/hubRegistry");
|
|
12
|
+
const runnersList_1 = require("../runners/runnersList");
|
|
13
|
+
/**
|
|
14
|
+
* @description What a runner says about itself (`runner.sh probe`), parsed, and the short block `remote-run runners` prints for it.
|
|
15
|
+
* The runner prints `key=value` lines; an unknown key is ignored (a newer runner script, an older main box) and a missing one is
|
|
16
|
+
* "unknown", never a guess.
|
|
17
|
+
*/
|
|
13
18
|
exports.runnerCapabilities = ['android', 'ios', 'docker', 'playwright'];
|
|
19
|
+
/** What the runner's own iOS Simulator boot check found (`ios-check.json`, written by the runner utility's service): it booted one, it could not, or nothing has run the check. */
|
|
20
|
+
exports.iosBootStatuses = ['ok', 'failed', 'unchecked'];
|
|
14
21
|
const megabytesPerGigabyte = 1024;
|
|
15
22
|
function readNumber(value) {
|
|
16
23
|
if (value === undefined || value.trim() === '')
|
|
@@ -31,6 +38,7 @@ function parseProbeOutput(text) {
|
|
|
31
38
|
detail: fields.get(`cap_${name}_detail`) ?? '',
|
|
32
39
|
});
|
|
33
40
|
const pueue = fields.get('pueue');
|
|
41
|
+
const iosBootStatus = exports.iosBootStatuses.find((status) => status === fields.get('ios_boot'));
|
|
34
42
|
return {
|
|
35
43
|
os: fields.get('os') ?? '',
|
|
36
44
|
osName: fields.get('os_name') ?? fields.get('os') ?? '',
|
|
@@ -54,6 +62,10 @@ function parseProbeOutput(text) {
|
|
|
54
62
|
docker: readCapability('docker'),
|
|
55
63
|
playwright: readCapability('playwright'),
|
|
56
64
|
},
|
|
65
|
+
isPaused: fields.get('paused') === 'yes',
|
|
66
|
+
serviceKind: hubRegistry_1.runnerServiceKinds.find((kind) => kind === fields.get('service')) ?? null,
|
|
67
|
+
runnerVersion: fields.get('runner_version') || null,
|
|
68
|
+
iosBoot: iosBootStatus === undefined ? null : { status: iosBootStatus, detail: fields.get('ios_boot_detail') ?? '' },
|
|
57
69
|
};
|
|
58
70
|
}
|
|
59
71
|
/** @description Does the probed runner have `capability`? */
|
|
@@ -93,7 +105,15 @@ function formatCapabilities(probe) {
|
|
|
93
105
|
}
|
|
94
106
|
return [...available, ...unavailable];
|
|
95
107
|
}
|
|
96
|
-
/**
|
|
108
|
+
/** The line of a paired runner under its capabilities: the charness it runs and how it is kept running. Nothing for a hand-made one. */
|
|
109
|
+
function formatRunnerProgram(probe) {
|
|
110
|
+
const parts = [
|
|
111
|
+
...(probe.runnerVersion === null ? [] : [`charness-runner ${probe.runnerVersion}`]),
|
|
112
|
+
...(probe.serviceKind === null ? [] : [runnersList_1.serviceKindLabels[probe.serviceKind]]),
|
|
113
|
+
];
|
|
114
|
+
return parts.length === 0 ? [] : [` ${parts.join(' · ')}`];
|
|
115
|
+
}
|
|
116
|
+
/** @description The lines under a runner's heading: hardware, jobs and groups, capabilities, and for a paired runner its program and service. */
|
|
97
117
|
function formatRunnerDetails(probe, groupLimits) {
|
|
98
118
|
const groups = Object.entries(groupLimits).map(([groupName, parallel]) => `${groupName} ${parallel}`).join(', ');
|
|
99
119
|
const jobs = `jobs: ${probe.jobsRunning} running, ${probe.jobsQueued} queued, ${probe.jobsProjects} ${probe.jobsProjects === 1 ? 'project' : 'projects'}`;
|
|
@@ -101,22 +121,36 @@ function formatRunnerDetails(probe, groupLimits) {
|
|
|
101
121
|
` ${formatCpu(probe)} · RAM ${formatGigabytes(probe.ramTotalMb)}, ${formatGigabytes(probe.ramFreeMb)} free · disk ${formatGigabytes(probe.diskFreeMb)} free (work dir)`,
|
|
102
122
|
` ${jobs}${groups === '' ? '' : ` · groups: ${groups}`}${probe.pueueVersion === null ? ' · Pueue: MISSING (install it, see docs/remote-run.md)' : ''}`,
|
|
103
123
|
` can: ${formatCapabilities(probe).join(' · ')}`,
|
|
124
|
+
...formatRunnerProgram(probe),
|
|
104
125
|
];
|
|
105
126
|
}
|
|
106
|
-
/**
|
|
127
|
+
/** @description Is the runner held back from new jobs — paused from the hub, or on the runner itself (what it said when it was last seen counts too)? */
|
|
128
|
+
function checkIsRunnerPaused(report) {
|
|
129
|
+
if (report.isPausedByHub)
|
|
130
|
+
return true;
|
|
131
|
+
const probe = report.status === 'online' ? report.probe : report.lastProbe;
|
|
132
|
+
return probe?.isPaused === true;
|
|
133
|
+
}
|
|
134
|
+
/** `paused from the hub` / `paused on the runner`, for the heading. */
|
|
135
|
+
function formatPauseTags(report) {
|
|
136
|
+
const probe = report.status === 'online' ? report.probe : report.lastProbe;
|
|
137
|
+
return [...(report.isPausedByHub ? ['paused from the hub'] : []), ...(probe?.isPaused === true ? ['paused on the runner'] : [])];
|
|
138
|
+
}
|
|
139
|
+
/** @description `2026-10-30 14:02 UTC` */
|
|
107
140
|
function formatLastSeen(timestampMs) {
|
|
108
141
|
return `${new Date(timestampMs).toISOString().slice(0, 16).replace('T', ' ')} UTC`;
|
|
109
142
|
}
|
|
110
143
|
/** @description The block `remote-run runners` prints for one runner. An offline one shows its last snapshot, marked as old. */
|
|
111
144
|
function formatRunnerBlock(report) {
|
|
145
|
+
const pauseTags = formatPauseTags(report).map((tag) => ` · ${tag}`).join('');
|
|
112
146
|
if (report.status === 'online') {
|
|
113
|
-
return [`${report.name} — online · ${formatSystem(report.probe)}`, ...formatRunnerDetails(report.probe, report.groupLimits)].join('\n');
|
|
147
|
+
return [`${report.name} — online${pauseTags} · ${formatSystem(report.probe)}`, ...formatRunnerDetails(report.probe, report.groupLimits)].join('\n');
|
|
114
148
|
}
|
|
115
149
|
const lastSeen = report.lastSeenAtMs === null ? 'never seen' : `last seen ${formatLastSeen(report.lastSeenAtMs)}`;
|
|
116
150
|
if (report.lastProbe === null)
|
|
117
|
-
return `${report.name} — offline (${report.reason}) · ${lastSeen}`;
|
|
151
|
+
return `${report.name} — offline (${report.reason})${pauseTags} · ${lastSeen}`;
|
|
118
152
|
return [
|
|
119
|
-
`${report.name} — offline (${report.reason}) · ${lastSeen} — as it was then: ${formatSystem(report.lastProbe)}`,
|
|
153
|
+
`${report.name} — offline (${report.reason})${pauseTags} · ${lastSeen} — as it was then: ${formatSystem(report.lastProbe)}`,
|
|
120
154
|
...formatRunnerDetails(report.lastProbe, report.groupLimits),
|
|
121
155
|
].join('\n');
|
|
122
156
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/remoteRun/probe.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/remoteRun/probe.ts"],"names":[],"mappings":";;;AA6DA,4CAwCC;AAGD,gDAEC;AAED,0CAIC;AAwCD,kDASC;AAQD,kDAIC;AASD,wCAEC;AAGD,8CAWC;AAtMD,wDAAoF;AACpF,wDAA2D;AAE3D;;;;GAIG;AAEU,QAAA,kBAAkB,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAU,CAAC;AAStF,mLAAmL;AACtK,QAAA,eAAe,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAU,CAAC;AAiCtE,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAElC,SAAS,UAAU,CAAC,KAAyB;IAC3C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,qEAAqE;AACrE,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,SAAS,GAAG,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnG,CAAC;IACD,MAAM,cAAc,GAAG,CAAC,IAAsB,EAAoB,EAAE,CAAC,CAAC;QACpE,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK,KAAK;QAChD,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE;KAC/C,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,aAAa,GAAG,uBAAe,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1F,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;QAC1B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;QACvD,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE;QACzC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;QAClC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;QAC9B,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE;QACvC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC7C,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACjD,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAClD,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAChD,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAClD,YAAY,EAAE,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;QACvF,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC;QACxD,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC;QACtD,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC;QAC1D,YAAY,EAAE;YACZ,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC;YAClC,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;YAC1B,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC;YAChC,UAAU,EAAE,cAAc,CAAC,YAAY,CAAC;SACzC;QACD,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,KAAK;QACxC,WAAW,EAAE,gCAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI;QACtF,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,IAAI;QACnD,OAAO,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE;KACrH,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,SAAgB,kBAAkB,CAAC,KAAkB,EAAE,UAA4B;IACjF,OAAO,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC;AACpD,CAAC;AAED,SAAgB,eAAe,CAAC,SAAwB;IACtD,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;IACnC,MAAM,SAAS,GAAG,SAAS,GAAG,oBAAoB,CAAC;IACnD,OAAO,GAAG,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC;AAC3F,CAAC;AAED,kJAAkJ;AAClJ,SAAS,YAAY,CAAC,KAAkB;IACtC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvF,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpH,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnF,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,OAAO,GAAG,CAAC;AAC5D,CAAC;AAED,SAAS,SAAS,CAAC,KAAkB;IACnC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IACtE,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,YAAY,KAAK,CAAC,UAAU,IAAI,GAAG,UAAU,CAAC;IAC9G,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC;IAC/D,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,EAAE,CAAC;AACnC,CAAC;AAED,mJAAmJ;AACnJ,SAAS,kBAAkB,CAAC,KAAkB;IAC5C,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,0BAAkB,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,WAAW;YAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;;YAC9F,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,CAAC,GAAG,SAAS,EAAE,GAAG,WAAW,CAAC,CAAC;AACxC,CAAC;AAED,wIAAwI;AACxI,SAAS,mBAAmB,CAAC,KAAkB;IAC7C,MAAM,KAAK,GAAG;QACZ,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QACnF,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,+BAAiB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;KAC9E,CAAC;IACF,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,iJAAiJ;AACjJ,SAAgB,mBAAmB,CAAC,KAAkB,EAAE,WAA6C;IACnG,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,GAAG,SAAS,IAAI,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjH,MAAM,IAAI,GAAG,SAAS,KAAK,CAAC,WAAW,aAAa,KAAK,CAAC,UAAU,YAAY,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IAC1J,OAAO;QACL,KAAK,SAAS,CAAC,KAAK,CAAC,UAAU,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,gBAAgB,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,kBAAkB;QACxK,KAAK,IAAI,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,wDAAwD,CAAC,CAAC,CAAC,EAAE,EAAE;QACvJ,UAAU,kBAAkB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QACjD,GAAG,mBAAmB,CAAC,KAAK,CAAC;KAC9B,CAAC;AACJ,CAAC;AAOD,yJAAyJ;AACzJ,SAAgB,mBAAmB,CAAC,MAAoB;IACtD,IAAI,MAAM,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;IAC3E,OAAO,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAClC,CAAC;AAED,uEAAuE;AACvE,SAAS,eAAe,CAAC,MAAoB;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnI,CAAC;AAED,0CAA0C;AAC1C,SAAgB,cAAc,CAAC,WAAmB;IAChD,OAAO,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC;AACrF,CAAC;AAED,gIAAgI;AAChI,SAAgB,iBAAiB,CAAC,MAAoB;IACpD,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7E,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,YAAY,SAAS,MAAM,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtJ,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;IAClH,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO,GAAG,MAAM,CAAC,IAAI,eAAe,MAAM,CAAC,MAAM,IAAI,SAAS,MAAM,QAAQ,EAAE,CAAC;IAC9G,OAAO;QACL,GAAG,MAAM,CAAC,IAAI,eAAe,MAAM,CAAC,MAAM,IAAI,SAAS,MAAM,QAAQ,sBAAsB,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;QAC3H,GAAG,mBAAmB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;KAC7D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -1,15 +1,22 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { createProcessIo, type CliIo } from './output';
|
|
2
|
+
import { type RunnersConfig } from './runnersConfig';
|
|
2
3
|
/**
|
|
3
|
-
* @description `charness remote-run …` — send a command to a runner (a machine
|
|
4
|
-
* `~/.config/charness/runners.json`) and get its output, exit code and declared result files back as if it had run here. The
|
|
4
|
+
* @description `charness remote-run …` — send a command to a runner (a machine PAIRED with this charness — `charness runners pair`, the
|
|
5
|
+
* pasted line — or reached by ordinary ssh and listed in `~/.config/charness/runners.json`) and get its output, exit code and declared result files back as if it had run here. The
|
|
5
6
|
* contracts are in `src/remoteRun/README.md`; the user-facing description is `docs/remote-run.md`.
|
|
6
7
|
*
|
|
7
8
|
* The CLI loads NO env file (it would read the PROJECT's `.env`: agents run it from project folders) and never touches `DATA_DIR` or
|
|
8
9
|
* the state store: it needs nothing from an instance.
|
|
9
10
|
*/
|
|
10
|
-
export
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
export { createProcessIo };
|
|
12
|
+
export declare const remoteRunUsage = "Usage:\n charness remote-run [--runner <name>] [--needs android|ios|docker|playwright] [--runner-wait <dur>] [--group <g>]\n [--timeout <dur>] [--with-git] [-e NAME=VALUE]\u2026 [--bg] <command\u2026>\n run <command> on a runner, in the same folder of a copy of this git project;\n output and exit code come back, interrupt or timeout kills the remote job.\n --bg prints a job id and returns (long runs).\n --needs with a paired runner that has it but is offline waits for it up to --runner-wait\n (default 15m, 0 = fail at once).\n Options go BEFORE the command; a command that starts with a subcommand name goes after --\n charness remote-run runners the runners: online, hardware, load, what each can do\n charness remote-run ls [--all] jobs of this project (all projects with --all)\n charness remote-run status <id> one job\n charness remote-run logs <id> [-f] [--tail N]\n charness remote-run wait <id> block until the job ends, fetch its files, exit with its code\n charness remote-run kill <id>\n charness remote-run fetch <id> bring a finished job's result files back (again)\n charness remote-run exec [--runner <name>] <command\u2026>\n one-off command in the runner's copy as the last job left it (no sync)\nExit codes: the command's own; 125 remote-run failed, 124 timeout, 130/143/129 interrupted (SIGINT/SIGTERM/SIGHUP), 137 job killed, 2 bad usage.\nSetup: docs/remote-run.md\n";
|
|
13
|
+
/**
|
|
14
|
+
* @description The runners as they are right now, for a look in the middle of a command (the wait for an offline runner re-reads them at
|
|
15
|
+
* every look). A file that is half-way through an edit, or a name that clashes for a moment, must not end a wait that may be 15 minutes
|
|
16
|
+
* in: the list that last loaded is used. Only when nothing ever loaded does a broken file or registry stop the caller with its errors.
|
|
17
|
+
* No runner at all is an empty list.
|
|
18
|
+
*/
|
|
19
|
+
export declare function readCurrentRunners(homeDir: string): RunnersConfig;
|
|
13
20
|
/** @description Run the command line (the words after `remote-run`); resolves with the exit code. */
|
|
14
21
|
export declare function runRemoteRunCli(argv: readonly string[], io?: CliIo): Promise<number>;
|
|
15
22
|
//# sourceMappingURL=remoteRunCli.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remoteRunCli.d.ts","sourceRoot":"","sources":["../../src/remoteRun/remoteRunCli.ts"],"names":[],"mappings":"AAgBA,OAAO,
|
|
1
|
+
{"version":3,"file":"remoteRunCli.d.ts","sourceRoot":"","sources":["../../src/remoteRun/remoteRunCli.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,eAAe,EAAE,KAAK,KAAK,EAAE,MAAM,UAAU,CAAC;AAGvD,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAM3E;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,eAAO,MAAM,cAAc,mqDAoB1B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAOjE;AAyBD,qGAAqG;AACrG,wBAAsB,eAAe,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,GAAE,KAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,CAoC7G"}
|
|
@@ -1,64 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.remoteRunUsage = void 0;
|
|
37
|
-
exports.
|
|
3
|
+
exports.remoteRunUsage = exports.createProcessIo = void 0;
|
|
4
|
+
exports.readCurrentRunners = readCurrentRunners;
|
|
38
5
|
exports.runRemoteRunCli = runRemoteRunCli;
|
|
39
|
-
const os = __importStar(require("os"));
|
|
40
6
|
const commands_1 = require("./commands");
|
|
41
7
|
const cliArgs_1 = require("./cliArgs");
|
|
42
8
|
const exitCodes_1 = require("./exitCodes");
|
|
9
|
+
const interrupts_1 = require("./interrupts");
|
|
43
10
|
const leaseTiming_1 = require("./leaseTiming");
|
|
11
|
+
const output_1 = require("./output");
|
|
12
|
+
Object.defineProperty(exports, "createProcessIo", { enumerable: true, get: function () { return output_1.createProcessIo; } });
|
|
44
13
|
const remoteRunError_1 = require("./remoteRunError");
|
|
45
14
|
const runnerClient_1 = require("./runnerClient");
|
|
46
15
|
const runnersConfig_1 = require("./runnersConfig");
|
|
16
|
+
const runnersCatalog_1 = require("./runnersCatalog");
|
|
17
|
+
const runnerWait_1 = require("./runnerWait");
|
|
18
|
+
const runnerWaitTiming_1 = require("./runnerWaitTiming");
|
|
47
19
|
const ssh_1 = require("./ssh");
|
|
48
|
-
/**
|
|
49
|
-
* @description `charness remote-run …` — send a command to a runner (a machine reached by ordinary ssh, listed in
|
|
50
|
-
* `~/.config/charness/runners.json`) and get its output, exit code and declared result files back as if it had run here. The
|
|
51
|
-
* contracts are in `src/remoteRun/README.md`; the user-facing description is `docs/remote-run.md`.
|
|
52
|
-
*
|
|
53
|
-
* The CLI loads NO env file (it would read the PROJECT's `.env`: agents run it from project folders) and never touches `DATA_DIR` or
|
|
54
|
-
* the state store: it needs nothing from an instance.
|
|
55
|
-
*/
|
|
56
20
|
exports.remoteRunUsage = `Usage:
|
|
57
|
-
charness remote-run [--runner <name>] [--needs android|ios|docker|playwright] [--
|
|
58
|
-
[--with-git] [-e NAME=VALUE]… [--bg] <command…>
|
|
21
|
+
charness remote-run [--runner <name>] [--needs android|ios|docker|playwright] [--runner-wait <dur>] [--group <g>]
|
|
22
|
+
[--timeout <dur>] [--with-git] [-e NAME=VALUE]… [--bg] <command…>
|
|
59
23
|
run <command> on a runner, in the same folder of a copy of this git project;
|
|
60
24
|
output and exit code come back, interrupt or timeout kills the remote job.
|
|
61
25
|
--bg prints a job id and returns (long runs).
|
|
26
|
+
--needs with a paired runner that has it but is offline waits for it up to --runner-wait
|
|
27
|
+
(default 15m, 0 = fail at once).
|
|
62
28
|
Options go BEFORE the command; a command that starts with a subcommand name goes after --
|
|
63
29
|
charness remote-run runners the runners: online, hardware, load, what each can do
|
|
64
30
|
charness remote-run ls [--all] jobs of this project (all projects with --all)
|
|
@@ -72,25 +38,30 @@ exports.remoteRunUsage = `Usage:
|
|
|
72
38
|
Exit codes: the command's own; 125 remote-run failed, 124 timeout, 130/143/129 interrupted (SIGINT/SIGTERM/SIGHUP), 137 job killed, 2 bad usage.
|
|
73
39
|
Setup: docs/remote-run.md
|
|
74
40
|
`;
|
|
75
|
-
/**
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
41
|
+
/**
|
|
42
|
+
* @description The runners as they are right now, for a look in the middle of a command (the wait for an offline runner re-reads them at
|
|
43
|
+
* every look). A file that is half-way through an edit, or a name that clashes for a moment, must not end a wait that may be 15 minutes
|
|
44
|
+
* in: the list that last loaded is used. Only when nothing ever loaded does a broken file or registry stop the caller with its errors.
|
|
45
|
+
* No runner at all is an empty list.
|
|
46
|
+
*/
|
|
47
|
+
function readCurrentRunners(homeDir) {
|
|
48
|
+
const load = (0, runnersCatalog_1.loadRunnersCatalog)(homeDir);
|
|
49
|
+
if (load.status === 'invalid') {
|
|
50
|
+
if (load.config !== null)
|
|
51
|
+
return load.config;
|
|
52
|
+
throw new remoteRunError_1.RemoteRunError(load.errors.join('\n'));
|
|
53
|
+
}
|
|
54
|
+
return load.config;
|
|
84
55
|
}
|
|
85
56
|
function createContext(io) {
|
|
86
|
-
const load = (0,
|
|
57
|
+
const load = (0, runnersCatalog_1.loadRunnersCatalog)(io.homeDir);
|
|
87
58
|
if (load.status === 'missing') {
|
|
88
|
-
throw new remoteRunError_1.RemoteRunError(`no runners are set up: ${(0, runnersConfig_1.getRunnersConfigPath)(io.homeDir)} does not exist (docs/remote-run.md explains how to add one)`);
|
|
59
|
+
throw new remoteRunError_1.RemoteRunError(`no runners are set up: ${(0, runnersConfig_1.getRunnersConfigPath)(io.homeDir)} does not exist and none is paired (docs/remote-run.md explains how to add one; \`charness runners pair\` pairs one)`);
|
|
89
60
|
}
|
|
90
61
|
if (load.status === 'invalid')
|
|
91
62
|
throw new remoteRunError_1.RemoteRunError(load.errors.join('\n'));
|
|
92
63
|
if (load.config.runners.length === 0)
|
|
93
|
-
throw new remoteRunError_1.RemoteRunError(`${(0, runnersConfig_1.getRunnersConfigPath)(io.homeDir)} lists no runners`);
|
|
64
|
+
throw new remoteRunError_1.RemoteRunError(`${(0, runnersConfig_1.getRunnersConfigPath)(io.homeDir)} lists no runners and none is paired`);
|
|
94
65
|
const cacheDir = (0, ssh_1.getRemoteRunCacheDir)(io.env, io.homeDir);
|
|
95
66
|
(0, ssh_1.ensureRemoteRunCacheDir)(cacheDir);
|
|
96
67
|
return {
|
|
@@ -100,10 +71,14 @@ function createContext(io) {
|
|
|
100
71
|
script: (0, runnerClient_1.readRunnerScript)(),
|
|
101
72
|
leaseMs: (0, leaseTiming_1.readRemoteRunLeaseMs)(io.env),
|
|
102
73
|
now: Date.now,
|
|
74
|
+
loadRunners: () => readCurrentRunners(io.homeDir),
|
|
75
|
+
runnerPollMs: (0, runnerWaitTiming_1.readRunnerWaitPollMs)(io.env),
|
|
76
|
+
sleep: runnerWait_1.sleepUntilStopped,
|
|
77
|
+
watchInterrupts: interrupts_1.addInterruptHandlerWithHardStop,
|
|
103
78
|
};
|
|
104
79
|
}
|
|
105
80
|
/** @description Run the command line (the words after `remote-run`); resolves with the exit code. */
|
|
106
|
-
async function runRemoteRunCli(argv, io = createProcessIo()) {
|
|
81
|
+
async function runRemoteRunCli(argv, io = (0, output_1.createProcessIo)()) {
|
|
107
82
|
const parsed = (0, cliArgs_1.parseRemoteRunArgs)(argv);
|
|
108
83
|
if (!parsed.ok) {
|
|
109
84
|
io.stderr(`remote-run: ${parsed.error}\n\n${exports.remoteRunUsage}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remoteRunCli.js","sourceRoot":"","sources":["../../src/remoteRun/remoteRunCli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"remoteRunCli.js","sourceRoot":"","sources":["../../src/remoteRun/remoteRunCli.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,8 @@ export interface RunnerClient {
|
|
|
37
37
|
/** The long-lived form: a spawned ssh whose streams the caller handles. */
|
|
38
38
|
stream: (subcommand: string, args: readonly string[]) => ReturnType<typeof spawnSshStream>;
|
|
39
39
|
}
|
|
40
|
+
/** Why a paired runner whose link is down is offline — the words `charness runner-proxy` (`runners/runnerProxy.ts`) puts on stderr when nothing listens on the link's socket. */
|
|
41
|
+
export declare const notConnectedReason = "the runner is not connected";
|
|
40
42
|
/**
|
|
41
43
|
* @description The first useful line of a failed ssh's stderr, for a message (never the whole text: it may quote the destination). A
|
|
42
44
|
* rejected key from a process with no ssh-agent (`SSH_AUTH_SOCK` unset — a tracker agent such as Jira's starts with a minimal environment
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runnerClient.d.ts","sourceRoot":"","sources":["../../src/remoteRun/runnerClient.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAOL,cAAc,EACd,KAAK,YAAY,EAClB,MAAM,OAAO,CAAC;AAUf,6FAA6F;AAC7F,eAAO,MAAM,kBAAkB,QAAY,CAAC;AAG5C,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,oJAAoJ;AACpJ,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,gBAAgB,CAAC,UAAU,GAAE,MAA8B,GAAG,YAAY,CAGzF;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;;;OAGG;IACH,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,qGAAqG;IACrG,kBAAkB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,4FAA4F;IAC5F,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACrJ,gHAAgH;IAChH,WAAW,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACtJ,2EAA2E;IAC3E,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;CAC5F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"runnerClient.d.ts","sourceRoot":"","sources":["../../src/remoteRun/runnerClient.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAOL,cAAc,EACd,KAAK,YAAY,EAClB,MAAM,OAAO,CAAC;AAUf,6FAA6F;AAC7F,eAAO,MAAM,kBAAkB,QAAY,CAAC;AAG5C,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,oJAAoJ;AACpJ,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,gBAAgB,CAAC,UAAU,GAAE,MAA8B,GAAG,YAAY,CAGzF;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;;;OAGG;IACH,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,qGAAqG;IACrG,kBAAkB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,4FAA4F;IAC5F,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACrJ,gHAAgH;IAChH,WAAW,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACtJ,2EAA2E;IAC3E,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;CAC5F;AAED,iLAAiL;AACjL,eAAO,MAAM,kBAAkB,gCAAgC,CAAC;AAEhE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAarG;AAED,0KAA0K;AAC1K,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG9E;AAED,iHAAiH;AACjH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,YAAiC,GAAG,YAAY,CA8ClI"}
|