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
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.removalConfirmMs = exports.removedRetryMs = void 0;
4
+ exports.computeBackoffMs = computeBackoffMs;
5
+ exports.createLinkLoop = createLinkLoop;
6
+ const appInstall_1 = require("./appInstall");
7
+ const appUpdate_1 = require("./appUpdate");
8
+ const gateProtocol_1 = require("../runners/gateProtocol");
9
+ const removalTiming_1 = require("../runners/removalTiming");
10
+ const hubClient_1 = require("./hubClient");
11
+ const versionPollTiming_1 = require("./versionPollTiming");
12
+ const runnerConfig_1 = require("./runnerConfig");
13
+ /**
14
+ * @description The runner's permanent link to the hub: connect (outbound ssh, host key pinned, the runner's own key), run `link`, hand the
15
+ * channel to the built-in ssh server, and when it drops come back — forever. The pairing survives restarts, reboots, sleep and network
16
+ * changes because nothing here is state but `config.json` and the keys.
17
+ *
18
+ * backoff 1 s, doubling, up to 5 min, ±20 % jitter; a link that held for 30 s starts the series again
19
+ * removed the hub no longer knows this runner: its key is refused (twice, a short time apart — one refusal could be a key file being
20
+ * rewritten), or the gate answers that the runner is not paired. Say so in the status, STOP THE QUEUE'S JOBS (Pueue outlives
21
+ * the link by design, so a removal must be told apart from an ordinary disconnection and end the work the hub's agents
22
+ * left running here), and ask again once an hour — never a flood that trips fail2ban
23
+ * update the `link` answer names the hub's package id, and a linked runner asks again every few minutes (`version`, over the
24
+ * connection it holds); an idle runner whose id differs updates and asks the launcher for a restart
25
+ * closing the attempt ends when the `link` CHANNEL ends or the connection does — the hub's gate dying, or the link being cut, closes
26
+ * the channel while the connection to sshd stays up and keeps answering keepalives, so the connection alone proves nothing
27
+ */
28
+ const initialBackoffMs = 1000;
29
+ const maxBackoffMs = 5 * 60 * 1000;
30
+ const jitterRatio = 0.2;
31
+ const stableLinkMs = 30 * 1000;
32
+ exports.removedRetryMs = 60 * 60 * 1000;
33
+ /** How long after the first refusal of the key a second one confirms that the runner was removed. */
34
+ exports.removalConfirmMs = 15 * 1000;
35
+ /** @description The wait before attempt number `failures + 1` (0 failures: the first retry); `random` is in [0, 1). */
36
+ function computeBackoffMs(failures, random) {
37
+ const base = Math.min(maxBackoffMs, initialBackoffMs * 2 ** Math.max(0, failures));
38
+ return Math.round(base * (1 - jitterRatio + 2 * jitterRatio * random));
39
+ }
40
+ function sleepUnlessAborted(ms, signal) {
41
+ return new Promise((resolve) => {
42
+ if (signal.aborted) {
43
+ resolve();
44
+ return;
45
+ }
46
+ const timer = setTimeout(done, ms);
47
+ function done() {
48
+ clearTimeout(timer);
49
+ signal.removeEventListener('abort', done);
50
+ resolve();
51
+ }
52
+ signal.addEventListener('abort', done, { once: true });
53
+ });
54
+ }
55
+ function createLinkLoop(deps) {
56
+ const now = deps.now ?? Date.now;
57
+ const random = deps.random ?? Math.random;
58
+ const sleep = deps.sleep ?? sleepUnlessAborted;
59
+ const connect = deps.connect ?? hubClient_1.connectToHub;
60
+ const update = deps.update ?? appUpdate_1.updateFromHub;
61
+ const log = deps.log ?? (() => undefined);
62
+ const versionPollMs = deps.versionPollMs ?? (0, versionPollTiming_1.readRunnerVersionPollMs)(process.env);
63
+ const confirmMs = deps.removalConfirmMs ?? exports.removalConfirmMs;
64
+ const stopAfterMs = deps.unconfirmedRemovalStopAfterMs ?? removalTiming_1.unconfirmedRemovalStopAfterMs;
65
+ const endpoint = { host: deps.config.hub.host, port: deps.config.hub.port, user: deps.config.hub.user, hostKey: deps.config.hub.hostKey };
66
+ let installedPackageId = deps.config.packageId;
67
+ let state = 'connecting';
68
+ let stateSinceMs = now();
69
+ let lastError = null;
70
+ let failedUpdate = null;
71
+ let pendingUpdateId = null;
72
+ let onIdleUpdate = null;
73
+ const writeStatus = (nextState, error) => {
74
+ if (nextState !== state) {
75
+ state = nextState;
76
+ stateSinceMs = now();
77
+ }
78
+ lastError = error;
79
+ try {
80
+ (0, runnerConfig_1.writeRunnerStatus)(deps.paths, { pid: process.pid, state, sinceMs: stateSinceMs, updatedAtMs: now(), lastError, activeJobs: deps.servers.getActiveExecCount(), packageId: installedPackageId });
81
+ }
82
+ catch (writeError) {
83
+ log(`cannot write status.json (${writeError instanceof Error ? writeError.message : 'unknown'})`);
84
+ }
85
+ };
86
+ const tryUpdate = async (hubPackageId, signal) => {
87
+ log(`updating to the hub's package ${hubPackageId}`);
88
+ const outcome = await update({ paths: deps.paths, config: { ...deps.config, packageId: installedPackageId }, clientPrivateKey: deps.keys.client.privateKey });
89
+ if (outcome.ok)
90
+ installedPackageId = outcome.packageId;
91
+ else
92
+ failedUpdate = { packageId: hubPackageId, atMs: now() };
93
+ return signal.aborted ? null : outcome;
94
+ };
95
+ const runOnce = async (signal) => {
96
+ writeStatus('connecting', lastError);
97
+ let client;
98
+ try {
99
+ client = await connect(endpoint, deps.keys.client.privateKey);
100
+ }
101
+ catch (error) {
102
+ if (error instanceof hubClient_1.HubConnectionError && error.failure === 'auth')
103
+ return { kind: 'removed', isConfirmed: false };
104
+ return { kind: 'failed', reason: error instanceof Error ? error.message : 'could not connect' };
105
+ }
106
+ let answer;
107
+ try {
108
+ answer = await (0, hubClient_1.callGate)(client, 'link', null);
109
+ }
110
+ catch (error) {
111
+ client.end();
112
+ return { kind: 'failed', reason: error instanceof Error ? error.message : 'the link request failed' };
113
+ }
114
+ // A stop that came during the connect or the handshake fired before anything listened for it, and the listener added further down would
115
+ // never hear it: the link would stay up and `run` would never return. So the stop is looked at HERE, right after the awaited answer and
116
+ // before anything else is started on it — a refusal's follow-up request, an update (a download and a blocking install), the link itself.
117
+ // The branches that wait further (the follow-up request, the update) end the attempt, and on the way to the listener nothing waits.
118
+ if (signal.aborted) {
119
+ answer?.channel.destroy();
120
+ client.end();
121
+ return { kind: 'closed', lastedMs: 0 };
122
+ }
123
+ if (answer === null) {
124
+ // The gate refused (no marker). If the hub says it does not know this runner, that is a removal whose key line outlived the registry entry.
125
+ const identity = await (0, hubClient_1.requestGateJson)(client, 'identity', null, gateProtocol_1.redeemReplySchema).catch(() => null);
126
+ client.end();
127
+ if (identity !== null && !identity.ok)
128
+ return { kind: 'removed', isConfirmed: true };
129
+ return { kind: 'failed', reason: 'the hub did not start the link' };
130
+ }
131
+ let hubPackageId = answer.marker.fields.package;
132
+ const decide = () => (0, appUpdate_1.decideUpdate)({
133
+ hubPackageId,
134
+ installedPackageId,
135
+ activeExecCount: deps.servers.getActiveExecCount(),
136
+ failedPackageId: failedUpdate?.packageId ?? null,
137
+ failedAtMs: failedUpdate?.atMs ?? 0,
138
+ nowMs: now(),
139
+ });
140
+ if (decide() === 'update-now' && hubPackageId !== undefined) {
141
+ answer.channel.destroy();
142
+ client.end();
143
+ const outcome = await tryUpdate(hubPackageId, signal);
144
+ return outcome?.ok === true ? { kind: 'restart' } : { kind: 'failed', reason: outcome === null ? 'stopped' : `update failed: ${outcome.reason}` };
145
+ }
146
+ deps.servers.acceptLinkStream(answer.channel);
147
+ answer.channel.resume();
148
+ writeStatus('linked', null);
149
+ const linkedAtMs = now();
150
+ return new Promise((resolve) => {
151
+ let isDone = false;
152
+ // While an update is being installed the link is deliberately closed: its closing is not the attempt ending, and the attempt
153
+ // ends only with the update's outcome — otherwise the loop would reconnect and run the next attempt beside the install.
154
+ let isUpdating = false;
155
+ let pollTimer = null;
156
+ const closedResult = () => ({ kind: 'closed', lastedMs: now() - linkedAtMs });
157
+ const finish = (result) => {
158
+ if (isDone)
159
+ return;
160
+ isDone = true;
161
+ if (pollTimer !== null)
162
+ clearInterval(pollTimer);
163
+ onIdleUpdate = null;
164
+ signal.removeEventListener('abort', onAbort);
165
+ client.end();
166
+ resolve(result);
167
+ };
168
+ const onAbort = () => finish(closedResult());
169
+ const onLost = () => {
170
+ if (!isUpdating)
171
+ finish(closedResult());
172
+ };
173
+ const startUpdate = (targetId) => {
174
+ isUpdating = true;
175
+ pendingUpdateId = null;
176
+ onIdleUpdate = null;
177
+ if (pollTimer !== null)
178
+ clearInterval(pollTimer);
179
+ client.end();
180
+ void tryUpdate(targetId, signal).then((outcome) => finish(outcome?.ok === true ? { kind: 'restart' } : closedResult()));
181
+ };
182
+ const considerUpdate = () => {
183
+ const decision = decide();
184
+ if (decision === 'update-now' && hubPackageId !== undefined) {
185
+ startUpdate(hubPackageId);
186
+ }
187
+ else if (decision === 'wait-until-idle' && hubPackageId !== undefined) {
188
+ pendingUpdateId = hubPackageId;
189
+ onIdleUpdate = () => {
190
+ if (pendingUpdateId !== null && decide() === 'update-now')
191
+ startUpdate(pendingUpdateId);
192
+ };
193
+ }
194
+ };
195
+ const askHubForPackage = async () => {
196
+ if (isUpdating || isDone)
197
+ return;
198
+ try {
199
+ const versionAnswer = await (0, hubClient_1.callGate)(client, 'version', null);
200
+ if (versionAnswer === null)
201
+ return;
202
+ versionAnswer.channel.resume();
203
+ if (isUpdating || isDone)
204
+ return;
205
+ hubPackageId = versionAnswer.marker.fields.package;
206
+ considerUpdate();
207
+ }
208
+ catch (error) {
209
+ log(`could not ask the hub for its package (${error instanceof Error ? error.message : 'unknown'})`);
210
+ }
211
+ };
212
+ signal.addEventListener('abort', onAbort, { once: true });
213
+ client.once('close', onLost);
214
+ client.once('error', onLost);
215
+ answer.channel.once('close', onLost);
216
+ answer.channel.once('error', onLost);
217
+ considerUpdate();
218
+ if (!isUpdating)
219
+ pollTimer = setInterval(() => { void askHubForPackage(); }, versionPollMs);
220
+ });
221
+ };
222
+ return {
223
+ notifyActiveCountChange: () => {
224
+ if (deps.servers.getActiveExecCount() === 0)
225
+ onIdleUpdate?.();
226
+ },
227
+ run: async (signal) => {
228
+ let failures = 0;
229
+ let firstRefusalAtMs = null;
230
+ while (!signal.aborted) {
231
+ const result = await runOnce(signal);
232
+ if (result.kind === 'restart')
233
+ return appInstall_1.restartExitCode;
234
+ // A stop that came while the attempt was under way (any of its awaits: the connect, the answers, an update) is not an event of the link:
235
+ // whatever the attempt ended with — a refusal read as a removal, a failure, a closed link — is not acted on. No «removed» status, no
236
+ // job stopped on a hub's answer to a runner that was already leaving, no error line.
237
+ if (signal.aborted)
238
+ return 0;
239
+ if (result.kind === 'removed') {
240
+ const now0 = now();
241
+ firstRefusalAtMs ??= now0;
242
+ if (!result.isConfirmed && now0 - firstRefusalAtMs < confirmMs) {
243
+ writeStatus('error', 'the hub refused the key; asking once more before taking this for a removal');
244
+ await sleep(confirmMs, signal);
245
+ continue;
246
+ }
247
+ writeStatus('removed', `removed by ${deps.config.hub.label}`);
248
+ if (result.isConfirmed || now0 - firstRefusalAtMs >= stopAfterMs) {
249
+ log(`the hub no longer knows this runner: removed by ${deps.config.hub.label}; stopping its jobs, then asking again in an hour`);
250
+ await deps.stopJobs?.().catch((error) => log(`could not stop the jobs (${error instanceof Error ? error.message : 'unknown error'})`));
251
+ }
252
+ else {
253
+ log(`the hub refuses this runner's key (removed by ${deps.config.hub.label}?); its jobs are left alone unless that lasts ${Math.round(stopAfterMs / 3_600_000)} hours without the hub saying more, asking again in an hour`);
254
+ }
255
+ await sleep(exports.removedRetryMs, signal);
256
+ continue;
257
+ }
258
+ firstRefusalAtMs = null;
259
+ if (result.kind === 'failed') {
260
+ writeStatus('error', result.reason);
261
+ log(`link failed: ${result.reason}`);
262
+ failures += 1;
263
+ }
264
+ else {
265
+ failures = result.lastedMs >= stableLinkMs ? 0 : failures + 1;
266
+ writeStatus('connecting', null);
267
+ }
268
+ await sleep(computeBackoffMs(Math.max(0, failures - 1), random()), signal);
269
+ }
270
+ return 0;
271
+ },
272
+ };
273
+ }
274
+ //# sourceMappingURL=linkLoop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linkLoop.js","sourceRoot":"","sources":["../../src/runnerUtility/linkLoop.ts"],"names":[],"mappings":";;;AAqCA,4CAGC;AAgDD,wCAuMC;AA9RD,6CAA+C;AAC/C,2CAA8E;AAC9E,0DAA4D;AAC5D,4DAAyE;AACzE,2CAA4G;AAC5G,2DAA8D;AAC9D,iDAAsF;AAKtF;;;;;;;;;;;;;;GAcG;AAEH,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACnC,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC;AAClB,QAAA,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC7C,qGAAqG;AACxF,QAAA,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1C,uHAAuH;AACvH,SAAgB,gBAAgB,CAAC,QAAgB,EAAE,MAAc;IAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,gBAAgB,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC;AACzE,CAAC;AA8BD,SAAS,kBAAkB,CAAC,EAAU,EAAE,MAAmB;IACzD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnC,SAAS,IAAI;YACX,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC1C,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC;AAID,SAAgB,cAAc,CAAC,IAAkB;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,kBAAkB,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,wBAAY,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,yBAAa,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,IAAA,2CAAuB,EAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjF,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,IAAI,wBAAgB,CAAC;IAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,6BAA6B,IAAI,6CAA6B,CAAC;IACxF,MAAM,QAAQ,GAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACvJ,IAAI,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IAC/C,IAAI,KAAK,GAAc,YAAY,CAAC;IACpC,IAAI,YAAY,GAAG,GAAG,EAAE,CAAC;IACzB,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,YAAY,GAA+C,IAAI,CAAC;IACpE,IAAI,eAAe,GAAkB,IAAI,CAAC;IAC1C,IAAI,YAAY,GAAwB,IAAI,CAAC;IAE7C,MAAM,WAAW,GAAG,CAAC,SAAoB,EAAE,KAAoB,EAAQ,EAAE;QACvE,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACxB,KAAK,GAAG,SAAS,CAAC;YAClB,YAAY,GAAG,GAAG,EAAE,CAAC;QACvB,CAAC;QACD,SAAS,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC;YACH,IAAA,gCAAiB,EAAC,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACjM,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACpB,GAAG,CAAC,6BAA6B,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QACpG,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,EAAE,YAAoB,EAAE,MAAmB,EAAiC,EAAE;QACnG,GAAG,CAAC,iCAAiC,YAAY,EAAE,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9J,IAAI,OAAO,CAAC,EAAE;YAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC;;YAClD,YAAY,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IACzC,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,KAAK,EAAE,MAAmB,EAA0B,EAAE;QACpE,WAAW,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACrC,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,8BAAkB,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;YACpH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC;QAClG,CAAC;QACD,IAAI,MAA4C,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAA,oBAAQ,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC;QACxG,CAAC;QACD,wIAAwI;QACxI,wIAAwI;QACxI,yIAAyI;QACzI,oIAAoI;QACpI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACzC,CAAC;QACD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,4IAA4I;YAC5I,MAAM,QAAQ,GAAG,MAAM,IAAA,2BAAe,EAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,gCAAiB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACtG,MAAM,CAAC,GAAG,EAAE,CAAC;YACb,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACrF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC;QACtE,CAAC;QACD,IAAI,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QAChD,MAAM,MAAM,GAAG,GAAoC,EAAE,CAAC,IAAA,wBAAY,EAAC;YACjE,YAAY;YACZ,kBAAkB;YAClB,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE;YAClD,eAAe,EAAE,YAAY,EAAE,SAAS,IAAI,IAAI;YAChD,UAAU,EAAE,YAAY,EAAE,IAAI,IAAI,CAAC;YACnC,KAAK,EAAE,GAAG,EAAE;SACb,CAAC,CAAC;QACH,IAAI,MAAM,EAAE,KAAK,YAAY,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC5D,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YACtD,OAAO,OAAO,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACpJ,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACxB,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5B,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC;QACzB,OAAO,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,EAAE;YAC5C,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,6HAA6H;YAC7H,wHAAwH;YACxH,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,IAAI,SAAS,GAA0B,IAAI,CAAC;YAC5C,MAAM,YAAY,GAAG,GAAkB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC;YAC7F,MAAM,MAAM,GAAG,CAAC,MAAqB,EAAQ,EAAE;gBAC7C,IAAI,MAAM;oBAAE,OAAO;gBACnB,MAAM,GAAG,IAAI,CAAC;gBACd,IAAI,SAAS,KAAK,IAAI;oBAAE,aAAa,CAAC,SAAS,CAAC,CAAC;gBACjD,YAAY,GAAG,IAAI,CAAC;gBACpB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC7C,MAAM,CAAC,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,GAAS,EAAE;gBACxB,IAAI,CAAC,UAAU;oBAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;YAC1C,CAAC,CAAC;YACF,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAQ,EAAE;gBAC7C,UAAU,GAAG,IAAI,CAAC;gBAClB,eAAe,GAAG,IAAI,CAAC;gBACvB,YAAY,GAAG,IAAI,CAAC;gBACpB,IAAI,SAAS,KAAK,IAAI;oBAAE,aAAa,CAAC,SAAS,CAAC,CAAC;gBACjD,MAAM,CAAC,GAAG,EAAE,CAAC;gBACb,KAAK,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;YAC1H,CAAC,CAAC;YACF,MAAM,cAAc,GAAG,GAAS,EAAE;gBAChC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC;gBAC1B,IAAI,QAAQ,KAAK,YAAY,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;oBAC5D,WAAW,CAAC,YAAY,CAAC,CAAC;gBAC5B,CAAC;qBAAM,IAAI,QAAQ,KAAK,iBAAiB,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;oBACxE,eAAe,GAAG,YAAY,CAAC;oBAC/B,YAAY,GAAG,GAAS,EAAE;wBACxB,IAAI,eAAe,KAAK,IAAI,IAAI,MAAM,EAAE,KAAK,YAAY;4BAAE,WAAW,CAAC,eAAe,CAAC,CAAC;oBAC1F,CAAC,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC;YACF,MAAM,gBAAgB,GAAG,KAAK,IAAmB,EAAE;gBACjD,IAAI,UAAU,IAAI,MAAM;oBAAE,OAAO;gBACjC,IAAI,CAAC;oBACH,MAAM,aAAa,GAAG,MAAM,IAAA,oBAAQ,EAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;oBAC9D,IAAI,aAAa,KAAK,IAAI;wBAAE,OAAO;oBACnC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC/B,IAAI,UAAU,IAAI,MAAM;wBAAE,OAAO;oBACjC,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;oBACnD,cAAc,EAAE,CAAC;gBACnB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,GAAG,CAAC,0CAA0C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;gBACvG,CAAC;YACH,CAAC,CAAC;YACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACrC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACrC,cAAc,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU;gBAAE,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;QAC9F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACL,uBAAuB,EAAE,GAAG,EAAE;YAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,KAAK,CAAC;gBAAE,YAAY,EAAE,EAAE,CAAC;QAChE,CAAC;QACD,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACpB,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,gBAAgB,GAAkB,IAAI,CAAC;YAC3C,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;gBACrC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;oBAAE,OAAO,4BAAe,CAAC;gBACtD,yIAAyI;gBACzI,qIAAqI;gBACrI,qFAAqF;gBACrF,IAAI,MAAM,CAAC,OAAO;oBAAE,OAAO,CAAC,CAAC;gBAC7B,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC9B,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC;oBACnB,gBAAgB,KAAK,IAAI,CAAC;oBAC1B,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,GAAG,gBAAgB,GAAG,SAAS,EAAE,CAAC;wBAC/D,WAAW,CAAC,OAAO,EAAE,4EAA4E,CAAC,CAAC;wBACnG,MAAM,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;wBAC/B,SAAS;oBACX,CAAC;oBACD,WAAW,CAAC,SAAS,EAAE,cAAc,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC9D,IAAI,MAAM,CAAC,WAAW,IAAI,IAAI,GAAG,gBAAgB,IAAI,WAAW,EAAE,CAAC;wBACjE,GAAG,CAAC,mDAAmD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,mDAAmD,CAAC,CAAC;wBACjI,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;oBACzI,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,iDAAiD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,iDAAiD,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,6DAA6D,CAAC,CAAC;oBAC/N,CAAC;oBACD,MAAM,KAAK,CAAC,sBAAc,EAAE,MAAM,CAAC,CAAC;oBACpC,SAAS;gBACX,CAAC;gBACD,gBAAgB,GAAG,IAAI,CAAC;gBACxB,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC7B,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;oBACpC,GAAG,CAAC,gBAAgB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBACrC,QAAQ,IAAI,CAAC,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACN,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;oBAC9D,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBAClC,CAAC;gBACD,MAAM,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YAC7E,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { RunnerHomePaths } from './runnerHome';
2
+ export interface ProcessControl {
3
+ checkIsAlive: (pid: number) => boolean;
4
+ /** The command line of `pid`, or `null` when it cannot be read. */
5
+ readCommand: (pid: number) => string | null;
6
+ signal: (pid: number, signal: NodeJS.Signals) => void;
7
+ terminateGraceMs: number;
8
+ killGraceMs: number;
9
+ }
10
+ export declare function createProcessControl(): ProcessControl;
11
+ /** @description Is this command line the runner's link — `…/runnerCli.js run`? */
12
+ export declare function checkIsRunnerLinkCommand(command: string | null): boolean;
13
+ /**
14
+ * @description Is `pid` the runner's link — alive AND running `…/runnerCli.js run`? `status.json` is not removed when `run` exits, so after
15
+ * a reboot its pid may be dead or belong to an unrelated program: that is not a link (nothing to stop, nothing that blocks a service).
16
+ */
17
+ export declare function checkIsRunnerLinkProcess(pid: number, control?: ProcessControl): boolean;
18
+ /**
19
+ * @description Stop the link process named by `status.json` (a foreground `run`, or whatever a service started): TERM, then KILL. `null`
20
+ * when it is gone (or was never there); otherwise the reason it is still running.
21
+ */
22
+ export declare function stopLocalLink(paths: RunnerHomePaths, control?: ProcessControl): Promise<string | null>;
23
+ //# sourceMappingURL=localLinkStop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localLinkStop.d.ts","sourceRoot":"","sources":["../../src/runnerUtility/localLinkStop.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAepD,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,mEAAmE;IACnE,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC5C,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;IACtD,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAkBrD;AAED,kFAAkF;AAClF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAExE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,cAAuC,GAAG,OAAO,CAE/G;AAWD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,GAAE,cAAuC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWpI"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createProcessControl = createProcessControl;
4
+ exports.checkIsRunnerLinkCommand = checkIsRunnerLinkCommand;
5
+ exports.checkIsRunnerLinkProcess = checkIsRunnerLinkProcess;
6
+ exports.stopLocalLink = stopLocalLink;
7
+ const child_process_1 = require("child_process");
8
+ const runnerConfig_1 = require("./runnerConfig");
9
+ /**
10
+ * @description Stopping the runner's link on THIS machine, and knowing it stopped. A process that holds a pairing holds the keys and the
11
+ * configuration in memory: deleting the files does not end its link, and it can go on serving the hub's commands and reconnect.
12
+ * So before a pairing is forgotten (`unpair`) the link process is asked to stop (TERM), then forced (KILL), and the answer is only
13
+ * «stopped» when the pid is really gone. The pid comes from `status.json`; a pid that now belongs to another program (it was reused) is
14
+ * recognised by its command line and left alone.
15
+ */
16
+ const terminateGraceMs = 10 * 1000;
17
+ const killGraceMs = 3 * 1000;
18
+ const pollMs = 100;
19
+ const commandProbeTimeoutMs = 5000;
20
+ function createProcessControl() {
21
+ return {
22
+ checkIsAlive: (pid) => {
23
+ try {
24
+ process.kill(pid, 0);
25
+ return true;
26
+ }
27
+ catch (error) {
28
+ return error instanceof Error && 'code' in error && error.code === 'EPERM';
29
+ }
30
+ },
31
+ readCommand: (pid) => {
32
+ const listing = (0, child_process_1.spawnSync)('ps', ['-p', pid.toString(), '-o', 'command='], { encoding: 'utf8', timeout: commandProbeTimeoutMs });
33
+ return listing.status === 0 && listing.stdout.trim() !== '' ? listing.stdout.trim() : null;
34
+ },
35
+ signal: (pid, signal) => { process.kill(pid, signal); },
36
+ terminateGraceMs,
37
+ killGraceMs,
38
+ };
39
+ }
40
+ /** @description Is this command line the runner's link — `…/runnerCli.js run`? */
41
+ function checkIsRunnerLinkCommand(command) {
42
+ return command !== null && /runnerCli\.js\s+run(\s|$)/.test(command);
43
+ }
44
+ /**
45
+ * @description Is `pid` the runner's link — alive AND running `…/runnerCli.js run`? `status.json` is not removed when `run` exits, so after
46
+ * a reboot its pid may be dead or belong to an unrelated program: that is not a link (nothing to stop, nothing that blocks a service).
47
+ */
48
+ function checkIsRunnerLinkProcess(pid, control = createProcessControl()) {
49
+ return control.checkIsAlive(pid) && checkIsRunnerLinkCommand(control.readCommand(pid));
50
+ }
51
+ async function waitUntilGone(pid, control, timeoutMs) {
52
+ const deadline = Date.now() + timeoutMs;
53
+ while (Date.now() < deadline) {
54
+ if (!control.checkIsAlive(pid))
55
+ return true;
56
+ await new Promise((resolve) => { setTimeout(resolve, pollMs); });
57
+ }
58
+ return !control.checkIsAlive(pid);
59
+ }
60
+ /**
61
+ * @description Stop the link process named by `status.json` (a foreground `run`, or whatever a service started): TERM, then KILL. `null`
62
+ * when it is gone (or was never there); otherwise the reason it is still running.
63
+ */
64
+ async function stopLocalLink(paths, control = createProcessControl()) {
65
+ const status = (0, runnerConfig_1.readRunnerStatus)(paths);
66
+ if (status === null || !checkIsRunnerLinkProcess(status.pid, control))
67
+ return null;
68
+ try {
69
+ control.signal(status.pid, 'SIGTERM');
70
+ if (await waitUntilGone(status.pid, control, control.terminateGraceMs))
71
+ return null;
72
+ control.signal(status.pid, 'SIGKILL');
73
+ }
74
+ catch (error) {
75
+ return `the link process (pid ${status.pid}) could not be signalled (${error instanceof Error ? error.message : 'unknown error'})`;
76
+ }
77
+ return (await waitUntilGone(status.pid, control, control.killGraceMs)) ? null : `the link process (pid ${status.pid}) did not end`;
78
+ }
79
+ //# sourceMappingURL=localLinkStop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localLinkStop.js","sourceRoot":"","sources":["../../src/runnerUtility/localLinkStop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { type CommandRunner } from '../selfUpdate/commandRunner';
2
+ export interface CapabilityReport {
3
+ name: 'android' | 'ios' | 'playwright' | 'docker';
4
+ isAvailable: boolean;
5
+ detail: string;
6
+ }
7
+ export interface MachineReport {
8
+ osName: string;
9
+ arch: string;
10
+ cpuModel: string;
11
+ cpuCores: number;
12
+ ramBytes: number;
13
+ diskFreeBytes: number | null;
14
+ capabilities: CapabilityReport[];
15
+ }
16
+ export interface MachineProbe {
17
+ runner: CommandRunner;
18
+ platform: NodeJS.Platform;
19
+ nodeArch: string;
20
+ homeDir: string;
21
+ environment: NodeJS.ProcessEnv;
22
+ checkExists: (candidate: string) => boolean;
23
+ readTextFile: (filePath: string) => string | null;
24
+ cpus: () => Array<{
25
+ model: string;
26
+ }>;
27
+ totalMemoryBytes: () => number;
28
+ freeDiskBytes: (directory: string) => number | null;
29
+ }
30
+ export declare function createMachineProbe(homeDir?: string): MachineProbe;
31
+ /** @description `x86_64`/`arm64` for what Node calls `x64`/`arm64`. */
32
+ export declare function getArchName(nodeArch: string): string;
33
+ /** @description `Ubuntu 24.04` from `/etc/os-release`'s PRETTY_NAME, or the kernel's name. */
34
+ export declare function parseOsRelease(text: string | null): string | null;
35
+ /** @description Look at this machine. */
36
+ export declare function collectMachineReport(probe: MachineProbe, workRoot: string): Promise<MachineReport>;
37
+ /** @description The lines of the check screen for the machine: system, hardware, what it can do. */
38
+ export declare function formatMachineReport(report: MachineReport): string[];
39
+ //# sourceMappingURL=machineReport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machineReport.d.ts","sourceRoot":"","sources":["../../src/runnerUtility/machineReport.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAc7E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,YAAY,GAAG,QAAQ,CAAC;IAClD,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,gBAAgB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC;IAC/B,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAClD,IAAI,EAAE,MAAM,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrC,gBAAgB,EAAE,MAAM,MAAM,CAAC;IAC/B,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACrD;AAuBD,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,MAAqB,GAAG,YAAY,CAa/E;AAED,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAGjE;AAyCD,yCAAyC;AACzC,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAYxG;AAMD,oGAAoG;AACpG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAMnE"}
@@ -0,0 +1,161 @@
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.createMachineProbe = createMachineProbe;
37
+ exports.getArchName = getArchName;
38
+ exports.parseOsRelease = parseOsRelease;
39
+ exports.collectMachineReport = collectMachineReport;
40
+ exports.formatMachineReport = formatMachineReport;
41
+ const fs = __importStar(require("fs"));
42
+ const os = __importStar(require("os"));
43
+ const path = __importStar(require("path"));
44
+ const commandRunner_1 = require("../selfUpdate/commandRunner");
45
+ const execEnv_1 = require("./execEnv");
46
+ /**
47
+ * @description What `charness-runner check` (and the pairing) tells the operator about the machine: the OS, the hardware, and which of
48
+ * the four things agents send to a runner it can do — Android emulator runs, iOS, Playwright, Docker. A first look from the account that
49
+ * will run the jobs, not a promise: iOS is shown as «checked when the service starts» (the boot check of a LaunchDaemon is S3's), and a
50
+ * capability that cannot be told cheaply is reported as it is found. Commands are bounded (4 s).
51
+ */
52
+ const probeTimeoutMs = 4000;
53
+ const bytesPerGib = 1024 ** 3;
54
+ const maxDiskPathDepth = 8;
55
+ function readTextFileOrNull(filePath) {
56
+ try {
57
+ return fs.readFileSync(filePath, 'utf8');
58
+ }
59
+ catch {
60
+ return null;
61
+ }
62
+ }
63
+ function readFreeDiskBytes(directory) {
64
+ let probe = directory;
65
+ for (let depth = 0; depth < maxDiskPathDepth; depth += 1) {
66
+ try {
67
+ const stats = fs.statfsSync(probe);
68
+ return stats.bavail * stats.bsize;
69
+ }
70
+ catch {
71
+ probe = path.dirname(probe);
72
+ }
73
+ }
74
+ return null;
75
+ }
76
+ function createMachineProbe(homeDir = os.homedir()) {
77
+ return {
78
+ runner: commandRunner_1.runCommand,
79
+ platform: process.platform,
80
+ nodeArch: process.arch,
81
+ homeDir,
82
+ environment: process.env,
83
+ checkExists: fs.existsSync,
84
+ readTextFile: readTextFileOrNull,
85
+ cpus: os.cpus,
86
+ totalMemoryBytes: os.totalmem,
87
+ freeDiskBytes: readFreeDiskBytes,
88
+ };
89
+ }
90
+ /** @description `x86_64`/`arm64` for what Node calls `x64`/`arm64`. */
91
+ function getArchName(nodeArch) {
92
+ return nodeArch === 'x64' ? 'x86_64' : nodeArch;
93
+ }
94
+ /** @description `Ubuntu 24.04` from `/etc/os-release`'s PRETTY_NAME, or the kernel's name. */
95
+ function parseOsRelease(text) {
96
+ const match = text === null ? null : /^PRETTY_NAME="?([^"\n]+)"?$/m.exec(text);
97
+ return match === null ? null : match[1].trim();
98
+ }
99
+ async function readOsName(probe) {
100
+ if (probe.platform === 'darwin') {
101
+ const version = await probe.runner('sw_vers', ['-productVersion'], { timeoutMs: probeTimeoutMs });
102
+ return version.ok ? `macOS ${version.stdout.trim()}` : 'macOS';
103
+ }
104
+ return parseOsRelease(probe.readTextFile('/etc/os-release')) ?? os.type();
105
+ }
106
+ async function detectAndroid(probe) {
107
+ const sdk = (0, execEnv_1.findAndroidSdk)(probe.homeDir, probe.environment, probe.checkExists);
108
+ if (sdk === null)
109
+ return { name: 'android', isAvailable: false, detail: 'no Android SDK found' };
110
+ const hasEmulator = probe.checkExists(path.join(sdk, 'emulator', 'emulator'));
111
+ if (!hasEmulator)
112
+ return { name: 'android', isAvailable: false, detail: 'the SDK has no emulator' };
113
+ const acceleration = probe.platform === 'darwin' ? 'HVF' : probe.checkExists('/dev/kvm') ? 'KVM' : 'no KVM';
114
+ return { name: 'android', isAvailable: true, detail: `${acceleration}, emulator found` };
115
+ }
116
+ async function detectIos(probe) {
117
+ if (probe.platform !== 'darwin')
118
+ return { name: 'ios', isAvailable: false, detail: 'needs macOS' };
119
+ const xcode = await probe.runner('xcodebuild', ['-version'], { timeoutMs: probeTimeoutMs });
120
+ const version = /Xcode\s+(\S+)/.exec(xcode.stdout)?.[1];
121
+ return xcode.ok && version !== undefined
122
+ ? { name: 'ios', isAvailable: true, detail: `Xcode ${version}, checked when the service starts` }
123
+ : { name: 'ios', isAvailable: false, detail: 'no Xcode' };
124
+ }
125
+ function detectPlaywright(probe) {
126
+ const browsersPath = probe.environment.PLAYWRIGHT_BROWSERS_PATH
127
+ ?? path.join(probe.homeDir, probe.platform === 'darwin' ? 'Library/Caches/ms-playwright' : '.cache/ms-playwright');
128
+ return probe.checkExists(browsersPath)
129
+ ? { name: 'playwright', isAvailable: true, detail: 'browsers installed' }
130
+ : { name: 'playwright', isAvailable: false, detail: 'no browsers installed' };
131
+ }
132
+ async function detectDocker(probe) {
133
+ const docker = await probe.runner('docker', ['--version'], { timeoutMs: probeTimeoutMs });
134
+ return docker.ok ? { name: 'docker', isAvailable: true, detail: docker.stdout.trim().replace(/^Docker version\s*/, '').split(',')[0] } : { name: 'docker', isAvailable: false, detail: 'not installed' };
135
+ }
136
+ /** @description Look at this machine. */
137
+ async function collectMachineReport(probe, workRoot) {
138
+ const cpus = probe.cpus();
139
+ const [osName, android, ios, docker] = await Promise.all([readOsName(probe), detectAndroid(probe), detectIos(probe), detectDocker(probe)]);
140
+ return {
141
+ osName,
142
+ arch: getArchName(probe.nodeArch),
143
+ cpuModel: cpus[0]?.model.trim() ?? 'unknown CPU',
144
+ cpuCores: cpus.length,
145
+ ramBytes: probe.totalMemoryBytes(),
146
+ diskFreeBytes: probe.freeDiskBytes(workRoot),
147
+ capabilities: [android, ios, detectPlaywright(probe), docker],
148
+ };
149
+ }
150
+ function formatGib(bytes) {
151
+ return `${Math.round(bytes / bytesPerGib)} GB`;
152
+ }
153
+ /** @description The lines of the check screen for the machine: system, hardware, what it can do. */
154
+ function formatMachineReport(report) {
155
+ const capabilityText = report.capabilities.map((capability) => (capability.isAvailable ? `${capability.name} (${capability.detail})` : `${capability.name}: no`)).join(' · ');
156
+ return [
157
+ ` ${report.osName} (${report.arch}) · ${report.cpuModel}, ${report.cpuCores} cores · RAM ${formatGib(report.ramBytes)}${report.diskFreeBytes === null ? '' : ` · disk ${formatGib(report.diskFreeBytes)} free`}`,
158
+ ` can: ${capabilityText}`,
159
+ ];
160
+ }
161
+ //# sourceMappingURL=machineReport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machineReport.js","sourceRoot":"","sources":["../../src/runnerUtility/machineReport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function getPackageIdOfArchive(archive: Buffer): string;
2
+ export declare function checkIsPackageId(value: string): boolean;
3
+ /** @description Does the archive file hold the package `expectedId` names? An unreadable or damaged archive does not. */
4
+ export declare function checkArchiveHasId(archivePath: string, expectedId: string): boolean;
5
+ //# sourceMappingURL=packageId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageId.d.ts","sourceRoot":"","sources":["../../src/runnerUtility/packageId.ts"],"names":[],"mappings":"AAaA,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,yHAAyH;AACzH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAMlF"}