kastell 2.1.0 → 2.2.1

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 (501) hide show
  1. package/.claude-plugin/marketplace.json +18 -0
  2. package/.claude-plugin/plugin.json +39 -0
  3. package/CHANGELOG.md +1266 -1216
  4. package/LICENSE +201 -201
  5. package/NOTICE +5 -5
  6. package/README.md +1 -1
  7. package/README.tr.md +1 -1
  8. package/bin/kastell +2 -2
  9. package/bin/kastell-mcp +5 -5
  10. package/dist/adapters/coolify.js +92 -92
  11. package/dist/adapters/dokploy.js +99 -99
  12. package/dist/adapters/shared.d.ts.map +1 -1
  13. package/dist/adapters/shared.js +4 -2
  14. package/dist/adapters/shared.js.map +1 -1
  15. package/dist/commands/add.d.ts.map +1 -1
  16. package/dist/commands/add.js +6 -9
  17. package/dist/commands/add.js.map +1 -1
  18. package/dist/commands/auth.d.ts.map +1 -1
  19. package/dist/commands/auth.js +12 -12
  20. package/dist/commands/auth.js.map +1 -1
  21. package/dist/commands/doctor.d.ts +1 -0
  22. package/dist/commands/doctor.d.ts.map +1 -1
  23. package/dist/commands/doctor.js +23 -8
  24. package/dist/commands/doctor.js.map +1 -1
  25. package/dist/commands/evidence.d.ts.map +1 -1
  26. package/dist/commands/evidence.js +8 -9
  27. package/dist/commands/evidence.js.map +1 -1
  28. package/dist/commands/fix.d.ts +1 -0
  29. package/dist/commands/fix.d.ts.map +1 -1
  30. package/dist/commands/fix.js +24 -5
  31. package/dist/commands/fix.js.map +1 -1
  32. package/dist/commands/init.d.ts.map +1 -1
  33. package/dist/commands/init.js +4 -7
  34. package/dist/commands/init.js.map +1 -1
  35. package/dist/commands/interactive/backup-maintenance.d.ts +8 -0
  36. package/dist/commands/interactive/backup-maintenance.d.ts.map +1 -0
  37. package/dist/commands/interactive/backup-maintenance.js +120 -0
  38. package/dist/commands/interactive/backup-maintenance.js.map +1 -0
  39. package/dist/commands/interactive/index.d.ts +4 -0
  40. package/dist/commands/interactive/index.d.ts.map +1 -0
  41. package/dist/commands/interactive/index.js +94 -0
  42. package/dist/commands/interactive/index.js.map +1 -0
  43. package/dist/commands/interactive/menu.d.ts +23 -0
  44. package/dist/commands/interactive/menu.d.ts.map +1 -0
  45. package/dist/commands/interactive/menu.js +121 -0
  46. package/dist/commands/interactive/menu.js.map +1 -0
  47. package/dist/commands/interactive/monitoring.d.ts +5 -0
  48. package/dist/commands/interactive/monitoring.d.ts.map +1 -0
  49. package/dist/commands/interactive/monitoring.js +96 -0
  50. package/dist/commands/interactive/monitoring.js.map +1 -0
  51. package/dist/commands/interactive/plugins.d.ts +2 -0
  52. package/dist/commands/interactive/plugins.d.ts.map +1 -0
  53. package/dist/commands/interactive/plugins.js +30 -0
  54. package/dist/commands/interactive/plugins.js.map +1 -0
  55. package/dist/commands/interactive/security.d.ts +9 -0
  56. package/dist/commands/interactive/security.d.ts.map +1 -0
  57. package/dist/commands/interactive/security.js +535 -0
  58. package/dist/commands/interactive/security.js.map +1 -0
  59. package/dist/commands/interactive/server-management.d.ts +5 -0
  60. package/dist/commands/interactive/server-management.d.ts.map +1 -0
  61. package/dist/commands/interactive/server-management.js +79 -0
  62. package/dist/commands/interactive/server-management.js.map +1 -0
  63. package/dist/commands/interactive/shared.d.ts +12 -0
  64. package/dist/commands/interactive/shared.d.ts.map +1 -0
  65. package/dist/commands/interactive/shared.js +30 -0
  66. package/dist/commands/interactive/shared.js.map +1 -0
  67. package/dist/commands/interactive.d.ts.map +1 -1
  68. package/dist/commands/interactive.js +29 -0
  69. package/dist/commands/interactive.js.map +1 -1
  70. package/dist/commands/lock.js +1 -1
  71. package/dist/commands/lock.js.map +1 -1
  72. package/dist/commands/plugin.d.ts +8 -0
  73. package/dist/commands/plugin.d.ts.map +1 -0
  74. package/dist/commands/plugin.js +87 -0
  75. package/dist/commands/plugin.js.map +1 -0
  76. package/dist/commands/regression.d.ts.map +1 -1
  77. package/dist/commands/regression.js +1 -2
  78. package/dist/commands/regression.js.map +1 -1
  79. package/dist/commands/restart.d.ts.map +1 -1
  80. package/dist/commands/restart.js +3 -2
  81. package/dist/commands/restart.js.map +1 -1
  82. package/dist/commands/schedule.js +2 -2
  83. package/dist/commands/schedule.js.map +1 -1
  84. package/dist/core/audit/checkIds.d.ts +516 -0
  85. package/dist/core/audit/checkIds.d.ts.map +1 -0
  86. package/dist/core/audit/checkIds.js +515 -0
  87. package/dist/core/audit/checkIds.js.map +1 -0
  88. package/dist/core/audit/checks/accounts.d.ts.map +1 -1
  89. package/dist/core/audit/checks/accounts.js +23 -22
  90. package/dist/core/audit/checks/accounts.js.map +1 -1
  91. package/dist/core/audit/checks/auth.d.ts.map +1 -1
  92. package/dist/core/audit/checks/auth.js +23 -22
  93. package/dist/core/audit/checks/auth.js.map +1 -1
  94. package/dist/core/audit/checks/backup.d.ts.map +1 -1
  95. package/dist/core/audit/checks/backup.js +9 -8
  96. package/dist/core/audit/checks/backup.js.map +1 -1
  97. package/dist/core/audit/checks/banners.d.ts.map +1 -1
  98. package/dist/core/audit/checks/banners.js +7 -6
  99. package/dist/core/audit/checks/banners.js.map +1 -1
  100. package/dist/core/audit/checks/boot.d.ts.map +1 -1
  101. package/dist/core/audit/checks/boot.js +12 -11
  102. package/dist/core/audit/checks/boot.js.map +1 -1
  103. package/dist/core/audit/checks/cloudmeta.d.ts.map +1 -1
  104. package/dist/core/audit/checks/cloudmeta.js +7 -6
  105. package/dist/core/audit/checks/cloudmeta.js.map +1 -1
  106. package/dist/core/audit/checks/crypto.d.ts +0 -5
  107. package/dist/core/audit/checks/crypto.d.ts.map +1 -1
  108. package/dist/core/audit/checks/crypto.js +20 -19
  109. package/dist/core/audit/checks/crypto.js.map +1 -1
  110. package/dist/core/audit/checks/ddos.d.ts.map +1 -1
  111. package/dist/core/audit/checks/ddos.js +9 -8
  112. package/dist/core/audit/checks/ddos.js.map +1 -1
  113. package/dist/core/audit/checks/dns.d.ts.map +1 -1
  114. package/dist/core/audit/checks/dns.js +9 -8
  115. package/dist/core/audit/checks/dns.js.map +1 -1
  116. package/dist/core/audit/checks/docker.d.ts.map +1 -1
  117. package/dist/core/audit/checks/docker.js +65 -64
  118. package/dist/core/audit/checks/docker.js.map +1 -1
  119. package/dist/core/audit/checks/fileintegrity.d.ts.map +1 -1
  120. package/dist/core/audit/checks/fileintegrity.js +11 -10
  121. package/dist/core/audit/checks/fileintegrity.js.map +1 -1
  122. package/dist/core/audit/checks/filesystem.d.ts.map +1 -1
  123. package/dist/core/audit/checks/filesystem.js +21 -20
  124. package/dist/core/audit/checks/filesystem.js.map +1 -1
  125. package/dist/core/audit/checks/firewall.d.ts.map +1 -1
  126. package/dist/core/audit/checks/firewall.js +18 -17
  127. package/dist/core/audit/checks/firewall.js.map +1 -1
  128. package/dist/core/audit/checks/httpHeaders.d.ts.map +1 -1
  129. package/dist/core/audit/checks/httpHeaders.js +7 -6
  130. package/dist/core/audit/checks/httpHeaders.js.map +1 -1
  131. package/dist/core/audit/checks/incidentready.d.ts.map +1 -1
  132. package/dist/core/audit/checks/incidentready.js +13 -12
  133. package/dist/core/audit/checks/incidentready.js.map +1 -1
  134. package/dist/core/audit/checks/kernel.d.ts.map +1 -1
  135. package/dist/core/audit/checks/kernel.js +32 -31
  136. package/dist/core/audit/checks/kernel.js.map +1 -1
  137. package/dist/core/audit/checks/logging.d.ts.map +1 -1
  138. package/dist/core/audit/checks/logging.js +21 -20
  139. package/dist/core/audit/checks/logging.js.map +1 -1
  140. package/dist/core/audit/checks/mac.d.ts.map +1 -1
  141. package/dist/core/audit/checks/mac.js +11 -10
  142. package/dist/core/audit/checks/mac.js.map +1 -1
  143. package/dist/core/audit/checks/malware.d.ts.map +1 -1
  144. package/dist/core/audit/checks/malware.js +12 -11
  145. package/dist/core/audit/checks/malware.js.map +1 -1
  146. package/dist/core/audit/checks/memory.d.ts.map +1 -1
  147. package/dist/core/audit/checks/memory.js +12 -11
  148. package/dist/core/audit/checks/memory.js.map +1 -1
  149. package/dist/core/audit/checks/network.d.ts.map +1 -1
  150. package/dist/core/audit/checks/network.js +22 -21
  151. package/dist/core/audit/checks/network.js.map +1 -1
  152. package/dist/core/audit/checks/nginx.d.ts.map +1 -1
  153. package/dist/core/audit/checks/nginx.js +17 -16
  154. package/dist/core/audit/checks/nginx.js.map +1 -1
  155. package/dist/core/audit/checks/resourcelimits.d.ts.map +1 -1
  156. package/dist/core/audit/checks/resourcelimits.js +9 -8
  157. package/dist/core/audit/checks/resourcelimits.js.map +1 -1
  158. package/dist/core/audit/checks/scheduling.d.ts.map +1 -1
  159. package/dist/core/audit/checks/scheduling.js +13 -12
  160. package/dist/core/audit/checks/scheduling.js.map +1 -1
  161. package/dist/core/audit/checks/secrets.d.ts.map +1 -1
  162. package/dist/core/audit/checks/secrets.js +16 -15
  163. package/dist/core/audit/checks/secrets.js.map +1 -1
  164. package/dist/core/audit/checks/services.d.ts.map +1 -1
  165. package/dist/core/audit/checks/services.js +26 -25
  166. package/dist/core/audit/checks/services.js.map +1 -1
  167. package/dist/core/audit/checks/ssh.d.ts.map +1 -1
  168. package/dist/core/audit/checks/ssh.js +23 -22
  169. package/dist/core/audit/checks/ssh.js.map +1 -1
  170. package/dist/core/audit/checks/supplychain.d.ts.map +1 -1
  171. package/dist/core/audit/checks/supplychain.js +13 -12
  172. package/dist/core/audit/checks/supplychain.js.map +1 -1
  173. package/dist/core/audit/checks/time.d.ts.map +1 -1
  174. package/dist/core/audit/checks/time.js +10 -9
  175. package/dist/core/audit/checks/time.js.map +1 -1
  176. package/dist/core/audit/checks/tls.d.ts.map +1 -1
  177. package/dist/core/audit/checks/tls.js +9 -8
  178. package/dist/core/audit/checks/tls.js.map +1 -1
  179. package/dist/core/audit/checks/updates.d.ts.map +1 -1
  180. package/dist/core/audit/checks/updates.js +12 -11
  181. package/dist/core/audit/checks/updates.js.map +1 -1
  182. package/dist/core/audit/compliance/categories/index.d.ts +3 -0
  183. package/dist/core/audit/compliance/categories/index.d.ts.map +1 -0
  184. package/dist/core/audit/compliance/categories/index.js +737 -0
  185. package/dist/core/audit/compliance/categories/index.js.map +1 -0
  186. package/dist/core/audit/compliance/helpers.d.ts +17 -0
  187. package/dist/core/audit/compliance/helpers.d.ts.map +1 -0
  188. package/dist/core/audit/compliance/helpers.js +40 -0
  189. package/dist/core/audit/compliance/helpers.js.map +1 -0
  190. package/dist/core/audit/compliance/mapper.d.ts +4 -16
  191. package/dist/core/audit/compliance/mapper.d.ts.map +1 -1
  192. package/dist/core/audit/compliance/mapper.js +3 -776
  193. package/dist/core/audit/compliance/mapper.js.map +1 -1
  194. package/dist/core/audit/fix-history.d.ts +16 -7
  195. package/dist/core/audit/fix-history.d.ts.map +1 -1
  196. package/dist/core/audit/fix-history.js +25 -2
  197. package/dist/core/audit/fix-history.js.map +1 -1
  198. package/dist/core/audit/fix.d.ts +17 -2
  199. package/dist/core/audit/fix.d.ts.map +1 -1
  200. package/dist/core/audit/fix.js +115 -42
  201. package/dist/core/audit/fix.js.map +1 -1
  202. package/dist/core/audit/formatters/badge.js +20 -20
  203. package/dist/core/audit/index.d.ts.map +1 -1
  204. package/dist/core/audit/index.js +3 -2
  205. package/dist/core/audit/index.js.map +1 -1
  206. package/dist/core/audit/snapshot.d.ts.map +1 -1
  207. package/dist/core/audit/snapshot.js +6 -2
  208. package/dist/core/audit/snapshot.js.map +1 -1
  209. package/dist/core/audit/types.d.ts +11 -1
  210. package/dist/core/audit/types.d.ts.map +1 -1
  211. package/dist/core/audit/watch.d.ts.map +1 -1
  212. package/dist/core/audit/watch.js +3 -2
  213. package/dist/core/audit/watch.js.map +1 -1
  214. package/dist/core/backup.d.ts.map +1 -1
  215. package/dist/core/backup.js +10 -5
  216. package/dist/core/backup.js.map +1 -1
  217. package/dist/core/bot/handlers.d.ts.map +1 -1
  218. package/dist/core/bot/handlers.js +2 -17
  219. package/dist/core/bot/handlers.js.map +1 -1
  220. package/dist/core/completions.d.ts.map +1 -1
  221. package/dist/core/completions.js +632 -610
  222. package/dist/core/completions.js.map +1 -1
  223. package/dist/core/deploy.d.ts.map +1 -1
  224. package/dist/core/deploy.js +7 -4
  225. package/dist/core/deploy.js.map +1 -1
  226. package/dist/core/doctor-fix.d.ts +1 -1
  227. package/dist/core/doctor-fix.d.ts.map +1 -1
  228. package/dist/core/doctor-fix.js +17 -2
  229. package/dist/core/doctor-fix.js.map +1 -1
  230. package/dist/core/doctor.d.ts.map +1 -1
  231. package/dist/core/doctor.js +2 -1
  232. package/dist/core/doctor.js.map +1 -1
  233. package/dist/core/firewall.d.ts +0 -1
  234. package/dist/core/firewall.d.ts.map +1 -1
  235. package/dist/core/firewall.js +2 -13
  236. package/dist/core/firewall.js.map +1 -1
  237. package/dist/core/lock/auth.d.ts +7 -0
  238. package/dist/core/lock/auth.d.ts.map +1 -0
  239. package/dist/core/lock/auth.js +59 -0
  240. package/dist/core/lock/auth.js.map +1 -0
  241. package/dist/core/lock/docker.d.ts +4 -0
  242. package/dist/core/lock/docker.d.ts.map +1 -0
  243. package/dist/core/lock/docker.js +28 -0
  244. package/dist/core/lock/docker.js.map +1 -0
  245. package/dist/core/lock/index.d.ts +11 -0
  246. package/dist/core/lock/index.d.ts.map +1 -0
  247. package/dist/core/lock/index.js +247 -0
  248. package/dist/core/lock/index.js.map +1 -0
  249. package/dist/core/lock/monitoring.d.ts +4 -0
  250. package/dist/core/lock/monitoring.d.ts.map +1 -0
  251. package/dist/core/lock/monitoring.js +55 -0
  252. package/dist/core/lock/monitoring.js.map +1 -0
  253. package/dist/core/lock/network.d.ts +6 -0
  254. package/dist/core/lock/network.d.ts.map +1 -0
  255. package/dist/core/lock/network.js +59 -0
  256. package/dist/core/lock/network.js.map +1 -0
  257. package/dist/core/lock/ssh.d.ts +5 -0
  258. package/dist/core/lock/ssh.d.ts.map +1 -0
  259. package/dist/core/lock/ssh.js +49 -0
  260. package/dist/core/lock/ssh.js.map +1 -0
  261. package/dist/core/lock/system.d.ts +9 -0
  262. package/dist/core/lock/system.d.ts.map +1 -0
  263. package/dist/core/lock/system.js +80 -0
  264. package/dist/core/lock/system.js.map +1 -0
  265. package/dist/core/lock/types.d.ts +41 -0
  266. package/dist/core/lock/types.d.ts.map +1 -0
  267. package/dist/core/lock/types.js +2 -0
  268. package/dist/core/lock/types.js.map +1 -0
  269. package/dist/core/maintain.d.ts.map +1 -1
  270. package/dist/core/maintain.js +3 -1
  271. package/dist/core/maintain.js.map +1 -1
  272. package/dist/core/manage.d.ts.map +1 -1
  273. package/dist/core/manage.js +7 -4
  274. package/dist/core/manage.js.map +1 -1
  275. package/dist/core/notify.d.ts.map +1 -1
  276. package/dist/core/notify.js +2 -1
  277. package/dist/core/notify.js.map +1 -1
  278. package/dist/core/notifyStore.d.ts.map +1 -1
  279. package/dist/core/notifyStore.js +3 -1
  280. package/dist/core/notifyStore.js.map +1 -1
  281. package/dist/core/plugin.d.ts +23 -0
  282. package/dist/core/plugin.d.ts.map +1 -0
  283. package/dist/core/plugin.js +107 -0
  284. package/dist/core/plugin.js.map +1 -0
  285. package/dist/core/provision.d.ts.map +1 -1
  286. package/dist/core/provision.js +9 -4
  287. package/dist/core/provision.js.map +1 -1
  288. package/dist/core/scheduleManager.d.ts +2 -1
  289. package/dist/core/scheduleManager.d.ts.map +1 -1
  290. package/dist/core/scheduleManager.js +13 -7
  291. package/dist/core/scheduleManager.js.map +1 -1
  292. package/dist/index.js +34 -2
  293. package/dist/index.js.map +1 -1
  294. package/dist/mcp/index.js +5 -9
  295. package/dist/mcp/index.js.map +1 -1
  296. package/dist/mcp/schemas/audit.d.ts +34 -0
  297. package/dist/mcp/schemas/audit.d.ts.map +1 -0
  298. package/dist/mcp/schemas/audit.js +23 -0
  299. package/dist/mcp/schemas/audit.js.map +1 -0
  300. package/dist/mcp/schemas/common.d.ts +16 -0
  301. package/dist/mcp/schemas/common.d.ts.map +1 -0
  302. package/dist/mcp/schemas/common.js +14 -0
  303. package/dist/mcp/schemas/common.js.map +1 -0
  304. package/dist/mcp/schemas/health.d.ts +14 -0
  305. package/dist/mcp/schemas/health.d.ts.map +1 -0
  306. package/dist/mcp/schemas/health.js +13 -0
  307. package/dist/mcp/schemas/health.js.map +1 -0
  308. package/dist/mcp/schemas/index.d.ts +5 -0
  309. package/dist/mcp/schemas/index.d.ts.map +1 -0
  310. package/dist/mcp/schemas/index.js +5 -0
  311. package/dist/mcp/schemas/index.js.map +1 -0
  312. package/dist/mcp/schemas/server.d.ts +18 -0
  313. package/dist/mcp/schemas/server.d.ts.map +1 -0
  314. package/dist/mcp/schemas/server.js +16 -0
  315. package/dist/mcp/schemas/server.js.map +1 -0
  316. package/dist/mcp/server.d.ts.map +1 -1
  317. package/dist/mcp/server.js +71 -40
  318. package/dist/mcp/server.js.map +1 -1
  319. package/dist/mcp/tools/serverAudit.d.ts +63 -1
  320. package/dist/mcp/tools/serverAudit.d.ts.map +1 -1
  321. package/dist/mcp/tools/serverAudit.js +63 -6
  322. package/dist/mcp/tools/serverAudit.js.map +1 -1
  323. package/dist/mcp/tools/serverBackup.d.ts +100 -2
  324. package/dist/mcp/tools/serverBackup.d.ts.map +1 -1
  325. package/dist/mcp/tools/serverBackup.handlers.d.ts.map +1 -1
  326. package/dist/mcp/tools/serverBackup.handlers.js +9 -0
  327. package/dist/mcp/tools/serverBackup.handlers.js.map +1 -1
  328. package/dist/mcp/tools/serverBackup.js +74 -0
  329. package/dist/mcp/tools/serverBackup.js.map +1 -1
  330. package/dist/mcp/tools/serverCompare.d.ts +33 -0
  331. package/dist/mcp/tools/serverCompare.d.ts.map +1 -1
  332. package/dist/mcp/tools/serverCompare.js +45 -2
  333. package/dist/mcp/tools/serverCompare.js.map +1 -1
  334. package/dist/mcp/tools/serverDoctor.d.ts +14 -0
  335. package/dist/mcp/tools/serverDoctor.d.ts.map +1 -1
  336. package/dist/mcp/tools/serverDoctor.js +16 -1
  337. package/dist/mcp/tools/serverDoctor.js.map +1 -1
  338. package/dist/mcp/tools/serverEvidence.d.ts +13 -0
  339. package/dist/mcp/tools/serverEvidence.d.ts.map +1 -1
  340. package/dist/mcp/tools/serverEvidence.js +17 -2
  341. package/dist/mcp/tools/serverEvidence.js.map +1 -1
  342. package/dist/mcp/tools/serverExplain.d.ts +17 -0
  343. package/dist/mcp/tools/serverExplain.d.ts.map +1 -1
  344. package/dist/mcp/tools/serverExplain.js +33 -1
  345. package/dist/mcp/tools/serverExplain.js.map +1 -1
  346. package/dist/mcp/tools/serverFix.d.ts +78 -0
  347. package/dist/mcp/tools/serverFix.d.ts.map +1 -1
  348. package/dist/mcp/tools/serverFix.js +87 -0
  349. package/dist/mcp/tools/serverFix.js.map +1 -1
  350. package/dist/mcp/tools/serverFleet.d.ts +24 -1
  351. package/dist/mcp/tools/serverFleet.d.ts.map +1 -1
  352. package/dist/mcp/tools/serverFleet.js +24 -1
  353. package/dist/mcp/tools/serverFleet.js.map +1 -1
  354. package/dist/mcp/tools/serverGuard.d.ts +12 -0
  355. package/dist/mcp/tools/serverGuard.d.ts.map +1 -1
  356. package/dist/mcp/tools/serverGuard.js +16 -0
  357. package/dist/mcp/tools/serverGuard.js.map +1 -1
  358. package/dist/mcp/tools/serverInfo.d.ts +77 -1
  359. package/dist/mcp/tools/serverInfo.d.ts.map +1 -1
  360. package/dist/mcp/tools/serverInfo.js +77 -4
  361. package/dist/mcp/tools/serverInfo.js.map +1 -1
  362. package/dist/mcp/tools/serverLock.d.ts +10 -0
  363. package/dist/mcp/tools/serverLock.d.ts.map +1 -1
  364. package/dist/mcp/tools/serverLock.js +15 -3
  365. package/dist/mcp/tools/serverLock.js.map +1 -1
  366. package/dist/mcp/tools/serverLogs.d.ts +43 -0
  367. package/dist/mcp/tools/serverLogs.d.ts.map +1 -1
  368. package/dist/mcp/tools/serverLogs.js +28 -0
  369. package/dist/mcp/tools/serverLogs.js.map +1 -1
  370. package/dist/mcp/tools/serverMaintain.d.ts +47 -0
  371. package/dist/mcp/tools/serverMaintain.d.ts.map +1 -1
  372. package/dist/mcp/tools/serverMaintain.js +75 -41
  373. package/dist/mcp/tools/serverMaintain.js.map +1 -1
  374. package/dist/mcp/tools/serverManage.d.ts +50 -0
  375. package/dist/mcp/tools/serverManage.d.ts.map +1 -1
  376. package/dist/mcp/tools/serverManage.js +49 -0
  377. package/dist/mcp/tools/serverManage.js.map +1 -1
  378. package/dist/mcp/tools/serverPlugin.d.ts +30 -0
  379. package/dist/mcp/tools/serverPlugin.d.ts.map +1 -0
  380. package/dist/mcp/tools/serverPlugin.js +47 -0
  381. package/dist/mcp/tools/serverPlugin.js.map +1 -0
  382. package/dist/mcp/tools/serverProvision.d.ts +22 -0
  383. package/dist/mcp/tools/serverProvision.d.ts.map +1 -1
  384. package/dist/mcp/tools/serverProvision.js +22 -2
  385. package/dist/mcp/tools/serverProvision.js.map +1 -1
  386. package/dist/mcp/tools/serverSecure.d.ts +120 -0
  387. package/dist/mcp/tools/serverSecure.d.ts.map +1 -1
  388. package/dist/mcp/tools/serverSecure.handlers.d.ts.map +1 -1
  389. package/dist/mcp/tools/serverSecure.handlers.js +39 -98
  390. package/dist/mcp/tools/serverSecure.handlers.js.map +1 -1
  391. package/dist/mcp/tools/serverSecure.js +101 -0
  392. package/dist/mcp/tools/serverSecure.js.map +1 -1
  393. package/dist/mcp/utils.d.ts +1 -0
  394. package/dist/mcp/utils.d.ts.map +1 -1
  395. package/dist/mcp/utils.js +5 -1
  396. package/dist/mcp/utils.js.map +1 -1
  397. package/dist/plugin/loader.d.ts +10 -0
  398. package/dist/plugin/loader.d.ts.map +1 -0
  399. package/dist/plugin/loader.js +88 -0
  400. package/dist/plugin/loader.js.map +1 -0
  401. package/dist/plugin/registry.d.ts +16 -0
  402. package/dist/plugin/registry.d.ts.map +1 -0
  403. package/dist/plugin/registry.js +101 -0
  404. package/dist/plugin/registry.js.map +1 -0
  405. package/dist/plugin/sdk/constants.d.ts +3 -0
  406. package/dist/plugin/sdk/constants.d.ts.map +1 -0
  407. package/dist/plugin/sdk/constants.js +3 -0
  408. package/dist/plugin/sdk/constants.js.map +1 -0
  409. package/dist/plugin/sdk/types.d.ts +29 -0
  410. package/dist/plugin/sdk/types.d.ts.map +1 -0
  411. package/dist/plugin/sdk/types.js +2 -0
  412. package/dist/plugin/sdk/types.js.map +1 -0
  413. package/dist/plugin/validate.d.ts +3 -0
  414. package/dist/plugin/validate.d.ts.map +1 -0
  415. package/dist/plugin/validate.js +31 -0
  416. package/dist/plugin/validate.js.map +1 -0
  417. package/dist/providers/base.d.ts.map +1 -1
  418. package/dist/providers/base.js +2 -1
  419. package/dist/providers/base.js.map +1 -1
  420. package/dist/providers/linode.d.ts +1 -0
  421. package/dist/providers/linode.d.ts.map +1 -1
  422. package/dist/providers/linode.js +4 -0
  423. package/dist/providers/linode.js.map +1 -1
  424. package/dist/utils/cloudInit.js +58 -58
  425. package/dist/utils/config.d.ts +3 -0
  426. package/dist/utils/config.d.ts.map +1 -1
  427. package/dist/utils/config.js +11 -6
  428. package/dist/utils/config.js.map +1 -1
  429. package/dist/utils/encryption.d.ts.map +1 -1
  430. package/dist/utils/encryption.js +4 -1
  431. package/dist/utils/encryption.js.map +1 -1
  432. package/dist/utils/errorMapper.d.ts.map +1 -1
  433. package/dist/utils/errorMapper.js +2 -1
  434. package/dist/utils/errorMapper.js.map +1 -1
  435. package/dist/utils/errors.d.ts +1 -0
  436. package/dist/utils/errors.d.ts.map +1 -1
  437. package/dist/utils/errors.js +3 -0
  438. package/dist/utils/errors.js.map +1 -1
  439. package/dist/utils/migration.d.ts.map +1 -1
  440. package/dist/utils/migration.js +25 -14
  441. package/dist/utils/migration.js.map +1 -1
  442. package/dist/utils/paths.d.ts +4 -0
  443. package/dist/utils/paths.d.ts.map +1 -1
  444. package/dist/utils/paths.js +4 -0
  445. package/dist/utils/paths.js.map +1 -1
  446. package/dist/utils/safeMode.d.ts.map +1 -1
  447. package/dist/utils/safeMode.js +3 -2
  448. package/dist/utils/safeMode.js.map +1 -1
  449. package/dist/utils/secureWrite.d.ts.map +1 -1
  450. package/dist/utils/secureWrite.js +2 -1
  451. package/dist/utils/secureWrite.js.map +1 -1
  452. package/dist/utils/securityLogger.d.ts.map +1 -1
  453. package/dist/utils/securityLogger.js +7 -3
  454. package/dist/utils/securityLogger.js.map +1 -1
  455. package/dist/utils/version.d.ts +4 -0
  456. package/dist/utils/version.d.ts.map +1 -0
  457. package/dist/utils/version.js +22 -0
  458. package/dist/utils/version.js.map +1 -0
  459. package/dist/utils/yamlConfig.d.ts.map +1 -1
  460. package/dist/utils/yamlConfig.js +3 -2
  461. package/dist/utils/yamlConfig.js.map +1 -1
  462. package/kastell-plugin/.claude-plugin/plugin.json +20 -0
  463. package/kastell-plugin/.mcp.json +8 -0
  464. package/kastell-plugin/README.md +113 -0
  465. package/kastell-plugin/agents/.gitkeep +0 -0
  466. package/kastell-plugin/agents/kastell-auditor.md +77 -0
  467. package/kastell-plugin/agents/scripts/bucket_mapper.sh +101 -0
  468. package/kastell-plugin/agents/scripts/trend_report.sh +91 -0
  469. package/kastell-plugin/hooks/destroy-block.cjs +31 -0
  470. package/kastell-plugin/hooks/hooks.json +57 -0
  471. package/kastell-plugin/hooks/pre-commit-audit-guard.cjs +75 -0
  472. package/kastell-plugin/hooks/session-audit.cjs +86 -0
  473. package/kastell-plugin/hooks/session-log.cjs +56 -0
  474. package/kastell-plugin/hooks/stop-quality-check.cjs +72 -0
  475. package/kastell-plugin/skills/.gitkeep +0 -0
  476. package/kastell-plugin/skills/kastell-careful/SKILL.md +64 -0
  477. package/kastell-plugin/skills/kastell-ops/SKILL.md +139 -0
  478. package/kastell-plugin/skills/kastell-ops/references/commands.md +45 -0
  479. package/kastell-plugin/skills/kastell-ops/references/mcp-tools.md +50 -0
  480. package/kastell-plugin/skills/kastell-ops/references/patterns.md +145 -0
  481. package/kastell-plugin/skills/kastell-ops/references/pitfalls.md +136 -0
  482. package/kastell-plugin/skills/kastell-ops/scripts/check_coverage.sh +101 -0
  483. package/kastell-plugin/skills/kastell-ops/scripts/fleet_report.sh +73 -0
  484. package/kastell-plugin/skills/kastell-ops/scripts/parse_audit.sh +76 -0
  485. package/kastell-plugin/skills/kastell-research/SKILL.md +90 -0
  486. package/kastell-plugin/skills/kastell-scaffold/SKILL.md +104 -0
  487. package/kastell-plugin/skills/kastell-scaffold/references/template-audit-check.md +150 -0
  488. package/kastell-plugin/skills/kastell-scaffold/references/template-command.md +80 -0
  489. package/kastell-plugin/skills/kastell-scaffold/references/template-mcp-tool.md +72 -0
  490. package/kastell-plugin/skills/kastell-scaffold/references/template-provider.md +67 -0
  491. package/kastell-plugin/skills/kastell-scaffold/scripts/scaffold.sh +180 -0
  492. package/kastell-plugin/skills/kastell-scaffold/templates/check-test.ts.tpl +27 -0
  493. package/kastell-plugin/skills/kastell-scaffold/templates/check.ts.tpl +50 -0
  494. package/kastell-plugin/skills/kastell-scaffold/templates/command-core.ts.tpl +18 -0
  495. package/kastell-plugin/skills/kastell-scaffold/templates/command-test.ts.tpl +17 -0
  496. package/kastell-plugin/skills/kastell-scaffold/templates/command.ts.tpl +25 -0
  497. package/kastell-plugin/skills/kastell-scaffold/templates/mcp-tool-test.ts.tpl +30 -0
  498. package/kastell-plugin/skills/kastell-scaffold/templates/mcp-tool.ts.tpl +29 -0
  499. package/kastell-plugin/skills/kastell-scaffold/templates/provider-test.ts.tpl +34 -0
  500. package/kastell-plugin/skills/kastell-scaffold/templates/provider.ts.tpl +32 -0
  501. package/package.json +122 -113
