@codemcp/agentskills-core 0.0.7 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/__tests__/mcp-config-manager.test.d.ts +2 -0
  2. package/dist/__tests__/mcp-config-manager.test.d.ts.map +1 -0
  3. package/dist/__tests__/mcp-config-manager.test.js +417 -0
  4. package/dist/__tests__/mcp-config-manager.test.js.map +1 -0
  5. package/dist/__tests__/mcp-dependency-checker.test.d.ts +2 -0
  6. package/dist/__tests__/mcp-dependency-checker.test.d.ts.map +1 -0
  7. package/dist/__tests__/mcp-dependency-checker.test.js +555 -0
  8. package/dist/__tests__/mcp-dependency-checker.test.js.map +1 -0
  9. package/dist/__tests__/parameter-substitution.test.d.ts +2 -0
  10. package/dist/__tests__/parameter-substitution.test.d.ts.map +1 -0
  11. package/dist/__tests__/parameter-substitution.test.js +383 -0
  12. package/dist/__tests__/parameter-substitution.test.js.map +1 -0
  13. package/dist/__tests__/validator.test.js +383 -7
  14. package/dist/__tests__/validator.test.js.map +1 -1
  15. package/dist/index.d.ts +4 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +3 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/installer.d.ts +8 -1
  20. package/dist/installer.d.ts.map +1 -1
  21. package/dist/installer.js +42 -1
  22. package/dist/installer.js.map +1 -1
  23. package/dist/mcp-config-manager.d.ts +62 -0
  24. package/dist/mcp-config-manager.d.ts.map +1 -0
  25. package/dist/mcp-config-manager.js +140 -0
  26. package/dist/mcp-config-manager.js.map +1 -0
  27. package/dist/mcp-dependency-checker.d.ts +26 -0
  28. package/dist/mcp-dependency-checker.d.ts.map +1 -0
  29. package/dist/mcp-dependency-checker.js +68 -0
  30. package/dist/mcp-dependency-checker.js.map +1 -0
  31. package/dist/parameter-substitution.d.ts +20 -0
  32. package/dist/parameter-substitution.d.ts.map +1 -0
  33. package/dist/parameter-substitution.js +82 -0
  34. package/dist/parameter-substitution.js.map +1 -0
  35. package/dist/parser.d.ts.map +1 -1
  36. package/dist/parser.js +2 -1
  37. package/dist/parser.js.map +1 -1
  38. package/dist/types.d.ts +64 -0
  39. package/dist/types.d.ts.map +1 -1
  40. package/dist/validator.d.ts.map +1 -1
  41. package/dist/validator.js +194 -0
  42. package/dist/validator.js.map +1 -1
  43. package/package.json +4 -1
