charness 3.7.0 → 3.9.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.
Files changed (393) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/DEVELOPMENT.md +8 -2
  3. package/README.md +5 -5
  4. package/SETUP.md +17 -5
  5. package/agent-plugin/skills/charness-manager/SKILL.md +3 -3
  6. package/dist/adapters/openCodeAdapter.d.ts.map +1 -1
  7. package/dist/adapters/openCodeAdapter.js +2 -1
  8. package/dist/adapters/openCodeAdapter.js.map +1 -1
  9. package/dist/bot.d.ts.map +1 -1
  10. package/dist/bot.js +50 -9
  11. package/dist/bot.js.map +1 -1
  12. package/dist/cli.d.ts +2 -0
  13. package/dist/cli.d.ts.map +1 -1
  14. package/dist/cli.js +56 -6
  15. package/dist/cli.js.map +1 -1
  16. package/dist/configDirFile.d.ts +7 -3
  17. package/dist/configDirFile.d.ts.map +1 -1
  18. package/dist/configDirFile.js +12 -5
  19. package/dist/configDirFile.js.map +1 -1
  20. package/dist/connectors/telegram/commands/botCore.d.ts +5 -1
  21. package/dist/connectors/telegram/commands/botCore.d.ts.map +1 -1
  22. package/dist/connectors/telegram/commands/runners.d.ts +52 -0
  23. package/dist/connectors/telegram/commands/runners.d.ts.map +1 -0
  24. package/dist/connectors/telegram/commands/runners.js +524 -0
  25. package/dist/connectors/telegram/commands/runners.js.map +1 -0
  26. package/dist/connectors/telegram/runnerPairingMessages.d.ts +29 -0
  27. package/dist/connectors/telegram/runnerPairingMessages.d.ts.map +1 -0
  28. package/dist/connectors/telegram/runnerPairingMessages.js +112 -0
  29. package/dist/connectors/telegram/runnerPairingMessages.js.map +1 -0
  30. package/dist/i18n/de.d.ts.map +1 -1
  31. package/dist/i18n/de.js +60 -0
  32. package/dist/i18n/de.js.map +1 -1
  33. package/dist/i18n/en.d.ts.map +1 -1
  34. package/dist/i18n/en.js +60 -0
  35. package/dist/i18n/en.js.map +1 -1
  36. package/dist/i18n/es.d.ts.map +1 -1
  37. package/dist/i18n/es.js +60 -0
  38. package/dist/i18n/es.js.map +1 -1
  39. package/dist/i18n/fr.d.ts.map +1 -1
  40. package/dist/i18n/fr.js +60 -0
  41. package/dist/i18n/fr.js.map +1 -1
  42. package/dist/i18n/hi.d.ts.map +1 -1
  43. package/dist/i18n/hi.js +60 -0
  44. package/dist/i18n/hi.js.map +1 -1
  45. package/dist/i18n/ja.d.ts.map +1 -1
  46. package/dist/i18n/ja.js +60 -0
  47. package/dist/i18n/ja.js.map +1 -1
  48. package/dist/i18n/ka.d.ts.map +1 -1
  49. package/dist/i18n/ka.js +60 -0
  50. package/dist/i18n/ka.js.map +1 -1
  51. package/dist/i18n/pt.d.ts.map +1 -1
  52. package/dist/i18n/pt.js +60 -0
  53. package/dist/i18n/pt.js.map +1 -1
  54. package/dist/i18n/ru.d.ts.map +1 -1
  55. package/dist/i18n/ru.js +60 -0
  56. package/dist/i18n/ru.js.map +1 -1
  57. package/dist/i18n/uk.d.ts.map +1 -1
  58. package/dist/i18n/uk.js +60 -0
  59. package/dist/i18n/uk.js.map +1 -1
  60. package/dist/i18n/uz.d.ts.map +1 -1
  61. package/dist/i18n/uz.js +60 -0
  62. package/dist/i18n/uz.js.map +1 -1
  63. package/dist/i18n/zh.d.ts.map +1 -1
  64. package/dist/i18n/zh.js +60 -0
  65. package/dist/i18n/zh.js.map +1 -1
  66. package/dist/index.d.ts +1 -1
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +3 -1
  69. package/dist/index.js.map +1 -1
  70. package/dist/installManager.d.ts +57 -1
  71. package/dist/installManager.d.ts.map +1 -1
  72. package/dist/installManager.js +88 -10
  73. package/dist/installManager.js.map +1 -1
  74. package/dist/instanceSettings.d.ts +12 -2
  75. package/dist/instanceSettings.d.ts.map +1 -1
  76. package/dist/instanceSettings.js +17 -3
  77. package/dist/instanceSettings.js.map +1 -1
  78. package/dist/outputTrace.d.ts +6 -0
  79. package/dist/outputTrace.d.ts.map +1 -1
  80. package/dist/outputTrace.js +24 -1
  81. package/dist/outputTrace.js.map +1 -1
  82. package/dist/remoteRun/cliArgs.d.ts +2 -0
  83. package/dist/remoteRun/cliArgs.d.ts.map +1 -1
  84. package/dist/remoteRun/cliArgs.js +11 -2
  85. package/dist/remoteRun/cliArgs.js.map +1 -1
  86. package/dist/remoteRun/commands.d.ts +21 -0
  87. package/dist/remoteRun/commands.d.ts.map +1 -1
  88. package/dist/remoteRun/commands.js +38 -17
  89. package/dist/remoteRun/commands.js.map +1 -1
  90. package/dist/remoteRun/interrupts.d.ts +10 -0
  91. package/dist/remoteRun/interrupts.d.ts.map +1 -1
  92. package/dist/remoteRun/interrupts.js +43 -6
  93. package/dist/remoteRun/interrupts.js.map +1 -1
  94. package/dist/remoteRun/output.d.ts +2 -0
  95. package/dist/remoteRun/output.d.ts.map +1 -1
  96. package/dist/remoteRun/output.js +45 -0
  97. package/dist/remoteRun/output.js.map +1 -1
  98. package/dist/remoteRun/pairedRunners.d.ts +51 -0
  99. package/dist/remoteRun/pairedRunners.d.ts.map +1 -0
  100. package/dist/remoteRun/pairedRunners.js +165 -0
  101. package/dist/remoteRun/pairedRunners.js.map +1 -0
  102. package/dist/remoteRun/probe.d.ts +23 -1
  103. package/dist/remoteRun/probe.d.ts.map +1 -1
  104. package/dist/remoteRun/probe.js +45 -11
  105. package/dist/remoteRun/probe.js.map +1 -1
  106. package/dist/remoteRun/remoteRunCli.d.ts +13 -6
  107. package/dist/remoteRun/remoteRunCli.d.ts.map +1 -1
  108. package/dist/remoteRun/remoteRunCli.js +34 -59
  109. package/dist/remoteRun/remoteRunCli.js.map +1 -1
  110. package/dist/remoteRun/runnerClient.d.ts +2 -0
  111. package/dist/remoteRun/runnerClient.d.ts.map +1 -1
  112. package/dist/remoteRun/runnerClient.js +5 -1
  113. package/dist/remoteRun/runnerClient.js.map +1 -1
  114. package/dist/remoteRun/runnerSummary.d.ts +24 -0
  115. package/dist/remoteRun/runnerSummary.d.ts.map +1 -0
  116. package/dist/remoteRun/runnerSummary.js +86 -0
  117. package/dist/remoteRun/runnerSummary.js.map +1 -0
  118. package/dist/remoteRun/runnerWait.d.ts +68 -0
  119. package/dist/remoteRun/runnerWait.d.ts.map +1 -0
  120. package/dist/remoteRun/runnerWait.js +137 -0
  121. package/dist/remoteRun/runnerWait.js.map +1 -0
  122. package/dist/remoteRun/runnerWaitTiming.d.ts +16 -0
  123. package/dist/remoteRun/runnerWaitTiming.d.ts.map +1 -0
  124. package/dist/remoteRun/runnerWaitTiming.js +37 -0
  125. package/dist/remoteRun/runnerWaitTiming.js.map +1 -0
  126. package/dist/remoteRun/runners.d.ts +15 -8
  127. package/dist/remoteRun/runners.d.ts.map +1 -1
  128. package/dist/remoteRun/runners.js +59 -19
  129. package/dist/remoteRun/runners.js.map +1 -1
  130. package/dist/remoteRun/runnersCatalog.d.ts +14 -0
  131. package/dist/remoteRun/runnersCatalog.d.ts.map +1 -0
  132. package/dist/remoteRun/runnersCatalog.js +68 -0
  133. package/dist/remoteRun/runnersCatalog.js.map +1 -0
  134. package/dist/remoteRun/runnersConfig.d.ts +31 -20
  135. package/dist/remoteRun/runnersConfig.d.ts.map +1 -1
  136. package/dist/remoteRun/runnersConfig.js +14 -12
  137. package/dist/remoteRun/runnersConfig.js.map +1 -1
  138. package/dist/remoteRun/ssh.d.ts +22 -2
  139. package/dist/remoteRun/ssh.d.ts.map +1 -1
  140. package/dist/remoteRun/ssh.js +41 -7
  141. package/dist/remoteRun/ssh.js.map +1 -1
  142. package/dist/runnerUtility/adminCheck.d.ts +18 -0
  143. package/dist/runnerUtility/adminCheck.d.ts.map +1 -0
  144. package/dist/runnerUtility/adminCheck.js +69 -0
  145. package/dist/runnerUtility/adminCheck.js.map +1 -0
  146. package/dist/runnerUtility/adminService.d.ts +22 -0
  147. package/dist/runnerUtility/adminService.d.ts.map +1 -0
  148. package/dist/runnerUtility/adminService.js +145 -0
  149. package/dist/runnerUtility/adminService.js.map +1 -0
  150. package/dist/runnerUtility/appInstall.d.ts +25 -0
  151. package/dist/runnerUtility/appInstall.d.ts.map +1 -0
  152. package/dist/runnerUtility/appInstall.js +147 -0
  153. package/dist/runnerUtility/appInstall.js.map +1 -0
  154. package/dist/runnerUtility/appUpdate.d.ts +39 -0
  155. package/dist/runnerUtility/appUpdate.d.ts.map +1 -0
  156. package/dist/runnerUtility/appUpdate.js +90 -0
  157. package/dist/runnerUtility/appUpdate.js.map +1 -0
  158. package/dist/runnerUtility/execEnv.d.ts +21 -0
  159. package/dist/runnerUtility/execEnv.d.ts.map +1 -0
  160. package/dist/runnerUtility/execEnv.js +109 -0
  161. package/dist/runnerUtility/execEnv.js.map +1 -0
  162. package/dist/runnerUtility/execSession.d.ts +13 -0
  163. package/dist/runnerUtility/execSession.d.ts.map +1 -0
  164. package/dist/runnerUtility/execSession.js +58 -0
  165. package/dist/runnerUtility/execSession.js.map +1 -0
  166. package/dist/runnerUtility/hubClient.d.ts +30 -0
  167. package/dist/runnerUtility/hubClient.d.ts.map +1 -0
  168. package/dist/runnerUtility/hubClient.js +127 -0
  169. package/dist/runnerUtility/hubClient.js.map +1 -0
  170. package/dist/runnerUtility/injectStream.d.ts +9 -0
  171. package/dist/runnerUtility/injectStream.d.ts.map +1 -0
  172. package/dist/runnerUtility/injectStream.js +12 -0
  173. package/dist/runnerUtility/injectStream.js.map +1 -0
  174. package/dist/runnerUtility/iosCheck.d.ts +62 -0
  175. package/dist/runnerUtility/iosCheck.d.ts.map +1 -0
  176. package/dist/runnerUtility/iosCheck.js +200 -0
  177. package/dist/runnerUtility/iosCheck.js.map +1 -0
  178. package/dist/runnerUtility/launcher.d.ts +5 -0
  179. package/dist/runnerUtility/launcher.d.ts.map +1 -0
  180. package/dist/runnerUtility/launcher.js +85 -0
  181. package/dist/runnerUtility/launcher.js.map +1 -0
  182. package/dist/runnerUtility/linkLoop.d.ts +39 -0
  183. package/dist/runnerUtility/linkLoop.d.ts.map +1 -0
  184. package/dist/runnerUtility/linkLoop.js +274 -0
  185. package/dist/runnerUtility/linkLoop.js.map +1 -0
  186. package/dist/runnerUtility/localLinkStop.d.ts +23 -0
  187. package/dist/runnerUtility/localLinkStop.d.ts.map +1 -0
  188. package/dist/runnerUtility/localLinkStop.js +79 -0
  189. package/dist/runnerUtility/localLinkStop.js.map +1 -0
  190. package/dist/runnerUtility/machineReport.d.ts +39 -0
  191. package/dist/runnerUtility/machineReport.d.ts.map +1 -0
  192. package/dist/runnerUtility/machineReport.js +161 -0
  193. package/dist/runnerUtility/machineReport.js.map +1 -0
  194. package/dist/runnerUtility/packageId.d.ts +5 -0
  195. package/dist/runnerUtility/packageId.d.ts.map +1 -0
  196. package/dist/runnerUtility/packageId.js +64 -0
  197. package/dist/runnerUtility/packageId.js.map +1 -0
  198. package/dist/runnerUtility/pairArgs.d.ts +16 -0
  199. package/dist/runnerUtility/pairArgs.d.ts.map +1 -0
  200. package/dist/runnerUtility/pairArgs.js +17 -0
  201. package/dist/runnerUtility/pairArgs.js.map +1 -0
  202. package/dist/runnerUtility/pairingRecovery.d.ts +31 -0
  203. package/dist/runnerUtility/pairingRecovery.d.ts.map +1 -0
  204. package/dist/runnerUtility/pairingRecovery.js +24 -0
  205. package/dist/runnerUtility/pairingRecovery.js.map +1 -0
  206. package/dist/runnerUtility/pueueDaemon.d.ts +36 -0
  207. package/dist/runnerUtility/pueueDaemon.d.ts.map +1 -0
  208. package/dist/runnerUtility/pueueDaemon.js +165 -0
  209. package/dist/runnerUtility/pueueDaemon.js.map +1 -0
  210. package/dist/runnerUtility/rootServiceCli.d.ts +8 -0
  211. package/dist/runnerUtility/rootServiceCli.d.ts.map +1 -0
  212. package/dist/runnerUtility/rootServiceCli.js +31 -0
  213. package/dist/runnerUtility/rootServiceCli.js.map +1 -0
  214. package/dist/runnerUtility/runnerCli.d.ts +18 -0
  215. package/dist/runnerUtility/runnerCli.d.ts.map +1 -0
  216. package/dist/runnerUtility/runnerCli.js +190 -0
  217. package/dist/runnerUtility/runnerCli.js.map +1 -0
  218. package/dist/runnerUtility/runnerCommands.d.ts +76 -0
  219. package/dist/runnerUtility/runnerCommands.d.ts.map +1 -0
  220. package/dist/runnerUtility/runnerCommands.js +464 -0
  221. package/dist/runnerUtility/runnerCommands.js.map +1 -0
  222. package/dist/runnerUtility/runnerConfig.d.ts +63 -0
  223. package/dist/runnerUtility/runnerConfig.d.ts.map +1 -0
  224. package/dist/runnerUtility/runnerConfig.js +153 -0
  225. package/dist/runnerUtility/runnerConfig.js.map +1 -0
  226. package/dist/runnerUtility/runnerFlags.d.ts +9 -0
  227. package/dist/runnerUtility/runnerFlags.d.ts.map +1 -0
  228. package/dist/runnerUtility/runnerFlags.js +53 -0
  229. package/dist/runnerUtility/runnerFlags.js.map +1 -0
  230. package/dist/runnerUtility/runnerHome.d.ts +30 -0
  231. package/dist/runnerUtility/runnerHome.d.ts.map +1 -0
  232. package/dist/runnerUtility/runnerHome.js +82 -0
  233. package/dist/runnerUtility/runnerHome.js.map +1 -0
  234. package/dist/runnerUtility/runnerKeys.d.ts +11 -0
  235. package/dist/runnerUtility/runnerKeys.d.ts.map +1 -0
  236. package/dist/runnerUtility/runnerKeys.js +80 -0
  237. package/dist/runnerUtility/runnerKeys.js.map +1 -0
  238. package/dist/runnerUtility/runnerServers.d.ts +40 -0
  239. package/dist/runnerUtility/runnerServers.d.ts.map +1 -0
  240. package/dist/runnerUtility/runnerServers.js +79 -0
  241. package/dist/runnerUtility/runnerServers.js.map +1 -0
  242. package/dist/runnerUtility/serviceCommon.d.ts +97 -0
  243. package/dist/runnerUtility/serviceCommon.d.ts.map +1 -0
  244. package/dist/runnerUtility/serviceCommon.js +209 -0
  245. package/dist/runnerUtility/serviceCommon.js.map +1 -0
  246. package/dist/runnerUtility/serviceManager.d.ts +51 -0
  247. package/dist/runnerUtility/serviceManager.d.ts.map +1 -0
  248. package/dist/runnerUtility/serviceManager.js +344 -0
  249. package/dist/runnerUtility/serviceManager.js.map +1 -0
  250. package/dist/runnerUtility/serviceUnits.d.ts +38 -0
  251. package/dist/runnerUtility/serviceUnits.d.ts.map +1 -0
  252. package/dist/runnerUtility/serviceUnits.js +189 -0
  253. package/dist/runnerUtility/serviceUnits.js.map +1 -0
  254. package/dist/runnerUtility/toolInstall.d.ts +95 -0
  255. package/dist/runnerUtility/toolInstall.d.ts.map +1 -0
  256. package/dist/runnerUtility/toolInstall.js +232 -0
  257. package/dist/runnerUtility/toolInstall.js.map +1 -0
  258. package/dist/runnerUtility/versionPollTiming.d.ts +16 -0
  259. package/dist/runnerUtility/versionPollTiming.d.ts.map +1 -0
  260. package/dist/runnerUtility/versionPollTiming.js +36 -0
  261. package/dist/runnerUtility/versionPollTiming.js.map +1 -0
  262. package/dist/runners/authorizedKeys.d.ts +52 -0
  263. package/dist/runners/authorizedKeys.d.ts.map +1 -0
  264. package/dist/runners/authorizedKeys.js +153 -0
  265. package/dist/runners/authorizedKeys.js.map +1 -0
  266. package/dist/runners/bootstrapLine.d.ts +13 -0
  267. package/dist/runners/bootstrapLine.d.ts.map +1 -0
  268. package/dist/runners/bootstrapLine.js +154 -0
  269. package/dist/runners/bootstrapLine.js.map +1 -0
  270. package/dist/runners/gate.d.ts +41 -0
  271. package/dist/runners/gate.d.ts.map +1 -0
  272. package/dist/runners/gate.js +225 -0
  273. package/dist/runners/gate.js.map +1 -0
  274. package/dist/runners/gateLink.d.ts +26 -0
  275. package/dist/runners/gateLink.d.ts.map +1 -0
  276. package/dist/runners/gateLink.js +240 -0
  277. package/dist/runners/gateLink.js.map +1 -0
  278. package/dist/runners/gateProtocol.d.ts +104 -0
  279. package/dist/runners/gateProtocol.d.ts.map +1 -0
  280. package/dist/runners/gateProtocol.js +151 -0
  281. package/dist/runners/gateProtocol.js.map +1 -0
  282. package/dist/runners/gateWrapper.d.ts +6 -0
  283. package/dist/runners/gateWrapper.d.ts.map +1 -0
  284. package/dist/runners/gateWrapper.js +70 -0
  285. package/dist/runners/gateWrapper.js.map +1 -0
  286. package/dist/runners/hubAddress.d.ts +33 -0
  287. package/dist/runners/hubAddress.d.ts.map +1 -0
  288. package/dist/runners/hubAddress.js +88 -0
  289. package/dist/runners/hubAddress.js.map +1 -0
  290. package/dist/runners/hubAddressCandidates.d.ts +16 -0
  291. package/dist/runners/hubAddressCandidates.d.ts.map +1 -0
  292. package/dist/runners/hubAddressCandidates.js +96 -0
  293. package/dist/runners/hubAddressCandidates.js.map +1 -0
  294. package/dist/runners/hubIds.d.ts +16 -0
  295. package/dist/runners/hubIds.d.ts.map +1 -0
  296. package/dist/runners/hubIds.js +25 -0
  297. package/dist/runners/hubIds.js.map +1 -0
  298. package/dist/runners/hubKey.d.ts +6 -0
  299. package/dist/runners/hubKey.d.ts.map +1 -0
  300. package/dist/runners/hubKey.js +78 -0
  301. package/dist/runners/hubKey.js.map +1 -0
  302. package/dist/runners/hubLock.d.ts +7 -0
  303. package/dist/runners/hubLock.d.ts.map +1 -0
  304. package/dist/runners/hubLock.js +230 -0
  305. package/dist/runners/hubLock.js.map +1 -0
  306. package/dist/runners/hubPackage.d.ts +23 -0
  307. package/dist/runners/hubPackage.d.ts.map +1 -0
  308. package/dist/runners/hubPackage.js +184 -0
  309. package/dist/runners/hubPackage.js.map +1 -0
  310. package/dist/runners/hubPairing.d.ts +70 -0
  311. package/dist/runners/hubPairing.d.ts.map +1 -0
  312. package/dist/runners/hubPairing.js +277 -0
  313. package/dist/runners/hubPairing.js.map +1 -0
  314. package/dist/runners/hubPaths.d.ts +42 -0
  315. package/dist/runners/hubPaths.d.ts.map +1 -0
  316. package/dist/runners/hubPaths.js +96 -0
  317. package/dist/runners/hubPaths.js.map +1 -0
  318. package/dist/runners/hubRegistry.d.ts +134 -0
  319. package/dist/runners/hubRegistry.d.ts.map +1 -0
  320. package/dist/runners/hubRegistry.js +256 -0
  321. package/dist/runners/hubRegistry.js.map +1 -0
  322. package/dist/runners/linkControl.d.ts +38 -0
  323. package/dist/runners/linkControl.d.ts.map +1 -0
  324. package/dist/runners/linkControl.js +171 -0
  325. package/dist/runners/linkControl.js.map +1 -0
  326. package/dist/runners/pairCode.d.ts +30 -0
  327. package/dist/runners/pairCode.d.ts.map +1 -0
  328. package/dist/runners/pairCode.js +46 -0
  329. package/dist/runners/pairCode.js.map +1 -0
  330. package/dist/runners/pairingTiming.d.ts +18 -0
  331. package/dist/runners/pairingTiming.d.ts.map +1 -0
  332. package/dist/runners/pairingTiming.js +42 -0
  333. package/dist/runners/pairingTiming.js.map +1 -0
  334. package/dist/runners/removalTiming.d.ts +13 -0
  335. package/dist/runners/removalTiming.d.ts.map +1 -0
  336. package/dist/runners/removalTiming.js +17 -0
  337. package/dist/runners/removalTiming.js.map +1 -0
  338. package/dist/runners/runnerProxy.d.ts +9 -0
  339. package/dist/runners/runnerProxy.d.ts.map +1 -0
  340. package/dist/runners/runnerProxy.js +67 -0
  341. package/dist/runners/runnerProxy.js.map +1 -0
  342. package/dist/runners/runnerRemoval.d.ts +21 -0
  343. package/dist/runners/runnerRemoval.d.ts.map +1 -0
  344. package/dist/runners/runnerRemoval.js +94 -0
  345. package/dist/runners/runnerRemoval.js.map +1 -0
  346. package/dist/runners/runnerServiceKind.d.ts +10 -0
  347. package/dist/runners/runnerServiceKind.d.ts.map +1 -0
  348. package/dist/runners/runnerServiceKind.js +13 -0
  349. package/dist/runners/runnerServiceKind.js.map +1 -0
  350. package/dist/runners/runnersCli.d.ts +25 -0
  351. package/dist/runners/runnersCli.d.ts.map +1 -0
  352. package/dist/runners/runnersCli.js +239 -0
  353. package/dist/runners/runnersCli.js.map +1 -0
  354. package/dist/runners/runnersList.d.ts +14 -0
  355. package/dist/runners/runnersList.d.ts.map +1 -0
  356. package/dist/runners/runnersList.js +51 -0
  357. package/dist/runners/runnersList.js.map +1 -0
  358. package/dist/runners/runnersOverview.d.ts +20 -0
  359. package/dist/runners/runnersOverview.d.ts.map +1 -0
  360. package/dist/runners/runnersOverview.js +56 -0
  361. package/dist/runners/runnersOverview.js.map +1 -0
  362. package/dist/runners/sshKeys.d.ts +26 -0
  363. package/dist/runners/sshKeys.d.ts.map +1 -0
  364. package/dist/runners/sshKeys.js +60 -0
  365. package/dist/runners/sshKeys.js.map +1 -0
  366. package/dist/runners/tarArchive.d.ts +20 -0
  367. package/dist/runners/tarArchive.d.ts.map +1 -0
  368. package/dist/runners/tarArchive.js +70 -0
  369. package/dist/runners/tarArchive.js.map +1 -0
  370. package/dist/scheduler/mcpSurface.d.ts +11 -5
  371. package/dist/scheduler/mcpSurface.d.ts.map +1 -1
  372. package/dist/scheduler/mcpSurface.js +59 -26
  373. package/dist/scheduler/mcpSurface.js.map +1 -1
  374. package/dist/selfUpdate/selfCheck.d.ts +13 -0
  375. package/dist/selfUpdate/selfCheck.d.ts.map +1 -1
  376. package/dist/selfUpdate/selfCheck.js +9 -3
  377. package/dist/selfUpdate/selfCheck.js.map +1 -1
  378. package/dist/stt/sttInstallEntry.js +7 -4
  379. package/dist/stt/sttInstallEntry.js.map +1 -1
  380. package/dist/testTimings.d.ts +5 -2
  381. package/dist/testTimings.d.ts.map +1 -1
  382. package/dist/testTimings.js +10 -1
  383. package/dist/testTimings.js.map +1 -1
  384. package/dist/utils/agentEnvironment.d.ts +6 -2
  385. package/dist/utils/agentEnvironment.d.ts.map +1 -1
  386. package/dist/utils/agentEnvironment.js +13 -2
  387. package/dist/utils/agentEnvironment.js.map +1 -1
  388. package/dist/utils/runnersScreenPlan.d.ts +141 -0
  389. package/dist/utils/runnersScreenPlan.d.ts.map +1 -0
  390. package/dist/utils/runnersScreenPlan.js +272 -0
  391. package/dist/utils/runnersScreenPlan.js.map +1 -0
  392. package/package.json +5 -2
  393. package/remoteRun/runner.sh +81 -6
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.probeAllTimeoutMs = void 0;
37
37
  exports.readLastProbe = readLastProbe;
