@daniel.stefan/metalink 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. package/README.md +160 -0
  2. package/package.json +96 -0
  3. package/packages/cli/dist/bin/cli.d.ts +3 -0
  4. package/packages/cli/dist/bin/cli.d.ts.map +1 -0
  5. package/packages/cli/dist/bin/cli.js +4 -0
  6. package/packages/cli/dist/bin/cli.js.map +1 -0
  7. package/packages/cli/dist/commands/config/init.d.ts +9 -0
  8. package/packages/cli/dist/commands/config/init.d.ts.map +1 -0
  9. package/packages/cli/dist/commands/config/init.js +38 -0
  10. package/packages/cli/dist/commands/config/init.js.map +1 -0
  11. package/packages/cli/dist/commands/config/validate.d.ts +9 -0
  12. package/packages/cli/dist/commands/config/validate.d.ts.map +1 -0
  13. package/packages/cli/dist/commands/config/validate.js +34 -0
  14. package/packages/cli/dist/commands/config/validate.js.map +1 -0
  15. package/packages/cli/dist/commands/daemon/restart.d.ts +15 -0
  16. package/packages/cli/dist/commands/daemon/restart.d.ts.map +1 -0
  17. package/packages/cli/dist/commands/daemon/restart.js +184 -0
  18. package/packages/cli/dist/commands/daemon/restart.js.map +1 -0
  19. package/packages/cli/dist/commands/daemon/start.d.ts +7 -0
  20. package/packages/cli/dist/commands/daemon/start.d.ts.map +1 -0
  21. package/packages/cli/dist/commands/daemon/start.js +85 -0
  22. package/packages/cli/dist/commands/daemon/start.js.map +1 -0
  23. package/packages/cli/dist/commands/daemon/status.d.ts +7 -0
  24. package/packages/cli/dist/commands/daemon/status.d.ts.map +1 -0
  25. package/packages/cli/dist/commands/daemon/status.js +69 -0
  26. package/packages/cli/dist/commands/daemon/status.js.map +1 -0
  27. package/packages/cli/dist/commands/daemon/stop.d.ts +8 -0
  28. package/packages/cli/dist/commands/daemon/stop.d.ts.map +1 -0
  29. package/packages/cli/dist/commands/daemon/stop.js +77 -0
  30. package/packages/cli/dist/commands/daemon/stop.js.map +1 -0
  31. package/packages/cli/dist/commands/import/mcpm.d.ts +10 -0
  32. package/packages/cli/dist/commands/import/mcpm.d.ts.map +1 -0
  33. package/packages/cli/dist/commands/import/mcpm.js +58 -0
  34. package/packages/cli/dist/commands/import/mcpm.js.map +1 -0
  35. package/packages/cli/dist/commands/safety/add-risky-pattern.d.ts +16 -0
  36. package/packages/cli/dist/commands/safety/add-risky-pattern.d.ts.map +1 -0
  37. package/packages/cli/dist/commands/safety/add-risky-pattern.js +72 -0
  38. package/packages/cli/dist/commands/safety/add-risky-pattern.js.map +1 -0
  39. package/packages/cli/dist/commands/safety/add-risky.d.ts +12 -0
  40. package/packages/cli/dist/commands/safety/add-risky.d.ts.map +1 -0
  41. package/packages/cli/dist/commands/safety/add-risky.js +52 -0
  42. package/packages/cli/dist/commands/safety/add-risky.js.map +1 -0
  43. package/packages/cli/dist/commands/safety/add-safe-pattern.d.ts +16 -0
  44. package/packages/cli/dist/commands/safety/add-safe-pattern.d.ts.map +1 -0
  45. package/packages/cli/dist/commands/safety/add-safe-pattern.js +72 -0
  46. package/packages/cli/dist/commands/safety/add-safe-pattern.js.map +1 -0
  47. package/packages/cli/dist/commands/safety/add-safe.d.ts +12 -0
  48. package/packages/cli/dist/commands/safety/add-safe.d.ts.map +1 -0
  49. package/packages/cli/dist/commands/safety/add-safe.js +52 -0
  50. package/packages/cli/dist/commands/safety/add-safe.js.map +1 -0
  51. package/packages/cli/dist/commands/safety/check.d.ts +9 -0
  52. package/packages/cli/dist/commands/safety/check.d.ts.map +1 -0
  53. package/packages/cli/dist/commands/safety/check.js +36 -0
  54. package/packages/cli/dist/commands/safety/check.js.map +1 -0
  55. package/packages/cli/dist/commands/safety/export.d.ts +10 -0
  56. package/packages/cli/dist/commands/safety/export.d.ts.map +1 -0
  57. package/packages/cli/dist/commands/safety/export.js +48 -0
  58. package/packages/cli/dist/commands/safety/export.js.map +1 -0
  59. package/packages/cli/dist/commands/safety/import.d.ts +12 -0
  60. package/packages/cli/dist/commands/safety/import.d.ts.map +1 -0
  61. package/packages/cli/dist/commands/safety/import.js +78 -0
  62. package/packages/cli/dist/commands/safety/import.js.map +1 -0
  63. package/packages/cli/dist/commands/safety/index.d.ts +8 -0
  64. package/packages/cli/dist/commands/safety/index.d.ts.map +1 -0
  65. package/packages/cli/dist/commands/safety/index.js +46 -0
  66. package/packages/cli/dist/commands/safety/index.js.map +1 -0
  67. package/packages/cli/dist/commands/safety/list.d.ts +6 -0
  68. package/packages/cli/dist/commands/safety/list.d.ts.map +1 -0
  69. package/packages/cli/dist/commands/safety/list.js +77 -0
  70. package/packages/cli/dist/commands/safety/list.js.map +1 -0
  71. package/packages/cli/dist/commands/safety/remove.d.ts +9 -0
  72. package/packages/cli/dist/commands/safety/remove.d.ts.map +1 -0
  73. package/packages/cli/dist/commands/safety/remove.js +46 -0
  74. package/packages/cli/dist/commands/safety/remove.js.map +1 -0
  75. package/packages/cli/dist/commands/safety/reset.d.ts +9 -0
  76. package/packages/cli/dist/commands/safety/reset.d.ts.map +1 -0
  77. package/packages/cli/dist/commands/safety/reset.js +46 -0
  78. package/packages/cli/dist/commands/safety/reset.js.map +1 -0
  79. package/packages/cli/dist/commands/safety/validate.d.ts +9 -0
  80. package/packages/cli/dist/commands/safety/validate.d.ts.map +1 -0
  81. package/packages/cli/dist/commands/safety/validate.js +51 -0
  82. package/packages/cli/dist/commands/safety/validate.js.map +1 -0
  83. package/packages/cli/dist/commands/secret/get.d.ts +9 -0
  84. package/packages/cli/dist/commands/secret/get.d.ts.map +1 -0
  85. package/packages/cli/dist/commands/secret/get.js +26 -0
  86. package/packages/cli/dist/commands/secret/get.js.map +1 -0
  87. package/packages/cli/dist/commands/secret/set.d.ts +10 -0
  88. package/packages/cli/dist/commands/secret/set.d.ts.map +1 -0
  89. package/packages/cli/dist/commands/secret/set.js +22 -0
  90. package/packages/cli/dist/commands/secret/set.js.map +1 -0
  91. package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.d.ts +2 -0
  92. package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.d.ts.map +1 -0
  93. package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.js +234 -0
  94. package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.js.map +1 -0
  95. package/packages/cli/dist/commands/server/add.d.ts +14 -0
  96. package/packages/cli/dist/commands/server/add.d.ts.map +1 -0
  97. package/packages/cli/dist/commands/server/add.js +86 -0
  98. package/packages/cli/dist/commands/server/add.js.map +1 -0
  99. package/packages/cli/dist/commands/server/available.d.ts +10 -0
  100. package/packages/cli/dist/commands/server/available.d.ts.map +1 -0
  101. package/packages/cli/dist/commands/server/available.js +62 -0
  102. package/packages/cli/dist/commands/server/available.js.map +1 -0
  103. package/packages/cli/dist/commands/server/debug.d.ts +18 -0
  104. package/packages/cli/dist/commands/server/debug.d.ts.map +1 -0
  105. package/packages/cli/dist/commands/server/debug.js +165 -0
  106. package/packages/cli/dist/commands/server/debug.js.map +1 -0
  107. package/packages/cli/dist/commands/server/info.d.ts +13 -0
  108. package/packages/cli/dist/commands/server/info.d.ts.map +1 -0
  109. package/packages/cli/dist/commands/server/info.js +62 -0
  110. package/packages/cli/dist/commands/server/info.js.map +1 -0
  111. package/packages/cli/dist/commands/server/list.d.ts +10 -0
  112. package/packages/cli/dist/commands/server/list.d.ts.map +1 -0
  113. package/packages/cli/dist/commands/server/list.js +105 -0
  114. package/packages/cli/dist/commands/server/list.js.map +1 -0
  115. package/packages/cli/dist/commands/server/refresh-tools.d.ts +13 -0
  116. package/packages/cli/dist/commands/server/refresh-tools.d.ts.map +1 -0
  117. package/packages/cli/dist/commands/server/refresh-tools.js +46 -0
  118. package/packages/cli/dist/commands/server/refresh-tools.js.map +1 -0
  119. package/packages/cli/dist/commands/server/remove.d.ts +12 -0
  120. package/packages/cli/dist/commands/server/remove.d.ts.map +1 -0
  121. package/packages/cli/dist/commands/server/remove.js +39 -0
  122. package/packages/cli/dist/commands/server/remove.js.map +1 -0
  123. package/packages/cli/dist/commands/server/restart.d.ts +9 -0
  124. package/packages/cli/dist/commands/server/restart.d.ts.map +1 -0
  125. package/packages/cli/dist/commands/server/restart.js +30 -0
  126. package/packages/cli/dist/commands/server/restart.js.map +1 -0
  127. package/packages/cli/dist/commands/server/start.d.ts +9 -0
  128. package/packages/cli/dist/commands/server/start.d.ts.map +1 -0
  129. package/packages/cli/dist/commands/server/start.js +37 -0
  130. package/packages/cli/dist/commands/server/start.js.map +1 -0
  131. package/packages/cli/dist/commands/server/status.d.ts +9 -0
  132. package/packages/cli/dist/commands/server/status.d.ts.map +1 -0
  133. package/packages/cli/dist/commands/server/status.js +30 -0
  134. package/packages/cli/dist/commands/server/status.js.map +1 -0
  135. package/packages/cli/dist/commands/server/stop.d.ts +9 -0
  136. package/packages/cli/dist/commands/server/stop.d.ts.map +1 -0
  137. package/packages/cli/dist/commands/server/stop.js +31 -0
  138. package/packages/cli/dist/commands/server/stop.js.map +1 -0
  139. package/packages/cli/dist/commands/server/validate.d.ts +15 -0
  140. package/packages/cli/dist/commands/server/validate.d.ts.map +1 -0
  141. package/packages/cli/dist/commands/server/validate.js +87 -0
  142. package/packages/cli/dist/commands/server/validate.js.map +1 -0
  143. package/packages/cli/dist/commands/stdio.d.ts +36 -0
  144. package/packages/cli/dist/commands/stdio.d.ts.map +1 -0
  145. package/packages/cli/dist/commands/stdio.js +85 -0
  146. package/packages/cli/dist/commands/stdio.js.map +1 -0
  147. package/packages/cli/dist/commands/tool/execute-confirm.d.ts +12 -0
  148. package/packages/cli/dist/commands/tool/execute-confirm.d.ts.map +1 -0
  149. package/packages/cli/dist/commands/tool/execute-confirm.js +98 -0
  150. package/packages/cli/dist/commands/tool/execute-confirm.js.map +1 -0
  151. package/packages/cli/dist/commands/tool/execute.d.ts +12 -0
  152. package/packages/cli/dist/commands/tool/execute.d.ts.map +1 -0
  153. package/packages/cli/dist/commands/tool/execute.js +55 -0
  154. package/packages/cli/dist/commands/tool/execute.js.map +1 -0
  155. package/packages/cli/dist/commands/tool/list.d.ts +13 -0
  156. package/packages/cli/dist/commands/tool/list.d.ts.map +1 -0
  157. package/packages/cli/dist/commands/tool/list.js +91 -0
  158. package/packages/cli/dist/commands/tool/list.js.map +1 -0
  159. package/packages/cli/dist/commands/tool/search.d.ts +12 -0
  160. package/packages/cli/dist/commands/tool/search.d.ts.map +1 -0
  161. package/packages/cli/dist/commands/tool/search.js +87 -0
  162. package/packages/cli/dist/commands/tool/search.js.map +1 -0
  163. package/packages/cli/dist/index.d.ts +2 -0
  164. package/packages/cli/dist/index.d.ts.map +1 -0
  165. package/packages/cli/dist/index.js +9 -0
  166. package/packages/cli/dist/index.js.map +1 -0
  167. package/packages/cli/dist/utils/daemon-checker.d.ts +18 -0
  168. package/packages/cli/dist/utils/daemon-checker.d.ts.map +1 -0
  169. package/packages/cli/dist/utils/daemon-checker.js +69 -0
  170. package/packages/cli/dist/utils/daemon-checker.js.map +1 -0
  171. package/packages/cli/dist/utils/daemon-endpoint.d.ts +7 -0
  172. package/packages/cli/dist/utils/daemon-endpoint.d.ts.map +1 -0
  173. package/packages/cli/dist/utils/daemon-endpoint.js +13 -0
  174. package/packages/cli/dist/utils/daemon-endpoint.js.map +1 -0
  175. package/packages/cli/dist/utils/get-configured-port.d.ts +43 -0
  176. package/packages/cli/dist/utils/get-configured-port.d.ts.map +1 -0
  177. package/packages/cli/dist/utils/get-configured-port.js +141 -0
  178. package/packages/cli/dist/utils/get-configured-port.js.map +1 -0
  179. package/packages/cli/dist/utils/stdio-bridge.d.ts +48 -0
  180. package/packages/cli/dist/utils/stdio-bridge.d.ts.map +1 -0
  181. package/packages/cli/dist/utils/stdio-bridge.js +181 -0
  182. package/packages/cli/dist/utils/stdio-bridge.js.map +1 -0
  183. package/packages/cli/package.json +48 -0
  184. package/packages/core/dist/config/defaults.d.ts +36 -0
  185. package/packages/core/dist/config/defaults.d.ts.map +1 -0
  186. package/packages/core/dist/config/defaults.js +324 -0
  187. package/packages/core/dist/config/defaults.js.map +1 -0
  188. package/packages/core/dist/config/index.d.ts +9 -0
  189. package/packages/core/dist/config/index.d.ts.map +1 -0
  190. package/packages/core/dist/config/index.js +14 -0
  191. package/packages/core/dist/config/index.js.map +1 -0
  192. package/packages/core/dist/config/loader.d.ts +269 -0
  193. package/packages/core/dist/config/loader.d.ts.map +1 -0
  194. package/packages/core/dist/config/loader.js +777 -0
  195. package/packages/core/dist/config/loader.js.map +1 -0
  196. package/packages/core/dist/config/registry.d.ts +212 -0
  197. package/packages/core/dist/config/registry.d.ts.map +1 -0
  198. package/packages/core/dist/config/registry.js +754 -0
  199. package/packages/core/dist/config/registry.js.map +1 -0
  200. package/packages/core/dist/config/schema.d.ts +4352 -0
  201. package/packages/core/dist/config/schema.d.ts.map +1 -0
  202. package/packages/core/dist/config/schema.js +267 -0
  203. package/packages/core/dist/config/schema.js.map +1 -0
  204. package/packages/core/dist/daemon.d.ts +7 -0
  205. package/packages/core/dist/daemon.d.ts.map +1 -0
  206. package/packages/core/dist/daemon.js +116 -0
  207. package/packages/core/dist/daemon.js.map +1 -0
  208. package/packages/core/dist/http-client-retry.d.ts +67 -0
  209. package/packages/core/dist/http-client-retry.d.ts.map +1 -0
  210. package/packages/core/dist/http-client-retry.js +133 -0
  211. package/packages/core/dist/http-client-retry.js.map +1 -0
  212. package/packages/core/dist/http-client-updated.d.ts +147 -0
  213. package/packages/core/dist/http-client-updated.d.ts.map +1 -0
  214. package/packages/core/dist/http-client-updated.js +452 -0
  215. package/packages/core/dist/http-client-updated.js.map +1 -0
  216. package/packages/core/dist/http-client.d.ts +207 -0
  217. package/packages/core/dist/http-client.d.ts.map +1 -0
  218. package/packages/core/dist/http-client.js +704 -0
  219. package/packages/core/dist/http-client.js.map +1 -0
  220. package/packages/core/dist/index.d.ts +13 -0
  221. package/packages/core/dist/index.d.ts.map +1 -0
  222. package/packages/core/dist/index.js +23 -0
  223. package/packages/core/dist/index.js.map +1 -0
  224. package/packages/core/dist/logging/index.d.ts +46 -0
  225. package/packages/core/dist/logging/index.d.ts.map +1 -0
  226. package/packages/core/dist/logging/index.js +74 -0
  227. package/packages/core/dist/logging/index.js.map +1 -0
  228. package/packages/core/dist/metrics/index.d.ts +339 -0
  229. package/packages/core/dist/metrics/index.d.ts.map +1 -0
  230. package/packages/core/dist/metrics/index.js +792 -0
  231. package/packages/core/dist/metrics/index.js.map +1 -0
  232. package/packages/core/dist/plugins/index.d.ts +49 -0
  233. package/packages/core/dist/plugins/index.d.ts.map +1 -0
  234. package/packages/core/dist/plugins/index.js +82 -0
  235. package/packages/core/dist/plugins/index.js.map +1 -0
  236. package/packages/core/dist/secrets/index.d.ts +6 -0
  237. package/packages/core/dist/secrets/index.d.ts.map +1 -0
  238. package/packages/core/dist/secrets/index.js +5 -0
  239. package/packages/core/dist/secrets/index.js.map +1 -0
  240. package/packages/core/dist/secrets/keyring.d.ts +54 -0
  241. package/packages/core/dist/secrets/keyring.d.ts.map +1 -0
  242. package/packages/core/dist/secrets/keyring.js +141 -0
  243. package/packages/core/dist/secrets/keyring.js.map +1 -0
  244. package/packages/core/dist/server/batch-executor.d.ts +83 -0
  245. package/packages/core/dist/server/batch-executor.d.ts.map +1 -0
  246. package/packages/core/dist/server/batch-executor.js +291 -0
  247. package/packages/core/dist/server/batch-executor.js.map +1 -0
  248. package/packages/core/dist/server/circuit-breaker.d.ts +215 -0
  249. package/packages/core/dist/server/circuit-breaker.d.ts.map +1 -0
  250. package/packages/core/dist/server/circuit-breaker.js +330 -0
  251. package/packages/core/dist/server/circuit-breaker.js.map +1 -0
  252. package/packages/core/dist/server/client-detection.d.ts +40 -0
  253. package/packages/core/dist/server/client-detection.d.ts.map +1 -0
  254. package/packages/core/dist/server/client-detection.js +242 -0
  255. package/packages/core/dist/server/client-detection.js.map +1 -0
  256. package/packages/core/dist/server/client-profiles.d.ts +102 -0
  257. package/packages/core/dist/server/client-profiles.d.ts.map +1 -0
  258. package/packages/core/dist/server/client-profiles.js +254 -0
  259. package/packages/core/dist/server/client-profiles.js.map +1 -0
  260. package/packages/core/dist/server/http.d.ts +386 -0
  261. package/packages/core/dist/server/http.d.ts.map +1 -0
  262. package/packages/core/dist/server/http.js +4253 -0
  263. package/packages/core/dist/server/http.js.map +1 -0
  264. package/packages/core/dist/server/index.d.ts +7 -0
  265. package/packages/core/dist/server/index.d.ts.map +1 -0
  266. package/packages/core/dist/server/index.js +6 -0
  267. package/packages/core/dist/server/index.js.map +1 -0
  268. package/packages/core/dist/server/manager.d.ts +458 -0
  269. package/packages/core/dist/server/manager.d.ts.map +1 -0
  270. package/packages/core/dist/server/manager.js +3255 -0
  271. package/packages/core/dist/server/manager.js.map +1 -0
  272. package/packages/core/dist/server/managers/HttpConnectionManager.d.ts +69 -0
  273. package/packages/core/dist/server/managers/HttpConnectionManager.d.ts.map +1 -0
  274. package/packages/core/dist/server/managers/HttpConnectionManager.js +214 -0
  275. package/packages/core/dist/server/managers/HttpConnectionManager.js.map +1 -0
  276. package/packages/core/dist/server/managers/ProcessManager.d.ts +128 -0
  277. package/packages/core/dist/server/managers/ProcessManager.d.ts.map +1 -0
  278. package/packages/core/dist/server/managers/ProcessManager.js +443 -0
  279. package/packages/core/dist/server/managers/ProcessManager.js.map +1 -0
  280. package/packages/core/dist/server/managers/SchemaCacheManager.d.ts +152 -0
  281. package/packages/core/dist/server/managers/SchemaCacheManager.d.ts.map +1 -0
  282. package/packages/core/dist/server/managers/SchemaCacheManager.js +426 -0
  283. package/packages/core/dist/server/managers/SchemaCacheManager.js.map +1 -0
  284. package/packages/core/dist/server/managers/index.d.ts +9 -0
  285. package/packages/core/dist/server/managers/index.d.ts.map +1 -0
  286. package/packages/core/dist/server/managers/index.js +9 -0
  287. package/packages/core/dist/server/managers/index.js.map +1 -0
  288. package/packages/core/dist/server/metrics.d.ts +134 -0
  289. package/packages/core/dist/server/metrics.d.ts.map +1 -0
  290. package/packages/core/dist/server/metrics.js +273 -0
  291. package/packages/core/dist/server/metrics.js.map +1 -0
  292. package/packages/core/dist/server/prompts.d.ts +58 -0
  293. package/packages/core/dist/server/prompts.d.ts.map +1 -0
  294. package/packages/core/dist/server/prompts.js +405 -0
  295. package/packages/core/dist/server/prompts.js.map +1 -0
  296. package/packages/core/dist/server/protocol-versions.d.ts +49 -0
  297. package/packages/core/dist/server/protocol-versions.d.ts.map +1 -0
  298. package/packages/core/dist/server/protocol-versions.js +173 -0
  299. package/packages/core/dist/server/protocol-versions.js.map +1 -0
  300. package/packages/core/dist/server/resources.d.ts +64 -0
  301. package/packages/core/dist/server/resources.d.ts.map +1 -0
  302. package/packages/core/dist/server/resources.js +243 -0
  303. package/packages/core/dist/server/resources.js.map +1 -0
  304. package/packages/core/dist/server/schema-store.d.ts +84 -0
  305. package/packages/core/dist/server/schema-store.d.ts.map +1 -0
  306. package/packages/core/dist/server/schema-store.js +234 -0
  307. package/packages/core/dist/server/schema-store.js.map +1 -0
  308. package/packages/core/dist/server/schema-validator.d.ts +51 -0
  309. package/packages/core/dist/server/schema-validator.d.ts.map +1 -0
  310. package/packages/core/dist/server/schema-validator.js +208 -0
  311. package/packages/core/dist/server/schema-validator.js.map +1 -0
  312. package/packages/core/dist/server/token-calculator.d.ts +44 -0
  313. package/packages/core/dist/server/token-calculator.d.ts.map +1 -0
  314. package/packages/core/dist/server/token-calculator.js +53 -0
  315. package/packages/core/dist/server/token-calculator.js.map +1 -0
  316. package/packages/core/dist/server/types.d.ts +45 -0
  317. package/packages/core/dist/server/types.d.ts.map +1 -0
  318. package/packages/core/dist/server/types.js +5 -0
  319. package/packages/core/dist/server/types.js.map +1 -0
  320. package/packages/core/dist/utils/file-lock.d.ts +73 -0
  321. package/packages/core/dist/utils/file-lock.d.ts.map +1 -0
  322. package/packages/core/dist/utils/file-lock.js +235 -0
  323. package/packages/core/dist/utils/file-lock.js.map +1 -0
  324. package/packages/core/package.json +36 -0
  325. package/packages/dashboard/dist/assets/index-B7hvkCMu.css +1 -0
  326. package/packages/dashboard/dist/assets/index-yZhLPpzr.js +1 -0
  327. package/packages/dashboard/dist/index.html +14 -0
  328. package/packages/dashboard/package.json +24 -0
  329. package/packages/shared/dist/version.d.ts +2 -0
  330. package/packages/shared/dist/version.d.ts.map +1 -0
  331. package/packages/shared/dist/version.js +2 -0
  332. package/packages/shared/dist/version.js.map +1 -0
  333. package/packages/shared/package.json +18 -0
