charness 3.6.1 → 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 +297 -0
- package/DEVELOPMENT.md +35 -5
- package/MIGRATION_RENAME_TO_CHARNESS.md +3 -2
- package/README.md +84 -782
- package/SETUP.md +48 -10
- package/agent-plugin/.claude-plugin/plugin.json +7 -0
- package/agent-plugin/README.md +35 -0
- package/agent-plugin/skills/charness-delegate-claude/SKILL.md +85 -0
- package/agent-plugin/skills/charness-delegate-claude/summarize-events.py +90 -0
- package/agent-plugin/skills/charness-delegate-opencode/SKILL.md +68 -0
- package/agent-plugin/skills/charness-manager/SKILL.md +152 -0
- package/dist/adapters/adapterNames.d.ts +6 -0
- package/dist/adapters/adapterNames.d.ts.map +1 -1
- package/dist/adapters/adapterNames.js +8 -2
- package/dist/adapters/adapterNames.js.map +1 -1
- package/dist/adapters/claudeCliAdapter.d.ts +8 -0
- package/dist/adapters/claudeCliAdapter.d.ts.map +1 -1
- package/dist/adapters/claudeCliAdapter.js +42 -5
- package/dist/adapters/claudeCliAdapter.js.map +1 -1
- package/dist/adapters/claudeJsonStreamAdapter.d.ts +10 -9
- package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -1
- package/dist/adapters/claudeJsonStreamAdapter.js +53 -55
- package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -1
- package/dist/adapters/createAdapter.d.ts +8 -0
- package/dist/adapters/createAdapter.d.ts.map +1 -1
- package/dist/adapters/createAdapter.js +14 -2
- package/dist/adapters/createAdapter.js.map +1 -1
- package/dist/adapters/openCodeAdapter.d.ts +43 -6
- package/dist/adapters/openCodeAdapter.d.ts.map +1 -1
- package/dist/adapters/openCodeAdapter.js +97 -7
- package/dist/adapters/openCodeAdapter.js.map +1 -1
- package/dist/agentLogin/agentLogin.d.ts +1 -1
- package/dist/agentLogin/agentLogin.d.ts.map +1 -1
- package/dist/apiRetryKick.d.ts +4 -3
- package/dist/apiRetryKick.d.ts.map +1 -1
- package/dist/apiRetryKick.js +16 -9
- package/dist/apiRetryKick.js.map +1 -1
- package/dist/bot.d.ts.map +1 -1
- package/dist/bot.js +1360 -387
- package/dist/bot.js.map +1 -1
- package/dist/cli/claudeProfiles.d.ts +11 -6
- package/dist/cli/claudeProfiles.d.ts.map +1 -1
- package/dist/cli/claudeProfiles.js +50 -22
- package/dist/cli/claudeProfiles.js.map +1 -1
- package/dist/cli/hot.d.ts +5 -0
- package/dist/cli/hot.d.ts.map +1 -1
- package/dist/cli/hot.js +71 -25
- package/dist/cli/hot.js.map +1 -1
- package/dist/cli/tscWatchGuard.d.ts +95 -0
- package/dist/cli/tscWatchGuard.d.ts.map +1 -0
- package/dist/cli/tscWatchGuard.js +295 -0
- package/dist/cli/tscWatchGuard.js.map +1 -0
- package/dist/cli.js +55 -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/jira/answerSink.d.ts +10 -0
- package/dist/connectors/jira/answerSink.d.ts.map +1 -1
- package/dist/connectors/jira/answerSink.js +13 -0
- package/dist/connectors/jira/answerSink.js.map +1 -1
- package/dist/connectors/jira/config.d.ts +2 -0
- package/dist/connectors/jira/config.d.ts.map +1 -1
- package/dist/connectors/jira/config.js +9 -1
- package/dist/connectors/jira/config.js.map +1 -1
- package/dist/connectors/jira/connector.d.ts +11 -1
- package/dist/connectors/jira/connector.d.ts.map +1 -1
- package/dist/connectors/jira/connector.js +7 -0
- package/dist/connectors/jira/connector.js.map +1 -1
- package/dist/connectors/jira/inbound.d.ts +27 -4
- package/dist/connectors/jira/inbound.d.ts.map +1 -1
- package/dist/connectors/jira/inbound.js +69 -8
- package/dist/connectors/jira/inbound.js.map +1 -1
- package/dist/connectors/jira/issueBlocks.d.ts +5 -0
- package/dist/connectors/jira/issueBlocks.d.ts.map +1 -1
- package/dist/connectors/jira/issueBlocks.js +11 -0
- package/dist/connectors/jira/issueBlocks.js.map +1 -1
- package/dist/connectors/telegram/bindPicker.d.ts +5 -0
- package/dist/connectors/telegram/bindPicker.d.ts.map +1 -1
- package/dist/connectors/telegram/bindPicker.js +18 -1
- package/dist/connectors/telegram/bindPicker.js.map +1 -1
- package/dist/connectors/telegram/bindPickerClaims.d.ts +46 -0
- package/dist/connectors/telegram/bindPickerClaims.d.ts.map +1 -0
- package/dist/connectors/telegram/bindPickerClaims.js +83 -0
- package/dist/connectors/telegram/bindPickerClaims.js.map +1 -0
- package/dist/connectors/telegram/bindSweep.d.ts +32 -0
- package/dist/connectors/telegram/bindSweep.d.ts.map +1 -0
- package/dist/connectors/telegram/bindSweep.js +47 -0
- package/dist/connectors/telegram/bindSweep.js.map +1 -0
- package/dist/connectors/telegram/bindingWelcome.d.ts +23 -0
- package/dist/connectors/telegram/bindingWelcome.d.ts.map +1 -0
- package/dist/connectors/telegram/bindingWelcome.js +26 -0
- package/dist/connectors/telegram/bindingWelcome.js.map +1 -0
- package/dist/connectors/telegram/botApiConnection.d.ts +74 -0
- package/dist/connectors/telegram/botApiConnection.d.ts.map +1 -0
- package/dist/connectors/telegram/botApiConnection.js +201 -0
- package/dist/connectors/telegram/botApiConnection.js.map +1 -0
- package/dist/connectors/telegram/commands/botCore.d.ts +13 -3
- package/dist/connectors/telegram/commands/botCore.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/botSkills.d.ts +21 -0
- package/dist/connectors/telegram/commands/botSkills.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/botSkills.js +133 -0
- package/dist/connectors/telegram/commands/botSkills.js.map +1 -0
- package/dist/connectors/telegram/commands/callbackMessage.d.ts +5 -0
- package/dist/connectors/telegram/commands/callbackMessage.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/callbackMessage.js +9 -0
- package/dist/connectors/telegram/commands/callbackMessage.js.map +1 -1
- package/dist/connectors/telegram/commands/compaction.d.ts +65 -3
- package/dist/connectors/telegram/commands/compaction.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/compaction.js +512 -94
- package/dist/connectors/telegram/commands/compaction.js.map +1 -1
- package/dist/connectors/telegram/commands/displayModes.d.ts +1 -1
- package/dist/connectors/telegram/commands/displayModes.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/displayModes.js +6 -18
- package/dist/connectors/telegram/commands/displayModes.js.map +1 -1
- package/dist/connectors/telegram/commands/fallbackChain.js +5 -5
- package/dist/connectors/telegram/commands/fallbackChain.js.map +1 -1
- package/dist/connectors/telegram/commands/reminders.d.ts +1 -1
- package/dist/connectors/telegram/commands/reminders.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/reminders.js +4 -15
- package/dist/connectors/telegram/commands/reminders.js.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/commands/selfUpdate.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/selfUpdate.js +1 -11
- package/dist/connectors/telegram/commands/selfUpdate.js.map +1 -1
- package/dist/connectors/telegram/commands/taskAgents.d.ts +22 -0
- package/dist/connectors/telegram/commands/taskAgents.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/taskAgents.js +104 -0
- package/dist/connectors/telegram/commands/taskAgents.js.map +1 -0
- package/dist/connectors/telegram/commands/todo.d.ts +82 -0
- package/dist/connectors/telegram/commands/todo.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/todo.js +384 -0
- package/dist/connectors/telegram/commands/todo.js.map +1 -0
- package/dist/connectors/telegram/commands/topicCommand.d.ts +6 -2
- package/dist/connectors/telegram/commands/topicCommand.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/topicCommand.js +6 -9
- package/dist/connectors/telegram/commands/topicCommand.js.map +1 -1
- package/dist/connectors/telegram/openBindMessages.d.ts +45 -0
- package/dist/connectors/telegram/openBindMessages.d.ts.map +1 -0
- package/dist/connectors/telegram/openBindMessages.js +67 -0
- package/dist/connectors/telegram/openBindMessages.js.map +1 -0
- package/dist/connectors/telegram/outputFlushPlan.d.ts +49 -0
- package/dist/connectors/telegram/outputFlushPlan.d.ts.map +1 -1
- package/dist/connectors/telegram/outputFlushPlan.js +46 -0
- package/dist/connectors/telegram/outputFlushPlan.js.map +1 -1
- package/dist/connectors/telegram/pendingTopicName.d.ts +26 -0
- package/dist/connectors/telegram/pendingTopicName.d.ts.map +1 -0
- package/dist/connectors/telegram/pendingTopicName.js +27 -0
- package/dist/connectors/telegram/pendingTopicName.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/connectors/test/connector.d.ts.map +1 -1
- package/dist/connectors/test/connector.js +6 -1
- package/dist/connectors/test/connector.js.map +1 -1
- package/dist/i18n/de.d.ts.map +1 -1
- package/dist/i18n/de.js +148 -7
- package/dist/i18n/de.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +148 -7
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/es.d.ts.map +1 -1
- package/dist/i18n/es.js +148 -7
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/fr.d.ts.map +1 -1
- package/dist/i18n/fr.js +148 -7
- package/dist/i18n/fr.js.map +1 -1
- package/dist/i18n/hi.d.ts.map +1 -1
- package/dist/i18n/hi.js +148 -7
- package/dist/i18n/hi.js.map +1 -1
- package/dist/i18n/ja.d.ts.map +1 -1
- package/dist/i18n/ja.js +148 -7
- package/dist/i18n/ja.js.map +1 -1
- package/dist/i18n/ka.d.ts.map +1 -1
- package/dist/i18n/ka.js +148 -7
- package/dist/i18n/ka.js.map +1 -1
- package/dist/i18n/pt.d.ts.map +1 -1
- package/dist/i18n/pt.js +148 -7
- package/dist/i18n/pt.js.map +1 -1
- package/dist/i18n/ru.d.ts.map +1 -1
- package/dist/i18n/ru.js +148 -7
- package/dist/i18n/ru.js.map +1 -1
- package/dist/i18n/uk.d.ts.map +1 -1
- package/dist/i18n/uk.js +148 -7
- package/dist/i18n/uk.js.map +1 -1
- package/dist/i18n/uz.d.ts.map +1 -1
- package/dist/i18n/uz.js +148 -7
- package/dist/i18n/uz.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +148 -7
- package/dist/i18n/zh.js.map +1 -1
- package/dist/i18n.d.ts +1 -1
- package/dist/i18n.js +1 -1
- package/dist/installManager.d.ts +70 -1
- package/dist/installManager.d.ts.map +1 -1
- package/dist/installManager.js +125 -13
- package/dist/installManager.js.map +1 -1
- package/dist/instanceSettings.d.ts +50 -1
- package/dist/instanceSettings.d.ts.map +1 -1
- package/dist/instanceSettings.js +119 -26
- package/dist/instanceSettings.js.map +1 -1
- package/dist/openCodeQuestionFlow.d.ts +30 -0
- package/dist/openCodeQuestionFlow.d.ts.map +1 -1
- package/dist/openCodeQuestionFlow.js +43 -0
- package/dist/openCodeQuestionFlow.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/postToSession.d.ts +20 -5
- package/dist/postToSession.d.ts.map +1 -1
- package/dist/postToSession.js +38 -7
- package/dist/postToSession.js.map +1 -1
- package/dist/remoteRun/cliArgs.d.ts +75 -0
- package/dist/remoteRun/cliArgs.d.ts.map +1 -0
- package/dist/remoteRun/cliArgs.js +206 -0
- package/dist/remoteRun/cliArgs.js.map +1 -0
- package/dist/remoteRun/commands.d.ts +77 -0
- package/dist/remoteRun/commands.d.ts.map +1 -0
- package/dist/remoteRun/commands.js +327 -0
- package/dist/remoteRun/commands.js.map +1 -0
- package/dist/remoteRun/depsPlan.d.ts +16 -0
- package/dist/remoteRun/depsPlan.d.ts.map +1 -0
- package/dist/remoteRun/depsPlan.js +82 -0
- package/dist/remoteRun/depsPlan.js.map +1 -0
- package/dist/remoteRun/exitCodes.d.ts +34 -0
- package/dist/remoteRun/exitCodes.d.ts.map +1 -0
- package/dist/remoteRun/exitCodes.js +38 -0
- package/dist/remoteRun/exitCodes.js.map +1 -0
- package/dist/remoteRun/foreground.d.ts +29 -0
- package/dist/remoteRun/foreground.d.ts.map +1 -0
- package/dist/remoteRun/foreground.js +159 -0
- package/dist/remoteRun/foreground.js.map +1 -0
- package/dist/remoteRun/interrupts.d.ts +27 -0
- package/dist/remoteRun/interrupts.d.ts.map +1 -0
- package/dist/remoteRun/interrupts.js +78 -0
- package/dist/remoteRun/interrupts.js.map +1 -0
- package/dist/remoteRun/jobFiles.d.ts +31 -0
- package/dist/remoteRun/jobFiles.d.ts.map +1 -0
- package/dist/remoteRun/jobFiles.js +84 -0
- package/dist/remoteRun/jobFiles.js.map +1 -0
- package/dist/remoteRun/jobFormat.d.ts +16 -0
- package/dist/remoteRun/jobFormat.d.ts.map +1 -0
- package/dist/remoteRun/jobFormat.js +130 -0
- package/dist/remoteRun/jobFormat.js.map +1 -0
- package/dist/remoteRun/jobId.d.ts +15 -0
- package/dist/remoteRun/jobId.d.ts.map +1 -0
- package/dist/remoteRun/jobId.js +85 -0
- package/dist/remoteRun/jobId.js.map +1 -0
- package/dist/remoteRun/jobMeta.d.ts +18 -0
- package/dist/remoteRun/jobMeta.d.ts.map +1 -0
- package/dist/remoteRun/jobMeta.js +33 -0
- package/dist/remoteRun/jobMeta.js.map +1 -0
- package/dist/remoteRun/jobQuery.d.ts +12 -0
- package/dist/remoteRun/jobQuery.d.ts.map +1 -0
- package/dist/remoteRun/jobQuery.js +22 -0
- package/dist/remoteRun/jobQuery.js.map +1 -0
- package/dist/remoteRun/jobRecords.d.ts +22 -0
- package/dist/remoteRun/jobRecords.d.ts.map +1 -0
- package/dist/remoteRun/jobRecords.js +145 -0
- package/dist/remoteRun/jobRecords.js.map +1 -0
- package/dist/remoteRun/jobState.d.ts +62 -0
- package/dist/remoteRun/jobState.d.ts.map +1 -0
- package/dist/remoteRun/jobState.js +132 -0
- package/dist/remoteRun/jobState.js.map +1 -0
- package/dist/remoteRun/leaseTiming.d.ts +18 -0
- package/dist/remoteRun/leaseTiming.d.ts.map +1 -0
- package/dist/remoteRun/leaseTiming.js +43 -0
- package/dist/remoteRun/leaseTiming.js.map +1 -0
- package/dist/remoteRun/output.d.ts +37 -0
- package/dist/remoteRun/output.d.ts.map +1 -0
- package/dist/remoteRun/output.js +127 -0
- package/dist/remoteRun/output.js.map +1 -0
- 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/pathPatterns.d.ts +33 -0
- package/dist/remoteRun/pathPatterns.d.ts.map +1 -0
- package/dist/remoteRun/pathPatterns.js +115 -0
- package/dist/remoteRun/pathPatterns.js.map +1 -0
- package/dist/remoteRun/probe.d.ts +78 -0
- package/dist/remoteRun/probe.d.ts.map +1 -0
- package/dist/remoteRun/probe.js +157 -0
- package/dist/remoteRun/probe.js.map +1 -0
- package/dist/remoteRun/project.d.ts +26 -0
- package/dist/remoteRun/project.d.ts.map +1 -0
- package/dist/remoteRun/project.js +159 -0
- package/dist/remoteRun/project.js.map +1 -0
- package/dist/remoteRun/projectConfig.d.ts +38 -0
- package/dist/remoteRun/projectConfig.d.ts.map +1 -0
- package/dist/remoteRun/projectConfig.js +87 -0
- package/dist/remoteRun/projectConfig.js.map +1 -0
- package/dist/remoteRun/remoteRunCli.d.ts +22 -0
- package/dist/remoteRun/remoteRunCli.d.ts.map +1 -0
- package/dist/remoteRun/remoteRunCli.js +119 -0
- package/dist/remoteRun/remoteRunCli.js.map +1 -0
- package/dist/remoteRun/remoteRunError.d.ts +14 -0
- package/dist/remoteRun/remoteRunError.d.ts.map +1 -0
- package/dist/remoteRun/remoteRunError.js +28 -0
- package/dist/remoteRun/remoteRunError.js.map +1 -0
- package/dist/remoteRun/rsync.d.ts +17 -0
- package/dist/remoteRun/rsync.d.ts.map +1 -0
- package/dist/remoteRun/rsync.js +39 -0
- package/dist/remoteRun/rsync.js.map +1 -0
- package/dist/remoteRun/runnerClient.d.ts +52 -0
- package/dist/remoteRun/runnerClient.d.ts.map +1 -0
- package/dist/remoteRun/runnerClient.js +143 -0
- package/dist/remoteRun/runnerClient.js.map +1 -0
- 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 +57 -0
- package/dist/remoteRun/runners.d.ts.map +1 -0
- package/dist/remoteRun/runners.js +209 -0
- package/dist/remoteRun/runners.js.map +1 -0
- 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 +53 -0
- package/dist/remoteRun/runnersConfig.d.ts.map +1 -0
- package/dist/remoteRun/runnersConfig.js +109 -0
- package/dist/remoteRun/runnersConfig.js.map +1 -0
- package/dist/remoteRun/safeCopy.d.ts +31 -0
- package/dist/remoteRun/safeCopy.d.ts.map +1 -0
- package/dist/remoteRun/safeCopy.js +137 -0
- package/dist/remoteRun/safeCopy.js.map +1 -0
- package/dist/remoteRun/sendPlan.d.ts +67 -0
- package/dist/remoteRun/sendPlan.d.ts.map +1 -0
- package/dist/remoteRun/sendPlan.js +139 -0
- package/dist/remoteRun/sendPlan.js.map +1 -0
- package/dist/remoteRun/ssh.d.ts +82 -0
- package/dist/remoteRun/ssh.d.ts.map +1 -0
- package/dist/remoteRun/ssh.js +236 -0
- package/dist/remoteRun/ssh.js.map +1 -0
- package/dist/remoteRun/submit.d.ts +29 -0
- package/dist/remoteRun/submit.d.ts.map +1 -0
- package/dist/remoteRun/submit.js +142 -0
- package/dist/remoteRun/submit.js.map +1 -0
- package/dist/requests/answerRequest.d.ts +5 -0
- package/dist/requests/answerRequest.d.ts.map +1 -1
- package/dist/requests/answerRequest.js +16 -1
- package/dist/requests/answerRequest.js.map +1 -1
- package/dist/requests/requestLedger.d.ts +13 -0
- package/dist/requests/requestLedger.d.ts.map +1 -1
- package/dist/requests/requestLedger.js +9 -0
- package/dist/requests/requestLedger.js.map +1 -1
- package/dist/requests/topicRequestSettle.d.ts +30 -0
- package/dist/requests/topicRequestSettle.d.ts.map +1 -0
- package/dist/requests/topicRequestSettle.js +23 -0
- package/dist/requests/topicRequestSettle.js.map +1 -0
- package/dist/requests/wakeUpEngine.d.ts +4 -0
- package/dist/requests/wakeUpEngine.d.ts.map +1 -1
- package/dist/requests/wakeUpEngine.js +5 -1
- package/dist/requests/wakeUpEngine.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/delivery.d.ts +2 -0
- package/dist/scheduler/delivery.d.ts.map +1 -1
- package/dist/scheduler/delivery.js +8 -4
- package/dist/scheduler/delivery.js.map +1 -1
- package/dist/scheduler/mcpSurface.d.ts +65 -10
- package/dist/scheduler/mcpSurface.d.ts.map +1 -1
- package/dist/scheduler/mcpSurface.js +319 -89
- package/dist/scheduler/mcpSurface.js.map +1 -1
- package/dist/scheduler/recurrence.d.ts +5 -0
- package/dist/scheduler/recurrence.d.ts.map +1 -1
- package/dist/scheduler/recurrence.js +12 -2
- package/dist/scheduler/recurrence.js.map +1 -1
- package/dist/scheduler/strictToolInput.d.ts +45 -0
- package/dist/scheduler/strictToolInput.d.ts.map +1 -0
- package/dist/scheduler/strictToolInput.js +155 -0
- package/dist/scheduler/strictToolInput.js.map +1 -0
- package/dist/scheduler/types.d.ts +5 -0
- package/dist/scheduler/types.d.ts.map +1 -1
- package/dist/scheduler/workerWatch.d.ts +23 -0
- package/dist/scheduler/workerWatch.d.ts.map +1 -0
- package/dist/scheduler/workerWatch.js +26 -0
- package/dist/scheduler/workerWatch.js.map +1 -0
- package/dist/selfUpdate/emittedSource.d.ts +11 -0
- package/dist/selfUpdate/emittedSource.d.ts.map +1 -0
- package/dist/selfUpdate/emittedSource.js +24 -0
- package/dist/selfUpdate/emittedSource.js.map +1 -0
- package/dist/selfUpdate/gitSource.d.ts +0 -6
- package/dist/selfUpdate/gitSource.d.ts.map +1 -1
- package/dist/selfUpdate/gitSource.js +2 -18
- package/dist/selfUpdate/gitSource.js.map +1 -1
- package/dist/selfUpdate/selfCheck.js +2 -2
- package/dist/selfUpdate/selfCheck.js.map +1 -1
- package/dist/selfUpdate/updatePending.d.ts +1 -1
- package/dist/sendErrorClassifier.d.ts +10 -0
- package/dist/sendErrorClassifier.d.ts.map +1 -1
- package/dist/sendErrorClassifier.js +22 -0
- package/dist/sendErrorClassifier.js.map +1 -1
- package/dist/state.d.ts +78 -7
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +125 -8
- package/dist/state.js.map +1 -1
- package/dist/stateFile.d.ts +9 -0
- package/dist/stateFile.d.ts.map +1 -0
- package/dist/stateFile.js +57 -0
- package/dist/stateFile.js.map +1 -0
- package/dist/stt/sttInstall.d.ts +7 -3
- package/dist/stt/sttInstall.d.ts.map +1 -1
- package/dist/stt/sttInstall.js +8 -4
- package/dist/stt/sttInstall.js.map +1 -1
- package/dist/stt/sttSettings.d.ts +2 -1
- package/dist/stt/sttSettings.d.ts.map +1 -1
- package/dist/stt/sttSettings.js +3 -2
- package/dist/stt/sttSettings.js.map +1 -1
- package/dist/stt/transcribeChain.js +2 -0
- package/dist/stt/transcribeChain.js.map +1 -1
- package/dist/testTimings.d.ts +16 -3
- package/dist/testTimings.d.ts.map +1 -1
- package/dist/testTimings.js +35 -2
- package/dist/testTimings.js.map +1 -1
- package/dist/todos/board.d.ts +83 -0
- package/dist/todos/board.d.ts.map +1 -0
- package/dist/todos/board.js +227 -0
- package/dist/todos/board.js.map +1 -0
- package/dist/todos/format.d.ts +33 -0
- package/dist/todos/format.d.ts.map +1 -0
- package/dist/todos/format.js +90 -0
- package/dist/todos/format.js.map +1 -0
- package/dist/todos/merge.d.ts +46 -0
- package/dist/todos/merge.d.ts.map +1 -0
- package/dist/todos/merge.js +137 -0
- package/dist/todos/merge.js.map +1 -0
- package/dist/todos/midTurn.d.ts +75 -0
- package/dist/todos/midTurn.d.ts.map +1 -0
- package/dist/todos/midTurn.js +214 -0
- package/dist/todos/midTurn.js.map +1 -0
- package/dist/todos/nag.d.ts +85 -0
- package/dist/todos/nag.d.ts.map +1 -0
- package/dist/todos/nag.js +103 -0
- package/dist/todos/nag.js.map +1 -0
- package/dist/todos/order.d.ts +25 -0
- package/dist/todos/order.d.ts.map +1 -0
- package/dist/todos/order.js +61 -0
- package/dist/todos/order.js.map +1 -0
- package/dist/todos/projects.d.ts +102 -0
- package/dist/todos/projects.d.ts.map +1 -0
- package/dist/todos/projects.js +342 -0
- package/dist/todos/projects.js.map +1 -0
- package/dist/todos/registry.d.ts +64 -0
- package/dist/todos/registry.d.ts.map +1 -0
- package/dist/todos/registry.js +116 -0
- package/dist/todos/registry.js.map +1 -0
- package/dist/todos/reminderEngine.d.ts +78 -0
- package/dist/todos/reminderEngine.d.ts.map +1 -0
- package/dist/todos/reminderEngine.js +162 -0
- package/dist/todos/reminderEngine.js.map +1 -0
- package/dist/todos/store.d.ts +34 -0
- package/dist/todos/store.d.ts.map +1 -0
- package/dist/todos/store.js +208 -0
- package/dist/todos/store.js.map +1 -0
- package/dist/todos/tools.d.ts +26 -0
- package/dist/todos/tools.d.ts.map +1 -0
- package/dist/todos/tools.js +25 -0
- package/dist/todos/tools.js.map +1 -0
- package/dist/todos/types.d.ts +85 -0
- package/dist/todos/types.d.ts.map +1 -0
- package/dist/todos/types.js +30 -0
- package/dist/todos/types.js.map +1 -0
- package/dist/trackers/taskAgentLimit.d.ts +58 -0
- package/dist/trackers/taskAgentLimit.d.ts.map +1 -0
- package/dist/trackers/taskAgentLimit.js +62 -0
- package/dist/trackers/taskAgentLimit.js.map +1 -0
- package/dist/trackers/taskAgentSlots.d.ts +109 -0
- package/dist/trackers/taskAgentSlots.d.ts.map +1 -0
- package/dist/trackers/taskAgentSlots.js +227 -0
- package/dist/trackers/taskAgentSlots.js.map +1 -0
- package/dist/trackers/types.d.ts +14 -0
- package/dist/trackers/types.d.ts.map +1 -0
- package/dist/trackers/types.js +3 -0
- package/dist/trackers/types.js.map +1 -0
- package/dist/types.d.ts +80 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/adoptReplayGate.d.ts +16 -0
- package/dist/utils/adoptReplayGate.d.ts.map +1 -0
- package/dist/utils/adoptReplayGate.js +35 -0
- package/dist/utils/adoptReplayGate.js.map +1 -0
- 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/agentPlugin.d.ts +113 -0
- package/dist/utils/agentPlugin.d.ts.map +1 -0
- package/dist/utils/agentPlugin.js +192 -0
- package/dist/utils/agentPlugin.js.map +1 -0
- package/dist/utils/autoContinueOnLimit.d.ts +7 -4
- package/dist/utils/autoContinueOnLimit.d.ts.map +1 -1
- package/dist/utils/autoContinueOnLimit.js +8 -5
- package/dist/utils/autoContinueOnLimit.js.map +1 -1
- package/dist/utils/botSkills.d.ts +62 -0
- package/dist/utils/botSkills.d.ts.map +1 -0
- package/dist/utils/botSkills.js +53 -0
- package/dist/utils/botSkills.js.map +1 -0
- package/dist/utils/botSkillsSetting.d.ts +7 -0
- package/dist/utils/botSkillsSetting.d.ts.map +1 -0
- package/dist/utils/botSkillsSetting.js +9 -0
- package/dist/utils/botSkillsSetting.js.map +1 -0
- package/dist/utils/claudeCodeVersion.d.ts +7 -0
- package/dist/utils/claudeCodeVersion.d.ts.map +1 -1
- package/dist/utils/claudeCodeVersion.js +14 -1
- package/dist/utils/claudeCodeVersion.js.map +1 -1
- package/dist/utils/claudeCompactHook.d.ts +33 -15
- package/dist/utils/claudeCompactHook.d.ts.map +1 -1
- package/dist/utils/claudeCompactHook.js +36 -17
- package/dist/utils/claudeCompactHook.js.map +1 -1
- package/dist/utils/claudeCompactSummary.d.ts +15 -0
- package/dist/utils/claudeCompactSummary.d.ts.map +1 -0
- package/dist/utils/claudeCompactSummary.js +96 -0
- package/dist/utils/claudeCompactSummary.js.map +1 -0
- package/dist/utils/claudeLimitSwitch.d.ts +11 -9
- package/dist/utils/claudeLimitSwitch.d.ts.map +1 -1
- package/dist/utils/claudeLimitSwitch.js +18 -16
- package/dist/utils/claudeLimitSwitch.js.map +1 -1
- package/dist/utils/claudeProfiles.d.ts +5 -0
- package/dist/utils/claudeProfiles.d.ts.map +1 -1
- package/dist/utils/claudeProfiles.js +14 -0
- package/dist/utils/claudeProfiles.js.map +1 -1
- package/dist/utils/claudeSessionTitle.d.ts +2 -1
- package/dist/utils/claudeSessionTitle.d.ts.map +1 -1
- package/dist/utils/claudeSessionTitle.js +14 -14
- package/dist/utils/claudeSessionTitle.js.map +1 -1
- package/dist/utils/claudeUsage.d.ts +95 -15
- package/dist/utils/claudeUsage.d.ts.map +1 -1
- package/dist/utils/claudeUsage.js +241 -41
- package/dist/utils/claudeUsage.js.map +1 -1
- package/dist/utils/claudeUsageRefresher.d.ts +10 -0
- package/dist/utils/claudeUsageRefresher.d.ts.map +1 -1
- package/dist/utils/claudeUsageRefresher.js +11 -0
- package/dist/utils/claudeUsageRefresher.js.map +1 -1
- package/dist/utils/claudeUserEntry.d.ts +50 -0
- package/dist/utils/claudeUserEntry.d.ts.map +1 -0
- package/dist/utils/claudeUserEntry.js +120 -0
- package/dist/utils/claudeUserEntry.js.map +1 -0
- package/dist/utils/clearThreadOutputQueues.d.ts +4 -3
- package/dist/utils/clearThreadOutputQueues.d.ts.map +1 -1
- package/dist/utils/clearThreadOutputQueues.js +1 -1
- package/dist/utils/clearThreadOutputQueues.js.map +1 -1
- package/dist/utils/compactOnIdle.d.ts +33 -13
- package/dist/utils/compactOnIdle.d.ts.map +1 -1
- package/dist/utils/compactOnIdle.js +35 -15
- package/dist/utils/compactOnIdle.js.map +1 -1
- package/dist/utils/fallbackBridge.d.ts +5 -0
- package/dist/utils/fallbackBridge.d.ts.map +1 -1
- package/dist/utils/fallbackBridge.js +19 -3
- package/dist/utils/fallbackBridge.js.map +1 -1
- package/dist/utils/fallbackChain.d.ts +9 -3
- package/dist/utils/fallbackChain.d.ts.map +1 -1
- package/dist/utils/fallbackChain.js +21 -3
- package/dist/utils/fallbackChain.js.map +1 -1
- package/dist/utils/fileSendPlan.d.ts +6 -0
- package/dist/utils/fileSendPlan.d.ts.map +1 -1
- package/dist/utils/fileSendPlan.js +11 -0
- package/dist/utils/fileSendPlan.js.map +1 -1
- package/dist/utils/fileSendService.d.ts +7 -1
- package/dist/utils/fileSendService.d.ts.map +1 -1
- package/dist/utils/fileSendService.js +6 -2
- package/dist/utils/fileSendService.js.map +1 -1
- package/dist/utils/groupFinalizePlan.d.ts +8 -10
- package/dist/utils/groupFinalizePlan.d.ts.map +1 -1
- package/dist/utils/groupFinalizePlan.js +8 -12
- package/dist/utils/groupFinalizePlan.js.map +1 -1
- package/dist/utils/jsonStreamHost.d.ts +13 -0
- package/dist/utils/jsonStreamHost.d.ts.map +1 -1
- package/dist/utils/jsonStreamHost.js +13 -0
- package/dist/utils/jsonStreamHost.js.map +1 -1
- package/dist/utils/messageSendService.d.ts +5 -3
- package/dist/utils/messageSendService.d.ts.map +1 -1
- package/dist/utils/messageSendService.js +12 -5
- package/dist/utils/messageSendService.js.map +1 -1
- package/dist/utils/openCodeCompactPlugin.d.ts +39 -14
- package/dist/utils/openCodeCompactPlugin.d.ts.map +1 -1
- package/dist/utils/openCodeCompactPlugin.js +106 -38
- package/dist/utils/openCodeCompactPlugin.js.map +1 -1
- package/dist/utils/promptDelivery.d.ts +29 -12
- package/dist/utils/promptDelivery.d.ts.map +1 -1
- package/dist/utils/promptDelivery.js +13 -5
- package/dist/utils/promptDelivery.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/dist/utils/sentKindsSummary.d.ts +10 -0
- package/dist/utils/sentKindsSummary.d.ts.map +1 -0
- package/dist/utils/sentKindsSummary.js +18 -0
- package/dist/utils/sentKindsSummary.js.map +1 -0
- package/dist/utils/telegramError.d.ts +6 -0
- package/dist/utils/telegramError.d.ts.map +1 -1
- package/dist/utils/telegramError.js +12 -0
- package/dist/utils/telegramError.js.map +1 -1
- package/dist/utils/topicView.d.ts +1 -1
- package/dist/utils/topicView.js +1 -1
- package/dist/utils/transcribeAudio.d.ts +10 -0
- package/dist/utils/transcribeAudio.d.ts.map +1 -1
- package/dist/utils/transcribeAudio.js +22 -3
- package/dist/utils/transcribeAudio.js.map +1 -1
- package/dist/utils/transcriptErrorTime.d.ts +8 -0
- package/dist/utils/transcriptErrorTime.d.ts.map +1 -0
- package/dist/utils/transcriptErrorTime.js +56 -0
- package/dist/utils/transcriptErrorTime.js.map +1 -0
- package/dist/utils/wedgeRecovery.d.ts +2 -0
- package/dist/utils/wedgeRecovery.d.ts.map +1 -1
- package/dist/utils/wedgeRecovery.js +1 -1
- package/dist/utils/wedgeRecovery.js.map +1 -1
- package/package.json +15 -4
- package/remoteRun/runner.sh +1317 -0
- package/stt/gigaam_sidecar.py +555 -50
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { type InterruptSignal } from './exitCodes';
|
|
2
|
+
import { type RunnerCapability, type RunnerReport } from './probe';
|
|
3
|
+
import type { RunnerPick } from './runners';
|
|
4
|
+
import type { RunnersConfig } from './runnersConfig';
|
|
5
|
+
/** @name RunnerWaitPlan @description What a failed pick is worth waiting for. */
|
|
6
|
+
export interface RunnerWaitPlan {
|
|
7
|
+
/** The offline paired runners that, when they were last seen, could do the job. */
|
|
8
|
+
runnerNames: string[];
|
|
9
|
+
/** «mac offline since 2026-11-01 14:02 UTC», for the line that says the command is waiting. */
|
|
10
|
+
description: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* @description Is there an offline PAIRED runner worth waiting for? Only when a capability is needed and no runner is named: a runner is
|
|
14
|
+
* worth it when its last snapshot had the capability and Pueue and nobody paused it (a paused one would be skipped when it came back).
|
|
15
|
+
* `null` = fail now.
|
|
16
|
+
*/
|
|
17
|
+
export declare function planRunnerWait(config: RunnersConfig, reports: readonly RunnerReport[], wanted: {
|
|
18
|
+
runner: string | null;
|
|
19
|
+
needs: RunnerCapability | null;
|
|
20
|
+
}): RunnerWaitPlan | null;
|
|
21
|
+
/** @description `15 min`, `90 s`, `2 h`, `1 h 30 min`: a wait in the words a person would use. */
|
|
22
|
+
export declare function formatWaitDuration(totalSeconds: number): string;
|
|
23
|
+
/** The least an attempt made DURING the wait is worth: a probe through ssh cannot answer in less, so with less left the wait is over. */
|
|
24
|
+
export declare const minWaitAttemptMs = 1000;
|
|
25
|
+
/** One try at choosing a runner: the choice, or why there is none and whether it is worth waiting. */
|
|
26
|
+
export type RunnerAttempt<TChoice> = {
|
|
27
|
+
ok: true;
|
|
28
|
+
choice: TChoice;
|
|
29
|
+
} | {
|
|
30
|
+
ok: false;
|
|
31
|
+
failure: Extract<RunnerPick, {
|
|
32
|
+
ok: false;
|
|
33
|
+
}>;
|
|
34
|
+
wait: RunnerWaitPlan | null;
|
|
35
|
+
};
|
|
36
|
+
export interface RunnerWaitLoop<TChoice> {
|
|
37
|
+
/**
|
|
38
|
+
* Probe and pick once. `budgetMs` is what is left of the wait once it has begun (the probe must end within it), `null` for the first attempt.
|
|
39
|
+
* `stop` aborts when the user interrupts: the attempt ends what it started (its ssh calls) at once, and whatever it returns after that is not used.
|
|
40
|
+
*/
|
|
41
|
+
attempt: (budgetMs: number | null, stop: AbortSignal) => Promise<RunnerAttempt<TChoice>>;
|
|
42
|
+
needs: RunnerCapability | null;
|
|
43
|
+
/** `--runner-wait` in seconds; `0` = never wait. */
|
|
44
|
+
waitSeconds: number;
|
|
45
|
+
pollMs: number;
|
|
46
|
+
now: () => number;
|
|
47
|
+
/** Resolves after `ms`, or at once when `stop` aborts. */
|
|
48
|
+
sleep: (ms: number, stop: AbortSignal) => Promise<void>;
|
|
49
|
+
/** Calls `onInterrupt` with the signal when the user interrupts (Ctrl-C, SIGTERM, SIGHUP), until the returned function is called. */
|
|
50
|
+
watchInterrupts: (onInterrupt: (signal: InterruptSignal) => void) => () => void;
|
|
51
|
+
say: (line: string) => void;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* @description Choose a runner, waiting for an offline paired one when that is worth it: the choice as soon as an attempt gives one IN TIME;
|
|
55
|
+
* a {@link RemoteRunError} with the pick's own message (and, after waiting, how long it waited) when nothing can be waited for or the wait
|
|
56
|
+
* ran out; and, if the user interrupts, the interrupt's exit code (130 / 143 / 129).
|
|
57
|
+
*
|
|
58
|
+
* An interrupt is heard from the first attempt to the last, in a sleep AND in a probe: it aborts what is in flight, and after every await the
|
|
59
|
+
* loop looks at it first — a runner an attempt picked after the interrupt is not taken, and no other attempt starts.
|
|
60
|
+
*
|
|
61
|
+
* `--runner-wait` is a promise about when the command stops waiting, so once the wait has begun no attempt starts with less than
|
|
62
|
+
* {@link minWaitAttemptMs} left, every attempt is told the time it has (its probe is cut at it), and an answer that comes after the
|
|
63
|
+
* deadline is refused — the job is not started late. The last sleep is cut so that one more look still fits before the deadline.
|
|
64
|
+
*/
|
|
65
|
+
export declare function chooseRunnerWithWait<TChoice>(loop: RunnerWaitLoop<TChoice>): Promise<TChoice>;
|
|
66
|
+
/** @description `sleep` for {@link chooseRunnerWithWait}: ends after `ms`, or at once when `stop` aborts; its timer never outlives the call. */
|
|
67
|
+
export declare function sleepUntilStopped(ms: number, stop: AbortSignal): Promise<void>;
|
|
68
|
+
//# sourceMappingURL=runnerWait.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runnerWait.d.ts","sourceRoot":"","sources":["../../src/remoteRun/runnerWait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAA2D,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5H,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAcrD,iFAAiF;AACjF,MAAM,WAAW,cAAc;IAC7B,mFAAmF;IACnF,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,+FAA+F;IAC/F,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,YAAY,EAAE,EAAE,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAA;CAAE,GAAG,cAAc,GAAG,IAAI,CAahL;AAED,kGAAkG;AAClG,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAO/D;AAOD,yIAAyI;AACzI,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,sGAAsG;AACtG,MAAM,MAAM,aAAa,CAAC,OAAO,IAC7B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC7B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,EAAE,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC;IAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAAA;CAAE,CAAC;AAE5F,MAAM,WAAW,cAAc,CAAC,OAAO;IACrC;;;OAGG;IACH,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IACzF,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC/B,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,0DAA0D;IAC1D,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,qIAAqI;IACrI,eAAe,EAAE,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAChF,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA2CnG;AAED,gJAAgJ;AAChJ,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB9E"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.minWaitAttemptMs = void 0;
|
|
4
|
+
exports.planRunnerWait = planRunnerWait;
|
|
5
|
+
exports.formatWaitDuration = formatWaitDuration;
|
|
6
|
+
exports.chooseRunnerWithWait = chooseRunnerWithWait;
|
|
7
|
+
exports.sleepUntilStopped = sleepUntilStopped;
|
|
8
|
+
const exitCodes_1 = require("./exitCodes");
|
|
9
|
+
const probe_1 = require("./probe");
|
|
10
|
+
const remoteRunError_1 = require("./remoteRunError");
|
|
11
|
+
/**
|
|
12
|
+
* @description The wait of `charness remote-run --needs <capability>`: when the only runners that could take the job are PAIRED ones
|
|
13
|
+
* that are offline right now (a laptop that slept, a link that restarts), the command waits for one of them instead of failing — it says
|
|
14
|
+
* so once, looks again every few seconds and gives up after `--runner-wait` (default 15 min, `0` = fail at once). A runner nothing is known
|
|
15
|
+
* to be able to do the job (no runner with the capability at all, or one never seen) is not waited for: that is exit 125 at once, as in
|
|
16
|
+
* phase 1. Hand-made runners (plain ssh) are never waited for either — their offline state is not part of a design.
|
|
17
|
+
*/
|
|
18
|
+
const msPerSecond = 1000;
|
|
19
|
+
const secondsPerMinute = 60;
|
|
20
|
+
const secondsPerHour = 3600;
|
|
21
|
+
/**
|
|
22
|
+
* @description Is there an offline PAIRED runner worth waiting for? Only when a capability is needed and no runner is named: a runner is
|
|
23
|
+
* worth it when its last snapshot had the capability and Pueue and nobody paused it (a paused one would be skipped when it came back).
|
|
24
|
+
* `null` = fail now.
|
|
25
|
+
*/
|
|
26
|
+
function planRunnerWait(config, reports, wanted) {
|
|
27
|
+
const needs = wanted.needs;
|
|
28
|
+
if (needs === null || wanted.runner !== null)
|
|
29
|
+
return null;
|
|
30
|
+
const candidates = reports.filter((report) => {
|
|
31
|
+
if (report.status !== 'offline' || report.lastProbe === null)
|
|
32
|
+
return false;
|
|
33
|
+
const isPaired = config.runners.some((runner) => runner.name === report.name && runner.paired !== undefined);
|
|
34
|
+
return isPaired && !(0, probe_1.checkIsRunnerPaused)(report) && report.lastProbe.pueueVersion !== null && (0, probe_1.checkHasCapability)(report.lastProbe, needs);
|
|
35
|
+
});
|
|
36
|
+
if (candidates.length === 0)
|
|
37
|
+
return null;
|
|
38
|
+
return {
|
|
39
|
+
runnerNames: candidates.map((report) => report.name),
|
|
40
|
+
description: candidates.map((report) => `${report.name} offline${report.lastSeenAtMs === null ? '' : ` since ${(0, probe_1.formatLastSeen)(report.lastSeenAtMs)}`}`).join(', '),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** @description `15 min`, `90 s`, `2 h`, `1 h 30 min`: a wait in the words a person would use. */
|
|
44
|
+
function formatWaitDuration(totalSeconds) {
|
|
45
|
+
if (totalSeconds < secondsPerMinute)
|
|
46
|
+
return `${totalSeconds} s`;
|
|
47
|
+
const hours = Math.floor(totalSeconds / secondsPerHour);
|
|
48
|
+
const minutes = Math.floor((totalSeconds % secondsPerHour) / secondsPerMinute);
|
|
49
|
+
const seconds = totalSeconds % secondsPerMinute;
|
|
50
|
+
const parts = [...(hours > 0 ? [`${hours} h`] : []), ...(minutes > 0 ? [`${minutes} min`] : []), ...(hours === 0 && seconds > 0 ? [`${seconds} s`] : [])];
|
|
51
|
+
return parts.join(' ');
|
|
52
|
+
}
|
|
53
|
+
/** The poll as a person reads it: «10 s», or «500 ms» for the test window's sub-second polls. */
|
|
54
|
+
function formatPoll(pollMs) {
|
|
55
|
+
return pollMs < msPerSecond ? `${pollMs} ms` : formatWaitDuration(Math.round(pollMs / msPerSecond));
|
|
56
|
+
}
|
|
57
|
+
/** The least an attempt made DURING the wait is worth: a probe through ssh cannot answer in less, so with less left the wait is over. */
|
|
58
|
+
exports.minWaitAttemptMs = 1000;
|
|
59
|
+
/**
|
|
60
|
+
* @description Choose a runner, waiting for an offline paired one when that is worth it: the choice as soon as an attempt gives one IN TIME;
|
|
61
|
+
* a {@link RemoteRunError} with the pick's own message (and, after waiting, how long it waited) when nothing can be waited for or the wait
|
|
62
|
+
* ran out; and, if the user interrupts, the interrupt's exit code (130 / 143 / 129).
|
|
63
|
+
*
|
|
64
|
+
* An interrupt is heard from the first attempt to the last, in a sleep AND in a probe: it aborts what is in flight, and after every await the
|
|
65
|
+
* loop looks at it first — a runner an attempt picked after the interrupt is not taken, and no other attempt starts.
|
|
66
|
+
*
|
|
67
|
+
* `--runner-wait` is a promise about when the command stops waiting, so once the wait has begun no attempt starts with less than
|
|
68
|
+
* {@link minWaitAttemptMs} left, every attempt is told the time it has (its probe is cut at it), and an answer that comes after the
|
|
69
|
+
* deadline is refused — the job is not started late. The last sleep is cut so that one more look still fits before the deadline.
|
|
70
|
+
*/
|
|
71
|
+
async function chooseRunnerWithWait(loop) {
|
|
72
|
+
const startedAtMs = loop.now();
|
|
73
|
+
const deadlineMs = startedAtMs + loop.waitSeconds * msPerSecond;
|
|
74
|
+
/** Set once the wait has begun (announced): the attempt that made it worth waiting, then the latest failed one. */
|
|
75
|
+
let waiting = null;
|
|
76
|
+
const stop = new AbortController();
|
|
77
|
+
const interrupted = { signal: null };
|
|
78
|
+
const stopWatching = loop.watchInterrupts((signal) => {
|
|
79
|
+
interrupted.signal ??= signal;
|
|
80
|
+
stop.abort();
|
|
81
|
+
});
|
|
82
|
+
const throwIfInterrupted = () => {
|
|
83
|
+
if (interrupted.signal === null)
|
|
84
|
+
return;
|
|
85
|
+
throw new remoteRunError_1.RemoteRunError(waiting === null ? 'interrupted while looking for a runner' : 'interrupted while waiting for a runner', (0, exitCodes_1.planInterrupt)(interrupted.signal).exitCode);
|
|
86
|
+
};
|
|
87
|
+
const giveUp = (failure, endNote) => {
|
|
88
|
+
const waited = waiting === null ? '' : `\nwaited ${formatWaitDuration(Math.round((loop.now() - startedAtMs) / msPerSecond))} for a runner with "${loop.needs}" ${endNote}`;
|
|
89
|
+
throw new remoteRunError_1.RemoteRunError(`${failure.failure.message}${waited}`, failure.failure.exitCode);
|
|
90
|
+
};
|
|
91
|
+
try {
|
|
92
|
+
for (;;) {
|
|
93
|
+
if (waiting !== null && deadlineMs - loop.now() < exports.minWaitAttemptMs)
|
|
94
|
+
giveUp(waiting.lastFailure, 'to come back — none did');
|
|
95
|
+
const attempt = await loop.attempt(waiting === null ? null : deadlineMs - loop.now(), stop.signal);
|
|
96
|
+
throwIfInterrupted();
|
|
97
|
+
if (attempt.ok) {
|
|
98
|
+
if (waiting === null || loop.now() <= deadlineMs)
|
|
99
|
+
return attempt.choice;
|
|
100
|
+
return giveUp(waiting.lastFailure, 'to come back — one answered only after the wait had ended, so the job was not started');
|
|
101
|
+
}
|
|
102
|
+
// The last sleep ends minWaitAttemptMs before the deadline, so the wait ends with one more look instead of with a sleep nobody answers; with
|
|
103
|
+
// less than that left there is nothing to wait for.
|
|
104
|
+
const sleepMs = Math.min(loop.pollMs, deadlineMs - loop.now() - exports.minWaitAttemptMs);
|
|
105
|
+
if (attempt.wait === null || loop.waitSeconds <= 0 || sleepMs <= 0)
|
|
106
|
+
return giveUp(attempt, 'to come back — none did');
|
|
107
|
+
if (waiting === null) {
|
|
108
|
+
loop.say(`waiting for a runner with ${loop.needs} (${attempt.wait.description}) — looking again every ${formatPoll(loop.pollMs)}, up to ${formatWaitDuration(loop.waitSeconds)}`);
|
|
109
|
+
}
|
|
110
|
+
waiting = { lastFailure: attempt };
|
|
111
|
+
await loop.sleep(sleepMs, stop.signal);
|
|
112
|
+
throwIfInterrupted();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
stopWatching();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/** @description `sleep` for {@link chooseRunnerWithWait}: ends after `ms`, or at once when `stop` aborts; its timer never outlives the call. */
|
|
120
|
+
function sleepUntilStopped(ms, stop) {
|
|
121
|
+
return new Promise((resolve) => {
|
|
122
|
+
if (stop.aborted) {
|
|
123
|
+
resolve();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const onStop = () => {
|
|
127
|
+
clearTimeout(timer);
|
|
128
|
+
resolve();
|
|
129
|
+
};
|
|
130
|
+
const timer = setTimeout(() => {
|
|
131
|
+
stop.removeEventListener('abort', onStop);
|
|
132
|
+
resolve();
|
|
133
|
+
}, ms);
|
|
134
|
+
stop.addEventListener('abort', onStop, { once: true });
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=runnerWait.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runnerWait.js","sourceRoot":"","sources":["../../src/remoteRun/runnerWait.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description How long `charness remote-run --needs <capability>` waits for a paired runner that is offline, and how often it looks
|
|
3
|
+
* again — in a leaf module of its own so the CLI reads them without loading the bot (like `leaseTiming.ts`).
|
|
4
|
+
*
|
|
5
|
+
* The test seam `CHARNESS_TEST_TIMINGS` (`testTimings.ts`) may only SHORTEN the poll (key `remoteRunRunnerPollMs`); the CLI cannot import
|
|
6
|
+
* `testTimings.ts` (its graph reaches the bot), so it reads this one key tolerantly, as the lease does.
|
|
7
|
+
*/
|
|
8
|
+
/** `--runner-wait` when the command line does not say: a laptop that slept or a link that restarts is back well within this. */
|
|
9
|
+
export declare const defaultRunnerWaitSeconds: number;
|
|
10
|
+
/** How often the wait looks at the runners again. */
|
|
11
|
+
export declare const runnerWaitPollMs: number;
|
|
12
|
+
/** A shorter poll would probe every runner (an ssh call each) in a tight loop. */
|
|
13
|
+
export declare const runnerWaitPollMinMs = 200;
|
|
14
|
+
/** @description The poll in force: the production one, or the test seam's shorter `remoteRunRunnerPollMs` when it is a whole number of ms within [min, production]. */
|
|
15
|
+
export declare function readRunnerWaitPollMs(env: NodeJS.ProcessEnv): number;
|
|
16
|
+
//# sourceMappingURL=runnerWaitTiming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runnerWaitTiming.d.ts","sourceRoot":"","sources":["../../src/remoteRun/runnerWaitTiming.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,gIAAgI;AAChI,eAAO,MAAM,wBAAwB,QAAU,CAAC;AAChD,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,QAAmB,CAAC;AACjD,kFAAkF;AAClF,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAIvC,uKAAuK;AACvK,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAYnE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description How long `charness remote-run --needs <capability>` waits for a paired runner that is offline, and how often it looks
|
|
4
|
+
* again — in a leaf module of its own so the CLI reads them without loading the bot (like `leaseTiming.ts`).
|
|
5
|
+
*
|
|
6
|
+
* The test seam `CHARNESS_TEST_TIMINGS` (`testTimings.ts`) may only SHORTEN the poll (key `remoteRunRunnerPollMs`); the CLI cannot import
|
|
7
|
+
* `testTimings.ts` (its graph reaches the bot), so it reads this one key tolerantly, as the lease does.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.runnerWaitPollMinMs = exports.runnerWaitPollMs = exports.defaultRunnerWaitSeconds = void 0;
|
|
11
|
+
exports.readRunnerWaitPollMs = readRunnerWaitPollMs;
|
|
12
|
+
const msPerSecond = 1000;
|
|
13
|
+
/** `--runner-wait` when the command line does not say: a laptop that slept or a link that restarts is back well within this. */
|
|
14
|
+
exports.defaultRunnerWaitSeconds = 15 * 60;
|
|
15
|
+
/** How often the wait looks at the runners again. */
|
|
16
|
+
exports.runnerWaitPollMs = 10 * msPerSecond;
|
|
17
|
+
/** A shorter poll would probe every runner (an ssh call each) in a tight loop. */
|
|
18
|
+
exports.runnerWaitPollMinMs = 200;
|
|
19
|
+
const testTimingsVariableName = 'CHARNESS_TEST_TIMINGS';
|
|
20
|
+
/** @description The poll in force: the production one, or the test seam's shorter `remoteRunRunnerPollMs` when it is a whole number of ms within [min, production]. */
|
|
21
|
+
function readRunnerWaitPollMs(env) {
|
|
22
|
+
const rawTestTimings = env[testTimingsVariableName];
|
|
23
|
+
if (rawTestTimings === undefined || rawTestTimings.trim() === '')
|
|
24
|
+
return exports.runnerWaitPollMs;
|
|
25
|
+
let overrides;
|
|
26
|
+
try {
|
|
27
|
+
overrides = JSON.parse(rawTestTimings);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return exports.runnerWaitPollMs;
|
|
31
|
+
}
|
|
32
|
+
const overrideMs = overrides?.remoteRunRunnerPollMs;
|
|
33
|
+
if (overrideMs === undefined || !Number.isInteger(overrideMs))
|
|
34
|
+
return exports.runnerWaitPollMs;
|
|
35
|
+
return overrideMs >= exports.runnerWaitPollMinMs && overrideMs <= exports.runnerWaitPollMs ? overrideMs : exports.runnerWaitPollMs;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=runnerWaitTiming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runnerWaitTiming.js","sourceRoot":"","sources":["../../src/remoteRun/runnerWaitTiming.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAaH,oDAYC;AAvBD,MAAM,WAAW,GAAG,IAAI,CAAC;AACzB,gIAAgI;AACnH,QAAA,wBAAwB,GAAG,EAAE,GAAG,EAAE,CAAC;AAChD,qDAAqD;AACxC,QAAA,gBAAgB,GAAG,EAAE,GAAG,WAAW,CAAC;AACjD,kFAAkF;AACrE,QAAA,mBAAmB,GAAG,GAAG,CAAC;AAEvC,MAAM,uBAAuB,GAAG,uBAAuB,CAAC;AAExD,uKAAuK;AACvK,SAAgB,oBAAoB,CAAC,GAAsB;IACzD,MAAM,cAAc,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACpD,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,wBAAgB,CAAC;IAC1F,IAAI,SAAoD,CAAC;IACzD,IAAI,CAAC;QACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,wBAAgB,CAAC;IAC1B,CAAC;IACD,MAAM,UAAU,GAAG,SAAS,EAAE,qBAAqB,CAAC;IACpD,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC;QAAE,OAAO,wBAAgB,CAAC;IACvF,OAAO,UAAU,IAAI,2BAAmB,IAAI,UAAU,IAAI,wBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,wBAAgB,CAAC;AAC7G,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { type RunnerCapability, type RunnerProbe, type RunnerReport } from './probe';
|
|
2
|
+
import { type RunnerClient } from './runnerClient';
|
|
3
|
+
import type { RunnerConfig, RunnersConfig } from './runnersConfig';
|
|
4
|
+
/**
|
|
5
|
+
* @description Which runners exist right now: probe them (in parallel, bounded), remember each one's last answer so an offline runner
|
|
6
|
+
* still shows what it was, and pick the one a command should use — the named one, or the first in the catalog (`runners.json` entries,
|
|
7
|
+
* then the paired runners) that answers, is not paused and, with `--needs`, has the capability.
|
|
8
|
+
*/
|
|
9
|
+
/** The whole probing of all runners ends by then (a dead host costs its ssh connect timeout, once, in parallel with the others). */
|
|
10
|
+
export declare const probeAllTimeoutMs: number;
|
|
11
|
+
export declare function readLastProbe(cacheDir: string, runnerName: string): {
|
|
12
|
+
seenAtMs: number;
|
|
13
|
+
probe: RunnerProbe;
|
|
14
|
+
} | null;
|
|
15
|
+
/**
|
|
16
|
+
* @description Probe one runner: its report is `online` with what it said, or `offline` with why and the last snapshot taken when it
|
|
17
|
+
* was seen. `signal` is the deadline of the whole view (see {@link probeRunners}): when it fires the ssh calls in flight are killed and the
|
|
18
|
+
* runner is reported offline — with the snapshot, like any other way of not answering.
|
|
19
|
+
*/
|
|
20
|
+
export declare function probeRunner(client: RunnerClient, nowMs?: number, signal?: AbortSignal, deadlineMs?: number): Promise<RunnerReport>;
|
|
21
|
+
/**
|
|
22
|
+
* @description Probe every client at once under ONE deadline (20 s): a runner that has not answered by then is reported offline with its
|
|
23
|
+
* last snapshot and its ssh calls are killed, so the view ends on time and nothing keeps the process alive afterwards. The others are not
|
|
24
|
+
* held back by it. `stop` ends the same ssh calls from outside — the user interrupted the command that asked.
|
|
25
|
+
*/
|
|
26
|
+
export declare function probeRunners(clients: readonly RunnerClient[], nowMs?: number, deadlineMs?: number, stop?: AbortSignal): Promise<RunnerReport[]>;
|
|
27
|
+
export type RunnerPick = {
|
|
28
|
+
ok: true;
|
|
29
|
+
runnerName: string;
|
|
30
|
+
} | {
|
|
31
|
+
ok: false;
|
|
32
|
+
message: string;
|
|
33
|
+
exitCode: number;
|
|
34
|
+
};
|
|
35
|
+
/** The `runners` view of why nothing fits, one block per runner. */
|
|
36
|
+
export declare function formatRunnersView(reports: readonly RunnerReport[]): string;
|
|
37
|
+
/**
|
|
38
|
+
* @description The runner a command should use. `wanted.runner` names one (it must exist, answer, have Pueue and not be paused);
|
|
39
|
+
* otherwise the first runner in `config` order that answers, has Pueue, is not paused and — with `wanted.needs` — the capability. None:
|
|
40
|
+
* the reason and the `runners` view, exit 125.
|
|
41
|
+
*/
|
|
42
|
+
export declare function pickRunner(config: RunnersConfig, reports: readonly RunnerReport[], wanted: {
|
|
43
|
+
runner: string | null;
|
|
44
|
+
needs: RunnerCapability | null;
|
|
45
|
+
}): RunnerPick;
|
|
46
|
+
/**
|
|
47
|
+
* @description The runner `exec` goes to. `exec` runs in the runner's copy "as the last job left it", so without `--runner` that is the
|
|
48
|
+
* runner of this project's last job (`lastRunnerName`), not the first one that answers — with several runners the first could hold no copy
|
|
49
|
+
* of the project, or an old one. No job yet: `null` (any online runner); a last runner that left `runners.json`: `null` and a note.
|
|
50
|
+
*/
|
|
51
|
+
export declare function chooseExecRunnerName(config: RunnersConfig, named: string | null, lastRunnerName: string | null): {
|
|
52
|
+
runnerName: string | null;
|
|
53
|
+
note: string | null;
|
|
54
|
+
};
|
|
55
|
+
/** @description The runner of a job id, from the config: an id of a runner that is no longer listed is an error. */
|
|
56
|
+
export declare function findRunnerOfJob(config: RunnersConfig, runnerName: string): RunnerConfig;
|
|
57
|
+
//# sourceMappingURL=runners.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runners.d.ts","sourceRoot":"","sources":["../../src/remoteRun/runners.ts"],"names":[],"mappings":"AAGA,OAAO,EAKL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAA0C,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEnE;;;;GAIG;AAEH,oIAAoI;AACpI,eAAO,MAAM,iBAAiB,QAAY,CAAC;AAc3C,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAAG,IAAI,CAQnH;AAOD;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,GAAE,MAAmB,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,UAAU,GAAE,MAA0B,GAAG,OAAO,CAAC,YAAY,CAAC,CAgCvK;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,EAAE,KAAK,GAAE,MAAmB,EAAE,UAAU,GAAE,MAA0B,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CASpL;AAED,MAAM,MAAM,UAAU,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7G,oEAAoE;AACpE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,CAE1E;AAuBD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,YAAY,EAAE,EAAE,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAA;CAAE,GAAG,UAAU,CAqBjK;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAInK;AAED,oHAAoH;AACpH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAIvF"}
|
|
@@ -0,0 +1,209 @@
|
|
|
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.probeAllTimeoutMs = void 0;
|
|
37
|
+
exports.readLastProbe = readLastProbe;
|
|
38
|
+
exports.probeRunner = probeRunner;
|
|
39
|
+
exports.probeRunners = probeRunners;
|
|
40
|
+
exports.formatRunnersView = formatRunnersView;
|
|
41
|
+
exports.pickRunner = pickRunner;
|
|
42
|
+
exports.chooseExecRunnerName = chooseExecRunnerName;
|
|
43
|
+
exports.findRunnerOfJob = findRunnerOfJob;
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const linkControl_1 = require("../runners/linkControl");
|
|
47
|
+
const probe_1 = require("./probe");
|
|
48
|
+
const remoteRunError_1 = require("./remoteRunError");
|
|
49
|
+
const exitCodes_1 = require("./exitCodes");
|
|
50
|
+
const runnerClient_1 = require("./runnerClient");
|
|
51
|
+
/**
|
|
52
|
+
* @description Which runners exist right now: probe them (in parallel, bounded), remember each one's last answer so an offline runner
|
|
53
|
+
* still shows what it was, and pick the one a command should use — the named one, or the first in the catalog (`runners.json` entries,
|
|
54
|
+
* then the paired runners) that answers, is not paused and, with `--needs`, has the capability.
|
|
55
|
+
*/
|
|
56
|
+
/** The whole probing of all runners ends by then (a dead host costs its ssh connect timeout, once, in parallel with the others). */
|
|
57
|
+
exports.probeAllTimeoutMs = 20 * 1000;
|
|
58
|
+
const probeFileSuffix = '.probe.json';
|
|
59
|
+
const millisecondsPerSecond = 1000;
|
|
60
|
+
function getStoredProbePath(cacheDir, runnerName) {
|
|
61
|
+
return path.join(cacheDir, `${runnerName}${probeFileSuffix}`);
|
|
62
|
+
}
|
|
63
|
+
function readLastProbe(cacheDir, runnerName) {
|
|
64
|
+
try {
|
|
65
|
+
const stored = JSON.parse(fs.readFileSync(getStoredProbePath(cacheDir, runnerName), 'utf8'));
|
|
66
|
+
if (typeof stored.seenAtMs !== 'number' || typeof stored.text !== 'string')
|
|
67
|
+
return null;
|
|
68
|
+
return { seenAtMs: stored.seenAtMs, probe: (0, probe_1.parseProbeOutput)(stored.text) };
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function writeLastProbe(cacheDir, runnerName, text, seenAtMs) {
|
|
75
|
+
const stored = { seenAtMs, text };
|
|
76
|
+
fs.writeFileSync(getStoredProbePath(cacheDir, runnerName), JSON.stringify(stored), { mode: 0o600 });
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* @description Probe one runner: its report is `online` with what it said, or `offline` with why and the last snapshot taken when it
|
|
80
|
+
* was seen. `signal` is the deadline of the whole view (see {@link probeRunners}): when it fires the ssh calls in flight are killed and the
|
|
81
|
+
* runner is reported offline — with the snapshot, like any other way of not answering.
|
|
82
|
+
*/
|
|
83
|
+
async function probeRunner(client, nowMs = Date.now(), signal, deadlineMs = exports.probeAllTimeoutMs) {
|
|
84
|
+
const runner = client.runner;
|
|
85
|
+
const groupLimits = { ...(runner.groups ?? {}) };
|
|
86
|
+
const isPausedByHub = runner.paired?.isPausedByHub ?? false;
|
|
87
|
+
const offline = (reason, linkLastSeenMs = null) => {
|
|
88
|
+
const last = readLastProbe(client.cacheDir, runner.name);
|
|
89
|
+
return {
|
|
90
|
+
name: runner.name,
|
|
91
|
+
status: 'offline',
|
|
92
|
+
reason: signal?.aborted === true ? `no answer within ${Math.round(deadlineMs / millisecondsPerSecond)} s` : reason,
|
|
93
|
+
// The link's own heartbeat is the better «last seen» of a paired runner: the last probe may be hours older than its last connection.
|
|
94
|
+
lastSeenAtMs: linkLastSeenMs ?? last?.seenAtMs ?? null,
|
|
95
|
+
lastProbe: last?.probe ?? null,
|
|
96
|
+
groupLimits,
|
|
97
|
+
isPausedByHub,
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
if (runner.paired !== undefined) {
|
|
101
|
+
// A paired runner is online when its link accepts a connection; asking is cheaper than an ssh call that fails through the proxy.
|
|
102
|
+
const link = await (0, linkControl_1.getRunnerLinkStatus)(runner.paired.hubDir, runner.paired.runnerId);
|
|
103
|
+
if (!link.isOnline)
|
|
104
|
+
return offline(runnerClient_1.notConnectedReason, link.lastSeenMs);
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
await client.ensureScript(signal);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
if (error instanceof remoteRunError_1.RunnerUnreachableError)
|
|
111
|
+
return offline(error.reason);
|
|
112
|
+
return offline(error instanceof Error ? error.message : 'could not prepare the runner');
|
|
113
|
+
}
|
|
114
|
+
const result = await client.call('probe', [], { timeoutMs: deadlineMs, signal });
|
|
115
|
+
if (result.exitCode !== 0)
|
|
116
|
+
return offline((0, runnerClient_1.describeSshFailure)(result));
|
|
117
|
+
writeLastProbe(client.cacheDir, runner.name, result.stdout, nowMs);
|
|
118
|
+
return { name: runner.name, status: 'online', probe: (0, probe_1.parseProbeOutput)(result.stdout), groupLimits, isPausedByHub };
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* @description Probe every client at once under ONE deadline (20 s): a runner that has not answered by then is reported offline with its
|
|
122
|
+
* last snapshot and its ssh calls are killed, so the view ends on time and nothing keeps the process alive afterwards. The others are not
|
|
123
|
+
* held back by it. `stop` ends the same ssh calls from outside — the user interrupted the command that asked.
|
|
124
|
+
*/
|
|
125
|
+
async function probeRunners(clients, nowMs = Date.now(), deadlineMs = exports.probeAllTimeoutMs, stop) {
|
|
126
|
+
const deadline = new AbortController();
|
|
127
|
+
const timer = setTimeout(() => deadline.abort(), deadlineMs);
|
|
128
|
+
const signal = stop === undefined ? deadline.signal : AbortSignal.any([deadline.signal, stop]);
|
|
129
|
+
try {
|
|
130
|
+
return await Promise.all(clients.map((client) => probeRunner(client, nowMs, signal, deadlineMs)));
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
clearTimeout(timer);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/** The `runners` view of why nothing fits, one block per runner. */
|
|
137
|
+
function formatRunnersView(reports) {
|
|
138
|
+
return reports.map(probe_1.formatRunnerBlock).join('\n\n');
|
|
139
|
+
}
|
|
140
|
+
function checkIsUsable(report) {
|
|
141
|
+
return report.status === 'online' && report.probe.pueueVersion !== null && !(0, probe_1.checkIsRunnerPaused)(report);
|
|
142
|
+
}
|
|
143
|
+
/** Who paused a runner and the way back, for the message of a pick that refused it. */
|
|
144
|
+
function describePause(report) {
|
|
145
|
+
const probe = report.status === 'online' ? report.probe : report.lastProbe;
|
|
146
|
+
return [
|
|
147
|
+
...(report.isPausedByHub ? [`from the hub — \`charness runners resume ${report.name}\``] : []),
|
|
148
|
+
...(probe?.isPaused === true ? ['on the runner — `charness-runner resume` there'] : []),
|
|
149
|
+
].join(' and ');
|
|
150
|
+
}
|
|
151
|
+
/** « (paused, so not used: mac)» for the online runners a pick skipped only because they are paused (only those that could have done the job), else nothing. */
|
|
152
|
+
function describeSkippedPaused(reports, needs) {
|
|
153
|
+
const names = reports
|
|
154
|
+
.filter((report) => report.status === 'online' && report.probe.pueueVersion !== null && (0, probe_1.checkIsRunnerPaused)(report) && (needs === null || (0, probe_1.checkHasCapability)(report.probe, needs)))
|
|
155
|
+
.map((report) => report.name);
|
|
156
|
+
return names.length === 0 ? '' : ` (paused, so not used: ${names.join(', ')})`;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* @description The runner a command should use. `wanted.runner` names one (it must exist, answer, have Pueue and not be paused);
|
|
160
|
+
* otherwise the first runner in `config` order that answers, has Pueue, is not paused and — with `wanted.needs` — the capability. None:
|
|
161
|
+
* the reason and the `runners` view, exit 125.
|
|
162
|
+
*/
|
|
163
|
+
function pickRunner(config, reports, wanted) {
|
|
164
|
+
if (wanted.runner !== null) {
|
|
165
|
+
const report = reports.find((candidate) => candidate.name === wanted.runner);
|
|
166
|
+
if (report === undefined) {
|
|
167
|
+
return { ok: false, exitCode: exitCodes_1.remoteRunExitCodes.usage, message: `no runner named "${wanted.runner}" (configured: ${config.runners.map((runner) => runner.name).join(', ')})` };
|
|
168
|
+
}
|
|
169
|
+
if (report.status === 'offline')
|
|
170
|
+
return { ok: false, exitCode: exitCodes_1.remoteRunExitCodes.failed, message: `runner "${wanted.runner}" is offline (${report.reason})\n${formatRunnersView([report])}` };
|
|
171
|
+
if (report.probe.pueueVersion === null)
|
|
172
|
+
return { ok: false, exitCode: exitCodes_1.remoteRunExitCodes.failed, message: `runner "${wanted.runner}" has no Pueue (install it there, see docs/remote-run.md)\n${formatRunnersView([report])}` };
|
|
173
|
+
if ((0, probe_1.checkIsRunnerPaused)(report))
|
|
174
|
+
return { ok: false, exitCode: exitCodes_1.remoteRunExitCodes.failed, message: `runner "${wanted.runner}" is paused ${describePause(report)}\n${formatRunnersView([report])}` };
|
|
175
|
+
if (wanted.needs !== null && !(0, probe_1.checkHasCapability)(report.probe, wanted.needs)) {
|
|
176
|
+
return { ok: false, exitCode: exitCodes_1.remoteRunExitCodes.failed, message: `runner "${wanted.runner}" cannot do "${wanted.needs}"\n${formatRunnersView([report])}` };
|
|
177
|
+
}
|
|
178
|
+
return { ok: true, runnerName: report.name };
|
|
179
|
+
}
|
|
180
|
+
for (const runner of config.runners) {
|
|
181
|
+
const report = reports.find((candidate) => candidate.name === runner.name);
|
|
182
|
+
if (report === undefined || !checkIsUsable(report))
|
|
183
|
+
continue;
|
|
184
|
+
if (wanted.needs === null || (0, probe_1.checkHasCapability)(report.probe, wanted.needs))
|
|
185
|
+
return { ok: true, runnerName: runner.name };
|
|
186
|
+
}
|
|
187
|
+
const reason = wanted.needs === null ? 'no runner is online' : `no online runner can do "${wanted.needs}"`;
|
|
188
|
+
return { ok: false, exitCode: exitCodes_1.remoteRunExitCodes.failed, message: `${reason}${describeSkippedPaused(reports, wanted.needs)}\n${formatRunnersView(reports)}` };
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* @description The runner `exec` goes to. `exec` runs in the runner's copy "as the last job left it", so without `--runner` that is the
|
|
192
|
+
* runner of this project's last job (`lastRunnerName`), not the first one that answers — with several runners the first could hold no copy
|
|
193
|
+
* of the project, or an old one. No job yet: `null` (any online runner); a last runner that left `runners.json`: `null` and a note.
|
|
194
|
+
*/
|
|
195
|
+
function chooseExecRunnerName(config, named, lastRunnerName) {
|
|
196
|
+
if (named !== null || lastRunnerName === null)
|
|
197
|
+
return { runnerName: named, note: null };
|
|
198
|
+
if (config.runners.some((runner) => runner.name === lastRunnerName))
|
|
199
|
+
return { runnerName: lastRunnerName, note: null };
|
|
200
|
+
return { runnerName: null, note: `the runner of this project's last job, "${lastRunnerName}", is not a configured runner any more (not in runners.json, not paired) — using the first online runner` };
|
|
201
|
+
}
|
|
202
|
+
/** @description The runner of a job id, from the config: an id of a runner that is no longer listed is an error. */
|
|
203
|
+
function findRunnerOfJob(config, runnerName) {
|
|
204
|
+
const runner = config.runners.find((candidate) => candidate.name === runnerName);
|
|
205
|
+
if (runner === undefined)
|
|
206
|
+
throw new remoteRunError_1.RemoteRunError(`the job belongs to runner "${runnerName}", which is not a configured runner any more (not in runners.json, not paired)`);
|
|
207
|
+
return runner;
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=runners.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runners.js","sourceRoot":"","sources":["../../src/remoteRun/runners.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,sCAQC;AAYD,kCAgCC;AAOD,oCASC;AAKD,8CAEC;AA4BD,gCAqBC;AAOD,oDAIC;AAGD,0CAIC;AApLD,uCAAyB;AACzB,2CAA6B;AAC7B,wDAA6D;AAC7D,mCAQiB;AACjB,qDAA0E;AAC1E,2CAAiD;AACjD,iDAA2F;AAG3F;;;;GAIG;AAEH,oIAAoI;AACvH,QAAA,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC;AAC3C,MAAM,eAAe,GAAG,aAAa,CAAC;AACtC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAQnC,SAAS,kBAAkB,CAAC,QAAgB,EAAE,UAAkB;IAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,UAAU,GAAG,eAAe,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,SAAgB,aAAa,CAAC,QAAgB,EAAE,UAAkB;IAChE,IAAI,CAAC;QACH,MAAM,MAAM,GAAgB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1G,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAA,wBAAgB,EAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB,EAAE,UAAkB,EAAE,IAAY,EAAE,QAAgB;IAC1F,MAAM,MAAM,GAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC/C,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACtG,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,WAAW,CAAC,MAAoB,EAAE,QAAgB,IAAI,CAAC,GAAG,EAAE,EAAE,MAAoB,EAAE,aAAqB,yBAAiB;IAC9I,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,MAAM,WAAW,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;IACjD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,IAAI,KAAK,CAAC;IAC5D,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,iBAAgC,IAAI,EAAgB,EAAE;QACrF,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,oBAAoB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;YAClH,qIAAqI;YACrI,YAAY,EAAE,cAAc,IAAI,IAAI,EAAE,QAAQ,IAAI,IAAI;YACtD,SAAS,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI;YAC9B,WAAW;YACX,aAAa;SACd,CAAC;IACJ,CAAC,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,iIAAiI;QACjI,MAAM,IAAI,GAAG,MAAM,IAAA,iCAAmB,EAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrF,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,OAAO,CAAC,iCAAkB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,uCAAsB;YAAE,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1E,OAAO,OAAO,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IACjF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,IAAA,iCAAkB,EAAC,MAAM,CAAC,CAAC,CAAC;IACtE,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACnE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAA,wBAAgB,EAAC,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;AACrH,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAAC,OAAgC,EAAE,QAAgB,IAAI,CAAC,GAAG,EAAE,EAAE,aAAqB,yBAAiB,EAAE,IAAkB;IACzJ,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/F,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACpG,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAID,oEAAoE;AACpE,SAAgB,iBAAiB,CAAC,OAAgC;IAChE,OAAO,OAAO,CAAC,GAAG,CAAC,yBAAiB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,aAAa,CAAC,MAAoB;IACzC,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,KAAK,IAAI,IAAI,CAAC,IAAA,2BAAmB,EAAC,MAAM,CAAC,CAAC;AAC1G,CAAC;AAED,uFAAuF;AACvF,SAAS,aAAa,CAAC,MAAoB;IACzC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;IAC3E,OAAO;QACL,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,4CAA4C,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACxF,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClB,CAAC;AAED,gKAAgK;AAChK,SAAS,qBAAqB,CAAC,OAAgC,EAAE,KAA8B;IAC7F,MAAM,KAAK,GAAG,OAAO;SAClB,MAAM,CAAC,CAAC,MAAM,EAAyD,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,KAAK,IAAI,IAAI,IAAA,2BAAmB,EAAC,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAA,0BAAkB,EAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;SACzO,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,0BAA0B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACjF,CAAC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,MAAqB,EAAE,OAAgC,EAAE,MAAiE;IACnJ,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7E,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,8BAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,oBAAoB,MAAM,CAAC,MAAM,kBAAkB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAClL,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,8BAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,MAAM,CAAC,MAAM,iBAAiB,MAAM,CAAC,MAAM,MAAM,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;QAC/L,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,KAAK,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,8BAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,MAAM,CAAC,MAAM,8DAA8D,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;QAChO,IAAI,IAAA,2BAAmB,EAAC,MAAM,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,8BAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,MAAM,CAAC,MAAM,eAAe,aAAa,CAAC,MAAM,CAAC,KAAK,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;QACpM,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,IAAA,0BAAkB,EAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,8BAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,MAAM,CAAC,MAAM,gBAAgB,MAAM,CAAC,KAAK,MAAM,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;QAC9J,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC/C,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3E,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YAAE,SAAS;QAC7D,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,IAAA,0BAAkB,EAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5H,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,4BAA4B,MAAM,CAAC,KAAK,GAAG,CAAC;IAC3G,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,8BAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,GAAG,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;AAChK,CAAC;AAED;;;;GAIG;AACH,SAAgB,oBAAoB,CAAC,MAAqB,EAAE,KAAoB,EAAE,cAA6B;IAC7G,IAAI,KAAK,KAAK,IAAI,IAAI,cAAc,KAAK,IAAI;QAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxF,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACvH,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,2CAA2C,cAAc,0GAA0G,EAAE,CAAC;AACzM,CAAC;AAED,oHAAoH;AACpH,SAAgB,eAAe,CAAC,MAAqB,EAAE,UAAkB;IACvE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IACjF,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,+BAAc,CAAC,8BAA8B,UAAU,gFAAgF,CAAC,CAAC;IAC7K,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ConfigFileLoad } from '../configDirFile';
|
|
2
|
+
import { type RunnersConfig } from './runnersConfig';
|
|
3
|
+
/**
|
|
4
|
+
* @description Every runner `remote-run` may use: the hand-made ones of `runners.json` (plain ssh, phase 1) and the paired ones of the
|
|
5
|
+
* hub's registry (`pairedRunners.ts`), as one list with the hand-made first — the order `pickRunner` walks. A name in both is an error
|
|
6
|
+
* that names it (a runner is addressed by name, in job ids too); pairing itself avoids the clash by renaming a newcomer (`-2`), so it can
|
|
7
|
+
* only come from a hand edit made afterwards. This is the only place that knows both sources; it is kept apart from `runnersConfig.ts`
|
|
8
|
+
* because the hub registry's schemas import that file.
|
|
9
|
+
*
|
|
10
|
+
* Both loads are stamp-cached, so the bot MCP can read the runners (`runnerSummary.ts`) on every connect for the cost of two `stat` calls.
|
|
11
|
+
*/
|
|
12
|
+
/** @description The runners of the user whose home is `homeDir`. `missing` = neither a `runners.json` nor a paired runner; `invalid` carries every problem and, when there is one, the last good (or best-effort) list. */
|
|
13
|
+
export declare function loadRunnersCatalog(homeDir?: string): ConfigFileLoad<RunnersConfig>;
|
|
14
|
+
//# sourceMappingURL=runnersCatalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runnersCatalog.d.ts","sourceRoot":"","sources":["../../src/remoteRun/runnersCatalog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAwC,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE3F;;;;;;;;GAQG;AAEH,2NAA2N;AAC3N,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,MAAqB,GAAG,cAAc,CAAC,aAAa,CAAC,CAgBhG"}
|