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,62 @@
1
+ import { z } from 'zod';
2
+ import { type CommandRunner } from '../selfUpdate/commandRunner';
3
+ import type { RunnerHomePaths } from './runnerHome';
4
+ export declare const iosCheckBudgetMs: number;
5
+ /**
6
+ * How the reason of a `fail` record that is the Simulator's own boot refusal begins. `runner.sh` tells the operator «needs the runner
7
+ * user's login session» for those — Apple gives no Simulator to a daemon — and shows the reason itself for every other failure (no
8
+ * runtime installed, the device could not be created); a test pins that the script carries this very text.
9
+ */
10
+ export declare const iosBootFailureReasonPrefix = "the Simulator did not";
11
+ declare const iosCheckSchema: z.ZodObject<{
12
+ status: z.ZodEnum<{
13
+ skipped: "skipped";
14
+ fail: "fail";
15
+ pass: "pass";
16
+ }>;
17
+ checkedAtMs: z.ZodNumber;
18
+ xcode: z.ZodNullable<z.ZodString>;
19
+ reason: z.ZodNullable<z.ZodString>;
20
+ }, z.core.$strict>;
21
+ /** @name IosCheckRecord @description `ios-check.json`. */
22
+ export type IosCheckRecord = z.infer<typeof iosCheckSchema>;
23
+ export interface SimulatorChoice {
24
+ deviceTypeId: string;
25
+ runtimeId: string;
26
+ }
27
+ /** @description The newest available iOS runtime and an iPhone device type (the newest the list names), out of `simctl list runtimes -j` and `list devicetypes -j`. */
28
+ export declare function chooseSimulator(runtimesJson: string, deviceTypesJson: string): SimulatorChoice | null;
29
+ /** @description `16.2 (16C5032a)` out of `xcodebuild -version`, or `null`. */
30
+ export declare function parseXcodeVersion(output: string): string | null;
31
+ export interface IosCheckDeps {
32
+ runner: CommandRunner;
33
+ platform: NodeJS.Platform;
34
+ now: () => number;
35
+ }
36
+ export declare function createIosCheckDeps(): IosCheckDeps;
37
+ export declare function readXcodeVersion(deps: IosCheckDeps): Promise<string | null>;
38
+ /** @description Run the boot check: create → boot → bootstatus → delete. Never throws; the device is deleted whatever happened. */
39
+ export declare function runIosBootCheck(deps: IosCheckDeps): Promise<IosCheckRecord>;
40
+ export declare function readIosCheck(paths: RunnerHomePaths): IosCheckRecord | null;
41
+ /** @description One line, so `runner.sh probe` can read it with `grep`. */
42
+ export declare function writeIosCheck(paths: RunnerHomePaths, record: IosCheckRecord): void;
43
+ /** @description Check again when there is no result yet or Xcode is another one than the last result saw (a version, a build, gone). */
44
+ export declare function checkShouldRunIosCheck(last: IosCheckRecord | null, currentXcode: string | null): boolean;
45
+ export interface IosRefreshOptions {
46
+ /**
47
+ * The link just started (a terminal, a LaunchAgent, a LaunchDaemon): check regardless of what the last result says. Whether the Simulator
48
+ * boots depends on WHO runs the link — a result from an interactive login proves nothing for a daemon that replaced it, and a daemon's
49
+ * «fail» must not outlive a switch to a login session — so the same Xcode version is no reason to trust an older result. Within one run
50
+ * (the hourly look) only a different Xcode starts a check.
51
+ */
52
+ isStartup: boolean;
53
+ }
54
+ /**
55
+ * @description At the link's start (always) and then once an hour (when Xcode is not what the last result saw): run the boot check and record it.
56
+ * At the start the old record is deleted first: a paired Mac with no record answers «being checked», so an answer given by another account or
57
+ * kind of service is never offered while the new check runs. (`runIosBootCheck` never throws — a failed boot is a `fail` record; what can
58
+ * throw here is writing the record, and the callers log that.)
59
+ */
60
+ export declare function refreshIosCheck(paths: RunnerHomePaths, deps: IosCheckDeps, options: IosRefreshOptions): Promise<IosCheckRecord | null>;
61
+ export {};
62
+ //# sourceMappingURL=iosCheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iosCheck.d.ts","sourceRoot":"","sources":["../../src/runnerUtility/iosCheck.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAgBpD,eAAO,MAAM,gBAAgB,QAAa,CAAC;AAG3C;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,0BAA0B,CAAC;AAElE,QAAA,MAAM,cAAc;;;;;;;;;kBAMlB,CAAC;AAEH,0DAA0D;AAC1D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAgCD,uKAAuK;AACvK,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAOrG;AAED,8EAA8E;AAC9E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI/D;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIjF;AAQD,mIAAmI;AACnI,wBAAsB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CA2BjF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,cAAc,GAAG,IAAI,CAO1E;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAElF;AAED,wIAAwI;AACxI,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAGxG;AAED,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAQ5I"}
@@ -0,0 +1,200 @@
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.iosBootFailureReasonPrefix = exports.iosCheckBudgetMs = void 0;
37
+ exports.chooseSimulator = chooseSimulator;
38
+ exports.parseXcodeVersion = parseXcodeVersion;
39
+ exports.createIosCheckDeps = createIosCheckDeps;
40
+ exports.readXcodeVersion = readXcodeVersion;
41
+ exports.runIosBootCheck = runIosBootCheck;
42
+ exports.readIosCheck = readIosCheck;
43
+ exports.writeIosCheck = writeIosCheck;
44
+ exports.checkShouldRunIosCheck = checkShouldRunIosCheck;
45
+ exports.refreshIosCheck = refreshIosCheck;
46
+ const fs = __importStar(require("fs"));
47
+ const zod_1 = require("zod");
48
+ const configDirFile_1 = require("../configDirFile");
49
+ const commandRunner_1 = require("../selfUpdate/commandRunner");
50
+ /**
51
+ * @description Can this runner drive the iOS Simulator? Apple: the Simulator is not available to a LaunchDaemon or a process started as
52
+ * another user — it needs the account's own login session. So the runner does not guess from «Xcode is installed»: it really boots one.
53
+ * A bounded check (create a device → boot it → wait for the boot to finish → delete it) runs when the link starts and whenever Xcode
54
+ * changes, and its result is written to `ios-check.json`, one line, for `runner.sh probe` to turn into the `ios` capability:
55
+ *
56
+ * pass the Simulator boots here → `ios`
57
+ * fail it does not → «ios: no — needs the runner user's login session» (a helper in that user's GUI session is a follow-up)
58
+ * skipped not macOS, or no Xcode → nothing to say
59
+ *
60
+ * Whatever happens, the simulator device the check made is deleted again.
61
+ */
62
+ const stepTimeoutMs = 60 * 1000;
63
+ exports.iosCheckBudgetMs = 180 * 1000;
64
+ const checkDeviceName = 'charness-runner-boot-check';
65
+ /**
66
+ * How the reason of a `fail` record that is the Simulator's own boot refusal begins. `runner.sh` tells the operator «needs the runner
67
+ * user's login session» for those — Apple gives no Simulator to a daemon — and shows the reason itself for every other failure (no
68
+ * runtime installed, the device could not be created); a test pins that the script carries this very text.
69
+ */
70
+ exports.iosBootFailureReasonPrefix = 'the Simulator did not';
71
+ const iosCheckSchema = zod_1.z.strictObject({
72
+ status: zod_1.z.enum(['pass', 'fail', 'skipped']),
73
+ checkedAtMs: zod_1.z.number().int().nonnegative(),
74
+ /** `16.2 (16C5032a)`: what Xcode was when this was checked; a different one means check again. */
75
+ xcode: zod_1.z.string().nullable(),
76
+ reason: zod_1.z.string().nullable(),
77
+ });
78
+ function compareVersions(left, right) {
79
+ const leftParts = left.split('.').map(Number);
80
+ const rightParts = right.split('.').map(Number);
81
+ for (let index = 0; index < Math.max(leftParts.length, rightParts.length); index += 1) {
82
+ const difference = (leftParts[index] ?? 0) - (rightParts[index] ?? 0);
83
+ if (difference !== 0)
84
+ return difference;
85
+ }
86
+ return 0;
87
+ }
88
+ function parseJsonObject(text) {
89
+ try {
90
+ return JSON.parse(text);
91
+ }
92
+ catch {
93
+ return null;
94
+ }
95
+ }
96
+ /** @description The newest available iOS runtime and an iPhone device type (the newest the list names), out of `simctl list runtimes -j` and `list devicetypes -j`. */
97
+ function chooseSimulator(runtimesJson, deviceTypesJson) {
98
+ const runtimes = parseJsonObject(runtimesJson)?.runtimes ?? [];
99
+ const deviceTypes = parseJsonObject(deviceTypesJson)?.devicetypes ?? [];
100
+ const ios = runtimes.filter((runtime) => runtime.platform === 'iOS' && runtime.isAvailable !== false).sort((left, right) => compareVersions(right.version, left.version));
101
+ const iphones = deviceTypes.filter((deviceType) => deviceType.productFamily === 'iPhone');
102
+ const iphone = iphones.at(-1);
103
+ return ios.length === 0 || iphone === undefined ? null : { runtimeId: ios[0].identifier, deviceTypeId: iphone.identifier };
104
+ }
105
+ /** @description `16.2 (16C5032a)` out of `xcodebuild -version`, or `null`. */
106
+ function parseXcodeVersion(output) {
107
+ const version = /Xcode\s+(\S+)/.exec(output)?.[1];
108
+ const build = /Build version\s+(\S+)/.exec(output)?.[1];
109
+ return version === undefined ? null : build === undefined ? version : `${version} (${build})`;
110
+ }
111
+ function createIosCheckDeps() {
112
+ return { runner: commandRunner_1.runCommand, platform: process.platform, now: Date.now };
113
+ }
114
+ async function readXcodeVersion(deps) {
115
+ if (deps.platform !== 'darwin')
116
+ return null;
117
+ const result = await deps.runner('xcodebuild', ['-version'], { timeoutMs: stepTimeoutMs });
118
+ return result.ok ? parseXcodeVersion(result.stdout) : null;
119
+ }
120
+ /** `simctl <step> failed: <last line of its stderr>` (or how it ended): the reason for a simctl command that did not work at all, which is not the same as «nothing installed». */
121
+ function describeSimctlFailure(stepName, result) {
122
+ const lastErrorLine = result.stderr.trim().split('\n').slice(-1)[0];
123
+ return `simctl ${stepName} failed: ${lastErrorLine !== '' ? lastErrorLine : result.isTimedOut ? 'no answer in time' : `exit ${result.exitCode ?? 'none'}`}`;
124
+ }
125
+ /** @description Run the boot check: create → boot → bootstatus → delete. Never throws; the device is deleted whatever happened. */
126
+ async function runIosBootCheck(deps) {
127
+ const xcode = await readXcodeVersion(deps);
128
+ const record = (status, reason) => ({ status, checkedAtMs: deps.now(), xcode, reason });
129
+ if (deps.platform !== 'darwin')
130
+ return record('skipped', 'not macOS');
131
+ if (xcode === null)
132
+ return record('skipped', 'no Xcode');
133
+ const deadline = deps.now() + exports.iosCheckBudgetMs;
134
+ const step = (args) => deps.runner('xcrun', ['simctl', ...args], { timeoutMs: Math.max(1000, Math.min(stepTimeoutMs, deadline - deps.now())) });
135
+ const runtimes = await step(['list', 'runtimes', '-j']);
136
+ const deviceTypes = await step(['list', 'devicetypes', '-j']);
137
+ // A simctl that cannot be run (it cannot reach CoreSimulator, for one) is told as that — «no runtime installed» is only for a list that worked.
138
+ if (!runtimes.ok)
139
+ return record('fail', describeSimctlFailure('list runtimes', runtimes));
140
+ if (!deviceTypes.ok)
141
+ return record('fail', describeSimctlFailure('list devicetypes', deviceTypes));
142
+ const choice = chooseSimulator(runtimes.stdout, deviceTypes.stdout);
143
+ if (choice === null)
144
+ return record('fail', 'no iOS simulator runtime and iPhone device type are installed');
145
+ const created = await step(['create', checkDeviceName, choice.deviceTypeId, choice.runtimeId]);
146
+ if (!created.ok)
147
+ return record('fail', describeSimctlFailure('create', created));
148
+ const udid = created.stdout.trim();
149
+ if (udid === '')
150
+ return record('fail', 'the Simulator device could not be created');
151
+ try {
152
+ const boot = await step(['boot', udid]);
153
+ if (!boot.ok)
154
+ return record('fail', `${exports.iosBootFailureReasonPrefix} boot: ${boot.stderr.trim().split('\n').slice(-1)[0]}`);
155
+ const status = await step(['bootstatus', udid, '-b']);
156
+ return status.ok ? record('pass', null) : record('fail', `${exports.iosBootFailureReasonPrefix} finish booting: ${status.stderr.trim().split('\n').slice(-1)[0]}`);
157
+ }
158
+ finally {
159
+ await step(['shutdown', udid]);
160
+ await step(['delete', udid]);
161
+ }
162
+ }
163
+ function readIosCheck(paths) {
164
+ try {
165
+ const parsed = iosCheckSchema.safeParse(JSON.parse(fs.readFileSync(paths.iosCheck, 'utf8')));
166
+ return parsed.success ? parsed.data : null;
167
+ }
168
+ catch {
169
+ return null;
170
+ }
171
+ }
172
+ /** @description One line, so `runner.sh probe` can read it with `grep`. */
173
+ function writeIosCheck(paths, record) {
174
+ (0, configDirFile_1.writeTextFileAtomically)(paths.iosCheck, `${JSON.stringify(iosCheckSchema.parse(record))}\n`, 0o644);
175
+ }
176
+ /** @description Check again when there is no result yet or Xcode is another one than the last result saw (a version, a build, gone). */
177
+ function checkShouldRunIosCheck(last, currentXcode) {
178
+ if (currentXcode === null)
179
+ return last === null || last.status !== 'skipped' || last.xcode !== null;
180
+ return last === null || last.xcode !== currentXcode;
181
+ }
182
+ /**
183
+ * @description At the link's start (always) and then once an hour (when Xcode is not what the last result saw): run the boot check and record it.
184
+ * At the start the old record is deleted first: a paired Mac with no record answers «being checked», so an answer given by another account or
185
+ * kind of service is never offered while the new check runs. (`runIosBootCheck` never throws — a failed boot is a `fail` record; what can
186
+ * throw here is writing the record, and the callers log that.)
187
+ */
188
+ async function refreshIosCheck(paths, deps, options) {
189
+ if (deps.platform !== 'darwin')
190
+ return null;
191
+ if (options.isStartup)
192
+ fs.rmSync(paths.iosCheck, { force: true });
193
+ const current = await readXcodeVersion(deps);
194
+ if (!options.isStartup && !checkShouldRunIosCheck(readIosCheck(paths), current))
195
+ return null;
196
+ const record = await runIosBootCheck(deps);
197
+ writeIosCheck(paths, record);
198
+ return record;
199
+ }
200
+ //# sourceMappingURL=iosCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iosCheck.js","sourceRoot":"","sources":["../../src/runnerUtility/iosCheck.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6EA,0CAOC;AAGD,8CAIC;AAQD,gDAEC;AAED,4CAIC;AASD,0CA2BC;AAED,oCAOC;AAGD,sCAEC;AAGD,wDAGC;AAkBD,0CAQC;AA7LD,uCAAyB;AACzB,6BAAwB;AACxB,oDAA2D;AAC3D,+DAA6E;AAG7E;;;;;;;;;;;GAWG;AAEH,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC;AACnB,QAAA,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC;AAC3C,MAAM,eAAe,GAAG,4BAA4B,CAAC;AAErD;;;;GAIG;AACU,QAAA,0BAA0B,GAAG,uBAAuB,CAAC;AAElE,MAAM,cAAc,GAAG,OAAC,CAAC,YAAY,CAAC;IACpC,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAC3C,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IAC3C,kGAAkG;IAClG,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAsBH,SAAS,eAAe,CAAC,IAAY,EAAE,KAAa;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtF,MAAM,UAAU,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,IAAI,UAAU,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC;IAC1C,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,eAAe,CAAS,IAAY;IAC3C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,uKAAuK;AACvK,SAAgB,eAAe,CAAC,YAAoB,EAAE,eAAuB;IAC3E,MAAM,QAAQ,GAAG,eAAe,CAAiC,YAAY,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC;IAC/F,MAAM,WAAW,GAAG,eAAe,CAAuC,eAAe,CAAC,EAAE,WAAW,IAAI,EAAE,CAAC;IAC9G,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,KAAK,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1K,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC;IAC1F,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;AAC7H,CAAC;AAED,8EAA8E;AAC9E,SAAgB,iBAAiB,CAAC,MAAc;IAC9C,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxD,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,KAAK,GAAG,CAAC;AAChG,CAAC;AAQD,SAAgB,kBAAkB;IAChC,OAAO,EAAE,MAAM,EAAE,0BAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3E,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,IAAkB;IACvD,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;IAC3F,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,mLAAmL;AACnL,SAAS,qBAAqB,CAAC,QAAgB,EAAE,MAA0C;IACzF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,UAAU,QAAQ,YAAY,aAAa,KAAK,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,QAAQ,MAAM,CAAC,QAAQ,IAAI,MAAM,EAAE,EAAE,CAAC;AAC9J,CAAC;AAED,mIAAmI;AAC5H,KAAK,UAAU,eAAe,CAAC,IAAkB;IACtD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,CAAC,MAAgC,EAAE,MAAqB,EAAkB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACjJ,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACtE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,wBAAgB,CAAC;IAC/C,MAAM,IAAI,GAAG,CAAC,IAAc,EAA6B,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACrL,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9D,gJAAgJ;IAChJ,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1F,IAAI,CAAC,WAAW,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC,CAAC;IACnG,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpE,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC,MAAM,EAAE,+DAA+D,CAAC,CAAC;IAC5G,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/F,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACjF,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,MAAM,CAAC,MAAM,EAAE,2CAA2C,CAAC,CAAC;IACpF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC,MAAM,EAAE,GAAG,kCAA0B,UAAU,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1H,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,kCAA0B,oBAAoB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7J,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;QAC/B,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,KAAsB;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7F,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,SAAgB,aAAa,CAAC,KAAsB,EAAE,MAAsB;IAC1E,IAAA,uCAAuB,EAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACtG,CAAC;AAED,wIAAwI;AACxI,SAAgB,sBAAsB,CAAC,IAA2B,EAAE,YAA2B;IAC7F,IAAI,YAAY,KAAK,IAAI;QAAE,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;IACpG,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC;AACtD,CAAC;AAYD;;;;;GAKG;AACI,KAAK,UAAU,eAAe,CAAC,KAAsB,EAAE,IAAkB,EAAE,OAA0B;IAC1G,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,OAAO,CAAC,SAAS;QAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7F,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAC3C,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { RunnerHomePaths } from './runnerHome';
2
+ export declare function renderLauncher(paths: Pick<RunnerHomePaths, 'currentApp'>, nodePath: string): string;
3
+ /** @description Write the launcher (when it differs) and return its path. */
4
+ export declare function ensureLauncher(paths: RunnerHomePaths, nodePath: string): string;
5
+ //# sourceMappingURL=launcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/runnerUtility/launcher.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAapD,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkBnG;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAW/E"}
@@ -0,0 +1,85 @@
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.renderLauncher = renderLauncher;
37
+ exports.ensureLauncher = ensureLauncher;
38
+ const fs = __importStar(require("fs"));
39
+ const configDirFile_1 = require("../configDirFile");
40
+ const tmuxExec_1 = require("../utils/tmuxExec");
41
+ const appInstall_1 = require("./appInstall");
42
+ /**
43
+ * @description `~/.charness-runner/bin/charness-runner`: a two-line `sh` loop that starts the app `current` points at and starts it
44
+ * AGAIN when it exits with {@link restartExitCode} (an update installed a newer copy). The app runs in the background of the
45
+ * script so that the script can pass TERM / INT / HUP on to it: under systemd's `KillMode=process` only the script is signalled, and
46
+ * without the forwarding the app would be left running unsupervised. Terminal runs, the systemd unit and the launchd
47
+ * job all start this one file, so an update needs no service reinstall. `node` is the one that made the file; if it has moved, the
48
+ * `node` on PATH is tried.
49
+ */
50
+ const launcherMode = 0o755;
51
+ function renderLauncher(paths, nodePath) {
52
+ const cli = `${paths.currentApp}/dist/runnerUtility/runnerCli.js`;
53
+ return [
54
+ '#!/bin/sh',
55
+ '# Written by charness-runner. Exit code 75 asks for a restart onto an updated copy; TERM / INT / HUP go to the app.',
56
+ `NODE=${(0, tmuxExec_1.shellSingleQuote)(nodePath)}`,
57
+ '[ -x "$NODE" ] || NODE=node',
58
+ 'child=',
59
+ 'trap \'[ -n "$child" ] && kill -TERM "$child" 2>/dev/null\' TERM INT HUP',
60
+ 'while :; do',
61
+ ` "$NODE" ${(0, tmuxExec_1.shellSingleQuote)(cli)} "$@" &`,
62
+ ' child=$!',
63
+ ' code=0',
64
+ ' while kill -0 "$child" 2>/dev/null; do wait "$child"; code=$?; done',
65
+ ` [ "$code" = ${appInstall_1.restartExitCode} ] || exit "$code"`,
66
+ 'done',
67
+ '',
68
+ ].join('\n');
69
+ }
70
+ /** @description Write the launcher (when it differs) and return its path. */
71
+ function ensureLauncher(paths, nodePath) {
72
+ fs.mkdirSync(paths.binDir, { recursive: true, mode: 0o700 });
73
+ const text = renderLauncher(paths, nodePath);
74
+ let current = null;
75
+ try {
76
+ current = fs.readFileSync(paths.launcher, 'utf8');
77
+ }
78
+ catch {
79
+ current = null;
80
+ }
81
+ if (current !== text)
82
+ (0, configDirFile_1.writeTextFileAtomically)(paths.launcher, text, launcherMode);
83
+ return paths.launcher;
84
+ }
85
+ //# sourceMappingURL=launcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/runnerUtility/launcher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,wCAkBC;AAGD,wCAWC;AAjDD,uCAAyB;AACzB,oDAA2D;AAC3D,gDAAqD;AACrD,6CAA+C;AAG/C;;;;;;;GAOG;AAEH,MAAM,YAAY,GAAG,KAAK,CAAC;AAE3B,SAAgB,cAAc,CAAC,KAA0C,EAAE,QAAgB;IACzF,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,kCAAkC,CAAC;IAClE,OAAO;QACL,WAAW;QACX,qHAAqH;QACrH,QAAQ,IAAA,2BAAgB,EAAC,QAAQ,CAAC,EAAE;QACpC,6BAA6B;QAC7B,QAAQ;QACR,0EAA0E;QAC1E,aAAa;QACb,aAAa,IAAA,2BAAgB,EAAC,GAAG,CAAC,SAAS;QAC3C,YAAY;QACZ,UAAU;QACV,uEAAuE;QACvE,iBAAiB,4BAAe,oBAAoB;QACpD,MAAM;QACN,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,6EAA6E;AAC7E,SAAgB,cAAc,CAAC,KAAsB,EAAE,QAAgB;IACrE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7C,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,KAAK,IAAI;QAAE,IAAA,uCAAuB,EAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAClF,OAAO,KAAK,CAAC,QAAQ,CAAC;AACxB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { updateFromHub } from './appUpdate';
2
+ import { connectToHub } from './hubClient';
3
+ import { type RunnerConfig } from './runnerConfig';
4
+ import type { RunnerHomePaths } from './runnerHome';
5
+ import type { RunnerKeys } from './runnerKeys';
6
+ import type { RunnerServers } from './runnerServers';
7
+ export declare const removedRetryMs: number;
8
+ /** How long after the first refusal of the key a second one confirms that the runner was removed. */
9
+ export declare const removalConfirmMs: number;
10
+ /** @description The wait before attempt number `failures + 1` (0 failures: the first retry); `random` is in [0, 1). */
11
+ export declare function computeBackoffMs(failures: number, random: number): number;
12
+ export interface LinkLoopDeps {
13
+ paths: RunnerHomePaths;
14
+ config: RunnerConfig;
15
+ keys: RunnerKeys;
16
+ servers: RunnerServers;
17
+ now?: () => number;
18
+ /** How often a linked runner asks the hub for its package (default: {@link readRunnerVersionPollMs}). */
19
+ versionPollMs?: number;
20
+ /** Stops the jobs of the queue; called when the runner learns it was removed. */
21
+ stopJobs?: () => Promise<void>;
22
+ /** The wait between the two refusals that confirm a removal (default {@link removalConfirmMs}). */
23
+ removalConfirmMs?: number;
24
+ /** How long a bare refusal of the key must last before it stops the jobs (default {@link unconfirmedRemovalStopAfterMs}). */
25
+ unconfirmedRemovalStopAfterMs?: number;
26
+ random?: () => number;
27
+ sleep?: (ms: number, signal: AbortSignal) => Promise<void>;
28
+ connect?: typeof connectToHub;
29
+ update?: typeof updateFromHub;
30
+ log?: (line: string) => void;
31
+ }
32
+ export interface LinkLoopHandle {
33
+ /** Run until aborted (resolves 0) or until an update asks for a restart (resolves {@link restartExitCode}). */
34
+ run: (signal: AbortSignal) => Promise<number>;
35
+ /** The built-in server calls this whenever the number of running commands changes. */
36
+ notifyActiveCountChange: () => void;
37
+ }
38
+ export declare function createLinkLoop(deps: LinkLoopDeps): LinkLoopHandle;
39
+ //# sourceMappingURL=linkLoop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linkLoop.d.ts","sourceRoot":"","sources":["../../src/runnerUtility/linkLoop.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,aAAa,EAAsB,MAAM,aAAa,CAAC;AAG9E,OAAO,EAAY,YAAY,EAAyD,MAAM,aAAa,CAAC;AAE5G,OAAO,EAAqC,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACtF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAsBrD,eAAO,MAAM,cAAc,QAAiB,CAAC;AAC7C,qGAAqG;AACrG,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAE1C,uHAAuH;AACvH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGzE;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,yGAAyG;IACzG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,mGAAmG;IACnG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6HAA6H;IAC7H,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,OAAO,CAAC,EAAE,OAAO,YAAY,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,aAAa,CAAC;IAC9B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,+GAA+G;IAC/G,GAAG,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,sFAAsF;IACtF,uBAAuB,EAAE,MAAM,IAAI,CAAC;CACrC;AAoBD,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc,CAuMjE"}