kastell 2.2.7 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/.claude-plugin/plugin.json +2 -2
  2. package/CHANGELOG.md +100 -0
  3. package/README.md +34 -6
  4. package/README.tr.md +6 -6
  5. package/dist/commands/audit.d.ts +3 -2
  6. package/dist/commands/audit.d.ts.map +1 -1
  7. package/dist/commands/audit.js +88 -47
  8. package/dist/commands/audit.js.map +1 -1
  9. package/dist/commands/auth.d.ts.map +1 -1
  10. package/dist/commands/auth.js +14 -1
  11. package/dist/commands/auth.js.map +1 -1
  12. package/dist/commands/domain.d.ts.map +1 -1
  13. package/dist/commands/domain.js +18 -1
  14. package/dist/commands/domain.js.map +1 -1
  15. package/dist/commands/evidence.d.ts.map +1 -1
  16. package/dist/commands/evidence.js +2 -1
  17. package/dist/commands/evidence.js.map +1 -1
  18. package/dist/commands/fix.d.ts.map +1 -1
  19. package/dist/commands/fix.js +12 -4
  20. package/dist/commands/fix.js.map +1 -1
  21. package/dist/commands/init.d.ts.map +1 -1
  22. package/dist/commands/init.js +2 -1
  23. package/dist/commands/init.js.map +1 -1
  24. package/dist/commands/lock.d.ts.map +1 -1
  25. package/dist/commands/lock.js +7 -2
  26. package/dist/commands/lock.js.map +1 -1
  27. package/dist/commands/maintain.d.ts.map +1 -1
  28. package/dist/commands/maintain.js +13 -0
  29. package/dist/commands/maintain.js.map +1 -1
  30. package/dist/commands/plugin.d.ts.map +1 -1
  31. package/dist/commands/plugin.js +5 -4
  32. package/dist/commands/plugin.js.map +1 -1
  33. package/dist/commands/snapshot.d.ts.map +1 -1
  34. package/dist/commands/snapshot.js +16 -0
  35. package/dist/commands/snapshot.js.map +1 -1
  36. package/dist/commands/status.d.ts.map +1 -1
  37. package/dist/commands/status.js +2 -0
  38. package/dist/commands/status.js.map +1 -1
  39. package/dist/commands/update.d.ts.map +1 -1
  40. package/dist/commands/update.js +30 -10
  41. package/dist/commands/update.js.map +1 -1
  42. package/dist/core/audit/commands.d.ts +4 -1
  43. package/dist/core/audit/commands.d.ts.map +1 -1
  44. package/dist/core/audit/commands.js +7 -3
  45. package/dist/core/audit/commands.js.map +1 -1
  46. package/dist/core/audit/diff.d.ts +31 -0
  47. package/dist/core/audit/diff.d.ts.map +1 -1
  48. package/dist/core/audit/diff.js +43 -0
  49. package/dist/core/audit/diff.js.map +1 -1
  50. package/dist/core/audit/errors.d.ts +4 -0
  51. package/dist/core/audit/errors.d.ts.map +1 -0
  52. package/dist/core/audit/errors.js +4 -0
  53. package/dist/core/audit/errors.js.map +1 -0
  54. package/dist/core/audit/fix-history.d.ts.map +1 -1
  55. package/dist/core/audit/fix-history.js +3 -5
  56. package/dist/core/audit/fix-history.js.map +1 -1
  57. package/dist/core/audit/fix.d.ts.map +1 -1
  58. package/dist/core/audit/fix.js +16 -18
  59. package/dist/core/audit/fix.js.map +1 -1
  60. package/dist/core/audit/history.d.ts +8 -0
  61. package/dist/core/audit/history.d.ts.map +1 -1
  62. package/dist/core/audit/history.js +67 -5
  63. package/dist/core/audit/history.js.map +1 -1
  64. package/dist/core/audit/index.d.ts.map +1 -1
  65. package/dist/core/audit/index.js +24 -12
  66. package/dist/core/audit/index.js.map +1 -1
  67. package/dist/core/audit/listChecks.d.ts.map +1 -1
  68. package/dist/core/audit/listChecks.js +2 -1
  69. package/dist/core/audit/listChecks.js.map +1 -1
  70. package/dist/core/audit/pluginAudit.d.ts +10 -0
  71. package/dist/core/audit/pluginAudit.d.ts.map +1 -1
  72. package/dist/core/audit/pluginAudit.js +59 -23
  73. package/dist/core/audit/pluginAudit.js.map +1 -1
  74. package/dist/core/audit/pluginFix.d.ts +22 -1
  75. package/dist/core/audit/pluginFix.d.ts.map +1 -1
  76. package/dist/core/audit/pluginFix.js +27 -10
  77. package/dist/core/audit/pluginFix.js.map +1 -1
  78. package/dist/core/audit/regression.d.ts +1 -0
  79. package/dist/core/audit/regression.d.ts.map +1 -1
  80. package/dist/core/audit/regression.js +7 -5
  81. package/dist/core/audit/regression.js.map +1 -1
  82. package/dist/core/audit/snapshot.d.ts.map +1 -1
  83. package/dist/core/audit/snapshot.js +3 -4
  84. package/dist/core/audit/snapshot.js.map +1 -1
  85. package/dist/core/audit/types.d.ts +2 -2
  86. package/dist/core/audit/types.d.ts.map +1 -1
  87. package/dist/core/completions.d.ts.map +1 -1
  88. package/dist/core/completions.js +71 -47
  89. package/dist/core/completions.js.map +1 -1
  90. package/dist/core/configRepair.d.ts.map +1 -1
  91. package/dist/core/configRepair.js +5 -12
  92. package/dist/core/configRepair.js.map +1 -1
  93. package/dist/core/doctor.d.ts +2 -1
  94. package/dist/core/doctor.d.ts.map +1 -1
  95. package/dist/core/doctor.js +4 -5
  96. package/dist/core/doctor.js.map +1 -1
  97. package/dist/core/evidence.d.ts.map +1 -1
  98. package/dist/core/evidence.js +4 -7
  99. package/dist/core/evidence.js.map +1 -1
  100. package/dist/core/fleet.d.ts +5 -2
  101. package/dist/core/fleet.d.ts.map +1 -1
  102. package/dist/core/fleet.js +34 -22
  103. package/dist/core/fleet.js.map +1 -1
  104. package/dist/core/notify.d.ts.map +1 -1
  105. package/dist/core/notify.js +13 -24
  106. package/dist/core/notify.js.map +1 -1
  107. package/dist/core/plugin/audit.d.ts +25 -0
  108. package/dist/core/plugin/audit.d.ts.map +1 -0
  109. package/dist/core/plugin/audit.js +43 -0
  110. package/dist/core/plugin/audit.js.map +1 -0
  111. package/dist/core/plugin.d.ts +19 -6
  112. package/dist/core/plugin.d.ts.map +1 -1
  113. package/dist/core/plugin.js +40 -19
  114. package/dist/core/plugin.js.map +1 -1
  115. package/dist/core/provision.d.ts +25 -1
  116. package/dist/core/provision.d.ts.map +1 -1
  117. package/dist/core/provision.js +127 -12
  118. package/dist/core/provision.js.map +1 -1
  119. package/dist/core/scheduleManager.d.ts.map +1 -1
  120. package/dist/core/scheduleManager.js +7 -8
  121. package/dist/core/scheduleManager.js.map +1 -1
  122. package/dist/core/tokens.d.ts +1 -1
  123. package/dist/core/tokens.d.ts.map +1 -1
  124. package/dist/core/tokens.js +12 -11
  125. package/dist/core/tokens.js.map +1 -1
  126. package/dist/index.js +2 -0
  127. package/dist/index.js.map +1 -1
  128. package/dist/mcp/index.js +2 -2
  129. package/dist/mcp/index.js.map +1 -1
  130. package/dist/mcp/server.d.ts +14 -0
  131. package/dist/mcp/server.d.ts.map +1 -1
  132. package/dist/mcp/server.js +118 -96
  133. package/dist/mcp/server.js.map +1 -1
  134. package/dist/mcp/startupDiagnostic.d.ts +6 -0
  135. package/dist/mcp/startupDiagnostic.d.ts.map +1 -0
  136. package/dist/mcp/startupDiagnostic.js +7 -0
  137. package/dist/mcp/startupDiagnostic.js.map +1 -0
  138. package/dist/mcp/tools/serverAudit.d.ts +2 -1
  139. package/dist/mcp/tools/serverAudit.d.ts.map +1 -1
  140. package/dist/mcp/tools/serverAudit.js.map +1 -1
  141. package/dist/mcp/tools/serverBackup.handlers.d.ts.map +1 -1
  142. package/dist/mcp/tools/serverBackup.handlers.js +1 -0
  143. package/dist/mcp/tools/serverBackup.handlers.js.map +1 -1
  144. package/dist/mcp/tools/serverCompare.d.ts +13 -14
  145. package/dist/mcp/tools/serverCompare.d.ts.map +1 -1
  146. package/dist/mcp/tools/serverCompare.js +20 -15
  147. package/dist/mcp/tools/serverCompare.js.map +1 -1
  148. package/dist/mcp/tools/serverFix.d.ts +61 -17
  149. package/dist/mcp/tools/serverFix.d.ts.map +1 -1
  150. package/dist/mcp/tools/serverFix.js +67 -78
  151. package/dist/mcp/tools/serverFix.js.map +1 -1
  152. package/dist/mcp/tools/serverGuard.d.ts.map +1 -1
  153. package/dist/mcp/tools/serverGuard.js +4 -1
  154. package/dist/mcp/tools/serverGuard.js.map +1 -1
  155. package/dist/mcp/tools/serverInfo.d.ts +11 -3
  156. package/dist/mcp/tools/serverInfo.d.ts.map +1 -1
  157. package/dist/mcp/tools/serverInfo.js +11 -3
  158. package/dist/mcp/tools/serverInfo.js.map +1 -1
  159. package/dist/mcp/tools/serverLogs.d.ts.map +1 -1
  160. package/dist/mcp/tools/serverLogs.js +2 -1
  161. package/dist/mcp/tools/serverLogs.js.map +1 -1
  162. package/dist/mcp/tools/serverMaintain.d.ts +4 -2
  163. package/dist/mcp/tools/serverMaintain.d.ts.map +1 -1
  164. package/dist/mcp/tools/serverMaintain.js +4 -2
  165. package/dist/mcp/tools/serverMaintain.js.map +1 -1
  166. package/dist/mcp/tools/serverPlugin.js +2 -2
  167. package/dist/mcp/tools/serverPlugin.js.map +1 -1
  168. package/dist/mcp/tools/serverProvision.d.ts +8 -0
  169. package/dist/mcp/tools/serverProvision.d.ts.map +1 -1
  170. package/dist/mcp/tools/serverProvision.js +31 -3
  171. package/dist/mcp/tools/serverProvision.js.map +1 -1
  172. package/dist/mcp/tools/serverSecure.actions.d.ts +21 -0
  173. package/dist/mcp/tools/serverSecure.actions.d.ts.map +1 -0
  174. package/dist/mcp/tools/serverSecure.actions.js +22 -0
  175. package/dist/mcp/tools/serverSecure.actions.js.map +1 -0
  176. package/dist/mcp/tools/serverSecure.d.ts +23 -1
  177. package/dist/mcp/tools/serverSecure.d.ts.map +1 -1
  178. package/dist/mcp/tools/serverSecure.js +16 -9
  179. package/dist/mcp/tools/serverSecure.js.map +1 -1
  180. package/dist/mcp/utils/parseMetrics.d.ts +27 -0
  181. package/dist/mcp/utils/parseMetrics.d.ts.map +1 -0
  182. package/dist/mcp/utils/parseMetrics.js +35 -0
  183. package/dist/mcp/utils/parseMetrics.js.map +1 -0
  184. package/dist/mcp/utils.d.ts +9 -0
  185. package/dist/mcp/utils.d.ts.map +1 -1
  186. package/dist/mcp/utils.js +1 -2
  187. package/dist/mcp/utils.js.map +1 -1
  188. package/dist/mcp-bundle.mjs +5862 -4939
  189. package/dist/plugin/loader.js +3 -2
  190. package/dist/plugin/loader.js.map +1 -1
  191. package/dist/plugin/registry.d.ts +26 -5
  192. package/dist/plugin/registry.d.ts.map +1 -1
  193. package/dist/plugin/registry.js +46 -18
  194. package/dist/plugin/registry.js.map +1 -1
  195. package/dist/plugin/sdk/constants.d.ts +2 -0
  196. package/dist/plugin/sdk/constants.d.ts.map +1 -1
  197. package/dist/plugin/sdk/constants.js +1 -0
  198. package/dist/plugin/sdk/constants.js.map +1 -1
  199. package/dist/plugin/sdk/types.d.ts +18 -4
  200. package/dist/plugin/sdk/types.d.ts.map +1 -1
  201. package/dist/plugin/sdk/types.js +1 -1
  202. package/dist/plugin/sdk/types.js.map +1 -1
  203. package/dist/plugin/validate.d.ts.map +1 -1
  204. package/dist/plugin/validate.js +17 -8
  205. package/dist/plugin/validate.js.map +1 -1
  206. package/dist/types/severity.d.ts +3 -0
  207. package/dist/types/severity.d.ts.map +1 -0
  208. package/dist/types/severity.js +2 -0
  209. package/dist/types/severity.js.map +1 -0
  210. package/dist/utils/atomicWrite.d.ts +23 -0
  211. package/dist/utils/atomicWrite.d.ts.map +1 -0
  212. package/dist/utils/atomicWrite.js +44 -0
  213. package/dist/utils/atomicWrite.js.map +1 -0
  214. package/dist/utils/concurrency.d.ts +17 -0
  215. package/dist/utils/concurrency.d.ts.map +1 -0
  216. package/dist/utils/concurrency.js +38 -0
  217. package/dist/utils/concurrency.js.map +1 -0
  218. package/dist/utils/config.d.ts +1 -0
  219. package/dist/utils/config.d.ts.map +1 -1
  220. package/dist/utils/config.js +44 -33
  221. package/dist/utils/config.js.map +1 -1
  222. package/dist/utils/encryption.d.ts.map +1 -1
  223. package/dist/utils/encryption.js +7 -2
  224. package/dist/utils/encryption.js.map +1 -1
  225. package/dist/utils/exitCode.d.ts +2 -0
  226. package/dist/utils/exitCode.d.ts.map +1 -0
  227. package/dist/utils/exitCode.js +4 -0
  228. package/dist/utils/exitCode.js.map +1 -0
  229. package/dist/utils/fileLock.d.ts.map +1 -1
  230. package/dist/utils/fileLock.js +177 -30
  231. package/dist/utils/fileLock.js.map +1 -1
  232. package/dist/utils/fsMtime.d.ts +32 -0
  233. package/dist/utils/fsMtime.d.ts.map +1 -0
  234. package/dist/utils/fsMtime.js +61 -0
  235. package/dist/utils/fsMtime.js.map +1 -0
  236. package/dist/utils/fsRetry.d.ts +20 -0
  237. package/dist/utils/fsRetry.d.ts.map +1 -0
  238. package/dist/utils/fsRetry.js +56 -0
  239. package/dist/utils/fsRetry.js.map +1 -0
  240. package/dist/utils/logger.d.ts +1 -1
  241. package/dist/utils/logger.d.ts.map +1 -1
  242. package/dist/utils/logger.js +8 -3
  243. package/dist/utils/logger.js.map +1 -1
  244. package/dist/utils/openBrowser.d.ts.map +1 -1
  245. package/dist/utils/openBrowser.js +3 -2
  246. package/dist/utils/openBrowser.js.map +1 -1
  247. package/dist/utils/platform.d.ts +2 -0
  248. package/dist/utils/platform.d.ts.map +1 -0
  249. package/dist/utils/platform.js +2 -0
  250. package/dist/utils/platform.js.map +1 -0
  251. package/dist/utils/secureWrite.d.ts +1 -0
  252. package/dist/utils/secureWrite.d.ts.map +1 -1
  253. package/dist/utils/secureWrite.js +8 -2
  254. package/dist/utils/secureWrite.js.map +1 -1
  255. package/dist/utils/securityLogger.d.ts.map +1 -1
  256. package/dist/utils/securityLogger.js +16 -4
  257. package/dist/utils/securityLogger.js.map +1 -1
  258. package/dist/utils/ssh.d.ts +2 -1
  259. package/dist/utils/ssh.d.ts.map +1 -1
  260. package/dist/utils/ssh.js +14 -4
  261. package/dist/utils/ssh.js.map +1 -1
  262. package/dist/utils/version.d.ts +5 -0
  263. package/dist/utils/version.d.ts.map +1 -1
  264. package/dist/utils/version.js +26 -0
  265. package/dist/utils/version.js.map +1 -1
  266. package/dist/utils/webhookSecurity.d.ts +13 -0
  267. package/dist/utils/webhookSecurity.d.ts.map +1 -0
  268. package/dist/utils/webhookSecurity.js +130 -0
  269. package/dist/utils/webhookSecurity.js.map +1 -0
  270. package/kastell-plugin/.claude-plugin/plugin.json +2 -2
  271. package/kastell-plugin/README.md +6 -0
  272. package/package.json +3 -4
