charness 3.7.0 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/DEVELOPMENT.md +6 -2
  3. package/README.md +5 -5
  4. package/SETUP.md +16 -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.js +44 -1
  13. package/dist/cli.js.map +1 -1
  14. package/dist/configDirFile.d.ts +7 -3
  15. package/dist/configDirFile.d.ts.map +1 -1
  16. package/dist/configDirFile.js +12 -5
  17. package/dist/configDirFile.js.map +1 -1
  18. package/dist/connectors/telegram/commands/botCore.d.ts +5 -1
  19. package/dist/connectors/telegram/commands/botCore.d.ts.map +1 -1
  20. package/dist/connectors/telegram/commands/runners.d.ts +52 -0
  21. package/dist/connectors/telegram/commands/runners.d.ts.map +1 -0
  22. package/dist/connectors/telegram/commands/runners.js +486 -0
  23. package/dist/connectors/telegram/commands/runners.js.map +1 -0
  24. package/dist/connectors/telegram/runnerPairingMessages.d.ts +27 -0
  25. package/dist/connectors/telegram/runnerPairingMessages.d.ts.map +1 -0
  26. package/dist/connectors/telegram/runnerPairingMessages.js +105 -0
  27. package/dist/connectors/telegram/runnerPairingMessages.js.map +1 -0
  28. package/dist/i18n/de.d.ts.map +1 -1
  29. package/dist/i18n/de.js +58 -0
  30. package/dist/i18n/de.js.map +1 -1
  31. package/dist/i18n/en.d.ts.map +1 -1
  32. package/dist/i18n/en.js +58 -0
  33. package/dist/i18n/en.js.map +1 -1
  34. package/dist/i18n/es.d.ts.map +1 -1
  35. package/dist/i18n/es.js +58 -0
  36. package/dist/i18n/es.js.map +1 -1
  37. package/dist/i18n/fr.d.ts.map +1 -1
  38. package/dist/i18n/fr.js +58 -0
  39. package/dist/i18n/fr.js.map +1 -1
  40. package/dist/i18n/hi.d.ts.map +1 -1
  41. package/dist/i18n/hi.js +58 -0
  42. package/dist/i18n/hi.js.map +1 -1
  43. package/dist/i18n/ja.d.ts.map +1 -1
  44. package/dist/i18n/ja.js +58 -0
  45. package/dist/i18n/ja.js.map +1 -1
  46. package/dist/i18n/ka.d.ts.map +1 -1
  47. package/dist/i18n/ka.js +58 -0
  48. package/dist/i18n/ka.js.map +1 -1
  49. package/dist/i18n/pt.d.ts.map +1 -1
  50. package/dist/i18n/pt.js +58 -0
  51. package/dist/i18n/pt.js.map +1 -1
  52. package/dist/i18n/ru.d.ts.map +1 -1
  53. package/dist/i18n/ru.js +58 -0
  54. package/dist/i18n/ru.js.map +1 -1
  55. package/dist/i18n/uk.d.ts.map +1 -1
  56. package/dist/i18n/uk.js +58 -0
  57. package/dist/i18n/uk.js.map +1 -1
  58. package/dist/i18n/uz.d.ts.map +1 -1
  59. package/dist/i18n/uz.js +58 -0
  60. package/dist/i18n/uz.js.map +1 -1
  61. package/dist/i18n/zh.d.ts.map +1 -1
  62. package/dist/i18n/zh.js +58 -0
  63. package/dist/i18n/zh.js.map +1 -1
  64. package/dist/installManager.d.ts +57 -1
  65. package/dist/installManager.d.ts.map +1 -1
  66. package/dist/installManager.js +88 -10
  67. package/dist/installManager.js.map +1 -1
  68. package/dist/instanceSettings.d.ts +12 -2
  69. package/dist/instanceSettings.d.ts.map +1 -1
  70. package/dist/instanceSettings.js +17 -3
  71. package/dist/instanceSettings.js.map +1 -1
  72. package/dist/outputTrace.d.ts +6 -0
  73. package/dist/outputTrace.d.ts.map +1 -1
  74. package/dist/outputTrace.js +24 -1
  75. package/dist/outputTrace.js.map +1 -1
  76. package/dist/remoteRun/cliArgs.d.ts +2 -0
  77. package/dist/remoteRun/cliArgs.d.ts.map +1 -1
  78. package/dist/remoteRun/cliArgs.js +11 -2
  79. package/dist/remoteRun/cliArgs.js.map +1 -1
  80. package/dist/remoteRun/commands.d.ts +21 -0
  81. package/dist/remoteRun/commands.d.ts.map +1 -1
  82. package/dist/remoteRun/commands.js +38 -17
  83. package/dist/remoteRun/commands.js.map +1 -1
  84. package/dist/remoteRun/interrupts.d.ts +10 -0
  85. package/dist/remoteRun/interrupts.d.ts.map +1 -1
  86. package/dist/remoteRun/interrupts.js +43 -6
  87. package/dist/remoteRun/interrupts.js.map +1 -1
  88. package/dist/remoteRun/output.d.ts +2 -0
  89. package/dist/remoteRun/output.d.ts.map +1 -1
  90. package/dist/remoteRun/output.js +45 -0
  91. package/dist/remoteRun/output.js.map +1 -1
  92. package/dist/remoteRun/pairedRunners.d.ts +51 -0
  93. package/dist/remoteRun/pairedRunners.d.ts.map +1 -0
  94. package/dist/remoteRun/pairedRunners.js +165 -0
  95. package/dist/remoteRun/pairedRunners.js.map +1 -0
  96. package/dist/remoteRun/probe.d.ts +23 -1
  97. package/dist/remoteRun/probe.d.ts.map +1 -1
  98. package/dist/remoteRun/probe.js +45 -11
  99. package/dist/remoteRun/probe.js.map +1 -1
  100. package/dist/remoteRun/remoteRunCli.d.ts +13 -6
  101. package/dist/remoteRun/remoteRunCli.d.ts.map +1 -1
  102. package/dist/remoteRun/remoteRunCli.js +34 -59
  103. package/dist/remoteRun/remoteRunCli.js.map +1 -1
  104. package/dist/remoteRun/runnerClient.d.ts +2 -0
  105. package/dist/remoteRun/runnerClient.d.ts.map +1 -1
  106. package/dist/remoteRun/runnerClient.js +5 -1
  107. package/dist/remoteRun/runnerClient.js.map +1 -1
  108. package/dist/remoteRun/runnerSummary.d.ts +24 -0
  109. package/dist/remoteRun/runnerSummary.d.ts.map +1 -0
  110. package/dist/remoteRun/runnerSummary.js +86 -0
  111. package/dist/remoteRun/runnerSummary.js.map +1 -0
  112. package/dist/remoteRun/runnerWait.d.ts +68 -0
  113. package/dist/remoteRun/runnerWait.d.ts.map +1 -0
  114. package/dist/remoteRun/runnerWait.js +137 -0
  115. package/dist/remoteRun/runnerWait.js.map +1 -0
  116. package/dist/remoteRun/runnerWaitTiming.d.ts +16 -0
  117. package/dist/remoteRun/runnerWaitTiming.d.ts.map +1 -0
  118. package/dist/remoteRun/runnerWaitTiming.js +37 -0
  119. package/dist/remoteRun/runnerWaitTiming.js.map +1 -0
  120. package/dist/remoteRun/runners.d.ts +7 -7
  121. package/dist/remoteRun/runners.d.ts.map +1 -1
  122. package/dist/remoteRun/runners.js +45 -17
  123. package/dist/remoteRun/runners.js.map +1 -1
  124. package/dist/remoteRun/runnersCatalog.d.ts +14 -0
  125. package/dist/remoteRun/runnersCatalog.d.ts.map +1 -0
  126. package/dist/remoteRun/runnersCatalog.js +68 -0
  127. package/dist/remoteRun/runnersCatalog.js.map +1 -0
  128. package/dist/remoteRun/runnersConfig.d.ts +29 -20
  129. package/dist/remoteRun/runnersConfig.d.ts.map +1 -1
  130. package/dist/remoteRun/runnersConfig.js +14 -12
  131. package/dist/remoteRun/runnersConfig.js.map +1 -1
  132. package/dist/remoteRun/ssh.d.ts +22 -2
  133. package/dist/remoteRun/ssh.d.ts.map +1 -1
  134. package/dist/remoteRun/ssh.js +41 -7
  135. package/dist/remoteRun/ssh.js.map +1 -1
  136. package/dist/runnerUtility/adminCheck.d.ts +11 -0
  137. package/dist/runnerUtility/adminCheck.d.ts.map +1 -0
  138. package/dist/runnerUtility/adminCheck.js +68 -0
  139. package/dist/runnerUtility/adminCheck.js.map +1 -0
  140. package/dist/runnerUtility/appInstall.d.ts +25 -0
  141. package/dist/runnerUtility/appInstall.d.ts.map +1 -0
  142. package/dist/runnerUtility/appInstall.js +147 -0
  143. package/dist/runnerUtility/appInstall.js.map +1 -0
  144. package/dist/runnerUtility/appUpdate.d.ts +39 -0
  145. package/dist/runnerUtility/appUpdate.d.ts.map +1 -0
  146. package/dist/runnerUtility/appUpdate.js +90 -0
  147. package/dist/runnerUtility/appUpdate.js.map +1 -0
  148. package/dist/runnerUtility/execEnv.d.ts +21 -0
  149. package/dist/runnerUtility/execEnv.d.ts.map +1 -0
  150. package/dist/runnerUtility/execEnv.js +109 -0
  151. package/dist/runnerUtility/execEnv.js.map +1 -0
  152. package/dist/runnerUtility/execSession.d.ts +13 -0
  153. package/dist/runnerUtility/execSession.d.ts.map +1 -0
  154. package/dist/runnerUtility/execSession.js +58 -0
  155. package/dist/runnerUtility/execSession.js.map +1 -0
  156. package/dist/runnerUtility/hubClient.d.ts +30 -0
  157. package/dist/runnerUtility/hubClient.d.ts.map +1 -0
  158. package/dist/runnerUtility/hubClient.js +127 -0
  159. package/dist/runnerUtility/hubClient.js.map +1 -0
  160. package/dist/runnerUtility/injectStream.d.ts +9 -0
  161. package/dist/runnerUtility/injectStream.d.ts.map +1 -0
  162. package/dist/runnerUtility/injectStream.js +12 -0
  163. package/dist/runnerUtility/injectStream.js.map +1 -0
  164. package/dist/runnerUtility/iosCheck.d.ts +62 -0
  165. package/dist/runnerUtility/iosCheck.d.ts.map +1 -0
  166. package/dist/runnerUtility/iosCheck.js +200 -0
  167. package/dist/runnerUtility/iosCheck.js.map +1 -0
  168. package/dist/runnerUtility/launcher.d.ts +5 -0
  169. package/dist/runnerUtility/launcher.d.ts.map +1 -0
  170. package/dist/runnerUtility/launcher.js +85 -0
  171. package/dist/runnerUtility/launcher.js.map +1 -0
  172. package/dist/runnerUtility/linkLoop.d.ts +47 -0
  173. package/dist/runnerUtility/linkLoop.d.ts.map +1 -0
  174. package/dist/runnerUtility/linkLoop.js +281 -0
  175. package/dist/runnerUtility/linkLoop.js.map +1 -0
  176. package/dist/runnerUtility/localLinkStop.d.ts +23 -0
  177. package/dist/runnerUtility/localLinkStop.d.ts.map +1 -0
  178. package/dist/runnerUtility/localLinkStop.js +79 -0
  179. package/dist/runnerUtility/localLinkStop.js.map +1 -0
  180. package/dist/runnerUtility/machineReport.d.ts +39 -0
  181. package/dist/runnerUtility/machineReport.d.ts.map +1 -0
  182. package/dist/runnerUtility/machineReport.js +161 -0
  183. package/dist/runnerUtility/machineReport.js.map +1 -0
  184. package/dist/runnerUtility/packageId.d.ts +5 -0
  185. package/dist/runnerUtility/packageId.d.ts.map +1 -0
  186. package/dist/runnerUtility/packageId.js +64 -0
  187. package/dist/runnerUtility/packageId.js.map +1 -0
  188. package/dist/runnerUtility/pairingRecovery.d.ts +31 -0
  189. package/dist/runnerUtility/pairingRecovery.d.ts.map +1 -0
  190. package/dist/runnerUtility/pairingRecovery.js +24 -0
  191. package/dist/runnerUtility/pairingRecovery.js.map +1 -0
  192. package/dist/runnerUtility/pueueDaemon.d.ts +36 -0
  193. package/dist/runnerUtility/pueueDaemon.d.ts.map +1 -0
  194. package/dist/runnerUtility/pueueDaemon.js +165 -0
  195. package/dist/runnerUtility/pueueDaemon.js.map +1 -0
  196. package/dist/runnerUtility/runnerCli.d.ts +18 -0
  197. package/dist/runnerUtility/runnerCli.d.ts.map +1 -0
  198. package/dist/runnerUtility/runnerCli.js +184 -0
  199. package/dist/runnerUtility/runnerCli.js.map +1 -0
  200. package/dist/runnerUtility/runnerCommands.d.ts +67 -0
  201. package/dist/runnerUtility/runnerCommands.d.ts.map +1 -0
  202. package/dist/runnerUtility/runnerCommands.js +418 -0
  203. package/dist/runnerUtility/runnerCommands.js.map +1 -0
  204. package/dist/runnerUtility/runnerConfig.d.ts +63 -0
  205. package/dist/runnerUtility/runnerConfig.d.ts.map +1 -0
  206. package/dist/runnerUtility/runnerConfig.js +153 -0
  207. package/dist/runnerUtility/runnerConfig.js.map +1 -0
  208. package/dist/runnerUtility/runnerFlags.d.ts +9 -0
  209. package/dist/runnerUtility/runnerFlags.d.ts.map +1 -0
  210. package/dist/runnerUtility/runnerFlags.js +53 -0
  211. package/dist/runnerUtility/runnerFlags.js.map +1 -0
  212. package/dist/runnerUtility/runnerHome.d.ts +30 -0
  213. package/dist/runnerUtility/runnerHome.d.ts.map +1 -0
  214. package/dist/runnerUtility/runnerHome.js +82 -0
  215. package/dist/runnerUtility/runnerHome.js.map +1 -0
  216. package/dist/runnerUtility/runnerKeys.d.ts +11 -0
  217. package/dist/runnerUtility/runnerKeys.d.ts.map +1 -0
  218. package/dist/runnerUtility/runnerKeys.js +80 -0
  219. package/dist/runnerUtility/runnerKeys.js.map +1 -0
  220. package/dist/runnerUtility/runnerServers.d.ts +40 -0
  221. package/dist/runnerUtility/runnerServers.d.ts.map +1 -0
  222. package/dist/runnerUtility/runnerServers.js +79 -0
  223. package/dist/runnerUtility/runnerServers.js.map +1 -0
  224. package/dist/runnerUtility/serviceManager.d.ts +54 -0
  225. package/dist/runnerUtility/serviceManager.d.ts.map +1 -0
  226. package/dist/runnerUtility/serviceManager.js +413 -0
  227. package/dist/runnerUtility/serviceManager.js.map +1 -0
  228. package/dist/runnerUtility/serviceUnits.d.ts +36 -0
  229. package/dist/runnerUtility/serviceUnits.d.ts.map +1 -0
  230. package/dist/runnerUtility/serviceUnits.js +169 -0
  231. package/dist/runnerUtility/serviceUnits.js.map +1 -0
  232. package/dist/runnerUtility/toolInstall.d.ts +95 -0
  233. package/dist/runnerUtility/toolInstall.d.ts.map +1 -0
  234. package/dist/runnerUtility/toolInstall.js +232 -0
  235. package/dist/runnerUtility/toolInstall.js.map +1 -0
  236. package/dist/runnerUtility/versionPollTiming.d.ts +16 -0
  237. package/dist/runnerUtility/versionPollTiming.d.ts.map +1 -0
  238. package/dist/runnerUtility/versionPollTiming.js +36 -0
  239. package/dist/runnerUtility/versionPollTiming.js.map +1 -0
  240. package/dist/runners/authorizedKeys.d.ts +52 -0
  241. package/dist/runners/authorizedKeys.d.ts.map +1 -0
  242. package/dist/runners/authorizedKeys.js +153 -0
  243. package/dist/runners/authorizedKeys.js.map +1 -0
  244. package/dist/runners/bootstrapLine.d.ts +4 -0
  245. package/dist/runners/bootstrapLine.d.ts.map +1 -0
  246. package/dist/runners/bootstrapLine.js +69 -0
  247. package/dist/runners/bootstrapLine.js.map +1 -0
  248. package/dist/runners/gate.d.ts +41 -0
  249. package/dist/runners/gate.d.ts.map +1 -0
  250. package/dist/runners/gate.js +216 -0
  251. package/dist/runners/gate.js.map +1 -0
  252. package/dist/runners/gateLink.d.ts +26 -0
  253. package/dist/runners/gateLink.d.ts.map +1 -0
  254. package/dist/runners/gateLink.js +240 -0
  255. package/dist/runners/gateLink.js.map +1 -0
  256. package/dist/runners/gateProtocol.d.ts +98 -0
  257. package/dist/runners/gateProtocol.d.ts.map +1 -0
  258. package/dist/runners/gateProtocol.js +149 -0
  259. package/dist/runners/gateProtocol.js.map +1 -0
  260. package/dist/runners/gateWrapper.d.ts +6 -0
  261. package/dist/runners/gateWrapper.d.ts.map +1 -0
  262. package/dist/runners/gateWrapper.js +70 -0
  263. package/dist/runners/gateWrapper.js.map +1 -0
  264. package/dist/runners/hubAddress.d.ts +33 -0
  265. package/dist/runners/hubAddress.d.ts.map +1 -0
  266. package/dist/runners/hubAddress.js +88 -0
  267. package/dist/runners/hubAddress.js.map +1 -0
  268. package/dist/runners/hubAddressCandidates.d.ts +16 -0
  269. package/dist/runners/hubAddressCandidates.d.ts.map +1 -0
  270. package/dist/runners/hubAddressCandidates.js +96 -0
  271. package/dist/runners/hubAddressCandidates.js.map +1 -0
  272. package/dist/runners/hubIds.d.ts +16 -0
  273. package/dist/runners/hubIds.d.ts.map +1 -0
  274. package/dist/runners/hubIds.js +25 -0
  275. package/dist/runners/hubIds.js.map +1 -0
  276. package/dist/runners/hubKey.d.ts +6 -0
  277. package/dist/runners/hubKey.d.ts.map +1 -0
  278. package/dist/runners/hubKey.js +78 -0
  279. package/dist/runners/hubKey.js.map +1 -0
  280. package/dist/runners/hubLock.d.ts +7 -0
  281. package/dist/runners/hubLock.d.ts.map +1 -0
  282. package/dist/runners/hubLock.js +230 -0
  283. package/dist/runners/hubLock.js.map +1 -0
  284. package/dist/runners/hubPackage.d.ts +23 -0
  285. package/dist/runners/hubPackage.d.ts.map +1 -0
  286. package/dist/runners/hubPackage.js +184 -0
  287. package/dist/runners/hubPackage.js.map +1 -0
  288. package/dist/runners/hubPairing.d.ts +63 -0
  289. package/dist/runners/hubPairing.d.ts.map +1 -0
  290. package/dist/runners/hubPairing.js +261 -0
  291. package/dist/runners/hubPairing.js.map +1 -0
  292. package/dist/runners/hubPaths.d.ts +38 -0
  293. package/dist/runners/hubPaths.d.ts.map +1 -0
  294. package/dist/runners/hubPaths.js +94 -0
  295. package/dist/runners/hubPaths.js.map +1 -0
  296. package/dist/runners/hubRegistry.d.ts +112 -0
  297. package/dist/runners/hubRegistry.d.ts.map +1 -0
  298. package/dist/runners/hubRegistry.js +210 -0
  299. package/dist/runners/hubRegistry.js.map +1 -0
  300. package/dist/runners/linkControl.d.ts +27 -0
  301. package/dist/runners/linkControl.d.ts.map +1 -0
  302. package/dist/runners/linkControl.js +124 -0
  303. package/dist/runners/linkControl.js.map +1 -0
  304. package/dist/runners/pairCode.d.ts +30 -0
  305. package/dist/runners/pairCode.d.ts.map +1 -0
  306. package/dist/runners/pairCode.js +46 -0
  307. package/dist/runners/pairCode.js.map +1 -0
  308. package/dist/runners/pairingTiming.d.ts +18 -0
  309. package/dist/runners/pairingTiming.d.ts.map +1 -0
  310. package/dist/runners/pairingTiming.js +42 -0
  311. package/dist/runners/pairingTiming.js.map +1 -0
  312. package/dist/runners/runnerProxy.d.ts +9 -0
  313. package/dist/runners/runnerProxy.d.ts.map +1 -0
  314. package/dist/runners/runnerProxy.js +67 -0
  315. package/dist/runners/runnerProxy.js.map +1 -0
  316. package/dist/runners/runnerRemoval.d.ts +21 -0
  317. package/dist/runners/runnerRemoval.d.ts.map +1 -0
  318. package/dist/runners/runnerRemoval.js +82 -0
  319. package/dist/runners/runnerRemoval.js.map +1 -0
  320. package/dist/runners/runnersCli.d.ts +16 -0
  321. package/dist/runners/runnersCli.d.ts.map +1 -0
  322. package/dist/runners/runnersCli.js +214 -0
  323. package/dist/runners/runnersCli.js.map +1 -0
  324. package/dist/runners/runnersList.d.ts +17 -0
  325. package/dist/runners/runnersList.d.ts.map +1 -0
  326. package/dist/runners/runnersList.js +49 -0
  327. package/dist/runners/runnersList.js.map +1 -0
  328. package/dist/runners/runnersOverview.d.ts +20 -0
  329. package/dist/runners/runnersOverview.d.ts.map +1 -0
  330. package/dist/runners/runnersOverview.js +55 -0
  331. package/dist/runners/runnersOverview.js.map +1 -0
  332. package/dist/runners/sshKeys.d.ts +26 -0
  333. package/dist/runners/sshKeys.d.ts.map +1 -0
  334. package/dist/runners/sshKeys.js +60 -0
  335. package/dist/runners/sshKeys.js.map +1 -0
  336. package/dist/runners/tarArchive.d.ts +20 -0
  337. package/dist/runners/tarArchive.d.ts.map +1 -0
  338. package/dist/runners/tarArchive.js +70 -0
  339. package/dist/runners/tarArchive.js.map +1 -0
  340. package/dist/scheduler/mcpSurface.d.ts +11 -5
  341. package/dist/scheduler/mcpSurface.d.ts.map +1 -1
  342. package/dist/scheduler/mcpSurface.js +59 -26
  343. package/dist/scheduler/mcpSurface.js.map +1 -1
  344. package/dist/selfUpdate/selfCheck.js +2 -2
  345. package/dist/selfUpdate/selfCheck.js.map +1 -1
  346. package/dist/testTimings.d.ts +5 -2
  347. package/dist/testTimings.d.ts.map +1 -1
  348. package/dist/testTimings.js +10 -1
  349. package/dist/testTimings.js.map +1 -1
  350. package/dist/utils/agentEnvironment.d.ts +6 -2
  351. package/dist/utils/agentEnvironment.d.ts.map +1 -1
  352. package/dist/utils/agentEnvironment.js +13 -2
  353. package/dist/utils/agentEnvironment.js.map +1 -1
  354. package/dist/utils/runnersScreenPlan.d.ts +130 -0
  355. package/dist/utils/runnersScreenPlan.d.ts.map +1 -0
  356. package/dist/utils/runnersScreenPlan.js +257 -0
  357. package/dist/utils/runnersScreenPlan.js.map +1 -0
  358. package/package.json +5 -2
  359. package/remoteRun/runner.sh +81 -6
