@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,630 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import os from 'node:os';
4
+ import { execSync, execFileSync } from 'node:child_process';
5
+ import { serverVersion } from '../version.js';
6
+ import { BIN_DIR, HOOKS_DIR, SCRIPTS_DIR, getProviderInstallConfig, readConfig, writeConfig, writeInstallConfig, PROVIDER_STANDARD_MODELS } from './config.js';
7
+ // Detect SEA mode
8
+ let _seaOverride = null;
9
+ /** Override isSea() result -- for tests only. Pass null to restore default. */
10
+ export function _setSeaOverride(v) { _seaOverride = v; }
11
+ export function isSea() {
12
+ if (_seaOverride !== null)
13
+ return _seaOverride;
14
+ try {
15
+ const sea = require('node:sea');
16
+ return sea.isSea();
17
+ }
18
+ catch {
19
+ return false;
20
+ }
21
+ }
22
+ /**
23
+ * Detect npm global install mode: the script runs from a node_modules-managed
24
+ * location (npm bin) rather than the SEA binary or the project's own dev dist.
25
+ * Returns false under SEA. Distinguishes npm global installs from `npm test` /
26
+ * dev-mode runs (which execute the project's own dist/index.js).
27
+ *
28
+ * Key insight: when npm installs globally, findProjectRoot() resolves to the
29
+ * npm package's root (where version.json is), which has no .git/. Dev mode has
30
+ * a .git/ directory at or above the root. This allows us to distinguish them.
31
+ */
32
+ export function isNpmGlobalInstall() {
33
+ if (isSea())
34
+ return false;
35
+ const scriptPath = process.argv[1];
36
+ if (!scriptPath || !scriptPath.includes('node_modules'))
37
+ return false;
38
+ // Check if the resolved project root is a git repo (has .git). If not, we
39
+ // assume npm global install mode. This is more reliable than comparing paths
40
+ // because npm package root and git repo root differ when npm is global.
41
+ try {
42
+ const projectRoot = findProjectRoot();
43
+ const hasGit = fs.existsSync(path.join(projectRoot, '.git'));
44
+ return !hasGit; // npm mode if no .git at project root
45
+ }
46
+ catch {
47
+ // If we can't find a project root, assume npm (not in a known git repo)
48
+ return true;
49
+ }
50
+ }
51
+ function getSeaAsset(key) {
52
+ const sea = require('node:sea');
53
+ const buf = sea.getAsset(key);
54
+ // getAsset returns ArrayBuffer — decode to string
55
+ return new TextDecoder().decode(buf);
56
+ }
57
+ function getSeaAssetBuffer(key) {
58
+ const sea = require('node:sea');
59
+ return Buffer.from(sea.getAsset(key));
60
+ }
61
+ import { fileURLToPath } from 'url';
62
+ import { dirname } from 'path';
63
+ const __filename = fileURLToPath(import.meta.url);
64
+ const __dirname = dirname(__filename);
65
+ // Find project root — works for both tsc (dist/cli/install.js) and esbuild (dist/sea-bundle.cjs)
66
+ function findProjectRoot() {
67
+ let dir = __dirname;
68
+ for (let i = 0; i < 5; i++) {
69
+ if (fs.existsSync(path.join(dir, 'version.json')))
70
+ return dir;
71
+ dir = path.dirname(dir);
72
+ }
73
+ throw new Error('Cannot find project root (version.json not found)');
74
+ }
75
+ // Collect files recursively — used by dev-mode manifest generation
76
+ function collectFilesRec(dir, base, rootBase) {
77
+ const effectiveRootBase = rootBase ?? base;
78
+ const results = {};
79
+ if (!fs.existsSync(dir))
80
+ return results;
81
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
82
+ const fullPath = path.join(dir, entry.name);
83
+ const relPath = path.join(base, entry.name).replace(/\\/g, '/');
84
+ if (entry.isDirectory()) {
85
+ Object.assign(results, collectFilesRec(fullPath, relPath, effectiveRootBase));
86
+ }
87
+ else {
88
+ results[path.relative(effectiveRootBase, relPath).replace(/\\/g, '/')] = relPath;
89
+ }
90
+ }
91
+ return results;
92
+ }
93
+ function buildDevManifest(root) {
94
+ const hooks = {};
95
+ for (const entry of fs.readdirSync(path.join(root, 'hooks'))) {
96
+ hooks[entry] = `hooks/${entry}`;
97
+ }
98
+ const scripts = {};
99
+ for (const entry of fs.readdirSync(path.join(root, 'scripts'))) {
100
+ if (entry.endsWith('.mjs'))
101
+ continue; // skip build scripts
102
+ scripts[entry] = `scripts/${entry}`;
103
+ }
104
+ const skills = collectFilesRec(path.join(root, 'skills', 'pm'), 'skills/pm');
105
+ const fleetSkills = collectFilesRec(path.join(root, 'skills', 'fleet'), 'skills/fleet');
106
+ const vf = JSON.parse(fs.readFileSync(path.join(root, 'version.json'), 'utf-8'));
107
+ return { version: vf.version, hooks, scripts, skills, fleetSkills };
108
+ }
109
+ let _manifestOverride = null;
110
+ /** Inject a manifest for tests — avoids SEA asset extraction. Pass null to restore default. */
111
+ export function _setManifestOverride(m) { _manifestOverride = m; }
112
+ function loadManifest() {
113
+ if (_manifestOverride !== null)
114
+ return _manifestOverride;
115
+ if (isSea()) {
116
+ return JSON.parse(getSeaAsset('manifest.json'));
117
+ }
118
+ // Dev mode: generate manifest on-the-fly from project files
119
+ return buildDevManifest(findProjectRoot());
120
+ }
121
+ function extractAsset(key) {
122
+ if (isSea()) {
123
+ return getSeaAsset(key);
124
+ }
125
+ const root = findProjectRoot();
126
+ return fs.readFileSync(path.join(root, key), 'utf-8');
127
+ }
128
+ function extractAssetBuffer(key) {
129
+ if (isSea()) {
130
+ return getSeaAssetBuffer(key);
131
+ }
132
+ const root = findProjectRoot();
133
+ return fs.readFileSync(path.join(root, key));
134
+ }
135
+ function clearDirSync(dir) {
136
+ if (fs.existsSync(dir)) {
137
+ fs.rmSync(dir, { recursive: true, force: true });
138
+ }
139
+ }
140
+ function copyDirSync(src, dest) {
141
+ fs.mkdirSync(dest, { recursive: true });
142
+ for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
143
+ const s = path.join(src, entry.name);
144
+ const d = path.join(dest, entry.name);
145
+ if (entry.isDirectory()) {
146
+ copyDirSync(s, d);
147
+ }
148
+ else {
149
+ fs.copyFileSync(s, d);
150
+ }
151
+ }
152
+ }
153
+ function writeAssetFile(destPath, content) {
154
+ fs.mkdirSync(path.dirname(destPath), { recursive: true });
155
+ fs.writeFileSync(destPath, content);
156
+ }
157
+ // Gemini CLI uses different hook event names than Claude CLI.
158
+ const GEMINI_HOOK_NAME_MAP = {
159
+ PostToolUse: 'AfterTool',
160
+ PreToolUse: 'BeforeTool',
161
+ UserPromptSubmit: 'BeforeAgent',
162
+ Stop: 'SessionEnd',
163
+ PreCompact: 'PreCompress',
164
+ };
165
+ function mergeHooksConfig(paths, hooksConfig, provider) {
166
+ let settingsFile = paths.settingsFile;
167
+ const isAgy = provider === 'agy';
168
+ let settings = {};
169
+ if (isAgy) {
170
+ const configDir = path.join(os.homedir(), '.gemini', 'config');
171
+ fs.mkdirSync(configDir, { recursive: true });
172
+ settingsFile = path.join(configDir, 'hooks.json');
173
+ if (fs.existsSync(settingsFile)) {
174
+ try {
175
+ settings = JSON.parse(fs.readFileSync(settingsFile, 'utf-8'));
176
+ }
177
+ catch { }
178
+ }
179
+ }
180
+ else {
181
+ settings = readConfig(paths);
182
+ }
183
+ settings.hooks = settings.hooks || {};
184
+ for (const [claudeName, hookEntries] of Object.entries(hooksConfig.hooks || {})) {
185
+ const eventName = provider === 'gemini'
186
+ ? (GEMINI_HOOK_NAME_MAP[claudeName] ?? claudeName)
187
+ : claudeName;
188
+ // Remove stale Claude-style key if we're writing under a different Gemini name.
189
+ if (provider === 'gemini' && claudeName in GEMINI_HOOK_NAME_MAP && claudeName !== eventName) {
190
+ delete settings.hooks[claudeName];
191
+ }
192
+ settings.hooks[eventName] = settings.hooks[eventName] || [];
193
+ for (const newHook of hookEntries) {
194
+ const idx = settings.hooks[eventName].findIndex((h) => h.matcher === newHook.matcher);
195
+ if (idx >= 0) {
196
+ settings.hooks[eventName][idx] = newHook;
197
+ }
198
+ else {
199
+ settings.hooks[eventName].push(newHook);
200
+ }
201
+ }
202
+ }
203
+ if (isAgy) {
204
+ fs.writeFileSync(settingsFile, JSON.stringify(settings, null, 2) + '\n', { mode: 0o600 });
205
+ }
206
+ else {
207
+ writeConfig(paths, settings);
208
+ }
209
+ }
210
+ function mergePermissions(paths) {
211
+ const settings = readConfig(paths);
212
+ const requiredPerms = [
213
+ 'mcp__apra-fleet__*',
214
+ 'activate_skill(*)',
215
+ 'tracker_*',
216
+ 'Agent(*)',
217
+ `Read(${paths.skillsDir.replace(/\\/g, '/')}/**)`,
218
+ `Read(${paths.fleetSkillsDir.replace(/\\/g, '/')}/**)`,
219
+ `Read(${path.join(paths.configDir, 'skills').replace(/\\/g, '/')}/**)`,
220
+ ];
221
+ settings.permissions = settings.permissions || {};
222
+ settings.permissions.allow = settings.permissions.allow || [];
223
+ const existing = new Set(settings.permissions.allow);
224
+ for (const perm of requiredPerms) {
225
+ if (!existing.has(perm)) {
226
+ settings.permissions.allow.push(perm);
227
+ }
228
+ }
229
+ writeConfig(paths, settings);
230
+ }
231
+ function configureStatusline(paths, scriptPath) {
232
+ const settings = readConfig(paths);
233
+ // Windows: Claude Code can't execute .sh directly — prefix with bash
234
+ const command = process.platform === 'win32' ? `bash "${scriptPath}"` : scriptPath;
235
+ settings.statusLine = {
236
+ type: 'command',
237
+ command,
238
+ };
239
+ writeConfig(paths, settings);
240
+ }
241
+ function mergeGeminiConfig(paths, mcpConfig) {
242
+ const settings = readConfig(paths);
243
+ settings.mcpServers = settings.mcpServers || {};
244
+ settings.mcpServers['apra-fleet'] = {
245
+ ...mcpConfig,
246
+ trust: true,
247
+ };
248
+ writeConfig(paths, settings);
249
+ }
250
+ function mergeAgyConfig(paths, mcpConfig) {
251
+ const configDir = path.join(os.homedir(), '.gemini', 'config');
252
+ fs.mkdirSync(configDir, { recursive: true });
253
+ const mcpConfigFile = path.join(configDir, 'mcp_config.json');
254
+ let settings = {};
255
+ if (fs.existsSync(mcpConfigFile)) {
256
+ try {
257
+ settings = JSON.parse(fs.readFileSync(mcpConfigFile, 'utf-8'));
258
+ }
259
+ catch { }
260
+ }
261
+ settings.mcpServers = settings.mcpServers || {};
262
+ settings.mcpServers['apra-fleet'] = mcpConfig;
263
+ fs.writeFileSync(mcpConfigFile, JSON.stringify(settings, null, 2) + '\n');
264
+ }
265
+ function writeDefaultModel(paths, standardModel) {
266
+ const settings = readConfig(paths);
267
+ if (!settings.defaultModel) {
268
+ settings.defaultModel = standardModel;
269
+ writeConfig(paths, settings);
270
+ }
271
+ }
272
+ function mergeCopilotConfig(paths, mcpConfig) {
273
+ const settings = readConfig(paths);
274
+ settings.mcpServers = settings.mcpServers || {};
275
+ settings.mcpServers['apra-fleet'] = mcpConfig;
276
+ writeConfig(paths, settings);
277
+ }
278
+ function mergeCodexConfig(paths, mcpConfig) {
279
+ const settings = readConfig(paths);
280
+ settings.mcp_servers = settings.mcp_servers || {};
281
+ settings.mcp_servers['apra-fleet'] = {
282
+ command: mcpConfig.command.replace(/\\/g, '/'),
283
+ args: mcpConfig.args.map((a) => a.replace(/\\/g, '/')),
284
+ };
285
+ writeConfig(paths, settings);
286
+ }
287
+ function run(cmd, opts) {
288
+ // Windows needs a shell for .cmd executables (e.g. claude.cmd)
289
+ const shellOpt = process.platform === 'win32' ? { shell: 'cmd.exe' } : {};
290
+ execSync(cmd, { stdio: 'inherit', ...shellOpt, ...opts });
291
+ }
292
+ export function isApraFleetRunning() {
293
+ try {
294
+ if (process.platform === 'win32') {
295
+ const out = execSync('tasklist /FI "IMAGENAME eq apra-fleet.exe" /NH /FO CSV', { encoding: 'utf-8', stdio: 'pipe' });
296
+ const currentPid = process.pid.toString();
297
+ // Each CSV line: "apra-fleet.exe","<PID>","..." — exclude the current installer process
298
+ return out.split('\n').some(line => {
299
+ const match = line.match(/"apra-fleet\.exe","(\d+)"/);
300
+ return match !== null && match[1] !== currentPid;
301
+ });
302
+ }
303
+ else {
304
+ // -x = exact name match; installer is apra-fleet-installer-* so won't match;
305
+ // exclude current PID to handle self-update (installed apra-fleet binary running install)
306
+ const out = execSync('pgrep -x apra-fleet', { encoding: 'utf-8', stdio: 'pipe' });
307
+ const currentPid = process.pid.toString();
308
+ return out.split('\n').some(line => line.trim() !== '' && line.trim() !== currentPid);
309
+ }
310
+ }
311
+ catch {
312
+ return false;
313
+ }
314
+ }
315
+ export function killApraFleet() {
316
+ if (process.platform === 'win32') {
317
+ execSync('taskkill /F /IM apra-fleet.exe', { stdio: 'ignore' });
318
+ }
319
+ else {
320
+ // -x = exact name match
321
+ execSync('pkill -x apra-fleet', { stdio: 'ignore' });
322
+ }
323
+ }
324
+ /**
325
+ * Write empty .ignore overlay files into a LOCAL agy member's workspace to block
326
+ * the global apra-fleet MCP server and PM/fleet skills from loading inside that
327
+ * workspace. Idempotent -- safe to call multiple times for the same folder.
328
+ *
329
+ * Only meaningful for LOCAL members (they share ~/.gemini/antigravity-cli/ with
330
+ * the PM). REMOTE members have their own home dir and no conflict.
331
+ */
332
+ export function writeAgyWorkspaceOverlays(workFolder) {
333
+ const overlayPaths = [
334
+ path.join(workFolder, '.gemini', 'antigravity-cli', 'mcp', 'apra-fleet', '.ignore'),
335
+ path.join(workFolder, '.gemini', 'antigravity-cli', 'skills', 'fleet', '.ignore'),
336
+ path.join(workFolder, '.gemini', 'antigravity-cli', 'skills', 'pm', '.ignore'),
337
+ ];
338
+ for (const filePath of overlayPaths) {
339
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
340
+ fs.writeFileSync(filePath, '', { mode: 0o644 });
341
+ }
342
+ }
343
+ export async function runInstall(args) {
344
+ // --help / -h guard — must come first, before any side effects (#142)
345
+ if (args.includes('--help') || args.includes('-h')) {
346
+ console.log(`apra-fleet install
347
+
348
+ Install the apra-fleet binary, hooks, MCP server registration, and skills.
349
+
350
+ Usage:
351
+ apra-fleet install Install binary + hooks + statusline + MCP + fleet & PM skills (default)
352
+ apra-fleet install --skill all Same as bare install (all skills)
353
+ apra-fleet install --skill fleet Install fleet skill only
354
+ apra-fleet install --skill pm Install PM skill (also installs fleet — PM depends on fleet)
355
+ apra-fleet install --skill none Skip skill installation
356
+ apra-fleet install --no-skill Same as --skill none
357
+ apra-fleet install --force Stop a running server before installing
358
+ apra-fleet install --llm <provider> Target LLM provider: claude (default), gemini, codex, copilot, agy
359
+ apra-fleet install --help Show this help
360
+
361
+ Options:
362
+ --llm <provider> LLM provider to configure. Supported: claude, gemini, codex, copilot, agy.
363
+ Defaults to claude. Note: --llm gemini shows a warning about sequential
364
+ dispatch — Gemini does not support background agents, so fleet operations
365
+ run sequentially rather than in parallel.
366
+ --skill <mode> Which skills to install: all (default), fleet, pm, or none.
367
+ --no-skill Alias for --skill none.
368
+ --force Stop a running apra-fleet server before installing (SEA mode only).`);
369
+ process.exit(0);
370
+ return;
371
+ }
372
+ // Parse --llm flag
373
+ let llm = 'claude';
374
+ const llmArg = args.find(a => a.startsWith('--llm='));
375
+ if (llmArg) {
376
+ llm = llmArg.split('=')[1];
377
+ }
378
+ else {
379
+ const idx = args.indexOf('--llm');
380
+ if (idx >= 0 && idx < args.length - 1) {
381
+ llm = args[idx + 1];
382
+ }
383
+ }
384
+ const supported = ['claude', 'gemini', 'codex', 'copilot', 'agy'];
385
+ if (!supported.includes(llm)) {
386
+ console.error(`Error: Unsupported LLM provider "${llm}". Supported: ${supported.join(', ')}`);
387
+ process.exit(1);
388
+ }
389
+ const paths = getProviderInstallConfig(llm);
390
+ let skillMode = 'all';
391
+ const skillEqualArg = args.find(a => a.startsWith('--skill='));
392
+ if (skillEqualArg) {
393
+ const val = skillEqualArg.split('=')[1];
394
+ if (val === 'all' || val === 'fleet' || val === 'pm' || val === 'none') {
395
+ skillMode = val;
396
+ }
397
+ else {
398
+ console.error(`Error: --skill value must be one of: all, fleet, pm, none (got "${val}")`);
399
+ process.exit(1);
400
+ }
401
+ }
402
+ else {
403
+ const skillIdx = args.indexOf('--skill');
404
+ if (skillIdx >= 0) {
405
+ const nextArg = args[skillIdx + 1];
406
+ if (nextArg && !nextArg.startsWith('--') && (nextArg === 'all' || nextArg === 'fleet' || nextArg === 'pm' || nextArg === 'none')) {
407
+ skillMode = nextArg;
408
+ }
409
+ else {
410
+ // --skill with no value → install both (backwards-compat)
411
+ skillMode = 'all';
412
+ }
413
+ }
414
+ }
415
+ // --no-skill is a synonym for --skill none
416
+ if (args.includes('--no-skill')) {
417
+ skillMode = 'none';
418
+ }
419
+ // Parse --force flag
420
+ const force = args.includes('--force');
421
+ // Reject unknown flags to catch typos early
422
+ const knownFlagPrefixes = ['--llm=', '--skill='];
423
+ const knownFlagExact = new Set(['--llm', '--skill', '--no-skill', '--force', '--help', '-h']);
424
+ for (const a of args) {
425
+ if (knownFlagExact.has(a))
426
+ continue;
427
+ if (knownFlagPrefixes.some(p => a.startsWith(p)))
428
+ continue;
429
+ if (!a.startsWith('-'))
430
+ continue; // non-flag positional (e.g. value token for --skill)
431
+ console.error(`Error: Unknown option "${a}". Run apra-fleet install --help for usage.`);
432
+ process.exit(1);
433
+ }
434
+ const installFleet = skillMode === 'fleet' || skillMode === 'pm' || skillMode === 'all';
435
+ const installPm = skillMode === 'pm' || skillMode === 'all';
436
+ const totalSteps = (installFleet && installPm) ? 8 : installFleet ? 7 : installPm ? 8 : 6;
437
+ if (llm === 'gemini' && (installFleet || installPm)) {
438
+ console.warn(`\n⚠ Note: Gemini does not support background agents. If you plan to use Gemini as the\n PM/orchestrator, fleet operations will run sequentially (no parallel dispatch).\n For best orchestration performance, consider using Claude. See docs for details.\n`);
439
+ }
440
+ // --- Running-process guard (SEA + npm modes -- dev mode runs via node, not a managed binary) ---
441
+ if ((isSea() || isNpmGlobalInstall()) && isApraFleetRunning()) {
442
+ if (!force) {
443
+ const killHint = process.platform === 'win32'
444
+ ? ' taskkill /F /IM apra-fleet.exe'
445
+ : ' pkill -x apra-fleet';
446
+ console.error(`
447
+ Error: apra-fleet is currently running. Stop the server before installing.
448
+
449
+ Run with --force to stop it automatically:
450
+ apra-fleet install --force
451
+
452
+ Or stop it manually:
453
+ ${killHint}
454
+ `);
455
+ process.exit(1);
456
+ }
457
+ killApraFleet();
458
+ await new Promise(resolve => setTimeout(resolve, 500));
459
+ console.log(' Stopped running server.');
460
+ }
461
+ console.log(`\nInstalling Apra Fleet ${serverVersion} for ${paths.name}...\n`);
462
+ // --- Step 1: Copy binary ---
463
+ let binaryPath = '';
464
+ if (isSea()) {
465
+ console.log(` [1/${totalSteps}] Installing binary...`);
466
+ fs.mkdirSync(BIN_DIR, { recursive: true });
467
+ const binaryName = process.platform === 'win32' ? 'apra-fleet.exe' : 'apra-fleet';
468
+ binaryPath = path.join(BIN_DIR, binaryName);
469
+ fs.copyFileSync(process.execPath, binaryPath);
470
+ if (process.platform !== 'win32') {
471
+ fs.chmodSync(binaryPath, 0o755);
472
+ }
473
+ }
474
+ else if (isNpmGlobalInstall()) {
475
+ console.log(` [1/${totalSteps}] npm global install detected -- skipping binary copy`);
476
+ binaryPath = process.argv[1];
477
+ }
478
+ else {
479
+ console.log(` [1/${totalSteps}] Dev mode -- skipping binary copy`);
480
+ }
481
+ // --- Step 2: Extract hooks ---
482
+ console.log(` [2/${totalSteps}] Installing hooks...`);
483
+ const manifest = loadManifest();
484
+ for (const [name, assetKey] of Object.entries(manifest.hooks)) {
485
+ const content = extractAsset(assetKey);
486
+ const destPath = path.join(HOOKS_DIR, name);
487
+ writeAssetFile(destPath, content);
488
+ if (process.platform !== 'win32') {
489
+ fs.chmodSync(destPath, 0o755);
490
+ }
491
+ }
492
+ // --- Step 3: Extract scripts ---
493
+ console.log(` [3/${totalSteps}] Installing scripts...`);
494
+ for (const [name, assetKey] of Object.entries(manifest.scripts)) {
495
+ const content = extractAsset(assetKey);
496
+ const destPath = path.join(SCRIPTS_DIR, name);
497
+ writeAssetFile(destPath, content);
498
+ if (process.platform !== 'win32') {
499
+ fs.chmodSync(destPath, 0o755);
500
+ }
501
+ }
502
+ // --- Step 4: Configure hooks + statusline in settings.json ---
503
+ console.log(` [4/${totalSteps}] Configuring ${paths.name} settings...`);
504
+ const installedHooksConfig = JSON.parse(fs.readFileSync(path.join(HOOKS_DIR, 'hooks-config.json'), 'utf-8'));
505
+ mergeHooksConfig(paths, installedHooksConfig, llm);
506
+ const statuslineScript = path.join(SCRIPTS_DIR, 'fleet-statusline.sh');
507
+ configureStatusline(paths, statuslineScript);
508
+ // Write defaultModel to provider settings so native CLI invocations default to standard tier
509
+ const standardModel = PROVIDER_STANDARD_MODELS[llm] ?? PROVIDER_STANDARD_MODELS['claude'];
510
+ writeDefaultModel(paths, standardModel);
511
+ // --- Step 5: Register MCP server ---
512
+ console.log(` [5/${totalSteps}] Registering MCP server...`);
513
+ const mcpConfig = isSea()
514
+ ? { command: binaryPath, args: [] }
515
+ : isNpmGlobalInstall()
516
+ ? { command: process.execPath, args: [process.argv[1]] }
517
+ : { command: 'node', args: [path.join(findProjectRoot(), 'dist', 'index.js')] };
518
+ if (llm === 'claude') {
519
+ try {
520
+ run('claude mcp remove apra-fleet --scope user', { stdio: 'ignore' });
521
+ }
522
+ catch { /* not registered */ }
523
+ // Build the claude MCP command from the actual mcpConfig structure.
524
+ // SEA mode: { command: binaryPath, args: [] } -> register the binary alone.
525
+ // npm/dev mode: { command: <node>, args: [<script>] } -> register node + script path.
526
+ // Quote both segments so paths with spaces (e.g. Windows "Program Files") work.
527
+ const cmd = mcpConfig.args.length > 0
528
+ ? `claude mcp add --scope user apra-fleet -- "${mcpConfig.command}" "${mcpConfig.args[0]}"`
529
+ : `claude mcp add --scope user apra-fleet -- "${mcpConfig.command}"`;
530
+ run(cmd);
531
+ }
532
+ else if (llm === 'gemini') {
533
+ mergeGeminiConfig(paths, mcpConfig);
534
+ }
535
+ else if (llm === 'codex') {
536
+ mergeCodexConfig(paths, mcpConfig);
537
+ }
538
+ else if (llm === 'copilot') {
539
+ mergeCopilotConfig(paths, mcpConfig);
540
+ }
541
+ else if (llm === 'agy') {
542
+ mergeAgyConfig(paths, mcpConfig);
543
+ }
544
+ // --- Step 6: Install fleet skill (optional) ---
545
+ if (skillMode === 'pm') {
546
+ console.warn(`\n⚠ Note: PM skill depends on fleet skill — installing fleet skill first.\n`);
547
+ }
548
+ if (installFleet) {
549
+ console.log(` [6/${totalSteps}] Installing fleet skill...`);
550
+ clearDirSync(paths.fleetSkillsDir);
551
+ if (isSea()) {
552
+ fs.mkdirSync(paths.fleetSkillsDir, { recursive: true });
553
+ for (const [name, assetKey] of Object.entries(manifest.fleetSkills)) {
554
+ const content = extractAsset(assetKey);
555
+ writeAssetFile(path.join(paths.fleetSkillsDir, name), content);
556
+ }
557
+ }
558
+ else {
559
+ // Dev mode: copy from project skills/fleet/
560
+ const fleetSrc = path.join(findProjectRoot(), 'skills', 'fleet');
561
+ copyDirSync(fleetSrc, paths.fleetSkillsDir);
562
+ }
563
+ }
564
+ // --- Step 7: Install PM skill (optional) ---
565
+ if (installPm) {
566
+ console.log(` [7/${totalSteps}] Installing PM skill...`);
567
+ clearDirSync(paths.skillsDir);
568
+ if (isSea()) {
569
+ fs.mkdirSync(paths.skillsDir, { recursive: true });
570
+ for (const [name, assetKey] of Object.entries(manifest.skills)) {
571
+ const content = extractAsset(assetKey);
572
+ writeAssetFile(path.join(paths.skillsDir, name), content);
573
+ }
574
+ }
575
+ else {
576
+ // Dev mode: copy from project skills/pm/
577
+ const pmSrc = path.join(findProjectRoot(), 'skills', 'pm');
578
+ copyDirSync(pmSrc, paths.skillsDir);
579
+ }
580
+ }
581
+ if (!installFleet && !installPm) {
582
+ console.log(` Skipping skills (use --skill all to install, or omit --skill for default)`);
583
+ }
584
+ // --- Step 8: Install Beads task tracker ---
585
+ // shell:true required on Windows — npm global packages install as .cmd wrappers
586
+ // that cannot be directly spawned by Node without a shell
587
+ console.log(` [${totalSteps}/${totalSteps}] Installing Beads task tracker...`);
588
+ try {
589
+ // Check if already installed
590
+ try {
591
+ execFileSync('bd', ['--version'], { stdio: 'pipe', shell: true });
592
+ // already installed — skip
593
+ }
594
+ catch {
595
+ // not installed — install it
596
+ execFileSync('npm', ['install', '-g', '@beads/bd'], { stdio: 'inherit', shell: true });
597
+ }
598
+ }
599
+ catch (err) {
600
+ // non-fatal: warn but don't fail the install
601
+ console.warn(' ⚠ Beads install skipped — npm not available or install failed');
602
+ }
603
+ // Finalize permissions
604
+ mergePermissions(paths);
605
+ // Write install-config.json (merge provider entry)
606
+ writeInstallConfig(llm, skillMode);
607
+ // --- Done ---
608
+ let beadsVersion = 'installed';
609
+ try {
610
+ const versionOut = execFileSync('bd', ['--version'], { stdio: 'pipe', encoding: 'utf-8', shell: true });
611
+ beadsVersion = versionOut.trim() || 'installed';
612
+ }
613
+ catch {
614
+ beadsVersion = 'not available';
615
+ }
616
+ const clientName = llm === 'claude' ? 'Claude Code' : paths.name;
617
+ const instructions = llm === 'claude' ? 'Run /mcp in Claude Code to load the server.' : `Restart ${paths.name} to load the server.`;
618
+ const forceNote = force ? `\nRestart ${clientName} to reload the MCP server.` : '';
619
+ console.log(`
620
+ Apra Fleet ${serverVersion} installed successfully for ${paths.name}.
621
+ Binary: ${BIN_DIR}
622
+ Hooks: ${HOOKS_DIR}
623
+ Scripts: ${SCRIPTS_DIR}
624
+ Settings: ${paths.settingsFile}${installFleet ? `\n Fleet Skill: ${paths.fleetSkillsDir}` : ''}${installPm ? `\n PM Skill: ${paths.skillsDir}` : ''}
625
+ Beads: ${beadsVersion}
626
+
627
+ ${instructions}${forceNote}
628
+ `);
629
+ }
630
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"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"}