@apralabs/apra-fleet 0.2.2

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 (482) hide show
  1. package/LICENSE +182 -0
  2. package/README.md +324 -0
  3. package/dist/cli/auth.d.ts +2 -0
  4. package/dist/cli/auth.d.ts.map +1 -0
  5. package/dist/cli/auth.js +210 -0
  6. package/dist/cli/auth.js.map +1 -0
  7. package/dist/cli/config.d.ts +30 -0
  8. package/dist/cli/config.d.ts.map +1 -0
  9. package/dist/cli/config.js +157 -0
  10. package/dist/cli/config.js.map +1 -0
  11. package/dist/cli/install.d.ts +37 -0
  12. package/dist/cli/install.d.ts.map +1 -0
  13. package/dist/cli/install.js +630 -0
  14. package/dist/cli/install.js.map +1 -0
  15. package/dist/cli/secret.d.ts +2 -0
  16. package/dist/cli/secret.d.ts.map +1 -0
  17. package/dist/cli/secret.js +366 -0
  18. package/dist/cli/secret.js.map +1 -0
  19. package/dist/cli/uninstall.d.ts +2 -0
  20. package/dist/cli/uninstall.d.ts.map +1 -0
  21. package/dist/cli/uninstall.js +312 -0
  22. package/dist/cli/uninstall.js.map +1 -0
  23. package/dist/cli/update.d.ts +2 -0
  24. package/dist/cli/update.d.ts.map +1 -0
  25. package/dist/cli/update.js +105 -0
  26. package/dist/cli/update.js.map +1 -0
  27. package/dist/delivery-mode.d.ts +19 -0
  28. package/dist/delivery-mode.d.ts.map +1 -0
  29. package/dist/delivery-mode.js +26 -0
  30. package/dist/delivery-mode.js.map +1 -0
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +272 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/onboarding/text.d.ts +83 -0
  36. package/dist/onboarding/text.d.ts.map +1 -0
  37. package/dist/onboarding/text.js +126 -0
  38. package/dist/onboarding/text.js.map +1 -0
  39. package/dist/os/index.d.ts +9 -0
  40. package/dist/os/index.d.ts.map +1 -0
  41. package/dist/os/index.js +16 -0
  42. package/dist/os/index.js.map +1 -0
  43. package/dist/os/linux.d.ts +50 -0
  44. package/dist/os/linux.d.ts.map +1 -0
  45. package/dist/os/linux.js +244 -0
  46. package/dist/os/linux.js.map +1 -0
  47. package/dist/os/macos.d.ts +12 -0
  48. package/dist/os/macos.d.ts.map +1 -0
  49. package/dist/os/macos.js +41 -0
  50. package/dist/os/macos.js.map +1 -0
  51. package/dist/os/os-commands.d.ts +47 -0
  52. package/dist/os/os-commands.d.ts.map +1 -0
  53. package/dist/os/os-commands.js +3 -0
  54. package/dist/os/os-commands.js.map +1 -0
  55. package/dist/os/windows-wrapper.d.ts +6 -0
  56. package/dist/os/windows-wrapper.d.ts.map +1 -0
  57. package/dist/os/windows-wrapper.js +9 -0
  58. package/dist/os/windows-wrapper.js.map +1 -0
  59. package/dist/os/windows.d.ts +44 -0
  60. package/dist/os/windows.d.ts.map +1 -0
  61. package/dist/os/windows.js +269 -0
  62. package/dist/os/windows.js.map +1 -0
  63. package/dist/paths.d.ts +2 -0
  64. package/dist/paths.d.ts.map +1 -0
  65. package/dist/paths.js +4 -0
  66. package/dist/paths.js.map +1 -0
  67. package/dist/providers/agy.d.ts +41 -0
  68. package/dist/providers/agy.d.ts.map +1 -0
  69. package/dist/providers/agy.js +208 -0
  70. package/dist/providers/agy.js.map +1 -0
  71. package/dist/providers/claude.d.ts +40 -0
  72. package/dist/providers/claude.d.ts.map +1 -0
  73. package/dist/providers/claude.js +178 -0
  74. package/dist/providers/claude.js.map +1 -0
  75. package/dist/providers/codex.d.ts +44 -0
  76. package/dist/providers/codex.d.ts.map +1 -0
  77. package/dist/providers/codex.js +173 -0
  78. package/dist/providers/codex.js.map +1 -0
  79. package/dist/providers/copilot.d.ts +40 -0
  80. package/dist/providers/copilot.d.ts.map +1 -0
  81. package/dist/providers/copilot.js +172 -0
  82. package/dist/providers/copilot.js.map +1 -0
  83. package/dist/providers/gemini.d.ts +41 -0
  84. package/dist/providers/gemini.d.ts.map +1 -0
  85. package/dist/providers/gemini.js +192 -0
  86. package/dist/providers/gemini.js.map +1 -0
  87. package/dist/providers/index.d.ts +10 -0
  88. package/dist/providers/index.d.ts.map +1 -0
  89. package/dist/providers/index.js +27 -0
  90. package/dist/providers/index.js.map +1 -0
  91. package/dist/providers/provider.d.ts +85 -0
  92. package/dist/providers/provider.d.ts.map +1 -0
  93. package/dist/providers/provider.js +21 -0
  94. package/dist/providers/provider.js.map +1 -0
  95. package/dist/services/auth-socket.d.ts +87 -0
  96. package/dist/services/auth-socket.d.ts.map +1 -0
  97. package/dist/services/auth-socket.js +684 -0
  98. package/dist/services/auth-socket.js.map +1 -0
  99. package/dist/services/auth-web.d.ts +31 -0
  100. package/dist/services/auth-web.d.ts.map +1 -0
  101. package/dist/services/auth-web.js +202 -0
  102. package/dist/services/auth-web.js.map +1 -0
  103. package/dist/services/cloud/activity.d.ts +16 -0
  104. package/dist/services/cloud/activity.d.ts.map +1 -0
  105. package/dist/services/cloud/activity.js +61 -0
  106. package/dist/services/cloud/activity.js.map +1 -0
  107. package/dist/services/cloud/aws.d.ts +24 -0
  108. package/dist/services/cloud/aws.d.ts.map +1 -0
  109. package/dist/services/cloud/aws.js +114 -0
  110. package/dist/services/cloud/aws.js.map +1 -0
  111. package/dist/services/cloud/cost.d.ts +46 -0
  112. package/dist/services/cloud/cost.d.ts.map +1 -0
  113. package/dist/services/cloud/cost.js +161 -0
  114. package/dist/services/cloud/cost.js.map +1 -0
  115. package/dist/services/cloud/idle-manager.d.ts +20 -0
  116. package/dist/services/cloud/idle-manager.d.ts.map +1 -0
  117. package/dist/services/cloud/idle-manager.js +103 -0
  118. package/dist/services/cloud/idle-manager.js.map +1 -0
  119. package/dist/services/cloud/lifecycle.d.ts +14 -0
  120. package/dist/services/cloud/lifecycle.d.ts.map +1 -0
  121. package/dist/services/cloud/lifecycle.js +128 -0
  122. package/dist/services/cloud/lifecycle.js.map +1 -0
  123. package/dist/services/cloud/task-wrapper.d.ts +30 -0
  124. package/dist/services/cloud/task-wrapper.d.ts.map +1 -0
  125. package/dist/services/cloud/task-wrapper.js +116 -0
  126. package/dist/services/cloud/task-wrapper.js.map +1 -0
  127. package/dist/services/cloud/types.d.ts +26 -0
  128. package/dist/services/cloud/types.d.ts.map +1 -0
  129. package/dist/services/cloud/types.js +2 -0
  130. package/dist/services/cloud/types.js.map +1 -0
  131. package/dist/services/credential-cleanup.d.ts +4 -0
  132. package/dist/services/credential-cleanup.d.ts.map +1 -0
  133. package/dist/services/credential-cleanup.js +61 -0
  134. package/dist/services/credential-cleanup.js.map +1 -0
  135. package/dist/services/credential-store.d.ts +56 -0
  136. package/dist/services/credential-store.d.ts.map +1 -0
  137. package/dist/services/credential-store.js +280 -0
  138. package/dist/services/credential-store.js.map +1 -0
  139. package/dist/services/file-transfer.d.ts +22 -0
  140. package/dist/services/file-transfer.d.ts.map +1 -0
  141. package/dist/services/file-transfer.js +14 -0
  142. package/dist/services/file-transfer.js.map +1 -0
  143. package/dist/services/git-config.d.ts +6 -0
  144. package/dist/services/git-config.d.ts.map +1 -0
  145. package/dist/services/git-config.js +31 -0
  146. package/dist/services/git-config.js.map +1 -0
  147. package/dist/services/github-app.d.ts +30 -0
  148. package/dist/services/github-app.d.ts.map +1 -0
  149. package/dist/services/github-app.js +96 -0
  150. package/dist/services/github-app.js.map +1 -0
  151. package/dist/services/icons.d.ts +16 -0
  152. package/dist/services/icons.d.ts.map +1 -0
  153. package/dist/services/icons.js +67 -0
  154. package/dist/services/icons.js.map +1 -0
  155. package/dist/services/known-hosts.d.ts +23 -0
  156. package/dist/services/known-hosts.d.ts.map +1 -0
  157. package/dist/services/known-hosts.js +86 -0
  158. package/dist/services/known-hosts.js.map +1 -0
  159. package/dist/services/onboarding.d.ts +68 -0
  160. package/dist/services/onboarding.d.ts.map +1 -0
  161. package/dist/services/onboarding.js +205 -0
  162. package/dist/services/onboarding.js.map +1 -0
  163. package/dist/services/registry.d.ts +16 -0
  164. package/dist/services/registry.d.ts.map +1 -0
  165. package/dist/services/registry.js +156 -0
  166. package/dist/services/registry.js.map +1 -0
  167. package/dist/services/sftp.d.ts +16 -0
  168. package/dist/services/sftp.d.ts.map +1 -0
  169. package/dist/services/sftp.js +104 -0
  170. package/dist/services/sftp.js.map +1 -0
  171. package/dist/services/ssh.d.ts +29 -0
  172. package/dist/services/ssh.d.ts.map +1 -0
  173. package/dist/services/ssh.js +297 -0
  174. package/dist/services/ssh.js.map +1 -0
  175. package/dist/services/stall/find-log-file.d.ts +2 -0
  176. package/dist/services/stall/find-log-file.d.ts.map +1 -0
  177. package/dist/services/stall/find-log-file.js +153 -0
  178. package/dist/services/stall/find-log-file.js.map +1 -0
  179. package/dist/services/stall/index.d.ts +4 -0
  180. package/dist/services/stall/index.d.ts.map +1 -0
  181. package/dist/services/stall/index.js +4 -0
  182. package/dist/services/stall/index.js.map +1 -0
  183. package/dist/services/stall/log-path-resolver.d.ts +4 -0
  184. package/dist/services/stall/log-path-resolver.d.ts.map +1 -0
  185. package/dist/services/stall/log-path-resolver.js +32 -0
  186. package/dist/services/stall/log-path-resolver.js.map +1 -0
  187. package/dist/services/stall/log-path-resolver.test.d.ts +2 -0
  188. package/dist/services/stall/log-path-resolver.test.d.ts.map +1 -0
  189. package/dist/services/stall/log-path-resolver.test.js +76 -0
  190. package/dist/services/stall/log-path-resolver.test.js.map +1 -0
  191. package/dist/services/stall/read-log-tail.d.ts +6 -0
  192. package/dist/services/stall/read-log-tail.d.ts.map +1 -0
  193. package/dist/services/stall/read-log-tail.js +44 -0
  194. package/dist/services/stall/read-log-tail.js.map +1 -0
  195. package/dist/services/stall/stall-detector.d.ts +25 -0
  196. package/dist/services/stall/stall-detector.d.ts.map +1 -0
  197. package/dist/services/stall/stall-detector.js +153 -0
  198. package/dist/services/stall/stall-detector.js.map +1 -0
  199. package/dist/services/stall/stall-poller.d.ts +6 -0
  200. package/dist/services/stall/stall-poller.d.ts.map +1 -0
  201. package/dist/services/stall/stall-poller.js +75 -0
  202. package/dist/services/stall/stall-poller.js.map +1 -0
  203. package/dist/services/stall/time-utils.d.ts +4 -0
  204. package/dist/services/stall/time-utils.d.ts.map +1 -0
  205. package/dist/services/stall/time-utils.js +22 -0
  206. package/dist/services/stall/time-utils.js.map +1 -0
  207. package/dist/services/statusline.d.ts +10 -0
  208. package/dist/services/statusline.d.ts.map +1 -0
  209. package/dist/services/statusline.js +84 -0
  210. package/dist/services/statusline.js.map +1 -0
  211. package/dist/services/strategy.d.ts +16 -0
  212. package/dist/services/strategy.d.ts.map +1 -0
  213. package/dist/services/strategy.js +241 -0
  214. package/dist/services/strategy.js.map +1 -0
  215. package/dist/services/task-cleanup.d.ts +3 -0
  216. package/dist/services/task-cleanup.d.ts.map +1 -0
  217. package/dist/services/task-cleanup.js +81 -0
  218. package/dist/services/task-cleanup.js.map +1 -0
  219. package/dist/services/update-check.d.ts +15 -0
  220. package/dist/services/update-check.d.ts.map +1 -0
  221. package/dist/services/update-check.js +67 -0
  222. package/dist/services/update-check.js.map +1 -0
  223. package/dist/services/user-config.d.ts +12 -0
  224. package/dist/services/user-config.d.ts.map +1 -0
  225. package/dist/services/user-config.js +73 -0
  226. package/dist/services/user-config.js.map +1 -0
  227. package/dist/services/vcs/azure-devops.d.ts +7 -0
  228. package/dist/services/vcs/azure-devops.d.ts.map +1 -0
  229. package/dist/services/vcs/azure-devops.js +38 -0
  230. package/dist/services/vcs/azure-devops.js.map +1 -0
  231. package/dist/services/vcs/bitbucket.d.ts +6 -0
  232. package/dist/services/vcs/bitbucket.d.ts.map +1 -0
  233. package/dist/services/vcs/bitbucket.js +31 -0
  234. package/dist/services/vcs/bitbucket.js.map +1 -0
  235. package/dist/services/vcs/constants.d.ts +2 -0
  236. package/dist/services/vcs/constants.d.ts.map +1 -0
  237. package/dist/services/vcs/constants.js +6 -0
  238. package/dist/services/vcs/constants.js.map +1 -0
  239. package/dist/services/vcs/github.d.ts +6 -0
  240. package/dist/services/vcs/github.d.ts.map +1 -0
  241. package/dist/services/vcs/github.js +81 -0
  242. package/dist/services/vcs/github.js.map +1 -0
  243. package/dist/services/vcs/types.d.ts +52 -0
  244. package/dist/services/vcs/types.d.ts.map +1 -0
  245. package/dist/services/vcs/types.js +8 -0
  246. package/dist/services/vcs/types.js.map +1 -0
  247. package/dist/smoke-test.d.ts +10 -0
  248. package/dist/smoke-test.d.ts.map +1 -0
  249. package/dist/smoke-test.js +102 -0
  250. package/dist/smoke-test.js.map +1 -0
  251. package/dist/tools/check-status.d.ts +11 -0
  252. package/dist/tools/check-status.d.ts.map +1 -0
  253. package/dist/tools/check-status.js +247 -0
  254. package/dist/tools/check-status.js.map +1 -0
  255. package/dist/tools/cloud-control.d.ts +17 -0
  256. package/dist/tools/cloud-control.d.ts.map +1 -0
  257. package/dist/tools/cloud-control.js +102 -0
  258. package/dist/tools/cloud-control.js.map +1 -0
  259. package/dist/tools/compose-permissions.d.ts +26 -0
  260. package/dist/tools/compose-permissions.d.ts.map +1 -0
  261. package/dist/tools/compose-permissions.js +217 -0
  262. package/dist/tools/compose-permissions.js.map +1 -0
  263. package/dist/tools/credential-store-delete.d.ts +11 -0
  264. package/dist/tools/credential-store-delete.d.ts.map +1 -0
  265. package/dist/tools/credential-store-delete.js +15 -0
  266. package/dist/tools/credential-store-delete.js.map +1 -0
  267. package/dist/tools/credential-store-list.d.ts +4 -0
  268. package/dist/tools/credential-store-list.d.ts.map +1 -0
  269. package/dist/tools/credential-store-list.js +30 -0
  270. package/dist/tools/credential-store-list.js.map +1 -0
  271. package/dist/tools/credential-store-set.d.ts +26 -0
  272. package/dist/tools/credential-store-set.d.ts.map +1 -0
  273. package/dist/tools/credential-store-set.js +28 -0
  274. package/dist/tools/credential-store-set.js.map +1 -0
  275. package/dist/tools/credential-store-update.d.ts +20 -0
  276. package/dist/tools/credential-store-update.d.ts.map +1 -0
  277. package/dist/tools/credential-store-update.js +38 -0
  278. package/dist/tools/credential-store-update.js.map +1 -0
  279. package/dist/tools/execute-command.d.ts +33 -0
  280. package/dist/tools/execute-command.d.ts.map +1 -0
  281. package/dist/tools/execute-command.js +231 -0
  282. package/dist/tools/execute-command.js.map +1 -0
  283. package/dist/tools/execute-prompt.d.ts +36 -0
  284. package/dist/tools/execute-prompt.d.ts.map +1 -0
  285. package/dist/tools/execute-prompt.js +310 -0
  286. package/dist/tools/execute-prompt.js.map +1 -0
  287. package/dist/tools/list-members.d.ts +11 -0
  288. package/dist/tools/list-members.d.ts.map +1 -0
  289. package/dist/tools/list-members.js +108 -0
  290. package/dist/tools/list-members.js.map +1 -0
  291. package/dist/tools/member-detail.d.ts +17 -0
  292. package/dist/tools/member-detail.d.ts.map +1 -0
  293. package/dist/tools/member-detail.js +263 -0
  294. package/dist/tools/member-detail.js.map +1 -0
  295. package/dist/tools/monitor-task.d.ts +20 -0
  296. package/dist/tools/monitor-task.d.ts.map +1 -0
  297. package/dist/tools/monitor-task.js +89 -0
  298. package/dist/tools/monitor-task.js.map +1 -0
  299. package/dist/tools/provision-auth.d.ts +17 -0
  300. package/dist/tools/provision-auth.d.ts.map +1 -0
  301. package/dist/tools/provision-auth.js +256 -0
  302. package/dist/tools/provision-auth.js.map +1 -0
  303. package/dist/tools/provision-vcs-auth.d.ts +50 -0
  304. package/dist/tools/provision-vcs-auth.d.ts.map +1 -0
  305. package/dist/tools/provision-vcs-auth.js +187 -0
  306. package/dist/tools/provision-vcs-auth.js.map +1 -0
  307. package/dist/tools/receive-files.d.ts +20 -0
  308. package/dist/tools/receive-files.d.ts.map +1 -0
  309. package/dist/tools/receive-files.js +82 -0
  310. package/dist/tools/receive-files.js.map +1 -0
  311. package/dist/tools/register-member.d.ts +74 -0
  312. package/dist/tools/register-member.d.ts.map +1 -0
  313. package/dist/tools/register-member.js +310 -0
  314. package/dist/tools/register-member.js.map +1 -0
  315. package/dist/tools/remove-member.d.ts +17 -0
  316. package/dist/tools/remove-member.d.ts.map +1 -0
  317. package/dist/tools/remove-member.js +126 -0
  318. package/dist/tools/remove-member.js.map +1 -0
  319. package/dist/tools/revoke-vcs-auth.d.ts +23 -0
  320. package/dist/tools/revoke-vcs-auth.d.ts.map +1 -0
  321. package/dist/tools/revoke-vcs-auth.js +55 -0
  322. package/dist/tools/revoke-vcs-auth.js.map +1 -0
  323. package/dist/tools/send-files.d.ts +20 -0
  324. package/dist/tools/send-files.d.ts.map +1 -0
  325. package/dist/tools/send-files.js +103 -0
  326. package/dist/tools/send-files.js.map +1 -0
  327. package/dist/tools/setup-git-app.d.ts +17 -0
  328. package/dist/tools/setup-git-app.d.ts.map +1 -0
  329. package/dist/tools/setup-git-app.js +89 -0
  330. package/dist/tools/setup-git-app.js.map +1 -0
  331. package/dist/tools/setup-ssh-key.d.ts +14 -0
  332. package/dist/tools/setup-ssh-key.d.ts.map +1 -0
  333. package/dist/tools/setup-ssh-key.js +119 -0
  334. package/dist/tools/setup-ssh-key.js.map +1 -0
  335. package/dist/tools/shutdown-server.d.ts +4 -0
  336. package/dist/tools/shutdown-server.d.ts.map +1 -0
  337. package/dist/tools/shutdown-server.js +9 -0
  338. package/dist/tools/shutdown-server.js.map +1 -0
  339. package/dist/tools/stop-prompt.d.ts +14 -0
  340. package/dist/tools/stop-prompt.d.ts.map +1 -0
  341. package/dist/tools/stop-prompt.js +44 -0
  342. package/dist/tools/stop-prompt.js.map +1 -0
  343. package/dist/tools/update-agent-cli.d.ts +17 -0
  344. package/dist/tools/update-agent-cli.d.ts.map +1 -0
  345. package/dist/tools/update-agent-cli.js +110 -0
  346. package/dist/tools/update-agent-cli.js.map +1 -0
  347. package/dist/tools/update-member.d.ts +77 -0
  348. package/dist/tools/update-member.d.ts.map +1 -0
  349. package/dist/tools/update-member.js +202 -0
  350. package/dist/tools/update-member.js.map +1 -0
  351. package/dist/tools/version.d.ts +4 -0
  352. package/dist/tools/version.d.ts.map +1 -0
  353. package/dist/tools/version.js +7 -0
  354. package/dist/tools/version.js.map +1 -0
  355. package/dist/types.d.ts +70 -0
  356. package/dist/types.d.ts.map +1 -0
  357. package/dist/types.js +2 -0
  358. package/dist/types.js.map +1 -0
  359. package/dist/utils/agent-helpers.d.ts +41 -0
  360. package/dist/utils/agent-helpers.d.ts.map +1 -0
  361. package/dist/utils/agent-helpers.js +84 -0
  362. package/dist/utils/agent-helpers.js.map +1 -0
  363. package/dist/utils/ansi.d.ts +6 -0
  364. package/dist/utils/ansi.d.ts.map +1 -0
  365. package/dist/utils/ansi.js +20 -0
  366. package/dist/utils/ansi.js.map +1 -0
  367. package/dist/utils/auth-env.d.ts +8 -0
  368. package/dist/utils/auth-env.d.ts.map +1 -0
  369. package/dist/utils/auth-env.js +30 -0
  370. package/dist/utils/auth-env.js.map +1 -0
  371. package/dist/utils/collect-secret.d.ts +2 -0
  372. package/dist/utils/collect-secret.d.ts.map +1 -0
  373. package/dist/utils/collect-secret.js +80 -0
  374. package/dist/utils/collect-secret.js.map +1 -0
  375. package/dist/utils/credential-validation.d.ts +13 -0
  376. package/dist/utils/credential-validation.d.ts.map +1 -0
  377. package/dist/utils/credential-validation.js +35 -0
  378. package/dist/utils/credential-validation.js.map +1 -0
  379. package/dist/utils/crypto.d.ts +3 -0
  380. package/dist/utils/crypto.d.ts.map +1 -0
  381. package/dist/utils/crypto.js +61 -0
  382. package/dist/utils/crypto.js.map +1 -0
  383. package/dist/utils/deep-merge.d.ts +3 -0
  384. package/dist/utils/deep-merge.d.ts.map +1 -0
  385. package/dist/utils/deep-merge.js +23 -0
  386. package/dist/utils/deep-merge.js.map +1 -0
  387. package/dist/utils/file-permissions.d.ts +8 -0
  388. package/dist/utils/file-permissions.d.ts.map +1 -0
  389. package/dist/utils/file-permissions.js +13 -0
  390. package/dist/utils/file-permissions.js.map +1 -0
  391. package/dist/utils/gpu-parser.d.ts +6 -0
  392. package/dist/utils/gpu-parser.d.ts.map +1 -0
  393. package/dist/utils/gpu-parser.js +15 -0
  394. package/dist/utils/gpu-parser.js.map +1 -0
  395. package/dist/utils/log-helpers.d.ts +29 -0
  396. package/dist/utils/log-helpers.d.ts.map +1 -0
  397. package/dist/utils/log-helpers.js +128 -0
  398. package/dist/utils/log-helpers.js.map +1 -0
  399. package/dist/utils/oob-timeout.d.ts +2 -0
  400. package/dist/utils/oob-timeout.d.ts.map +1 -0
  401. package/dist/utils/oob-timeout.js +2 -0
  402. package/dist/utils/oob-timeout.js.map +1 -0
  403. package/dist/utils/pid-helpers.d.ts +11 -0
  404. package/dist/utils/pid-helpers.d.ts.map +1 -0
  405. package/dist/utils/pid-helpers.js +21 -0
  406. package/dist/utils/pid-helpers.js.map +1 -0
  407. package/dist/utils/platform.d.ts +13 -0
  408. package/dist/utils/platform.d.ts.map +1 -0
  409. package/dist/utils/platform.js +60 -0
  410. package/dist/utils/platform.js.map +1 -0
  411. package/dist/utils/prompt-errors.d.ts +5 -0
  412. package/dist/utils/prompt-errors.d.ts.map +1 -0
  413. package/dist/utils/prompt-errors.js +15 -0
  414. package/dist/utils/prompt-errors.js.map +1 -0
  415. package/dist/utils/resolve-member.d.ts +18 -0
  416. package/dist/utils/resolve-member.d.ts.map +1 -0
  417. package/dist/utils/resolve-member.js +23 -0
  418. package/dist/utils/resolve-member.js.map +1 -0
  419. package/dist/utils/secure-input.d.ts +6 -0
  420. package/dist/utils/secure-input.d.ts.map +1 -0
  421. package/dist/utils/secure-input.js +60 -0
  422. package/dist/utils/secure-input.js.map +1 -0
  423. package/dist/utils/shell-escape.d.ts +43 -0
  424. package/dist/utils/shell-escape.d.ts.map +1 -0
  425. package/dist/utils/shell-escape.js +67 -0
  426. package/dist/utils/shell-escape.js.map +1 -0
  427. package/dist/utils/ssh-error-messages.d.ts +5 -0
  428. package/dist/utils/ssh-error-messages.d.ts.map +1 -0
  429. package/dist/utils/ssh-error-messages.js +20 -0
  430. package/dist/utils/ssh-error-messages.js.map +1 -0
  431. package/dist/version.d.ts +18 -0
  432. package/dist/version.d.ts.map +1 -0
  433. package/dist/version.js +101 -0
  434. package/dist/version.js.map +1 -0
  435. package/hooks/hooks-config.json +15 -0
  436. package/hooks/post-register-member.sh +10 -0
  437. package/package.json +82 -0
  438. package/scripts/agy-settings-merge.js +27 -0
  439. package/scripts/agy-transcript-reader.js +62 -0
  440. package/scripts/fleet-statusline.sh +43 -0
  441. package/skills/fleet/SKILL.md +262 -0
  442. package/skills/fleet/auth-azdevops.md +72 -0
  443. package/skills/fleet/auth-bitbucket.md +65 -0
  444. package/skills/fleet/auth-github.md +86 -0
  445. package/skills/fleet/beads.md +90 -0
  446. package/skills/fleet/onboarding.md +92 -0
  447. package/skills/fleet/permissions.md +23 -0
  448. package/skills/fleet/profiles/base-dev.json +18 -0
  449. package/skills/fleet/profiles/base-reviewer.json +14 -0
  450. package/skills/fleet/profiles/cpp.json +4 -0
  451. package/skills/fleet/profiles/dotnet.json +4 -0
  452. package/skills/fleet/profiles/go.json +4 -0
  453. package/skills/fleet/profiles/jvm.json +4 -0
  454. package/skills/fleet/profiles/node.json +4 -0
  455. package/skills/fleet/profiles/python.json +4 -0
  456. package/skills/fleet/profiles/rust.json +4 -0
  457. package/skills/fleet/profiles/tpl-permissions.json +5 -0
  458. package/skills/fleet/skill-matrix.md +34 -0
  459. package/skills/fleet/troubleshooting.md +13 -0
  460. package/skills/pm/SKILL.md +110 -0
  461. package/skills/pm/backlog-item.md +65 -0
  462. package/skills/pm/beads.md +192 -0
  463. package/skills/pm/cleanup.md +15 -0
  464. package/skills/pm/context-file.md +40 -0
  465. package/skills/pm/doer-reviewer.md +123 -0
  466. package/skills/pm/init.md +25 -0
  467. package/skills/pm/multi-pair-sprint.md +64 -0
  468. package/skills/pm/plan-prompt.md +94 -0
  469. package/skills/pm/simple-sprint.md +42 -0
  470. package/skills/pm/single-pair-sprint.md +178 -0
  471. package/skills/pm/tpl-deploy.md +24 -0
  472. package/skills/pm/tpl-design.md +29 -0
  473. package/skills/pm/tpl-doer.md +43 -0
  474. package/skills/pm/tpl-plan.md +72 -0
  475. package/skills/pm/tpl-pm.md +2 -0
  476. package/skills/pm/tpl-progress.json +28 -0
  477. package/skills/pm/tpl-projects.md +4 -0
  478. package/skills/pm/tpl-requirements.md +21 -0
  479. package/skills/pm/tpl-reviewer-plan.md +53 -0
  480. package/skills/pm/tpl-reviewer.md +72 -0
  481. package/skills/pm/tpl-status.md +29 -0
  482. package/version.json +3 -0
