kastell 2.2.0 → 2.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 (292) hide show
  1. package/.claude-plugin/marketplace.json +18 -0
  2. package/.claude-plugin/plugin.json +39 -0
  3. package/CHANGELOG.md +1266 -1266
  4. package/LICENSE +201 -201
  5. package/NOTICE +5 -5
  6. package/bin/kastell +2 -2
  7. package/bin/kastell-mcp +5 -5
  8. package/dist/adapters/coolify.js +92 -92
  9. package/dist/adapters/dokploy.js +99 -99
  10. package/dist/adapters/shared.d.ts.map +1 -1
  11. package/dist/adapters/shared.js +4 -2
  12. package/dist/adapters/shared.js.map +1 -1
  13. package/dist/commands/add.d.ts.map +1 -1
  14. package/dist/commands/add.js +6 -9
  15. package/dist/commands/add.js.map +1 -1
  16. package/dist/commands/auth.d.ts.map +1 -1
  17. package/dist/commands/auth.js +12 -12
  18. package/dist/commands/auth.js.map +1 -1
  19. package/dist/commands/doctor.js +1 -1
  20. package/dist/commands/doctor.js.map +1 -1
  21. package/dist/commands/evidence.d.ts.map +1 -1
  22. package/dist/commands/evidence.js +8 -9
  23. package/dist/commands/evidence.js.map +1 -1
  24. package/dist/commands/fix.js +3 -3
  25. package/dist/commands/fix.js.map +1 -1
  26. package/dist/commands/init.d.ts.map +1 -1
  27. package/dist/commands/init.js +4 -7
  28. package/dist/commands/init.js.map +1 -1
  29. package/dist/commands/interactive/backup-maintenance.d.ts +8 -0
  30. package/dist/commands/interactive/backup-maintenance.d.ts.map +1 -0
  31. package/dist/commands/interactive/backup-maintenance.js +120 -0
  32. package/dist/commands/interactive/backup-maintenance.js.map +1 -0
  33. package/dist/commands/interactive/index.d.ts +4 -0
  34. package/dist/commands/interactive/index.d.ts.map +1 -0
  35. package/dist/commands/interactive/index.js +94 -0
  36. package/dist/commands/interactive/index.js.map +1 -0
  37. package/dist/commands/interactive/menu.d.ts +23 -0
  38. package/dist/commands/interactive/menu.d.ts.map +1 -0
  39. package/dist/commands/interactive/menu.js +121 -0
  40. package/dist/commands/interactive/menu.js.map +1 -0
  41. package/dist/commands/interactive/monitoring.d.ts +5 -0
  42. package/dist/commands/interactive/monitoring.d.ts.map +1 -0
  43. package/dist/commands/interactive/monitoring.js +96 -0
  44. package/dist/commands/interactive/monitoring.js.map +1 -0
  45. package/dist/commands/interactive/plugins.d.ts +2 -0
  46. package/dist/commands/interactive/plugins.d.ts.map +1 -0
  47. package/dist/commands/interactive/plugins.js +30 -0
  48. package/dist/commands/interactive/plugins.js.map +1 -0
  49. package/dist/commands/interactive/security.d.ts +9 -0
  50. package/dist/commands/interactive/security.d.ts.map +1 -0
  51. package/dist/commands/interactive/security.js +535 -0
  52. package/dist/commands/interactive/security.js.map +1 -0
  53. package/dist/commands/interactive/server-management.d.ts +5 -0
  54. package/dist/commands/interactive/server-management.d.ts.map +1 -0
  55. package/dist/commands/interactive/server-management.js +79 -0
  56. package/dist/commands/interactive/server-management.js.map +1 -0
  57. package/dist/commands/interactive/shared.d.ts +12 -0
  58. package/dist/commands/interactive/shared.d.ts.map +1 -0
  59. package/dist/commands/interactive/shared.js +30 -0
  60. package/dist/commands/interactive/shared.js.map +1 -0
  61. package/dist/commands/lock.js +1 -1
  62. package/dist/commands/lock.js.map +1 -1
  63. package/dist/commands/regression.d.ts.map +1 -1
  64. package/dist/commands/regression.js +1 -2
  65. package/dist/commands/regression.js.map +1 -1
  66. package/dist/commands/restart.d.ts.map +1 -1
  67. package/dist/commands/restart.js +3 -2
  68. package/dist/commands/restart.js.map +1 -1
  69. package/dist/commands/schedule.js +2 -2
  70. package/dist/commands/schedule.js.map +1 -1
  71. package/dist/core/audit/formatters/badge.js +20 -20
  72. package/dist/core/backup.d.ts.map +1 -1
  73. package/dist/core/backup.js +10 -5
  74. package/dist/core/backup.js.map +1 -1
  75. package/dist/core/completions.js +631 -631
  76. package/dist/core/deploy.d.ts.map +1 -1
  77. package/dist/core/deploy.js +7 -4
  78. package/dist/core/deploy.js.map +1 -1
  79. package/dist/core/lock/auth.d.ts +7 -0
  80. package/dist/core/lock/auth.d.ts.map +1 -0
  81. package/dist/core/lock/auth.js +59 -0
  82. package/dist/core/lock/auth.js.map +1 -0
  83. package/dist/core/lock/docker.d.ts +4 -0
  84. package/dist/core/lock/docker.d.ts.map +1 -0
  85. package/dist/core/lock/docker.js +28 -0
  86. package/dist/core/lock/docker.js.map +1 -0
  87. package/dist/core/lock/index.d.ts +11 -0
  88. package/dist/core/lock/index.d.ts.map +1 -0
  89. package/dist/core/lock/index.js +247 -0
  90. package/dist/core/lock/index.js.map +1 -0
  91. package/dist/core/lock/monitoring.d.ts +4 -0
  92. package/dist/core/lock/monitoring.d.ts.map +1 -0
  93. package/dist/core/lock/monitoring.js +55 -0
  94. package/dist/core/lock/monitoring.js.map +1 -0
  95. package/dist/core/lock/network.d.ts +6 -0
  96. package/dist/core/lock/network.d.ts.map +1 -0
  97. package/dist/core/lock/network.js +59 -0
  98. package/dist/core/lock/network.js.map +1 -0
  99. package/dist/core/lock/ssh.d.ts +5 -0
  100. package/dist/core/lock/ssh.d.ts.map +1 -0
  101. package/dist/core/lock/ssh.js +49 -0
  102. package/dist/core/lock/ssh.js.map +1 -0
  103. package/dist/core/lock/system.d.ts +9 -0
  104. package/dist/core/lock/system.d.ts.map +1 -0
  105. package/dist/core/lock/system.js +80 -0
  106. package/dist/core/lock/system.js.map +1 -0
  107. package/dist/core/lock/types.d.ts +41 -0
  108. package/dist/core/lock/types.d.ts.map +1 -0
  109. package/dist/core/lock/types.js +2 -0
  110. package/dist/core/lock/types.js.map +1 -0
  111. package/dist/core/maintain.d.ts.map +1 -1
  112. package/dist/core/maintain.js +3 -1
  113. package/dist/core/maintain.js.map +1 -1
  114. package/dist/core/manage.d.ts.map +1 -1
  115. package/dist/core/manage.js +5 -3
  116. package/dist/core/manage.js.map +1 -1
  117. package/dist/core/notifyStore.d.ts.map +1 -1
  118. package/dist/core/notifyStore.js +3 -1
  119. package/dist/core/notifyStore.js.map +1 -1
  120. package/dist/core/provision.d.ts.map +1 -1
  121. package/dist/core/provision.js +9 -4
  122. package/dist/core/provision.js.map +1 -1
  123. package/dist/core/scheduleManager.d.ts.map +1 -1
  124. package/dist/core/scheduleManager.js +5 -2
  125. package/dist/core/scheduleManager.js.map +1 -1
  126. package/dist/index.js +1 -1
  127. package/dist/index.js.map +1 -1
  128. package/dist/mcp/schemas/audit.d.ts +34 -0
  129. package/dist/mcp/schemas/audit.d.ts.map +1 -0
  130. package/dist/mcp/schemas/audit.js +23 -0
  131. package/dist/mcp/schemas/audit.js.map +1 -0
  132. package/dist/mcp/schemas/common.d.ts +16 -0
  133. package/dist/mcp/schemas/common.d.ts.map +1 -0
  134. package/dist/mcp/schemas/common.js +14 -0
  135. package/dist/mcp/schemas/common.js.map +1 -0
  136. package/dist/mcp/schemas/health.d.ts +14 -0
  137. package/dist/mcp/schemas/health.d.ts.map +1 -0
  138. package/dist/mcp/schemas/health.js +13 -0
  139. package/dist/mcp/schemas/health.js.map +1 -0
  140. package/dist/mcp/schemas/index.d.ts +5 -0
  141. package/dist/mcp/schemas/index.d.ts.map +1 -0
  142. package/dist/mcp/schemas/index.js +5 -0
  143. package/dist/mcp/schemas/index.js.map +1 -0
  144. package/dist/mcp/schemas/server.d.ts +18 -0
  145. package/dist/mcp/schemas/server.d.ts.map +1 -0
  146. package/dist/mcp/schemas/server.js +16 -0
  147. package/dist/mcp/schemas/server.js.map +1 -0
  148. package/dist/mcp/server.d.ts.map +1 -1
  149. package/dist/mcp/server.js +56 -39
  150. package/dist/mcp/server.js.map +1 -1
  151. package/dist/mcp/tools/serverAudit.d.ts +63 -1
  152. package/dist/mcp/tools/serverAudit.d.ts.map +1 -1
  153. package/dist/mcp/tools/serverAudit.js +63 -6
  154. package/dist/mcp/tools/serverAudit.js.map +1 -1
  155. package/dist/mcp/tools/serverBackup.d.ts +100 -2
  156. package/dist/mcp/tools/serverBackup.d.ts.map +1 -1
  157. package/dist/mcp/tools/serverBackup.handlers.d.ts.map +1 -1
  158. package/dist/mcp/tools/serverBackup.handlers.js +9 -0
  159. package/dist/mcp/tools/serverBackup.handlers.js.map +1 -1
  160. package/dist/mcp/tools/serverBackup.js +74 -0
  161. package/dist/mcp/tools/serverBackup.js.map +1 -1
  162. package/dist/mcp/tools/serverCompare.d.ts +33 -0
  163. package/dist/mcp/tools/serverCompare.d.ts.map +1 -1
  164. package/dist/mcp/tools/serverCompare.js +45 -2
  165. package/dist/mcp/tools/serverCompare.js.map +1 -1
  166. package/dist/mcp/tools/serverDoctor.d.ts +14 -0
  167. package/dist/mcp/tools/serverDoctor.d.ts.map +1 -1
  168. package/dist/mcp/tools/serverDoctor.js +15 -0
  169. package/dist/mcp/tools/serverDoctor.js.map +1 -1
  170. package/dist/mcp/tools/serverEvidence.d.ts +13 -0
  171. package/dist/mcp/tools/serverEvidence.d.ts.map +1 -1
  172. package/dist/mcp/tools/serverEvidence.js +17 -2
  173. package/dist/mcp/tools/serverEvidence.js.map +1 -1
  174. package/dist/mcp/tools/serverExplain.d.ts +17 -0
  175. package/dist/mcp/tools/serverExplain.d.ts.map +1 -1
  176. package/dist/mcp/tools/serverExplain.js +33 -1
  177. package/dist/mcp/tools/serverExplain.js.map +1 -1
  178. package/dist/mcp/tools/serverFix.d.ts +78 -0
  179. package/dist/mcp/tools/serverFix.d.ts.map +1 -1
  180. package/dist/mcp/tools/serverFix.js +84 -0
  181. package/dist/mcp/tools/serverFix.js.map +1 -1
  182. package/dist/mcp/tools/serverFleet.d.ts +24 -1
  183. package/dist/mcp/tools/serverFleet.d.ts.map +1 -1
  184. package/dist/mcp/tools/serverFleet.js +24 -1
  185. package/dist/mcp/tools/serverFleet.js.map +1 -1
  186. package/dist/mcp/tools/serverGuard.d.ts +12 -0
  187. package/dist/mcp/tools/serverGuard.d.ts.map +1 -1
  188. package/dist/mcp/tools/serverGuard.js +16 -0
  189. package/dist/mcp/tools/serverGuard.js.map +1 -1
  190. package/dist/mcp/tools/serverInfo.d.ts +77 -1
  191. package/dist/mcp/tools/serverInfo.d.ts.map +1 -1
  192. package/dist/mcp/tools/serverInfo.js +77 -4
  193. package/dist/mcp/tools/serverInfo.js.map +1 -1
  194. package/dist/mcp/tools/serverLock.d.ts +10 -0
  195. package/dist/mcp/tools/serverLock.d.ts.map +1 -1
  196. package/dist/mcp/tools/serverLock.js +15 -3
  197. package/dist/mcp/tools/serverLock.js.map +1 -1
  198. package/dist/mcp/tools/serverLogs.d.ts +43 -0
  199. package/dist/mcp/tools/serverLogs.d.ts.map +1 -1
  200. package/dist/mcp/tools/serverLogs.js +28 -0
  201. package/dist/mcp/tools/serverLogs.js.map +1 -1
  202. package/dist/mcp/tools/serverMaintain.d.ts +47 -0
  203. package/dist/mcp/tools/serverMaintain.d.ts.map +1 -1
  204. package/dist/mcp/tools/serverMaintain.js +75 -41
  205. package/dist/mcp/tools/serverMaintain.js.map +1 -1
  206. package/dist/mcp/tools/serverManage.d.ts +50 -0
  207. package/dist/mcp/tools/serverManage.d.ts.map +1 -1
  208. package/dist/mcp/tools/serverManage.js +49 -0
  209. package/dist/mcp/tools/serverManage.js.map +1 -1
  210. package/dist/mcp/tools/serverPlugin.d.ts +18 -0
  211. package/dist/mcp/tools/serverPlugin.d.ts.map +1 -1
  212. package/dist/mcp/tools/serverPlugin.js +26 -1
  213. package/dist/mcp/tools/serverPlugin.js.map +1 -1
  214. package/dist/mcp/tools/serverProvision.d.ts +22 -0
  215. package/dist/mcp/tools/serverProvision.d.ts.map +1 -1
  216. package/dist/mcp/tools/serverProvision.js +22 -2
  217. package/dist/mcp/tools/serverProvision.js.map +1 -1
  218. package/dist/mcp/tools/serverSecure.d.ts +120 -0
  219. package/dist/mcp/tools/serverSecure.d.ts.map +1 -1
  220. package/dist/mcp/tools/serverSecure.handlers.d.ts.map +1 -1
  221. package/dist/mcp/tools/serverSecure.handlers.js +39 -98
  222. package/dist/mcp/tools/serverSecure.handlers.js.map +1 -1
  223. package/dist/mcp/tools/serverSecure.js +101 -0
  224. package/dist/mcp/tools/serverSecure.js.map +1 -1
  225. package/dist/mcp/utils.d.ts +1 -0
  226. package/dist/mcp/utils.d.ts.map +1 -1
  227. package/dist/mcp/utils.js +5 -1
  228. package/dist/mcp/utils.js.map +1 -1
  229. package/dist/plugin/registry.d.ts.map +1 -1
  230. package/dist/plugin/registry.js +5 -3
  231. package/dist/plugin/registry.js.map +1 -1
  232. package/dist/providers/linode.d.ts +1 -0
  233. package/dist/providers/linode.d.ts.map +1 -1
  234. package/dist/providers/linode.js +4 -0
  235. package/dist/providers/linode.js.map +1 -1
  236. package/dist/utils/cloudInit.js +58 -58
  237. package/dist/utils/config.d.ts +3 -0
  238. package/dist/utils/config.d.ts.map +1 -1
  239. package/dist/utils/config.js +11 -6
  240. package/dist/utils/config.js.map +1 -1
  241. package/dist/utils/encryption.d.ts.map +1 -1
  242. package/dist/utils/encryption.js +4 -1
  243. package/dist/utils/encryption.js.map +1 -1
  244. package/dist/utils/migration.d.ts.map +1 -1
  245. package/dist/utils/migration.js +25 -14
  246. package/dist/utils/migration.js.map +1 -1
  247. package/dist/utils/safeMode.d.ts.map +1 -1
  248. package/dist/utils/safeMode.js +3 -2
  249. package/dist/utils/safeMode.js.map +1 -1
  250. package/dist/utils/securityLogger.d.ts.map +1 -1
  251. package/dist/utils/securityLogger.js +7 -3
  252. package/dist/utils/securityLogger.js.map +1 -1
  253. package/kastell-plugin/.claude-plugin/plugin.json +20 -0
  254. package/kastell-plugin/.mcp.json +8 -0
  255. package/kastell-plugin/README.md +113 -0
  256. package/kastell-plugin/agents/.gitkeep +0 -0
  257. package/kastell-plugin/agents/kastell-auditor.md +77 -0
  258. package/kastell-plugin/agents/scripts/bucket_mapper.sh +101 -0
  259. package/kastell-plugin/agents/scripts/trend_report.sh +91 -0
  260. package/kastell-plugin/hooks/destroy-block.cjs +31 -0
  261. package/kastell-plugin/hooks/hooks.json +57 -0
  262. package/kastell-plugin/hooks/pre-commit-audit-guard.cjs +75 -0
  263. package/kastell-plugin/hooks/session-audit.cjs +86 -0
  264. package/kastell-plugin/hooks/session-log.cjs +56 -0
  265. package/kastell-plugin/hooks/stop-quality-check.cjs +72 -0
  266. package/kastell-plugin/skills/.gitkeep +0 -0
  267. package/kastell-plugin/skills/kastell-careful/SKILL.md +64 -0
  268. package/kastell-plugin/skills/kastell-ops/SKILL.md +139 -0
  269. package/kastell-plugin/skills/kastell-ops/references/commands.md +45 -0
  270. package/kastell-plugin/skills/kastell-ops/references/mcp-tools.md +50 -0
  271. package/kastell-plugin/skills/kastell-ops/references/patterns.md +145 -0
  272. package/kastell-plugin/skills/kastell-ops/references/pitfalls.md +136 -0
  273. package/kastell-plugin/skills/kastell-ops/scripts/check_coverage.sh +101 -0
  274. package/kastell-plugin/skills/kastell-ops/scripts/fleet_report.sh +73 -0
  275. package/kastell-plugin/skills/kastell-ops/scripts/parse_audit.sh +76 -0
  276. package/kastell-plugin/skills/kastell-research/SKILL.md +90 -0
  277. package/kastell-plugin/skills/kastell-scaffold/SKILL.md +104 -0
  278. package/kastell-plugin/skills/kastell-scaffold/references/template-audit-check.md +150 -0
  279. package/kastell-plugin/skills/kastell-scaffold/references/template-command.md +80 -0
  280. package/kastell-plugin/skills/kastell-scaffold/references/template-mcp-tool.md +72 -0
  281. package/kastell-plugin/skills/kastell-scaffold/references/template-provider.md +67 -0
  282. package/kastell-plugin/skills/kastell-scaffold/scripts/scaffold.sh +180 -0
  283. package/kastell-plugin/skills/kastell-scaffold/templates/check-test.ts.tpl +27 -0
  284. package/kastell-plugin/skills/kastell-scaffold/templates/check.ts.tpl +50 -0
  285. package/kastell-plugin/skills/kastell-scaffold/templates/command-core.ts.tpl +18 -0
  286. package/kastell-plugin/skills/kastell-scaffold/templates/command-test.ts.tpl +17 -0
  287. package/kastell-plugin/skills/kastell-scaffold/templates/command.ts.tpl +25 -0
  288. package/kastell-plugin/skills/kastell-scaffold/templates/mcp-tool-test.ts.tpl +30 -0
  289. package/kastell-plugin/skills/kastell-scaffold/templates/mcp-tool.ts.tpl +29 -0
  290. package/kastell-plugin/skills/kastell-scaffold/templates/provider-test.ts.tpl +34 -0
  291. package/kastell-plugin/skills/kastell-scaffold/templates/provider.ts.tpl +32 -0
  292. package/package.json +122 -115