@@ -4,621 +4,643 @@
4
4
  * covering all 30 commands with per-command options.
5
5
  */
6
6
  export function generateBashCompletions() {
7
- return `# Generated by kastell -- bash completion script
8
- # Add to ~/.bashrc or save to ~/.local/share/bash-completion/completions/kastell
9
-
10
- _kastell() {
11
- local cur prev commands
12
- COMPREPLY=()
13
- cur="\${COMP_WORDS[COMP_CWORD]}"
14
- prev="\${COMP_WORDS[COMP_CWORD-1]}"
15
- commands="init list status destroy config ssh update restart logs monitor health doctor firewall domain secure backup restore export import add remove maintain snapshot completions guard lock audit evidence fleet notify"
16
-
17
- # Subcommand completions
18
- case "\${prev}" in
19
- config)
20
- COMPREPLY=( $(compgen -W "set get list reset validate" -- "\${cur}") )
21
- return 0
22
- ;;
23
- firewall)
24
- COMPREPLY=( $(compgen -W "setup add remove status --port --protocol --dry-run" -- "\${cur}") )
25
- return 0
26
- ;;
27
- domain)
28
- COMPREPLY=( $(compgen -W "add check remove list info --domain --no-ssl --dry-run" -- "\${cur}") )
29
- return 0
30
- ;;
31
- secure)
32
- COMPREPLY=( $(compgen -W "setup status audit --port --dry-run --force" -- "\${cur}") )
33
- return 0
34
- ;;
35
- snapshot)
36
- COMPREPLY=( $(compgen -W "create list delete --all --dry-run --force" -- "\${cur}") )
37
- return 0
38
- ;;
39
- completions)
40
- COMPREPLY=( $(compgen -W "bash zsh fish" -- "\${cur}") )
41
- return 0
42
- ;;
43
- guard)
44
- COMPREPLY=( $(compgen -W "start stop status" -- "\${cur}") )
45
- return 0
46
- ;;
47
- notify)
48
- COMPREPLY=( $(compgen -W "add test" -- "\${cur}") )
49
- return 0
50
- ;;
51
- esac
52
-
53
- # Per-command option completions
54
- if [[ "\${cur}" == -* ]]; then
55
- case "\${COMP_WORDS[1]}" in
56
- init)
57
- COMPREPLY=( $(compgen -W "--provider --token --token-stdin --region --size --name --full-setup --config --template --no-open --mode --dry-run" -- "\${cur}") )
58
- return 0
59
- ;;
60
- status)
61
- COMPREPLY=( $(compgen -W "--all --autostart" -- "\${cur}") )
62
- return 0
63
- ;;
64
- destroy)
65
- COMPREPLY=( $(compgen -W "--dry-run --force" -- "\${cur}") )
66
- return 0
67
- ;;
68
- ssh)
69
- COMPREPLY=( $(compgen -W "-c --command" -- "\${cur}") )
70
- return 0
71
- ;;
72
- update)
73
- COMPREPLY=( $(compgen -W "--all --dry-run --force" -- "\${cur}") )
74
- return 0
75
- ;;
76
- restart)
77
- COMPREPLY=( $(compgen -W "--dry-run --force" -- "\${cur}") )
78
- return 0
79
- ;;
80
- logs)
81
- COMPREPLY=( $(compgen -W "-n --lines -f --follow -s --service" -- "\${cur}") )
82
- return 0
83
- ;;
84
- monitor)
85
- COMPREPLY=( $(compgen -W "--containers" -- "\${cur}") )
86
- return 0
87
- ;;
88
- doctor)
89
- COMPREPLY=( $(compgen -W "--check-tokens --fresh --json --fix --force --dry-run" -- "\${cur}") )
90
- return 0
91
- ;;
92
- firewall)
93
- COMPREPLY=( $(compgen -W "--port --protocol --dry-run --force" -- "\${cur}") )
94
- return 0
95
- ;;
96
- domain)
97
- COMPREPLY=( $(compgen -W "--domain --no-ssl --dry-run" -- "\${cur}") )
98
- return 0
99
- ;;
100
- secure)
101
- COMPREPLY=( $(compgen -W "--port --dry-run --force" -- "\${cur}") )
102
- return 0
103
- ;;
104
- backup)
105
- COMPREPLY=( $(compgen -W "--dry-run --all --force" -- "\${cur}") )
106
- return 0
107
- ;;
108
- restore)
109
- COMPREPLY=( $(compgen -W "--backup --dry-run --force" -- "\${cur}") )
110
- return 0
111
- ;;
112
- add)
113
- COMPREPLY=( $(compgen -W "--provider --ip --name --skip-verify --mode" -- "\${cur}") )
114
- return 0
115
- ;;
116
- remove)
117
- COMPREPLY=( $(compgen -W "--dry-run --force" -- "\${cur}") )
118
- return 0
119
- ;;
120
- maintain)
121
- COMPREPLY=( $(compgen -W "--skip-reboot --all --dry-run --force" -- "\${cur}") )
122
- return 0
123
- ;;
124
- snapshot)
125
- COMPREPLY=( $(compgen -W "--all --dry-run --force" -- "\${cur}") )
126
- return 0
127
- ;;
128
- guard)
129
- COMPREPLY=( $(compgen -W "--force" -- "\${cur}") )
130
- return 0
131
- ;;
132
- lock)
133
- COMPREPLY=( $(compgen -W "--production --dry-run --force" -- "\${cur}") )
134
- return 0
135
- ;;
136
- audit)
137
- COMPREPLY=( $(compgen -W "--json --badge --report --summary --score-only --fix --dry-run --watch --host --threshold --category --snapshot --snapshots --diff --compare --trend --days" -- "\${cur}") )
138
- return 0
139
- ;;
140
- evidence)
141
- COMPREPLY=( $(compgen -W "--name --output --lines --no-docker --no-sysinfo --quiet --force --json" -- "\${cur}") )
142
- return 0
143
- ;;
144
- fleet)
145
- COMPREPLY=( $(compgen -W "--json --sort" -- "\${cur}") )
146
- return 0
147
- ;;
148
- notify)
149
- COMPREPLY=( $(compgen -W "--bot-token --chat-id --webhook-url --force" -- "\${cur}") )
150
- return 0
151
- ;;
152
- esac
153
- fi
154
-
155
- # Top-level command completions
156
- if [[ \${COMP_CWORD} -eq 1 ]]; then
157
- COMPREPLY=( $(compgen -W "\${commands}" -- "\${cur}") )
158
- return 0
159
- fi
160
- }
161
-
7
+ return `# Generated by kastell -- bash completion script
8
+ # Add to ~/.bashrc or save to ~/.local/share/bash-completion/completions/kastell
9
+
10
+ _kastell() {
11
+ local cur prev commands
12
+ COMPREPLY=()
13
+ cur="\${COMP_WORDS[COMP_CWORD]}"
14
+ prev="\${COMP_WORDS[COMP_CWORD-1]}"
15
+ commands="init list status destroy config ssh update restart logs monitor health doctor firewall domain secure backup restore export import add remove maintain snapshot completions guard lock audit evidence fleet notify plugin"
16
+
17
+ # Subcommand completions
18
+ case "\${prev}" in
19
+ config)
20
+ COMPREPLY=( $(compgen -W "set get list reset validate" -- "\${cur}") )
21
+ return 0
22
+ ;;
23
+ firewall)
24
+ COMPREPLY=( $(compgen -W "setup add remove status --port --protocol --dry-run" -- "\${cur}") )
25
+ return 0
26
+ ;;
27
+ domain)
28
+ COMPREPLY=( $(compgen -W "add check remove list info --domain --no-ssl --dry-run" -- "\${cur}") )
29
+ return 0
30
+ ;;
31
+ secure)
32
+ COMPREPLY=( $(compgen -W "setup status audit --port --dry-run --force" -- "\${cur}") )
33
+ return 0
34
+ ;;
35
+ snapshot)
36
+ COMPREPLY=( $(compgen -W "create list delete --all --dry-run --force" -- "\${cur}") )
37
+ return 0
38
+ ;;
39
+ completions)
40
+ COMPREPLY=( $(compgen -W "bash zsh fish" -- "\${cur}") )
41
+ return 0
42
+ ;;
43
+ guard)
44
+ COMPREPLY=( $(compgen -W "start stop status" -- "\${cur}") )
45
+ return 0
46
+ ;;
47
+ notify)
48
+ COMPREPLY=( $(compgen -W "add test" -- "\${cur}") )
49
+ return 0
50
+ ;;
51
+ plugin)
52
+ COMPREPLY=( $(compgen -W "install remove list validate --force --ver" -- "\${cur}") )
53
+ return 0
54
+ ;;
55
+ esac
56
+
57
+ # Per-command option completions
58
+ if [[ "\${cur}" == -* ]]; then
59
+ case "\${COMP_WORDS[1]}" in
60
+ init)
61
+ COMPREPLY=( $(compgen -W "--provider --token --token-stdin --region --size --name --full-setup --config --template --no-open --mode --dry-run" -- "\${cur}") )
62
+ return 0
63
+ ;;
64
+ status)
65
+ COMPREPLY=( $(compgen -W "--all --autostart" -- "\${cur}") )
66
+ return 0
67
+ ;;
68
+ destroy)
69
+ COMPREPLY=( $(compgen -W "--dry-run --force" -- "\${cur}") )
70
+ return 0
71
+ ;;
72
+ ssh)
73
+ COMPREPLY=( $(compgen -W "-c --command" -- "\${cur}") )
74
+ return 0
75
+ ;;
76
+ update)
77
+ COMPREPLY=( $(compgen -W "--all --dry-run --force" -- "\${cur}") )
78
+ return 0
79
+ ;;
80
+ restart)
81
+ COMPREPLY=( $(compgen -W "--dry-run --force" -- "\${cur}") )
82
+ return 0
83
+ ;;
84
+ logs)
85
+ COMPREPLY=( $(compgen -W "-n --lines -f --follow -s --service" -- "\${cur}") )
86
+ return 0
87
+ ;;
88
+ monitor)
89
+ COMPREPLY=( $(compgen -W "--containers" -- "\${cur}") )
90
+ return 0
91
+ ;;
92
+ doctor)
93
+ COMPREPLY=( $(compgen -W "--check-tokens --fresh --json --fix --force --dry-run" -- "\${cur}") )
94
+ return 0
95
+ ;;
96
+ firewall)
97
+ COMPREPLY=( $(compgen -W "--port --protocol --dry-run --force" -- "\${cur}") )
98
+ return 0
99
+ ;;
100
+ domain)
101
+ COMPREPLY=( $(compgen -W "--domain --no-ssl --dry-run" -- "\${cur}") )
102
+ return 0
103
+ ;;
104
+ secure)
105
+ COMPREPLY=( $(compgen -W "--port --dry-run --force" -- "\${cur}") )
106
+ return 0
107
+ ;;
108
+ backup)
109
+ COMPREPLY=( $(compgen -W "--dry-run --all --force" -- "\${cur}") )
110
+ return 0
111
+ ;;
112
+ restore)
113
+ COMPREPLY=( $(compgen -W "--backup --dry-run --force" -- "\${cur}") )
114
+ return 0
115
+ ;;
116
+ add)
117
+ COMPREPLY=( $(compgen -W "--provider --ip --name --skip-verify --mode" -- "\${cur}") )
118
+ return 0
119
+ ;;
120
+ remove)
121
+ COMPREPLY=( $(compgen -W "--dry-run --force" -- "\${cur}") )
122
+ return 0
123
+ ;;
124
+ maintain)
125
+ COMPREPLY=( $(compgen -W "--skip-reboot --all --dry-run --force" -- "\${cur}") )
126
+ return 0
127
+ ;;
128
+ snapshot)
129
+ COMPREPLY=( $(compgen -W "--all --dry-run --force" -- "\${cur}") )
130
+ return 0
131
+ ;;
132
+ guard)
133
+ COMPREPLY=( $(compgen -W "--force" -- "\${cur}") )
134
+ return 0
135
+ ;;
136
+ lock)
137
+ COMPREPLY=( $(compgen -W "--production --dry-run --force" -- "\${cur}") )
138
+ return 0
139
+ ;;
140
+ audit)
141
+ COMPREPLY=( $(compgen -W "--json --badge --report --summary --score-only --fix --dry-run --watch --host --threshold --category --snapshot --snapshots --diff --compare --trend --days" -- "\${cur}") )
142
+ return 0
143
+ ;;
144
+ evidence)
145
+ COMPREPLY=( $(compgen -W "--name --output --lines --no-docker --no-sysinfo --quiet --force --json" -- "\${cur}") )
146
+ return 0
147
+ ;;
148
+ fleet)
149
+ COMPREPLY=( $(compgen -W "--json --sort" -- "\${cur}") )
150
+ return 0
151
+ ;;
152
+ notify)
153
+ COMPREPLY=( $(compgen -W "--bot-token --chat-id --webhook-url --force" -- "\${cur}") )
154
+ return 0
155
+ ;;
156
+ esac
157
+ fi
158
+
159
+ # Top-level command completions
160
+ if [[ \${COMP_CWORD} -eq 1 ]]; then
161
+ COMPREPLY=( $(compgen -W "\${commands}" -- "\${cur}") )
162
+ return 0
163
+ fi
164
+ }
165
+
162
166
  complete -F _kastell kastell`;
163
167
  }
164
168
  export function generateZshCompletions() {
165
- return `#compdef kastell
166
- # Generated by kastell -- zsh completion script
167
- # Save to ~/.zfunc/_kastell and add: fpath=(~/.zfunc $fpath); autoload -Uz compinit && compinit
168
-
169
- _kastell() {
170
- local -a commands
171
- commands=(
172
- 'init:Deploy a new Coolify instance on a cloud provider'
173
- 'list:List all registered servers'
174
- 'status:Check server and Coolify status'
175
- 'destroy:Destroy a registered server'
176
- 'config:Manage default configuration'
177
- 'ssh:SSH into a registered server'
178
- 'update:Update Coolify on a registered server'
179
- 'restart:Restart a registered server'
180
- 'logs:View server logs'
181
- 'monitor:Show server resource usage'
182
- 'health:Check health of all registered servers'
183
- 'doctor:Check local environment and configuration'
184
- 'firewall:Manage server firewall'
185
- 'domain:Manage server domain and SSL'
186
- 'secure:Manage server security'
187
- 'backup:Backup Coolify database and config'
188
- 'restore:Restore Coolify from a backup'
189
- 'export:Export server list to JSON'
190
- 'import:Import servers from JSON'
191
- 'add:Add an existing server to management'
192
- 'remove:Remove a server from local config'
193
- 'maintain:Run full maintenance cycle'
194
- 'snapshot:Manage server snapshots'
195
- 'completions:Generate shell completion scripts'
196
- 'guard:Manage autonomous security monitoring daemon'
197
- 'lock:Harden server to production standard'
198
- 'audit:Run a security audit on a server'
199
- 'evidence:Collect forensic evidence package from a server'
200
- 'fleet:Show health and security posture of all registered servers'
201
- 'notify:Manage notification channels'
202
- )
203
-
204
- _arguments -C \\
205
- '1:command:->command' \\
206
- '*::arg:->args'
207
-
208
- case $state in
209
- command)
210
- _describe 'command' commands
211
- ;;
212
- args)
213
- case $words[1] in
214
- init)
215
- _arguments \\
216
- '--provider[Cloud provider]:provider:(hetzner digitalocean vultr linode)' \\
217
- '--token[API token]:token:' \\
218
- '--token-stdin[Read token from stdin]' \\
219
- '--region[Server region]:region:' \\
220
- '--size[Server size]:size:' \\
221
- '--name[Server name]:name:' \\
222
- '--full-setup[Auto-configure firewall and SSH]' \\
223
- '--config[Config file path]:path:_files' \\
224
- '--template[Predefined template]:template:(starter production dev)' \\
225
- '--no-open[Do not open browser]' \\
226
- '--mode[Server mode]:mode:(coolify dokploy bare)' \\
227
- '--dry-run[Show commands without executing]'
228
- ;;
229
- status)
230
- _arguments \\
231
- '--all[Check all servers]' \\
232
- '--autostart[Restart Coolify if down]'
233
- ;;
234
- destroy)
235
- _arguments \\
236
- '--dry-run[Show commands without executing]' \\
237
- '--force[Skip confirmation prompts]'
238
- ;;
239
- config)
240
- local -a subcommands
241
- subcommands=('set' 'get' 'list' 'reset' 'validate')
242
- _describe 'subcommand' subcommands
243
- ;;
244
- ssh)
245
- _arguments \\
246
- {-c,--command}'[Execute a single command]:command:'
247
- ;;
248
- update)
249
- _arguments \\
250
- '--all[Update all servers]' \\
251
- '--dry-run[Show commands without executing]' \\
252
- '--force[Skip confirmation prompts]'
253
- ;;
254
- restart)
255
- _arguments \\
256
- '--dry-run[Show commands without executing]' \\
257
- '--force[Skip confirmation prompts]'
258
- ;;
259
- logs)
260
- _arguments \\
261
- {-n,--lines}'[Number of lines]:lines:' \\
262
- {-f,--follow}'[Follow log output]' \\
263
- {-s,--service}'[Log service]:service:(coolify docker system)'
264
- ;;
265
- monitor)
266
- _arguments \\
267
- '--containers[Show Docker container list]'
268
- ;;
269
- doctor)
270
- _arguments \\
271
- '--check-tokens[Validate provider API tokens]' \\
272
- '--fresh[Force fresh SSH probe, skip cache]' \\
273
- '--json[Output result as JSON]' \\
274
- '--fix[Interactive fix mode]' \\
275
- '--force[Skip confirmation prompts]' \\
276
- '--dry-run[Show fix commands without executing]'
277
- ;;
278
- firewall)
279
- local -a subcommands
280
- subcommands=('setup' 'add' 'remove' 'status')
281
- _describe 'subcommand' subcommands
282
- _arguments \\
283
- '--port[Port number]:port:' \\
284
- '--protocol[Protocol]:protocol:(tcp udp)' \\
285
- '--dry-run[Show commands without executing]' \\
286
- '--force[Skip confirmation prompts]'
287
- ;;
288
- domain)
289
- local -a subcommands
290
- subcommands=('add' 'check' 'remove' 'list' 'info')
291
- _describe 'subcommand' subcommands
292
- _arguments \\
293
- '--domain[Domain name]:domain:' \\
294
- '--no-ssl[Disable HTTPS]' \\
295
- '--dry-run[Show commands without executing]'
296
- ;;
297
- secure)
298
- local -a subcommands
299
- subcommands=('setup' 'status' 'audit')
300
- _describe 'subcommand' subcommands
301
- _arguments \\
302
- '--port[SSH port]:port:' \\
303
- '--dry-run[Show commands without executing]' \\
304
- '--force[Skip confirmation prompts]'
305
- ;;
306
- backup)
307
- _arguments \\
308
- '--dry-run[Show commands without executing]' \\
309
- '--all[Backup all servers]' \\
310
- '--force[Skip confirmation prompts]'
311
- ;;
312
- restore)
313
- _arguments \\
314
- '--backup[Backup timestamp]:backup:' \\
315
- '--dry-run[Show commands without executing]' \\
316
- '--force[Skip confirmation prompts]'
317
- ;;
318
- add)
319
- _arguments \\
320
- '--provider[Cloud provider]:provider:(hetzner digitalocean vultr linode)' \\
321
- '--ip[Server IP address]:ip:' \\
322
- '--name[Server name]:name:' \\
323
- '--skip-verify[Skip verification]' \\
324
- '--mode[Server mode]:mode:(coolify dokploy bare)'
325
- ;;
326
- remove)
327
- _arguments \\
328
- '--dry-run[Show commands without executing]' \\
329
- '--force[Skip confirmation prompts]'
330
- ;;
331
- maintain)
332
- _arguments \\
333
- '--skip-reboot[Skip the reboot step]' \\
334
- '--all[Maintain all servers]' \\
335
- '--dry-run[Show commands without executing]' \\
336
- '--force[Skip confirmation prompts]'
337
- ;;
338
- snapshot)
339
- local -a subcommands
340
- subcommands=('create' 'list' 'delete')
341
- _describe 'subcommand' subcommands
342
- _arguments \\
343
- '--all[All servers]' \\
344
- '--dry-run[Show commands without executing]' \\
345
- '--force[Skip confirmation]'
346
- ;;
347
- completions)
348
- _arguments '1:shell:(bash zsh fish)'
349
- ;;
350
- guard)
351
- local -a subcommands
352
- subcommands=('start' 'stop' 'status')
353
- _describe 'subcommand' subcommands
354
- _arguments \\
355
- '--force[Skip confirmation prompts]'
356
- ;;
357
- lock)
358
- _arguments \\
359
- '--production[Apply full production hardening profile]' \\
360
- '--dry-run[Show commands without executing]' \\
361
- '--force[Skip confirmation prompts]'
362
- ;;
363
- audit)
364
- _arguments \\
365
- '--json[Output results as JSON]' \\
366
- '--badge[Output SVG badge with score]' \\
367
- '--report[Generate report]:format:(html md)' \\
368
- '--summary[Show compact dashboard summary]' \\
369
- '--score-only[Output only the score]' \\
370
- '--fix[Interactive fix mode]' \\
371
- '--dry-run[Show fix commands without executing]' \\
372
- '--watch[Watch mode]:interval:' \\
373
- '--host[Audit unregistered server]:user@ip:' \\
374
- '--threshold[Exit code 1 if score below]:score:' \\
375
- '--category[Comma-separated categories]:list:' \\
376
- '--snapshot[Save audit as snapshot]:name:' \\
377
- '--snapshots[List saved snapshots]' \\
378
- '--diff[Compare two snapshots]:before:after:' \\
379
- '--compare[Compare two servers]:server1:server2:' \\
380
- '--trend[Show score trend over time]' \\
381
- '--days[Limit trend to N days]:n:'
382
- ;;
383
- evidence)
384
- _arguments \\
385
- '--name[Label for evidence directory]:label:' \\
386
- '--output[Override output directory]:dir:_files' \\
387
- '--lines[Log lines to collect]:n:' \\
388
- '--no-docker[Skip Docker data collection]' \\
389
- '--no-sysinfo[Skip system info collection]' \\
390
- '--quiet[Suppress spinner output]' \\
391
- '--force[Overwrite existing evidence]' \\
392
- '--json[Print manifest JSON to stdout]'
393
- ;;
394
- fleet)
395
- _arguments \\
396
- '--json[Output machine-readable JSON]' \\
397
- '--sort[Sort by field]:field:(score name provider)'
398
- ;;
399
- notify)
400
- local -a subcommands
401
- subcommands=('add' 'test')
402
- _describe 'subcommand' subcommands
403
- _arguments \\
404
- '--bot-token[Telegram bot token]:token:' \\
405
- '--chat-id[Telegram chat ID]:id:' \\
406
- '--webhook-url[Discord or Slack webhook URL]:url:' \\
407
- '--force[Skip interactive prompts]'
408
- ;;
409
- esac
410
- ;;
411
- esac
412
- }
413
-
169
+ return `#compdef kastell
170
+ # Generated by kastell -- zsh completion script
171
+ # Save to ~/.zfunc/_kastell and add: fpath=(~/.zfunc $fpath); autoload -Uz compinit && compinit
172
+
173
+ _kastell() {
174
+ local -a commands
175
+ commands=(
176
+ 'init:Deploy a new Coolify instance on a cloud provider'
177
+ 'list:List all registered servers'
178
+ 'status:Check server and Coolify status'
179
+ 'destroy:Destroy a registered server'
180
+ 'config:Manage default configuration'
181
+ 'ssh:SSH into a registered server'
182
+ 'update:Update Coolify on a registered server'
183
+ 'restart:Restart a registered server'
184
+ 'logs:View server logs'
185
+ 'monitor:Show server resource usage'
186
+ 'health:Check health of all registered servers'
187
+ 'doctor:Check local environment and configuration'
188
+ 'firewall:Manage server firewall'
189
+ 'domain:Manage server domain and SSL'
190
+ 'secure:Manage server security'
191
+ 'backup:Backup Coolify database and config'
192
+ 'restore:Restore Coolify from a backup'
193
+ 'export:Export server list to JSON'
194
+ 'import:Import servers from JSON'
195
+ 'add:Add an existing server to management'
196
+ 'remove:Remove a server from local config'
197
+ 'maintain:Run full maintenance cycle'
198
+ 'snapshot:Manage server snapshots'
199
+ 'completions:Generate shell completion scripts'
200
+ 'guard:Manage autonomous security monitoring daemon'
201
+ 'lock:Harden server to production standard'
202
+ 'audit:Run a security audit on a server'
203
+ 'evidence:Collect forensic evidence package from a server'
204
+ 'fleet:Show health and security posture of all registered servers'
205
+ 'notify:Manage notification channels'
206
+ 'plugin:Manage kastell plugins'
207
+ )
208
+
209
+ _arguments -C \\
210
+ '1:command:->command' \\
211
+ '*::arg:->args'
212
+
213
+ case $state in
214
+ command)
215
+ _describe 'command' commands
216
+ ;;
217
+ args)
218
+ case $words[1] in
219
+ init)
220
+ _arguments \\
221
+ '--provider[Cloud provider]:provider:(hetzner digitalocean vultr linode)' \\
222
+ '--token[API token]:token:' \\
223
+ '--token-stdin[Read token from stdin]' \\
224
+ '--region[Server region]:region:' \\
225
+ '--size[Server size]:size:' \\
226
+ '--name[Server name]:name:' \\
227
+ '--full-setup[Auto-configure firewall and SSH]' \\
228
+ '--config[Config file path]:path:_files' \\
229
+ '--template[Predefined template]:template:(starter production dev)' \\
230
+ '--no-open[Do not open browser]' \\
231
+ '--mode[Server mode]:mode:(coolify dokploy bare)' \\
232
+ '--dry-run[Show commands without executing]'
233
+ ;;
234
+ status)
235
+ _arguments \\
236
+ '--all[Check all servers]' \\
237
+ '--autostart[Restart Coolify if down]'
238
+ ;;
239
+ destroy)
240
+ _arguments \\
241
+ '--dry-run[Show commands without executing]' \\
242
+ '--force[Skip confirmation prompts]'
243
+ ;;
244
+ config)
245
+ local -a subcommands
246
+ subcommands=('set' 'get' 'list' 'reset' 'validate')
247
+ _describe 'subcommand' subcommands
248
+ ;;
249
+ ssh)
250
+ _arguments \\
251
+ {-c,--command}'[Execute a single command]:command:'
252
+ ;;
253
+ update)
254
+ _arguments \\
255
+ '--all[Update all servers]' \\
256
+ '--dry-run[Show commands without executing]' \\
257
+ '--force[Skip confirmation prompts]'
258
+ ;;
259
+ restart)
260
+ _arguments \\
261
+ '--dry-run[Show commands without executing]' \\
262
+ '--force[Skip confirmation prompts]'
263
+ ;;
264
+ logs)
265
+ _arguments \\
266
+ {-n,--lines}'[Number of lines]:lines:' \\
267
+ {-f,--follow}'[Follow log output]' \\
268
+ {-s,--service}'[Log service]:service:(coolify docker system)'
269
+ ;;
270
+ monitor)
271
+ _arguments \\
272
+ '--containers[Show Docker container list]'
273
+ ;;
274
+ doctor)
275
+ _arguments \\
276
+ '--check-tokens[Validate provider API tokens]' \\
277
+ '--fresh[Force fresh SSH probe, skip cache]' \\
278
+ '--json[Output result as JSON]' \\
279
+ '--fix[Interactive fix mode]' \\
280
+ '--force[Skip confirmation prompts]' \\
281
+ '--dry-run[Show fix commands without executing]'
282
+ ;;
283
+ firewall)
284
+ local -a subcommands
285
+ subcommands=('setup' 'add' 'remove' 'status')
286
+ _describe 'subcommand' subcommands
287
+ _arguments \\
288
+ '--port[Port number]:port:' \\
289
+ '--protocol[Protocol]:protocol:(tcp udp)' \\
290
+ '--dry-run[Show commands without executing]' \\
291
+ '--force[Skip confirmation prompts]'
292
+ ;;
293
+ domain)
294
+ local -a subcommands
295
+ subcommands=('add' 'check' 'remove' 'list' 'info')
296
+ _describe 'subcommand' subcommands
297
+ _arguments \\
298
+ '--domain[Domain name]:domain:' \\
299
+ '--no-ssl[Disable HTTPS]' \\
300
+ '--dry-run[Show commands without executing]'
301
+ ;;
302
+ secure)
303
+ local -a subcommands
304
+ subcommands=('setup' 'status' 'audit')
305
+ _describe 'subcommand' subcommands
306
+ _arguments \\
307
+ '--port[SSH port]:port:' \\
308
+ '--dry-run[Show commands without executing]' \\
309
+ '--force[Skip confirmation prompts]'
310
+ ;;
311
+ backup)
312
+ _arguments \\
313
+ '--dry-run[Show commands without executing]' \\
314
+ '--all[Backup all servers]' \\
315
+ '--force[Skip confirmation prompts]'
316
+ ;;
317
+ restore)
318
+ _arguments \\
319
+ '--backup[Backup timestamp]:backup:' \\
320
+ '--dry-run[Show commands without executing]' \\
321
+ '--force[Skip confirmation prompts]'
322
+ ;;
323
+ add)
324
+ _arguments \\
325
+ '--provider[Cloud provider]:provider:(hetzner digitalocean vultr linode)' \\
326
+ '--ip[Server IP address]:ip:' \\
327
+ '--name[Server name]:name:' \\
328
+ '--skip-verify[Skip verification]' \\
329
+ '--mode[Server mode]:mode:(coolify dokploy bare)'
330
+ ;;
331
+ remove)
332
+ _arguments \\
333
+ '--dry-run[Show commands without executing]' \\
334
+ '--force[Skip confirmation prompts]'
335
+ ;;
336
+ maintain)
337
+ _arguments \\
338
+ '--skip-reboot[Skip the reboot step]' \\
339
+ '--all[Maintain all servers]' \\
340
+ '--dry-run[Show commands without executing]' \\
341
+ '--force[Skip confirmation prompts]'
342
+ ;;
343
+ snapshot)
344
+ local -a subcommands
345
+ subcommands=('create' 'list' 'delete')
346
+ _describe 'subcommand' subcommands
347
+ _arguments \\
348
+ '--all[All servers]' \\
349
+ '--dry-run[Show commands without executing]' \\
350
+ '--force[Skip confirmation]'
351
+ ;;
352
+ completions)
353
+ _arguments '1:shell:(bash zsh fish)'
354
+ ;;
355
+ guard)
356
+ local -a subcommands
357
+ subcommands=('start' 'stop' 'status')
358
+ _describe 'subcommand' subcommands
359
+ _arguments \\
360
+ '--force[Skip confirmation prompts]'
361
+ ;;
362
+ lock)
363
+ _arguments \\
364
+ '--production[Apply full production hardening profile]' \\
365
+ '--dry-run[Show commands without executing]' \\
366
+ '--force[Skip confirmation prompts]'
367
+ ;;
368
+ audit)
369
+ _arguments \\
370
+ '--json[Output results as JSON]' \\
371
+ '--badge[Output SVG badge with score]' \\
372
+ '--report[Generate report]:format:(html md)' \\
373
+ '--summary[Show compact dashboard summary]' \\
374
+ '--score-only[Output only the score]' \\
375
+ '--fix[Interactive fix mode]' \\
376
+ '--dry-run[Show fix commands without executing]' \\
377
+ '--watch[Watch mode]:interval:' \\
378
+ '--host[Audit unregistered server]:user@ip:' \\
379
+ '--threshold[Exit code 1 if score below]:score:' \\
380
+ '--category[Comma-separated categories]:list:' \\
381
+ '--snapshot[Save audit as snapshot]:name:' \\
382
+ '--snapshots[List saved snapshots]' \\
383
+ '--diff[Compare two snapshots]:before:after:' \\
384
+ '--compare[Compare two servers]:server1:server2:' \\
385
+ '--trend[Show score trend over time]' \\
386
+ '--days[Limit trend to N days]:n:'
387
+ ;;
388
+ evidence)
389
+ _arguments \\
390
+ '--name[Label for evidence directory]:label:' \\
391
+ '--output[Override output directory]:dir:_files' \\
392
+ '--lines[Log lines to collect]:n:' \\
393
+ '--no-docker[Skip Docker data collection]' \\
394
+ '--no-sysinfo[Skip system info collection]' \\
395
+ '--quiet[Suppress spinner output]' \\
396
+ '--force[Overwrite existing evidence]' \\
397
+ '--json[Print manifest JSON to stdout]'
398
+ ;;
399
+ fleet)
400
+ _arguments \\
401
+ '--json[Output machine-readable JSON]' \\
402
+ '--sort[Sort by field]:field:(score name provider)'
403
+ ;;
404
+ notify)
405
+ local -a subcommands
406
+ subcommands=('add' 'test')
407
+ _describe 'subcommand' subcommands
408
+ _arguments \\
409
+ '--bot-token[Telegram bot token]:token:' \\
410
+ '--chat-id[Telegram chat ID]:id:' \\
411
+ '--webhook-url[Discord or Slack webhook URL]:url:' \\
412
+ '--force[Skip interactive prompts]'
413
+ ;;
414
+ plugin)
415
+ local -a subcommands
416
+ subcommands=('install:Install a plugin from npm registry' 'remove:Remove an installed plugin' 'list:List installed plugins' 'validate:Validate plugin manifest and entry point')
417
+ _describe 'subcommand' subcommands
418
+ _arguments \\
419
+ '--ver[Specific version to install]:version:' \\
420
+ '--force[Skip confirmation prompt]'
421
+ ;;
422
+ esac
423
+ ;;
424
+ esac
425
+ }
426
+
414
427
  _kastell`;