@@ -0,0 +1,128 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { FLEET_DIR } from '../paths.js';
4
+ let _stream = null;
5
+ let _activeLogFile = null;
6
+ /** Returns the resolved path of the active log file, or null if logging is unavailable. */
7
+ export function getActiveLogFile() {
8
+ getStream(); // ensure initialised
9
+ return _activeLogFile;
10
+ }
11
+ function getStream() {
12
+ if (_stream)
13
+ return _stream;
14
+ try {
15
+ const logsDir = path.join(FLEET_DIR, 'logs');
16
+ fs.mkdirSync(logsDir, { recursive: true });
17
+ const logFile = path.join(logsDir, `fleet-${process.pid}.log`);
18
+ _stream = fs.createWriteStream(logFile, { flags: 'a' });
19
+ _activeLogFile = logFile;
20
+ }
21
+ catch {
22
+ // data dir not available
23
+ }
24
+ return _stream;
25
+ }
26
+ function localISOString() {
27
+ const now = new Date();
28
+ const off = -now.getTimezoneOffset(); // minutes east of UTC
29
+ const sign = off >= 0 ? '+' : '-';
30
+ const absOff = Math.abs(off);
31
+ const h = String(Math.floor(absOff / 60)).padStart(2, '0');
32
+ const m = String(absOff % 60).padStart(2, '0');
33
+ const local = new Date(now.getTime() + off * 60000);
34
+ return local.toISOString().slice(0, -1) + `${sign}${h}:${m}`;
35
+ }
36
+ function writeLog(level, tag, maskedMsg, agent, inv) {
37
+ try {
38
+ const stream = getStream();
39
+ if (!stream)
40
+ return;
41
+ const line = { ts: localISOString(), level, tag };
42
+ if (inv !== undefined)
43
+ line.inv = inv;
44
+ if (agent !== undefined) {
45
+ line.mid = agent.id;
46
+ if (agent.friendlyName)
47
+ line.mem = agent.friendlyName;
48
+ }
49
+ line.msg = maskedMsg;
50
+ stream.write(JSON.stringify(line) + '\n');
51
+ }
52
+ catch { /* ignore */ }
53
+ }
54
+ export function logLine(tag, msg, agent, inv) {
55
+ const maskedMsg = maskSecrets(msg);
56
+ try {
57
+ console.error(`[fleet] ${tag} ${maskedMsg}`);
58
+ }
59
+ catch { /* ignore */ }
60
+ writeLog('info', tag, maskedMsg, agent, inv);
61
+ }
62
+ export function logWarn(tag, msg, agent) {
63
+ const maskedMsg = maskSecrets(msg);
64
+ try {
65
+ console.error(`[fleet:warn] ${tag} ${maskedMsg}`);
66
+ }
67
+ catch { /* ignore */ }
68
+ writeLog('warn', tag, maskedMsg, agent);
69
+ }
70
+ export function logError(tag, msg, agent) {
71
+ const maskedMsg = maskSecrets(msg);
72
+ try {
73
+ console.error(`[fleet:error] ${tag} ${maskedMsg}`);
74
+ }
75
+ catch { /* ignore */ }
76
+ writeLog('error', tag, maskedMsg, agent);
77
+ }
78
+ const LEVEL_PREFIX = {
79
+ info: '[fleet]',
80
+ warn: '[fleet:warn]',
81
+ error: '[fleet:error]',
82
+ };
83
+ export class LogScope {
84
+ inv;
85
+ start;
86
+ tag;
87
+ agent;
88
+ constructor(tag, entryMsg, agent) {
89
+ this.inv = Math.random().toString(36).slice(2, 7);
90
+ this.start = Date.now();
91
+ this.tag = tag;
92
+ this.agent = agent;
93
+ this._emit('info', entryMsg);
94
+ }
95
+ getInv() { return this.inv; }
96
+ info(msg) { this._emit('info', msg); }
97
+ warn(msg) { this._emit('warn', msg); }
98
+ error(msg) { this._emit('error', msg); }
99
+ ok(msg = 'done') { this._exit('info', msg); }
100
+ fail(msg) { this._exit('warn', msg); }
101
+ abort(msg) { this._exit('error', msg); }
102
+ _emit(level, msg) {
103
+ const masked = maskSecrets(msg);
104
+ try {
105
+ console.error(`${LEVEL_PREFIX[level]} ${this.tag} ${masked}`);
106
+ }
107
+ catch { /* ignore */ }
108
+ writeLog(level, this.tag, masked, this.agent, this.inv);
109
+ }
110
+ _exit(level, msg) {
111
+ this._emit(level, `${msg} elapsed=${Date.now() - this.start}ms`);
112
+ }
113
+ }
114
+ export function maskSecrets(text) {
115
+ try {
116
+ return text
117
+ .replace(/\{\{secure\.[a-zA-Z0-9_-]{1,64}\}\}/g, '[REDACTED]')
118
+ .replace(/sec:\/\/[a-zA-Z0-9_]+/g, '[REDACTED]');
119
+ }
120
+ catch {
121
+ return text;
122
+ }
123
+ }
124
+ export function truncateForLog(text, maxLen = 80) {
125
+ const single = text.replace(/[\n\t]/g, ' ');
126
+ return single.length <= maxLen ? single : single.slice(0, maxLen) + '...';
127
+ }
128
+ //# sourceMappingURL=log-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-helpers.js","sourceRoot":"","sources":["../../src/utils/log-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const OOB_TIMEOUT_MS: number;
2
+ //# sourceMappingURL=oob-timeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oob-timeout.d.ts","sourceRoot":"","sources":["../../src/utils/oob-timeout.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,QAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const OOB_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes
2
+ //# sourceMappingURL=oob-timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oob-timeout.js","sourceRoot":"","sources":["../../src/utils/oob-timeout.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY"}
@@ -0,0 +1,11 @@
1
+ import type { OsCommands } from '../os/os-commands.js';
2
+ import type { AgentStrategy } from '../services/strategy.js';
3
+ /**
4
+ * Kill the stored PID for an agent, then clear it.
5
+ * Swallows errors — the process may already be dead.
6
+ */
7
+ export declare function tryKillPid(agent: {
8
+ id: string;
9
+ friendlyName: string;
10
+ }, strategy: AgentStrategy, cmds: OsCommands): Promise<void>;
11
+ //# sourceMappingURL=pid-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pid-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/pid-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAI7D;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,EAC3C,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,IAAI,CAAC,CAWf"}
@@ -0,0 +1,21 @@
1
+ import { getStoredPid, clearStoredPid } from './agent-helpers.js';
2
+ import { logLine, logWarn } from './log-helpers.js';
3
+ /**
4
+ * Kill the stored PID for an agent, then clear it.
5
+ * Swallows errors — the process may already be dead.
6
+ */
7
+ export async function tryKillPid(agent, strategy, cmds) {
8
+ const pid = getStoredPid(agent.id);
9
+ if (pid === undefined)
10
+ return;
11
+ clearStoredPid(agent.id);
12
+ logLine('pid_kill', `killing pid=${pid}`, agent);
13
+ try {
14
+ await strategy.execCommand(cmds.killPid(pid), 5000);
15
+ logLine('pid_kill', `killed pid=${pid}`, agent);
16
+ }
17
+ catch (e) {
18
+ logWarn('pid_kill', `kill failed pid=${pid}: ${String(e?.message ?? e)}`, agent);
19
+ }
20
+ }
21
+ //# sourceMappingURL=pid-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pid-helpers.js","sourceRoot":"","sources":["../../src/utils/pid-helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAA2C,EAC3C,QAAuB,EACvB,IAAgB;IAEhB,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO;IAC9B,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzB,OAAO,CAAC,UAAU,EAAE,eAAe,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QACpD,OAAO,CAAC,UAAU,EAAE,cAAc,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,CAAC,UAAU,EAAE,mBAAmB,GAAG,KAAK,MAAM,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACnF,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ export type RemoteOS = 'windows' | 'macos' | 'linux';
2
+ /**
3
+ * Check whether a remote path is contained within the member's work folder.
4
+ * Handles Windows remote members where path.posix.resolve fails on drive letters.
5
+ */
6
+ export declare function isContainedInWorkFolder(workFolder: string, remotePath: string): boolean;
7
+ /**
8
+ * Resolves a remote path relative to a work folder, handling Windows drive-letter paths
9
+ * that path.posix.resolve incorrectly treats as relative (since they don't start with '/').
10
+ */
11
+ export declare function resolveRemotePath(workFolder: string, subPath: string): string;
12
+ export declare function detectOS(unameOutput: string, verOutput: string): RemoteOS;
13
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAErD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAqBvF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAW7E;AAED,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,CAWzE"}
@@ -0,0 +1,60 @@
1
+ import path from 'node:path';
2
+ /**
3
+ * Check whether a remote path is contained within the member's work folder.
4
+ * Handles Windows remote members where path.posix.resolve fails on drive letters.
5
+ */
6
+ export function isContainedInWorkFolder(workFolder, remotePath) {
7
+ const normWorkFolder = workFolder.replace(/\\/g, '/').replace(/\/$/, '');
8
+ const normRemotePath = remotePath.replace(/\\/g, '/');
9
+ const isWindowsWorkFolder = /^[A-Za-z]:/.test(normWorkFolder);
10
+ let resolved;
11
+ if (isWindowsWorkFolder) {
12
+ const isAbsolute = /^[A-Za-z]:/.test(normRemotePath) || normRemotePath.startsWith('/');
13
+ const joined = isAbsolute ? normRemotePath : `${normWorkFolder}/${normRemotePath}`;
14
+ // Collapse .. and . segments manually (path.posix.resolve doesn't understand drive letters)
15
+ const stack = [];
16
+ for (const part of joined.split('/')) {
17
+ if (part === '..') {
18
+ stack.pop();
19
+ }
20
+ else if (part !== '.') {
21
+ stack.push(part);
22
+ }
23
+ }
24
+ resolved = stack.join('/');
25
+ }
26
+ else {
27
+ resolved = path.posix.resolve(normWorkFolder, normRemotePath);
28
+ }
29
+ return resolved === normWorkFolder || resolved.startsWith(`${normWorkFolder}/`);
30
+ }
31
+ /**
32
+ * Resolves a remote path relative to a work folder, handling Windows drive-letter paths
33
+ * that path.posix.resolve incorrectly treats as relative (since they don't start with '/').
34
+ */
35
+ export function resolveRemotePath(workFolder, subPath) {
36
+ const normWorkFolder = workFolder.replace(/\\/g, '/').replace(/\/$/, '');
37
+ const normSubPath = subPath.replace(/\\/g, '/');
38
+ const isWindowsWorkFolder = /^[A-Za-z]:/.test(normWorkFolder);
39
+ if (isWindowsWorkFolder) {
40
+ const isAbsolute = /^[A-Za-z]:/.test(normSubPath) || normSubPath.startsWith('/');
41
+ return isAbsolute ? normSubPath : `${normWorkFolder}/${normSubPath}`;
42
+ }
43
+ else {
44
+ return path.posix.resolve(normWorkFolder, normSubPath);
45
+ }
46
+ }
47
+ export function detectOS(unameOutput, verOutput) {
48
+ if (verOutput.toLowerCase().includes('windows') || verOutput.toLowerCase().includes('microsoft')) {
49
+ return 'windows';
50
+ }
51
+ const uname = unameOutput.trim().toLowerCase();
52
+ if (uname === 'darwin')
53
+ return 'macos';
54
+ // Git Bash / MSYS2 / Cygwin on Windows report MINGW*, MSYS*, or CYGWIN*
55
+ if (uname.startsWith('mingw') || uname.startsWith('msys') || uname.startsWith('cygwin')) {
56
+ return 'windows';
57
+ }
58
+ return 'linux';
59
+ }
60
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export type PromptErrorCategory = 'auth' | 'server' | 'overloaded' | 'unknown';
2
+ export declare function classifyPromptError(output: string): PromptErrorCategory;
3
+ export declare function isRetryable(category: PromptErrorCategory): boolean;
4
+ export declare function authErrorAdvice(agentName: string): string;
5
+ //# sourceMappingURL=prompt-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-errors.d.ts","sourceRoot":"","sources":["../../src/utils/prompt-errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC;AAQ/E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAEvE;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAElE;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD"}
@@ -0,0 +1,15 @@
1
+ const patterns = [
2
+ { category: 'auth', re: /not logged in|unauthorized|\b401\b|authentication_error|expired.*token|permission_error/i },
3
+ { category: 'server', re: /\b500\b|\b502\b|\b503\b|internal server error|api_error/i },
4
+ { category: 'overloaded', re: /\b429\b|\b529\b|overloaded|rate limit/i },
5
+ ];
6
+ export function classifyPromptError(output) {
7
+ return patterns.find(p => p.re.test(output))?.category ?? 'unknown';
8
+ }
9
+ export function isRetryable(category) {
10
+ return category === 'server' || category === 'overloaded';
11
+ }
12
+ export function authErrorAdvice(agentName) {
13
+ return `Authentication failed on "${agentName}". Run /login to refresh your credentials, then run provision_llm_auth to deploy them to this agent.`;
14
+ }
15
+ //# sourceMappingURL=prompt-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-errors.js","sourceRoot":"","sources":["../../src/utils/prompt-errors.ts"],"names":[],"mappings":"AAEA,MAAM,QAAQ,GAAyD;IACrE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,0FAA0F,EAAE;IACpH,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,0DAA0D,EAAE;IACtF,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,wCAAwC,EAAE;CACzE,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,IAAI,SAAS,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAA6B;IACvD,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,YAAY,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,OAAO,6BAA6B,SAAS,sGAAsG,CAAC;AACtJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { z } from 'zod';
2
+ import type { Agent } from '../types.js';
3
+ /**
4
+ * Resolve a member from either member_id (UUID or name) or member_name.
5
+ * member_id takes precedence if both are provided.
6
+ * Returns the Agent or an error string.
7
+ */
8
+ export declare function resolveMember(member_id?: string, member_name?: string): Agent | string;
9
+ /**
10
+ * Shared zod fragment for member identification.
11
+ * Spread into tool schemas: z.object({ ...memberIdentifier, ...otherFields })
12
+ * Mutual-exclusivity validation is handled inside resolveMember(), which returns an error string if neither field is provided.
13
+ */
14
+ export declare const memberIdentifier: {
15
+ member_id: z.ZodOptional<z.ZodString>;
16
+ member_name: z.ZodOptional<z.ZodString>;
17
+ };
18
+ //# sourceMappingURL=resolve-member.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-member.d.ts","sourceRoot":"","sources":["../../src/utils/resolve-member.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAKtF;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;;;CAO5B,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { getAgentOrFail } from './agent-helpers.js';
2
+ import { z } from 'zod';
3
+ /**
4
+ * Resolve a member from either member_id (UUID or name) or member_name.
5
+ * member_id takes precedence if both are provided.
6
+ * Returns the Agent or an error string.
7
+ */
8
+ export function resolveMember(member_id, member_name) {
9
+ if (!member_id && !member_name) {
10
+ return 'Error: provide either member_id (UUID) or member_name (friendly name).';
11
+ }
12
+ return getAgentOrFail(member_id ?? member_name);
13
+ }
14
+ /**
15
+ * Shared zod fragment for member identification.
16
+ * Spread into tool schemas: z.object({ ...memberIdentifier, ...otherFields })
17
+ * Mutual-exclusivity validation is handled inside resolveMember(), which returns an error string if neither field is provided.
18
+ */
19
+ export const memberIdentifier = {
20
+ member_id: z.string().optional().describe('UUID of the member. Takes precedence over member_name if both are provided.'),
21
+ member_name: z.string().optional().describe('Friendly name of the member. Use when UUID is not known. Ignored if member_id is also provided.'),
22
+ };
23
+ //# sourceMappingURL=resolve-member.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-member.js","sourceRoot":"","sources":["../../src/utils/resolve-member.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,SAAkB,EAAE,WAAoB;IACpE,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/B,OAAO,wEAAwE,CAAC;IAClF,CAAC;IACD,OAAO,cAAc,CAAC,SAAS,IAAI,WAAY,CAAC,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACvC,6EAA6E,CAC9E;IACD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACzC,iGAAiG,CAClG;CACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface SecureInputOptions {
2
+ prompt: string;
3
+ allowEmpty?: boolean;
4
+ }
5
+ export declare function secureInput(opts: SecureInputOptions): Promise<string>;
6
+ //# sourceMappingURL=secure-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secure-input.d.ts","sourceRoot":"","sources":["../../src/utils/secure-input.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6C3E"}
@@ -0,0 +1,60 @@
1
+ import password from '@inquirer/password';
2
+ import readline from 'node:readline';
3
+ export async function secureInput(opts) {
4
+ const { prompt, allowEmpty = false } = opts;
5
+ // Non-TTY fallback: read one line from stdin
6
+ if (!process.stdin.isTTY) {
7
+ return new Promise((resolve) => {
8
+ let data = '';
9
+ process.stdin.setEncoding('utf-8');
10
+ process.stdin.on('data', (chunk) => {
11
+ data += chunk;
12
+ const nl = data.indexOf('\n');
13
+ if (nl !== -1) {
14
+ resolve(data.slice(0, nl));
15
+ }
16
+ });
17
+ process.stdin.on('end', () => resolve(data.trim()));
18
+ });
19
+ }
20
+ // eslint-disable-next-line no-constant-condition
21
+ while (true) {
22
+ let value;
23
+ try {
24
+ value = await password({
25
+ message: prompt,
26
+ mask: '*',
27
+ validate: (v) => {
28
+ if (v.length === 0 && !allowEmpty) {
29
+ return 'Value must not be empty. Please try again.';
30
+ }
31
+ return true;
32
+ },
33
+ });
34
+ }
35
+ catch {
36
+ // Ctrl+C → ExitPromptError; surface as Cancelled to match prior API.
37
+ throw new Error('Cancelled');
38
+ }
39
+ if (value.length === 0 && allowEmpty) {
40
+ const confirmed = await confirmEmpty();
41
+ if (!confirmed)
42
+ continue;
43
+ }
44
+ return value;
45
+ }
46
+ }
47
+ async function confirmEmpty() {
48
+ return new Promise((resolve) => {
49
+ const rl = readline.createInterface({
50
+ input: process.stdin,
51
+ output: process.stderr,
52
+ terminal: true,
53
+ });
54
+ rl.question('Are you sure? [y/N]: ', (answer) => {
55
+ rl.close();
56
+ resolve(answer.trim().toLowerCase() === 'y');
57
+ });
58
+ });
59
+ }
60
+ //# sourceMappingURL=secure-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secure-input.js","sourceRoot":"","sources":["../../src/utils/secure-input.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,QAAQ,MAAM,eAAe,CAAC;AAOrC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAwB;IACxD,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;IAE5C,6CAA6C;IAC7C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACzC,IAAI,IAAI,KAAK,CAAC;gBACd,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC9B,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;oBACd,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iDAAiD;IACjD,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,KAAa,CAAC;QAClB,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,QAAQ,CAAC;gBACrB,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,GAAG;gBACT,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE;oBACtB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;wBAClC,OAAO,4CAA4C,CAAC;oBACtD,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;aACF,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;YACrE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;YACvC,IAAI,CAAC,SAAS;gBAAE,SAAS;QAC3B,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;YAClC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,EAAE,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC,MAAM,EAAE,EAAE;YAC9C,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Centralized shell escaping functions to prevent command injection (CWE-78).
3
+ * Used by platform.ts, execute-prompt.ts, and provision-auth.ts.
4
+ */
5
+ /**
6
+ * Escape a string for safe use inside single-quoted Unix shell arguments.
7
+ * Handles embedded single quotes by ending the quote, adding an escaped quote, and reopening.
8
+ * e.g. "it's" → 'it'\''s'
9
+ */
10
+ export declare function escapeShellArg(s: string): string;
11
+ /**
12
+ * Escape a string for safe use inside double-quoted Unix shell arguments.
13
+ * Escapes: $ ` " \ ! (characters with special meaning inside double quotes).
14
+ */
15
+ export declare function escapeDoubleQuoted(s: string): string;
16
+ /**
17
+ * Escape a string for safe use inside double-quoted Windows cmd.exe arguments.
18
+ * Escapes: " & | ^ < > (cmd.exe metacharacters).
19
+ */
20
+ export declare function escapeWindowsArg(s: string): string;
21
+ /**
22
+ * Escape a string for safe use as a PowerShell single-quoted string literal.
23
+ * Single-quoted strings in PowerShell are fully literal — no variable expansion.
24
+ * Internal single quotes are escaped by doubling them: ' → ''
25
+ * Returns the value wrapped in single quotes.
26
+ */
27
+ export declare function escapePowerShellArg(s: string): string;
28
+ /**
29
+ * Escape batch (cmd.exe) metacharacters for safe use in .bat file content.
30
+ * Escapes: & | > < ^ % by prefixing each with ^.
31
+ */
32
+ export declare function escapeBatchMetachars(s: string): string;
33
+ /**
34
+ * Escape regex metacharacters for use in `grep -E` patterns.
35
+ */
36
+ export declare function escapeGrepPattern(s: string): string;
37
+ /**
38
+ * Validate and sanitize a session ID to prevent injection.
39
+ * Session IDs must be alphanumeric with dashes and underscores only.
40
+ * Throws if the ID contains invalid characters.
41
+ */
42
+ export declare function sanitizeSessionId(s: string): string;
43
+ //# sourceMappingURL=shell-escape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-escape.d.ts","sourceRoot":"","sources":["../../src/utils/shell-escape.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAOpD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAKnD"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Centralized shell escaping functions to prevent command injection (CWE-78).
3
+ * Used by platform.ts, execute-prompt.ts, and provision-auth.ts.
4
+ */
5
+ /**
6
+ * Escape a string for safe use inside single-quoted Unix shell arguments.
7
+ * Handles embedded single quotes by ending the quote, adding an escaped quote, and reopening.
8
+ * e.g. "it's" → 'it'\''s'
9
+ */
10
+ export function escapeShellArg(s) {
11
+ return "'" + s.replace(/'/g, "'\\''") + "'";
12
+ }
13
+ /**
14
+ * Escape a string for safe use inside double-quoted Unix shell arguments.
15
+ * Escapes: $ ` " \ ! (characters with special meaning inside double quotes).
16
+ */
17
+ export function escapeDoubleQuoted(s) {
18
+ return s
19
+ .replace(/\\/g, '\\\\')
20
+ .replace(/"/g, '\\"')
21
+ .replace(/\$/g, '\\$')
22
+ .replace(/`/g, '\\`')
23
+ .replace(/!/g, '\\!');
24
+ }
25
+ /**
26
+ * Escape a string for safe use inside double-quoted Windows cmd.exe arguments.
27
+ * Escapes: " & | ^ < > (cmd.exe metacharacters).
28
+ */
29
+ export function escapeWindowsArg(s) {
30
+ return s
31
+ .replace(/"/g, '""')
32
+ .replace(/([&|^<>])/g, '^$1');
33
+ }
34
+ /**
35
+ * Escape a string for safe use as a PowerShell single-quoted string literal.
36
+ * Single-quoted strings in PowerShell are fully literal — no variable expansion.
37
+ * Internal single quotes are escaped by doubling them: ' → ''
38
+ * Returns the value wrapped in single quotes.
39
+ */
40
+ export function escapePowerShellArg(s) {
41
+ return "'" + s.replace(/'/g, "''") + "'";
42
+ }
43
+ /**
44
+ * Escape batch (cmd.exe) metacharacters for safe use in .bat file content.
45
+ * Escapes: & | > < ^ % by prefixing each with ^.
46
+ */
47
+ export function escapeBatchMetachars(s) {
48
+ return s.replace(/([&|><^%])/g, '^$1');
49
+ }
50
+ /**
51
+ * Escape regex metacharacters for use in `grep -E` patterns.
52
+ */
53
+ export function escapeGrepPattern(s) {
54
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
55
+ }
56
+ /**
57
+ * Validate and sanitize a session ID to prevent injection.
58
+ * Session IDs must be alphanumeric with dashes and underscores only.
59
+ * Throws if the ID contains invalid characters.
60
+ */
61
+ export function sanitizeSessionId(s) {
62
+ if (!/^[a-zA-Z0-9_-]+$/.test(s)) {
63
+ throw new Error(`Invalid session ID: contains disallowed characters`);
64
+ }
65
+ return s;
66
+ }
67
+ //# sourceMappingURL=shell-escape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-escape.js","sourceRoot":"","sources":["../../src/utils/shell-escape.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,CAAS;IACtC,OAAO,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,CAAS;IAC1C,OAAO,CAAC;SACL,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAS;IACxC,OAAO,CAAC;SACL,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;SACnB,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAS;IAC3C,OAAO,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,CAAS;IAC5C,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Maps raw ssh2 error strings to user-friendly guidance messages.
3
+ */
4
+ export declare function classifySshError(error: string): string;
5
+ //# sourceMappingURL=ssh-error-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssh-error-messages.d.ts","sourceRoot":"","sources":["../../src/utils/ssh-error-messages.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiBtD"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Maps raw ssh2 error strings to user-friendly guidance messages.
3
+ */
4
+ export function classifySshError(error) {
5
+ const msg = error ?? '';
6
+ if (/Authentication failed|All configured authentication methods failed/i.test(msg)) {
7
+ return 'Authentication failed — wrong password or key not accepted';
8
+ }
9
+ if (/ECONNREFUSED/i.test(msg)) {
10
+ return 'Connection refused — check host and port';
11
+ }
12
+ if (/ETIMEDOUT|ENOTFOUND|EHOSTUNREACH/i.test(msg)) {
13
+ return 'Host unreachable — check hostname and network';
14
+ }
15
+ if (/password prompt could not be opened|OOB|auth-socket/i.test(msg)) {
16
+ return "Password prompt could not be opened. Try passing the password directly via the 'password' field.";
17
+ }
18
+ return msg;
19
+ }
20
+ //# sourceMappingURL=ssh-error-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssh-error-messages.js","sourceRoot":"","sources":["../../src/utils/ssh-error-messages.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE,CAAC;IAExB,IAAI,qEAAqE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACpF,OAAO,4DAA4D,CAAC;IACtE,CAAC;IACD,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,0CAA0C,CAAC;IACpD,CAAC;IACD,IAAI,mCAAmC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,+CAA+C,CAAC;IACzD,CAAC;IACD,IAAI,sDAAsD,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACrE,OAAO,kGAAkG,CAAC;IAC5G,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Core version resolution logic with injectable root directory.
3
+ *
4
+ * The `rootDir` parameter is a testability seam: callers may pass a path that
5
+ * does not contain a valid version.json to exercise the catch -> 'v0.0.0-unknown'
6
+ * fallback without needing to mock native built-ins. Production code always
7
+ * calls this via resolveVersion() which supplies the real package root.
8
+ *
9
+ * NOTE: the seam is intentionally minimal -- only rootDir is injectable.
10
+ * The require() loader is NOT injected because changing it would undermine
11
+ * the createRequire(import.meta.url) lazy-load strategy that keeps this
12
+ * module from being perturbed by consumers that mock 'node:fs' at module scope
13
+ * (see update.test.ts). For the fallback test, a non-existent rootDir is
14
+ * sufficient to trigger the catch without mocking anything.
15
+ */
16
+ export declare function resolveVersionFromRoot(rootDir: string): string;
17
+ export declare const serverVersion: string;
18
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA6C9D;AAqCD,eAAO,MAAM,aAAa,QAAmB,CAAC"}