@daniel.stefan/metalink 1.3.12 → 1.3.14
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 +55 -0
- package/package.json +4 -2
- package/packages/cli/dist/commands/__tests__/daemon.test.d.ts +2 -0
- package/packages/cli/dist/commands/__tests__/daemon.test.d.ts.map +1 -0
- package/packages/cli/dist/commands/__tests__/daemon.test.js +79 -0
- package/packages/cli/dist/commands/__tests__/daemon.test.js.map +1 -0
- package/packages/cli/dist/commands/__tests__/safety.test.d.ts +2 -0
- package/packages/cli/dist/commands/__tests__/safety.test.d.ts.map +1 -0
- package/packages/cli/dist/commands/__tests__/safety.test.js +76 -0
- package/packages/cli/dist/commands/__tests__/safety.test.js.map +1 -0
- package/packages/cli/dist/commands/__tests__/server.test.d.ts +2 -0
- package/packages/cli/dist/commands/__tests__/server.test.d.ts.map +1 -0
- package/packages/cli/dist/commands/__tests__/server.test.js +126 -0
- package/packages/cli/dist/commands/__tests__/server.test.js.map +1 -0
- package/packages/cli/dist/commands/__tests__/tool.test.d.ts +2 -0
- package/packages/cli/dist/commands/__tests__/tool.test.d.ts.map +1 -0
- package/packages/cli/dist/commands/__tests__/tool.test.js +84 -0
- package/packages/cli/dist/commands/__tests__/tool.test.js.map +1 -0
- package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.js +2 -2
- package/packages/cli/package.json +10 -2
- package/packages/core/dist/config/schema.d.ts.map +1 -1
- package/packages/core/dist/config/schema.js +8 -2
- package/packages/core/dist/config/schema.js.map +1 -1
- package/packages/core/dist/server/http.d.ts.map +1 -1
- package/packages/core/dist/server/http.js +3 -1
- package/packages/core/dist/server/http.js.map +1 -1
- package/packages/core/dist/server/manager.d.ts +7 -0
- package/packages/core/dist/server/manager.d.ts.map +1 -1
- package/packages/core/dist/server/manager.js +16 -0
- package/packages/core/dist/server/manager.js.map +1 -1
- package/packages/core/dist/server/managers/ProcessManager.d.ts.map +1 -1
- package/packages/core/dist/server/managers/ProcessManager.js +13 -1
- package/packages/core/dist/server/managers/ProcessManager.js.map +1 -1
- package/packages/core/package.json +1 -1
- package/packages/dashboard/package.json +1 -1
- package/packages/shared/package.json +3 -2
package/README.md
CHANGED
|
@@ -85,6 +85,61 @@ open http://localhost:3000
|
|
|
85
85
|
| `metalink tool list <server>` | List tools for a specific server |
|
|
86
86
|
| `metalink config edit` | Edit configuration |
|
|
87
87
|
|
|
88
|
+
|
|
89
|
+
## Monitoring & Health Checks
|
|
90
|
+
|
|
91
|
+
### Programmatic Health Check
|
|
92
|
+
|
|
93
|
+
For monitoring systems and automated health checks:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
curl http://localhost:6655/api/health
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**Response format:**
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"status": "healthy|degraded|unhealthy",
|
|
103
|
+
"version": "1.x.x",
|
|
104
|
+
"uptime_seconds": 12345,
|
|
105
|
+
"checks": {
|
|
106
|
+
"daemon": {"status": "healthy"},
|
|
107
|
+
"base_servers": {
|
|
108
|
+
"memory": {
|
|
109
|
+
"status": "healthy",
|
|
110
|
+
"tools_count": 9
|
|
111
|
+
},
|
|
112
|
+
"vault": {
|
|
113
|
+
"status": "unhealthy",
|
|
114
|
+
"error": "Server not running"
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**HTTP Status Codes:**
|
|
122
|
+
- **200 OK** - Daemon is healthy (all servers) or degraded (some servers down)
|
|
123
|
+
- **503 Service Unavailable** - Daemon is unhealthy (all servers down or critical error)
|
|
124
|
+
|
|
125
|
+
**Exit Codes:**
|
|
126
|
+
```bash
|
|
127
|
+
# Returns exit code 0 if healthy (200 OK)
|
|
128
|
+
# Returns non-zero exit code if unhealthy (503)
|
|
129
|
+
curl -f http://localhost:6655/api/health
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Browser Access to Dashboard
|
|
133
|
+
|
|
134
|
+
For manual access to the web dashboard:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
http://localhost:6655/ # HTML dashboard
|
|
138
|
+
http://localhost:6655/health # HTML dashboard (SPA fallback)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Note:** Use `/api/health` for JSON (monitoring), `/` or `/health` for HTML (browsers).
|
|
142
|
+
|
|
88
143
|
## Configuration
|
|
89
144
|
|
|
90
145
|
MetaLink stores configuration in `~/.config/metalink/`:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@daniel.stefan/metalink",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.14",
|
|
4
4
|
"description": "MetaLink MCP Management Platform - Universal MCP server orchestrator",
|
|
5
5
|
"private": false,
|
|
6
6
|
"publishConfig": {
|
|
@@ -27,8 +27,9 @@
|
|
|
27
27
|
"scripts": {
|
|
28
28
|
"build": "turbo build",
|
|
29
29
|
"build:verified": "node scripts/build-with-verification.js",
|
|
30
|
-
"test": "
|
|
30
|
+
"test": "node scripts/run-all-tests.js",
|
|
31
31
|
"test:packaged": "node scripts/test-published-package.js",
|
|
32
|
+
"test:unit": "npm --workspaces run test -- --run",
|
|
32
33
|
"dev": "npm --workspaces run dev",
|
|
33
34
|
"lint": "npm --workspaces run lint",
|
|
34
35
|
"format": "prettier --write \"packages/**/*.{ts,tsx,json,md}\"",
|
|
@@ -56,6 +57,7 @@
|
|
|
56
57
|
},
|
|
57
58
|
"devDependencies": {
|
|
58
59
|
"@changesets/cli": "^2.29.8",
|
|
60
|
+
"@oclif/test": "^4.1.16",
|
|
59
61
|
"@types/node": "^20.0.0",
|
|
60
62
|
"esbuild": "^0.27.3",
|
|
61
63
|
"glob": "^13.0.6",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/daemon.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// Daemon Commands Tests using execSync with clean environment
|
|
2
|
+
import { describe, it, expect } from "vitest";
|
|
3
|
+
import { execSync } from "child_process";
|
|
4
|
+
import { join, dirname } from "path";
|
|
5
|
+
import { fileURLToPath } from "url";
|
|
6
|
+
const cliRoot = dirname(dirname(dirname(dirname(fileURLToPath(import.meta.url)))));
|
|
7
|
+
const cliBin = join(cliRoot, "dist", "bin", "cli.js");
|
|
8
|
+
// Clean environment to avoid vitest interference
|
|
9
|
+
const cleanEnv = {
|
|
10
|
+
PATH: process.env.PATH || "",
|
|
11
|
+
HOME: process.env.HOME || "",
|
|
12
|
+
USER: process.env.USER || "",
|
|
13
|
+
};
|
|
14
|
+
describe("Daemon Commands", () => {
|
|
15
|
+
describe("daemon status", () => {
|
|
16
|
+
it("should show daemon status", () => {
|
|
17
|
+
try {
|
|
18
|
+
const result = execSync(`node "${cliBin}" daemon status`, {
|
|
19
|
+
encoding: "utf8",
|
|
20
|
+
timeout: 5000,
|
|
21
|
+
cwd: cliRoot,
|
|
22
|
+
env: cleanEnv,
|
|
23
|
+
});
|
|
24
|
+
expect(result).toMatch(/Daemon is|running|stopped|not running/i);
|
|
25
|
+
}
|
|
26
|
+
catch (e) {
|
|
27
|
+
// Command might exit with code 1 if daemon not running, but should still show status
|
|
28
|
+
expect(e.stdout || e.stderr || e.message).toMatch(/Daemon is|running|stopped|not running/i);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
it("should show help", () => {
|
|
32
|
+
const result = execSync(`node "${cliBin}" daemon status --help`, {
|
|
33
|
+
encoding: "utf8",
|
|
34
|
+
timeout: 5000,
|
|
35
|
+
cwd: cliRoot,
|
|
36
|
+
env: cleanEnv,
|
|
37
|
+
});
|
|
38
|
+
expect(result).toContain("USAGE");
|
|
39
|
+
expect(result).toContain("daemon status");
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
describe("daemon start", () => {
|
|
43
|
+
it("should show help", () => {
|
|
44
|
+
const result = execSync(`node "${cliBin}" daemon start --help`, {
|
|
45
|
+
encoding: "utf8",
|
|
46
|
+
timeout: 5000,
|
|
47
|
+
cwd: cliRoot,
|
|
48
|
+
env: cleanEnv,
|
|
49
|
+
});
|
|
50
|
+
expect(result).toContain("USAGE");
|
|
51
|
+
expect(result).toContain("daemon start");
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe("daemon stop", () => {
|
|
55
|
+
it("should show help", () => {
|
|
56
|
+
const result = execSync(`node "${cliBin}" daemon stop --help`, {
|
|
57
|
+
encoding: "utf8",
|
|
58
|
+
timeout: 5000,
|
|
59
|
+
cwd: cliRoot,
|
|
60
|
+
env: cleanEnv,
|
|
61
|
+
});
|
|
62
|
+
expect(result).toContain("USAGE");
|
|
63
|
+
expect(result).toContain("daemon stop");
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
describe("daemon restart", () => {
|
|
67
|
+
it("should show help", () => {
|
|
68
|
+
const result = execSync(`node "${cliBin}" daemon restart --help`, {
|
|
69
|
+
encoding: "utf8",
|
|
70
|
+
timeout: 5000,
|
|
71
|
+
cwd: cliRoot,
|
|
72
|
+
env: cleanEnv,
|
|
73
|
+
});
|
|
74
|
+
expect(result).toContain("USAGE");
|
|
75
|
+
expect(result).toContain("daemon restart");
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=daemon.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/daemon.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safety.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/safety.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// Safety Commands Tests using execSync with clean environment
|
|
2
|
+
import { describe, it, expect } from "vitest";
|
|
3
|
+
import { execSync } from "child_process";
|
|
4
|
+
import { join, dirname } from "path";
|
|
5
|
+
import { fileURLToPath } from "url";
|
|
6
|
+
const cliRoot = dirname(dirname(dirname(dirname(fileURLToPath(import.meta.url)))));
|
|
7
|
+
const cliBin = join(cliRoot, "dist", "bin", "cli.js");
|
|
8
|
+
// Clean environment to avoid vitest interference
|
|
9
|
+
const cleanEnv = {
|
|
10
|
+
PATH: process.env.PATH || "",
|
|
11
|
+
HOME: process.env.HOME || "",
|
|
12
|
+
USER: process.env.USER || "",
|
|
13
|
+
};
|
|
14
|
+
describe("Safety Commands", () => {
|
|
15
|
+
describe("safety list", () => {
|
|
16
|
+
it("should show help", () => {
|
|
17
|
+
const result = execSync(`node "${cliBin}" safety list --help`, {
|
|
18
|
+
encoding: "utf8",
|
|
19
|
+
timeout: 5000,
|
|
20
|
+
cwd: cliRoot,
|
|
21
|
+
env: cleanEnv,
|
|
22
|
+
});
|
|
23
|
+
expect(result).toContain("USAGE");
|
|
24
|
+
expect(result).toContain("safety list");
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
describe("safety check", () => {
|
|
28
|
+
it("should show help", () => {
|
|
29
|
+
const result = execSync(`node "${cliBin}" safety check --help`, {
|
|
30
|
+
encoding: "utf8",
|
|
31
|
+
timeout: 5000,
|
|
32
|
+
cwd: cliRoot,
|
|
33
|
+
env: cleanEnv,
|
|
34
|
+
});
|
|
35
|
+
expect(result).toContain("USAGE");
|
|
36
|
+
expect(result).toContain("safety check");
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe("safety add-safe", () => {
|
|
40
|
+
it("should show help", () => {
|
|
41
|
+
const result = execSync(`node "${cliBin}" safety add-safe --help`, {
|
|
42
|
+
encoding: "utf8",
|
|
43
|
+
timeout: 5000,
|
|
44
|
+
cwd: cliRoot,
|
|
45
|
+
env: cleanEnv,
|
|
46
|
+
});
|
|
47
|
+
expect(result).toContain("USAGE");
|
|
48
|
+
expect(result).toContain("safety add-safe");
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
describe("safety add-risky", () => {
|
|
52
|
+
it("should show help", () => {
|
|
53
|
+
const result = execSync(`node "${cliBin}" safety add-risky --help`, {
|
|
54
|
+
encoding: "utf8",
|
|
55
|
+
timeout: 5000,
|
|
56
|
+
cwd: cliRoot,
|
|
57
|
+
env: cleanEnv,
|
|
58
|
+
});
|
|
59
|
+
expect(result).toContain("USAGE");
|
|
60
|
+
expect(result).toContain("safety add-risky");
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
describe("safety remove", () => {
|
|
64
|
+
it("should show help", () => {
|
|
65
|
+
const result = execSync(`node "${cliBin}" safety remove --help`, {
|
|
66
|
+
encoding: "utf8",
|
|
67
|
+
timeout: 5000,
|
|
68
|
+
cwd: cliRoot,
|
|
69
|
+
env: cleanEnv,
|
|
70
|
+
});
|
|
71
|
+
expect(result).toContain("USAGE");
|
|
72
|
+
expect(result).toContain("safety remove");
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=safety.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safety.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/safety.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/server.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// Server Commands Tests using execSync with clean environment
|
|
2
|
+
import { describe, it, expect } from "vitest";
|
|
3
|
+
import { execSync } from "child_process";
|
|
4
|
+
import { join, dirname } from "path";
|
|
5
|
+
import { fileURLToPath } from "url";
|
|
6
|
+
const cliRoot = dirname(dirname(dirname(dirname(fileURLToPath(import.meta.url)))));
|
|
7
|
+
const cliBin = join(cliRoot, "dist", "bin", "cli.js");
|
|
8
|
+
// Clean environment to avoid vitest interference
|
|
9
|
+
const cleanEnv = {
|
|
10
|
+
PATH: process.env.PATH || "",
|
|
11
|
+
HOME: process.env.HOME || "",
|
|
12
|
+
USER: process.env.USER || "",
|
|
13
|
+
};
|
|
14
|
+
describe("Server Commands", () => {
|
|
15
|
+
describe("server list", () => {
|
|
16
|
+
it("should show help", () => {
|
|
17
|
+
const result = execSync(`node "${cliBin}" server list --help`, {
|
|
18
|
+
encoding: "utf8",
|
|
19
|
+
timeout: 5000,
|
|
20
|
+
cwd: cliRoot,
|
|
21
|
+
env: cleanEnv,
|
|
22
|
+
});
|
|
23
|
+
expect(result).toContain("USAGE");
|
|
24
|
+
expect(result).toContain("server list");
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
describe("server add", () => {
|
|
28
|
+
it("should show help", () => {
|
|
29
|
+
const result = execSync(`node "${cliBin}" server add --help`, {
|
|
30
|
+
encoding: "utf8",
|
|
31
|
+
timeout: 5000,
|
|
32
|
+
cwd: cliRoot,
|
|
33
|
+
env: cleanEnv,
|
|
34
|
+
});
|
|
35
|
+
expect(result).toContain("USAGE");
|
|
36
|
+
expect(result).toContain("server add");
|
|
37
|
+
});
|
|
38
|
+
it("should require name flag", () => {
|
|
39
|
+
try {
|
|
40
|
+
execSync(`node "${cliBin}" server add`, {
|
|
41
|
+
encoding: "utf8",
|
|
42
|
+
timeout: 5000,
|
|
43
|
+
cwd: cliRoot,
|
|
44
|
+
env: cleanEnv,
|
|
45
|
+
});
|
|
46
|
+
expect(false).toBe(true);
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
expect(e.stderr || e.message).toMatch(/required|Missing|flag|name/i);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
describe("server remove", () => {
|
|
54
|
+
it("should show help", () => {
|
|
55
|
+
const result = execSync(`node "${cliBin}" server remove --help`, {
|
|
56
|
+
encoding: "utf8",
|
|
57
|
+
timeout: 5000,
|
|
58
|
+
cwd: cliRoot,
|
|
59
|
+
env: cleanEnv,
|
|
60
|
+
});
|
|
61
|
+
expect(result).toContain("USAGE");
|
|
62
|
+
expect(result).toContain("server remove");
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe("server status", () => {
|
|
66
|
+
it("should show help", () => {
|
|
67
|
+
const result = execSync(`node "${cliBin}" server status --help`, {
|
|
68
|
+
encoding: "utf8",
|
|
69
|
+
timeout: 5000,
|
|
70
|
+
cwd: cliRoot,
|
|
71
|
+
env: cleanEnv,
|
|
72
|
+
});
|
|
73
|
+
expect(result).toContain("USAGE");
|
|
74
|
+
expect(result).toContain("server status");
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
describe("server info", () => {
|
|
78
|
+
it("should show help", () => {
|
|
79
|
+
const result = execSync(`node "${cliBin}" server info --help`, {
|
|
80
|
+
encoding: "utf8",
|
|
81
|
+
timeout: 5000,
|
|
82
|
+
cwd: cliRoot,
|
|
83
|
+
env: cleanEnv,
|
|
84
|
+
});
|
|
85
|
+
expect(result).toContain("USAGE");
|
|
86
|
+
expect(result).toContain("server info");
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe("server available", () => {
|
|
90
|
+
it("should show help", () => {
|
|
91
|
+
const result = execSync(`node "${cliBin}" server available --help`, {
|
|
92
|
+
encoding: "utf8",
|
|
93
|
+
timeout: 5000,
|
|
94
|
+
cwd: cliRoot,
|
|
95
|
+
env: cleanEnv,
|
|
96
|
+
});
|
|
97
|
+
expect(result).toContain("USAGE");
|
|
98
|
+
expect(result).toContain("server available");
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
describe("server validate", () => {
|
|
102
|
+
it("should show help", () => {
|
|
103
|
+
const result = execSync(`node "${cliBin}" server validate --help`, {
|
|
104
|
+
encoding: "utf8",
|
|
105
|
+
timeout: 5000,
|
|
106
|
+
cwd: cliRoot,
|
|
107
|
+
env: cleanEnv,
|
|
108
|
+
});
|
|
109
|
+
expect(result).toContain("USAGE");
|
|
110
|
+
expect(result).toContain("server validate");
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
describe("server refresh-tools", () => {
|
|
114
|
+
it("should show help", () => {
|
|
115
|
+
const result = execSync(`node "${cliBin}" server refresh-tools --help`, {
|
|
116
|
+
encoding: "utf8",
|
|
117
|
+
timeout: 5000,
|
|
118
|
+
cwd: cliRoot,
|
|
119
|
+
env: cleanEnv,
|
|
120
|
+
});
|
|
121
|
+
expect(result).toContain("USAGE");
|
|
122
|
+
expect(result).toContain("server refresh-tools");
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
//# sourceMappingURL=server.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/server.test.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,OAAO,GAAG,OAAO,CACrB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAC1D,CAAC;AACF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAEtD,iDAAiD;AACjD,MAAM,QAAQ,GAA2B;IACvC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;IAC5B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;IAC5B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;CAC7B,CAAC;AAEF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,MAAM,sBAAsB,EAAE;gBAC7D,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,OAAO;gBACZ,GAAG,EAAE,QAAQ;aACd,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,MAAM,qBAAqB,EAAE;gBAC5D,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,OAAO;gBACZ,GAAG,EAAE,QAAQ;aACd,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,IAAI,CAAC;gBACH,QAAQ,CAAC,SAAS,MAAM,cAAc,EAAE;oBACtC,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,IAAI;oBACb,GAAG,EAAE,OAAO;oBACZ,GAAG,EAAE,QAAQ;iBACd,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;YACvE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,MAAM,wBAAwB,EAAE;gBAC/D,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,OAAO;gBACZ,GAAG,EAAE,QAAQ;aACd,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,MAAM,wBAAwB,EAAE;gBAC/D,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,OAAO;gBACZ,GAAG,EAAE,QAAQ;aACd,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,MAAM,sBAAsB,EAAE;gBAC7D,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,OAAO;gBACZ,GAAG,EAAE,QAAQ;aACd,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,MAAM,2BAA2B,EAAE;gBAClE,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,OAAO;gBACZ,GAAG,EAAE,QAAQ;aACd,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,MAAM,0BAA0B,EAAE;gBACjE,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,OAAO;gBACZ,GAAG,EAAE,QAAQ;aACd,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,MAAM,+BAA+B,EAAE;gBACtE,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,OAAO;gBACZ,GAAG,EAAE,QAAQ;aACd,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/tool.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// Tool Commands Tests using execSync with clean environment
|
|
2
|
+
import { describe, it, expect } from "vitest";
|
|
3
|
+
import { execSync } from "child_process";
|
|
4
|
+
import { join, dirname } from "path";
|
|
5
|
+
import { fileURLToPath } from "url";
|
|
6
|
+
const cliRoot = dirname(dirname(dirname(dirname(fileURLToPath(import.meta.url)))));
|
|
7
|
+
const cliBin = join(cliRoot, "dist", "bin", "cli.js");
|
|
8
|
+
// Clean environment to avoid vitest interference
|
|
9
|
+
const cleanEnv = {
|
|
10
|
+
PATH: process.env.PATH || "",
|
|
11
|
+
HOME: process.env.HOME || "",
|
|
12
|
+
USER: process.env.USER || "",
|
|
13
|
+
};
|
|
14
|
+
describe("Tool Commands", () => {
|
|
15
|
+
describe("tool list --help", () => {
|
|
16
|
+
it("should show help", () => {
|
|
17
|
+
const result = execSync(`node "${cliBin}" tool list --help`, {
|
|
18
|
+
encoding: "utf8",
|
|
19
|
+
timeout: 5000,
|
|
20
|
+
cwd: cliRoot,
|
|
21
|
+
env: cleanEnv,
|
|
22
|
+
});
|
|
23
|
+
expect(result).toContain("USAGE");
|
|
24
|
+
expect(result).toContain("tool list");
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
describe("tool list", () => {
|
|
28
|
+
it("should require server argument", () => {
|
|
29
|
+
try {
|
|
30
|
+
execSync(`node "${cliBin}" tool list`, {
|
|
31
|
+
encoding: "utf8",
|
|
32
|
+
timeout: 5000,
|
|
33
|
+
cwd: cliRoot,
|
|
34
|
+
env: cleanEnv,
|
|
35
|
+
});
|
|
36
|
+
expect(false).toBe(true); // Should not reach here
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
expect(e.stderr || e.message).toMatch(/required|Missing|Argument|SERVER/i);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe("tool search --help", () => {
|
|
44
|
+
it("should show help", () => {
|
|
45
|
+
const result = execSync(`node "${cliBin}" tool search --help`, {
|
|
46
|
+
encoding: "utf8",
|
|
47
|
+
timeout: 5000,
|
|
48
|
+
cwd: cliRoot,
|
|
49
|
+
env: cleanEnv,
|
|
50
|
+
});
|
|
51
|
+
expect(result).toContain("USAGE");
|
|
52
|
+
expect(result).toContain("tool search");
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe("tool execute --help", () => {
|
|
56
|
+
it("should show help", () => {
|
|
57
|
+
const result = execSync(`node "${cliBin}" tool execute --help`, {
|
|
58
|
+
encoding: "utf8",
|
|
59
|
+
timeout: 5000,
|
|
60
|
+
cwd: cliRoot,
|
|
61
|
+
env: cleanEnv,
|
|
62
|
+
});
|
|
63
|
+
expect(result).toContain("USAGE");
|
|
64
|
+
expect(result).toContain("tool execute");
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
describe("tool execute", () => {
|
|
68
|
+
it("should require server and tool flags", () => {
|
|
69
|
+
try {
|
|
70
|
+
execSync(`node "${cliBin}" tool execute`, {
|
|
71
|
+
encoding: "utf8",
|
|
72
|
+
timeout: 5000,
|
|
73
|
+
cwd: cliRoot,
|
|
74
|
+
env: cleanEnv,
|
|
75
|
+
});
|
|
76
|
+
expect(false).toBe(true); // Should not reach here
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
expect(e.stderr || e.message).toMatch(/required|Missing/i);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=tool.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/tool.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -71,7 +71,7 @@ describe('CLI Server Management E2E', () => {
|
|
|
71
71
|
expect(true).toBe(true); // Placeholder for actual e2e test
|
|
72
72
|
});
|
|
73
73
|
it('should validate with arguments and environment variables', async () => {
|
|
74
|
-
// Command: metalink server validate my-server node --args "app.
|
|
74
|
+
// Command: metalink server validate my-server node --args "app.ts" --env "PORT=3000"
|
|
75
75
|
// Expected: All fields validated
|
|
76
76
|
// Result: ✓ Server configuration is valid
|
|
77
77
|
// Result: Arguments: app.js
|
|
@@ -145,7 +145,7 @@ describe('CLI Server Management E2E', () => {
|
|
|
145
145
|
expect(true).toBe(true); // Placeholder for actual e2e test
|
|
146
146
|
});
|
|
147
147
|
it('should handle special characters in arguments', async () => {
|
|
148
|
-
// Command: metalink server add my-server npx --args "@scope/package,-y,--config=path/to/config.
|
|
148
|
+
// Command: metalink server add my-server npx --args "@scope/package,-y,--config=path/to/config.ts"
|
|
149
149
|
// Expected: Arguments properly escaped and stored
|
|
150
150
|
// Result: Server created with special characters preserved
|
|
151
151
|
expect(true).toBe(true); // Placeholder for actual e2e test
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "metalink",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.14",
|
|
4
4
|
"description": "MetaLink CLI Tool",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -29,7 +29,15 @@
|
|
|
29
29
|
"vitest": "^1.0.0"
|
|
30
30
|
},
|
|
31
31
|
"oclif": {
|
|
32
|
-
"commands":
|
|
32
|
+
"commands": {
|
|
33
|
+
"strategy": "pattern",
|
|
34
|
+
"target": "./dist/commands",
|
|
35
|
+
"globPatterns": [
|
|
36
|
+
"**/*.+(js|cjs|mjs)",
|
|
37
|
+
"!**/__tests__/**",
|
|
38
|
+
"!**/*.+(d.*|test.*|spec.*|helpers.*|type.*|map).*"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
33
41
|
"bin": "metalink",
|
|
34
42
|
"topicSeparator": " ",
|
|
35
43
|
"topics": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;EAI5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;GAQd,CAAC;AAEd;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;GAMjB,CAAC;AAEd;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;GAKd,CAAC;AAEd;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AACxD,eAAO,MAAM,kBAAkB,wDAK5B,CAAC;AAEJ;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYzB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CAE9D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAEjD"}
|
|
@@ -46,7 +46,10 @@ export const ServerSafetySchema = z
|
|
|
46
46
|
* Stdio (command-based) server configuration
|
|
47
47
|
*/
|
|
48
48
|
export const StdioServerConfigSchema = z.object({
|
|
49
|
-
name: z
|
|
49
|
+
name: z
|
|
50
|
+
.string()
|
|
51
|
+
.min(1, "Server name is required")
|
|
52
|
+
.regex(/^[a-zA-Z0-9_-]+$/, "Server name must contain only letters, numbers, hyphens, and underscores"),
|
|
50
53
|
transport: z.literal("stdio").optional().default("stdio"),
|
|
51
54
|
command: z.string().min(1, "Command is required for stdio servers"),
|
|
52
55
|
args: z.array(z.string()).optional().default([]),
|
|
@@ -63,7 +66,10 @@ export const StdioServerConfigSchema = z.object({
|
|
|
63
66
|
* HTTP (remote) server configuration
|
|
64
67
|
*/
|
|
65
68
|
export const HttpServerConfigSchema = z.object({
|
|
66
|
-
name: z
|
|
69
|
+
name: z
|
|
70
|
+
.string()
|
|
71
|
+
.min(1, "Server name is required")
|
|
72
|
+
.regex(/^[a-zA-Z0-9_-]+$/, "Server name must contain only letters, numbers, hyphens, and underscores"),
|
|
67
73
|
transport: z.enum(["http", "sse", "sse-first", "http-stream"]),
|
|
68
74
|
url: z.string().url("URL must be a valid HTTP(S) endpoint"),
|
|
69
75
|
auth: HttpAuthSchema,
|