415
428
  }
416
429
  export function generateFishCompletions() {
417
- return `# Generated by kastell -- fish completion script
418
- # Save to ~/.config/fish/completions/kastell.fish
419
-
420
- # Disable file completions by default
421
- complete -c kastell -f
422
-
423
- # Helper function: no subcommand entered yet
424
- function __kastell_no_subcommand
425
- set -l cmd (commandline -opc)
426
- test (count $cmd) -eq 1
427
- end
428
-
429
- # Helper function: check current subcommand
430
- function __kastell_using_subcommand
431
- set -l cmd (commandline -opc)
432
- test (count $cmd) -ge 2; and test $cmd[2] = $argv[1]
433
- end
434
-
435
- # Top-level commands
436
- complete -c kastell -n '__kastell_no_subcommand' -a 'init' -d 'Deploy a new Coolify instance'
437
- complete -c kastell -n '__kastell_no_subcommand' -a 'list' -d 'List all registered servers'
438
- complete -c kastell -n '__kastell_no_subcommand' -a 'status' -d 'Check server and Coolify status'
439
- complete -c kastell -n '__kastell_no_subcommand' -a 'destroy' -d 'Destroy a registered server'
440
- complete -c kastell -n '__kastell_no_subcommand' -a 'config' -d 'Manage default configuration'
441
- complete -c kastell -n '__kastell_no_subcommand' -a 'ssh' -d 'SSH into a registered server'
442
- complete -c kastell -n '__kastell_no_subcommand' -a 'update' -d 'Update Coolify on a server'
443
- complete -c kastell -n '__kastell_no_subcommand' -a 'restart' -d 'Restart a registered server'
444
- complete -c kastell -n '__kastell_no_subcommand' -a 'logs' -d 'View server logs'
445
- complete -c kastell -n '__kastell_no_subcommand' -a 'monitor' -d 'Show server resource usage'
446
- complete -c kastell -n '__kastell_no_subcommand' -a 'health' -d 'Check health of servers'
447
- complete -c kastell -n '__kastell_no_subcommand' -a 'doctor' -d 'Check local environment'
448
- complete -c kastell -n '__kastell_no_subcommand' -a 'firewall' -d 'Manage server firewall'
449
- complete -c kastell -n '__kastell_no_subcommand' -a 'domain' -d 'Manage server domain and SSL'
450
- complete -c kastell -n '__kastell_no_subcommand' -a 'secure' -d 'Manage server security'
451
- complete -c kastell -n '__kastell_no_subcommand' -a 'backup' -d 'Backup Coolify database'
452
- complete -c kastell -n '__kastell_no_subcommand' -a 'restore' -d 'Restore from a backup'
453
- complete -c kastell -n '__kastell_no_subcommand' -a 'export' -d 'Export server list to JSON'
454
- complete -c kastell -n '__kastell_no_subcommand' -a 'import' -d 'Import servers from JSON'
455
- complete -c kastell -n '__kastell_no_subcommand' -a 'add' -d 'Add an existing server'
456
- complete -c kastell -n '__kastell_no_subcommand' -a 'remove' -d 'Remove a server from config'
457
- complete -c kastell -n '__kastell_no_subcommand' -a 'maintain' -d 'Run full maintenance cycle'
458
- complete -c kastell -n '__kastell_no_subcommand' -a 'snapshot' -d 'Manage server snapshots'
459
- complete -c kastell -n '__kastell_no_subcommand' -a 'completions' -d 'Generate shell completions'
460
- complete -c kastell -n '__kastell_no_subcommand' -a 'guard' -d 'Manage guard daemon'
461
- complete -c kastell -n '__kastell_no_subcommand' -a 'lock' -d 'Harden server to production standard'
462
- complete -c kastell -n '__kastell_no_subcommand' -a 'audit' -d 'Run a security audit'
463
- complete -c kastell -n '__kastell_no_subcommand' -a 'evidence' -d 'Collect forensic evidence'
464
- complete -c kastell -n '__kastell_no_subcommand' -a 'fleet' -d 'Show fleet health and security'
465
- complete -c kastell -n '__kastell_no_subcommand' -a 'notify' -d 'Manage notification channels'
466
-
467
- # init options
468
- complete -c kastell -n '__kastell_using_subcommand init' -l provider -d 'Cloud provider'
469
- complete -c kastell -n '__kastell_using_subcommand init' -l token -d 'API token'
470
- complete -c kastell -n '__kastell_using_subcommand init' -l token-stdin -d 'Read token from stdin'
471
- complete -c kastell -n '__kastell_using_subcommand init' -l region -d 'Server region'
472
- complete -c kastell -n '__kastell_using_subcommand init' -l size -d 'Server size'
473
- complete -c kastell -n '__kastell_using_subcommand init' -l name -d 'Server name'
474
- complete -c kastell -n '__kastell_using_subcommand init' -l full-setup -d 'Auto-configure firewall and SSH'
475
- complete -c kastell -n '__kastell_using_subcommand init' -l config -d 'Config file path'
476
- complete -c kastell -n '__kastell_using_subcommand init' -l template -d 'Predefined template'
477
- complete -c kastell -n '__kastell_using_subcommand init' -l no-open -d 'Do not open browser'
478
- complete -c kastell -n '__kastell_using_subcommand init' -l mode -d 'Server mode'
479
- complete -c kastell -n '__kastell_using_subcommand init' -l dry-run -d 'Show commands without executing'
480
-
481
- # status options
482
- complete -c kastell -n '__kastell_using_subcommand status' -l all -d 'Check all servers'
483
- complete -c kastell -n '__kastell_using_subcommand status' -l autostart -d 'Restart Coolify if down'
484
-
485
- # destroy options
486
- complete -c kastell -n '__kastell_using_subcommand destroy' -l dry-run -d 'Show commands without executing'
487
- complete -c kastell -n '__kastell_using_subcommand destroy' -l force -d 'Skip confirmation prompts'
488
-
489
- # config subcommands
490
- complete -c kastell -n '__kastell_using_subcommand config' -a 'set get list reset validate'
491
-
492
- # ssh options
493
- complete -c kastell -n '__kastell_using_subcommand ssh' -s c -l command -d 'Execute a single command'
494
-
495
- # update options
496
- complete -c kastell -n '__kastell_using_subcommand update' -l all -d 'Update all servers'
497
- complete -c kastell -n '__kastell_using_subcommand update' -l dry-run -d 'Show commands without executing'
498
- complete -c kastell -n '__kastell_using_subcommand update' -l force -d 'Skip confirmation prompts'
499
-
500
- # restart options
501
- complete -c kastell -n '__kastell_using_subcommand restart' -l dry-run -d 'Show commands without executing'
502
- complete -c kastell -n '__kastell_using_subcommand restart' -l force -d 'Skip confirmation prompts'
503
-
504
- # logs options
505
- complete -c kastell -n '__kastell_using_subcommand logs' -s n -l lines -d 'Number of log lines'
506
- complete -c kastell -n '__kastell_using_subcommand logs' -s f -l follow -d 'Follow log output'
507
- complete -c kastell -n '__kastell_using_subcommand logs' -s s -l service -d 'Log service'
508
-
509
- # monitor options
510
- complete -c kastell -n '__kastell_using_subcommand monitor' -l containers -d 'Show Docker containers'
511
-
512
- # doctor options
513
- complete -c kastell -n '__kastell_using_subcommand doctor' -l check-tokens -d 'Validate API tokens'
514
- complete -c kastell -n '__kastell_using_subcommand doctor' -l fresh -d 'Force fresh SSH probe, skip cache'
515
- complete -c kastell -n '__kastell_using_subcommand doctor' -l json -d 'Output result as JSON'
516
- complete -c kastell -n '__kastell_using_subcommand doctor' -l fix -d 'Interactive fix mode'
517
- complete -c kastell -n '__kastell_using_subcommand doctor' -l force -d 'Skip confirmation prompts'
518
- complete -c kastell -n '__kastell_using_subcommand doctor' -l dry-run -d 'Show fix commands without executing'
519
-
520
- # firewall subcommands and options
521
- complete -c kastell -n '__kastell_using_subcommand firewall' -a 'setup add remove status'
522
- complete -c kastell -n '__kastell_using_subcommand firewall' -l port -d 'Port number'
523
- complete -c kastell -n '__kastell_using_subcommand firewall' -l protocol -d 'Protocol (tcp/udp)'
524
- complete -c kastell -n '__kastell_using_subcommand firewall' -l dry-run -d 'Show commands without executing'
525
- complete -c kastell -n '__kastell_using_subcommand firewall' -l force -d 'Skip confirmation prompts'
526
-
527
- # domain subcommands and options
528
- complete -c kastell -n '__kastell_using_subcommand domain' -a 'add check remove list info'
529
- complete -c kastell -n '__kastell_using_subcommand domain' -l domain -d 'Domain name'
530
- complete -c kastell -n '__kastell_using_subcommand domain' -l no-ssl -d 'Disable HTTPS'
531
- complete -c kastell -n '__kastell_using_subcommand domain' -l dry-run -d 'Show commands without executing'
532
-
533
- # secure subcommands and options
534
- complete -c kastell -n '__kastell_using_subcommand secure' -a 'setup status audit'
535
- complete -c kastell -n '__kastell_using_subcommand secure' -l port -d 'SSH port'
536
- complete -c kastell -n '__kastell_using_subcommand secure' -l dry-run -d 'Show commands without executing'
537
- complete -c kastell -n '__kastell_using_subcommand secure' -l force -d 'Skip confirmation prompts'
538
-
539
- # backup options
540
- complete -c kastell -n '__kastell_using_subcommand backup' -l dry-run -d 'Show commands without executing'
541
- complete -c kastell -n '__kastell_using_subcommand backup' -l all -d 'Backup all servers'
542
- complete -c kastell -n '__kastell_using_subcommand backup' -l force -d 'Skip confirmation prompts'
543
-
544
- # restore options
545
- complete -c kastell -n '__kastell_using_subcommand restore' -l backup -d 'Backup timestamp'
546
- complete -c kastell -n '__kastell_using_subcommand restore' -l dry-run -d 'Show commands without executing'
547
- complete -c kastell -n '__kastell_using_subcommand restore' -l force -d 'Skip confirmation prompts'
548
-
549
- # add options
550
- complete -c kastell -n '__kastell_using_subcommand add' -l provider -d 'Cloud provider'
551
- complete -c kastell -n '__kastell_using_subcommand add' -l ip -d 'Server IP address'
552
- complete -c kastell -n '__kastell_using_subcommand add' -l name -d 'Server name'
553
- complete -c kastell -n '__kastell_using_subcommand add' -l skip-verify -d 'Skip verification'
554
- complete -c kastell -n '__kastell_using_subcommand add' -l mode -d 'Server mode'
555
-
556
- # remove options
557
- complete -c kastell -n '__kastell_using_subcommand remove' -l dry-run -d 'Show commands without executing'
558
- complete -c kastell -n '__kastell_using_subcommand remove' -l force -d 'Skip confirmation prompts'
559
-
560
- # maintain options
561
- complete -c kastell -n '__kastell_using_subcommand maintain' -l skip-reboot -d 'Skip reboot step'
562
- complete -c kastell -n '__kastell_using_subcommand maintain' -l all -d 'Maintain all servers'
563
- complete -c kastell -n '__kastell_using_subcommand maintain' -l dry-run -d 'Show commands without executing'
564
- complete -c kastell -n '__kastell_using_subcommand maintain' -l force -d 'Skip confirmation prompts'
565
-
566
- # snapshot subcommands and options
567
- complete -c kastell -n '__kastell_using_subcommand snapshot' -a 'create list delete'
568
- complete -c kastell -n '__kastell_using_subcommand snapshot' -l all -d 'All servers'
569
- complete -c kastell -n '__kastell_using_subcommand snapshot' -l dry-run -d 'Show commands without executing'
570
- complete -c kastell -n '__kastell_using_subcommand snapshot' -l force -d 'Skip confirmation'
571
-
572
- # completions subarguments
573
- complete -c kastell -n '__kastell_using_subcommand completions' -a 'bash zsh fish'
574
-
575
- # guard subcommands and options
576
- complete -c kastell -n '__kastell_using_subcommand guard' -a 'start stop status'
577
- complete -c kastell -n '__kastell_using_subcommand guard' -l force -d 'Skip confirmation prompts'
578
-
579
- # lock options
580
- complete -c kastell -n '__kastell_using_subcommand lock' -l production -d 'Apply full production hardening profile'
581
- complete -c kastell -n '__kastell_using_subcommand lock' -l dry-run -d 'Show commands without executing'
582
- complete -c kastell -n '__kastell_using_subcommand lock' -l force -d 'Skip confirmation prompts'
583
-
584
- # audit options
585
- complete -c kastell -n '__kastell_using_subcommand audit' -l json -d 'Output results as JSON'
586
- complete -c kastell -n '__kastell_using_subcommand audit' -l badge -d 'Output SVG badge with score'
587
- complete -c kastell -n '__kastell_using_subcommand audit' -l report -d 'Generate report (html or md)'
588
- complete -c kastell -n '__kastell_using_subcommand audit' -l summary -d 'Compact dashboard summary'
589
- complete -c kastell -n '__kastell_using_subcommand audit' -l score-only -d 'Output only the score'
590
- complete -c kastell -n '__kastell_using_subcommand audit' -l fix -d 'Interactive fix mode'
591
- complete -c kastell -n '__kastell_using_subcommand audit' -l dry-run -d 'Show fix commands without executing'
592
- complete -c kastell -n '__kastell_using_subcommand audit' -l watch -d 'Watch mode'
593
- complete -c kastell -n '__kastell_using_subcommand audit' -l host -d 'Audit unregistered server'
594
- complete -c kastell -n '__kastell_using_subcommand audit' -l threshold -d 'Exit code 1 if below threshold'
595
- complete -c kastell -n '__kastell_using_subcommand audit' -l category -d 'Comma-separated categories'
596
- complete -c kastell -n '__kastell_using_subcommand audit' -l snapshot -d 'Save audit as snapshot'
597
- complete -c kastell -n '__kastell_using_subcommand audit' -l snapshots -d 'List saved snapshots'
598
- complete -c kastell -n '__kastell_using_subcommand audit' -l diff -d 'Compare two snapshots'
599
- complete -c kastell -n '__kastell_using_subcommand audit' -l compare -d 'Compare two servers'
600
- complete -c kastell -n '__kastell_using_subcommand audit' -l trend -d 'Show score trend over time'
601
- complete -c kastell -n '__kastell_using_subcommand audit' -l days -d 'Limit trend to N days'
602
-
603
- # evidence options
604
- complete -c kastell -n '__kastell_using_subcommand evidence' -l name -d 'Label for evidence directory'
605
- complete -c kastell -n '__kastell_using_subcommand evidence' -l output -d 'Override output directory'
606
- complete -c kastell -n '__kastell_using_subcommand evidence' -l lines -d 'Log lines to collect'
607
- complete -c kastell -n '__kastell_using_subcommand evidence' -l no-docker -d 'Skip Docker collection'
608
- complete -c kastell -n '__kastell_using_subcommand evidence' -l no-sysinfo -d 'Skip system info'
609
- complete -c kastell -n '__kastell_using_subcommand evidence' -l quiet -d 'Suppress spinner output'
610
- complete -c kastell -n '__kastell_using_subcommand evidence' -l force -d 'Overwrite existing evidence'
611
- complete -c kastell -n '__kastell_using_subcommand evidence' -l json -d 'Print manifest JSON'
612
-
613
- # fleet options
614
- complete -c kastell -n '__kastell_using_subcommand fleet' -l json -d 'Output machine-readable JSON'
615
- complete -c kastell -n '__kastell_using_subcommand fleet' -l sort -d 'Sort by score/name/provider'
616
-
617
- # notify subcommands and options
618
- complete -c kastell -n '__kastell_using_subcommand notify' -a 'add test'
619
- complete -c kastell -n '__kastell_using_subcommand notify' -l bot-token -d 'Telegram bot token'
620
- complete -c kastell -n '__kastell_using_subcommand notify' -l chat-id -d 'Telegram chat ID'
621
- complete -c kastell -n '__kastell_using_subcommand notify' -l webhook-url -d 'Discord or Slack webhook URL'
622
- complete -c kastell -n '__kastell_using_subcommand notify' -l force -d 'Skip interactive prompts'`;
430
+ return `# Generated by kastell -- fish completion script
431
+ # Save to ~/.config/fish/completions/kastell.fish
432
+
433
+ # Disable file completions by default
434
+ complete -c kastell -f
435
+
436
+ # Helper function: no subcommand entered yet
437
+ function __kastell_no_subcommand
438
+ set -l cmd (commandline -opc)
439
+ test (count $cmd) -eq 1
440
+ end
441
+
442
+ # Helper function: check current subcommand
443
+ function __kastell_using_subcommand
444
+ set -l cmd (commandline -opc)
445
+ test (count $cmd) -ge 2; and test $cmd[2] = $argv[1]
446
+ end
447
+
448
+ # Top-level commands
449
+ complete -c kastell -n '__kastell_no_subcommand' -a 'init' -d 'Deploy a new Coolify instance'
450
+ complete -c kastell -n '__kastell_no_subcommand' -a 'list' -d 'List all registered servers'
451
+ complete -c kastell -n '__kastell_no_subcommand' -a 'status' -d 'Check server and Coolify status'
452
+ complete -c kastell -n '__kastell_no_subcommand' -a 'destroy' -d 'Destroy a registered server'
453
+ complete -c kastell -n '__kastell_no_subcommand' -a 'config' -d 'Manage default configuration'
454
+ complete -c kastell -n '__kastell_no_subcommand' -a 'ssh' -d 'SSH into a registered server'
455
+ complete -c kastell -n '__kastell_no_subcommand' -a 'update' -d 'Update Coolify on a server'
456
+ complete -c kastell -n '__kastell_no_subcommand' -a 'restart' -d 'Restart a registered server'
457
+ complete -c kastell -n '__kastell_no_subcommand' -a 'logs' -d 'View server logs'
458
+ complete -c kastell -n '__kastell_no_subcommand' -a 'monitor' -d 'Show server resource usage'
459
+ complete -c kastell -n '__kastell_no_subcommand' -a 'health' -d 'Check health of servers'
460
+ complete -c kastell -n '__kastell_no_subcommand' -a 'doctor' -d 'Check local environment'
461
+ complete -c kastell -n '__kastell_no_subcommand' -a 'firewall' -d 'Manage server firewall'
462
+ complete -c kastell -n '__kastell_no_subcommand' -a 'domain' -d 'Manage server domain and SSL'
463
+ complete -c kastell -n '__kastell_no_subcommand' -a 'secure' -d 'Manage server security'
464
+ complete -c kastell -n '__kastell_no_subcommand' -a 'backup' -d 'Backup Coolify database'
465
+ complete -c kastell -n '__kastell_no_subcommand' -a 'restore' -d 'Restore from a backup'
466
+ complete -c kastell -n '__kastell_no_subcommand' -a 'export' -d 'Export server list to JSON'
467
+ complete -c kastell -n '__kastell_no_subcommand' -a 'import' -d 'Import servers from JSON'
468
+ complete -c kastell -n '__kastell_no_subcommand' -a 'add' -d 'Add an existing server'
469
+ complete -c kastell -n '__kastell_no_subcommand' -a 'remove' -d 'Remove a server from config'
470
+ complete -c kastell -n '__kastell_no_subcommand' -a 'maintain' -d 'Run full maintenance cycle'
471
+ complete -c kastell -n '__kastell_no_subcommand' -a 'snapshot' -d 'Manage server snapshots'
472
+ complete -c kastell -n '__kastell_no_subcommand' -a 'completions' -d 'Generate shell completions'
473
+ complete -c kastell -n '__kastell_no_subcommand' -a 'guard' -d 'Manage guard daemon'
474
+ complete -c kastell -n '__kastell_no_subcommand' -a 'lock' -d 'Harden server to production standard'
475
+ complete -c kastell -n '__kastell_no_subcommand' -a 'audit' -d 'Run a security audit'
476
+ complete -c kastell -n '__kastell_no_subcommand' -a 'evidence' -d 'Collect forensic evidence'
477
+ complete -c kastell -n '__kastell_no_subcommand' -a 'fleet' -d 'Show fleet health and security'
478
+ complete -c kastell -n '__kastell_no_subcommand' -a 'notify' -d 'Manage notification channels'
479
+ complete -c kastell -n '__kastell_no_subcommand' -a 'plugin' -d 'Manage kastell plugins'
480
+
481
+ # init options
482
+ complete -c kastell -n '__kastell_using_subcommand init' -l provider -d 'Cloud provider'
483
+ complete -c kastell -n '__kastell_using_subcommand init' -l token -d 'API token'
484
+ complete -c kastell -n '__kastell_using_subcommand init' -l token-stdin -d 'Read token from stdin'
485
+ complete -c kastell -n '__kastell_using_subcommand init' -l region -d 'Server region'
486
+ complete -c kastell -n '__kastell_using_subcommand init' -l size -d 'Server size'
487
+ complete -c kastell -n '__kastell_using_subcommand init' -l name -d 'Server name'
488
+ complete -c kastell -n '__kastell_using_subcommand init' -l full-setup -d 'Auto-configure firewall and SSH'
489
+ complete -c kastell -n '__kastell_using_subcommand init' -l config -d 'Config file path'
490
+ complete -c kastell -n '__kastell_using_subcommand init' -l template -d 'Predefined template'
491
+ complete -c kastell -n '__kastell_using_subcommand init' -l no-open -d 'Do not open browser'
492
+ complete -c kastell -n '__kastell_using_subcommand init' -l mode -d 'Server mode'
493
+ complete -c kastell -n '__kastell_using_subcommand init' -l dry-run -d 'Show commands without executing'
494
+
495
+ # status options
496
+ complete -c kastell -n '__kastell_using_subcommand status' -l all -d 'Check all servers'
497
+ complete -c kastell -n '__kastell_using_subcommand status' -l autostart -d 'Restart Coolify if down'
498
+
499
+ # destroy options
500
+ complete -c kastell -n '__kastell_using_subcommand destroy' -l dry-run -d 'Show commands without executing'
501
+ complete -c kastell -n '__kastell_using_subcommand destroy' -l force -d 'Skip confirmation prompts'
502
+
503
+ # config subcommands
504
+ complete -c kastell -n '__kastell_using_subcommand config' -a 'set get list reset validate'
505
+
506
+ # ssh options
507
+ complete -c kastell -n '__kastell_using_subcommand ssh' -s c -l command -d 'Execute a single command'
508
+
509
+ # update options
510
+ complete -c kastell -n '__kastell_using_subcommand update' -l all -d 'Update all servers'
511
+ complete -c kastell -n '__kastell_using_subcommand update' -l dry-run -d 'Show commands without executing'
512
+ complete -c kastell -n '__kastell_using_subcommand update' -l force -d 'Skip confirmation prompts'
513
+
514
+ # restart options
515
+ complete -c kastell -n '__kastell_using_subcommand restart' -l dry-run -d 'Show commands without executing'
516
+ complete -c kastell -n '__kastell_using_subcommand restart' -l force -d 'Skip confirmation prompts'
517
+
518
+ # logs options
519
+ complete -c kastell -n '__kastell_using_subcommand logs' -s n -l lines -d 'Number of log lines'
520
+ complete -c kastell -n '__kastell_using_subcommand logs' -s f -l follow -d 'Follow log output'
521
+ complete -c kastell -n '__kastell_using_subcommand logs' -s s -l service -d 'Log service'
522
+
523
+ # monitor options
524
+ complete -c kastell -n '__kastell_using_subcommand monitor' -l containers -d 'Show Docker containers'
525
+
526
+ # doctor options
527
+ complete -c kastell -n '__kastell_using_subcommand doctor' -l check-tokens -d 'Validate API tokens'
528
+ complete -c kastell -n '__kastell_using_subcommand doctor' -l fresh -d 'Force fresh SSH probe, skip cache'
529
+ complete -c kastell -n '__kastell_using_subcommand doctor' -l json -d 'Output result as JSON'
530
+ complete -c kastell -n '__kastell_using_subcommand doctor' -l fix -d 'Interactive fix mode'
531
+ complete -c kastell -n '__kastell_using_subcommand doctor' -l force -d 'Skip confirmation prompts'
532
+ complete -c kastell -n '__kastell_using_subcommand doctor' -l dry-run -d 'Show fix commands without executing'
533
+
534
+ # firewall subcommands and options
535
+ complete -c kastell -n '__kastell_using_subcommand firewall' -a 'setup add remove status'
536
+ complete -c kastell -n '__kastell_using_subcommand firewall' -l port -d 'Port number'
537
+ complete -c kastell -n '__kastell_using_subcommand firewall' -l protocol -d 'Protocol (tcp/udp)'
538
+ complete -c kastell -n '__kastell_using_subcommand firewall' -l dry-run -d 'Show commands without executing'
539
+ complete -c kastell -n '__kastell_using_subcommand firewall' -l force -d 'Skip confirmation prompts'
540
+
541
+ # domain subcommands and options
542
+ complete -c kastell -n '__kastell_using_subcommand domain' -a 'add check remove list info'
543
+ complete -c kastell -n '__kastell_using_subcommand domain' -l domain -d 'Domain name'
544
+ complete -c kastell -n '__kastell_using_subcommand domain' -l no-ssl -d 'Disable HTTPS'
545
+ complete -c kastell -n '__kastell_using_subcommand domain' -l dry-run -d 'Show commands without executing'
546
+
547
+ # secure subcommands and options
548
+ complete -c kastell -n '__kastell_using_subcommand secure' -a 'setup status audit'
549
+ complete -c kastell -n '__kastell_using_subcommand secure' -l port -d 'SSH port'
550
+ complete -c kastell -n '__kastell_using_subcommand secure' -l dry-run -d 'Show commands without executing'
551
+ complete -c kastell -n '__kastell_using_subcommand secure' -l force -d 'Skip confirmation prompts'
552
+
553
+ # backup options
554
+ complete -c kastell -n '__kastell_using_subcommand backup' -l dry-run -d 'Show commands without executing'
555
+ complete -c kastell -n '__kastell_using_subcommand backup' -l all -d 'Backup all servers'
556
+ complete -c kastell -n '__kastell_using_subcommand backup' -l force -d 'Skip confirmation prompts'
557
+
558
+ # restore options
559
+ complete -c kastell -n '__kastell_using_subcommand restore' -l backup -d 'Backup timestamp'
560
+ complete -c kastell -n '__kastell_using_subcommand restore' -l dry-run -d 'Show commands without executing'
561
+ complete -c kastell -n '__kastell_using_subcommand restore' -l force -d 'Skip confirmation prompts'
562
+
563
+ # add options
564
+ complete -c kastell -n '__kastell_using_subcommand add' -l provider -d 'Cloud provider'
565
+ complete -c kastell -n '__kastell_using_subcommand add' -l ip -d 'Server IP address'
566
+ complete -c kastell -n '__kastell_using_subcommand add' -l name -d 'Server name'
567
+ complete -c kastell -n '__kastell_using_subcommand add' -l skip-verify -d 'Skip verification'
568
+ complete -c kastell -n '__kastell_using_subcommand add' -l mode -d 'Server mode'
569
+
570
+ # remove options
571
+ complete -c kastell -n '__kastell_using_subcommand remove' -l dry-run -d 'Show commands without executing'
572
+ complete -c kastell -n '__kastell_using_subcommand remove' -l force -d 'Skip confirmation prompts'
573
+
574
+ # maintain options
575
+ complete -c kastell -n '__kastell_using_subcommand maintain' -l skip-reboot -d 'Skip reboot step'
576
+ complete -c kastell -n '__kastell_using_subcommand maintain' -l all -d 'Maintain all servers'
577
+ complete -c kastell -n '__kastell_using_subcommand maintain' -l dry-run -d 'Show commands without executing'
578
+ complete -c kastell -n '__kastell_using_subcommand maintain' -l force -d 'Skip confirmation prompts'
579
+
580
+ # snapshot subcommands and options
581
+ complete -c kastell -n '__kastell_using_subcommand snapshot' -a 'create list delete'
582
+ complete -c kastell -n '__kastell_using_subcommand snapshot' -l all -d 'All servers'
583
+ complete -c kastell -n '__kastell_using_subcommand snapshot' -l dry-run -d 'Show commands without executing'
584
+ complete -c kastell -n '__kastell_using_subcommand snapshot' -l force -d 'Skip confirmation'
585
+
586
+ # completions subarguments
587
+ complete -c kastell -n '__kastell_using_subcommand completions' -a 'bash zsh fish'
588
+
589
+ # guard subcommands and options
590
+ complete -c kastell -n '__kastell_using_subcommand guard' -a 'start stop status'
591
+ complete -c kastell -n '__kastell_using_subcommand guard' -l force -d 'Skip confirmation prompts'
592
+
593
+ # lock options
594
+ complete -c kastell -n '__kastell_using_subcommand lock' -l production -d 'Apply full production hardening profile'
595
+ complete -c kastell -n '__kastell_using_subcommand lock' -l dry-run -d 'Show commands without executing'
596
+ complete -c kastell -n '__kastell_using_subcommand lock' -l force -d 'Skip confirmation prompts'
597
+
598
+ # audit options
599
+ complete -c kastell -n '__kastell_using_subcommand audit' -l json -d 'Output results as JSON'
600
+ complete -c kastell -n '__kastell_using_subcommand audit' -l badge -d 'Output SVG badge with score'
601
+ complete -c kastell -n '__kastell_using_subcommand audit' -l report -d 'Generate report (html or md)'
602
+ complete -c kastell -n '__kastell_using_subcommand audit' -l summary -d 'Compact dashboard summary'
603
+ complete -c kastell -n '__kastell_using_subcommand audit' -l score-only -d 'Output only the score'
604
+ complete -c kastell -n '__kastell_using_subcommand audit' -l fix -d 'Interactive fix mode'
605
+ complete -c kastell -n '__kastell_using_subcommand audit' -l dry-run -d 'Show fix commands without executing'
606
+ complete -c kastell -n '__kastell_using_subcommand audit' -l watch -d 'Watch mode'
607
+ complete -c kastell -n '__kastell_using_subcommand audit' -l host -d 'Audit unregistered server'
608
+ complete -c kastell -n '__kastell_using_subcommand audit' -l threshold -d 'Exit code 1 if below threshold'
609
+ complete -c kastell -n '__kastell_using_subcommand audit' -l category -d 'Comma-separated categories'
610
+ complete -c kastell -n '__kastell_using_subcommand audit' -l snapshot -d 'Save audit as snapshot'
611
+ complete -c kastell -n '__kastell_using_subcommand audit' -l snapshots -d 'List saved snapshots'
612
+ complete -c kastell -n '__kastell_using_subcommand audit' -l diff -d 'Compare two snapshots'
613
+ complete -c kastell -n '__kastell_using_subcommand audit' -l compare -d 'Compare two servers'
614
+ complete -c kastell -n '__kastell_using_subcommand audit' -l trend -d 'Show score trend over time'
615
+ complete -c kastell -n '__kastell_using_subcommand audit' -l days -d 'Limit trend to N days'
616
+
617
+ # evidence options
618
+ complete -c kastell -n '__kastell_using_subcommand evidence' -l name -d 'Label for evidence directory'
619
+ complete -c kastell -n '__kastell_using_subcommand evidence' -l output -d 'Override output directory'
620
+ complete -c kastell -n '__kastell_using_subcommand evidence' -l lines -d 'Log lines to collect'
621
+ complete -c kastell -n '__kastell_using_subcommand evidence' -l no-docker -d 'Skip Docker collection'
622
+ complete -c kastell -n '__kastell_using_subcommand evidence' -l no-sysinfo -d 'Skip system info'
623
+ complete -c kastell -n '__kastell_using_subcommand evidence' -l quiet -d 'Suppress spinner output'
624
+ complete -c kastell -n '__kastell_using_subcommand evidence' -l force -d 'Overwrite existing evidence'
625
+ complete -c kastell -n '__kastell_using_subcommand evidence' -l json -d 'Print manifest JSON'
626
+
627
+ # fleet options
628
+ complete -c kastell -n '__kastell_using_subcommand fleet' -l json -d 'Output machine-readable JSON'
629
+ complete -c kastell -n '__kastell_using_subcommand fleet' -l sort -d 'Sort by score/name/provider'
630
+
631
+ # notify subcommands and options
632
+ complete -c kastell -n '__kastell_using_subcommand notify' -a 'add test'
633
+ complete -c kastell -n '__kastell_using_subcommand notify' -l bot-token -d 'Telegram bot token'
634
+ complete -c kastell -n '__kastell_using_subcommand notify' -l chat-id -d 'Telegram chat ID'
635
+ complete -c kastell -n '__kastell_using_subcommand notify' -l webhook-url -d 'Discord or Slack webhook URL'
636
+ complete -c kastell -n '__kastell_using_subcommand notify' -l force -d 'Skip interactive prompts'
637
+
638
+ # plugin subcommands and options
639
+ complete -c kastell -n '__kastell_using_subcommand plugin' -a 'install' -d 'Install a plugin from npm registry'
640
+ complete -c kastell -n '__kastell_using_subcommand plugin' -a 'remove' -d 'Remove an installed plugin'
641
+ complete -c kastell -n '__kastell_using_subcommand plugin' -a 'list' -d 'List installed plugins'
642
+ complete -c kastell -n '__kastell_using_subcommand plugin' -a 'validate' -d 'Validate plugin manifest'
643
+ complete -c kastell -n '__kastell_using_subcommand plugin' -l force -d 'Skip confirmation prompt'
644
+ complete -c kastell -n '__kastell_using_subcommand plugin' -l ver -d 'Specific version to install' -r`;
623
645
  }
624
646
  //# sourceMappingURL=completions.js.map