@@ -0,0 +1,130 @@
1
+ import { lookup as dnsLookup } from "node:dns";
2
+ import { Agent } from "node:https";
3
+ import { BlockList, isIP } from "node:net";
4
+ import { ValidationError } from "./errors.js";
5
+ const RESERVED_ADDRESSES = new BlockList();
6
+ for (const [network, prefix] of [
7
+ ["0.0.0.0", 8],
8
+ ["10.0.0.0", 8],
9
+ ["100.64.0.0", 10],
10
+ ["127.0.0.0", 8],
11
+ ["169.254.0.0", 16],
12
+ ["172.16.0.0", 12],
13
+ ["192.0.0.0", 24],
14
+ ["192.0.2.0", 24],
15
+ ["192.168.0.0", 16],
16
+ ["198.18.0.0", 15],
17
+ ["198.51.100.0", 24],
18
+ ["203.0.113.0", 24],
19
+ ["224.0.0.0", 4],
20
+ ["240.0.0.0", 4],
21
+ ]) {
22
+ RESERVED_ADDRESSES.addSubnet(network, prefix, "ipv4");
23
+ }
24
+ for (const [network, prefix] of [
25
+ ["::", 96],
26
+ ["64:ff9b:1::", 48],
27
+ ["100::", 64],
28
+ ["2001:db8::", 32],
29
+ ["fc00::", 7],
30
+ ["fe80::", 10],
31
+ ["ff00::", 8],
32
+ ]) {
33
+ RESERVED_ADDRESSES.addSubnet(network, prefix, "ipv6");
34
+ }
35
+ function normalizeAddress(address) {
36
+ if (address.startsWith("[") && address.endsWith("]")) {
37
+ return address.slice(1, -1);
38
+ }
39
+ return address;
40
+ }
41
+ function mappedIpv4Address(address) {
42
+ const lower = address.toLowerCase();
43
+ if (!lower.startsWith("::ffff:"))
44
+ return undefined;
45
+ const suffix = lower.slice("::ffff:".length);
46
+ if (isIP(suffix) === 4)
47
+ return suffix;
48
+ const groups = suffix.split(":");
49
+ if (groups.length !== 2)
50
+ return undefined;
51
+ const high = Number.parseInt(groups[0], 16);
52
+ const low = Number.parseInt(groups[1], 16);
53
+ if (!Number.isInteger(high) ||
54
+ !Number.isInteger(low) ||
55
+ high < 0 ||
56
+ high > 0xffff ||
57
+ low < 0 ||
58
+ low > 0xffff) {
59
+ return undefined;
60
+ }
61
+ return [
62
+ high >> 8,
63
+ high & 0xff,
64
+ low >> 8,
65
+ low & 0xff,
66
+ ].join(".");
67
+ }
68
+ export function isPublicWebhookAddress(address) {
69
+ const normalized = normalizeAddress(address);
70
+ const mappedIpv4 = mappedIpv4Address(normalized);
71
+ if (mappedIpv4)
72
+ return isPublicWebhookAddress(mappedIpv4);
73
+ const family = isIP(normalized);
74
+ if (family === 0)
75
+ return false;
76
+ return !RESERVED_ADDRESSES.check(normalized, family === 4 ? "ipv4" : "ipv6");
77
+ }
78
+ function privateAddressError(hostname) {
79
+ const error = new Error(`Webhook hostname "${hostname}" resolves to a private or reserved address`);
80
+ error.code = "ENOTFOUND";
81
+ return error;
82
+ }
83
+ export function createSafeWebhookLookup(resolver = dnsLookup) {
84
+ return ((hostname, options, callback) => {
85
+ resolver(hostname, { all: true, verbatim: true }, (error, addresses) => {
86
+ if (error) {
87
+ callback(error, []);
88
+ return;
89
+ }
90
+ const requestedFamily = typeof options === "number" ? options : options.family;
91
+ const publicAddresses = addresses.filter(({ address, family }) => isPublicWebhookAddress(address) &&
92
+ (!requestedFamily || requestedFamily === family));
93
+ if (publicAddresses.length === 0) {
94
+ callback(privateAddressError(hostname), []);
95
+ return;
96
+ }
97
+ const wantsAll = typeof options === "object" && options.all === true;
98
+ if (wantsAll) {
99
+ callback(null, publicAddresses);
100
+ return;
101
+ }
102
+ const selected = publicAddresses[0];
103
+ callback(null, selected.address, selected.family);
104
+ });
105
+ });
106
+ }
107
+ export function assertSafeWebhookUrl(url) {
108
+ const parsed = new URL(url);
109
+ if (parsed.protocol !== "https:") {
110
+ throw new ValidationError("Webhook URL must use HTTPS", {
111
+ hint: "Webhook URL must start with https://",
112
+ });
113
+ }
114
+ const hostname = normalizeAddress(parsed.hostname);
115
+ const normalizedHostname = hostname.toLowerCase().replace(/\.$/, "");
116
+ const isLocalhost = normalizedHostname === "localhost" || normalizedHostname.endsWith(".localhost");
117
+ if (isLocalhost ||
118
+ (isIP(normalizedHostname) !== 0 && !isPublicWebhookAddress(normalizedHostname))) {
119
+ throw new ValidationError("Webhook URL points to a private/reserved address", {
120
+ hint: "Use a public webhook URL",
121
+ });
122
+ }
123
+ }
124
+ export function createSafeWebhookAgent() {
125
+ return new Agent({
126
+ keepAlive: false,
127
+ lookup: createSafeWebhookLookup(),
128
+ });
129
+ }
130
+ //# sourceMappingURL=webhookSecurity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhookSecurity.js","sourceRoot":"","sources":["../../src/utils/webhookSecurity.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "kastell",
3
- "version": "2.2.5",
4
- "description": "Autonomous server security and infrastructure management. Provides 17 MCP tools for cloud server provisioning, security auditing (457 checks), hardening, backup, and fleet management across Hetzner, DigitalOcean, Vultr, and Linode.",
3
+ "version": "2.3.0",
4
+ "description": "Autonomous server security and infrastructure management. Provides 17 MCP tools for cloud server provisioning, security auditing (470+ checks), hardening, backup, and fleet management across Hetzner, DigitalOcean, Vultr, and Linode.",
5
5
  "author": {
6
6
  "name": "kastelldev"
7
7
  },
