kastell 2.2.6 → 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 +5 -3
  2. package/CHANGELOG.md +112 -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
@@ -4,13 +4,14 @@
4
4
  * Writes per-file evidence to a flat directory with SHA256 checksums.
5
5
  */
6
6
  import { createHash } from "crypto";
7
- import { existsSync, renameSync, rmSync, } from "fs";
7
+ import { existsSync, rmSync, } from "fs";
8
8
  import { join, resolve } from "path";
9
9
  import { sshExec } from "../utils/ssh.js";
10
10
  import { withFileLock } from "../utils/fileLock.js";
11
11
  import { KASTELL_DIR } from "../utils/paths.js";
12
12
  import { getErrorMessage } from "../utils/errorMapper.js";
13
13
  import { secureMkdirSync, secureWriteFileSync } from "../utils/secureWrite.js";
14
+ import { atomicWriteFileSync } from "../utils/atomicWrite.js";
14
15
  import { ValidationError } from "../utils/errors.js";
15
16
  import { buildEvidenceBatchCommand, getEvidenceSectionFilenames, } from "./evidenceCommands.js";
16
17
  import { EVIDENCE_TIMEOUT_MS } from "../constants.js";
@@ -143,12 +144,8 @@ export async function collectEvidence(serverName, ip, platform, opts) {
143
144
  const sha256SumsPath = join(evidenceDir, "SHA256SUMS");
144
145
  // Write manifest and SHA256SUMS atomically under file lock
145
146
  await withFileLock(manifestPath, () => {
146
- const manifestTmp = manifestPath + ".tmp";
147
- const sha256SumsTmp = sha256SumsPath + ".tmp";
148
- secureWriteFileSync(manifestTmp, JSON.stringify(manifest, null, 2));
149
- renameSync(manifestTmp, manifestPath);
150
- secureWriteFileSync(sha256SumsTmp, sha256SumsContent);
151
- renameSync(sha256SumsTmp, sha256SumsPath);
147
+ atomicWriteFileSync(manifestPath, JSON.stringify(manifest, null, 2));
148
+ atomicWriteFileSync(sha256SumsPath, sha256SumsContent);
152
149
  });
153
150
  }
154
151
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/core/evidence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/core/evidence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EACL,UAAU,EACV,MAAM,GACP,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAErC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AA6CtD,8EAA8E;AAC9E,kFAAkF;AAElF,kFAAkF;AAElF,SAAS,MAAM,CAAC,OAAe;IAC7B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,OAAO,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,KAAK,CAAC;AAC7C,CAAC;AAED,SAAS,iBAAiB,CACxB,GAAW,EACX,QAAgB,EAChB,OAAe,EACf,WAAmB,EACnB,OAA4B;IAE5B,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ;YACR,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,CAAC;YACZ,WAAW;YACX,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,iCAAiC;SAC9C,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACrC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC;QACX,QAAQ;QACR,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;QAC9C,WAAW;QACX,MAAM,EAAE,WAAW;KACpB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,OAA4B;IACnD,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC;SACvC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;SACxC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,IAAqB;IACzC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa;IACjE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,eAAe,CAAC,6DAA6D,EAAE,EAAE,IAAI,EAAE,2CAA2C,EAAE,CAAC,CAAC;QAClJ,CAAC;QACD,OAAO,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kFAAkF;AAElF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,EAAU,EACV,QAAgB,EAChB,IAAqB;IAErB,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAEnC,wDAAwD;IACxD,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,2DAA2D,EAAE,CAAC;IAChG,CAAC;IAED,6BAA6B;IAC7B,IAAI,WAAmB,CAAC;IACxB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IAED,+BAA+B;IAC/B,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,aAAa,OAAO,6CAA6C;aACzE,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,4BAA4B;IAC5B,eAAe,CAAC,WAAW,CAAC,CAAC;IAE7B,qDAAqD;IACrD,MAAM,SAAS,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IACzE,MAAM,YAAY,GAAG,yBAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAChF,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAE1E,iCAAiC;IACjC,IAAI,SAA8C,CAAC;IACnD,IAAI,CAAC;QACH,SAAS,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAClF,CAAC;IAAC,OAAO,MAAe,EAAE,CAAC;QACzB,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,cAAc,eAAe,CAAC,MAAM,CAAC,EAAE;SAC/C,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,eAAe,SAAS,CAAC,MAAM,IAAI,oBAAoB,EAAE;SACjE,CAAC;IACJ,CAAC;IAED,mFAAmF;IACnF,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAChF,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAExD,IAAI,CAAC;QACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,QAAQ;gBAAE,SAAS,CAAC,2CAA2C;YACpE,iBAAiB,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAC9E,CAAC;QAED,iBAAiB;QACjB,MAAM,QAAQ,GAAqB;YACjC,aAAa,EAAE,CAAC;YAChB,MAAM,EAAE,UAAU;YAClB,EAAE;YACF,QAAQ;YACR,WAAW;YACX,WAAW;YACX,KAAK,EAAE,OAAO;SACf,CAAC;QAEF,MAAM,iBAAiB,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAEvD,2DAA2D;QAC3D,MAAM,YAAY,CAAC,YAAY,EAAE,GAAG,EAAE;YACpC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACrE,mBAAmB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,mCAAmC,eAAe,CAAC,GAAG,CAAC,EAAE;SACjE,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;IAE9E,OAAO;QACL,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACJ,WAAW;YACX,UAAU;YACV,QAAQ,EAAE,EAAE;YACZ,QAAQ;YACR,WAAW;YACX,UAAU,EAAE,cAAc;YAC1B,YAAY,EAAE,OAAO,CAAC,MAAM,GAAG,cAAc;YAC7C,YAAY;SACb;KACF,CAAC;AACJ,CAAC"}
@@ -3,6 +3,9 @@ export type { FleetRow, FleetOptions };
3
3
  /**
4
4
  * Get the most recent audit score for a server IP from history.
5
5
  * Returns null when no history exists.
6
+ *
7
+ * Delegates to `loadLatestAudit` so callers share the mtime-cached read path
8
+ * (CQS-04 / simplify C1): N fleet rows = 1 file read, not N.
6
9
  */