@@ -0,0 +1,85 @@
1
+ import { Command } from '@oclif/core';
2
+ import { execSync } from 'child_process';
3
+ import * as fs from 'fs';
4
+ import { getConfiguredPort, isLaunchAgentLoaded, getLaunchAgentPlistPath, launchctlLoad, getLaunchdPid, LAUNCHD_SERVICE_NAME } from '../../utils/get-configured-port.js';
5
+ class DaemonStart extends Command {
6
+ async run() {
7
+ try {
8
+ const port = getConfiguredPort();
9
+ const plistPath = getLaunchAgentPlistPath();
10
+ // Check if plist exists
11
+ if (!fs.existsSync(plistPath)) {
12
+ this.error(`LaunchAgent plist not found: ${plistPath}\n\n` +
13
+ 'The plist file is required for daemon management.\n' +
14
+ 'Run ./auto-deploy.sh to set up the LaunchAgent.');
15
+ return;
16
+ }
17
+ // Check if already loaded and running
18
+ if (isLaunchAgentLoaded()) {
19
+ const pid = getLaunchdPid();
20
+ if (pid) {
21
+ this.log(`Daemon already running (PID: ${pid}, port: ${port})`);
22
+ this.log(`Service: ${LAUNCHD_SERVICE_NAME}`);
23
+ return;
24
+ }
25
+ // Loaded but not running - try to kickstart
26
+ this.log('LaunchAgent loaded but daemon not running, restarting...');
27
+ try {
28
+ execSync(`launchctl kickstart -k gui/$(id -u)/${LAUNCHD_SERVICE_NAME}`, {
29
+ encoding: 'utf-8',
30
+ stdio: 'pipe'
31
+ });
32
+ // Wait for startup
33
+ await this.waitForDaemon(port, 5000);
34
+ const newPid = getLaunchdPid();
35
+ this.log(`Daemon started (PID: ${newPid}, port: ${port})`);
36
+ return;
37
+ }
38
+ catch {
39
+ this.warn('Kickstart failed, trying unload/load cycle...');
40
+ }
41
+ }
42
+ // Load the LaunchAgent
43
+ this.log(`Starting daemon on port ${port}...`);
44
+ if (launchctlLoad()) {
45
+ // Wait for daemon to start
46
+ await this.waitForDaemon(port, 5000);
47
+ const pid = getLaunchdPid();
48
+ if (pid) {
49
+ this.log(`Daemon started successfully (PID: ${pid})`);
50
+ this.log(`Service: ${LAUNCHD_SERVICE_NAME}`);
51
+ this.log(`Port: ${port}`);
52
+ }
53
+ else {
54
+ this.log('Daemon started (launchd managing process)');
55
+ this.log(`Port: ${port}`);
56
+ }
57
+ }
58
+ else {
59
+ this.error('Failed to load LaunchAgent. Check logs: tail -f ~/mcp/metalink/logs/metalink-launchd.log');
60
+ }
61
+ }
62
+ catch (error) {
63
+ this.error(`Failed to start daemon: ${error instanceof Error ? error.message : String(error)}`);
64
+ }
65
+ }
66
+ async waitForDaemon(port, timeoutMs) {
67
+ const startTime = Date.now();
68
+ while (Date.now() - startTime < timeoutMs) {
69
+ try {
70
+ execSync(`lsof -i :${port} -n -P 2>/dev/null | grep LISTEN`, {
71
+ encoding: 'utf-8',
72
+ stdio: ['pipe', 'pipe', 'ignore']
73
+ });
74
+ return true;
75
+ }
76
+ catch {
77
+ await new Promise(resolve => setTimeout(resolve, 200));
78
+ }
79
+ }
80
+ return false;
81
+ }
82
+ }
83
+ DaemonStart.description = 'Start the MetaLink daemon via launchd';
84
+ export default DaemonStart;
85
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/commands/daemon/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class DaemonStatus extends Command {
3
+ static description: string;
4
+ run(): Promise<void>;
5
+ private getPortPid;
6
+ }
7
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/daemon/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAUtC,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IAC/C,MAAM,CAAC,WAAW,SAA6C;IAEzD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C1B,OAAO,CAAC,UAAU;CAiBnB"}
@@ -0,0 +1,69 @@
1
+ import { Command } from '@oclif/core';
2
+ import { execSync } from 'child_process';
3
+ import { getConfiguredPort, isLaunchAgentLoaded, getLaunchAgentPlistPath, getLaunchdPid, LAUNCHD_SERVICE_NAME } from '../../utils/get-configured-port.js';
4
+ class DaemonStatus extends Command {
5
+ async run() {
6
+ try {
7
+ const port = getConfiguredPort();
8
+ const plistPath = getLaunchAgentPlistPath();
9
+ // Check LaunchAgent status
10
+ const launchAgentLoaded = isLaunchAgentLoaded();
11
+ if (launchAgentLoaded) {
12
+ const launchdPid = getLaunchdPid();
13
+ const portPid = this.getPortPid(port);
14
+ if (launchdPid && portPid) {
15
+ this.log(`Daemon is running (PID: ${portPid}, port: ${port})`);
16
+ this.log(`Service: ${LAUNCHD_SERVICE_NAME} (launchd managed)`);
17
+ this.log(`Plist: ${plistPath}`);
18
+ }
19
+ else if (portPid) {
20
+ this.log(`Daemon is running (PID: ${portPid}, port: ${port})`);
21
+ this.log('Note: Running but launchd shows no PID (might be restarting)');
22
+ }
23
+ else {
24
+ this.log('LaunchAgent loaded but daemon not responding');
25
+ this.log(`Service: ${LAUNCHD_SERVICE_NAME}`);
26
+ this.log('Try: metalink daemon restart');
27
+ }
28
+ }
29
+ else {
30
+ // LaunchAgent not loaded - check if something else is on the port
31
+ const portPid = this.getPortPid(port);
32
+ if (portPid) {
33
+ this.log(`Daemon is running outside launchd (PID: ${portPid}, port: ${port})`);
34
+ this.log('Note: LaunchAgent not loaded, daemon started manually');
35
+ this.log('To use launchd: metalink daemon stop && metalink daemon start');
36
+ }
37
+ else {
38
+ this.log(`Daemon is not running (port ${port} not in use)`);
39
+ this.log('LaunchAgent: Not loaded');
40
+ this.log('Use: metalink daemon start');
41
+ }
42
+ }
43
+ }
44
+ catch (error) {
45
+ this.error(`Failed to check daemon status: ${error instanceof Error ? error.message : String(error)}`);
46
+ }
47
+ }
48
+ getPortPid(port) {
49
+ try {
50
+ const result = execSync(`lsof -i :${port} -n -P 2>/dev/null | grep LISTEN`, {
51
+ encoding: 'utf-8',
52
+ stdio: ['pipe', 'pipe', 'ignore']
53
+ });
54
+ if (result && result.trim()) {
55
+ const pid = result.trim().split(/\s+/)[1];
56
+ if (pid && !isNaN(parseInt(pid, 10))) {
57
+ return parseInt(pid, 10);
58
+ }
59
+ }
60
+ }
61
+ catch {
62
+ // No process on port
63
+ }
64
+ return null;
65
+ }
66
+ }
67
+ DaemonStatus.description = 'Check the status of the MetaLink daemon';
68
+ export default DaemonStatus;
69
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/daemon/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class DaemonStop extends Command {
3
+ static description: string;
4
+ run(): Promise<void>;
5
+ private getPortPid;
6
+ private waitForStop;
7
+ }
8
+ //# sourceMappingURL=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/commands/daemon/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAUtC,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,SAA0C;IAEtD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C1B,OAAO,CAAC,UAAU;YAkBJ,WAAW;CAU1B"}
@@ -0,0 +1,77 @@
1
+ import { Command } from '@oclif/core';
2
+ import { execSync } from 'child_process';
3
+ import { getConfiguredPort, isLaunchAgentLoaded, launchctlUnload, getLaunchdPid, LAUNCHD_SERVICE_NAME } from '../../utils/get-configured-port.js';
4
+ class DaemonStop extends Command {
5
+ async run() {
6
+ try {
7
+ const port = getConfiguredPort();
8
+ // Check if LaunchAgent is loaded
9
+ if (!isLaunchAgentLoaded()) {
10
+ // Check if something is still running on the port
11
+ const portPid = this.getPortPid(port);
12
+ if (portPid) {
13
+ this.log(`Daemon running outside launchd (PID: ${portPid}), killing...`);
14
+ try {
15
+ process.kill(portPid, 'SIGTERM');
16
+ await this.waitForStop(port, 3000);
17
+ this.log('Daemon stopped');
18
+ }
19
+ catch {
20
+ this.error(`Failed to stop daemon (PID: ${portPid})`);
21
+ }
22
+ }
23
+ else {
24
+ this.log('Daemon is not running');
25
+ }
26
+ return;
27
+ }
28
+ // Get current PID before stopping
29
+ const pid = getLaunchdPid();
30
+ this.log(`Stopping daemon${pid ? ` (PID: ${pid})` : ''}...`);
31
+ if (launchctlUnload()) {
32
+ // Wait for daemon to stop
33
+ await this.waitForStop(port, 3000);
34
+ this.log('Daemon stopped successfully');
35
+ this.log(`Service ${LAUNCHD_SERVICE_NAME} unloaded`);
36
+ this.log('Note: Use "metalink daemon start" to restart');
37
+ }
38
+ else {
39
+ this.error('Failed to unload LaunchAgent');
40
+ }
41
+ }
42
+ catch (error) {
43
+ this.error(`Failed to stop daemon: ${error instanceof Error ? error.message : String(error)}`);
44
+ }
45
+ }
46
+ getPortPid(port) {
47
+ try {
48
+ const result = execSync(`lsof -i :${port} -n -P 2>/dev/null | grep LISTEN`, {
49
+ encoding: 'utf-8',
50
+ stdio: ['pipe', 'pipe', 'ignore']
51
+ });
52
+ if (result && result.trim()) {
53
+ const pid = result.trim().split(/\s+/)[1];
54
+ if (pid && !isNaN(parseInt(pid, 10))) {
55
+ return parseInt(pid, 10);
56
+ }
57
+ }
58
+ }
59
+ catch {
60
+ // No process on port
61
+ }
62
+ return null;
63
+ }
64
+ async waitForStop(port, timeoutMs) {
65
+ const startTime = Date.now();
66
+ while (Date.now() - startTime < timeoutMs) {
67
+ if (!this.getPortPid(port)) {
68
+ return true;
69
+ }
70
+ await new Promise(resolve => setTimeout(resolve, 200));
71
+ }
72
+ return false;
73
+ }
74
+ }
75
+ DaemonStop.description = 'Stop the MetaLink daemon via launchd';
76
+ export default DaemonStop;
77
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/commands/daemon/stop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class ImportMcpm extends Command {
3
+ static description: string;
4
+ static flags: {
5
+ output: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
6
+ mcpm: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
7
+ };
8
+ run(): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=mcpm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpm.d.ts","sourceRoot":"","sources":["../../../src/commands/import/mcpm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAI7C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,SAA4C;IAE9D,MAAM,CAAC,KAAK;;;MASV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4C3B"}
@@ -0,0 +1,58 @@
1
+ import { Command, Flags } from '@oclif/core';
2
+ import * as fs from 'fs';
3
+ import * as yaml from 'js-yaml';
4
+ class ImportMcpm extends Command {
5
+ async run() {
6
+ const { flags } = await this.parse(ImportMcpm);
7
+ try {
8
+ if (!fs.existsSync(flags.mcpm)) {
9
+ this.error(`MCPM configuration not found at ${flags.mcpm}`);
10
+ }
11
+ const mcpmConfig = JSON.parse(fs.readFileSync(flags.mcpm, 'utf-8'));
12
+ // Convert MCPM format to MetaLink format
13
+ const metalinkConfig = {
14
+ version: '1.0.0',
15
+ daemon: {
16
+ port: 3000,
17
+ host: '127.0.0.1',
18
+ logLevel: 'info',
19
+ },
20
+ servers: Object.entries(mcpmConfig).map(([name, config]) => ({
21
+ name,
22
+ command: config.command,
23
+ args: config.args || [],
24
+ env: config.env || {},
25
+ healthCheck: {
26
+ enabled: true,
27
+ interval: 30000,
28
+ timeout: 5000,
29
+ },
30
+ })),
31
+ environment: {},
32
+ secrets: { provider: 'env', keyringService: 'metalink' },
33
+ };
34
+ // Write to file
35
+ const configYaml = yaml.dump(metalinkConfig, { indent: 2 });
36
+ fs.writeFileSync(flags.output, configYaml);
37
+ const serverCount = Object.keys(mcpmConfig).length;
38
+ this.log(`✓ Imported ${serverCount} servers from MCPM`);
39
+ this.log(`✓ Configuration written to ${flags.output}`);
40
+ }
41
+ catch (error) {
42
+ this.error(`Import failed: ${error instanceof Error ? error.message : String(error)}`);
43
+ }
44
+ }
45
+ }
46
+ ImportMcpm.description = 'Import servers from MCPM configuration';
47
+ ImportMcpm.flags = {
48
+ output: Flags.string({
49
+ description: 'Output config file path',
50
+ default: 'metalink.config.yaml',
51
+ }),
52
+ mcpm: Flags.string({
53
+ description: 'MCPM servers.json path',
54
+ default: `${process.env.HOME || ''}/.config/mcpm/servers.json`,
55
+ }),
56
+ };
57
+ export default ImportMcpm;
58
+ //# sourceMappingURL=mcpm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpm.js","sourceRoot":"","sources":["../../../src/commands/import/mcpm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,MAAqB,UAAW,SAAQ,OAAO;IAc7C,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAE/C,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,KAAK,CAAC,mCAAmC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9D,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;YAEpE,yCAAyC;YACzC,MAAM,cAAc,GAAQ;gBAC1B,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE;oBACN,IAAI,EAAE,IAAI;oBACV,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE,MAAM;iBACjB;gBACD,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAgB,EAAE,EAAE,CAAC,CAAC;oBAC1E,IAAI;oBACJ,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;oBACvB,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE;oBACrB,WAAW,EAAE;wBACX,OAAO,EAAE,IAAI;wBACb,QAAQ,EAAE,KAAK;wBACf,OAAO,EAAE,IAAI;qBACd;iBACF,CAAC,CAAC;gBACH,WAAW,EAAE,EAAE;gBACf,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE;aACzD,CAAC;YAEF,gBAAgB;YAChB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5D,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAE3C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;YACnD,IAAI,CAAC,GAAG,CAAC,cAAc,WAAW,oBAAoB,CAAC,CAAC;YACxD,IAAI,CAAC,GAAG,CAAC,8BAA8B,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,kBAAkB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;;AAxDM,sBAAW,GAAG,wCAAwC,CAAC;AAEvD,gBAAK,GAAG;IACb,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,yBAAyB;QACtC,OAAO,EAAE,sBAAsB;KAChC,CAAC;IACF,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;QACjB,WAAW,EAAE,wBAAwB;QACrC,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,4BAA4B;KAC/D,CAAC;CACH,CAAC;eAZiB,UAAU"}
@@ -0,0 +1,16 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class SafetyAddRiskyPattern extends Command {
3
+ static description: string;
4
+ static examples: {
5
+ description: string;
6
+ command: string;
7
+ }[];
8
+ static args: {
9
+ pattern: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
10
+ };
11
+ static flags: {
12
+ reason: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
13
+ };
14
+ run(): Promise<void>;
15
+ }
16
+ //# sourceMappingURL=add-risky-pattern.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-risky-pattern.d.ts","sourceRoot":"","sources":["../../../src/commands/safety/add-risky-pattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAC;AAGnD,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,OAAO;IACxD,MAAM,CAAC,WAAW,SAAuD;IAEzE,MAAM,CAAC,QAAQ;;;QAab;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4C3B"}
@@ -0,0 +1,72 @@
1
+ import { Command, Args, Flags } from '@oclif/core';
2
+ import { getDaemonEndpoint } from '../../utils/daemon-endpoint.js';
3
+ class SafetyAddRiskyPattern extends Command {
4
+ async run() {
5
+ const { args, flags } = await this.parse(SafetyAddRiskyPattern);
6
+ try {
7
+ // Validate regex pattern
8
+ try {
9
+ new RegExp(args.pattern);
10
+ }
11
+ catch {
12
+ this.error(`Invalid regex pattern: ${args.pattern}`);
13
+ }
14
+ const response = await fetch(`${getDaemonEndpoint()}/api/v1/safety/patterns/risky`, {
15
+ method: 'POST',
16
+ headers: {
17
+ 'Content-Type': 'application/json',
18
+ },
19
+ body: JSON.stringify({
20
+ pattern: args.pattern,
21
+ reason: flags.reason || undefined,
22
+ }),
23
+ });
24
+ if (!response.ok) {
25
+ const data = await response.json();
26
+ this.error(`Failed to add risky pattern: ${data.error || 'Unknown error'}`);
27
+ }
28
+ const result = await response.json();
29
+ if (result.success) {
30
+ this.log(`✗ Risky pattern added: ${args.pattern}`);
31
+ if (flags.reason) {
32
+ this.log(` Reason: ${flags.reason}`);
33
+ }
34
+ }
35
+ else {
36
+ this.error(result.message || 'Failed to add risky pattern');
37
+ }
38
+ }
39
+ catch (error) {
40
+ this.error(`Failed to add risky pattern: ${error instanceof Error ? error.message : String(error)}`);
41
+ }
42
+ }
43
+ }
44
+ SafetyAddRiskyPattern.description = 'Add a regex pattern to match tools that are risky';
45
+ SafetyAddRiskyPattern.examples = [
46
+ {
47
+ description: 'Add pattern for all delete operations (quotes required for wildcards)',
48
+ command: '<%= config.bin %> <%= command.id %> \'.*delete.*\'',
49
+ },
50
+ {
51
+ description: 'Add pattern for destructive operations',
52
+ command: '<%= config.bin %> <%= command.id %> \'.*destroy.*\'',
53
+ },
54
+ {
55
+ description: 'Add pattern with reason',
56
+ command: '<%= config.bin %> <%= command.id %> \'.*drop.*\' -r "Database drop operations require confirmation"',
57
+ },
58
+ ];
59
+ SafetyAddRiskyPattern.args = {
60
+ pattern: Args.string({
61
+ description: 'Regex pattern (MUST quote if contains * or special chars). Examples: \'.*delete.*\', \'.*drop.*\'',
62
+ required: true,
63
+ }),
64
+ };
65
+ SafetyAddRiskyPattern.flags = {
66
+ reason: Flags.string({
67
+ char: 'r',
68
+ description: 'Optional reason for the pattern',
69
+ }),
70
+ };
71
+ export default SafetyAddRiskyPattern;
72
+ //# sourceMappingURL=add-risky-pattern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-risky-pattern.js","sourceRoot":"","sources":["../../../src/commands/safety/add-risky-pattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAqB,qBAAsB,SAAQ,OAAO;IAgCxD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAEhE,IAAI,CAAC;YACH,yBAAyB;YACzB,IAAI,CAAC;gBACH,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACvD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,iBAAiB,EAAE,+BAA+B,EACrD;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;iBAClC,CAAC;aACH,CACF,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwB,CAAC;gBACzD,IAAI,CAAC,KAAK,CAAC,gCAAgC,IAAI,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;YAC9E,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA4C,CAAC;YAE/E,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjB,IAAI,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,6BAA6B,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvG,CAAC;IACH,CAAC;;AA1EM,iCAAW,GAAG,mDAAmD,CAAC;AAElE,8BAAQ,GAAG;IAChB;QACE,WAAW,EAAE,uEAAuE;QACpF,OAAO,EAAE,oDAAoD;KAC9D;IACD;QACE,WAAW,EAAE,wCAAwC;QACrD,OAAO,EAAE,qDAAqD;KAC/D;IACD;QACE,WAAW,EAAE,yBAAyB;QACtC,OAAO,EAAE,qGAAqG;KAC/G;CACF,CAAC;AAEK,0BAAI,GAAG;IACZ,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,mGAAmG;QAChH,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAC;AAEK,2BAAK,GAAG;IACb,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,iCAAiC;KAC/C,CAAC;CACH,CAAC;eA9BiB,qBAAqB"}
@@ -0,0 +1,12 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class SafetyAddRisky extends Command {
3
+ static description: string;
4
+ static args: {
5
+ tool: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
6
+ };
7
+ static flags: {
8
+ reason: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
9
+ };
10
+ run(): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=add-risky.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-risky.d.ts","sourceRoot":"","sources":["../../../src/commands/safety/add-risky.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAC;AAGnD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,OAAO;IACjD,MAAM,CAAC,WAAW,SAA2D;IAE7E,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuC3B"}
@@ -0,0 +1,52 @@
1
+ import { Command, Args, Flags } from '@oclif/core';
2
+ import { getDaemonEndpoint } from '../../utils/daemon-endpoint.js';
3
+ class SafetyAddRisky extends Command {
4
+ async run() {
5
+ const { args, flags } = await this.parse(SafetyAddRisky);
6
+ // Normalize tool identifier: convert - to :
7
+ const toolId = args.tool.includes(':') ? args.tool : args.tool.replace('-', ':');
8
+ try {
9
+ const response = await fetch(`${getDaemonEndpoint()}/api/v1/safety/tools/risky`, {
10
+ method: 'POST',
11
+ headers: {
12
+ 'Content-Type': 'application/json',
13
+ },
14
+ body: JSON.stringify({
15
+ tool: toolId,
16
+ }),
17
+ });
18
+ if (!response.ok) {
19
+ const data = await response.json();
20
+ this.error(`Failed to add risky override: ${data.error || 'Unknown error'}`);
21
+ }
22
+ const result = await response.json();
23
+ if (result.success) {
24
+ this.log(`✗ Tool '${toolId}' marked as risky`);
25
+ if (flags.reason) {
26
+ this.log(` Reason: ${flags.reason}`);
27
+ }
28
+ }
29
+ else {
30
+ this.error(result.message || 'Failed to add risky override');
31
+ }
32
+ }
33
+ catch (error) {
34
+ this.error(`Failed to add risky override: ${error instanceof Error ? error.message : String(error)}`);
35
+ }
36
+ }
37
+ }
38
+ SafetyAddRisky.description = 'Mark a tool as risky (requires explicit confirmation)';
39
+ SafetyAddRisky.args = {
40
+ tool: Args.string({
41
+ description: 'Tool identifier (server:toolName or server-toolName)',
42
+ required: true,
43
+ }),
44
+ };
45
+ SafetyAddRisky.flags = {
46
+ reason: Flags.string({
47
+ char: 'r',
48
+ description: 'Optional reason for marking as risky',
49
+ }),
50
+ };
51
+ export default SafetyAddRisky;
52
+ //# sourceMappingURL=add-risky.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-risky.js","sourceRoot":"","sources":["../../../src/commands/safety/add-risky.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAqB,cAAe,SAAQ,OAAO;IAiBjD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAEzD,4CAA4C;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEjF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,iBAAiB,EAAE,4BAA4B,EAClD;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,IAAI,EAAE,MAAM;iBACb,CAAC;aACH,CACF,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwB,CAAC;gBACzD,IAAI,CAAC,KAAK,CAAC,iCAAiC,IAAI,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;YAC/E,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA4C,CAAC;YAE/E,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,WAAW,MAAM,mBAAmB,CAAC,CAAC;gBAC/C,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjB,IAAI,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,8BAA8B,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;;AAtDM,0BAAW,GAAG,uDAAuD,CAAC;AAEtE,mBAAI,GAAG;IACZ,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QAChB,WAAW,EAAE,sDAAsD;QACnE,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAC;AAEK,oBAAK,GAAG;IACb,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,sCAAsC;KACpD,CAAC;CACH,CAAC;eAfiB,cAAc"}
@@ -0,0 +1,16 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class SafetyAddSafePattern extends Command {
3
+ static description: string;
4
+ static examples: {
5
+ description: string;
6
+ command: string;
7
+ }[];
8
+ static args: {
9
+ pattern: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
10
+ };
11
+ static flags: {
12
+ reason: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
13
+ };
14
+ run(): Promise<void>;
15
+ }
16
+ //# sourceMappingURL=add-safe-pattern.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-safe-pattern.d.ts","sourceRoot":"","sources":["../../../src/commands/safety/add-safe-pattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAC;AAGnD,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,OAAO;IACvD,MAAM,CAAC,WAAW,SAAsD;IAExE,MAAM,CAAC,QAAQ;;;QAab;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4C3B"}
@@ -0,0 +1,72 @@
1
+ import { Command, Args, Flags } from '@oclif/core';
2
+ import { getDaemonEndpoint } from '../../utils/daemon-endpoint.js';
3
+ class SafetyAddSafePattern extends Command {
4
+ async run() {
5
+ const { args, flags } = await this.parse(SafetyAddSafePattern);
6
+ try {
7
+ // Validate regex pattern
8
+ try {
9
+ new RegExp(args.pattern);
10
+ }
11
+ catch {
12
+ this.error(`Invalid regex pattern: ${args.pattern}`);
13
+ }
14
+ const response = await fetch(`${getDaemonEndpoint()}/api/v1/safety/patterns/safe`, {
15
+ method: 'POST',
16
+ headers: {
17
+ 'Content-Type': 'application/json',
18
+ },
19
+ body: JSON.stringify({
20
+ pattern: args.pattern,
21
+ reason: flags.reason || undefined,
22
+ }),
23
+ });
24
+ if (!response.ok) {
25
+ const data = await response.json();
26
+ this.error(`Failed to add safe pattern: ${data.error || 'Unknown error'}`);
27
+ }
28
+ const result = await response.json();
29
+ if (result.success) {
30
+ this.log(`✓ Safe pattern added: ${args.pattern}`);
31
+ if (flags.reason) {
32
+ this.log(` Reason: ${flags.reason}`);
33
+ }
34
+ }
35
+ else {
36
+ this.error(result.message || 'Failed to add safe pattern');
37
+ }
38
+ }
39
+ catch (error) {
40
+ this.error(`Failed to add safe pattern: ${error instanceof Error ? error.message : String(error)}`);
41
+ }
42
+ }
43
+ }
44
+ SafetyAddSafePattern.description = 'Add a regex pattern to match tools that are safe';
45
+ SafetyAddSafePattern.examples = [
46
+ {
47
+ description: 'Add pattern for all memory tools (quotes required for wildcards)',
48
+ command: '<%= config.bin %> <%= command.id %> \'^memory:.*\'',
49
+ },
50
+ {
51
+ description: 'Add pattern for search operations',
52
+ command: '<%= config.bin %> <%= command.id %> \'.*search.*\'',
53
+ },
54
+ {
55
+ description: 'Add pattern for specific server with reason',
56
+ command: '<%= config.bin %> <%= command.id %> \'^vault:.*\' -r "All Vault tools are read-only"',
57
+ },
58
+ ];
59
+ SafetyAddSafePattern.args = {
60
+ pattern: Args.string({
61
+ description: 'Regex pattern (MUST quote if contains * or special chars). Examples: \'^memory:.*\', \'.*search.*\'',
62
+ required: true,
63
+ }),
64
+ };
65
+ SafetyAddSafePattern.flags = {
66
+ reason: Flags.string({
67
+ char: 'r',
68
+ description: 'Optional reason for the pattern',
69
+ }),
70
+ };
71
+ export default SafetyAddSafePattern;
72
+ //# sourceMappingURL=add-safe-pattern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-safe-pattern.js","sourceRoot":"","sources":["../../../src/commands/safety/add-safe-pattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAqB,oBAAqB,SAAQ,OAAO;IAgCvD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAE/D,IAAI,CAAC;YACH,yBAAyB;YACzB,IAAI,CAAC;gBACH,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACvD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,iBAAiB,EAAE,8BAA8B,EACpD;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;iBAClC,CAAC;aACH,CACF,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwB,CAAC;gBACzD,IAAI,CAAC,KAAK,CAAC,+BAA+B,IAAI,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;YAC7E,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA4C,CAAC;YAE/E,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;gBAClD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjB,IAAI,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,4BAA4B,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;;AA1EM,gCAAW,GAAG,kDAAkD,CAAC;AAEjE,6BAAQ,GAAG;IAChB;QACE,WAAW,EAAE,kEAAkE;QAC/E,OAAO,EAAE,oDAAoD;KAC9D;IACD;QACE,WAAW,EAAE,mCAAmC;QAChD,OAAO,EAAE,oDAAoD;KAC9D;IACD;QACE,WAAW,EAAE,6CAA6C;QAC1D,OAAO,EAAE,sFAAsF;KAChG;CACF,CAAC;AAEK,yBAAI,GAAG;IACZ,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,qGAAqG;QAClH,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAC;AAEK,0BAAK,GAAG;IACb,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,iCAAiC;KAC/C,CAAC;CACH,CAAC;eA9BiB,oBAAoB"}