@@ -105,6 +105,12 @@ and `/agent:kastell-auditor` to get prioritized remediation guidance from audit
105
105
  | Vultr | 25+ global locations | |
106
106
  | Linode (Akamai) | 11 global locations | |
107
107
 
108
+ ## Plugin SDK v2
109
+
110
+ Kastell v2.3.0 introduces the Plugin SDK v2 audit command contract. Plugin manifests use `apiVersion: "2"`, and audit checks declare `checkCommand` as `{ kind, cmd }` instead of a plain string.
111
+
112
+ See [Plugin SDK v2 Migration Guide](../docs/plugin-sdk-migration-v2.md).
113
+
108
114
  ## Links
109
115
 
110
116
  - Website: https://kastell.dev
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kastell",
3
- "version": "2.2.7",
3
+ "version": "2.3.0",
4
4
  "description": "CLI toolkit for provisioning, securing, and managing self-hosted servers",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -83,14 +83,13 @@
83
83
  "dependencies": {
84
84
  "@modelcontextprotocol/sdk": "1.27.1",
85
85
  "@napi-rs/keyring": "1.2.0",
86
- "axios": "1.15.2",
86
+ "axios": "1.16.0",
87
87
  "chalk": "5.6.2",
88
88
  "commander": "14.0.3",
89
89
  "grammy": "1.41.1",
90
90
  "inquirer": "12.11.1",
91
91
  "js-yaml": "4.1.1",
92
92
  "ora": "9.3.0",
93
- "p-limit": "7.3.0",
94
93
  "semver": "7.7.2",
95
94
  "zod": "4.3.6"
96
95
  },
@@ -106,7 +105,7 @@
106
105
  "@types/inquirer": "^9.0.7",
107
106
  "@types/jest": "^30.0.0",
108
107
  "@types/js-yaml": "^4.0.9",
109
- "@types/node": "^22.12.0",
108
+ "@types/node": "^25.9.2",
110
109
  "@types/semver": "7.7.0",
111
110
  "esbuild": "^0.28.0",
112
111
  "eslint": "^10.0.2",