@@ -0,0 +1,383 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
+ import { substituteParameters } from "../parameter-substitution.js";
3
+ describe("Parameter Substitution", () => {
4
+ let originalEnv;
5
+ beforeEach(() => {
6
+ // Save original environment
7
+ originalEnv = { ...process.env };
8
+ // Set up test environment variables
9
+ process.env.HOME = "/home/testuser";
10
+ process.env.TEST_VAR = "test-value";
11
+ process.env.API_KEY = "secret-key";
12
+ });
13
+ afterEach(() => {
14
+ // Restore original environment
15
+ process.env = originalEnv;
16
+ });
17
+ describe("Simple String Substitution", () => {
18
+ it("should replace a single variable placeholder", () => {
19
+ const result = substituteParameters("{{VAR}}", { VAR: "value" });
20
+ expect(result).toBe("value");
21
+ });
22
+ it("should replace multiple variables in one string", () => {
23
+ const result = substituteParameters("{{A}}/{{B}}/{{C}}", {
24
+ A: "path",
25
+ B: "to",
26
+ C: "file"
27
+ });
28
+ expect(result).toBe("path/to/file");
29
+ });
30
+ it("should leave unmatched text as-is", () => {
31
+ const result = substituteParameters("static text", { VAR: "value" });
32
+ expect(result).toBe("static text");
33
+ });
34
+ it("should handle mixed static text and variables", () => {
35
+ const result = substituteParameters("prefix-{{VAR}}-suffix", {
36
+ VAR: "middle"
37
+ });
38
+ expect(result).toBe("prefix-middle-suffix");
39
+ });
40
+ it("should handle empty string", () => {
41
+ const result = substituteParameters("", { VAR: "value" });
42
+ expect(result).toBe("");
43
+ });
44
+ it("should throw error for missing required parameter", () => {
45
+ expect(() => {
46
+ substituteParameters("{{MISSING}}", {});
47
+ }).toThrow(/MISSING/);
48
+ });
49
+ it("should throw error with helpful message for missing parameter", () => {
50
+ expect(() => {
51
+ substituteParameters("{{API_KEY}}", { OTHER: "value" });
52
+ }).toThrow(/API_KEY.*required/i);
53
+ });
54
+ });
55
+ describe("Variable Name Patterns", () => {
56
+ it("should handle underscores in variable names", () => {
57
+ const result = substituteParameters("{{WORKSPACE_PATH}}", {
58
+ WORKSPACE_PATH: "/home/user/workspace"
59
+ });
60
+ expect(result).toBe("/home/user/workspace");
61
+ });
62
+ it("should handle hyphens in variable names", () => {
63
+ const result = substituteParameters("{{API-KEY}}", {
64
+ "API-KEY": "secret"
65
+ });
66
+ expect(result).toBe("secret");
67
+ });
68
+ it("should be case sensitive", () => {
69
+ const result = substituteParameters("{{VAR}} {{var}}", {
70
+ VAR: "upper",
71
+ var: "lower"
72
+ });
73
+ expect(result).toBe("upper lower");
74
+ });
75
+ it("should not partially match variable names", () => {
76
+ expect(() => {
77
+ substituteParameters("{{VARIABLE}}", { VARIABLE_NAME: "value" });
78
+ }).toThrow(/VARIABLE/);
79
+ });
80
+ it("should not replace if only part of variable name matches", () => {
81
+ expect(() => {
82
+ substituteParameters("{{VAR}}", { VARIABLE: "value" });
83
+ }).toThrow(/VAR/);
84
+ });
85
+ });
86
+ describe("Array Substitution", () => {
87
+ it("should substitute variables in array elements", () => {
88
+ const result = substituteParameters(["{{VAR}}", "static"], {
89
+ VAR: "value"
90
+ });
91
+ expect(result).toEqual(["value", "static"]);
92
+ });
93
+ it("should handle multiple variables in array", () => {
94
+ const result = substituteParameters(["{{A}}", "{{B}}", "{{C}}"], {
95
+ A: "a",
96
+ B: "b",
97
+ C: "c"
98
+ });
99
+ expect(result).toEqual(["a", "b", "c"]);
100
+ });
101
+ it("should handle mixed variables and static values in array", () => {
102
+ const result = substituteParameters(["-y", "{{PACKAGE}}", "--path={{PATH}}"], { PACKAGE: "my-package", PATH: "/usr/local" });
103
+ expect(result).toEqual(["-y", "my-package", "--path=/usr/local"]);
104
+ });
105
+ it("should handle empty array", () => {
106
+ const result = substituteParameters([], { VAR: "value" });
107
+ expect(result).toEqual([]);
108
+ });
109
+ it("should throw error for missing parameter in array", () => {
110
+ expect(() => {
111
+ substituteParameters(["{{MISSING}}"], {});
112
+ }).toThrow(/MISSING/);
113
+ });
114
+ });
115
+ describe("Object Substitution", () => {
116
+ it("should substitute variables in object values", () => {
117
+ const result = substituteParameters({ key: "{{VAR}}" }, { VAR: "value" });
118
+ expect(result).toEqual({ key: "value" });
119
+ });
120
+ it("should handle multiple variables in object", () => {
121
+ const result = substituteParameters({ key1: "{{A}}", key2: "{{B}}" }, { A: "a", B: "b" });
122
+ expect(result).toEqual({ key1: "a", key2: "b" });
123
+ });
124
+ it("should leave static object values as-is", () => {
125
+ const result = substituteParameters({ key1: "static", key2: "{{VAR}}" }, { VAR: "value" });
126
+ expect(result).toEqual({ key1: "static", key2: "value" });
127
+ });
128
+ it("should handle empty object", () => {
129
+ const result = substituteParameters({}, { VAR: "value" });
130
+ expect(result).toEqual({});
131
+ });
132
+ it("should throw error for missing parameter in object", () => {
133
+ expect(() => {
134
+ substituteParameters({ key: "{{MISSING}}" }, {});
135
+ }).toThrow(/MISSING/);
136
+ });
137
+ it("should not modify object keys, only values", () => {
138
+ const result = substituteParameters({ "{{KEY}}": "{{VALUE}}" }, { KEY: "new-key", VALUE: "new-value" });
139
+ // Keys should remain as-is, only values are substituted
140
+ expect(result).toEqual({ "{{KEY}}": "new-value" });
141
+ });
142
+ });
143
+ describe("Nested Structure Substitution", () => {
144
+ it("should handle nested objects", () => {
145
+ const result = substituteParameters({ outer: { inner: "{{VAR}}" } }, { VAR: "value" });
146
+ expect(result).toEqual({ outer: { inner: "value" } });
147
+ });
148
+ it("should handle nested arrays", () => {
149
+ const result = substituteParameters([["{{A}}", "{{B}}"], ["{{C}}"]], {
150
+ A: "a",
151
+ B: "b",
152
+ C: "c"
153
+ });
154
+ expect(result).toEqual([["a", "b"], ["c"]]);
155
+ });
156
+ it("should handle arrays inside objects", () => {
157
+ const result = substituteParameters({ args: ["{{A}}", "{{B}}"] }, { A: "a", B: "b" });
158
+ expect(result).toEqual({ args: ["a", "b"] });
159
+ });
160
+ it("should handle objects inside arrays", () => {
161
+ const result = substituteParameters([{ key: "{{VAR}}" }], {
162
+ VAR: "value"
163
+ });
164
+ expect(result).toEqual([{ key: "value" }]);
165
+ });
166
+ it("should handle deeply nested structures", () => {
167
+ const result = substituteParameters({
168
+ level1: {
169
+ level2: {
170
+ level3: ["{{A}}", { key: "{{B}}" }]
171
+ }
172
+ }
173
+ }, { A: "a", B: "b" });
174
+ expect(result).toEqual({
175
+ level1: {
176
+ level2: {
177
+ level3: ["a", { key: "b" }]
178
+ }
179
+ }
180
+ });
181
+ });
182
+ });
183
+ describe("MCP Server Config Shape", () => {
184
+ it("should handle typical MCP server config structure", () => {
185
+ const config = {
186
+ command: "npx",
187
+ args: ["-y", "{{PACKAGE}}", "{{WORKSPACE_PATH}}"],
188
+ env: {
189
+ API_KEY: "{{API_KEY}}",
190
+ DEBUG: "true"
191
+ }
192
+ };
193
+ const result = substituteParameters(config, {
194
+ PACKAGE: "@modelcontextprotocol/server-filesystem",
195
+ WORKSPACE_PATH: "/home/user",
196
+ API_KEY: "secret-123"
197
+ });
198
+ expect(result).toEqual({
199
+ command: "npx",
200
+ args: ["-y", "@modelcontextprotocol/server-filesystem", "/home/user"],
201
+ env: {
202
+ API_KEY: "secret-123",
203
+ DEBUG: "true"
204
+ }
205
+ });
206
+ });
207
+ it("should handle MCP config with missing optional cwd", () => {
208
+ const config = {
209
+ command: "node",
210
+ args: ["{{SCRIPT}}"]
211
+ };
212
+ const result = substituteParameters(config, {
213
+ SCRIPT: "server.js"
214
+ });
215
+ expect(result).toEqual({
216
+ command: "node",
217
+ args: ["server.js"]
218
+ });
219
+ });
220
+ it("should throw error for missing required MCP parameter", () => {
221
+ const config = {
222
+ command: "npx",
223
+ args: ["{{MISSING_PACKAGE}}"]
224
+ };
225
+ expect(() => {
226
+ substituteParameters(config, {});
227
+ }).toThrow(/MISSING_PACKAGE/);
228
+ });
229
+ });
230
+ describe("Environment Variable Substitution", () => {
231
+ it("should substitute environment variables with ENV: prefix", () => {
232
+ const result = substituteParameters("{{ENV:HOME}}", {});
233
+ expect(result).toBe("/home/testuser");
234
+ });
235
+ it("should substitute multiple environment variables", () => {
236
+ const result = substituteParameters("{{ENV:HOME}}/{{ENV:TEST_VAR}}", {});
237
+ expect(result).toBe("/home/testuser/test-value");
238
+ });
239
+ it("should handle ENV variables in arrays", () => {
240
+ const result = substituteParameters(["--api-key", "{{ENV:API_KEY}}"], {});
241
+ expect(result).toEqual(["--api-key", "secret-key"]);
242
+ });
243
+ it("should handle ENV variables in objects", () => {
244
+ const result = substituteParameters({ API_KEY: "{{ENV:API_KEY}}" }, {});
245
+ expect(result).toEqual({ API_KEY: "secret-key" });
246
+ });
247
+ it("should throw error for missing environment variable", () => {
248
+ expect(() => {
249
+ substituteParameters("{{ENV:NONEXISTENT_VAR}}", {});
250
+ }).toThrow(/NONEXISTENT_VAR.*environment/i);
251
+ });
252
+ it("should prefer parameters over environment variables", () => {
253
+ const result = substituteParameters("{{HOME}}", { HOME: "override" });
254
+ expect(result).toBe("override");
255
+ });
256
+ it("should handle mix of ENV and regular parameters", () => {
257
+ const result = substituteParameters("{{PARAM}}/{{ENV:HOME}}", {
258
+ PARAM: "value"
259
+ });
260
+ expect(result).toBe("value//home/testuser");
261
+ });
262
+ });
263
+ describe("Non-String Values", () => {
264
+ it("should pass through numbers unchanged", () => {
265
+ const result = substituteParameters(42, { VAR: "value" });
266
+ expect(result).toBe(42);
267
+ });
268
+ it("should pass through booleans unchanged", () => {
269
+ const result = substituteParameters(true, { VAR: "value" });
270
+ expect(result).toBe(true);
271
+ });
272
+ it("should pass through null unchanged", () => {
273
+ const result = substituteParameters(null, { VAR: "value" });
274
+ expect(result).toBe(null);
275
+ });
276
+ it("should pass through undefined unchanged", () => {
277
+ const result = substituteParameters(undefined, { VAR: "value" });
278
+ expect(result).toBe(undefined);
279
+ });
280
+ it("should handle mixed types in arrays", () => {
281
+ const result = substituteParameters(["{{VAR}}", 42, true, null], {
282
+ VAR: "value"
283
+ });
284
+ expect(result).toEqual(["value", 42, true, null]);
285
+ });
286
+ it("should handle mixed types in objects", () => {
287
+ const result = substituteParameters({ str: "{{VAR}}", num: 42, bool: true, nil: null }, { VAR: "value" });
288
+ expect(result).toEqual({ str: "value", num: 42, bool: true, nil: null });
289
+ });
290
+ it("should handle number as parameter value", () => {
291
+ const result = substituteParameters("{{PORT}}", { PORT: 3000 });
292
+ expect(result).toBe("3000");
293
+ });
294
+ it("should handle boolean as parameter value", () => {
295
+ const result = substituteParameters("{{FLAG}}", { FLAG: true });
296
+ expect(result).toBe("true");
297
+ });
298
+ });
299
+ describe("Edge Cases", () => {
300
+ it("should handle empty parameters object", () => {
301
+ const result = substituteParameters("static text", {});
302
+ expect(result).toBe("static text");
303
+ });
304
+ it("should handle template with no placeholders", () => {
305
+ const result = substituteParameters({ command: "node", args: ["script.js"] }, { VAR: "unused" });
306
+ expect(result).toEqual({ command: "node", args: ["script.js"] });
307
+ });
308
+ it("should handle multiple occurrences of same variable", () => {
309
+ const result = substituteParameters("{{VAR}}-{{VAR}}-{{VAR}}", {
310
+ VAR: "x"
311
+ });
312
+ expect(result).toBe("x-x-x");
313
+ });
314
+ it("should handle adjacent placeholders without separator", () => {
315
+ const result = substituteParameters("{{A}}{{B}}", { A: "a", B: "b" });
316
+ expect(result).toBe("ab");
317
+ });
318
+ it("should not replace malformed placeholders", () => {
319
+ const result = substituteParameters("{VAR}", { VAR: "value" });
320
+ expect(result).toBe("{VAR}");
321
+ });
322
+ it("should not replace single brace placeholders", () => {
323
+ const result = substituteParameters("{{VAR}", { VAR: "value" });
324
+ expect(result).toBe("{{VAR}");
325
+ });
326
+ it("should handle nested braces", () => {
327
+ const result = substituteParameters("{{{VAR}}}", { VAR: "value" });
328
+ expect(result).toBe("{value}");
329
+ });
330
+ it("should handle whitespace in placeholder", () => {
331
+ expect(() => {
332
+ substituteParameters("{{ VAR }}", { VAR: "value" });
333
+ }).toThrow();
334
+ });
335
+ it("should handle special characters in values", () => {
336
+ const result = substituteParameters("{{VAR}}", {
337
+ VAR: "value-with-special!@#$%^&*()"
338
+ });
339
+ expect(result).toBe("value-with-special!@#$%^&*()");
340
+ });
341
+ it("should handle unicode in values", () => {
342
+ const result = substituteParameters("{{VAR}}", { VAR: "hello-世界-🌍" });
343
+ expect(result).toBe("hello-世界-🌍");
344
+ });
345
+ it("should handle very long strings", () => {
346
+ const longValue = "x".repeat(10000);
347
+ const result = substituteParameters("{{VAR}}", { VAR: longValue });
348
+ expect(result).toBe(longValue);
349
+ });
350
+ it("should preserve empty strings in parameter values", () => {
351
+ const result = substituteParameters("{{VAR}}", { VAR: "" });
352
+ expect(result).toBe("");
353
+ });
354
+ it("should handle circular reference prevention", () => {
355
+ // Parameter value should not be recursively substituted
356
+ const result = substituteParameters("{{VAR}}", { VAR: "{{OTHER}}" });
357
+ expect(result).toBe("{{OTHER}}");
358
+ });
359
+ });
360
+ describe("Type Preservation", () => {
361
+ it("should return string when template is string", () => {
362
+ const result = substituteParameters("{{VAR}}", { VAR: "value" });
363
+ expect(typeof result).toBe("string");
364
+ });
365
+ it("should return array when template is array", () => {
366
+ const result = substituteParameters(["{{VAR}}"], { VAR: "value" });
367
+ expect(Array.isArray(result)).toBe(true);
368
+ });
369
+ it("should return object when template is object", () => {
370
+ const result = substituteParameters({ key: "{{VAR}}" }, { VAR: "value" });
371
+ expect(typeof result).toBe("object");
372
+ expect(result).not.toBeNull();
373
+ expect(Array.isArray(result)).toBe(false);
374
+ });
375
+ it("should preserve array vs object distinction", () => {
376
+ const arrayResult = substituteParameters([], {});
377
+ const objectResult = substituteParameters({}, {});
378
+ expect(Array.isArray(arrayResult)).toBe(true);
379
+ expect(Array.isArray(objectResult)).toBe(false);
380
+ });
381
+ });
382
+ });
383
+ //# sourceMappingURL=parameter-substitution.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameter-substitution.test.js","sourceRoot":"","sources":["../../src/__tests__/parameter-substitution.test.ts"],"names":[],"mappings":"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"}