38
+ exports.removeLastProbe = removeLastProbe;
38
39
  exports.probeRunner = probeRunner;
39
40
  exports.probeRunners = probeRunners;
40
41
  exports.formatRunnersView = formatRunnersView;
@@ -43,14 +44,15 @@ exports.chooseExecRunnerName = chooseExecRunnerName;
43
44
  exports.findRunnerOfJob = findRunnerOfJob;
44
45
  const fs = __importStar(require("fs"));
45
46
  const path = __importStar(require("path"));
47
+ const linkControl_1 = require("../runners/linkControl");
46
48
  const probe_1 = require("./probe");
47
49
  const remoteRunError_1 = require("./remoteRunError");
48
50
  const exitCodes_1 = require("./exitCodes");
49
51
  const runnerClient_1 = require("./runnerClient");
50
52
  /**
51
53
  * @description Which runners exist right now: probe them (in parallel, bounded), remember each one's last answer so an offline runner
52
- * still shows what it was, and pick the one a command should use — the named one, or the first in `runners.json` that answers and, with
53
- * `--needs`, has the capability.
54
+ * 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,
55
+ * then the paired runners) that answers, is not paused and, with `--needs`, has the capability.
54
56
  */
55
57
  /** The whole probing of all runners ends by then (a dead host costs its ssh connect timeout, once, in parallel with the others). */
