@loadmill/mcp 0.1.1 → 0.2.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/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/handlers/logging.d.ts +2 -0
- package/dist/handlers/logging.js +21 -0
- package/dist/handlers/logging.js.map +1 -0
- package/dist/handlers/prompts/index.js +1 -1
- package/dist/handlers/resources/index.js +3 -2
- package/dist/handlers/resources/index.js.map +1 -1
- package/dist/handlers/shared.js +4 -4
- package/dist/handlers/shared.js.map +1 -1
- package/dist/handlers/tools/tasks.js +41 -27
- package/dist/handlers/tools/tasks.js.map +1 -1
- package/dist/http-request.js +3 -2
- package/dist/http-request.js.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +18 -0
- package/dist/logger.js +56 -0
- package/dist/logger.js.map +1 -0
- package/dist/mcp-handler.js +2 -0
- package/dist/mcp-handler.js.map +1 -1
- package/dist/mcp-server.js +1 -0
- package/dist/mcp-server.js.map +1 -1
- package/package.json +3 -2
package/dist/constants.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const MCP_SERVER_NAME = "loadmill-mcp-server";
|
|
2
|
-
export declare const MCP_SERVER_VERSION = "0.0.
|
|
2
|
+
export declare const MCP_SERVER_VERSION = "0.0.2";
|
|
3
3
|
export declare const LOADMILL_URL: string;
|
|
4
4
|
export declare const ASSETS_URL: string;
|
|
5
5
|
export declare const API_URL: string;
|
package/dist/constants.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AVILABLE_RESOURCES = exports.AVILABLE_PROMPTS = exports.AVALIABLE_TOOLS = exports.SCHEMA_TYPE = exports.VALIDATE_TEST_SUITE = exports.GET_TEST_SUITE_SCHEMA = exports.GET_LABELS = exports.GET_TEST_PLAN_RUN = exports.RUN_TEST_PLAN = exports.SEARCH_TEST_PLAN = exports.GET_TEST_SUITE_FLOW_RUN = exports.GET_TEST_SUITE_RUN = exports.RUN_TEST_SUITE = exports.SEARCH_TEST_SUITE_RUNS = exports.SEARCH_TEST_SUITES = exports.API_URL = exports.ASSETS_URL = exports.LOADMILL_URL = exports.MCP_SERVER_VERSION = exports.MCP_SERVER_NAME = void 0;
|
|
4
4
|
exports.MCP_SERVER_NAME = 'loadmill-mcp-server';
|
|
5
|
-
exports.MCP_SERVER_VERSION = '0.0.
|
|
5
|
+
exports.MCP_SERVER_VERSION = '0.0.2';
|
|
6
6
|
exports.LOADMILL_URL = process.env.LOADMILL_URL || 'https://app.loadmill.com';
|
|
7
7
|
exports.ASSETS_URL = exports.LOADMILL_URL + '/assets';
|
|
8
8
|
exports.API_URL = exports.LOADMILL_URL + '/api';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handlers = void 0;
|
|
4
|
+
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
5
|
+
const logger_js_1 = require("../logger.js");
|
|
6
|
+
exports.handlers = [
|
|
7
|
+
{
|
|
8
|
+
schema: types_js_1.SetLevelRequestSchema,
|
|
9
|
+
handler: async (request) => {
|
|
10
|
+
const level = request.params?.level;
|
|
11
|
+
if (level) {
|
|
12
|
+
(0, logger_js_1.setLogLevel)(level);
|
|
13
|
+
if (logger_js_1.log) {
|
|
14
|
+
logger_js_1.log.info(`Set log level to ${level}`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return {};
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
];
|
|
21
|
+
//# sourceMappingURL=logging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/handlers/logging.ts"],"names":[],"mappings":";;;AAAA,iEAA2E;AAG3E,4CAAgD;AAEnC,QAAA,QAAQ,GAAiB;IACpC;QACE,MAAM,EAAE,gCAAqB;QAC7B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACzB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;YACpC,IAAI,KAAK,EAAE;gBACT,IAAA,uBAAW,EAAC,KAAK,CAAC,CAAC;gBACnB,IAAI,eAAG,EAAE;oBACP,eAAG,CAAC,IAAI,CAAC,oBAAoB,KAAK,EAAE,CAAC,CAAC;iBACvC;aACF;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;KACF;CACF,CAAC"}
|
|
@@ -72,7 +72,7 @@ const prompts = [
|
|
|
72
72
|
role: 'user',
|
|
73
73
|
content: `Create a test-suite named "{{name}}" to test the following endpoints and behaviors:\n\n {{requirements}}\n\n
|
|
74
74
|
Constraints:\n- Include flows and request steps covering happy-path and key edge-cases.\n-
|
|
75
|
-
Use descriptive names for flows and steps.\n- Parameterize repeated values in suite.parameters when reasonable.\n-
|
|
75
|
+
Use descriptive names for flows and steps.\n- Parameterize repeated values in suite.parameters when reasonable. Parameterised values use the format \${parameter_name}.\n-
|
|
76
76
|
Add basic assertions for status, response time, and core fields.\n- Output only JSON.`,
|
|
77
77
|
},
|
|
78
78
|
],
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.handlers = void 0;
|
|
4
4
|
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
5
5
|
const shared_js_1 = require("../shared.js");
|
|
6
|
+
const logger_js_1 = require("../../logger.js");
|
|
6
7
|
exports.handlers = [
|
|
7
8
|
{
|
|
8
9
|
schema: types_js_1.ListResourcesRequestSchema,
|
|
@@ -23,7 +24,7 @@ exports.handlers = [
|
|
|
23
24
|
schema: types_js_1.ReadResourceRequestSchema,
|
|
24
25
|
handler: async (request) => {
|
|
25
26
|
const uri = request?.params?.uri;
|
|
26
|
-
|
|
27
|
+
logger_js_1.log.info(`Reading resource with URI: ${uri ?? 'undefined'}`);
|
|
27
28
|
if (!uri) {
|
|
28
29
|
return {
|
|
29
30
|
contents: [
|
|
@@ -36,7 +37,7 @@ exports.handlers = [
|
|
|
36
37
|
}
|
|
37
38
|
if (uri === 'loadmill://schemas/test-suite@v1') {
|
|
38
39
|
const schema = await (0, shared_js_1.getSchema)(uri);
|
|
39
|
-
|
|
40
|
+
logger_js_1.log.info(`Fetched schema for URI: ${uri}`);
|
|
40
41
|
return {
|
|
41
42
|
contents: [
|
|
42
43
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/resources/index.ts"],"names":[],"mappings":";;;AAAA,iEAG4C;AAE5C,4CAAyC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/resources/index.ts"],"names":[],"mappings":";;;AAAA,iEAG4C;AAE5C,4CAAyC;AACzC,+CAAsC;AAGzB,QAAA,QAAQ,GAAiB;IACpC;QACE,MAAM,EAAE,qCAA0B;QAClC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;YAC1B,MAAM,SAAS,GAAG;gBAChB;oBACE,IAAI,EAAE,4BAA4B;oBAClC,KAAK,EAAE,4BAA4B;oBACnC,GAAG,EAAE,kCAAkC;oBACvC,WAAW,EACT,wEAAwE;oBAC1E,QAAQ,EAAE,yBAAyB;iBACpC;aACF,CAAC;YAEF,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,CAAC;KACF;IACD;QACE,MAAM,EAAE,oCAAyB;QACjC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACzB,MAAM,GAAG,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC;YAEjC,eAAG,CAAC,IAAI,CAAC,8BAA8B,GAAG,IAAI,WAAW,EAAE,CAAC,CAAC;YAC7D,IAAI,CAAC,GAAG,EAAE;gBACR,OAAO;oBACL,QAAQ,EAAE;wBACR;4BACE,QAAQ,EAAE,YAAY;4BACtB,IAAI,EAAE,sBAAsB;yBAC7B;qBACF;iBACF,CAAC;aACH;YAED,IAAI,GAAG,KAAK,kCAAkC,EAAE;gBAC9C,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAS,EAAC,GAAG,CAAC,CAAC;gBACpC,eAAG,CAAC,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;gBAC3C,OAAO;oBACL,QAAQ,EAAE;wBACR;4BACE,GAAG;4BACH,QAAQ,EAAE,kBAAkB;4BAC5B,IAAI,EAAE,MAAM;yBACb;qBACF;iBACF,CAAC;aACH;YAED,mBAAmB;YACnB,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,QAAQ,EAAE,YAAY;wBACtB,IAAI,EAAE,qBAAqB,GAAG,EAAE;qBACjC;iBACF;aACF,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
|
package/dist/handlers/shared.js
CHANGED
|
@@ -3,10 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.schemaTypeToSchemaURL = exports.getSchema = void 0;
|
|
4
4
|
const constants_1 = require("../constants");
|
|
5
5
|
const http_request_1 = require("../http-request");
|
|
6
|
+
const logger_js_1 = require("../logger.js");
|
|
6
7
|
const schemaCache = new Map();
|
|
7
8
|
async function getSchema(schemaType) {
|
|
8
9
|
try {
|
|
9
|
-
|
|
10
|
+
logger_js_1.log.info(`Getting schema with type: ${schemaType}`);
|
|
10
11
|
const schemaUrl = getSchemaURLByType(schemaType);
|
|
11
12
|
const cached = schemaCache.get(schemaUrl);
|
|
12
13
|
if (cached) {
|
|
@@ -21,12 +22,11 @@ async function getSchema(schemaType) {
|
|
|
21
22
|
text,
|
|
22
23
|
expiresAt: Date.now() + 60 * 60 * 1000, // Cache for 60 minutes
|
|
23
24
|
};
|
|
24
|
-
console.log('Cached schema:', entry);
|
|
25
25
|
schemaCache.set(schemaUrl, entry);
|
|
26
26
|
return entry.text;
|
|
27
27
|
}
|
|
28
28
|
catch (error) {
|
|
29
|
-
|
|
29
|
+
logger_js_1.log.error(`Failed to fetch schema for ${schemaType}: ${(0, logger_js_1.formatError)(error)}`);
|
|
30
30
|
throw error;
|
|
31
31
|
}
|
|
32
32
|
}
|
|
@@ -36,7 +36,7 @@ exports.schemaTypeToSchemaURL = {
|
|
|
36
36
|
};
|
|
37
37
|
function getSchemaURLByType(schemaType) {
|
|
38
38
|
const schemaUrl = exports.schemaTypeToSchemaURL[schemaType];
|
|
39
|
-
//
|
|
39
|
+
//log.info(`Resolved schema URL: ${schemaUrl}`);
|
|
40
40
|
if (!schemaUrl) {
|
|
41
41
|
throw new Error(`Unknown schema type: ${schemaType}`);
|
|
42
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/handlers/shared.ts"],"names":[],"mappings":";;;AAAA,4CAAuD;AACvD,kDAA+D;
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/handlers/shared.ts"],"names":[],"mappings":";;;AAAA,4CAAuD;AACvD,kDAA+D;AAC/D,4CAAgD;AAOhD,MAAM,WAAW,GAAG,IAAI,GAAG,EAA4B,CAAC;AAEjD,KAAK,UAAU,SAAS,CAAC,UAAkB;IAEhD,IAAI;QACF,eAAG,CAAC,IAAI,CAAC,6BAA6B,UAAU,EAAE,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE;gBACtD,OAAO,MAAM,CAAC,IAAI,CAAC;aACpB;YACD,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SAC/B;QAED,MAAM,IAAI,GAAG,MAAM,IAAA,8BAAe,EAAC,EAAE,MAAM,EAAE,0BAAW,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;QAChF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEvB,MAAM,KAAK,GAAqB;YAC9B,IAAI;YACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,uBAAuB;SAChE,CAAC;QACF,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC,IAAI,CAAC;KACnB;IAAC,OAAO,KAAK,EAAE;QACd,eAAG,CAAC,KAAK,CAAC,8BAA8B,UAAU,KAAK,IAAA,uBAAW,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7E,MAAM,KAAK,CAAC;KACb;AACH,CAAC;AA3BD,8BA2BC;AAEY,QAAA,qBAAqB,GAAG;IACnC,CAAC,uBAAW,CAAC,UAAU,CAAC,EAAE,GAAG,sBAAU,4CAA4C;CACpF,CAAC;AAEF,SAAS,kBAAkB,CAAC,UAAkB;IAC5C,MAAM,SAAS,GAAG,6BAAqB,CAAC,UAAU,CAAC,CAAC;IACpD,gDAAgD;IAChD,IAAI,CAAC,SAAS,EAAE;QACd,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;KACvD;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -7,17 +7,27 @@ exports.toolsTasks = void 0;
|
|
|
7
7
|
const _2020_1 = __importDefault(require("ajv/dist/2020"));
|
|
8
8
|
const json_schema_draft_07_json_1 = __importDefault(require("ajv/dist/refs/json-schema-draft-07.json"));
|
|
9
9
|
const ajv_formats_1 = __importDefault(require("ajv-formats"));
|
|
10
|
+
const js_yaml_1 = __importDefault(require("js-yaml"));
|
|
10
11
|
const fs_1 = __importDefault(require("fs"));
|
|
11
12
|
const path_1 = __importDefault(require("path"));
|
|
12
13
|
const http_request_js_1 = require("../../http-request.js");
|
|
13
14
|
const constants_js_1 = require("../../constants.js");
|
|
14
15
|
const utils_js_1 = require("../../utils.js");
|
|
16
|
+
const logger_js_1 = require("../../logger.js");
|
|
15
17
|
const shared_js_1 = require("../shared.js");
|
|
18
|
+
const stringifyPayload = (payload) => {
|
|
19
|
+
try {
|
|
20
|
+
return JSON.stringify(payload, null, 2);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return String(payload);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
16
26
|
// todo make sure all return in the same allowed pattern
|
|
17
27
|
exports.toolsTasks = {
|
|
18
28
|
[constants_js_1.SEARCH_TEST_SUITES]: async (params) => {
|
|
19
29
|
const args = params.arguments;
|
|
20
|
-
|
|
30
|
+
logger_js_1.log.info(`Searching test suites with args: ${stringifyPayload(args)}`);
|
|
21
31
|
const response = await (0, http_request_js_1.sendHttpRequest)({
|
|
22
32
|
method: http_request_js_1.HttpMethods.GET,
|
|
23
33
|
url: `${constants_js_1.API_URL}/test-suites`,
|
|
@@ -38,7 +48,7 @@ exports.toolsTasks = {
|
|
|
38
48
|
},
|
|
39
49
|
[constants_js_1.SEARCH_TEST_SUITE_RUNS]: async (params) => {
|
|
40
50
|
const args = params.arguments;
|
|
41
|
-
|
|
51
|
+
logger_js_1.log.info(`Searching test suite runs with args: ${stringifyPayload(args)}`);
|
|
42
52
|
const response = await (0, http_request_js_1.sendHttpRequest)({
|
|
43
53
|
method: http_request_js_1.HttpMethods.GET,
|
|
44
54
|
url: `${constants_js_1.API_URL}/test-suites-runs/flows`,
|
|
@@ -58,7 +68,7 @@ exports.toolsTasks = {
|
|
|
58
68
|
},
|
|
59
69
|
[constants_js_1.RUN_TEST_SUITE]: async (params) => {
|
|
60
70
|
const args = params.arguments;
|
|
61
|
-
|
|
71
|
+
logger_js_1.log.info(`Running test suite with args: ${stringifyPayload(args)}`);
|
|
62
72
|
const response = await (0, http_request_js_1.sendHttpRequest)({
|
|
63
73
|
method: http_request_js_1.HttpMethods.POST,
|
|
64
74
|
url: `${constants_js_1.API_URL}/test-suites/${args.id}/run`,
|
|
@@ -72,7 +82,7 @@ exports.toolsTasks = {
|
|
|
72
82
|
},
|
|
73
83
|
[constants_js_1.GET_TEST_SUITE_RUN]: async (params) => {
|
|
74
84
|
const args = params.arguments;
|
|
75
|
-
|
|
85
|
+
logger_js_1.log.info(`Getting test suite run with args: ${stringifyPayload(args)}`);
|
|
76
86
|
const response = await (0, http_request_js_1.sendHttpRequest)({
|
|
77
87
|
method: http_request_js_1.HttpMethods.GET,
|
|
78
88
|
url: `${constants_js_1.API_URL}/test-suites-runs/${args.id}`,
|
|
@@ -86,7 +96,7 @@ exports.toolsTasks = {
|
|
|
86
96
|
},
|
|
87
97
|
[constants_js_1.GET_TEST_SUITE_FLOW_RUN]: async (params) => {
|
|
88
98
|
const args = params.arguments;
|
|
89
|
-
|
|
99
|
+
logger_js_1.log.info(`Getting test suite flow run with args: ${stringifyPayload(args)}`);
|
|
90
100
|
const response = await (0, http_request_js_1.sendHttpRequest)({
|
|
91
101
|
method: http_request_js_1.HttpMethods.GET,
|
|
92
102
|
url: `${constants_js_1.API_URL}/test-suites-runs/flows/${args.flowRunId}`,
|
|
@@ -100,7 +110,7 @@ exports.toolsTasks = {
|
|
|
100
110
|
},
|
|
101
111
|
[constants_js_1.SEARCH_TEST_PLAN]: async (params) => {
|
|
102
112
|
const args = params.arguments;
|
|
103
|
-
|
|
113
|
+
logger_js_1.log.info(`Searching test plans with args: ${stringifyPayload(args)}`);
|
|
104
114
|
const response = await (0, http_request_js_1.sendHttpRequest)({
|
|
105
115
|
method: http_request_js_1.HttpMethods.GET,
|
|
106
116
|
url: `${constants_js_1.API_URL}/test-plans`,
|
|
@@ -120,7 +130,7 @@ exports.toolsTasks = {
|
|
|
120
130
|
},
|
|
121
131
|
[constants_js_1.RUN_TEST_PLAN]: async (params) => {
|
|
122
132
|
const args = params.arguments;
|
|
123
|
-
|
|
133
|
+
logger_js_1.log.info(`Running test plan with args: ${stringifyPayload(args)}`);
|
|
124
134
|
// AI decides to use both for some reason
|
|
125
135
|
const overrideParameters = args.overrideParameters && (0, utils_js_1.toLoadmillParams)(args.overrideParameters);
|
|
126
136
|
const parameters = args.parameters && (0, utils_js_1.toLoadmillParams)(args.parameters);
|
|
@@ -141,7 +151,7 @@ exports.toolsTasks = {
|
|
|
141
151
|
},
|
|
142
152
|
[constants_js_1.GET_TEST_PLAN_RUN]: async (params) => {
|
|
143
153
|
const args = params.arguments;
|
|
144
|
-
|
|
154
|
+
logger_js_1.log.info(`Getting test plan run with args: ${stringifyPayload(args)}`);
|
|
145
155
|
const response = await (0, http_request_js_1.sendHttpRequest)({
|
|
146
156
|
method: http_request_js_1.HttpMethods.GET,
|
|
147
157
|
url: `${constants_js_1.API_URL}/test-plans-runs/${args.id}`,
|
|
@@ -155,7 +165,7 @@ exports.toolsTasks = {
|
|
|
155
165
|
},
|
|
156
166
|
[constants_js_1.GET_LABELS]: async (params) => {
|
|
157
167
|
const args = params.arguments;
|
|
158
|
-
|
|
168
|
+
logger_js_1.log.info(`Getting labels with args: ${stringifyPayload(args)}`);
|
|
159
169
|
const response = await (0, http_request_js_1.sendHttpRequest)({
|
|
160
170
|
method: http_request_js_1.HttpMethods.GET,
|
|
161
171
|
url: `${constants_js_1.API_URL}/labels`,
|
|
@@ -195,32 +205,36 @@ exports.toolsTasks = {
|
|
|
195
205
|
const absPath = path_1.default.isAbsolute(filePath)
|
|
196
206
|
? filePath
|
|
197
207
|
: path_1.default.resolve(process.cwd(), filePath);
|
|
198
|
-
const raw = await fs_1.default.readFileSync(absPath);
|
|
208
|
+
const raw = await fs_1.default.readFileSync(absPath, 'utf8');
|
|
199
209
|
let suite;
|
|
200
210
|
try {
|
|
201
|
-
suite =
|
|
211
|
+
suite = js_yaml_1.default.safeLoad(raw);
|
|
202
212
|
}
|
|
203
|
-
catch (
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
213
|
+
catch (yamlErr) {
|
|
214
|
+
try {
|
|
215
|
+
suite = JSON.parse(raw);
|
|
216
|
+
}
|
|
217
|
+
catch (jsonErr) {
|
|
218
|
+
return {
|
|
219
|
+
content: [
|
|
220
|
+
{
|
|
221
|
+
type: 'text',
|
|
222
|
+
text: JSON.stringify({
|
|
223
|
+
valid: false,
|
|
224
|
+
error: `Failed parsing file as YAML or JSON. YAML error: ${yamlErr?.message || yamlErr}. JSON error: ${jsonErr?.message || jsonErr}`,
|
|
225
|
+
}, null, 2),
|
|
226
|
+
},
|
|
227
|
+
],
|
|
228
|
+
};
|
|
229
|
+
}
|
|
215
230
|
}
|
|
216
231
|
const schemaText = await (0, shared_js_1.getSchema)(constants_js_1.SCHEMA_TYPE.TEST_SUITE);
|
|
217
|
-
console.log('Fetched schema for test suite:', typeof schemaText);
|
|
218
232
|
let schema;
|
|
219
233
|
try {
|
|
220
234
|
schema = JSON.parse(schemaText);
|
|
221
235
|
}
|
|
222
236
|
catch (e) {
|
|
223
|
-
|
|
237
|
+
logger_js_1.log.error(`Failed parsing schema JSON: ${(0, logger_js_1.formatError)(e)}`);
|
|
224
238
|
return {
|
|
225
239
|
content: [
|
|
226
240
|
{
|
|
@@ -242,7 +256,7 @@ exports.toolsTasks = {
|
|
|
242
256
|
validateFn = ajv.compile(schema);
|
|
243
257
|
}
|
|
244
258
|
catch (e) {
|
|
245
|
-
|
|
259
|
+
logger_js_1.log.error(`Failed compiling schema: ${(0, logger_js_1.formatError)(e)}`);
|
|
246
260
|
return {
|
|
247
261
|
content: [
|
|
248
262
|
{
|
|
@@ -273,7 +287,7 @@ exports.toolsTasks = {
|
|
|
273
287
|
params: err.params,
|
|
274
288
|
schemaPath: err.schemaPath,
|
|
275
289
|
}));
|
|
276
|
-
|
|
290
|
+
logger_js_1.log.info(`Validation errors found: ${stringifyPayload(errors)}`);
|
|
277
291
|
return {
|
|
278
292
|
content: [
|
|
279
293
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/handlers/tools/tasks.ts"],"names":[],"mappings":";;;;;;AAAA,0DAAoC;AACpC,wGAA6D;AAC7D,8DAAqC;
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/handlers/tools/tasks.ts"],"names":[],"mappings":"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"}
|
package/dist/http-request.js
CHANGED
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.HttpMethods = exports.sendHttpRequest = void 0;
|
|
7
7
|
const superagent_1 = __importDefault(require("superagent"));
|
|
8
|
+
const logger_js_1 = require("./logger.js");
|
|
8
9
|
const DEFAULT_TIMEOUT_MS = process.env.LOADMILL_TIMEOUT || 30000; // 30 seconds
|
|
9
10
|
const RETRY_DELAY_MS = 1000; // 1 second
|
|
10
11
|
const LOADMILL_API_TOKEN = process.env.LOADMILL_API_TOKEN;
|
|
@@ -13,9 +14,9 @@ const sendHttpRequest = async (options) => {
|
|
|
13
14
|
return await _executeRequest(options);
|
|
14
15
|
}
|
|
15
16
|
catch (err) {
|
|
16
|
-
|
|
17
|
+
logger_js_1.log.error(`Error during ${(options.method || HttpMethods.GET).toUpperCase()} request to ${options.url}: ${(0, logger_js_1.formatError)(err)}`);
|
|
17
18
|
if (_shouldRetry(err)) {
|
|
18
|
-
|
|
19
|
+
logger_js_1.log.info(`Retrying ${(options.method || HttpMethods.GET).toUpperCase()} request to ${options.url}...`);
|
|
19
20
|
await _delay(RETRY_DELAY_MS);
|
|
20
21
|
return await _executeRequest(options);
|
|
21
22
|
}
|
package/dist/http-request.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-request.js","sourceRoot":"","sources":["../src/http-request.ts"],"names":[],"mappings":";;;;;;AAAA,4DAAoC;
|
|
1
|
+
{"version":3,"file":"http-request.js","sourceRoot":"","sources":["../src/http-request.ts"],"names":[],"mappings":";;;;;;AAAA,4DAAoC;AACpC,2CAA+C;AAE/C,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,KAAK,CAAC,CAAC,aAAa;AAC/E,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,WAAW;AACxC,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;AAEnD,MAAM,eAAe,GAAG,KAAK,EAAE,OAA2B,EAAE,EAAE;IACnE,IAAI;QACF,OAAO,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;KACvC;IACD,OAAO,GAAG,EAAE;QACV,eAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,eAAe,OAAO,CAAC,GAAG,KAAK,IAAA,uBAAW,EAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9H,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE;YACrB,eAAG,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,eAAe,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;YACvG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;YAC7B,OAAO,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;SACvC;QACD,MAAM,GAAG,CAAC;KACX;AACH,CAAC,CAAC;AAbW,QAAA,eAAe,mBAa1B;AAEF,MAAM,eAAe,GAAG,KAAK,EAAE,OAA2B,EAAE,EAAE;IAC5D,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAC/D,IAAI,OAAO,GAAG,oBAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;SAClC,IAAI,CAAC,kBAAkB,CAAC;SACxB,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE/B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAE/D,IAAI,IAAI,EAAE;QACR,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC9B;IAED,OAAO,MAAM,OAAO,CAAC;AACvB,CAAC,CAAC;AAEF,0BAA0B;AAC1B,MAAM,YAAY,GAAG,CAAC,GAAG,EAAW,EAAE;IACpC,OAAO,GAAG,CAAC,OAAO;QAChB,GAAG,CAAC,IAAI,KAAK,cAAc;QAC3B,GAAG,CAAC,IAAI,KAAK,cAAc;QAC3B,GAAG,CAAC,IAAI,KAAK,WAAW;QACxB,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAS/E,IAAY,WAMX;AAND,WAAY,WAAW;IACrB,0BAAW,CAAA;IACX,4BAAa,CAAA;IACb,0BAAW,CAAA;IACX,gCAAiB,CAAA;IACjB,8BAAe,CAAA;AACjB,CAAC,EANW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAMtB"}
|
package/dist/index.js
CHANGED
|
@@ -2,14 +2,18 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
4
4
|
const mcp_server_1 = require("./mcp-server");
|
|
5
|
+
const logger_js_1 = require("./logger.js");
|
|
6
|
+
const logger_js_2 = require("./logger.js");
|
|
5
7
|
const transport = new stdio_js_1.StdioServerTransport();
|
|
6
8
|
transport.onmessage = async (message) => {
|
|
7
|
-
|
|
9
|
+
logger_js_2.log.info(`Loadmill MCP message: ${JSON.stringify(message)}`);
|
|
8
10
|
};
|
|
9
11
|
transport.onerror = async (error) => {
|
|
10
|
-
|
|
12
|
+
logger_js_2.log.error(`Loadmill MCP Server error: ${error?.message || String(error)}`);
|
|
11
13
|
};
|
|
12
14
|
exports.default = async () => {
|
|
13
15
|
await mcp_server_1.mcpServer.connect(transport);
|
|
16
|
+
(0, logger_js_1.getInstance)(mcp_server_1.mcpServer);
|
|
17
|
+
logger_js_2.log.info('Loadmill MCP Server connected over stdio transport');
|
|
14
18
|
};
|
|
15
19
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA,wEAAiF;AACjF,6CAAyC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA,wEAAiF;AACjF,6CAAyC;AACzC,2CAAuD;AACvD,2CAAkC;AAElC,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;AAE7C,SAAS,CAAC,SAAS,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE;IACtC,eAAG,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,SAAS,CAAC,OAAO,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE;IAClC,eAAG,CAAC,KAAK,CAAC,8BAA8B,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC7E,CAAC,CAAC;AAGF,kBAAe,KAAK,IAAI,EAAE;IACxB,MAAM,sBAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnC,IAAA,uBAAS,EAAC,sBAAS,CAAC,CAAC;IAErB,eAAG,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;AACjE,CAAC,CAAC"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
|
+
import type { LoggingLevel } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
interface Logger {
|
|
4
|
+
info: (message: string) => void;
|
|
5
|
+
error: (message: string) => void;
|
|
6
|
+
}
|
|
7
|
+
declare class LoggerSingleton implements Logger {
|
|
8
|
+
private server;
|
|
9
|
+
constructor(server: Server);
|
|
10
|
+
info(data: string): void;
|
|
11
|
+
error(data: string): void;
|
|
12
|
+
}
|
|
13
|
+
export declare const getInstance: (server?: Server) => LoggerSingleton;
|
|
14
|
+
export declare let log: LoggerSingleton;
|
|
15
|
+
export declare const formatError: (error: unknown) => string;
|
|
16
|
+
export declare const setLogLevel: (level: LoggingLevel) => void;
|
|
17
|
+
export declare const getLogLevel: () => LoggingLevel;
|
|
18
|
+
export {};
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLogLevel = exports.setLogLevel = exports.formatError = exports.log = exports.getInstance = void 0;
|
|
4
|
+
var LOG_LEVELS;
|
|
5
|
+
(function (LOG_LEVELS) {
|
|
6
|
+
LOG_LEVELS["INFO"] = "info";
|
|
7
|
+
LOG_LEVELS["ERROR"] = "error";
|
|
8
|
+
})(LOG_LEVELS || (LOG_LEVELS = {}));
|
|
9
|
+
let currentLevel = LOG_LEVELS.INFO;
|
|
10
|
+
class LoggerSingleton {
|
|
11
|
+
server;
|
|
12
|
+
constructor(server) {
|
|
13
|
+
this.server = server;
|
|
14
|
+
}
|
|
15
|
+
info(data) {
|
|
16
|
+
this.server.sendLoggingMessage({
|
|
17
|
+
level: LOG_LEVELS.INFO,
|
|
18
|
+
data,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
error(data) {
|
|
22
|
+
this.server.sendLoggingMessage({
|
|
23
|
+
level: LOG_LEVELS.ERROR,
|
|
24
|
+
data,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const getInstance = (server) => {
|
|
29
|
+
if (!exports.log && server) {
|
|
30
|
+
exports.log = new LoggerSingleton(server);
|
|
31
|
+
}
|
|
32
|
+
return exports.log;
|
|
33
|
+
};
|
|
34
|
+
exports.getInstance = getInstance;
|
|
35
|
+
const formatError = (error) => {
|
|
36
|
+
if (error instanceof Error) {
|
|
37
|
+
return error.stack || error.message;
|
|
38
|
+
}
|
|
39
|
+
if (typeof error === 'string') {
|
|
40
|
+
return error;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
return JSON.stringify(error, null, 2);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return String(error);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
exports.formatError = formatError;
|
|
50
|
+
const setLogLevel = (level) => {
|
|
51
|
+
currentLevel = level;
|
|
52
|
+
};
|
|
53
|
+
exports.setLogLevel = setLogLevel;
|
|
54
|
+
const getLogLevel = () => currentLevel;
|
|
55
|
+
exports.getLogLevel = getLogLevel;
|
|
56
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;AAQA,IAAK,UAGJ;AAHD,WAAK,UAAU;IACb,2BAAa,CAAA;IACb,6BAAe,CAAA;AACjB,CAAC,EAHI,UAAU,KAAV,UAAU,QAGd;AAED,IAAI,YAAY,GAAiB,UAAU,CAAC,IAAI,CAAC;AAEjD,MAAM,eAAe;IAEC;IAApB,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAEtC,IAAI,CAAC,IAAY;QACf,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAC7B,KAAK,EAAE,UAAU,CAAC,IAAI;YACtB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAY;QAChB,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAC7B,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;CACF;AAEM,MAAM,WAAW,GAAG,CAAC,MAAe,EAAmB,EAAE;IAC9D,IAAI,CAAC,WAAG,IAAI,MAAM,EAAE;QAClB,WAAG,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;KACnC;IACD,OAAO,WAAG,CAAC;AACb,CAAC,CAAC;AALW,QAAA,WAAW,eAKtB;AAIK,MAAM,WAAW,GAAG,CAAC,KAAc,EAAU,EAAE;IACpD,IAAI,KAAK,YAAY,KAAK,EAAE;QAC1B,OAAO,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC;KACrC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,KAAK,CAAC;KACd;IACD,IAAI;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;KACvC;IAAC,MAAM;QACN,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;KACtB;AACH,CAAC,CAAC;AAZW,QAAA,WAAW,eAYtB;AAEK,MAAM,WAAW,GAAG,CAAC,KAAmB,EAAE,EAAE;IACjD,YAAY,GAAG,KAAK,CAAC;AACvB,CAAC,CAAC;AAFW,QAAA,WAAW,eAEtB;AAEK,MAAM,WAAW,GAAG,GAAiB,EAAE,CAAC,YAAY,CAAC;AAA/C,QAAA,WAAW,eAAoC"}
|
package/dist/mcp-handler.js
CHANGED
|
@@ -4,9 +4,11 @@ exports.handlers = void 0;
|
|
|
4
4
|
const tools_1 = require("./handlers/tools");
|
|
5
5
|
const prompts_1 = require("./handlers/prompts");
|
|
6
6
|
const resources_1 = require("./handlers/resources");
|
|
7
|
+
const logging_1 = require("./handlers/logging");
|
|
7
8
|
exports.handlers = [
|
|
8
9
|
...tools_1.handlers,
|
|
9
10
|
...prompts_1.handlers,
|
|
10
11
|
...resources_1.handlers,
|
|
12
|
+
...logging_1.handlers,
|
|
11
13
|
];
|
|
12
14
|
//# sourceMappingURL=mcp-handler.js.map
|
package/dist/mcp-handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-handler.js","sourceRoot":"","sources":["../src/mcp-handler.ts"],"names":[],"mappings":";;;AAAA,4CAA6D;AAC7D,gDAAiE;AACjE,oDAAqE;
|
|
1
|
+
{"version":3,"file":"mcp-handler.js","sourceRoot":"","sources":["../src/mcp-handler.ts"],"names":[],"mappings":";;;AAAA,4CAA6D;AAC7D,gDAAiE;AACjE,oDAAqE;AACrE,gDAAiE;AAOpD,QAAA,QAAQ,GAAiB;IACpC,GAAG,gBAAa;IAChB,GAAG,kBAAe;IAClB,GAAG,oBAAiB;IACpB,GAAG,kBAAe;CACnB,CAAC"}
|
package/dist/mcp-server.js
CHANGED
package/dist/mcp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";;;AAAA,wEAAmE;AACnE,2CAAkE;AAClE,qDAA4C;AAE5C,IAAI,MAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";;;AAAA,wEAAmE;AACnE,2CAAkE;AAClE,qDAA4C;AAE5C,IAAI,MAAc,CAAC;AAEnB,MAAM,UAAU,GAAG,GAAG,EAAE;IACtB,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,GAAG,aAAa,EAAE,CAAC;KAC1B;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,GAAG,EAAE;IACzB,MAAM,GAAG,IAAI,iBAAM,CACjB;QACE,IAAI,EAAE,2BAAe;QACrB,OAAO,EAAE,8BAAkB;KAC5B,EACD;QACE,YAAY,EAAE;YACZ,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,EAAE;SACZ;KACF,CACF,CAAC;IAGF,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,EAAE;IACnC,yBAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEW,QAAA,SAAS,GAAG,UAAU,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loadmill/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Loadmill mcp library",
|
|
5
5
|
"main": "dist/",
|
|
6
6
|
"module": "src/",
|
|
@@ -18,9 +18,10 @@
|
|
|
18
18
|
},
|
|
19
19
|
"license": "Apache-2.0",
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
21
|
+
"@modelcontextprotocol/sdk": "^1.21.1",
|
|
22
22
|
"ajv": "^8.17.1",
|
|
23
23
|
"ajv-formats": "^3.0.1",
|
|
24
|
+
"js-yaml": "^3.14.0",
|
|
24
25
|
"superagent": "^10.0.1"
|
|
25
26
|
},
|
|
26
27
|
"keywords": [
|