@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.
- package/README.md +160 -0
- package/package.json +96 -0
- package/packages/cli/dist/bin/cli.d.ts +3 -0
- package/packages/cli/dist/bin/cli.d.ts.map +1 -0
- package/packages/cli/dist/bin/cli.js +4 -0
- package/packages/cli/dist/bin/cli.js.map +1 -0
- package/packages/cli/dist/commands/config/init.d.ts +9 -0
- package/packages/cli/dist/commands/config/init.d.ts.map +1 -0
- package/packages/cli/dist/commands/config/init.js +38 -0
- package/packages/cli/dist/commands/config/init.js.map +1 -0
- package/packages/cli/dist/commands/config/validate.d.ts +9 -0
- package/packages/cli/dist/commands/config/validate.d.ts.map +1 -0
- package/packages/cli/dist/commands/config/validate.js +34 -0
- package/packages/cli/dist/commands/config/validate.js.map +1 -0
- package/packages/cli/dist/commands/daemon/restart.d.ts +15 -0
- package/packages/cli/dist/commands/daemon/restart.d.ts.map +1 -0
- package/packages/cli/dist/commands/daemon/restart.js +184 -0
- package/packages/cli/dist/commands/daemon/restart.js.map +1 -0
- package/packages/cli/dist/commands/daemon/start.d.ts +7 -0
- package/packages/cli/dist/commands/daemon/start.d.ts.map +1 -0
- package/packages/cli/dist/commands/daemon/start.js +85 -0
- package/packages/cli/dist/commands/daemon/start.js.map +1 -0
- package/packages/cli/dist/commands/daemon/status.d.ts +7 -0
- package/packages/cli/dist/commands/daemon/status.d.ts.map +1 -0
- package/packages/cli/dist/commands/daemon/status.js +69 -0
- package/packages/cli/dist/commands/daemon/status.js.map +1 -0
- package/packages/cli/dist/commands/daemon/stop.d.ts +8 -0
- package/packages/cli/dist/commands/daemon/stop.d.ts.map +1 -0
- package/packages/cli/dist/commands/daemon/stop.js +77 -0
- package/packages/cli/dist/commands/daemon/stop.js.map +1 -0
- package/packages/cli/dist/commands/import/mcpm.d.ts +10 -0
- package/packages/cli/dist/commands/import/mcpm.d.ts.map +1 -0
- package/packages/cli/dist/commands/import/mcpm.js +58 -0
- package/packages/cli/dist/commands/import/mcpm.js.map +1 -0
- package/packages/cli/dist/commands/safety/add-risky-pattern.d.ts +16 -0
- package/packages/cli/dist/commands/safety/add-risky-pattern.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/add-risky-pattern.js +72 -0
- package/packages/cli/dist/commands/safety/add-risky-pattern.js.map +1 -0
- package/packages/cli/dist/commands/safety/add-risky.d.ts +12 -0
- package/packages/cli/dist/commands/safety/add-risky.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/add-risky.js +52 -0
- package/packages/cli/dist/commands/safety/add-risky.js.map +1 -0
- package/packages/cli/dist/commands/safety/add-safe-pattern.d.ts +16 -0
- package/packages/cli/dist/commands/safety/add-safe-pattern.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/add-safe-pattern.js +72 -0
- package/packages/cli/dist/commands/safety/add-safe-pattern.js.map +1 -0
- package/packages/cli/dist/commands/safety/add-safe.d.ts +12 -0
- package/packages/cli/dist/commands/safety/add-safe.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/add-safe.js +52 -0
- package/packages/cli/dist/commands/safety/add-safe.js.map +1 -0
- package/packages/cli/dist/commands/safety/check.d.ts +9 -0
- package/packages/cli/dist/commands/safety/check.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/check.js +36 -0
- package/packages/cli/dist/commands/safety/check.js.map +1 -0
- package/packages/cli/dist/commands/safety/export.d.ts +10 -0
- package/packages/cli/dist/commands/safety/export.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/export.js +48 -0
- package/packages/cli/dist/commands/safety/export.js.map +1 -0
- package/packages/cli/dist/commands/safety/import.d.ts +12 -0
- package/packages/cli/dist/commands/safety/import.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/import.js +78 -0
- package/packages/cli/dist/commands/safety/import.js.map +1 -0
- package/packages/cli/dist/commands/safety/index.d.ts +8 -0
- package/packages/cli/dist/commands/safety/index.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/index.js +46 -0
- package/packages/cli/dist/commands/safety/index.js.map +1 -0
- package/packages/cli/dist/commands/safety/list.d.ts +6 -0
- package/packages/cli/dist/commands/safety/list.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/list.js +77 -0
- package/packages/cli/dist/commands/safety/list.js.map +1 -0
- package/packages/cli/dist/commands/safety/remove.d.ts +9 -0
- package/packages/cli/dist/commands/safety/remove.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/remove.js +46 -0
- package/packages/cli/dist/commands/safety/remove.js.map +1 -0
- package/packages/cli/dist/commands/safety/reset.d.ts +9 -0
- package/packages/cli/dist/commands/safety/reset.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/reset.js +46 -0
- package/packages/cli/dist/commands/safety/reset.js.map +1 -0
- package/packages/cli/dist/commands/safety/validate.d.ts +9 -0
- package/packages/cli/dist/commands/safety/validate.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/validate.js +51 -0
- package/packages/cli/dist/commands/safety/validate.js.map +1 -0
- package/packages/cli/dist/commands/secret/get.d.ts +9 -0
- package/packages/cli/dist/commands/secret/get.d.ts.map +1 -0
- package/packages/cli/dist/commands/secret/get.js +26 -0
- package/packages/cli/dist/commands/secret/get.js.map +1 -0
- package/packages/cli/dist/commands/secret/set.d.ts +10 -0
- package/packages/cli/dist/commands/secret/set.d.ts.map +1 -0
- package/packages/cli/dist/commands/secret/set.js +22 -0
- package/packages/cli/dist/commands/secret/set.js.map +1 -0
- package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.d.ts +2 -0
- package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.js +234 -0
- package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.js.map +1 -0
- package/packages/cli/dist/commands/server/add.d.ts +14 -0
- package/packages/cli/dist/commands/server/add.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/add.js +86 -0
- package/packages/cli/dist/commands/server/add.js.map +1 -0
- package/packages/cli/dist/commands/server/available.d.ts +10 -0
- package/packages/cli/dist/commands/server/available.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/available.js +62 -0
- package/packages/cli/dist/commands/server/available.js.map +1 -0
- package/packages/cli/dist/commands/server/debug.d.ts +18 -0
- package/packages/cli/dist/commands/server/debug.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/debug.js +165 -0
- package/packages/cli/dist/commands/server/debug.js.map +1 -0
- package/packages/cli/dist/commands/server/info.d.ts +13 -0
- package/packages/cli/dist/commands/server/info.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/info.js +62 -0
- package/packages/cli/dist/commands/server/info.js.map +1 -0
- package/packages/cli/dist/commands/server/list.d.ts +10 -0
- package/packages/cli/dist/commands/server/list.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/list.js +105 -0
- package/packages/cli/dist/commands/server/list.js.map +1 -0
- package/packages/cli/dist/commands/server/refresh-tools.d.ts +13 -0
- package/packages/cli/dist/commands/server/refresh-tools.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/refresh-tools.js +46 -0
- package/packages/cli/dist/commands/server/refresh-tools.js.map +1 -0
- package/packages/cli/dist/commands/server/remove.d.ts +12 -0
- package/packages/cli/dist/commands/server/remove.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/remove.js +39 -0
- package/packages/cli/dist/commands/server/remove.js.map +1 -0
- package/packages/cli/dist/commands/server/restart.d.ts +9 -0
- package/packages/cli/dist/commands/server/restart.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/restart.js +30 -0
- package/packages/cli/dist/commands/server/restart.js.map +1 -0
- package/packages/cli/dist/commands/server/start.d.ts +9 -0
- package/packages/cli/dist/commands/server/start.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/start.js +37 -0
- package/packages/cli/dist/commands/server/start.js.map +1 -0
- package/packages/cli/dist/commands/server/status.d.ts +9 -0
- package/packages/cli/dist/commands/server/status.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/status.js +30 -0
- package/packages/cli/dist/commands/server/status.js.map +1 -0
- package/packages/cli/dist/commands/server/stop.d.ts +9 -0
- package/packages/cli/dist/commands/server/stop.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/stop.js +31 -0
- package/packages/cli/dist/commands/server/stop.js.map +1 -0
- package/packages/cli/dist/commands/server/validate.d.ts +15 -0
- package/packages/cli/dist/commands/server/validate.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/validate.js +87 -0
- package/packages/cli/dist/commands/server/validate.js.map +1 -0
- package/packages/cli/dist/commands/stdio.d.ts +36 -0
- package/packages/cli/dist/commands/stdio.d.ts.map +1 -0
- package/packages/cli/dist/commands/stdio.js +85 -0
- package/packages/cli/dist/commands/stdio.js.map +1 -0
- package/packages/cli/dist/commands/tool/execute-confirm.d.ts +12 -0
- package/packages/cli/dist/commands/tool/execute-confirm.d.ts.map +1 -0
- package/packages/cli/dist/commands/tool/execute-confirm.js +98 -0
- package/packages/cli/dist/commands/tool/execute-confirm.js.map +1 -0
- package/packages/cli/dist/commands/tool/execute.d.ts +12 -0
- package/packages/cli/dist/commands/tool/execute.d.ts.map +1 -0
- package/packages/cli/dist/commands/tool/execute.js +55 -0
- package/packages/cli/dist/commands/tool/execute.js.map +1 -0
- package/packages/cli/dist/commands/tool/list.d.ts +13 -0
- package/packages/cli/dist/commands/tool/list.d.ts.map +1 -0
- package/packages/cli/dist/commands/tool/list.js +91 -0
- package/packages/cli/dist/commands/tool/list.js.map +1 -0
- package/packages/cli/dist/commands/tool/search.d.ts +12 -0
- package/packages/cli/dist/commands/tool/search.d.ts.map +1 -0
- package/packages/cli/dist/commands/tool/search.js +87 -0
- package/packages/cli/dist/commands/tool/search.js.map +1 -0
- package/packages/cli/dist/index.d.ts +2 -0
- package/packages/cli/dist/index.d.ts.map +1 -0
- package/packages/cli/dist/index.js +9 -0
- package/packages/cli/dist/index.js.map +1 -0
- package/packages/cli/dist/utils/daemon-checker.d.ts +18 -0
- package/packages/cli/dist/utils/daemon-checker.d.ts.map +1 -0
- package/packages/cli/dist/utils/daemon-checker.js +69 -0
- package/packages/cli/dist/utils/daemon-checker.js.map +1 -0
- package/packages/cli/dist/utils/daemon-endpoint.d.ts +7 -0
- package/packages/cli/dist/utils/daemon-endpoint.d.ts.map +1 -0
- package/packages/cli/dist/utils/daemon-endpoint.js +13 -0
- package/packages/cli/dist/utils/daemon-endpoint.js.map +1 -0
- package/packages/cli/dist/utils/get-configured-port.d.ts +43 -0
- package/packages/cli/dist/utils/get-configured-port.d.ts.map +1 -0
- package/packages/cli/dist/utils/get-configured-port.js +141 -0
- package/packages/cli/dist/utils/get-configured-port.js.map +1 -0
- package/packages/cli/dist/utils/stdio-bridge.d.ts +48 -0
- package/packages/cli/dist/utils/stdio-bridge.d.ts.map +1 -0
- package/packages/cli/dist/utils/stdio-bridge.js +181 -0
- package/packages/cli/dist/utils/stdio-bridge.js.map +1 -0
- package/packages/cli/package.json +48 -0
- package/packages/core/dist/config/defaults.d.ts +36 -0
- package/packages/core/dist/config/defaults.d.ts.map +1 -0
- package/packages/core/dist/config/defaults.js +324 -0
- package/packages/core/dist/config/defaults.js.map +1 -0
- package/packages/core/dist/config/index.d.ts +9 -0
- package/packages/core/dist/config/index.d.ts.map +1 -0
- package/packages/core/dist/config/index.js +14 -0
- package/packages/core/dist/config/index.js.map +1 -0
- package/packages/core/dist/config/loader.d.ts +269 -0
- package/packages/core/dist/config/loader.d.ts.map +1 -0
- package/packages/core/dist/config/loader.js +777 -0
- package/packages/core/dist/config/loader.js.map +1 -0
- package/packages/core/dist/config/registry.d.ts +212 -0
- package/packages/core/dist/config/registry.d.ts.map +1 -0
- package/packages/core/dist/config/registry.js +754 -0
- package/packages/core/dist/config/registry.js.map +1 -0
- package/packages/core/dist/config/schema.d.ts +4352 -0
- package/packages/core/dist/config/schema.d.ts.map +1 -0
- package/packages/core/dist/config/schema.js +267 -0
- package/packages/core/dist/config/schema.js.map +1 -0
- package/packages/core/dist/daemon.d.ts +7 -0
- package/packages/core/dist/daemon.d.ts.map +1 -0
- package/packages/core/dist/daemon.js +116 -0
- package/packages/core/dist/daemon.js.map +1 -0
- package/packages/core/dist/http-client-retry.d.ts +67 -0
- package/packages/core/dist/http-client-retry.d.ts.map +1 -0
- package/packages/core/dist/http-client-retry.js +133 -0
- package/packages/core/dist/http-client-retry.js.map +1 -0
- package/packages/core/dist/http-client-updated.d.ts +147 -0
- package/packages/core/dist/http-client-updated.d.ts.map +1 -0
- package/packages/core/dist/http-client-updated.js +452 -0
- package/packages/core/dist/http-client-updated.js.map +1 -0
- package/packages/core/dist/http-client.d.ts +207 -0
- package/packages/core/dist/http-client.d.ts.map +1 -0
- package/packages/core/dist/http-client.js +704 -0
- package/packages/core/dist/http-client.js.map +1 -0
- package/packages/core/dist/index.d.ts +13 -0
- package/packages/core/dist/index.d.ts.map +1 -0
- package/packages/core/dist/index.js +23 -0
- package/packages/core/dist/index.js.map +1 -0
- package/packages/core/dist/logging/index.d.ts +46 -0
- package/packages/core/dist/logging/index.d.ts.map +1 -0
- package/packages/core/dist/logging/index.js +74 -0
- package/packages/core/dist/logging/index.js.map +1 -0
- package/packages/core/dist/metrics/index.d.ts +339 -0
- package/packages/core/dist/metrics/index.d.ts.map +1 -0
- package/packages/core/dist/metrics/index.js +792 -0
- package/packages/core/dist/metrics/index.js.map +1 -0
- package/packages/core/dist/plugins/index.d.ts +49 -0
- package/packages/core/dist/plugins/index.d.ts.map +1 -0
- package/packages/core/dist/plugins/index.js +82 -0
- package/packages/core/dist/plugins/index.js.map +1 -0
- package/packages/core/dist/secrets/index.d.ts +6 -0
- package/packages/core/dist/secrets/index.d.ts.map +1 -0
- package/packages/core/dist/secrets/index.js +5 -0
- package/packages/core/dist/secrets/index.js.map +1 -0
- package/packages/core/dist/secrets/keyring.d.ts +54 -0
- package/packages/core/dist/secrets/keyring.d.ts.map +1 -0
- package/packages/core/dist/secrets/keyring.js +141 -0
- package/packages/core/dist/secrets/keyring.js.map +1 -0
- package/packages/core/dist/server/batch-executor.d.ts +83 -0
- package/packages/core/dist/server/batch-executor.d.ts.map +1 -0
- package/packages/core/dist/server/batch-executor.js +291 -0
- package/packages/core/dist/server/batch-executor.js.map +1 -0
- package/packages/core/dist/server/circuit-breaker.d.ts +215 -0
- package/packages/core/dist/server/circuit-breaker.d.ts.map +1 -0
- package/packages/core/dist/server/circuit-breaker.js +330 -0
- package/packages/core/dist/server/circuit-breaker.js.map +1 -0
- package/packages/core/dist/server/client-detection.d.ts +40 -0
- package/packages/core/dist/server/client-detection.d.ts.map +1 -0
- package/packages/core/dist/server/client-detection.js +242 -0
- package/packages/core/dist/server/client-detection.js.map +1 -0
- package/packages/core/dist/server/client-profiles.d.ts +102 -0
- package/packages/core/dist/server/client-profiles.d.ts.map +1 -0
- package/packages/core/dist/server/client-profiles.js +254 -0
- package/packages/core/dist/server/client-profiles.js.map +1 -0
- package/packages/core/dist/server/http.d.ts +386 -0
- package/packages/core/dist/server/http.d.ts.map +1 -0
- package/packages/core/dist/server/http.js +4253 -0
- package/packages/core/dist/server/http.js.map +1 -0
- package/packages/core/dist/server/index.d.ts +7 -0
- package/packages/core/dist/server/index.d.ts.map +1 -0
- package/packages/core/dist/server/index.js +6 -0
- package/packages/core/dist/server/index.js.map +1 -0
- package/packages/core/dist/server/manager.d.ts +458 -0
- package/packages/core/dist/server/manager.d.ts.map +1 -0
- package/packages/core/dist/server/manager.js +3255 -0
- package/packages/core/dist/server/manager.js.map +1 -0
- package/packages/core/dist/server/managers/HttpConnectionManager.d.ts +69 -0
- package/packages/core/dist/server/managers/HttpConnectionManager.d.ts.map +1 -0
- package/packages/core/dist/server/managers/HttpConnectionManager.js +214 -0
- package/packages/core/dist/server/managers/HttpConnectionManager.js.map +1 -0
- package/packages/core/dist/server/managers/ProcessManager.d.ts +128 -0
- package/packages/core/dist/server/managers/ProcessManager.d.ts.map +1 -0
- package/packages/core/dist/server/managers/ProcessManager.js +443 -0
- package/packages/core/dist/server/managers/ProcessManager.js.map +1 -0
- package/packages/core/dist/server/managers/SchemaCacheManager.d.ts +152 -0
- package/packages/core/dist/server/managers/SchemaCacheManager.d.ts.map +1 -0
- package/packages/core/dist/server/managers/SchemaCacheManager.js +426 -0
- package/packages/core/dist/server/managers/SchemaCacheManager.js.map +1 -0
- package/packages/core/dist/server/managers/index.d.ts +9 -0
- package/packages/core/dist/server/managers/index.d.ts.map +1 -0
- package/packages/core/dist/server/managers/index.js +9 -0
- package/packages/core/dist/server/managers/index.js.map +1 -0
- package/packages/core/dist/server/metrics.d.ts +134 -0
- package/packages/core/dist/server/metrics.d.ts.map +1 -0
- package/packages/core/dist/server/metrics.js +273 -0
- package/packages/core/dist/server/metrics.js.map +1 -0
- package/packages/core/dist/server/prompts.d.ts +58 -0
- package/packages/core/dist/server/prompts.d.ts.map +1 -0
- package/packages/core/dist/server/prompts.js +405 -0
- package/packages/core/dist/server/prompts.js.map +1 -0
- package/packages/core/dist/server/protocol-versions.d.ts +49 -0
- package/packages/core/dist/server/protocol-versions.d.ts.map +1 -0
- package/packages/core/dist/server/protocol-versions.js +173 -0
- package/packages/core/dist/server/protocol-versions.js.map +1 -0
- package/packages/core/dist/server/resources.d.ts +64 -0
- package/packages/core/dist/server/resources.d.ts.map +1 -0
- package/packages/core/dist/server/resources.js +243 -0
- package/packages/core/dist/server/resources.js.map +1 -0
- package/packages/core/dist/server/schema-store.d.ts +84 -0
- package/packages/core/dist/server/schema-store.d.ts.map +1 -0
- package/packages/core/dist/server/schema-store.js +234 -0
- package/packages/core/dist/server/schema-store.js.map +1 -0
- package/packages/core/dist/server/schema-validator.d.ts +51 -0
- package/packages/core/dist/server/schema-validator.d.ts.map +1 -0
- package/packages/core/dist/server/schema-validator.js +208 -0
- package/packages/core/dist/server/schema-validator.js.map +1 -0
- package/packages/core/dist/server/token-calculator.d.ts +44 -0
- package/packages/core/dist/server/token-calculator.d.ts.map +1 -0
- package/packages/core/dist/server/token-calculator.js +53 -0
- package/packages/core/dist/server/token-calculator.js.map +1 -0
- package/packages/core/dist/server/types.d.ts +45 -0
- package/packages/core/dist/server/types.d.ts.map +1 -0
- package/packages/core/dist/server/types.js +5 -0
- package/packages/core/dist/server/types.js.map +1 -0
- package/packages/core/dist/utils/file-lock.d.ts +73 -0
- package/packages/core/dist/utils/file-lock.d.ts.map +1 -0
- package/packages/core/dist/utils/file-lock.js +235 -0
- package/packages/core/dist/utils/file-lock.js.map +1 -0
- package/packages/core/package.json +36 -0
- package/packages/dashboard/dist/assets/index-B7hvkCMu.css +1 -0
- package/packages/dashboard/dist/assets/index-yZhLPpzr.js +1 -0
- package/packages/dashboard/dist/index.html +14 -0
- package/packages/dashboard/package.json +24 -0
- package/packages/shared/dist/version.d.ts +2 -0
- package/packages/shared/dist/version.d.ts.map +1 -0
- package/packages/shared/dist/version.js +2 -0
- package/packages/shared/dist/version.js.map +1 -0
- package/packages/shared/package.json +18 -0
package/README.md
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# MetaLink - Universal MCP Server Manager
|
|
2
|
+
|
|
3
|
+
**Version:** 1.2.0
|
|
4
|
+
**License:** MIT
|
|
5
|
+
|
|
6
|
+
A modern, unified platform for managing Model Context Protocol (MCP) servers with REST API, CLI, real-time dashboard, and advanced features like secrets management, circuit breakers, and automatic restarts.
|
|
7
|
+
|
|
8
|
+
## Features
|
|
9
|
+
|
|
10
|
+
- **REST API** - HTTP API for server management and tool execution
|
|
11
|
+
- **CLI Tool** - oclif-based CLI with comprehensive commands
|
|
12
|
+
- **Real-time Dashboard** - SvelteKit web interface with Server-Sent Events
|
|
13
|
+
- **Process Management** - Automatic spawn/kill with health checks
|
|
14
|
+
- **Circuit Breakers** - Prevents cascade failures
|
|
15
|
+
- **Auto-Restart** - Exponential backoff for crashed servers
|
|
16
|
+
- **Secrets Management** - OS keyring integration (macOS, Linux, Windows)
|
|
17
|
+
- **Schema Caching** - Persistent tool schema storage
|
|
18
|
+
- **Multi-Transport** - stdio and HTTP/SSE server support
|
|
19
|
+
- **Metrics** - Built-in metrics collection
|
|
20
|
+
|
|
21
|
+
## Quick Start
|
|
22
|
+
|
|
23
|
+
### Installation
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# From source
|
|
27
|
+
git clone https://git.intesyo.com/daniel/metalink.git
|
|
28
|
+
cd metalink
|
|
29
|
+
npm install
|
|
30
|
+
npm run build
|
|
31
|
+
npm link
|
|
32
|
+
|
|
33
|
+
# Verify
|
|
34
|
+
metalink --version
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Configuration
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Initialize config
|
|
41
|
+
metalink config init
|
|
42
|
+
|
|
43
|
+
# Edit config
|
|
44
|
+
metalink config edit
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Usage
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Start daemon
|
|
51
|
+
metalink daemon start
|
|
52
|
+
|
|
53
|
+
# List servers
|
|
54
|
+
metalink server list
|
|
55
|
+
|
|
56
|
+
# Start a server
|
|
57
|
+
metalink server start <server-name>
|
|
58
|
+
|
|
59
|
+
# Execute a tool
|
|
60
|
+
metalink tool execute <server> <tool> --with '{"arg": "value"}'
|
|
61
|
+
|
|
62
|
+
# Dashboard
|
|
63
|
+
open http://localhost:3000
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Architecture
|
|
67
|
+
|
|
68
|
+
MetaLink uses a **Turborepo** monorepo structure:
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
metalink/
|
|
72
|
+
├── packages/
|
|
73
|
+
│ ├── core/ # @metalink/core - Server management
|
|
74
|
+
│ ├── cli/ # metalink - CLI tool
|
|
75
|
+
│ ├── dashboard/ # @metalink/dashboard - Web UI
|
|
76
|
+
│ └── shared/ # @metalink/shared - Version info
|
|
77
|
+
├── scripts/ # Build and deployment scripts
|
|
78
|
+
└── package.json # Root configuration
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Core Managers (v1.2.0)
|
|
82
|
+
|
|
83
|
+
- **ProcessManager** - stdio process lifecycle
|
|
84
|
+
- **HttpConnectionManager** - HTTP client lifecycle
|
|
85
|
+
- **SchemaCacheManager** - Tool schema caching
|
|
86
|
+
- **CircuitBreakerManager** - Failure handling
|
|
87
|
+
|
|
88
|
+
## Development
|
|
89
|
+
|
|
90
|
+
### Build
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
npm run build
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Test
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
npm test
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Release
|
|
103
|
+
|
|
104
|
+
**⚠️ IMPORTANT: Always use the automated release process. Never manually edit version files.**
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# 1. Document what changed (interactive)
|
|
108
|
+
npx changeset
|
|
109
|
+
|
|
110
|
+
# 2. Bump versions (automated - updates all package.json files)
|
|
111
|
+
npm run version
|
|
112
|
+
|
|
113
|
+
# 3. Sync version to source (automated - updates version.ts)
|
|
114
|
+
npm run sync-version
|
|
115
|
+
|
|
116
|
+
# 4. Build and verify
|
|
117
|
+
npm run build
|
|
118
|
+
metalink --version # Verify correct version
|
|
119
|
+
|
|
120
|
+
# 5. Commit, tag, and push
|
|
121
|
+
git add -A
|
|
122
|
+
git commit -m "chore: version bump to vX.X.X"
|
|
123
|
+
git tag -a v1.x.x -m "Release v1.x.x: description"
|
|
124
|
+
git push origin main --tags
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**What each command does:**
|
|
128
|
+
|
|
129
|
+
- `npx changeset` - Creates a changeset describing your changes
|
|
130
|
+
- `npm run version` - Bumps version in ALL package.json files and updates CHANGELOG.md
|
|
131
|
+
- `npm run sync-version` - Syncs version from package.json to version.ts (what CLI reports)
|
|
132
|
+
- `npm run build` - Compiles TypeScript
|
|
133
|
+
- `git tag` - Creates release tag
|
|
134
|
+
|
|
135
|
+
**Version sources:**
|
|
136
|
+
|
|
137
|
+
- `packages/*/package.json` - Used by npm and changeset
|
|
138
|
+
- `packages/shared/version.ts` - Used by CLI (`metalink --version`)
|
|
139
|
+
|
|
140
|
+
## Documentation
|
|
141
|
+
|
|
142
|
+
- **AGENTS.md** - Development guide and conventions
|
|
143
|
+
- **ARCHITECTURE.md** - System architecture details
|
|
144
|
+
- **CHANGELOG.md** - Version history
|
|
145
|
+
- **CONTRIBUTING.md** - Contribution guidelines
|
|
146
|
+
- **SECURITY.md** - Security policies
|
|
147
|
+
|
|
148
|
+
## Supported Editors
|
|
149
|
+
|
|
150
|
+
MetaLink is actively developed with:
|
|
151
|
+
|
|
152
|
+
- **OpenCode** - Primary IDE
|
|
153
|
+
- **Claude Code** - AI-assisted development
|
|
154
|
+
- **Zed** - High-performance editor
|
|
155
|
+
|
|
156
|
+
Legacy editor configs removed: Cursor, Cline, Roo, Grok, Kilo, Kiro, Trae, Windsurf, Taskmaster
|
|
157
|
+
|
|
158
|
+
## License
|
|
159
|
+
|
|
160
|
+
MIT © Daniel Stefan
|
package/package.json
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@daniel.stefan/metalink",
|
|
3
|
+
"version": "1.3.1",
|
|
4
|
+
"description": "MetaLink MCP Management Platform - Universal MCP server orchestrator",
|
|
5
|
+
"private": false,
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"main": "packages/core/dist/index.js",
|
|
11
|
+
"bin": {
|
|
12
|
+
"metalink": "packages/cli/dist/index.js",
|
|
13
|
+
"metalink-daemon": "packages/core/dist/daemon.js"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"packages/*/dist/**/*",
|
|
17
|
+
"packages/*/package.json",
|
|
18
|
+
"scripts/setup-platform.js",
|
|
19
|
+
"README.md",
|
|
20
|
+
"README.npm.md",
|
|
21
|
+
"LICENSE"
|
|
22
|
+
],
|
|
23
|
+
"packageManager": "npm@10.0.0",
|
|
24
|
+
"workspaces": [
|
|
25
|
+
"packages/*"
|
|
26
|
+
],
|
|
27
|
+
"scripts": {
|
|
28
|
+
"postinstall": "node scripts/setup-platform.js",
|
|
29
|
+
"sync-version": "node scripts/sync-version.js",
|
|
30
|
+
"verify-release": "./scripts/release-check.sh",
|
|
31
|
+
"verify-ai": "./scripts/verify-ai-work.sh",
|
|
32
|
+
"build": "turbo build",
|
|
33
|
+
"test": "npm --workspaces run test",
|
|
34
|
+
"dev": "npm --workspaces run dev",
|
|
35
|
+
"lint": "npm --workspaces run lint",
|
|
36
|
+
"format": "prettier --write \"packages/**/*.{ts,tsx,json,md}\"",
|
|
37
|
+
"install-deps": "pnpm install -r",
|
|
38
|
+
"analyze-logs": "npx tsx scripts/analyze-logs.ts",
|
|
39
|
+
"changeset": "changeset",
|
|
40
|
+
"version": "changeset version",
|
|
41
|
+
"release": "changeset publish"
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@modelcontextprotocol/sdk": "^1.21.1",
|
|
45
|
+
"express": "^4.18.2",
|
|
46
|
+
"express-rate-limit": "^6.7.0",
|
|
47
|
+
"ws": "^8.18.3",
|
|
48
|
+
"xml2js": "^0.6.2",
|
|
49
|
+
"yaml": "^2.3.4",
|
|
50
|
+
"zod": "^3.22.0"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@changesets/cli": "^2.29.8",
|
|
54
|
+
"@types/node": "^20.0.0",
|
|
55
|
+
"prettier": "^3.0.0",
|
|
56
|
+
"turbo": "^1.10.0",
|
|
57
|
+
"typescript": "^5.0.0"
|
|
58
|
+
},
|
|
59
|
+
"engines": {
|
|
60
|
+
"node": ">=18.0.0"
|
|
61
|
+
},
|
|
62
|
+
"os": [
|
|
63
|
+
"darwin",
|
|
64
|
+
"linux",
|
|
65
|
+
"win32"
|
|
66
|
+
],
|
|
67
|
+
"cpu": [
|
|
68
|
+
"x64",
|
|
69
|
+
"arm64"
|
|
70
|
+
],
|
|
71
|
+
"keywords": [
|
|
72
|
+
"mcp",
|
|
73
|
+
"model-context-protocol",
|
|
74
|
+
"ai",
|
|
75
|
+
"llm",
|
|
76
|
+
"server",
|
|
77
|
+
"orchestrator",
|
|
78
|
+
"claude",
|
|
79
|
+
"opencode"
|
|
80
|
+
],
|
|
81
|
+
"author": "Daniel Stefan <daniel.fstefan@gmail.com>",
|
|
82
|
+
"license": "MIT",
|
|
83
|
+
"repository": {
|
|
84
|
+
"type": "git",
|
|
85
|
+
"url": "git+ssh://git@git.intesyo.com:daniel/metalink.git"
|
|
86
|
+
},
|
|
87
|
+
"bugs": {
|
|
88
|
+
"url": "https://git.intesyo.com/daniel/metalink/issues"
|
|
89
|
+
},
|
|
90
|
+
"homepage": "https://git.intesyo.com/daniel/metalink",
|
|
91
|
+
"pnpm": {
|
|
92
|
+
"overrides": {
|
|
93
|
+
"typescript": "^5.0.0"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class ConfigInit extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
force: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
6
|
+
};
|
|
7
|
+
run(): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/config/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAI7C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,SAA2C;IAE7D,MAAM,CAAC,KAAK;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4B3B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Command, Flags } from '@oclif/core';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
class ConfigInit extends Command {
|
|
5
|
+
async run() {
|
|
6
|
+
const { flags } = await this.parse(ConfigInit);
|
|
7
|
+
const configPath = path.join(process.cwd(), 'metalink.config.yaml');
|
|
8
|
+
if (fs.existsSync(configPath) && !flags.force) {
|
|
9
|
+
this.error(`Config file already exists at ${configPath}. Use --force to overwrite.`);
|
|
10
|
+
}
|
|
11
|
+
const template = `# MetaLink Configuration
|
|
12
|
+
version: '1.0.0'
|
|
13
|
+
|
|
14
|
+
daemon:
|
|
15
|
+
port: 3000
|
|
16
|
+
host: '127.0.0.1'
|
|
17
|
+
logLevel: 'info'
|
|
18
|
+
|
|
19
|
+
servers: []
|
|
20
|
+
|
|
21
|
+
environment: {}
|
|
22
|
+
|
|
23
|
+
secrets:
|
|
24
|
+
provider: 'env'
|
|
25
|
+
`;
|
|
26
|
+
fs.writeFileSync(configPath, template);
|
|
27
|
+
this.log(`Created new config file at ${configPath}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
ConfigInit.description = 'Initialize a new metalink.config.yaml';
|
|
31
|
+
ConfigInit.flags = {
|
|
32
|
+
force: Flags.boolean({
|
|
33
|
+
description: 'Overwrite existing config',
|
|
34
|
+
default: false,
|
|
35
|
+
}),
|
|
36
|
+
};
|
|
37
|
+
export default ConfigInit;
|
|
38
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/config/init.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,MAAM,CAAC;AAE7B,MAAqB,UAAW,SAAQ,OAAO;IAU7C,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAE/C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,sBAAsB,CAAC,CAAC;QAEpE,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAC9C,IAAI,CAAC,KAAK,CAAC,iCAAiC,UAAU,6BAA6B,CAAC,CAAC;QACvF,CAAC;QAED,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;CAcpB,CAAC;QAEE,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,8BAA8B,UAAU,EAAE,CAAC,CAAC;IACvD,CAAC;;AApCM,sBAAW,GAAG,uCAAuC,CAAC;AAEtD,gBAAK,GAAG;IACb,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;QACnB,WAAW,EAAE,2BAA2B;QACxC,OAAO,EAAE,KAAK;KACf,CAAC;CACH,CAAC;eARiB,UAAU"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class ConfigValidate extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
config: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
6
|
+
};
|
|
7
|
+
run(): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/commands/config/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAG7C,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,OAAO;IACjD,MAAM,CAAC,WAAW,SAAqC;IAEvD,MAAM,CAAC,KAAK;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuB3B"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Command, Flags } from '@oclif/core';
|
|
2
|
+
import { ConfigLoader } from '@metalink/core';
|
|
3
|
+
class ConfigValidate extends Command {
|
|
4
|
+
async run() {
|
|
5
|
+
const { flags } = await this.parse(ConfigValidate);
|
|
6
|
+
try {
|
|
7
|
+
const loader = ConfigLoader.loadFromSync(flags.config);
|
|
8
|
+
const config = loader.getConfig();
|
|
9
|
+
this.log('✓ Configuration is valid');
|
|
10
|
+
this.log(` Servers: ${config.servers?.length || 0}`);
|
|
11
|
+
this.log(` Plugins: ${config.plugins?.length || 0}`);
|
|
12
|
+
this.log(` Profiles: ${config.profiles?.length || 0}`);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
16
|
+
// If config file doesn't exist, that's OK - use defaults
|
|
17
|
+
if (errorMsg.includes('Config file not found') || errorMsg.includes('ENOENT')) {
|
|
18
|
+
this.log('✓ No project config file (using global config and defaults)');
|
|
19
|
+
this.log(' This is normal - config file is optional');
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
this.error(`Configuration validation failed: ${errorMsg}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
ConfigValidate.description = 'Validate metalink configuration';
|
|
27
|
+
ConfigValidate.flags = {
|
|
28
|
+
config: Flags.string({
|
|
29
|
+
description: 'Path to config file',
|
|
30
|
+
default: 'metalink.config.yaml',
|
|
31
|
+
}),
|
|
32
|
+
};
|
|
33
|
+
export default ConfigValidate;
|
|
34
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/commands/config/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAqB,cAAe,SAAQ,OAAO;IAUjD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAEnD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAExE,yDAAyD;YACzD,IAAI,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9E,IAAI,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;gBACxE,IAAI,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;gBACvD,OAAO;YACT,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;;AA/BM,0BAAW,GAAG,iCAAiC,CAAC;AAEhD,oBAAK,GAAG;IACb,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,qBAAqB;QAClC,OAAO,EAAE,sBAAsB;KAChC,CAAC;CACH,CAAC;eARiB,cAAc"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class DaemonRestart extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
force: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
6
|
+
};
|
|
7
|
+
run(): Promise<void>;
|
|
8
|
+
private restartViaLaunchctl;
|
|
9
|
+
private restartViaUnloadLoad;
|
|
10
|
+
private restartManual;
|
|
11
|
+
private getPortPid;
|
|
12
|
+
private waitForStop;
|
|
13
|
+
private waitForDaemonRestart;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=restart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart.d.ts","sourceRoot":"","sources":["../../../src/commands/daemon/restart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAW7C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO;IAChD,MAAM,CAAC,WAAW,SAAiC;IAEnD,MAAM,CAAC,KAAK;;MAMV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAuBZ,mBAAmB;YAgCnB,oBAAoB;YAgCpB,aAAa;IAqC3B,OAAO,CAAC,UAAU;YAkBJ,WAAW;YAWX,oBAAoB;CA0BnC"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { Command, Flags } from '@oclif/core';
|
|
2
|
+
import { execSync, spawn } from 'child_process';
|
|
3
|
+
import { getConfiguredPort, isLaunchAgentLoaded, launchctlUnload, launchctlLoad, getLaunchdPid, LAUNCHD_SERVICE_NAME } from '../../utils/get-configured-port.js';
|
|
4
|
+
class DaemonRestart extends Command {
|
|
5
|
+
async run() {
|
|
6
|
+
const { flags } = await this.parse(DaemonRestart);
|
|
7
|
+
const port = getConfiguredPort();
|
|
8
|
+
try {
|
|
9
|
+
this.log('Restarting MetaLink daemon...');
|
|
10
|
+
this.log(`Target port: ${port}`);
|
|
11
|
+
const isManaged = isLaunchAgentLoaded();
|
|
12
|
+
this.log(`LaunchAgent status: ${isManaged ? 'loaded' : 'not loaded'}`);
|
|
13
|
+
if (isManaged) {
|
|
14
|
+
await this.restartViaLaunchctl(port, flags.force);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
await this.restartManual(port, flags.force);
|
|
18
|
+
}
|
|
19
|
+
this.log('✓ Daemon restart complete');
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
this.error(`Failed to restart daemon: ${error instanceof Error ? error.message : String(error)}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async restartViaLaunchctl(port, force) {
|
|
26
|
+
try {
|
|
27
|
+
const oldPid = getLaunchdPid();
|
|
28
|
+
this.log(`Current daemon PID: ${oldPid || 'unknown'}`);
|
|
29
|
+
this.log('Attempting graceful restart via launchctl kickstart...');
|
|
30
|
+
try {
|
|
31
|
+
execSync(`launchctl kickstart -k gui/$(id -u)/${LAUNCHD_SERVICE_NAME}`, {
|
|
32
|
+
stdio: 'pipe',
|
|
33
|
+
encoding: 'utf-8'
|
|
34
|
+
});
|
|
35
|
+
this.log('Sent kickstart signal to launchd');
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
this.log('Kickstart failed or not available, falling back to unload/load cycle');
|
|
39
|
+
await this.restartViaUnloadLoad(port, force);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
await this.waitForDaemonRestart(port, 10000);
|
|
43
|
+
const newPid = getLaunchdPid();
|
|
44
|
+
this.log(`New daemon PID: ${newPid || 'unknown'}`);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
if (force) {
|
|
48
|
+
this.log('Graceful restart failed, forcing restart via unload/load...');
|
|
49
|
+
await this.restartViaUnloadLoad(port, true);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async restartViaUnloadLoad(port, force) {
|
|
57
|
+
this.log('Unloading LaunchAgent...');
|
|
58
|
+
const oldPid = getLaunchdPid();
|
|
59
|
+
if (force && oldPid) {
|
|
60
|
+
this.log(`Force killing PID ${oldPid}...`);
|
|
61
|
+
try {
|
|
62
|
+
process.kill(oldPid, 'SIGKILL');
|
|
63
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Process may have already exited
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (!launchctlUnload()) {
|
|
70
|
+
if (!force)
|
|
71
|
+
throw new Error('Failed to unload LaunchAgent');
|
|
72
|
+
this.log('Warning: Failed to unload cleanly, continuing anyway...');
|
|
73
|
+
}
|
|
74
|
+
await this.waitForStop(port, 5000);
|
|
75
|
+
this.log('Port freed');
|
|
76
|
+
this.log('Loading LaunchAgent...');
|
|
77
|
+
if (!launchctlLoad()) {
|
|
78
|
+
throw new Error('Failed to load LaunchAgent');
|
|
79
|
+
}
|
|
80
|
+
await this.waitForDaemonRestart(port, 10000);
|
|
81
|
+
const newPid = getLaunchdPid();
|
|
82
|
+
this.log(`New daemon PID: ${newPid || 'unknown'}`);
|
|
83
|
+
}
|
|
84
|
+
async restartManual(port, force) {
|
|
85
|
+
this.log('Daemon not managed by launchd, performing manual restart...');
|
|
86
|
+
const portPid = this.getPortPid(port);
|
|
87
|
+
if (portPid) {
|
|
88
|
+
this.log(`Killing daemon at PID ${portPid}...`);
|
|
89
|
+
try {
|
|
90
|
+
process.kill(portPid, force ? 'SIGKILL' : 'SIGTERM');
|
|
91
|
+
await this.waitForStop(port, 5000);
|
|
92
|
+
this.log('Daemon stopped');
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (force) {
|
|
96
|
+
this.log(`Warning: Failed to kill process: ${error instanceof Error ? error.message : String(error)}`);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
this.log('Starting daemon via wrapper script...');
|
|
104
|
+
try {
|
|
105
|
+
// Use spawn to start in background (doesn't wait for completion)
|
|
106
|
+
const daemonProcess = spawn('/Users/daniel/mcp/metalink/metalink-daemon.sh', ['start'], {
|
|
107
|
+
detached: true,
|
|
108
|
+
stdio: 'ignore'
|
|
109
|
+
});
|
|
110
|
+
// Unref so parent process can exit
|
|
111
|
+
daemonProcess.unref();
|
|
112
|
+
await this.waitForDaemonRestart(port, 10000);
|
|
113
|
+
const newPortPid = this.getPortPid(port);
|
|
114
|
+
this.log(`Daemon started at PID ${newPortPid || 'unknown'}`);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
throw new Error(`Failed to start daemon: ${error instanceof Error ? error.message : String(error)}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
getPortPid(port) {
|
|
121
|
+
try {
|
|
122
|
+
const result = execSync(`lsof -i :${port} -n -P 2>/dev/null | grep LISTEN`, {
|
|
123
|
+
encoding: 'utf-8',
|
|
124
|
+
stdio: ['pipe', 'pipe', 'ignore']
|
|
125
|
+
});
|
|
126
|
+
if (result && result.trim()) {
|
|
127
|
+
const pid = result.trim().split(/\s+/)[1];
|
|
128
|
+
if (pid && !isNaN(parseInt(pid, 10))) {
|
|
129
|
+
return parseInt(pid, 10);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// No process on port
|
|
135
|
+
}
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
async waitForStop(port, timeoutMs) {
|
|
139
|
+
const startTime = Date.now();
|
|
140
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
141
|
+
if (!this.getPortPid(port)) {
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
await new Promise(resolve => setTimeout(resolve, 200));
|
|
145
|
+
}
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
async waitForDaemonRestart(port, timeoutMs) {
|
|
149
|
+
const startTime = Date.now();
|
|
150
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
151
|
+
try {
|
|
152
|
+
const portPid = this.getPortPid(port);
|
|
153
|
+
if (portPid) {
|
|
154
|
+
try {
|
|
155
|
+
execSync(`curl -s -m 2 http://localhost:${port}/mcp > /dev/null 2>&1`, {
|
|
156
|
+
stdio: 'ignore'
|
|
157
|
+
});
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
if (Date.now() - startTime > 5000) {
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
// Continue waiting
|
|
169
|
+
}
|
|
170
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
171
|
+
}
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
DaemonRestart.description = 'Restart the MetaLink daemon';
|
|
176
|
+
DaemonRestart.flags = {
|
|
177
|
+
force: Flags.boolean({
|
|
178
|
+
char: 'f',
|
|
179
|
+
description: 'Force restart by killing stuck processes',
|
|
180
|
+
default: false
|
|
181
|
+
})
|
|
182
|
+
};
|
|
183
|
+
export default DaemonRestart;
|
|
184
|
+
//# sourceMappingURL=restart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart.js","sourceRoot":"","sources":["../../../src/commands/daemon/restart.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/commands/daemon/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAYtC,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,OAAO;IAC9C,MAAM,CAAC,WAAW,SAA2C;IAEvD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YA8DZ,aAAa;CAe5B"}
|