56
58
  exports.probeAllTimeoutMs = 20 * 1000;
@@ -59,17 +61,28 @@ const millisecondsPerSecond = 1000;
59
61
  function getStoredProbePath(cacheDir, runnerName) {
60
62
  return path.join(cacheDir, `${runnerName}${probeFileSuffix}`);
61
63
  }
62
- function readLastProbe(cacheDir, runnerName) {
64
+ /**
65
+ * @description The last report of runner `runnerName`, `null` if there is none. The file is named by the runner's NAME, and a name outlives
66
+ * the machine: one that was removed hands it on to the next that gets it. A paired runner therefore passes the moment it was paired as
67
+ * `notBeforeMs`, and a report taken before that is not its own and is not read.
68
+ */
69
+ function readLastProbe(cacheDir, runnerName, notBeforeMs = 0) {
63
70
  try {
64
71
  const stored = JSON.parse(fs.readFileSync(getStoredProbePath(cacheDir, runnerName), 'utf8'));
65
72
  if (typeof stored.seenAtMs !== 'number' || typeof stored.text !== 'string')
66
73
  return null;
74
+ if (stored.seenAtMs < notBeforeMs)
75
+ return null;
67
76
  return { seenAtMs: stored.seenAtMs, probe: (0, probe_1.parseProbeOutput)(stored.text) };
68
77
  }
69
78
  catch {
70
79
  return null;
71
80
  }
72
81
  }
82
+ /** @description Forget the last report of `runnerName` (a removed runner's: the name is free for the next machine). A report that is not there is nothing to forget. */
83
+ function removeLastProbe(cacheDir, runnerName) {
84
+ fs.rmSync(getStoredProbePath(cacheDir, runnerName), { force: true });
85
+ }
73
86
  function writeLastProbe(cacheDir, runnerName, text, seenAtMs) {
74
87
  const stored = { seenAtMs, text };
75
88
  fs.writeFileSync(getStoredProbePath(cacheDir, runnerName), JSON.stringify(stored), { mode: 0o600 });
@@ -82,17 +95,26 @@ function writeLastProbe(cacheDir, runnerName, text, seenAtMs) {
82
95
  async function probeRunner(client, nowMs = Date.now(), signal, deadlineMs = exports.probeAllTimeoutMs) {
83
96
  const runner = client.runner;
84
97
  const groupLimits = { ...(runner.groups ?? {}) };
85
- const offline = (reason) => {
86
- const last = readLastProbe(client.cacheDir, runner.name);
98
+ const isPausedByHub = runner.paired?.isPausedByHub ?? false;
99
+ const offline = (reason, linkLastSeenMs = null) => {
100
+ const last = readLastProbe(client.cacheDir, runner.name, runner.paired?.pairedAtMs);
87
101
  return {
88
102
  name: runner.name,
89
103
  status: 'offline',
90
104
  reason: signal?.aborted === true ? `no answer within ${Math.round(deadlineMs / millisecondsPerSecond)} s` : reason,
91
- lastSeenAtMs: last?.seenAtMs ?? null,
105
+ // 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.
106
+ lastSeenAtMs: linkLastSeenMs ?? last?.seenAtMs ?? null,
92
107
  lastProbe: last?.probe ?? null,
93
108
  groupLimits,
109
+ isPausedByHub,
94
110
  };
95
111
  };
112
+ if (runner.paired !== undefined) {
113
+ // A paired runner is online when its link accepts a connection; asking is cheaper than an ssh call that fails through the proxy.
114
+ const link = await (0, linkControl_1.getRunnerLinkStatus)(runner.paired.hubDir, runner.paired.runnerId);
115
+ if (!link.isOnline)
116
+ return offline(runnerClient_1.notConnectedReason, link.lastSeenMs);
117
+ }
96
118
  try {
97
119
  await client.ensureScript(signal);
98
120
  }
@@ -105,18 +127,19 @@ async function probeRunner(client, nowMs = Date.now(), signal, deadlineMs = expo
105
127
  if (result.exitCode !== 0)
106
128
  return offline((0, runnerClient_1.describeSshFailure)(result));
107
129
  writeLastProbe(client.cacheDir, runner.name, result.stdout, nowMs);
108
- return { name: runner.name, status: 'online', probe: (0, probe_1.parseProbeOutput)(result.stdout), groupLimits };
130
+ return { name: runner.name, status: 'online', probe: (0, probe_1.parseProbeOutput)(result.stdout), groupLimits, isPausedByHub };
109
131
  }
110
132
  /**
111
133
  * @description Probe every client at once under ONE deadline (20 s): a runner that has not answered by then is reported offline with its
112
134
  * 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
113
- * held back by it.
135
+ * held back by it. `stop` ends the same ssh calls from outside — the user interrupted the command that asked.
114
136
  */
115
- async function probeRunners(clients, nowMs = Date.now(), deadlineMs = exports.probeAllTimeoutMs) {
137
+ async function probeRunners(clients, nowMs = Date.now(), deadlineMs = exports.probeAllTimeoutMs, stop) {
116
138
  const deadline = new AbortController();
117
139
  const timer = setTimeout(() => deadline.abort(), deadlineMs);
140
+ const signal = stop === undefined ? deadline.signal : AbortSignal.any([deadline.signal, stop]);
118
141
  try {
119
- return await Promise.all(clients.map((client) => probeRunner(client, nowMs, deadline.signal, deadlineMs)));
142
+ return await Promise.all(clients.map((client) => probeRunner(client, nowMs, signal, deadlineMs)));
120
143
  }
121
144
  finally {
122
145
  clearTimeout(timer);
@@ -127,23 +150,40 @@ function formatRunnersView(reports) {
127
150
  return reports.map(probe_1.formatRunnerBlock).join('\n\n');
128
151
  }
129
152
  function checkIsUsable(report) {
130
- return report.status === 'online' && report.probe.pueueVersion !== null;
153
+ return report.status === 'online' && report.probe.pueueVersion !== null && !(0, probe_1.checkIsRunnerPaused)(report);
154
+ }
155
+ /** Who paused a runner and the way back, for the message of a pick that refused it. */
156
+ function describePause(report) {
157
+ const probe = report.status === 'online' ? report.probe : report.lastProbe;
158
+ return [
159
+ ...(report.isPausedByHub ? [`from the hub — \`charness runners resume ${report.name}\``] : []),
160
+ ...(probe?.isPaused === true ? ['on the runner — `charness-runner resume` there'] : []),
161
+ ].join(' and ');
162
+ }
163
+ /** « (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. */
164
+ function describeSkippedPaused(reports, needs) {
165
+ const names = reports
166
+ .filter((report) => report.status === 'online' && report.probe.pueueVersion !== null && (0, probe_1.checkIsRunnerPaused)(report) && (needs === null || (0, probe_1.checkHasCapability)(report.probe, needs)))
167
+ .map((report) => report.name);
168
+ return names.length === 0 ? '' : ` (paused, so not used: ${names.join(', ')})`;
131
169
  }
132
170
  /**
133
- * @description The runner a command should use. `wanted.runner` names one (it must exist, answer and have Pueue); otherwise the first
134
- * runner in `config` order that answers, has Pueue and — with `wanted.needs` — the capability. None: the reason and the `runners`
135
- * view, exit 125.
171
+ * @description The runner a command should use. `wanted.runner` names one (it must exist, answer, have Pueue and not be paused);
172
+ * otherwise the first runner in `config` order that answers, has Pueue, is not paused and — with `wanted.needs` — the capability. None:
173
+ * the reason and the `runners` view, exit 125.
136
174
  */
137
175
  function pickRunner(config, reports, wanted) {
138
176
  if (wanted.runner !== null) {
139
177
  const report = reports.find((candidate) => candidate.name === wanted.runner);
140
178
  if (report === undefined) {
141
- return { ok: false, exitCode: exitCodes_1.remoteRunExitCodes.usage, message: `no runner named "${wanted.runner}" in runners.json (configured: ${config.runners.map((runner) => runner.name).join(', ')})` };
179
+ return { ok: false, exitCode: exitCodes_1.remoteRunExitCodes.usage, message: `no runner named "${wanted.runner}" (configured: ${config.runners.map((runner) => runner.name).join(', ')})` };
142
180
  }
143
181
  if (report.status === 'offline')
144
182
  return { ok: false, exitCode: exitCodes_1.remoteRunExitCodes.failed, message: `runner "${wanted.runner}" is offline (${report.reason})\n${formatRunnersView([report])}` };
145
- if (!checkIsUsable(report))
183
+ if (report.probe.pueueVersion === null)
146
184
  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])}` };
185
+ if ((0, probe_1.checkIsRunnerPaused)(report))
186
+ return { ok: false, exitCode: exitCodes_1.remoteRunExitCodes.failed, message: `runner "${wanted.runner}" is paused ${describePause(report)}\n${formatRunnersView([report])}` };
147
187
  if (wanted.needs !== null && !(0, probe_1.checkHasCapability)(report.probe, wanted.needs)) {
148
188
  return { ok: false, exitCode: exitCodes_1.remoteRunExitCodes.failed, message: `runner "${wanted.runner}" cannot do "${wanted.needs}"\n${formatRunnersView([report])}` };
149
189
  }
@@ -157,7 +197,7 @@ function pickRunner(config, reports, wanted) {
157
197
  return { ok: true, runnerName: runner.name };
158
198
  }
159
199
  const reason = wanted.needs === null ? 'no runner is online' : `no online runner can do "${wanted.needs}"`;
160
- return { ok: false, exitCode: exitCodes_1.remoteRunExitCodes.failed, message: `${reason}\n${formatRunnersView(reports)}` };
200
+ return { ok: false, exitCode: exitCodes_1.remoteRunExitCodes.failed, message: `${reason}${describeSkippedPaused(reports, wanted.needs)}\n${formatRunnersView(reports)}` };
161
201
  }
162
202
  /**
163
203
  * @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
@@ -169,13 +209,13 @@ function chooseExecRunnerName(config, named, lastRunnerName) {
169
209
  return { runnerName: named, note: null };
170
210
  if (config.runners.some((runner) => runner.name === lastRunnerName))
171
211
  return { runnerName: lastRunnerName, note: null };
172
- return { runnerName: null, note: `the runner of this project's last job, "${lastRunnerName}", is not in runners.json any more — using the first online runner` };
212
+ 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` };
173
213
  }
174
214
  /** @description The runner of a job id, from the config: an id of a runner that is no longer listed is an error. */
175
215
  function findRunnerOfJob(config, runnerName) {
176
216
  const runner = config.runners.find((candidate) => candidate.name === runnerName);
177
217
  if (runner === undefined)
178
- throw new remoteRunError_1.RemoteRunError(`the job belongs to runner "${runnerName}", which is not in runners.json any more`);
218
+ 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)`);
179
219
  return runner;
180
220
  }
181
221
  //# sourceMappingURL=runners.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runners.js","sourceRoot":"","sources":["../../src/remoteRun/runners.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runners.js","sourceRoot":"","sources":["../../src/remoteRun/runners.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -0,0 +1,68 @@
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.loadRunnersCatalog = loadRunnersCatalog;
37
+ const os = __importStar(require("os"));
38
+ const pairedRunners_1 = require("./pairedRunners");
39
+ const runnersConfig_1 = require("./runnersConfig");
40
+ /**
41
+ * @description Every runner `remote-run` may use: the hand-made ones of `runners.json` (plain ssh, phase 1) and the paired ones of the
42
+ * hub's registry (`pairedRunners.ts`), as one list with the hand-made first — the order `pickRunner` walks. A name in both is an error
43
+ * 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
44
+ * only come from a hand edit made afterwards. This is the only place that knows both sources; it is kept apart from `runnersConfig.ts`
45
+ * because the hub registry's schemas import that file.
46
+ *
47
+ * 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.
48
+ */
49
+ /** @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. */
50
+ function loadRunnersCatalog(homeDir = os.homedir()) {
51
+ const handMade = (0, runnersConfig_1.loadRunnersConfig)(homeDir);
52
+ const paired = (0, pairedRunners_1.loadPairedRunners)(homeDir);
53
+ const handMadeRunners = handMade.config?.runners ?? [];
54
+ const pairedRunners = paired.config?.runners ?? [];
55
+ const handMadeNames = new Set(handMadeRunners.map((runner) => runner.name));
56
+ const clashes = pairedRunners.filter((runner) => handMadeNames.has(runner.name));
57
+ const errors = [
58
+ ...(handMade.status === 'invalid' ? handMade.errors : []),
59
+ ...(paired.status === 'invalid' ? paired.errors : []),
60
+ ...clashes.map((runner) => `runner "${runner.name}" is in runners.json and also paired — rename the runners.json entry (or remove the pairing)`),
61
+ ];
62
+ const clashingNames = new Set(clashes.map((runner) => runner.name));
63
+ const config = { runners: [...handMadeRunners, ...pairedRunners.filter((runner) => !clashingNames.has(runner.name))] };
64
+ if (errors.length > 0)
65
+ return { status: 'invalid', config: config.runners.length > 0 ? config : null, errors };
66
+ return { status: handMade.status === 'missing' && paired.status === 'missing' ? 'missing' : 'ok', config };
67
+ }
68
+ //# sourceMappingURL=runnersCatalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runnersCatalog.js","sourceRoot":"","sources":["../../src/remoteRun/runnersCatalog.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,gDAgBC;AAhCD,uCAAyB;AAEzB,mDAAoD;AACpD,mDAA2F;AAE3F;;;;;;;;GAQG;AAEH,2NAA2N;AAC3N,SAAgB,kBAAkB,CAAC,UAAkB,EAAE,CAAC,OAAO,EAAE;IAC/D,MAAM,QAAQ,GAAG,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,eAAe,GAAmB,QAAQ,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;IACvE,MAAM,aAAa,GAAmB,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;IACnE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG;QACb,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,MAAM,CAAC,IAAI,8FAA8F,CAAC;KACjJ,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,MAAM,MAAM,GAAkB,EAAE,OAAO,EAAE,CAAC,GAAG,eAAe,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACtI,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAC/G,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;AAC7G,CAAC"}
@@ -1,7 +1,11 @@
1
1
  import { z } from 'zod';
2
2
  import { type ConfigFileLoad } from '../configDirFile';
3
+ /** @description What a runner's name may be: lowercase letters and digits, single dashes between. */
4
+ export declare const runnerNamePattern: RegExp;
3
5
  /** The group every runner has; its parallel limit may be set, it never needs `group add`. */
4
6
  export declare const defaultPueueGroup = "default";
7
+ /** @description A runner's work folder: an absolute path on the runner, or one the runner's shell expands from `~`. */
8
+ export declare const runnerWorkDirSchema: z.ZodString;
5
9
  declare const runnerSchema: z.ZodObject<{
6
10
  name: z.ZodString;
7
11
  ssh: z.ZodString;
@@ -13,31 +17,38 @@ declare const runnerSchema: z.ZodObject<{
13
17
  }, z.core.$strict>>;
14
18
  groups: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
15
19
  }, z.core.$strict>;
16
- declare const runnersConfigSchema: z.ZodObject<{
17
- runners: z.ZodArray<z.ZodObject<{
18
- name: z.ZodString;
19
- ssh: z.ZodString;
20
- sshOptions: z.ZodOptional<z.ZodArray<z.ZodString>>;
21
- workDir: z.ZodString;
22
- pueue: z.ZodOptional<z.ZodObject<{
23
- bin: z.ZodOptional<z.ZodString>;
24
- config: z.ZodOptional<z.ZodString>;
25
- }, z.core.$strict>>;
26
- groups: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
27
- }, z.core.$strict>>;
28
- }, z.core.$strict>;
29
- /** @name RunnerConfig @description One runner as the file describes it. */
30
- export type RunnerConfig = z.infer<typeof runnerSchema>;
31
- /** @name RunnersConfig @description The whole file. */
32
- export type RunnersConfig = z.infer<typeof runnersConfigSchema>;
20
+ /**
21
+ * @name PairedRunnerLink
22
+ * @description What only a PAIRED runner has (`pairedRunners.ts` fills it; the file never can): where the hub keeps its link on this
23
+ * machine and whether the hub paused it. A runner without it is a hand-made one, reached by plain ssh.
24
+ */
25
+ export interface PairedRunnerLink {
26
+ runnerId: string;
27
+ /** The registry folder (`~/.config/charness/runners`): `link/<id>.sock` / `link/<id>.json` say whether the runner is connected. */
28
+ hubDir: string;
29
+ /** Paused from the hub (`charness runners pause`, `/runners`): the runner stays attached but is never picked for a job. */
30
+ isPausedByHub: boolean;
31
+ /** The OS the runner reported at pairing (`macOS 15.1`) — text from the runner machine, to be cleaned before it is shown to an agent. */
32
+ os: string;
33
+ /** When it was paired: a saved report of its name older than this belongs to an earlier machine of that name (`readLastProbe`). */
34
+ pairedAtMs: number;
35
+ }
36
+ /** @name RunnerConfig @description One runner: an entry of the file, or a paired runner built from the hub's registry. */
37
+ export type RunnerConfig = z.infer<typeof runnerSchema> & {
38
+ paired?: PairedRunnerLink;
39
+ };
40
+ /** @name RunnersConfig @description Every runner `remote-run` may use (see `runnersCatalog.ts`); the file alone holds only the hand-made ones. */
41
+ export interface RunnersConfig {
42
+ runners: RunnerConfig[];
43
+ }
33
44
  /** @description Where the file lives: beside the user's global charness env file, whatever `ENV_FILE` says (it is per OS user, not per instance). */
34
45
  export declare function getRunnersConfigPath(homeDir?: string): string;
35
- /** @description The file's current content (stamp-cached): missing = no runners, invalid = its errors and the last good config of this process, if any. */
46
+ /** @description The content of the runners file at `filePath` (stamp-cached): missing = no runners, invalid = its errors and the last good config of this process, if any. */
47
+ export declare function loadRunnersConfigAt(filePath: string): ConfigFileLoad<RunnersConfig>;
48
+ /** @description The user's `runners.json` right now. */
36
49
  export declare function loadRunnersConfig(homeDir?: string): ConfigFileLoad<RunnersConfig>;
37
50
  /** @description Forget the cached loads (tests that swap files under one path). */
38
51
  export declare function resetRunnersConfigCache(): void;
39
- /** @description Does any runner exist right now? The bot MCP's instructions mention remote-run only while one does. */
40
- export declare function checkIsRemoteRunOffered(homeDir?: string): boolean;
41
52
  /** @description The parallel limits of a runner's groups as the `name=n,name=n` string the runner script applies, in the order of the file (the runner applies each pair on its own, so the order carries no meaning). */
42
53
  export declare function formatGroupLimits(groups: RunnerConfig['groups']): string;
43
54
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"runnersConfig.d.ts","sourceRoot":"","sources":["../../src/remoteRun/runnersConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAoB/E,6FAA6F;AAC7F,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,QAAA,MAAM,YAAY;;;;;;;;;;kBAOhB,CAAC;AAEH,QAAA,MAAM,mBAAmB;;;;;;;;;;;;kBAEgJ,CAAC;AAE1K,2EAA2E;AAC3E,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACxD,uDAAuD;AACvD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,qJAAqJ;AACrJ,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,MAAqB,GAAG,MAAM,CAE3E;AAYD,2JAA2J;AAC3J,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,MAAqB,GAAG,cAAc,CAAC,aAAa,CAAC,CAE/F;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED,uHAAuH;AACvH,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,MAAqB,GAAG,OAAO,CAG/E;AAED,0NAA0N;AAC1N,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,MAAM,CAExE"}
1
+ {"version":3,"file":"runnersConfig.d.ts","sourceRoot":"","sources":["../../src/remoteRun/runnersConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAkB/E,qGAAqG;AACrG,eAAO,MAAM,iBAAiB,QAA+B,CAAC;AAE9D,6FAA6F;AAC7F,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,uHAAuH;AACvH,eAAO,MAAM,mBAAmB,aAA2K,CAAC;AAE5M,QAAA,MAAM,YAAY;;;;;;;;;;kBAOhB,CAAC;AAMH;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,mIAAmI;IACnI,MAAM,EAAE,MAAM,CAAC;IACf,2HAA2H;IAC3H,aAAa,EAAE,OAAO,CAAC;IACvB,yIAAyI;IACzI,EAAE,EAAE,MAAM,CAAC;IACX,mIAAmI;IACnI,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,0HAA0H;AAC1H,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,gBAAgB,CAAA;CAAE,CAAC;AACxF,kJAAkJ;AAClJ,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,qJAAqJ;AACrJ,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,MAAqB,GAAG,MAAM,CAE3E;AAYD,8KAA8K;AAC9K,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAAC,aAAa,CAAC,CAEnF;AAED,wDAAwD;AACxD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,MAAqB,GAAG,cAAc,CAAC,aAAa,CAAC,CAE/F;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED,0NAA0N;AAC1N,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,MAAM,CAExE"}
@@ -33,11 +33,11 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.defaultPueueGroup = void 0;
36
+ exports.runnerWorkDirSchema = exports.defaultPueueGroup = exports.runnerNamePattern = void 0;
37
37
  exports.getRunnersConfigPath = getRunnersConfigPath;
38
+ exports.loadRunnersConfigAt = loadRunnersConfigAt;
38
39
  exports.loadRunnersConfig = loadRunnersConfig;
39
40
  exports.resetRunnersConfigCache = resetRunnersConfigCache;
40
- exports.checkIsRemoteRunOffered = checkIsRemoteRunOffered;
41
41
  exports.formatGroupLimits = formatGroupLimits;
42
42
  const os = __importStar(require("os"));
43
43
  const path = __importStar(require("path"));
@@ -58,15 +58,18 @@ const legacyNames_1 = require("../legacyNames");
58
58
  * the shared stamp-cached one, so the bot's MCP can ask "is any runner listed?" on every connect for the cost of one `stat`.
59
59
  */
60
60
  const configFileName = 'runners.json';
61
- const runnerNamePattern = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
61
+ /** @description What a runner's name may be: lowercase letters and digits, single dashes between. */
62
+ exports.runnerNamePattern = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
62
63
  const groupNamePattern = /^[A-Za-z0-9][A-Za-z0-9_-]*$/;
63
64
  /** The group every runner has; its parallel limit may be set, it never needs `group add`. */
64
65
  exports.defaultPueueGroup = 'default';
66
+ /** @description A runner's work folder: an absolute path on the runner, or one the runner's shell expands from `~`. */
67
+ exports.runnerWorkDirSchema = zod_1.z.string().min(1).refine((workDir) => workDir.startsWith('/') || workDir === '~' || workDir.startsWith('~/'), 'must be an absolute path on the runner or start with ~/');
65
68
  const runnerSchema = zod_1.z.strictObject({
66
- name: zod_1.z.string().regex(runnerNamePattern, 'must be lowercase letters, digits and single dashes'),
69
+ name: zod_1.z.string().regex(exports.runnerNamePattern, 'must be lowercase letters, digits and single dashes'),
67
70
  ssh: zod_1.z.string().min(1).refine((destination) => !destination.startsWith('-') && !/\s/.test(destination), 'must be an ssh destination (user@host or a host alias): no spaces, not an option'),
68
71
  sshOptions: zod_1.z.array(zod_1.z.string()).optional(),
69
- workDir: zod_1.z.string().min(1).refine((workDir) => workDir.startsWith('/') || workDir === '~' || workDir.startsWith('~/'), 'must be an absolute path on the runner or start with ~/'),
72
+ workDir: exports.runnerWorkDirSchema,
70
73
  pueue: zod_1.z.strictObject({ bin: zod_1.z.string().min(1).optional(), config: zod_1.z.string().min(1).optional() }).optional(),
71
74
  groups: zod_1.z.record(zod_1.z.string().regex(groupNamePattern, 'is not a valid group name'), zod_1.z.number().int().positive()).optional(),
72
75
  });
@@ -87,19 +90,18 @@ const loader = (0, configDirFile_1.createConfigFileLoader)({
87
90
  return { ok: false, errors: parsed.error.issues.map((issue) => `${configFileName} ${issue.path.join('.') || '(root)'}: ${issue.message}`) };
88
91
  },
89
92
  });
90
- /** @description The file's current content (stamp-cached): missing = no runners, invalid = its errors and the last good config of this process, if any. */
93
+ /** @description The content of the runners file at `filePath` (stamp-cached): missing = no runners, invalid = its errors and the last good config of this process, if any. */
94
+ function loadRunnersConfigAt(filePath) {
95
+ return loader.load(filePath);
96
+ }
97
+ /** @description The user's `runners.json` right now. */
91
98
  function loadRunnersConfig(homeDir = os.homedir()) {
92
- return loader.load(getRunnersConfigPath(homeDir));
99
+ return loadRunnersConfigAt(getRunnersConfigPath(homeDir));
93
100
  }
94
101
  /** @description Forget the cached loads (tests that swap files under one path). */
95
102
  function resetRunnersConfigCache() {
96
103
  loader.resetCache();
97
104
  }
98
- /** @description Does any runner exist right now? The bot MCP's instructions mention remote-run only while one does. */
99
- function checkIsRemoteRunOffered(homeDir = os.homedir()) {
100
- const load = loadRunnersConfig(homeDir);
101
- return (load.config?.runners.length ?? 0) > 0;
102
- }
103
105
  /** @description The parallel limits of a runner's groups as the `name=n,name=n` string the runner script applies, in the order of the file (the runner applies each pair on its own, so the order carries no meaning). */
104
106
  function formatGroupLimits(groups) {
105
107
  return Object.entries(groups ?? {}).map(([groupName, parallel]) => `${groupName}=${parallel}`).join(',');
@@ -1 +1 @@
1
- {"version":3,"file":"runnersConfig.js","sourceRoot":"","sources":["../../src/remoteRun/runnersConfig.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,oDAEC;AAaD,8CAEC;AAGD,0DAEC;AAGD,0DAGC;AAGD,8CAEC;AA9ED,uCAAyB;AACzB,2CAA6B;AAC7B,6BAAwB;AACxB,oDAA+E;AAC/E,gDAA4D;AAE5D;;;;;;;;;;;;GAYG;AAEH,MAAM,cAAc,GAAG,cAAc,CAAC;AACtC,MAAM,iBAAiB,GAAG,4BAA4B,CAAC;AACvD,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;AACvD,6FAA6F;AAChF,QAAA,iBAAiB,GAAG,SAAS,CAAC;AAE3C,MAAM,YAAY,GAAG,OAAC,CAAC,YAAY,CAAC;IAClC,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,qDAAqD,CAAC;IAChG,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,kFAAkF,CAAC;IAC3L,UAAU,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC1C,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,yDAAyD,CAAC;IACjL,KAAK,EAAE,OAAC,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC7G,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,2BAA2B,CAAC,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC1H,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,OAAC,CAAC,YAAY,CAAC;IACzC,OAAO,EAAE,OAAC,CAAC,KAAK,CAAC,YAAY,CAAC;CAC/B,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAC;AAO1K,qJAAqJ;AACrJ,SAAgB,oBAAoB,CAAC,UAAkB,EAAE,CAAC,OAAO,EAAE;IACjE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAA,wCAA0B,EAAC,OAAO,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,MAAM,GAAG,IAAA,sCAAsB,EAAgB;IACnD,QAAQ,EAAE,cAAc;IACxB,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACpC,QAAQ,EAAE,CAAC,UAAU,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,cAAc,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;IAC9I,CAAC;CACF,CAAC,CAAC;AAEH,2JAA2J;AAC3J,SAAgB,iBAAiB,CAAC,UAAkB,EAAE,CAAC,OAAO,EAAE;IAC9D,OAAO,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,mFAAmF;AACnF,SAAgB,uBAAuB;IACrC,MAAM,CAAC,UAAU,EAAE,CAAC;AACtB,CAAC;AAED,uHAAuH;AACvH,SAAgB,uBAAuB,CAAC,UAAkB,EAAE,CAAC,OAAO,EAAE;IACpE,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,0NAA0N;AAC1N,SAAgB,iBAAiB,CAAC,MAA8B;IAC9D,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,GAAG,SAAS,IAAI,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3G,CAAC"}
1
+ {"version":3,"file":"runnersConfig.js","sourceRoot":"","sources":["../../src/remoteRun/runnersConfig.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,25 @@ import type { RunnerConfig } from './runnersConfig';
4
4
  export declare function getRemoteRunCacheDir(env?: NodeJS.ProcessEnv, homeDir?: string): string;
5
5
  /** @description Create the cache dir (mode 0700) and its ssh folder. */
6
6
  export declare function ensureRemoteRunCacheDir(cacheDir: string): void;
7
- /** @description The ssh options of every call to `runner` (without the destination): the operator's own first — ssh keeps the first value of an option — then ours. */
7
+ /** @description Can `value` be put into an ssh option or a command line that ssh and rsync's `-e` both read back as one word? (Whitespace can; a quote, a backslash, a `$`, a backtick or a line break cannot.) */
8
+ export declare function checkIsSshPathQuotable(value: string): boolean;
9
+ /** @description ssh expands `%`-tokens in a ProxyCommand, an identity file, a known-hosts path and a ControlPath: a literal `%` is written `%%`. */
10
+ export declare function escapeSshTokens(value: string): string;
11
+ /**
12
+ * @description A path as the VALUE of an `-o` option. ssh reads `-o` like a line of its config file: `UserKnownHostsFile` there is a LIST of
13
+ * files separated by whitespace and `ControlPath` takes one word followed by nothing, so `/home/my user/…` would be two words and ssh would
14
+ * fail or look in the wrong place. Double quotes keep one path one word (ssh_config(5): «arguments may optionally be enclosed in double
15
+ * quotes»); `-i` takes its path as a plain argument and needs none.
16
+ */
17
+ export declare function quoteSshOptionPath(value: string): string;
18
+ /**
19
+ * @description The ssh options of every call to `runner` (without the destination): the operator's own first — ssh keeps the first value of an
20
+ * option — then ours. The shared connection is an optimisation: a cache path that is too long for a unix socket, or holds a character that
21
+ * cannot be quoted, turns it off instead of failing the call.
22
+ */
8
23
  export declare function buildSshArgs(runner: Pick<RunnerConfig, 'sshOptions'>, cacheDir: string): string[];
24
+ /** @description Is `word` one that needs no quoting for a POSIX shell (and for ssh's and rsync's own parsers)? */
25
+ export declare function checkIsPlainShellWord(word: string): boolean;
9
26
  /** @description One word quoted for a POSIX shell (`shellSingleQuote`; an already plain word stays as it is, so the commands read well in a log). */
10
27
  export declare function quoteShellWord(word: string): string;
11
28
  /** @description The words of an argument list as one string rsync's `-e` and a shell both read back as the same words. */
@@ -36,7 +53,10 @@ export declare const sshFailureExitCode = 255;
36
53
  */
37
54
  export declare function checkIsConnectionLost(exitCode: number | null): boolean;
38
55
  export interface SshRunResult {
39
- /** `null` when the process was killed (a timeout). */
56
+ /**
57
+ * `null` when the call was cut off (a timeout, or the caller's own stop) — also when the ssh client had already exited by itself: its pipes are let go
58
+ * before `close` then, the output can be a part of what a master connection was still sending, and the client's own code must not vouch for it.
59
+ */
40
60
  exitCode: number | null;
41
61
  stdout: string;
42
62
  stderr: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../../src/remoteRun/ssh.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../../src/remoteRun/ssh.ts"],"names":[],"mappings":"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"}