cursortoys 0.2.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.
- package/README.md +246 -0
- package/dist/assertionParser.d.ts +24 -0
- package/dist/assertionParser.d.ts.map +1 -0
- package/dist/assertionParser.js +234 -0
- package/dist/assertionParser.js.map +1 -0
- package/dist/assertionTypes.d.ts +36 -0
- package/dist/assertionTypes.d.ts.map +1 -0
- package/dist/assertionTypes.js +6 -0
- package/dist/assertionTypes.js.map +1 -0
- package/dist/assertionValidator.d.ts +16 -0
- package/dist/assertionValidator.d.ts.map +1 -0
- package/dist/assertionValidator.js +268 -0
- package/dist/assertionValidator.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +270 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/http-test.d.ts +34 -0
- package/dist/commands/http-test.d.ts.map +1 -0
- package/dist/commands/http-test.js +346 -0
- package/dist/commands/http-test.js.map +1 -0
- package/dist/commands/skill-add.d.ts +28 -0
- package/dist/commands/skill-add.d.ts.map +1 -0
- package/dist/commands/skill-add.js +145 -0
- package/dist/commands/skill-add.js.map +1 -0
- package/dist/httpRunner.d.ts +68 -0
- package/dist/httpRunner.d.ts.map +1 -0
- package/dist/httpRunner.js +591 -0
- package/dist/httpRunner.js.map +1 -0
- package/llms.txt +204 -0
- package/package.json +62 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateAssertions = validateAssertions;
|
|
4
|
+
exports.formatAssertionResults = formatAssertionResults;
|
|
5
|
+
/**
|
|
6
|
+
* Validates assertions against HTTP response
|
|
7
|
+
* @param assertions Array of assertions to validate
|
|
8
|
+
* @param response HTTP response result
|
|
9
|
+
* @returns Array of assertion results
|
|
10
|
+
*/
|
|
11
|
+
function validateAssertions(assertions, response, headers) {
|
|
12
|
+
const results = [];
|
|
13
|
+
// Build response data structure
|
|
14
|
+
const responseData = {
|
|
15
|
+
status: response.statusCode,
|
|
16
|
+
headers: headers || {},
|
|
17
|
+
body: parseResponseBody(response.body),
|
|
18
|
+
};
|
|
19
|
+
for (const assertion of assertions) {
|
|
20
|
+
try {
|
|
21
|
+
const result = evaluateAssertion(assertion, responseData);
|
|
22
|
+
results.push(result);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
results.push({
|
|
26
|
+
assertion,
|
|
27
|
+
passed: false,
|
|
28
|
+
error: error instanceof Error ? error.message : String(error),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return results;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Parses response body to JSON if possible, otherwise returns raw string
|
|
36
|
+
* @param body Response body string
|
|
37
|
+
* @returns Parsed JSON object or raw string
|
|
38
|
+
*/
|
|
39
|
+
function parseResponseBody(body) {
|
|
40
|
+
if (!body || body.trim() === '') {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
return JSON.parse(body);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return body;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Evaluates a single assertion
|
|
52
|
+
* @param assertion The assertion to evaluate
|
|
53
|
+
* @param responseData Response data
|
|
54
|
+
* @returns Assertion result
|
|
55
|
+
*/
|
|
56
|
+
function evaluateAssertion(assertion, responseData) {
|
|
57
|
+
// Resolve the expression to get actual value
|
|
58
|
+
const actualValue = resolveExpression(assertion.expression, responseData);
|
|
59
|
+
// Evaluate based on operator
|
|
60
|
+
const passed = evaluateOperator(assertion.operator, actualValue, assertion.expected);
|
|
61
|
+
return {
|
|
62
|
+
assertion,
|
|
63
|
+
passed,
|
|
64
|
+
actualValue,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Resolves an expression like "res.status" or "res.body.userId" to its actual value
|
|
69
|
+
* @param expression Expression to resolve
|
|
70
|
+
* @param responseData Response data
|
|
71
|
+
* @returns Resolved value
|
|
72
|
+
*/
|
|
73
|
+
function resolveExpression(expression, responseData) {
|
|
74
|
+
// Split expression by dots, but handle bracket notation too
|
|
75
|
+
// e.g., "res.body.users[0].name" -> ["res", "body", "users[0]", "name"]
|
|
76
|
+
const parts = expression.split('.');
|
|
77
|
+
let current = { res: responseData };
|
|
78
|
+
for (const part of parts) {
|
|
79
|
+
if (current === null || current === undefined) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
// Handle array indexing: "users[0]" -> access users then [0]
|
|
83
|
+
const arrayMatch = part.match(/^([^\[]+)\[(\d+)\]$/);
|
|
84
|
+
if (arrayMatch) {
|
|
85
|
+
const propName = arrayMatch[1];
|
|
86
|
+
const index = parseInt(arrayMatch[2], 10);
|
|
87
|
+
current = current[propName];
|
|
88
|
+
if (Array.isArray(current)) {
|
|
89
|
+
current = current[index];
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
current = current[part];
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return current;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Evaluates operator against actual and expected values
|
|
103
|
+
* @param operator Assertion operator
|
|
104
|
+
* @param actual Actual value from response
|
|
105
|
+
* @param expected Expected value
|
|
106
|
+
* @returns true if assertion passes, false otherwise
|
|
107
|
+
*/
|
|
108
|
+
function evaluateOperator(operator, actual, expected) {
|
|
109
|
+
switch (operator) {
|
|
110
|
+
// Comparison
|
|
111
|
+
case 'equals':
|
|
112
|
+
return actual === expected;
|
|
113
|
+
case 'notEquals':
|
|
114
|
+
return actual !== expected;
|
|
115
|
+
case 'gt':
|
|
116
|
+
return typeof actual === 'number' && typeof expected === 'number' && actual > expected;
|
|
117
|
+
case 'gte':
|
|
118
|
+
return typeof actual === 'number' && typeof expected === 'number' && actual >= expected;
|
|
119
|
+
case 'lt':
|
|
120
|
+
return typeof actual === 'number' && typeof expected === 'number' && actual < expected;
|
|
121
|
+
case 'lte':
|
|
122
|
+
return typeof actual === 'number' && typeof expected === 'number' && actual <= expected;
|
|
123
|
+
// String operations
|
|
124
|
+
case 'contains':
|
|
125
|
+
return typeof actual === 'string' && typeof expected === 'string' && actual.includes(expected);
|
|
126
|
+
case 'notContains':
|
|
127
|
+
return typeof actual === 'string' && typeof expected === 'string' && !actual.includes(expected);
|
|
128
|
+
case 'startsWith':
|
|
129
|
+
return typeof actual === 'string' && typeof expected === 'string' && actual.startsWith(expected);
|
|
130
|
+
case 'endsWith':
|
|
131
|
+
return typeof actual === 'string' && typeof expected === 'string' && actual.endsWith(expected);
|
|
132
|
+
case 'matches':
|
|
133
|
+
if (expected instanceof RegExp) {
|
|
134
|
+
return typeof actual === 'string' && expected.test(actual);
|
|
135
|
+
}
|
|
136
|
+
return false;
|
|
137
|
+
case 'notMatches':
|
|
138
|
+
if (expected instanceof RegExp) {
|
|
139
|
+
return typeof actual === 'string' && !expected.test(actual);
|
|
140
|
+
}
|
|
141
|
+
return false;
|
|
142
|
+
// Type checks
|
|
143
|
+
case 'isNull':
|
|
144
|
+
return actual === null;
|
|
145
|
+
case 'isNotNull':
|
|
146
|
+
return actual !== null;
|
|
147
|
+
case 'isEmpty':
|
|
148
|
+
if (typeof actual === 'string')
|
|
149
|
+
return actual === '';
|
|
150
|
+
if (Array.isArray(actual))
|
|
151
|
+
return actual.length === 0;
|
|
152
|
+
if (typeof actual === 'object' && actual !== null)
|
|
153
|
+
return Object.keys(actual).length === 0;
|
|
154
|
+
return false;
|
|
155
|
+
case 'isNotEmpty':
|
|
156
|
+
if (typeof actual === 'string')
|
|
157
|
+
return actual !== '';
|
|
158
|
+
if (Array.isArray(actual))
|
|
159
|
+
return actual.length > 0;
|
|
160
|
+
if (typeof actual === 'object' && actual !== null)
|
|
161
|
+
return Object.keys(actual).length > 0;
|
|
162
|
+
return false;
|
|
163
|
+
case 'isDefined':
|
|
164
|
+
return actual !== undefined && actual !== null;
|
|
165
|
+
case 'isUndefined':
|
|
166
|
+
return actual === undefined || actual === null;
|
|
167
|
+
// Value checks
|
|
168
|
+
case 'isTruthy':
|
|
169
|
+
return !!actual;
|
|
170
|
+
case 'isFalsy':
|
|
171
|
+
return !actual;
|
|
172
|
+
case 'isNumber':
|
|
173
|
+
return typeof actual === 'number' && !isNaN(actual);
|
|
174
|
+
case 'isString':
|
|
175
|
+
return typeof actual === 'string';
|
|
176
|
+
case 'isBoolean':
|
|
177
|
+
return typeof actual === 'boolean';
|
|
178
|
+
case 'isArray':
|
|
179
|
+
return Array.isArray(actual);
|
|
180
|
+
case 'isJson':
|
|
181
|
+
if (typeof actual === 'string') {
|
|
182
|
+
try {
|
|
183
|
+
JSON.parse(actual);
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return typeof actual === 'object' && actual !== null;
|
|
191
|
+
// Other operations
|
|
192
|
+
case 'in':
|
|
193
|
+
if (Array.isArray(expected)) {
|
|
194
|
+
return expected.includes(actual);
|
|
195
|
+
}
|
|
196
|
+
return false;
|
|
197
|
+
case 'notIn':
|
|
198
|
+
if (Array.isArray(expected)) {
|
|
199
|
+
return !expected.includes(actual);
|
|
200
|
+
}
|
|
201
|
+
return false;
|
|
202
|
+
case 'between':
|
|
203
|
+
// Expected should be array with [min, max]
|
|
204
|
+
if (Array.isArray(expected) && expected.length === 2 && typeof actual === 'number') {
|
|
205
|
+
const [min, max] = expected;
|
|
206
|
+
return actual >= min && actual <= max;
|
|
207
|
+
}
|
|
208
|
+
return false;
|
|
209
|
+
case 'length':
|
|
210
|
+
if (typeof actual === 'string' || Array.isArray(actual)) {
|
|
211
|
+
return actual.length === expected;
|
|
212
|
+
}
|
|
213
|
+
return false;
|
|
214
|
+
default:
|
|
215
|
+
throw new Error(`Unknown operator: ${operator}`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Formats assertion results as text for display
|
|
220
|
+
* @param results Assertion results
|
|
221
|
+
* @returns Formatted text
|
|
222
|
+
*/
|
|
223
|
+
function formatAssertionResults(results) {
|
|
224
|
+
if (results.length === 0) {
|
|
225
|
+
return '';
|
|
226
|
+
}
|
|
227
|
+
let output = '';
|
|
228
|
+
for (const result of results) {
|
|
229
|
+
const symbol = result.passed ? '✓' : '✗';
|
|
230
|
+
const { expression, operator, expected } = result.assertion;
|
|
231
|
+
let line = ` ${symbol} ${expression} ${operator}`;
|
|
232
|
+
// Add expected value if operator needs it
|
|
233
|
+
if (!['isDefined', 'isUndefined', 'isNull', 'isNotNull', 'isEmpty', 'isNotEmpty',
|
|
234
|
+
'isTruthy', 'isFalsy', 'isNumber', 'isString', 'isBoolean', 'isArray', 'isJson'].includes(operator)) {
|
|
235
|
+
line += ` ${formatValue(expected)}`;
|
|
236
|
+
}
|
|
237
|
+
// Add error or actual value if failed
|
|
238
|
+
if (!result.passed) {
|
|
239
|
+
if (result.error) {
|
|
240
|
+
line += ` (Error: ${result.error})`;
|
|
241
|
+
}
|
|
242
|
+
else if (result.actualValue !== undefined) {
|
|
243
|
+
line += ` (actual: ${formatValue(result.actualValue)})`;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
output += line + '\n';
|
|
247
|
+
}
|
|
248
|
+
return output;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Formats a value for display
|
|
252
|
+
* @param value Value to format
|
|
253
|
+
* @returns Formatted string
|
|
254
|
+
*/
|
|
255
|
+
function formatValue(value) {
|
|
256
|
+
if (value === null)
|
|
257
|
+
return 'null';
|
|
258
|
+
if (value === undefined)
|
|
259
|
+
return 'undefined';
|
|
260
|
+
if (value instanceof RegExp)
|
|
261
|
+
return value.toString();
|
|
262
|
+
if (typeof value === 'string')
|
|
263
|
+
return `"${value}"`;
|
|
264
|
+
if (typeof value === 'object')
|
|
265
|
+
return JSON.stringify(value);
|
|
266
|
+
return String(value);
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=assertionValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertionValidator.js","sourceRoot":"","sources":["../src/assertionValidator.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
const commander_1 = require("commander");
|
|
41
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
42
|
+
const http_test_1 = require("./commands/http-test");
|
|
43
|
+
const skill_add_1 = require("./commands/skill-add");
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const fs = __importStar(require("fs"));
|
|
46
|
+
const program = new commander_1.Command();
|
|
47
|
+
program
|
|
48
|
+
.name('cursortoys')
|
|
49
|
+
.description('Command-line utilities for CursorToys - HTTP testing, automation, and productivity tools')
|
|
50
|
+
.version('0.2.0');
|
|
51
|
+
program
|
|
52
|
+
.command('http test')
|
|
53
|
+
.description('Run .req/.request files in the project http folder as tests')
|
|
54
|
+
.option('-p, --project <dir>', 'Project directory (default: cwd)')
|
|
55
|
+
.option('--base-folder <name>', 'Base folder name (default: cursor, or CURSORTOYS_BASE_FOLDER)')
|
|
56
|
+
.option('--environments-folder <name>', 'Environments subfolder (default: .environments)')
|
|
57
|
+
.option('-e, --env <name>', 'Environment to use (overrides # @env in file)')
|
|
58
|
+
.option('-t, --timeout <seconds>', 'Request timeout in seconds (default: 10)', '10')
|
|
59
|
+
.option('-f, --file <path>', 'Run a single .req/.request file')
|
|
60
|
+
.option('-V, --verbose', 'Show request and response for each test')
|
|
61
|
+
.option('--var <key=value>', 'Override variable (KEY=value); can be repeated', (v, acc) => {
|
|
62
|
+
acc = acc || [];
|
|
63
|
+
acc.push(v);
|
|
64
|
+
return acc;
|
|
65
|
+
}, [])
|
|
66
|
+
.action(async (_arg, opts) => {
|
|
67
|
+
const startTime = Date.now();
|
|
68
|
+
const timeout = parseInt(opts?.timeout ?? '10', 10);
|
|
69
|
+
const varOverrides = {};
|
|
70
|
+
if (Array.isArray(opts?.var)) {
|
|
71
|
+
for (const pair of opts.var) {
|
|
72
|
+
const eq = pair.indexOf('=');
|
|
73
|
+
if (eq > 0) {
|
|
74
|
+
const key = pair.substring(0, eq).trim();
|
|
75
|
+
const value = pair.substring(eq + 1).trim();
|
|
76
|
+
if (key)
|
|
77
|
+
varOverrides[key] = value;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Function to display a test result in real-time
|
|
82
|
+
const displayResult = (r) => {
|
|
83
|
+
const shortPath = path.relative(process.cwd(), r.file);
|
|
84
|
+
const label = r.requestTotal != null && r.requestTotal > 1 && r.requestIndex != null
|
|
85
|
+
? `${shortPath} (${r.requestIndex}/${r.requestTotal})`
|
|
86
|
+
: shortPath;
|
|
87
|
+
const status = r.statusCode > 0 ? `${r.statusCode} ${r.statusText}` : (r.error || r.statusText);
|
|
88
|
+
// Build assertion summary
|
|
89
|
+
const assertionSummary = r.assertionsTotal && r.assertionsTotal > 0
|
|
90
|
+
? ` [${r.assertionsPassed}/${r.assertionsTotal} assertions]`
|
|
91
|
+
: '';
|
|
92
|
+
if (r.passed) {
|
|
93
|
+
console.log(' ' + chalk_1.default.green('✓') + ' ' + chalk_1.default.dim(label) + ' ' + chalk_1.default.gray(status) + chalk_1.default.gray(assertionSummary));
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
console.log(' ' + chalk_1.default.red('✗') + ' ' + chalk_1.default.dim(label) + ' ' + chalk_1.default.red(status) + chalk_1.default.red(assertionSummary));
|
|
97
|
+
if (r.error) {
|
|
98
|
+
console.log(' ' + chalk_1.default.red(r.error));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Show block title and line if available
|
|
102
|
+
if (r.blockTitle && r.blockLine) {
|
|
103
|
+
console.log(' ' + chalk_1.default.dim(`## ${r.blockTitle}`) + chalk_1.default.dim(` (line ${r.blockLine})`));
|
|
104
|
+
}
|
|
105
|
+
// Show assertion details if there are any
|
|
106
|
+
if (r.assertionResults && r.assertionResults.length > 0) {
|
|
107
|
+
for (const assertion of r.assertionResults) {
|
|
108
|
+
const symbol = assertion.passed ? chalk_1.default.green('✓') : chalk_1.default.red('✗');
|
|
109
|
+
const expr = assertion.assertion.expression;
|
|
110
|
+
const op = assertion.assertion.operator;
|
|
111
|
+
const exp = assertion.assertion.expected;
|
|
112
|
+
// Build the technical details (expression + operator + expected)
|
|
113
|
+
let technicalDetails = `${expr} ${op}`;
|
|
114
|
+
// Add expected value if needed
|
|
115
|
+
if (exp !== null && !['isDefined', 'isUndefined', 'isNull', 'isNotNull', 'isEmpty', 'isNotEmpty',
|
|
116
|
+
'isTruthy', 'isFalsy', 'isNumber', 'isString', 'isBoolean', 'isArray', 'isJson'].includes(op)) {
|
|
117
|
+
const expStr = typeof exp === 'string' ? `"${exp}"` : String(exp);
|
|
118
|
+
technicalDetails += ` ${expStr}`;
|
|
119
|
+
}
|
|
120
|
+
// If there's a description, show it first, then the technical details
|
|
121
|
+
let displayText;
|
|
122
|
+
if (assertion.assertion.description) {
|
|
123
|
+
displayText = `${assertion.assertion.description}: ${technicalDetails}`;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
displayText = technicalDetails;
|
|
127
|
+
}
|
|
128
|
+
let line = ` ${symbol} ${displayText}`;
|
|
129
|
+
// Add actual value or error if failed
|
|
130
|
+
if (!assertion.passed) {
|
|
131
|
+
if (assertion.error) {
|
|
132
|
+
line += chalk_1.default.red(` (Error: ${assertion.error})`);
|
|
133
|
+
}
|
|
134
|
+
else if (assertion.actualValue !== undefined) {
|
|
135
|
+
const actualStr = typeof assertion.actualValue === 'string'
|
|
136
|
+
? `"${assertion.actualValue}"`
|
|
137
|
+
: JSON.stringify(assertion.actualValue);
|
|
138
|
+
line += chalk_1.default.red(` (actual: ${actualStr})`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
console.log(line);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (opts?.verbose && r.requestConfig) {
|
|
145
|
+
const c = r.requestConfig;
|
|
146
|
+
console.log(chalk_1.default.dim(' Request: ') + (c.method || 'GET') + ' ' + c.url);
|
|
147
|
+
if (c.headers && Object.keys(c.headers).length > 0) {
|
|
148
|
+
for (const [k, v] of Object.entries(c.headers)) {
|
|
149
|
+
console.log(chalk_1.default.dim(' ') + k + ': ' + v);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (c.body) {
|
|
153
|
+
const bodyStr = typeof c.body === 'string' ? c.body : JSON.stringify(c.body);
|
|
154
|
+
console.log(chalk_1.default.dim(' Body: ') + (bodyStr.length > 200 ? bodyStr.slice(0, 200) + '...' : bodyStr));
|
|
155
|
+
}
|
|
156
|
+
console.log(chalk_1.default.dim(' Response: ') + r.statusCode + ' ' + r.statusText);
|
|
157
|
+
if (r.responseBody) {
|
|
158
|
+
const preview = r.responseBody.length > 300 ? r.responseBody.slice(0, 300) + '...' : r.responseBody;
|
|
159
|
+
console.log(chalk_1.default.dim(' Body: ') + preview.replace(/\n/g, '\n '));
|
|
160
|
+
}
|
|
161
|
+
console.log('');
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
const results = await (0, http_test_1.runHttpTest)({
|
|
165
|
+
project: opts?.project,
|
|
166
|
+
baseFolder: opts?.baseFolder,
|
|
167
|
+
environmentsFolder: opts?.environmentsFolder,
|
|
168
|
+
env: opts?.env,
|
|
169
|
+
timeout: isNaN(timeout) ? 10 : timeout,
|
|
170
|
+
file: opts?.file,
|
|
171
|
+
verbose: opts?.verbose,
|
|
172
|
+
varOverrides: Object.keys(varOverrides).length > 0 ? varOverrides : undefined,
|
|
173
|
+
onProgress: displayResult, // Display results in real-time
|
|
174
|
+
});
|
|
175
|
+
const passed = results.filter((r) => r.passed);
|
|
176
|
+
const failed = results.filter((r) => !r.passed);
|
|
177
|
+
const duration = ((Date.now() - startTime) / 1000).toFixed(2);
|
|
178
|
+
if (results.length === 0) {
|
|
179
|
+
if (opts?.file) {
|
|
180
|
+
console.log(chalk_1.default.red(' FAIL ') + chalk_1.default.dim('No file found at: ') + opts.file);
|
|
181
|
+
console.log('');
|
|
182
|
+
console.log(chalk_1.default.red('Tests: ') + chalk_1.default.red('0 total'));
|
|
183
|
+
console.log(chalk_1.default.dim(`Time: ${duration}s`));
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
console.log(chalk_1.default.yellow(' No .req or .request files found in the http folder.'));
|
|
187
|
+
console.log(chalk_1.default.dim(`Time: ${duration}s`));
|
|
188
|
+
}
|
|
189
|
+
process.exit(1);
|
|
190
|
+
}
|
|
191
|
+
console.log('');
|
|
192
|
+
if (failed.length === 0) {
|
|
193
|
+
console.log(chalk_1.default.green('Tests: ') + chalk_1.default.green(`${passed.length} passed`) + chalk_1.default.dim(`, ${results.length} total`));
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
console.log(chalk_1.default.red('Tests: ') +
|
|
197
|
+
(passed.length ? chalk_1.default.green(`${passed.length} passed`) + chalk_1.default.dim(', ') : '') +
|
|
198
|
+
chalk_1.default.red(`${failed.length} failed`) +
|
|
199
|
+
chalk_1.default.dim(`, ${results.length} total`));
|
|
200
|
+
}
|
|
201
|
+
console.log(chalk_1.default.dim(`Time: ${duration}s`));
|
|
202
|
+
process.exit(failed.length > 0 ? 1 : 0);
|
|
203
|
+
});
|
|
204
|
+
// Skill commands
|
|
205
|
+
const skillCommand = program
|
|
206
|
+
.command('skill')
|
|
207
|
+
.description('Manage AI agent skills');
|
|
208
|
+
skillCommand
|
|
209
|
+
.command('add <name>')
|
|
210
|
+
.description('Create a new skill file with a template')
|
|
211
|
+
.option('-d, --description <text>', 'Skill description')
|
|
212
|
+
.option('-t, --target <type>', 'Target directory (personal or project)', 'personal')
|
|
213
|
+
.option('-p, --project <dir>', 'Project directory (required if target is project)')
|
|
214
|
+
.option('--base-folder <name>', 'Base folder name (default: cursor, or CURSORTOYS_BASE_FOLDER)')
|
|
215
|
+
.action(async (name, opts) => {
|
|
216
|
+
const baseFolder = opts.baseFolder || process.env.CURSORTOYS_BASE_FOLDER || 'cursor';
|
|
217
|
+
const target = opts.target === 'project' ? 'project' : 'personal';
|
|
218
|
+
// Validate target
|
|
219
|
+
if (target === 'project' && !opts.project) {
|
|
220
|
+
console.log(chalk_1.default.red('Error: --project is required when target is "project"'));
|
|
221
|
+
console.log(chalk_1.default.dim('Usage: cursortoys skill add <name> -t project -p /path/to/project'));
|
|
222
|
+
process.exit(1);
|
|
223
|
+
}
|
|
224
|
+
console.log(chalk_1.default.dim(`Creating skill: ${name}`));
|
|
225
|
+
console.log(chalk_1.default.dim(`Target: ${target}`));
|
|
226
|
+
if (opts.description) {
|
|
227
|
+
console.log(chalk_1.default.dim(`Description: ${opts.description}`));
|
|
228
|
+
}
|
|
229
|
+
const result = await (0, skill_add_1.addSkill)({
|
|
230
|
+
name,
|
|
231
|
+
description: opts.description,
|
|
232
|
+
target: target,
|
|
233
|
+
project: opts.project,
|
|
234
|
+
baseFolder
|
|
235
|
+
});
|
|
236
|
+
if (result.success && result.filePath) {
|
|
237
|
+
console.log('');
|
|
238
|
+
console.log(chalk_1.default.green('✓ Skill created successfully!'));
|
|
239
|
+
console.log('');
|
|
240
|
+
console.log(chalk_1.default.dim('File: ') + result.filePath);
|
|
241
|
+
console.log('');
|
|
242
|
+
console.log(chalk_1.default.dim('Edit the SKILL.md file to customize the skill.'));
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
console.log('');
|
|
246
|
+
console.log(chalk_1.default.red('✗ Failed to create skill'));
|
|
247
|
+
console.log(chalk_1.default.red(result.error || 'Unknown error'));
|
|
248
|
+
process.exit(1);
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
// LLM instructions command
|
|
252
|
+
program
|
|
253
|
+
.option('--llm', 'Show LLM instructions for using this CLI')
|
|
254
|
+
.action((opts) => {
|
|
255
|
+
if (opts.llm) {
|
|
256
|
+
const llmsPath = path.join(__dirname, '..', 'llms.txt');
|
|
257
|
+
if (fs.existsSync(llmsPath)) {
|
|
258
|
+
const content = fs.readFileSync(llmsPath, 'utf-8');
|
|
259
|
+
console.log(content);
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
console.log(chalk_1.default.red('Error: llms.txt file not found'));
|
|
263
|
+
console.log(chalk_1.default.dim('Expected location: ') + llmsPath);
|
|
264
|
+
process.exit(1);
|
|
265
|
+
}
|
|
266
|
+
process.exit(0);
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
program.parse();
|
|
270
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { HttpRequestConfig } from '../httpRunner';
|
|
2
|
+
import { AssertionResult } from '../assertionTypes';
|
|
3
|
+
export interface HttpTestOptions {
|
|
4
|
+
project?: string;
|
|
5
|
+
baseFolder?: string;
|
|
6
|
+
environmentsFolder?: string;
|
|
7
|
+
env?: string;
|
|
8
|
+
timeout?: number;
|
|
9
|
+
file?: string;
|
|
10
|
+
verbose?: boolean;
|
|
11
|
+
varOverrides?: Record<string, string>;
|
|
12
|
+
onProgress?: (result: HttpTestResult) => void;
|
|
13
|
+
}
|
|
14
|
+
export interface HttpTestResult {
|
|
15
|
+
file: string;
|
|
16
|
+
passed: boolean;
|
|
17
|
+
statusCode: number;
|
|
18
|
+
statusText: string;
|
|
19
|
+
error?: string;
|
|
20
|
+
requestConfig?: HttpRequestConfig;
|
|
21
|
+
responseBody?: string;
|
|
22
|
+
requestIndex?: number;
|
|
23
|
+
requestTotal?: number;
|
|
24
|
+
assertionResults?: AssertionResult[];
|
|
25
|
+
assertionsPassed?: number;
|
|
26
|
+
assertionsTotal?: number;
|
|
27
|
+
blockTitle?: string;
|
|
28
|
+
blockLine?: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Runs http test: discover files, run all requests per file, report pass/fail.
|
|
32
|
+
*/
|
|
33
|
+
export declare function runHttpTest(opts: HttpTestOptions): Promise<HttpTestResult[]>;
|
|
34
|
+
//# sourceMappingURL=http-test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-test.d.ts","sourceRoot":"","sources":["../../src/commands/http-test.ts"],"names":[],"mappings":"AAEA,OAAO,EAWL,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA8ID;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAyNlF"}
|