@@ -0,0 +1,535 @@
1
+ import inquirer from "inquirer";
2
+ import { promptList, validateRequired, validateScore, validateColonPair } from "./shared.js";
3
+ import { listAllProfileNames } from "../../core/audit/profiles.js";
4
+ import { isValidPort } from "../../core/firewall.js";
5
+ export async function promptFirewall() {
6
+ const sub = await promptList("Firewall action:", [
7
+ { name: "Show current rules", value: "status" },
8
+ { name: "Initial firewall setup", value: "setup" },
9
+ { name: "Add a port rule", value: "add" },
10
+ { name: "Remove a port rule", value: "remove" },
11
+ ]);
12
+ if (!sub)
13
+ return null;
14
+ if (sub === "add" || sub === "remove") {
15
+ const answers = await inquirer.prompt([
16
+ {
17
+ type: "input",
18
+ name: "port",
19
+ message: "Port number:",
20
+ validate: (v) => isValidPort(Number(v)) || "Enter a valid port (1-65535)",
21
+ },
22
+ ]);
23
+ const protocol = await promptList("Protocol:", [
24
+ { name: "TCP", value: "tcp" },
25
+ { name: "UDP", value: "udp" },
26
+ ]);
27
+ if (!protocol)
28
+ return null;
29
+ return ["firewall", sub, "--port", answers.port, "--protocol", protocol];
30
+ }
31
+ return ["firewall", sub];
32
+ }
33
+ export async function promptSecure() {
34
+ const sub = await promptList("Security action:", [
35
+ { name: "Harden SSH + install fail2ban", value: "setup" },
36
+ { name: "Run security audit", value: "audit" },
37
+ { name: "Show security status", value: "status" },
38
+ ]);
39
+ if (!sub)
40
+ return null;
41
+ return ["secure", sub];
42
+ }
43
+ export async function promptDomain() {
44
+ const sub = await promptList("Domain action:", [
45
+ { name: "Show current domain info", value: "info" },
46
+ { name: "List domains", value: "list" },
47
+ { name: "Set a custom domain", value: "add" },
48
+ { name: "Check DNS for a domain", value: "check" },
49
+ { name: "Remove domain", value: "remove" },
50
+ ]);
51
+ if (!sub)
52
+ return null;
53
+ if (sub === "add" || sub === "check") {
54
+ const { domain } = await inquirer.prompt([
55
+ {
56
+ type: "input",
57
+ name: "domain",
58
+ message: "Domain name (e.g. panel.example.com):",
59
+ validate: (v) => (v.includes(".") ? true : "Enter a valid domain"),
60
+ },
61
+ ]);
62
+ const args = ["domain", sub, "--domain", domain];
63
+ if (sub === "add") {
64
+ const { ssl } = await inquirer.prompt([
65
+ { type: "confirm", name: "ssl", message: "Enable SSL (HTTPS)?", default: true },
66
+ ]);
67
+ if (!ssl)
68
+ args.push("--no-ssl");
69
+ }
70
+ return args;
71
+ }
72
+ return ["domain", sub];
73
+ }
74
+ export async function promptAuth() {
75
+ const sub = await promptList("Auth action:", [
76
+ { name: "List stored tokens", value: "list" },
77
+ { name: "Store a provider token", value: "set" },
78
+ { name: "Remove a provider token", value: "remove" },
79
+ ]);
80
+ if (!sub)
81
+ return null;
82
+ if (sub === "set" || sub === "remove") {
83
+ const provider = await promptList("Provider:", [
84
+ { name: "Hetzner Cloud", value: "hetzner" },
85
+ { name: "DigitalOcean", value: "digitalocean" },
86
+ { name: "Vultr", value: "vultr" },
87
+ { name: "Linode", value: "linode" },
88
+ ]);
89
+ if (!provider)
90
+ return null;
91
+ return ["auth", sub, provider];
92
+ }
93
+ return ["auth", sub];
94
+ }
95
+ export async function promptAudit() {
96
+ const mode = await promptList("Audit mode:", [
97
+ { name: "Run full audit", value: "run" },
98
+ { name: "Run with --explain (show fixes)", value: "explain" },
99
+ { name: "Compare two snapshots (diff)", value: "diff" },
100
+ { name: "Interactive fix mode", value: "fix" },
101
+ { name: "List all checks (no scan)", value: "list-checks" },
102
+ { name: "Explain a specific check (deep-dive)", value: "explain-check" },
103
+ { name: "Run with compliance profile", value: "profile" },
104
+ { name: "Compliance framework report", value: "compliance" },
105
+ { name: "Save snapshot", value: "snapshot" },
106
+ { name: "List saved snapshots", value: "snapshots" },
107
+ { name: "Compare two servers", value: "compare" },
108
+ { name: "Score trend over time", value: "trend" },
109
+ { name: "Watch mode (auto-refresh)", value: "watch" },
110
+ { name: "Audit unregistered server by IP", value: "host" },
111
+ { name: "CI gate (exit 1 if below threshold)", value: "threshold" },
112
+ { name: "Generate report (HTML/Markdown)", value: "report" },
113
+ ]);
114
+ if (!mode)
115
+ return null;
116
+ if (mode === "explain")
117
+ return ["audit", "--explain"];
118
+ if (mode === "diff") {
119
+ const { diffRef } = await inquirer.prompt([
120
+ {
121
+ type: "input",
122
+ name: "diffRef",
123
+ message: "Diff reference (e.g. pre-upgrade:latest or pre-upgrade:post-upgrade):",
124
+ validate: validateColonPair("Format: before:after (e.g. pre-upgrade:latest)"),
125
+ },
126
+ ]);
127
+ return ["audit", "--diff", diffRef];
128
+ }
129
+ if (mode === "fix") {
130
+ const dryRun = await promptList("Fix mode:", [
131
+ { name: "Execute fixes interactively", value: "live" },
132
+ { name: "Dry run (show commands only)", value: "dry-run" },
133
+ ]);
134
+ if (!dryRun)
135
+ return null;
136
+ const args = ["audit", "--fix"];
137
+ if (dryRun === "dry-run")
138
+ args.push("--dry-run");
139
+ return args;
140
+ }
141
+ if (mode === "list-checks")
142
+ return ["audit", "--list-checks"];
143
+ if (mode === "explain-check") {
144
+ const { checkId } = await inquirer.prompt([
145
+ {
146
+ type: "input",
147
+ name: "checkId",
148
+ message: "Enter check ID (e.g. SSH-PASSWORD-AUTH):",
149
+ },
150
+ ]);
151
+ if (!checkId?.trim())
152
+ return null;
153
+ return ["explain", checkId.trim()];
154
+ }
155
+ if (mode === "snapshot") {
156
+ const { snapName } = await inquirer.prompt([
157
+ { type: "input", name: "snapName", message: "Snapshot name (leave empty for auto):", default: "" },
158
+ ]);
159
+ return snapName ? ["audit", "--snapshot", snapName] : ["audit", "--snapshot"];
160
+ }
161
+ if (mode === "snapshots")
162
+ return ["audit", "--snapshots"];
163
+ if (mode === "compare") {
164
+ const { compareRef } = await inquirer.prompt([
165
+ {
166
+ type: "input",
167
+ name: "compareRef",
168
+ message: "Compare (server1:server2):",
169
+ validate: validateColonPair("Format: server1:server2"),
170
+ },
171
+ ]);
172
+ const compareMode = await promptList("Compare mode:", [
173
+ { name: "Category summary (default)", value: "summary" },
174
+ { name: "Check-level diff (detailed)", value: "detail" },
175
+ ]);
176
+ if (!compareMode)
177
+ return null;
178
+ const args = ["audit", "--compare", compareRef];
179
+ if (compareMode === "detail")
180
+ args.push("--detail");
181
+ return args;
182
+ }
183
+ if (mode === "trend") {
184
+ const days = await promptList("Time range:", [
185
+ { name: "Last 7 days", value: "7" },
186
+ { name: "Last 30 days", value: "30" },
187
+ { name: "All time", value: "0" },
188
+ ]);
189
+ if (!days)
190
+ return null;
191
+ return days === "0" ? ["audit", "--trend"] : ["audit", "--trend", "--days", days];
192
+ }
193
+ if (mode === "watch") {
194
+ const interval = await promptList("Refresh interval:", [
195
+ { name: "30 seconds", value: "30" },
196
+ { name: "60 seconds", value: "60" },
197
+ { name: "300 seconds (5 min)", value: "300" },
198
+ ]);
199
+ if (!interval)
200
+ return null;
201
+ return ["audit", "--watch", interval];
202
+ }
203
+ if (mode === "host") {
204
+ const { hostAddr } = await inquirer.prompt([
205
+ {
206
+ type: "input",
207
+ name: "hostAddr",
208
+ message: "Server address (user@ip):",
209
+ validate: (v) => (v.includes("@") ? true : "Format: user@ip"),
210
+ },
211
+ ]);
212
+ return ["audit", "--host", hostAddr];
213
+ }
214
+ if (mode === "threshold") {
215
+ const { thresholdScore } = await inquirer.prompt([
216
+ {
217
+ type: "input",
218
+ name: "thresholdScore",
219
+ message: "Minimum score (exit 1 if below):",
220
+ validate: validateScore,
221
+ },
222
+ ]);
223
+ return ["audit", "--threshold", thresholdScore];
224
+ }
225
+ if (mode === "report") {
226
+ const reportFormat = await promptList("Report format:", [
227
+ { name: "Markdown (.md)", value: "md" },
228
+ { name: "HTML (.html)", value: "html" },
229
+ ]);
230
+ if (!reportFormat)
231
+ return null;
232
+ return ["audit", "--report", reportFormat];
233
+ }
234
+ if (mode === "profile") {
235
+ const profile = await promptList("Compliance profile:", [
236
+ { name: "CIS Level 1 (essential)", value: "cis-level1" },
237
+ { name: "CIS Level 2 (advanced)", value: "cis-level2" },
238
+ { name: "PCI-DSS (payment)", value: "pci-dss" },
239
+ { name: "HIPAA (healthcare)", value: "hipaa" },
240
+ ]);
241
+ if (!profile)
242
+ return null;
243
+ const format = await promptList("Output format:", [
244
+ { name: "Dashboard summary", value: "summary" },
245
+ { name: "JSON output", value: "json" },
246
+ { name: "Score only", value: "score-only" },
247
+ ]);
248
+ if (!format)
249
+ return null;
250
+ const args = ["audit", "--profile", profile];
251
+ if (format === "json")
252
+ args.push("--json");
253
+ else if (format === "score-only")
254
+ args.push("--score-only");
255
+ else
256
+ args.push("--summary");
257
+ return args;
258
+ }
259
+ if (mode === "compliance") {
260
+ const { frameworks } = await inquirer.prompt([
261
+ {
262
+ type: "checkbox",
263
+ name: "frameworks",
264
+ message: "Select compliance frameworks:",
265
+ choices: [
266
+ { name: "CIS Benchmark", value: "cis" },
267
+ { name: "PCI-DSS", value: "pci-dss" },
268
+ { name: "HIPAA", value: "hipaa" },
269
+ ],
270
+ validate: (v) => (v.length > 0 ? true : "Select at least one framework"),
271
+ },
272
+ ]);
273
+ return ["audit", "--compliance", frameworks.join(",")];
274
+ }
275
+ // mode === "run" — standard audit
276
+ const format = await promptList("Output format:", [
277
+ { name: "Dashboard summary", value: "summary" },
278
+ { name: "JSON output", value: "json" },
279
+ { name: "Score only", value: "score-only" },
280
+ { name: "SVG badge", value: "badge" },
281
+ { name: "Show score trend", value: "trend" },
282
+ ]);
283
+ if (!format)
284
+ return null;
285
+ const args = ["audit"];
286
+ if (format === "summary")
287
+ args.push("--summary");
288
+ else if (format === "json")
289
+ args.push("--json");
290
+ else if (format === "score-only")
291
+ args.push("--score-only");
292
+ else if (format === "badge")
293
+ args.push("--badge");
294
+ else if (format === "trend")
295
+ args.push("--trend");
296
+ // Optional category/severity filters (AUX-01, AUX-02)
297
+ const filter = await promptList("Filter results?", [
298
+ { name: "No filter (show all)", value: "none" },
299
+ { name: "Filter by category", value: "category" },
300
+ { name: "Filter by severity", value: "severity" },
301
+ { name: "Filter by both", value: "both" },
302
+ ]);
303
+ if (!filter)
304
+ return null;
305
+ if (filter === "category" || filter === "both") {
306
+ const TOP_CATEGORIES = [
307
+ { name: "SSH", value: "ssh" },
308
+ { name: "Firewall", value: "firewall" },
309
+ { name: "Updates", value: "updates" },
310
+ { name: "Auth", value: "auth" },
311
+ { name: "Docker", value: "docker" },
312
+ { name: "Network", value: "network" },
313
+ { name: "Kernel", value: "kernel" },
314
+ { name: "Logging", value: "logging" },
315
+ ];
316
+ const ALL_CATEGORIES = [
317
+ ...TOP_CATEGORIES,
318
+ { name: "Filesystem", value: "filesystem" },
319
+ { name: "Accounts", value: "accounts" },
320
+ { name: "Services", value: "services" },
321
+ { name: "Boot", value: "boot" },
322
+ { name: "Scheduling", value: "scheduling" },
323
+ { name: "Time", value: "time" },
324
+ { name: "Banners", value: "banners" },
325
+ { name: "Crypto", value: "crypto" },
326
+ { name: "File Integrity", value: "file integrity" },
327
+ { name: "Malware", value: "malware" },
328
+ { name: "MAC", value: "mac" },
329
+ { name: "Memory", value: "memory" },
330
+ { name: "Secrets", value: "secrets" },
331
+ { name: "Cloud Metadata", value: "cloud metadata" },
332
+ { name: "Supply Chain", value: "supply chain" },
333
+ { name: "Backup Hygiene", value: "backup hygiene" },
334
+ { name: "Resource Limits", value: "resource limits" },
335
+ { name: "Incident Readiness", value: "incident readiness" },
336
+ { name: "DNS Security", value: "dns security" },
337
+ ];
338
+ const category = await promptList("Category:", [
339
+ ...TOP_CATEGORIES,
340
+ { name: "Show all 31 categories...", value: "__all__" },
341
+ ]);
342
+ if (!category)
343
+ return null;
344
+ if (category === "__all__") {
345
+ const fullCategory = await promptList("Category:", ALL_CATEGORIES);
346
+ if (!fullCategory)
347
+ return null;
348
+ args.push("--category", fullCategory);
349
+ }
350
+ else {
351
+ args.push("--category", category);
352
+ }
353
+ }
354
+ if (filter === "severity" || filter === "both") {
355
+ const severity = await promptList("Severity:", [
356
+ { name: "Critical only", value: "critical" },
357
+ { name: "Warning", value: "warning" },
358
+ { name: "Info", value: "info" },
359
+ ]);
360
+ if (!severity)
361
+ return null;
362
+ args.push("--severity", severity);
363
+ }
364
+ return args;
365
+ }
366
+ export async function promptLock() {
367
+ const mode = await promptList("Lock mode:", [
368
+ { name: "Dry run (preview changes)", value: "dry-run" },
369
+ { name: "Apply production hardening", value: "production" },
370
+ { name: "Apply production (skip confirmation)", value: "production-force" },
371
+ ]);
372
+ if (!mode)
373
+ return null;
374
+ const args = ["lock"];
375
+ if (mode === "dry-run")
376
+ args.push("--dry-run");
377
+ else if (mode === "production-force")
378
+ args.push("--production", "--force");
379
+ else
380
+ args.push("--production");
381
+ return args;
382
+ }
383
+ export async function promptFix() {
384
+ const group = await promptList("Fix options:", [
385
+ { name: "Apply fixes", value: "apply" },
386
+ { name: "Fix history", value: "history" },
387
+ ]);
388
+ if (!group)
389
+ return null;
390
+ if (group === "apply") {
391
+ const mode = await promptList("Apply mode:", [
392
+ { name: "Dry run (preview safe fixes)", value: "dry-run" },
393
+ { name: "Apply safe fixes (backup + fix + verify)", value: "apply" },
394
+ { name: "Apply with profile filter", value: "profile" },
395
+ { name: "Apply with category filter", value: "category" },
396
+ { name: "Apply top N fixes by impact", value: "top" },
397
+ { name: "Apply until target score", value: "target" },
398
+ { name: "Apply with diff preview", value: "diff" },
399
+ { name: "Apply and generate report", value: "report" },
400
+ ]);
401
+ if (!mode)
402
+ return null;
403
+ if (mode === "dry-run")
404
+ return ["fix", "--safe", "--dry-run"];
405
+ if (mode === "apply")
406
+ return ["fix", "--safe"];
407
+ if (mode === "diff")
408
+ return ["fix", "--safe", "--diff"];
409
+ if (mode === "report")
410
+ return ["fix", "--safe", "--report"];
411
+ if (mode === "profile") {
412
+ const profileNames = listAllProfileNames();
413
+ const choices = profileNames.map((p) => ({ name: p, value: p }));
414
+ const profile = await promptList("Fix profile:", choices);
415
+ if (!profile)
416
+ return null;
417
+ return ["fix", "--safe", "--profile", profile];
418
+ }
419
+ if (mode === "category") {
420
+ const { cats } = await inquirer.prompt([{
421
+ type: "input",
422
+ name: "cats",
423
+ message: "Category filter (comma-separated, e.g. Auth,Kernel):",
424
+ validate: validateRequired("Enter at least one category"),
425
+ }]);
426
+ return ["fix", "--safe", "--category", cats];
427
+ }
428
+ if (mode === "top") {
429
+ const { n } = await inquirer.prompt([{
430
+ type: "input",
431
+ name: "n",
432
+ message: "Number of fixes to apply:",
433
+ validate: (v) => {
434
+ const num = Number(v);
435
+ return num >= 1 && Number.isInteger(num) ? true : "Enter a positive integer";
436
+ },
437
+ }]);
438
+ return ["fix", "--safe", "--top", n];
439
+ }
440
+ if (mode === "target") {
441
+ const { score } = await inquirer.prompt([{
442
+ type: "input",
443
+ name: "score",
444
+ message: "Target score (0-100):",
445
+ validate: validateScore,
446
+ }]);
447
+ return ["fix", "--safe", "--target", score];
448
+ }
449
+ }
450
+ if (group === "history") {
451
+ const action = await promptList("History action:", [
452
+ { name: "View fix history", value: "view" },
453
+ { name: "Rollback a specific fix", value: "rollback" },
454
+ { name: "Rollback all fixes", value: "rollback-all" },
455
+ { name: "Rollback down to a specific fix", value: "rollback-to" },
456
+ ]);
457
+ if (!action)
458
+ return null;
459
+ if (action === "view")
460
+ return ["fix", "--history"];
461
+ if (action === "rollback-all")
462
+ return ["fix", "--rollback-all"];
463
+ if (action === "rollback-to") {
464
+ const { fixId } = await inquirer.prompt([{
465
+ type: "input",
466
+ name: "fixId",
467
+ message: "Rollback down to fix ID:",
468
+ validate: validateRequired("Fix ID required"),
469
+ }]);
470
+ return ["fix", "--rollback-to", fixId];
471
+ }
472
+ if (action === "rollback") {
473
+ const { fixId } = await inquirer.prompt([{
474
+ type: "input",
475
+ name: "fixId",
476
+ message: "Fix ID (or 'last'):",
477
+ validate: validateRequired("Fix ID required"),
478
+ }]);
479
+ return ["fix", "--rollback", fixId];
480
+ }
481
+ }
482
+ return null;
483
+ }
484
+ export async function promptEvidence() {
485
+ const action = await promptList("Evidence collection:", [
486
+ { name: "Collect with default label", value: "default" },
487
+ { name: "Collect with custom label", value: "custom" },
488
+ { name: "Collect (overwrite existing)", value: "force" },
489
+ { name: "Collect (JSON manifest output)", value: "json" },
490
+ ]);
491
+ if (!action)
492
+ return null;
493
+ const args = ["evidence"];
494
+ if (action === "force")
495
+ args.push("--force");
496
+ if (action === "json")
497
+ args.push("--json");
498
+ if (action === "custom") {
499
+ const { name } = await inquirer.prompt([
500
+ {
501
+ type: "input",
502
+ name: "name",
503
+ message: "Evidence label (e.g. pre-incident, weekly-check):",
504
+ default: "manual",
505
+ },
506
+ ]);
507
+ args.push("--name", name);
508
+ }
509
+ else {
510
+ args.push("--name", "manual");
511
+ }
512
+ const options = await promptList("Collection options:", [
513
+ { name: "Full collection (default)", value: "full" },
514
+ { name: "Skip Docker data", value: "no-docker" },
515
+ { name: "Skip system info", value: "no-sysinfo" },
516
+ { name: "Skip Docker + system info", value: "no-both" },
517
+ ]);
518
+ if (!options)
519
+ return null;
520
+ if (options === "no-docker" || options === "no-both")
521
+ args.push("--no-docker");
522
+ if (options === "no-sysinfo" || options === "no-both")
523
+ args.push("--no-sysinfo");
524
+ const lines = await promptList("Log lines to collect:", [
525
+ { name: "100 lines", value: "100" },
526
+ { name: "500 lines (default)", value: "500" },
527
+ { name: "1000 lines", value: "1000" },
528
+ ]);
529
+ if (!lines)
530
+ return null;
531
+ if (lines !== "500")
532
+ args.push("--lines", lines);
533
+ return args;
534
+ }
535
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/commands/interactive/security.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,kBAAkB,EAAE;QAC/C,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC/C,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE;QAClD,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,EAAE;QACzC,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,QAAQ,EAAE;KAChD,CAAC,CAAC;IACH,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACpC;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,cAAc;gBACvB,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CACtB,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,8BAA8B;aAC3D;SACF,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE;YAC7C,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;YAC7B,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;SAC9B,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE3B,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,kBAAkB,EAAE;QAC/C,EAAE,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,OAAO,EAAE;QACzD,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE;QAC9C,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,QAAQ,EAAE;KAClD,CAAC,CAAC;IACH,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,gBAAgB,EAAE;QAC7C,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,MAAM,EAAE;QACnD,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE;QACvC,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE;QAC7C,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE;QAClD,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE;KAC3C,CAAC,CAAC;IACH,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACrC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACvC;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,uCAAuC;gBAChD,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC;aAC3E;SACF,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAClB,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACpC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,IAAI,EAAE;aAChF,CAAC,CAAC;YACH,IAAI,CAAC,GAAG;gBAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,cAAc,EAAE;QAC3C,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE;QAC7C,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,KAAK,EAAE;QAChD,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,QAAQ,EAAE;KACrD,CAAC,CAAC;IACH,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE;YAC7C,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE;YAC3C,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;YAC/C,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;YACjC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;SACpC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE;QAC3C,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE;QACxC,EAAE,IAAI,EAAE,iCAAiC,EAAE,KAAK,EAAE,SAAS,EAAE;QAC7D,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,MAAM,EAAE;QACvD,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,KAAK,EAAE;QAC9C,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,aAAa,EAAE;QAC3D,EAAE,IAAI,EAAE,sCAAsC,EAAE,KAAK,EAAE,eAAe,EAAE;QACxE,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,SAAS,EAAE;QACzD,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,YAAY,EAAE;QAC5D,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE;QAC5C,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,WAAW,EAAE;QACpD,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,SAAS,EAAE;QACjD,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE;QACjD,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,OAAO,EAAE;QACrD,EAAE,IAAI,EAAE,iCAAiC,EAAE,KAAK,EAAE,MAAM,EAAE;QAC1D,EAAE,IAAI,EAAE,qCAAqC,EAAE,KAAK,EAAE,WAAW,EAAE;QACnE,EAAE,IAAI,EAAE,iCAAiC,EAAE,KAAK,EAAE,QAAQ,EAAE;KAC7D,CAAC,CAAC;IACH,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAEtD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACxC;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,uEAAuE;gBAChF,QAAQ,EAAE,iBAAiB,CAAC,gDAAgD,CAAC;aAC9E;SACF,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE;YAC3C,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,MAAM,EAAE;YACtD,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,SAAS,EAAE;SAC3D,CAAC,CAAC;QACH,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,KAAK,aAAa;QAAE,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAE9D,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;QAC7B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACxC;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,0CAA0C;aACpD;SACF,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC;QAClC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACzC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,uCAAuC,EAAE,OAAO,EAAE,EAAE,EAAE;SACnG,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAE1D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YAC3C;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,4BAA4B;gBACrC,QAAQ,EAAE,iBAAiB,CAAC,yBAAyB,CAAC;aACvD;SACF,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,eAAe,EAAE;YACpD,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,SAAS,EAAE;YACxD,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,QAAQ,EAAE;SACzD,CAAC,CAAC;QACH,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAC9B,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAChD,IAAI,WAAW,KAAK,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE;YAC3C,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE;YACnC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE;YACrC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE;SACjC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,mBAAmB,EAAE;YACrD,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;YACnC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;YACnC,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE;SAC9C,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACzC;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,2BAA2B;gBACpC,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC;aACtE;SACF,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YAC/C;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,kCAAkC;gBAC3C,QAAQ,EAAE,aAAa;aACxB;SACF,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,gBAAgB,EAAE;YACtD,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE;YACvC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE;SACxC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QAC/B,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,qBAAqB,EAAE;YACtD,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,YAAY,EAAE;YACxD,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE;YACvD,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE;YAC/C,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE;SAC/C,CAAC,CAAC;QACH,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,gBAAgB,EAAE;YAChD,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE;YAC/C,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE;YACtC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;SAC5C,CAAC,CAAC;QACH,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAC7C,IAAI,MAAM,KAAK,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACtC,IAAI,MAAM,KAAK,YAAY;YAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;YACvD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YAC3C;gBACE,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,+BAA+B;gBACxC,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE;oBACvC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;oBACrC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;iBAClC;gBACD,QAAQ,EAAE,CAAC,CAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,+BAA+B,CAAC;aACnF;SACF,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,kCAAkC;IAClC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,gBAAgB,EAAE;QAChD,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE;QAC/C,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE;QACtC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;QAC3C,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE;QACrC,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE;KAC7C,CAAC,CAAC;IACH,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,IAAI,MAAM,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC5C,IAAI,MAAM,KAAK,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC3C,IAAI,MAAM,KAAK,YAAY;QAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SACvD,IAAI,MAAM,KAAK,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7C,IAAI,MAAM,KAAK,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAElD,sDAAsD;IACtD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,iBAAiB,EAAE;QACjD,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,EAAE;QAC/C,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,UAAU,EAAE;QACjD,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,UAAU,EAAE;QACjD,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE;KAC1C,CAAC,CAAC;IACH,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC/C,MAAM,cAAc,GAAG;YACrB,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;YAC7B,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;YACvC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;YACrC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;YAC/B,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;YACnC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;YACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;YACnC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;SACtC,CAAC;QACF,MAAM,cAAc,GAAG;YACrB,GAAG,cAAc;YACjB,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;YAC3C,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;YACvC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;YACvC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;YAC/B,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;YAC3C,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;YAC/B,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;YACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;YACnC,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE;YACnD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;YACrC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;YAC7B,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;YACnC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;YACrC,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE;YACnD,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;YAC/C,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE;YACnD,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE;YACrD,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,oBAAoB,EAAE;YAC3D,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;SAChD,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE;YAC7C,GAAG,cAAc;YACjB,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,SAAS,EAAE;SACxD,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE3B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YACnE,IAAI,CAAC,YAAY;gBAAE,OAAO,IAAI,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE;YAC7C,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE;YAC5C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;YACrC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;SAChC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE;QAC1C,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,SAAS,EAAE;QACvD,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,YAAY,EAAE;QAC3D,EAAE,IAAI,EAAE,sCAAsC,EAAE,KAAK,EAAE,kBAAkB,EAAE;KAC5E,CAAC,CAAC;IACH,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,IAAI,IAAI,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC1C,IAAI,IAAI,KAAK,kBAAkB;QAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;;QACtE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,cAAc,EAAE;QAC7C,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE;QACvC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE;KAC1C,CAAC,CAAC;IACH,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE;YAC3C,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,SAAS,EAAE;YAC1D,EAAE,IAAI,EAAE,0CAA0C,EAAE,KAAK,EAAE,OAAO,EAAE;YACpE,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,SAAS,EAAE;YACvD,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,UAAU,EAAE;YACzD,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,KAAK,EAAE;YACrD,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,QAAQ,EAAE;YACrD,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAM,EAAE;YAClD,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,QAAQ,EAAE;SACvD,CAAC,CAAC;QACH,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC9D,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAE5D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACjE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YAC1D,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC1B,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACtC,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,sDAAsD;oBAC/D,QAAQ,EAAE,gBAAgB,CAAC,6BAA6B,CAAC;iBAC1D,CAAC,CAAC,CAAC;YACJ,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,MAAM,EAAE,CAAC,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACnC,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,GAAG;oBACT,OAAO,EAAE,2BAA2B;oBACpC,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE;wBACtB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;wBACtB,OAAO,GAAG,IAAI,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC;oBAC/E,CAAC;iBACF,CAAC,CAAC,CAAC;YACJ,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACvC,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,uBAAuB;oBAChC,QAAQ,EAAE,aAAa;iBACxB,CAAC,CAAC,CAAC;YACJ,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,iBAAiB,EAAE;YACjD,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE;YAC3C,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,UAAU,EAAE;YACtD,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,cAAc,EAAE;YACrD,EAAE,IAAI,EAAE,iCAAiC,EAAE,KAAK,EAAE,aAAa,EAAE;SAClE,CAAC,CAAC;QACH,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,IAAI,MAAM,KAAK,MAAM;YAAE,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACnD,IAAI,MAAM,KAAK,cAAc;YAAE,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QAEhE,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;YAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACvC,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,0BAA0B;oBACnC,QAAQ,EAAE,gBAAgB,CAAC,iBAAiB,CAAC;iBAC9C,CAAC,CAAC,CAAC;YACJ,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACvC,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,qBAAqB;oBAC9B,QAAQ,EAAE,gBAAgB,CAAC,iBAAiB,CAAC;iBAC9C,CAAC,CAAC,CAAC;YACJ,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,sBAAsB,EAAE;QACtD,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,SAAS,EAAE;QACxD,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,QAAQ,EAAE;QACtD,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,OAAO,EAAE;QACxD,EAAE,IAAI,EAAE,gCAAgC,EAAE,KAAK,EAAE,MAAM,EAAE;KAC1D,CAAC,CAAC;IACH,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAE1B,IAAI,MAAM,KAAK,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,MAAM,KAAK,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE3C,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACrC;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,mDAAmD;gBAC5D,OAAO,EAAE,QAAQ;aAClB;SACF,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,qBAAqB,EAAE;QACtD,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,MAAM,EAAE;QACpD,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW,EAAE;QAChD,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,YAAY,EAAE;QACjD,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,SAAS,EAAE;KACxD,CAAC,CAAC;IACH,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC/E,IAAI,OAAO,KAAK,YAAY,IAAI,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAEjF,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,uBAAuB,EAAE;QACtD,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE;QACnC,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE;QAC7C,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE;KACtC,CAAC,CAAC;IACH,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,KAAK,KAAK,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAEjD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function promptInit(): Promise<string[] | null>;
2
+ export declare function promptStatus(): Promise<string[] | null>;
3
+ export declare function promptSsh(): Promise<string[] | null>;
4
+ export declare function promptFleet(): Promise<string[] | null>;
5
+ //# sourceMappingURL=server-management.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-management.d.ts","sourceRoot":"","sources":["../../../src/commands/interactive/server-management.ts"],"names":[],"mappings":"AAGA,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CA2B3D;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAW7D;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAc1D;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAa5D"}
@@ -0,0 +1,79 @@
1
+ import inquirer from "inquirer";
2
+ import { promptList } from "./shared.js";
3
+ export async function promptInit() {
4
+ const mode = await promptList("Server mode:", [
5
+ { name: "Coolify (auto-install panel)", value: "coolify" },
6
+ { name: "Dokploy (auto-install panel)", value: "dokploy" },
7
+ { name: "Bare (generic VPS, no panel)", value: "bare" },
8
+ ]);
9
+ if (!mode)
10
+ return null;
11
+ const template = await promptList("Server template:", [
12
+ { name: "Starter (cheapest option)", value: "starter" },
13
+ { name: "Production (more resources)", value: "production" },
14
+ { name: "Dev (development)", value: "dev" },
15
+ ]);
16
+ if (!template)
17
+ return null;
18
+ const { fullSetup } = await inquirer.prompt([
19
+ {
20
+ type: "confirm",
21
+ name: "fullSetup",
22
+ message: "Run full setup after deploy? (firewall + SSH hardening)",
23
+ default: true,
24
+ },
25
+ ]);
26
+ const args = ["init", "--mode", mode, "--template", template];
27
+ if (fullSetup)
28
+ args.push("--full-setup");
29
+ return args;
30
+ }
31
+ export async function promptStatus() {
32
+ const mode = await promptList("Status check:", [
33
+ { name: "Single server", value: "single" },
34
+ { name: "All servers at once", value: "all" },
35
+ { name: "With auto-restart if platform is down", value: "autostart" },
36
+ ]);
37
+ if (!mode)
38
+ return null;
39
+ const args = ["status"];
40
+ if (mode === "all")
41
+ args.push("--all");
42
+ if (mode === "autostart")
43
+ args.push("--autostart");
44
+ return args;
45
+ }
46
+ export async function promptSsh() {
47
+ const mode = await promptList("SSH mode:", [
48
+ { name: "Open interactive SSH session", value: "interactive" },
49
+ { name: "Run a single command", value: "command" },
50
+ ]);
51
+ if (!mode)
52
+ return null;
53
+ if (mode === "command") {
54
+ const { command } = await inquirer.prompt([
55
+ { type: "input", name: "command", message: "Command to execute:" },
56
+ ]);
57
+ return ["ssh", "--command", command];
58
+ }
59
+ return ["ssh"];
60
+ }
61
+ export async function promptFleet() {
62
+ const mode = await promptList("Fleet output:", [
63
+ { name: "Dashboard (default)", value: "default" },
64
+ { name: "JSON output", value: "json" },
65
+ { name: "Sort by score", value: "sort-score" },
66
+ { name: "Sort by provider", value: "sort-provider" },
67
+ ]);
68
+ if (!mode)
69
+ return null;
70
+ const args = ["fleet"];
71
+ if (mode === "json")
72
+ args.push("--json");
73
+ if (mode === "sort-score")
74
+ args.push("--sort", "score");
75
+ if (mode === "sort-provider")
76
+ args.push("--sort", "provider");
77
+ return args;
78
+ }
79
+ //# sourceMappingURL=server-management.js.map