@hasna/testers 0.0.24 → 0.0.25
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/cli/index.js +50 -9
- package/dist/index.js +12 -1
- package/dist/lib/init.d.ts.map +1 -1
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/mcp/index.js +4 -0
- package/dist/server/index.js +4 -0
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -17171,6 +17171,10 @@ async function runByFilter(options) {
|
|
|
17171
17171
|
if (options.scenarioIds && options.scenarioIds.length > 0) {
|
|
17172
17172
|
const all = listScenarios({ projectId: options.projectId });
|
|
17173
17173
|
scenarios = all.filter((s) => options.scenarioIds.includes(s.id) || options.scenarioIds.includes(s.shortId));
|
|
17174
|
+
if (scenarios.length === 0 && options.projectId) {
|
|
17175
|
+
const global2 = listScenarios({});
|
|
17176
|
+
scenarios = global2.filter((s) => options.scenarioIds.includes(s.id) || options.scenarioIds.includes(s.shortId));
|
|
17177
|
+
}
|
|
17174
17178
|
} else {
|
|
17175
17179
|
scenarios = listScenarios({
|
|
17176
17180
|
projectId: options.projectId,
|
|
@@ -27115,7 +27119,7 @@ import chalk6 from "chalk";
|
|
|
27115
27119
|
// package.json
|
|
27116
27120
|
var package_default = {
|
|
27117
27121
|
name: "@hasna/testers",
|
|
27118
|
-
version: "0.0.
|
|
27122
|
+
version: "0.0.25",
|
|
27119
27123
|
description: "AI-powered QA testing CLI \u2014 spawns cheap AI agents to test web apps with headless browsers",
|
|
27120
27124
|
type: "module",
|
|
27121
27125
|
main: "dist/index.js",
|
|
@@ -27473,7 +27477,14 @@ function initProject(options) {
|
|
|
27473
27477
|
const projectPath = options.path ?? dir;
|
|
27474
27478
|
const project = ensureProject(name, projectPath);
|
|
27475
27479
|
const starterInputs = getStarterScenarios(framework ?? { name: "Unknown", features: [] }, project.id);
|
|
27476
|
-
const
|
|
27480
|
+
const existingScenarios = listScenarios({ projectId: project.id });
|
|
27481
|
+
const scenarios = existingScenarios.length > 0 ? existingScenarios : starterInputs.map((input) => {
|
|
27482
|
+
try {
|
|
27483
|
+
return createScenario(input);
|
|
27484
|
+
} catch {
|
|
27485
|
+
return null;
|
|
27486
|
+
}
|
|
27487
|
+
}).filter((s) => s !== null);
|
|
27477
27488
|
const configDir = getTestersDir();
|
|
27478
27489
|
const configPath = join13(configDir, "config.json");
|
|
27479
27490
|
if (!existsSync11(configDir)) {
|
|
@@ -30088,7 +30099,7 @@ Shutting down scheduler daemon...`));
|
|
|
30088
30099
|
process.exit(1);
|
|
30089
30100
|
}
|
|
30090
30101
|
});
|
|
30091
|
-
program2.command("init").description("Initialize a new testing project").option("-n, --name <name>", "Project name").option("-u, --url <url>", "Base URL").option("-p, --path <path>", "Project path").option("--ci <provider>", "Generate CI workflow (github)").action(async (opts) => {
|
|
30102
|
+
program2.command("init").description("Initialize a new testing project").option("-n, --name <name>", "Project name").option("-u, --url <url>", "Base URL").option("-p, --path <path>", "Project path").option("--ci <provider>", "Generate CI workflow (github)").option("-y, --yes", "Skip interactive prompts (non-interactive mode)", false).action(async (opts) => {
|
|
30092
30103
|
try {
|
|
30093
30104
|
const { project, scenarios, framework, url } = initProject({
|
|
30094
30105
|
name: opts.name,
|
|
@@ -30124,6 +30135,8 @@ program2.command("init").description("Initialize a new testing project").option(
|
|
|
30124
30135
|
log(chalk6.yellow(` Unknown CI provider: ${opts.ci}. Supported: github`));
|
|
30125
30136
|
}
|
|
30126
30137
|
log("");
|
|
30138
|
+
if (opts.yes)
|
|
30139
|
+
return;
|
|
30127
30140
|
const rl2 = createInterface({ input: process.stdin, output: process.stdout });
|
|
30128
30141
|
const ask = (q) => new Promise((resolve2) => rl2.question(q, resolve2));
|
|
30129
30142
|
try {
|
|
@@ -30431,16 +30444,21 @@ program2.command("chain <scenario-id>").description("Add a dependency to a scena
|
|
|
30431
30444
|
process.exit(1);
|
|
30432
30445
|
}
|
|
30433
30446
|
});
|
|
30434
|
-
program2.command("unchain <scenario-id>").description("Remove a dependency from a scenario").requiredOption("--from <id>", "Dependency to remove").action((scenarioId, opts) => {
|
|
30447
|
+
program2.command("unchain <scenario-id>").description("Remove a dependency from a scenario").requiredOption("--depends-on <id>", "Dependency to remove (alias: --from)").option("--from <id>", "Dependency to remove (alias for --depends-on)").action((scenarioId, opts) => {
|
|
30435
30448
|
try {
|
|
30436
30449
|
const scenario = getScenario(scenarioId) ?? getScenarioByShortId(scenarioId);
|
|
30437
30450
|
if (!scenario) {
|
|
30438
30451
|
logError(chalk6.red(`Scenario not found: ${scenarioId}`));
|
|
30439
30452
|
process.exit(1);
|
|
30440
30453
|
}
|
|
30441
|
-
const
|
|
30454
|
+
const depId = opts.dependsOn ?? opts.from;
|
|
30455
|
+
if (!depId) {
|
|
30456
|
+
logError(chalk6.red("Specify the dependency to remove with --depends-on <id>"));
|
|
30457
|
+
process.exit(1);
|
|
30458
|
+
}
|
|
30459
|
+
const dep = getScenario(depId) ?? getScenarioByShortId(depId);
|
|
30442
30460
|
if (!dep) {
|
|
30443
|
-
logError(chalk6.red(`Dependency not found: ${
|
|
30461
|
+
logError(chalk6.red(`Dependency not found: ${depId}`));
|
|
30444
30462
|
process.exit(1);
|
|
30445
30463
|
}
|
|
30446
30464
|
removeDependency(scenario.id, dep.id);
|
|
@@ -30508,8 +30526,12 @@ flowCmd.command("create <name>").description("Create a flow from scenario IDs").
|
|
|
30508
30526
|
process.exit(1);
|
|
30509
30527
|
}
|
|
30510
30528
|
});
|
|
30511
|
-
flowCmd.command("list").description("List all flows").option("--project <id>", "Project ID").action((opts) => {
|
|
30529
|
+
flowCmd.command("list").description("List all flows").option("--project <id>", "Project ID").option("--json", "Output as JSON", false).action((opts) => {
|
|
30512
30530
|
const flows = listFlows(resolveProject(opts.project) ?? undefined);
|
|
30531
|
+
if (opts.json) {
|
|
30532
|
+
log(JSON.stringify(flows, null, 2));
|
|
30533
|
+
return;
|
|
30534
|
+
}
|
|
30513
30535
|
if (flows.length === 0) {
|
|
30514
30536
|
log(chalk6.dim(`
|
|
30515
30537
|
No flows found.
|
|
@@ -30956,10 +30978,14 @@ SCAN_COMMON_OPTIONS(scanCmd.command("all <url>").description("Run all scanners:
|
|
|
30956
30978
|
process.exit(1);
|
|
30957
30979
|
}
|
|
30958
30980
|
});
|
|
30959
|
-
scanCmd.command("issues").description("List tracked scan issues").option("--status <status>", "Filter by status: open|resolved|regressed").option("--type <type>", "Filter by type: console_error|network_error|broken_link|performance").option("--project <id>", "Filter by project ID").option("--limit <n>", "Max results", "50").action((opts) => {
|
|
30981
|
+
scanCmd.command("issues").description("List tracked scan issues").option("--status <status>", "Filter by status: open|resolved|regressed").option("--type <type>", "Filter by type: console_error|network_error|broken_link|performance").option("--project <id>", "Filter by project ID").option("--limit <n>", "Max results", "50").option("--json", "Output as JSON", false).action((opts) => {
|
|
30960
30982
|
try {
|
|
30961
30983
|
const { listScanIssues: listScanIssues2 } = (init_scan_issues(), __toCommonJS(exports_scan_issues));
|
|
30962
30984
|
const issues = listScanIssues2({ status: opts.status, type: opts.type, projectId: opts.project, limit: parseInt(opts.limit) });
|
|
30985
|
+
if (opts.json) {
|
|
30986
|
+
log(JSON.stringify(issues, null, 2));
|
|
30987
|
+
return;
|
|
30988
|
+
}
|
|
30963
30989
|
if (issues.length === 0) {
|
|
30964
30990
|
log(chalk6.dim("No scan issues found."));
|
|
30965
30991
|
return;
|
|
@@ -31951,9 +31977,24 @@ evalCmd.command("rag <url>").description("Run RAG quality evaluation \u2014 fait
|
|
|
31951
31977
|
}
|
|
31952
31978
|
});
|
|
31953
31979
|
var goldenCmd = program2.command("golden").description("Manage golden answer checks for hallucination detection");
|
|
31954
|
-
goldenCmd.command("add").description("Add a golden answer check
|
|
31980
|
+
goldenCmd.command("add").description("Add a golden answer check (interactive if no --question given)").option("--project <id>", "Project ID").option("-q, --question <text>", "Question the endpoint should answer (non-interactive)").option("-a, --answer <text>", "Expected golden answer (non-interactive)").option("-e, --endpoint <path>", "Endpoint path or URL (non-interactive)").option("--judge-model <model>", "Model to use as judge").action(async (opts) => {
|
|
31955
31981
|
try {
|
|
31956
31982
|
const { createGoldenAnswer: createGoldenAnswer2 } = await Promise.resolve().then(() => (init_golden_answers(), exports_golden_answers));
|
|
31983
|
+
if (opts.question && opts.answer && opts.endpoint) {
|
|
31984
|
+
const projectId2 = resolveProject(opts.project);
|
|
31985
|
+
const golden2 = createGoldenAnswer2({
|
|
31986
|
+
question: opts.question,
|
|
31987
|
+
goldenAnswer: opts.answer,
|
|
31988
|
+
endpoint: opts.endpoint,
|
|
31989
|
+
judgeModel: opts.judgeModel || undefined,
|
|
31990
|
+
projectId: projectId2
|
|
31991
|
+
});
|
|
31992
|
+
log(chalk6.green(`
|
|
31993
|
+
Created golden answer check ${chalk6.bold(golden2.shortId)}`));
|
|
31994
|
+
log(` Endpoint: ${golden2.endpoint}`);
|
|
31995
|
+
log(` Question: ${golden2.question.slice(0, 60)}`);
|
|
31996
|
+
return;
|
|
31997
|
+
}
|
|
31957
31998
|
const ask = (prompt) => {
|
|
31958
31999
|
const rl2 = createInterface({ input: process.stdin, output: process.stdout });
|
|
31959
32000
|
return new Promise((resolve2) => rl2.question(prompt, (ans) => {
|
package/dist/index.js
CHANGED
|
@@ -15528,6 +15528,10 @@ async function runByFilter(options) {
|
|
|
15528
15528
|
if (options.scenarioIds && options.scenarioIds.length > 0) {
|
|
15529
15529
|
const all = listScenarios({ projectId: options.projectId });
|
|
15530
15530
|
scenarios = all.filter((s) => options.scenarioIds.includes(s.id) || options.scenarioIds.includes(s.shortId));
|
|
15531
|
+
if (scenarios.length === 0 && options.projectId) {
|
|
15532
|
+
const global2 = listScenarios({});
|
|
15533
|
+
scenarios = global2.filter((s) => options.scenarioIds.includes(s.id) || options.scenarioIds.includes(s.shortId));
|
|
15534
|
+
}
|
|
15531
15535
|
} else {
|
|
15532
15536
|
scenarios = listScenarios({
|
|
15533
15537
|
projectId: options.projectId,
|
|
@@ -16329,7 +16333,14 @@ function initProject(options) {
|
|
|
16329
16333
|
const projectPath = options.path ?? dir;
|
|
16330
16334
|
const project = ensureProject(name, projectPath);
|
|
16331
16335
|
const starterInputs = getStarterScenarios(framework ?? { name: "Unknown", features: [] }, project.id);
|
|
16332
|
-
const
|
|
16336
|
+
const existingScenarios = listScenarios({ projectId: project.id });
|
|
16337
|
+
const scenarios = existingScenarios.length > 0 ? existingScenarios : starterInputs.map((input) => {
|
|
16338
|
+
try {
|
|
16339
|
+
return createScenario(input);
|
|
16340
|
+
} catch {
|
|
16341
|
+
return null;
|
|
16342
|
+
}
|
|
16343
|
+
}).filter((s) => s !== null);
|
|
16333
16344
|
const configDir = getTestersDir();
|
|
16334
16345
|
const configPath = join13(configDir, "config.json");
|
|
16335
16346
|
if (!existsSync11(configDir)) {
|
package/dist/lib/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/lib/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/lib/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAiB,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAI7D,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAmDjE;AAID,wBAAgB,mBAAmB,CACjC,SAAS,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,EAC/C,SAAS,EAAE,MAAM,GAChB,mBAAmB,EAAE,CAkNvB;AAID,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;IAC1C,SAAS,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,EAAE,CAAC;IAC/C,SAAS,EAAE,aAAa,GAAG,IAAI,CAAC;IAChC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CA0C5D"}
|
package/dist/lib/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/index.js
CHANGED
|
@@ -16178,6 +16178,10 @@ async function runByFilter(options) {
|
|
|
16178
16178
|
if (options.scenarioIds && options.scenarioIds.length > 0) {
|
|
16179
16179
|
const all = listScenarios({ projectId: options.projectId });
|
|
16180
16180
|
scenarios = all.filter((s) => options.scenarioIds.includes(s.id) || options.scenarioIds.includes(s.shortId));
|
|
16181
|
+
if (scenarios.length === 0 && options.projectId) {
|
|
16182
|
+
const global2 = listScenarios({});
|
|
16183
|
+
scenarios = global2.filter((s) => options.scenarioIds.includes(s.id) || options.scenarioIds.includes(s.shortId));
|
|
16184
|
+
}
|
|
16181
16185
|
} else {
|
|
16182
16186
|
scenarios = listScenarios({
|
|
16183
16187
|
projectId: options.projectId,
|
package/dist/server/index.js
CHANGED
|
@@ -18871,6 +18871,10 @@ async function runByFilter(options) {
|
|
|
18871
18871
|
if (options.scenarioIds && options.scenarioIds.length > 0) {
|
|
18872
18872
|
const all = listScenarios({ projectId: options.projectId });
|
|
18873
18873
|
scenarios = all.filter((s) => options.scenarioIds.includes(s.id) || options.scenarioIds.includes(s.shortId));
|
|
18874
|
+
if (scenarios.length === 0 && options.projectId) {
|
|
18875
|
+
const global2 = listScenarios({});
|
|
18876
|
+
scenarios = global2.filter((s) => options.scenarioIds.includes(s.id) || options.scenarioIds.includes(s.shortId));
|
|
18877
|
+
}
|
|
18874
18878
|
} else {
|
|
18875
18879
|
scenarios = listScenarios({
|
|
18876
18880
|
projectId: options.projectId,
|