7
10
  export declare function getLatestAuditScore(serverIp: string): number | null;
8
11
  /**
@@ -21,8 +24,8 @@ export declare function getWeakestCategory(serverIp: string): Promise<{
21
24
  */
22
25
  export declare function sortRows(rows: FleetRow[], field: string): FleetRow[];
23
26
  /**
24
- * Probe all registered servers in parallel (p-limit 5) and return fleet rows.
25
- * Uses Promise.allSettled — rejected probes become OFFLINE rows, never thrown.
27
+ * Probe all registered servers in parallel (chunkConcurrent, concurrency=5) and return fleet rows.
28
+ * Unreachable servers become OFFLINE rows, never thrown.
26
29
  */
27
30
  export declare function runFleet(options: FleetOptions): Promise<FleetRow[]>;
28
31
  //# sourceMappingURL=fleet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fleet.d.ts","sourceRoot":"","sources":["../../src/core/fleet.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAgB,MAAM,mBAAmB,CAAC;AAI9E,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AAEvC;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKnE;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAmBjD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,CAepE;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAoFzE"}
1
+ {"version":3,"file":"fleet.d.ts","sourceRoot":"","sources":["../../src/core/fleet.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAgB,MAAM,mBAAmB,CAAC;AAI9E,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AAEvC;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEnE;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAmBjD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,CAepE;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CA8FzE"}
@@ -1,21 +1,21 @@
1
- import pLimit from "p-limit";
2
1
  import chalk from "chalk";
2
+ import { chunkConcurrent } from "../utils/concurrency.js";
3
3
  import { getServers } from "../utils/config.js";
4
- import { createSpinner } from "../utils/logger.js";
4
+ import { createSpinner, logger } from "../utils/logger.js";
5
+ import { getErrorMessage } from "../utils/errorMapper.js";
5
6
  import { checkServerHealth } from "./health.js";
6
- import { loadAuditHistory } from "./audit/history.js";
7
+ import { loadLatestAudit } from "./audit/history.js";
7
8
  import { listSnapshots, loadSnapshot } from "./audit/snapshot.js";
8
9
  const VALID_SORT_FIELDS = ["score", "name", "provider"];
9
10
  /**
10
11
  * Get the most recent audit score for a server IP from history.
11
12
  * Returns null when no history exists.
13
+ *
14
+ * Delegates to `loadLatestAudit` so callers share the mtime-cached read path
15
+ * (CQS-04 / simplify C1): N fleet rows = 1 file read, not N.
12
16
  */
13
17
  export function getLatestAuditScore(serverIp) {
14
- const history = loadAuditHistory(serverIp);
15
- if (history.length === 0)
16
- return null;
17
- const sorted = [...history].sort((a, b) => b.timestamp.localeCompare(a.timestamp));
18
- return sorted[0].overallScore;
18
+ return loadLatestAudit(serverIp)?.overallScore ?? null;
19
19
  }
20
20
  /**
21
21
  * Get the lowest-scoring audit category from the latest snapshot for a server.
@@ -66,8 +66,8 @@ export function sortRows(rows, field) {
66
66
  return copy.sort((a, b) => a[key].localeCompare(b[key]));
67
67
  }
68
68
  /**
69
- * Probe all registered servers in parallel (p-limit 5) and return fleet rows.
70
- * Uses Promise.allSettled — rejected probes become OFFLINE rows, never thrown.
69
+ * Probe all registered servers in parallel (chunkConcurrent, concurrency=5) and return fleet rows.
70
+ * Unreachable servers become OFFLINE rows, never thrown.
71
71
  */
72
72
  export async function runFleet(options) {
73
73
  const servers = getServers();
@@ -77,18 +77,30 @@ export async function runFleet(options) {
77
77
  }
78
78
  const spinner = createSpinner(`Probing ${servers.length} server(s)...`);
79
79
  spinner.start();
80
- const limit = pLimit(5);
81
- const tasks = servers.map((server) => limit(async () => {
82
- const health = await checkServerHealth(server);
83
- const auditScore = getLatestAuditScore(server.ip);
84
- const weakest = options.categories ? await getWeakestCategory(server.ip) : undefined;
85
- return { health, auditScore, weakest };
86
- }));
87
- const results = await Promise.allSettled(tasks);
80
+ const safeProbe = async (server) => {
81
+ try {
82
+ const health = await checkServerHealth(server);
83
+ const auditScore = getLatestAuditScore(server.ip);
84
+ const weakest = options.categories ? await getWeakestCategory(server.ip) : null;
85
+ return { health, auditScore, weakest, errorReason: null };
86
+ }
87
+ catch (err) {
88
+ const reason = getErrorMessage(err);
89
+ logger.error("safeProbe failed", { server: server.name, ip: server.ip, error: reason });
90
+ const unreachableHealth = { server, status: "unreachable", responseTime: 0 };
91
+ return {
92
+ health: unreachableHealth,
93
+ auditScore: null,
94
+ weakest: null,
95
+ errorReason: reason,
96
+ };
97
+ }
98
+ };
99
+ const rawResults = await chunkConcurrent(servers, 5, safeProbe);
88
100
  spinner.stop();
89
- const rows = results.map((result, i) => {
101
+ const rows = rawResults.map((result, i) => {
90
102
  const server = servers[i];
91
- if (result.status === "rejected") {
103
+ if (!result || result.health.status === "unreachable") {
92
104
  return {
93
105
  name: server.name,
94
106
  ip: server.ip,
@@ -96,10 +108,10 @@ export async function runFleet(options) {
96
108
  status: "OFFLINE",
97
109
  auditScore: null,
98
110
  responseTime: null,
99
- errorReason: String(result.reason),
111
+ errorReason: result?.errorReason ?? null,
100
112
  };
101
113
  }
102
- const { health, auditScore, weakest } = result.value;
114
+ const { health, auditScore, weakest } = result;
103
115
  let status;
104
116
  if (health.status === "healthy") {
105
117
  status = "ONLINE";
@@ -1 +1 @@
1
- {"version":3,"file":"fleet.js","sourceRoot":"","sources":["../../src/core/fleet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fleet.js","sourceRoot":"","sources":["../../src/core/fleet.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../src/core/notify.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAkDxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;iBAI7B,CAAC;AAMH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,wBAAgB,gBAAgB,IAAI,YAAY,CAE/C;AAgBD,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAM/C;AAED,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAG/C;AAED,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAG/C;AAID,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,aAAa,EAAE,CAAC,CA2B1B;AAID,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU1D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAGrE;AAED,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC,CAczD;AAmBD,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CA6Cf;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAIvD;AAED,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCpE"}
1
+ {"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../src/core/notify.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA+BxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;iBAI7B,CAAC;AAMH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,wBAAgB,gBAAgB,IAAI,YAAY,CAE/C;AAiBD,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAM/C;AAED,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAW/C;AAED,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAW/C;AAID,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,aAAa,EAAE,CAAC,CA2B1B;AAID,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU1D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAGrE;AAED,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC,CAczD;AAmBD,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CA6Cf;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAIvD;AAED,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCpE"}
@@ -5,34 +5,15 @@ import axios from "axios";
5
5
  import chalk from "chalk";
6
6
  import inquirer from "inquirer";
7
7
  import { KASTELL_DIR } from "../utils/paths.js";
8
- import { ValidationError } from "../utils/errors.js";
9
8
  import { createSpinner } from "../utils/logger.js";
10
9
  import { loadNotifyChannels, saveNotifyChannel, removeNotifyChannel } from "./notifyStore.js";
11
10
  import { secureWriteFileSync, secureMkdirSync } from "../utils/secureWrite.js";
12
11
  import { extractReason } from "../utils/errors.js";
12
+ import { assertSafeWebhookUrl, createSafeWebhookAgent, } from "../utils/webhookSecurity.js";
13
13
  // ─── Constants ────────────────────────────────────────────────────────────────
14
14
  const COOLDOWN_FILE = join(KASTELL_DIR, "notify-cooldown.json");
15
15
  const COOLDOWN_MS = 30 * 60 * 1000; // 30 minutes
16
16
  const NOTIFY_TIMEOUT_MS = 10_000;
17
- // ─── SSRF Protection ─────────────────────────────────────────────────────────
18
- const PRIVATE_IP_PATTERNS = [
19
- /^127\./,
20
- /^10\./,
21
- /^192\.168\./,
22
- /^172\.(1[6-9]|2\d|3[01])\./,
23
- /^169\.254\./,
24
- /^0\./,
25
- /^localhost$/i,
26
- ];
27
- function assertSafeWebhookUrl(url) {
28
- const parsed = new URL(url);
29
- if (PRIVATE_IP_PATTERNS.some((p) => p.test(parsed.hostname))) {
30
- throw new ValidationError("Webhook URL points to a private/reserved address", { hint: "Use a public webhook URL" });
31
- }
32
- if (parsed.protocol !== "https:") {
33
- throw new ValidationError("Webhook URL must use HTTPS", { hint: "Webhook URL must start with https://" });
34
- }
35
- }
36
17
  // ─── Schemas ──────────────────────────────────────────────────────────────────
37
18
  const TelegramChannelSchema = z.object({
38
19
  botToken: z.string().regex(/^\d+:[A-Za-z0-9_-]+$/, "Invalid Telegram bot token format"),
@@ -52,9 +33,9 @@ export function loadNotifyConfig() {
52
33
  return loadNotifyChannels();
53
34
  }
54
35
  // ─── Channel Dispatchers ──────────────────────────────────────────────────────
55
- async function sendHttp(url, body) {
36
+ async function sendHttp(url, body, options = {}) {
56
37
  try {
57
- await axios.post(url, body, { timeout: NOTIFY_TIMEOUT_MS });
38
+ await axios.post(url, body, { timeout: NOTIFY_TIMEOUT_MS, ...options });
58
39
  return { success: true };
59
40
  }
60
41
  catch (err) {
@@ -70,11 +51,19 @@ export async function sendTelegram(botToken, chatId, text) {
70
51
  }
71
52
  export async function sendDiscord(webhookUrl, content) {
72
53
  assertSafeWebhookUrl(webhookUrl);
73
- return sendHttp(webhookUrl, { content });
54
+ return sendHttp(webhookUrl, { content }, {
55
+ maxRedirects: 0,
56
+ proxy: false,
57
+ httpsAgent: createSafeWebhookAgent(),
58
+ });
74
59
  }
75
60
  export async function sendSlack(webhookUrl, text) {
76
61
  assertSafeWebhookUrl(webhookUrl);
77
- return sendHttp(webhookUrl, { text });
62
+ return sendHttp(webhookUrl, { text }, {
63
+ maxRedirects: 0,
64
+ proxy: false,
65
+ httpsAgent: createSafeWebhookAgent(),
66
+ });
78
67
  }
79
68
  // ─── Fan-out ──────────────────────────────────────────────────────────────────
80
69
  export async function dispatchNotification(message, config) {
@@ -1 +1 @@
1
- {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/core/notify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/core/notify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { PluginCheck } from "../../plugin/sdk/types.js";
2
+ export interface CheckResult {
3
+ checkId: string;
4
+ status: "pass" | "error" | "timeout";
5
+ output?: string;
6
+ reason?: string;
7
+ }
8
+ export interface ExecutePluginChecksResult {
9
+ results: CheckResult[];
10
+ aborted?: boolean;
11
+ completed: number;
12
+ pending: number;
13
+ }
14
+ export interface ExecutePluginChecksContext {
15
+ ssh: (cmd: string, opts?: {
16
+ timeoutMs?: number;
17
+ signal?: AbortSignal;
18
+ }) => Promise<{
19
+ stdout: string;
20
+ stderr: string;
21
+ code: number;
22
+ }>;
23
+ }
24
+ export declare function executePluginChecks(checks: PluginCheck[], ctx: ExecutePluginChecksContext): Promise<ExecutePluginChecksResult>;
25
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/core/plugin/audit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAaD,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtI;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,WAAW,EAAE,EACrB,GAAG,EAAE,0BAA0B,GAC9B,OAAO,CAAC,yBAAyB,CAAC,CAgCpC"}
@@ -0,0 +1,43 @@
1
+ import { chunkConcurrent } from "../../utils/concurrency.js";
2
+ // Lazy lookup — module-load `parseInt(process.env, …)` traps tests that
3
+ // mutate PLUGIN_AUDIT_PARALLELISM after import. Evaluated per-call so
4
+ // `jest.isolateModules` is no longer required for env variation.
5
+ function getDefaultParallelism() {
6
+ return parseInt(process.env.PLUGIN_AUDIT_PARALLELISM ?? "3", 10);
7
+ }
8
+ // Aggregate ceiling — bounds worst-case latency for N slow checks (LESSONS.md
9
+ // "Plugin Parallel Execution" flags this as mandatory: N × per-check = stall risk).
10
+ const AGGREGATE_TIMEOUT_MS = 120_000;
11
+ export async function executePluginChecks(checks, ctx) {
12
+ const hasMutatingCheck = checks.some((check) => check.checkCommand.kind !== "read");
13
+ const concurrency = hasMutatingCheck ? 1 : getDefaultParallelism();
14
+ const controller = new AbortController();
15
+ const aggregateTimer = setTimeout(() => controller.abort(), AGGREGATE_TIMEOUT_MS);
16
+ const runCheck = async (check) => {
17
+ if (controller.signal.aborted) {
18
+ return { checkId: check.id, status: "timeout" };
19
+ }
20
+ try {
21
+ const ssh = await ctx.ssh(check.checkCommand.cmd, { timeoutMs: 15000, signal: controller.signal });
22
+ if (ssh.code !== 0) {
23
+ return { checkId: check.id, status: "error", reason: ssh.stderr || `Exit code ${ssh.code}` };
24
+ }
25
+ return { checkId: check.id, status: "pass", output: ssh.stdout };
26
+ }
27
+ catch (err) {
28
+ if (controller.signal.aborted) {
29
+ return { checkId: check.id, status: "timeout" };
30
+ }
31
+ return { checkId: check.id, status: "error", reason: err instanceof Error ? err.message : String(err) };
32
+ }
33
+ };
34
+ try {
35
+ const results = await chunkConcurrent(checks, concurrency, runCheck);
36
+ const completed = results.filter((r) => r.status !== "timeout").length;
37
+ return { results, completed, pending: checks.length - completed };
38
+ }
39
+ finally {
40
+ clearTimeout(aggregateTimer);
41
+ }
42
+ }
43
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/core/plugin/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAiB7D,wEAAwE;AACxE,sEAAsE;AACtE,iEAAiE;AACjE,SAAS,qBAAqB;IAC5B,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,8EAA8E;AAC9E,oFAAoF;AACpF,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAMrC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAqB,EACrB,GAA+B;IAE/B,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACpF,MAAM,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC;IAEnE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAElF,MAAM,QAAQ,GAAG,KAAK,EAAE,KAAkB,EAAwB,EAAE;QAClE,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC9B,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAClD,CAAC;QACD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YACnG,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACnB,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,aAAa,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/F,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;QACnE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC9B,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YAClD,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1G,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;QACvE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;IACpE,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,cAAc,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC"}
@@ -5,20 +5,32 @@ export interface PluginOperationResult {
5
5
  }
6
6
  export declare function installPlugin(name: string, version?: string): Promise<PluginOperationResult>;
7
7
  export declare function removePlugin(name: string): Promise<PluginOperationResult>;
8
- export interface PluginListEntry {
8
+ interface PluginListEntryBase {
9
9
  name: string;
10
10
  version: string;
11
11
  prefix: string;
12
+ }
13
+ export type PluginListEntry = (PluginListEntryBase & {
14
+ status: "loaded";
12
15
  checks: number;
13
- status: "loaded" | "failed";
14
- commands?: {
16
+ commands: {
15
17
  name: string;
16
18
  }[];
17
- mcpTools?: {
19
+ mcpTools: {
18
20
  name: string;
19
21
  }[];
20
- reason?: string;
21
- }
22
+ }) | (PluginListEntryBase & {
23
+ status: "failed";
24
+ checks: 0;
25
+ commands: [];
26
+ mcpTools: [];
27
+ reason: string;
28
+ }) | (PluginListEntryBase & {
29
+ status: "disabled";
30
+ checks: 0;
31
+ commands: [];
32
+ mcpTools: [];
33
+ });
22
34
  export declare function listPlugins(): PluginListEntry[];
23
35
  export interface PluginValidationResult {
24
36
  name: string;
@@ -26,4 +38,5 @@ export interface PluginValidationResult {
26
38
  reason?: string;
27
39
  }
28
40
  export declare function validatePlugins(name?: string): PluginValidationResult[];
41
+ export {};
29
42
  //# sourceMappingURL=plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/core/plugin.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAwBD,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,CAAC,CA6BhC;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA4B/E;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,WAAW,IAAI,eAAe,EAAE,CAW/C;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,sBAAsB,EAAE,CAoBvE"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/core/plugin.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAwBD,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,CAAC,CA6BhC;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA4B/E;AAOD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,eAAe,GACvB,CAAC,mBAAmB,GAAG;IACrB,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7B,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9B,CAAC,GACF,CAAC,mBAAmB,GAAG;IACrB,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,CAAC,CAAC;IACV,QAAQ,EAAE,EAAE,CAAC;IACb,QAAQ,EAAE,EAAE,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,GACF,CAAC,mBAAmB,GAAG;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,CAAC,CAAC;IACV,QAAQ,EAAE,EAAE,CAAC;IACb,QAAQ,EAAE,EAAE,CAAC;CACd,CAAC,CAAC;AAiCP,wBAAgB,WAAW,IAAI,eAAe,EAAE,CAE/C;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAUD,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,sBAAsB,EAAE,CAYvE"}
@@ -1,4 +1,5 @@
1
1
  import { spawn } from "child_process";
2
+ import { PLUGIN_STATUS_LOADED } from "../plugin/registry.js";
2
3
  import { existsSync } from "fs";
3
4
  import { join } from "path";
4
5
  import { getPluginRegistry, mapRegistryPlugins, deletePlugin as deletePluginFromRegistry, savePluginCache } from "../plugin/registry.js";
@@ -71,21 +72,49 @@ export async function removePlugin(name) {
71
72
  };
72
73
  }
73
74
  deletePluginFromRegistry(name);
74
- const manifests = mapRegistryPlugins((_, entry) => entry.status === "loaded" ? entry.manifest : null).filter((m) => m !== null);
75
+ const manifests = mapRegistryPlugins((_, entry) => entry.status === PLUGIN_STATUS_LOADED ? entry.manifest : null).filter((m) => m !== null);
75
76
  savePluginCache(manifests);
76
77
  return { success: true, name };
77
78
  }
78
- export function listPlugins() {
79
- return mapRegistryPlugins((_, entry) => ({
79
+ // Discriminator-narrowing helpers — P139 simplify C3/A12: replace
80
+ // `entry.status === PLUGIN_STATUS_LOADED ? ... : ...` ternaries with structural narrowing.
81
+ function toListEntry(_, entry) {
82
+ const base = {
80
83
  name: entry.manifest.name,
81
84
  version: entry.manifest.version,
82
85
  prefix: entry.manifest.checkPrefix,
83
- checks: entry.checks.length,
84
- status: entry.status,
85
- commands: entry.commands ?? [],
86
- mcpTools: entry.mcpTools ?? [],
87
- ...(entry.reason ? { reason: entry.reason } : {}),
88
- }));
86
+ };
87
+ if (entry.status === PLUGIN_STATUS_LOADED) {
88
+ return {
89
+ ...base,
90
+ status: "loaded",
91
+ checks: entry.checks.length,
92
+ commands: entry.commands ?? [],
93
+ mcpTools: entry.mcpTools ?? [],
94
+ };
95
+ }
96
+ if (entry.status === "failed") {
97
+ return {
98
+ ...base,
99
+ status: "failed",
100
+ checks: 0,
101
+ commands: [],
102
+ mcpTools: [],
103
+ reason: entry.reason,
104
+ };
105
+ }
106
+ // disabled
107
+ return { ...base, status: "disabled", checks: 0, commands: [], mcpTools: [] };
108
+ }
109
+ export function listPlugins() {
110
+ return mapRegistryPlugins(toListEntry);
111
+ }
112
+ function toValidationResult(name, entry) {
113
+ return {
114
+ name: entry.manifest.name,
115
+ valid: entry.status === PLUGIN_STATUS_LOADED,
116
+ ...(entry.status === "failed" ? { reason: entry.reason } : {}),
117
+ };
89
118
  }
90
119
  export function validatePlugins(name) {
91
120
  const registry = getPluginRegistry();
@@ -94,16 +123,8 @@ export function validatePlugins(name) {
94
123
  if (!entry) {
95
124
  return [{ name, valid: false, reason: "Plugin not found in registry" }];
96
125
  }
97
- return [{
98
- name: entry.manifest.name,
99
- valid: entry.status === "loaded",
100
- ...(entry.reason ? { reason: entry.reason } : {}),
101
- }];
126
+ return [toValidationResult(name, entry)];
102
127
  }
103
- return mapRegistryPlugins((_, entry) => ({
104
- name: entry.manifest.name,
105
- valid: entry.status === "loaded",
106
- ...(entry.reason ? { reason: entry.reason } : {}),
107
- }));
128
+ return mapRegistryPlugins(toValidationResult);
108
129
  }
109
130
  //# sourceMappingURL=plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/core/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,YAAY,IAAI,wBAAwB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEzI,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEtE,MAAM,eAAe,GAAG,2BAA2B,CAAC;AACpD,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAQ7B,SAAS,MAAM,CAAC,IAAc;IAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE;YAC9B,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACtC,IAAI,MAAM,CAAC,MAAM,GAAG,UAAU;oBAAE,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5D,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;YAC9B,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,OAAgB;IAEhB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,uDAAuD,EAAE,CAAC;IAClG,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;IACtE,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAElF,IAAI,aAAa,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,IAAI;YACJ,KAAK,EAAE,4BAA4B,aAAa,CAAC,IAAI,MAAM,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE;SAC7G,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,WAAW,EAAE,CAAC;IAEvC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,MAAM,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;QAC3D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACpD,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,uDAAuD,EAAE,CAAC;IAClG,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,IAAI,iBAAiB,EAAE,CAAC;IAC3E,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAE1E,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,IAAI;YACJ,KAAK,EAAE,8BAA8B,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE;SACjG,CAAC;IACJ,CAAC;IAED,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAE/B,MAAM,SAAS,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAChD,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAClD,CAAC,MAAM,CAAC,CAAC,CAAC,EAAuB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACjD,eAAe,CAAC,SAAS,CAAC,CAAC;IAE3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAaD,MAAM,UAAU,WAAW;IACzB,OAAO,kBAAkB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;QACzB,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO;QAC/B,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;QAC3B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;QAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;QAC9B,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAC,CAAC,CAAC;AACN,CAAC;AAQD,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IAErC,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,CAAC;gBACN,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;gBACzB,KAAK,EAAE,KAAK,CAAC,MAAM,KAAK,QAAQ;gBAChC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,kBAAkB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;QACzB,KAAK,EAAE,KAAK,CAAC,MAAM,KAAK,QAAQ;QAChC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAC,CAAC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/core/plugin.ts"],"names":[],"mappings":"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"}