@@ -0,0 +1,486 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatRunnersTime = exports.runnersWatchIntervalMs = void 0;
4
+ exports.createRunners = createRunners;
5
+ /**
6
+ * `/runners` — the machines that run the agents' tests and builds, paired from Telegram. In General only (admins): one message that
7
+ * lists the machines (online or not, what they are, what they can do) with Pause / Resume / Remove per machine, and a button that pairs
8
+ * another one — a one-time line to paste on the new machine, valid 10 minutes, shown as a message that turns into «paired» or «expired».
9
+ * The hub itself is `src/runners/`; this file is only the screen, its buttons and the two background jobs (editing the pairing message,
10
+ * refreshing a list with live data). See `src/runners/README.md` for the safety line and `utils/runnersScreenPlan.ts` for the texts.
11
+ *
12
+ * Two rules keep the screen true under concurrency. (1) A render is claimed BEFORE its Telegram edit is awaited: every message has a
13
+ * generation, and a background job (the live probe) draws only if the message still carries the generation it started from — so a
14
+ * question that replaced the list while its edit was still queued is never drawn over. (2) The messages that offer a pairing code are
15
+ * this instance's own record (`runnerPairingMessages.ts`), kept until the edit that settles them was accepted.
16
+ */
17
+ const telegraf_1 = require("telegraf");
18
+ const configDirFile_1 = require("../../../configDirFile");
19
+ const i18n_1 = require("../../../i18n");
20
+ const renderAgentHtml_1 = require("../renderAgentHtml");
21
+ const sessionKey_1 = require("../../../sessionKey");
22
+ const bootstrapLine_1 = require("../../../runners/bootstrapLine");
23
+ const hubAddress_1 = require("../../../runners/hubAddress");
24
+ const hubAddressCandidates_1 = require("../../../runners/hubAddressCandidates");
25
+ const hubPairing_1 = require("../../../runners/hubPairing");
26
+ const hubRegistry_1 = require("../../../runners/hubRegistry");
27
+ const pairingTiming_1 = require("../../../runners/pairingTiming");
28
+ const runnerRemoval_1 = require("../../../runners/runnerRemoval");
29
+ const runnersScreenPlan_1 = require("../../../utils/runnersScreenPlan");
30
+ const runnerPairingMessages_1 = require("../runnerPairingMessages");
31
+ const callbackToast_1 = require("./callbackToast");
32
+ const callbackMessage_1 = require("./callbackMessage");
33
+ /** The pairing messages and screens of this many messages are remembered; an older keyboard answers «out of date». */
34
+ const messageSnapshotLimit = 50;
35
+ /** How long the next General message is read as an address after «Enter another address». */
36
+ const addressWaitMs = 10 * 60 * 1000;
37
+ /** How often the pairing messages are checked for «used» or «expired» (the registry is two small files). */
38
+ exports.runnersWatchIntervalMs = 5 * 1000;
39
+ /** A pairing message whose edits have been failing for a day is given up on (the code lived 10 minutes; the message may be gone). */
40
+ const pairingMessageGiveUpAfterFailingMs = 24 * 60 * 60 * 1000;
41
+ /** After a failed edit of a pairing message the next try waits this long, doubling each time up to the cap. */
42
+ const settleRetryFirstDelayMs = 5 * 1000;
43
+ const settleRetryMaxDelayMs = 5 * 60 * 1000;
44
+ const logTag = 'runners';
45
+ /** @description What a caught failure says to the operator: a registry error names its file and field, anything else its kind and message. */
46
+ function describeCaughtError(caught) {
47
+ if (caught instanceof hubRegistry_1.HubRegistryError)
48
+ return caught.message;
49
+ return caught instanceof Error ? `${caught.name}: ${caught.message}` : 'unknown error';
50
+ }
51
+ /** `1 Nov 14:02` in the bot's timezone (`process.env.TZ`) and the topic's language: the parts in one fixed order, so it reads the same in every locale. */
52
+ const formatRunnersTime = (epochMs) => {
53
+ const parts = new Intl.DateTimeFormat((0, i18n_1.getActiveLang)(), { day: 'numeric', month: 'short', hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }).formatToParts(epochMs);
54
+ const read = (type) => parts.find((part) => part.type === type)?.value ?? '';
55
+ return `${read('day')} ${read('month')} ${read('hour')}:${read('minute')}`;
56
+ };
57
+ exports.formatRunnersTime = formatRunnersTime;
58
+ function buildKeyboard(screen) {
59
+ return telegraf_1.Markup.inlineKeyboard(screen.rows.map((row) => row.map((button) => telegraf_1.Markup.button.callback(button.text, button.data))));
60
+ }
61
+ /**
62
+ * @description Build the `/runners` screen over its ports. `registerRunnersCommands` / `registerRunnersCallbacks` register the command and
63
+ * the buttons; `handleRunnersAddressText` is called by the text handler for a General message (true = taken as the address) and
64
+ * `cancelRunnersAddressWait` for a slash command (it ends the wait);
65
+ * `startRunnersWatcher` starts the job that edits the pairing messages and returns the way to stop it (`watchPairingsOnce` is one
66
+ * look of that job, for a test to run on its own clock).
67
+ */
68
+ function createRunners(ports) {
69
+ const { bot, command, replyToThread, editThreadMessage, editThreadKeyboard, authoriseContext, withThreadLocale, checkIsGeneral, hub, now } = ports;
70
+ const shownScreens = new Map();
71
+ const addressProposals = new Map();
72
+ /** General keys whose next message is an address → when the wait began. */
73
+ const addressWaits = new Map();
74
+ /** Pairing messages whose edit failed: when the next try may be, and the delay after it (in memory — a restart tries at once). */
75
+ const settleRetries = new Map();
76
+ let isWatchTickRunning = false;
77
+ let lastGeneration = 0;
78
+ let lastStoreProblem = null;
79
+ /** Claim `messageId` for a render: whatever started from an earlier claim no longer draws on it. Returns the claim. */
80
+ function claimMessage(key, messageId, kind, page) {
81
+ lastGeneration += 1;
82
+ const shown = { kind, generation: lastGeneration, page };
83
+ (0, callbackMessage_1.rememberBoundedSnapshot)(shownScreens, (0, callbackMessage_1.buildMessageSnapshotKey)(key, messageId), shown, messageSnapshotLimit);
84
+ return shown;
85
+ }
86
+ /** The claim `messageId` carries now; `undefined` for a message this module never drew (or forgot). */
87
+ function readClaim(key, messageId) {
88
+ return shownScreens.get((0, callbackMessage_1.buildMessageSnapshotKey)(key, messageId));
89
+ }
90
+ /** The page of the list `messageId` shows — or showed, when a question has replaced it (the question keeps the page it came from); 0 for a message never drawn. */
91
+ function readShownPage(key, messageId) {
92
+ return readClaim(key, messageId)?.page ?? 0;
93
+ }
94
+ async function reportRegistryError(key, caught) {
95
+ await replyToThread(key, (0, i18n_1.t)('runners.registryErrorText', { reason: describeCaughtError(caught) }));
96
+ }
97
+ /**
98
+ * Draw page `page` of `overview` — as a new message, or over `messageId` — and, when machines are online, ask them in the background and
99
+ * draw again. A message that is edited is claimed BEFORE the edit is awaited, so a probe that started from an earlier claim cannot draw
100
+ * over it; a new message is claimed once it exists (nothing can have started from it).
101
+ */
102
+ async function drawList(key, overview, page, target) {
103
+ const isChecking = overview.entries.some((entry) => entry.isOnline);
104
+ const screen = (0, runnersScreenPlan_1.buildRunnersScreen)({ ...overview, isChecking }, i18n_1.t, exports.formatRunnersTime, page);
105
+ let messageId;
106
+ let claim = null;
107
+ if (target.messageId === null) {
108
+ messageId = await replyToThread(key, screen.text, buildKeyboard(screen));
109
+ if (messageId !== null)
110
+ claim = claimMessage(key, messageId, 'list', screen.page);
111
+ }
112
+ else {
113
+ claim = claimMessage(key, target.messageId, 'list', screen.page);
114
+ messageId = (await editThreadMessage(key, target.messageId, screen.text, buildKeyboard(screen))) ? target.messageId : null;
115
+ }
116
+ if (messageId === null || claim === null || !isChecking)
117
+ return;
118
+ const startedFrom = claim;
119
+ void probeAndRedraw(key, messageId, overview, startedFrom).catch((error) => console.warn(`[${logTag}] live check failed: ${describeCaughtError(error)}`));
120
+ }
121
+ async function probeAndRedraw(key, messageId, overview, startedFrom) {
122
+ const probed = await ports.probeOverview(overview, now());
123
+ // No await between this check and the edit being queued: a claim made later queues its own edit behind this one.
124
+ if (readClaim(key, messageId)?.generation !== startedFrom.generation)
125
+ return;
126
+ await withThreadLocale(key, async () => {
127
+ const screen = (0, runnersScreenPlan_1.buildRunnersScreen)({ ...probed, isChecking: false }, i18n_1.t, exports.formatRunnersTime, startedFrom.page);
128
+ await editThreadMessage(key, messageId, screen.text, buildKeyboard(screen));
129
+ });
130
+ }
131
+ async function showScreen(key) {
132
+ await withThreadLocale(key, async () => {
133
+ let overview;
134
+ try {
135
+ overview = await ports.readOverview(now());
136
+ }
137
+ catch (error) {
138
+ await reportRegistryError(key, error);
139
+ return;
140
+ }
141
+ await drawList(key, overview, 0, { messageId: null });
142
+ });
143
+ }
144
+ /** Draw the list over the message a button sits on — page `page`, else the page it already shows. */
145
+ async function redrawList(key, messageId, page = readShownPage(key, messageId)) {
146
+ let overview;
147
+ try {
148
+ overview = await ports.readOverview(now());
149
+ }
150
+ catch (error) {
151
+ await reportRegistryError(key, error);
152
+ return;
153
+ }
154
+ await drawList(key, overview, page, { messageId });
155
+ }
156
+ async function showAddressStep(key) {
157
+ const proposed = await (0, hubAddressCandidates_1.findProposedHubAddress)(ports.listAddressCandidates(), ports.scanHostKey);
158
+ const step = (0, runnersScreenPlan_1.buildAddressStep)(proposed === null ? null : (0, hubAddressCandidates_1.formatHubAddress)(proposed.address), i18n_1.t);
159
+ const messageId = await replyToThread(key, step.text, buildKeyboard(step));
160
+ if (messageId === null)
161
+ return;
162
+ (0, callbackMessage_1.rememberBoundedSnapshot)(addressProposals, (0, callbackMessage_1.buildMessageSnapshotKey)(key, messageId), proposed === null ? null : proposed.address, messageSnapshotLimit);
163
+ if (proposed === null)
164
+ addressWaits.set((0, sessionKey_1.keyToString)(key), now());
165
+ }
166
+ /** The next General message is the address. */
167
+ function armAddressWait(key) {
168
+ addressWaits.set((0, sessionKey_1.keyToString)(key), now());
169
+ }
170
+ /** The address was refused: say why and keep listening for another. */
171
+ async function rejectAddress(key, reason) {
172
+ armAddressWait(key);
173
+ await replyToThread(key, (0, i18n_1.t)('runners.addressRejected', { reason }));
174
+ }
175
+ /** Make a code and post the line that carries it — a secret: the trace keeps only the message's length. */
176
+ async function offerPairing(key, address, knownCheck) {
177
+ const check = knownCheck ?? (await (0, hubAddress_1.checkHubAddress)(address, ports.scanHostKey));
178
+ if (!check.ok) {
179
+ await rejectAddress(key, check.error);
180
+ return;
181
+ }
182
+ try {
183
+ ports.ensureGateWrapper();
184
+ const pairing = await (0, hubPairing_1.createPairing)(hub, { host: address.host, port: address.port, hostKey: check.hostKey, label: ports.getBotLabel(), nowMs: now() });
185
+ const parts = (0, runnersScreenPlan_1.buildPairingMessageParts)(pairingTiming_1.pairingLifetimeMinutes, i18n_1.t);
186
+ const text = `${(0, renderAgentHtml_1.escapeHtmlText)(parts.intro)}\n\n<pre>${(0, renderAgentHtml_1.escapeHtmlText)((0, bootstrapLine_1.buildBootstrapLine)(pairing.payload))}</pre>\n\n${(0, renderAgentHtml_1.escapeHtmlText)(parts.outro)}`;
187
+ const messageId = await replyToThread(key, text, { parse_mode: 'HTML' }, { isSecret: true });
188
+ if (messageId === null) {
189
+ await replyToThread(key, (0, i18n_1.t)('runners.pairFailedText', { reason: 'the message could not be sent' }));
190
+ return;
191
+ }
192
+ try {
193
+ (0, runnerPairingMessages_1.addPairingMessage)(ports.pairingMessagesPath, { pairId: pairing.pairId, key: (0, sessionKey_1.keyToString)(key), messageId, offeredAtMs: now() });
194
+ }
195
+ catch (error) {
196
+ // The line is out and works; only its turning into «paired» / «expired» is lost.
197
+ console.warn(`[${logTag}] the pairing message could not be recorded (${(0, configDirFile_1.getCaughtErrnoCode)(error)}); it will not turn into «paired» or «expired»`);
198
+ }
199
+ }
200
+ catch (error) {
201
+ await replyToThread(key, (0, i18n_1.t)('runners.pairFailedText', { reason: describeCaughtError(error) }));
202
+ }
203
+ }
204
+ async function startPairing(key) {
205
+ const address = ports.readRunnerHost();
206
+ if (address === null)
207
+ await showAddressStep(key);
208
+ else
209
+ await offerPairing(key, address, null);
210
+ }
211
+ async function useAddress(key, messageId) {
212
+ const address = messageId === null ? undefined : addressProposals.get((0, callbackMessage_1.buildMessageSnapshotKey)(key, messageId));
213
+ if (address === undefined || address === null) {
214
+ await replyToThread(key, (0, i18n_1.t)('runners.addressExpired'));
215
+ return;
216
+ }
217
+ if (messageId !== null)
218
+ await editThreadKeyboard(key, messageId, null, logTag);
219
+ const saveError = ports.saveRunnerHost(address);
220
+ if (saveError !== null)
221
+ console.warn(`[${logTag}] the address could not be saved (${saveError}); it is used for this pairing only`);
222
+ await offerPairing(key, address, null);
223
+ }
224
+ /** A slash command ends the wait for the address (the command itself runs normally); the text handler calls it before a bot command returns. */
225
+ function cancelRunnersAddressWait(key) {
226
+ addressWaits.delete((0, sessionKey_1.keyToString)(key));
227
+ }
228
+ /**
229
+ * @description A General message while the address is awaited: parse it, check that it answers with this machine's own sshd, keep it
230
+ * and make the pairing line. A failed check keeps the wait (the reason is posted). A slash command ends the wait and runs normally.
231
+ * Resolves to whether the message was taken here.
232
+ */
233
+ async function handleRunnersAddressText(key, text) {
234
+ const keyText = (0, sessionKey_1.keyToString)(key);
235
+ const waitStartedAt = addressWaits.get(keyText);
236
+ if (waitStartedAt === undefined || !checkIsGeneral(key))
237
+ return false;
238
+ if (now() - waitStartedAt > addressWaitMs || text.startsWith('/')) {
239
+ cancelRunnersAddressWait(key);
240
+ return false;
241
+ }
242
+ await withThreadLocale(key, async () => {
243
+ const parsed = (0, hubAddress_1.parseHubAddress)(text);
244
+ if (!parsed.ok) {
245
+ await rejectAddress(key, parsed.error);
246
+ return;
247
+ }
248
+ const check = await (0, hubAddress_1.checkHubAddress)(parsed.address, ports.scanHostKey);
249
+ if (!check.ok) {
250
+ await rejectAddress(key, check.error);
251
+ return;
252
+ }
253
+ addressWaits.delete(keyText);
254
+ const saveError = ports.saveRunnerHost(parsed.address);
255
+ if (saveError !== null)
256
+ console.warn(`[${logTag}] the address could not be saved (${saveError}); it is used for this pairing only`);
257
+ if (check.note !== null)
258
+ await replyToThread(key, (0, i18n_1.t)('runners.addressNote', { note: check.note }));
259
+ await offerPairing(key, parsed.address, check);
260
+ });
261
+ return true;
262
+ }
263
+ async function handleRunnerAction(ctx, key, messageId, callback) {
264
+ let paired;
265
+ try {
266
+ paired = (0, hubRegistry_1.readPairedFile)(hub.dir);
267
+ }
268
+ catch (error) {
269
+ await (0, callbackToast_1.answerCallbackQuerySafely)(ctx);
270
+ await reportRegistryError(key, error);
271
+ return;
272
+ }
273
+ const runner = paired.rev === callback.revision ? paired.runners[callback.index] : undefined;
274
+ if (runner === undefined) {
275
+ await (0, callbackToast_1.answerCallbackQuerySafely)(ctx, (0, i18n_1.t)('runners.staleToast'));
276
+ if (messageId !== null)
277
+ await redrawList(key, messageId);
278
+ return;
279
+ }
280
+ switch (callback.action) {
281
+ case 'remove': {
282
+ await (0, callbackToast_1.answerCallbackQuerySafely)(ctx);
283
+ if (messageId === null)
284
+ return;
285
+ const question = (0, runnersScreenPlan_1.buildRemoveConfirmation)(runner.name, paired.rev, callback.index, i18n_1.t);
286
+ // Claimed first: a live check that finishes while this edit is still queued must not draw the list over the question.
287
+ const listClaim = readClaim(key, messageId);
288
+ claimMessage(key, messageId, 'question', listClaim?.page ?? 0);
289
+ await editThreadMessage(key, messageId, question.text, buildKeyboard(question));
290
+ return;
291
+ }
292
+ case 'removeNo':
293
+ await (0, callbackToast_1.answerCallbackQuerySafely)(ctx);
294
+ break;
295
+ case 'removeYes': {
296
+ // The tap is answered at once, without text: stopping the jobs on the machine can take 20 s and more, and a tap left unanswered for
297
+ // long is «too old». What happened — including whether the jobs were stopped — is told in a message of its own once it is known.
298
+ await (0, callbackToast_1.answerCallbackQuerySafely)(ctx);
299
+ try {
300
+ const removal = await (0, runnerRemoval_1.removeRunnerAndEndItsWork)(hub, runner.id, now());
301
+ if (removal !== null)
302
+ await replyToThread(key, (0, runnersScreenPlan_1.buildRemovalOutcomeText)(removal.runner.name, removal.jobs, i18n_1.t));
303
+ }
304
+ catch (error) {
305
+ await reportRegistryError(key, error);
306
+ return;
307
+ }
308
+ break;
309
+ }
310
+ case 'pause':
311
+ case 'resume': {
312
+ await (0, hubPairing_1.setPairedRunnerPaused)(hub, runner.id, callback.action === 'pause');
313
+ await (0, callbackToast_1.answerCallbackQuerySafely)(ctx, (0, i18n_1.t)(callback.action === 'pause' ? 'runners.pausedToast' : 'runners.resumedToast', { name: runner.name }));
314
+ break;
315
+ }
316
+ }
317
+ if (messageId === null)
318
+ await showScreen(key);
319
+ else
320
+ await redrawList(key, messageId);
321
+ }
322
+ async function handleCallback(ctx, callback) {
323
+ const key = await authoriseContext(ctx);
324
+ if (!key) {
325
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.access_denied'));
326
+ return;
327
+ }
328
+ const messageId = (0, callbackMessage_1.getCallbackMessageId)(ctx);
329
+ await withThreadLocale(key, async () => {
330
+ // The screen only ever stands in General, but a tap is checked where it lands.
331
+ if (!checkIsGeneral(key)) {
332
+ await (0, callbackToast_1.answerCallbackQuerySafely)(ctx, (0, i18n_1.t)('runners.generalOnlyText'));
333
+ return;
334
+ }
335
+ switch (callback.kind) {
336
+ case 'pair':
337
+ await (0, callbackToast_1.answerCallbackQuerySafely)(ctx);
338
+ await startPairing(key);
339
+ return;
340
+ case 'refresh':
341
+ await (0, callbackToast_1.answerCallbackQuerySafely)(ctx);
342
+ if (messageId === null)
343
+ await showScreen(key);
344
+ else
345
+ await redrawList(key, messageId);
346
+ return;
347
+ case 'addressUse':
348
+ await (0, callbackToast_1.answerCallbackQuerySafely)(ctx);
349
+ await useAddress(key, messageId);
350
+ return;
351
+ case 'addressOther':
352
+ await (0, callbackToast_1.answerCallbackQuerySafely)(ctx);
353
+ if (messageId !== null)
354
+ await editThreadKeyboard(key, messageId, null, logTag);
355
+ armAddressWait(key);
356
+ await replyToThread(key, (0, i18n_1.t)('runners.addressAsk'));
357
+ return;
358
+ case 'page':
359
+ await (0, callbackToast_1.answerCallbackQuerySafely)(ctx);
360
+ if (messageId === null)
361
+ await showScreen(key);
362
+ else
363
+ await redrawList(key, messageId, callback.page);
364
+ return;
365
+ case 'runner':
366
+ await handleRunnerAction(ctx, key, messageId, callback);
367
+ }
368
+ });
369
+ }
370
+ /**
371
+ * @description One look at this instance's unsettled pairing messages (`runnerPairingMessages.ts`): a code that became a runner turns its
372
+ * message into «paired», one that is no longer open (expired, swept) into «expired». An entry is dropped only after Telegram accepted
373
+ * the edit — a failed one is tried again later (5 s, doubling to 5 min) and survives a restart; one whose edits have been failing for a
374
+ * day is given up on (counted from the first failed attempt: a message older than that is still tried once). Expired credentials are
375
+ * swept from the shared registry here too, but the messages never depend on what the sweep left (they are this instance's own record,
376
+ * and another instance may have swept or even spent the code while this one was down).
377
+ *
378
+ * ORDER matters: the record is read FIRST, the registry right after, with no await between. A message is recorded after its code was
379
+ * created, so a registry read after the record holds the code of every message in it — a message is never judged against a registry
380
+ * older than itself (reading them the other way round, an offer that finishes while the sweep waits for the hub lock would be taken for
381
+ * an expired code and its live line edited away).
382
+ */
383
+ async function watchPairingsOnce() {
384
+ const nowMs = now();
385
+ const { messages, problem } = (0, runnerPairingMessages_1.readPairingMessages)(ports.pairingMessagesPath);
386
+ const pending = (0, hubRegistry_1.readPendingFile)(hub.dir).pending;
387
+ const runners = (0, hubRegistry_1.readPairedFile)(hub.dir).runners;
388
+ // A broken record fails every look: say it once, not every five seconds.
389
+ if (problem !== null && problem !== lastStoreProblem)
390
+ console.warn(`[${logTag}] ${problem}; the pairing messages it held are not followed`);
391
+ lastStoreProblem = problem;
392
+ if (pending.some((pairing) => pairing.expiresAtMs <= nowMs))
393
+ await ports.sweepExpiredCodes(nowMs);
394
+ const settledPairIds = new Set();
395
+ for (const message of messages) {
396
+ if ((settleRetries.get(message.pairId)?.nextAttemptAtMs ?? 0) > nowMs)
397
+ continue;
398
+ const runner = runners.find((candidate) => candidate.pairId === message.pairId);
399
+ const isOpen = pending.some((pairing) => pairing.pairId === message.pairId && pairing.expiresAtMs > nowMs);
400
+ if (runner === undefined && isOpen)
401
+ continue;
402
+ const key = (0, sessionKey_1.keyFromString)(message.key);
403
+ const isEdited = await withThreadLocale(key, () => editThreadMessage(key, message.messageId, runner === undefined ? (0, runnersScreenPlan_1.buildExpiredText)(i18n_1.t) : (0, runnersScreenPlan_1.buildPairedText)(runner.name, runner.pairedAtMs, i18n_1.t, exports.formatRunnersTime)));
404
+ if (isEdited) {
405
+ settledPairIds.add(message.pairId);
406
+ settleRetries.delete(message.pairId);
407
+ continue;
408
+ }
409
+ if (nowMs - (message.firstFailedAtMs ?? nowMs) > pairingMessageGiveUpAfterFailingMs) {
410
+ console.warn(`[${logTag}] a pairing message could not be edited for a day; giving up on it`);
411
+ settledPairIds.add(message.pairId);
412
+ settleRetries.delete(message.pairId);
413
+ continue;
414
+ }
415
+ (0, runnerPairingMessages_1.markPairingMessageFailed)(ports.pairingMessagesPath, message.pairId, nowMs);
416
+ const delayMs = Math.min((settleRetries.get(message.pairId)?.delayMs ?? settleRetryFirstDelayMs / 2) * 2, settleRetryMaxDelayMs);
417
+ settleRetries.set(message.pairId, { nextAttemptAtMs: nowMs + delayMs, delayMs });
418
+ }
419
+ if (settledPairIds.size > 0)
420
+ (0, runnerPairingMessages_1.removePairingMessages)(ports.pairingMessagesPath, settledPairIds);
421
+ }
422
+ /**
423
+ * Keep the `gate` wrapper that the runners' `authorized_keys` lines run pointing at THIS install (a Node upgrade or a moved checkout would
424
+ * leave them pointing at nothing). Done only for an instance that has runners or open codes: another one touches nothing under `~/.config`.
425
+ */
426
+ function refreshGateWrapper() {
427
+ try {
428
+ if ((0, hubRegistry_1.readPairedFile)(hub.dir).runners.length > 0 || (0, hubRegistry_1.readPendingFile)(hub.dir).pending.length > 0)
429
+ ports.ensureGateWrapper();
430
+ }
431
+ catch (error) {
432
+ console.warn(`[${logTag}] the gate wrapper could not be refreshed: ${describeCaughtError(error)}`);
433
+ }
434
+ }
435
+ /** @description Start the watch (one look now, then every interval); returns the way to stop it. */
436
+ function startRunnersWatcher() {
437
+ refreshGateWrapper();
438
+ let lastFailure = '';
439
+ const look = () => {
440
+ if (isWatchTickRunning)
441
+ return;
442
+ isWatchTickRunning = true;
443
+ watchPairingsOnce()
444
+ .then(() => { lastFailure = ''; })
445
+ .catch((error) => {
446
+ // A broken registry file fails every look: say it once, not every five seconds.
447
+ const failure = describeCaughtError(error);
448
+ if (failure !== lastFailure)
449
+ console.warn(`[${logTag}] pairing watch failed: ${failure}`);
450
+ lastFailure = failure;
451
+ })
452
+ .finally(() => { isWatchTickRunning = false; });
453
+ };
454
+ look();
455
+ const timer = setInterval(look, ports.watchIntervalMs ?? exports.runnersWatchIntervalMs);
456
+ timer.unref();
457
+ return () => clearInterval(timer);
458
+ }
459
+ function registerRunnersCommands() {
460
+ // `/runners` — in General the list with its buttons; anywhere else a pointer to General. Not gated on an adapter or a session:
461
+ // the machines belong to the whole bot.
462
+ command('runners', async (_ctx, key) => {
463
+ if (!checkIsGeneral(key)) {
464
+ await replyToThread(key, (0, i18n_1.t)('runners.generalOnlyText'));
465
+ return;
466
+ }
467
+ await showScreen(key);
468
+ });
469
+ }
470
+ function registerRunnersCallbacks() {
471
+ for (const data of [runnersScreenPlan_1.runnersPairCallback, runnersScreenPlan_1.runnersRefreshCallback, runnersScreenPlan_1.runnersAddressUseCallback, runnersScreenPlan_1.runnersAddressOtherCallback]) {
472
+ bot.action(data, (ctx) => {
473
+ const callback = (0, runnersScreenPlan_1.parseRunnersCallback)(data);
474
+ return callback === null ? Promise.resolve() : handleCallback(ctx, callback);
475
+ });
476
+ }
477
+ for (const pattern of [runnersScreenPlan_1.runnersPageCallbackRe, runnersScreenPlan_1.runnerActionCallbackRe]) {
478
+ bot.action(pattern, (ctx) => {
479
+ const callback = (0, runnersScreenPlan_1.parseRunnersCallback)(ctx.match[0]);
480
+ return callback === null ? Promise.resolve() : handleCallback(ctx, callback);
481
+ });
482
+ }
483
+ }
484
+ return { registerRunnersCommands, registerRunnersCallbacks, handleRunnersAddressText, cancelRunnersAddressWait, startRunnersWatcher, watchPairingsOnce };
485
+ }
486
+ //# sourceMappingURL=runners.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runners.js","sourceRoot":"","sources":["../../../../src/connectors/telegram/commands/runners.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod';
2
+ declare const pairingMessageSchema: z.ZodObject<{
3
+ pairId: z.ZodString;
4
+ key: z.ZodString;
5
+ messageId: z.ZodNumber;
6
+ offeredAtMs: z.ZodNumber;
7
+ firstFailedAtMs: z.ZodOptional<z.ZodNumber>;
8
+ }, z.core.$strict>;
9
+ /** @name PairingMessage @description One message that offers a code. */
10
+ export type PairingMessage = z.infer<typeof pairingMessageSchema>;
11
+ export interface PairingMessagesRead {
12
+ messages: PairingMessage[];
13
+ /** Why the file could not be used (it reads as empty and the next write replaces it); `null` when it was fine or missing. */
14
+ problem: string | null;
15
+ }
16
+ /** @description The entries in `filePath`. A missing file is none; one that is not valid reads as none and says why (the next write replaces it). */
17
+ export declare function readPairingMessages(filePath: string): PairingMessagesRead;
18
+ /** @description Write the entries (the newest {@link maxEntries}), through a temp file and a rename. */
19
+ export declare function writePairingMessages(filePath: string, messages: readonly PairingMessage[]): void;
20
+ /** @description Add `message` (an older entry for the same code is replaced). */
21
+ export declare function addPairingMessage(filePath: string, message: PairingMessage): void;
22
+ /** @description Take the entries for `pairIds` out. */
23
+ export declare function removePairingMessages(filePath: string, pairIds: ReadonlySet<string>): void;
24
+ /** @description Note that an edit of the message for `pairId` failed at `nowMs`: the first failure is kept, later ones change nothing. */
25
+ export declare function markPairingMessageFailed(filePath: string, pairId: string, nowMs: number): void;
26
+ export {};
27
+ //# sourceMappingURL=runnerPairingMessages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runnerPairingMessages.d.ts","sourceRoot":"","sources":["../../../src/connectors/telegram/runnerPairingMessages.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmBxB,QAAA,MAAM,oBAAoB;;;;;;kBAOxB,CAAC;AAIH,wEAAwE;AACxE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,6HAA6H;IAC7H,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,qJAAqJ;AACrJ,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAazE;AAED,wGAAwG;AACxG,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI,CAEhG;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAGjF;AAED,uDAAuD;AACvD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAG1F;AAED,0IAA0I;AAC1I,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAI9F"}