@hasna/testers 0.0.42 → 0.0.43
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 +21 -0
- package/dist/cli/index.js +340 -173
- package/dist/index.js +17 -2
- package/dist/lib/config.d.ts +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/workflow-fanout.d.ts +36 -0
- package/dist/lib/workflow-fanout.d.ts.map +1 -0
- package/dist/lib/workflow-runner.d.ts +3 -1
- package/dist/lib/workflow-runner.d.ts.map +1 -1
- package/dist/mcp/index.js +21 -5
- package/dist/server/index.js +19 -4
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -22,6 +22,27 @@ testers run https://my-preview.example.com
|
|
|
22
22
|
|
|
23
23
|
Passing a URL as the first argument will, by default, crawl the site and auto-generate scenarios if none exist for the project. Disable with `--no-auto-generate`.
|
|
24
24
|
|
|
25
|
+
### Sandbox Workflow Fanout
|
|
26
|
+
|
|
27
|
+
Saved workflows can run in E2B-backed sandboxes through `@hasna/sandboxes`. Sandbox workflow uploads default to `rsync` staging and the image-model default is `gpt-image-2`.
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
export E2B_API_KEY=...
|
|
31
|
+
|
|
32
|
+
testers workflow create "Projects CRUD" \
|
|
33
|
+
--project alumia \
|
|
34
|
+
--tag projects \
|
|
35
|
+
--target sandbox \
|
|
36
|
+
--sandbox-provider e2b \
|
|
37
|
+
--sandbox-sync rsync \
|
|
38
|
+
--timeout 600000
|
|
39
|
+
|
|
40
|
+
testers workflow fanout --project alumia --workers 6 --url https://preview.example.com
|
|
41
|
+
testers workflow fanout wf_abc,wf_def wf_xyz --workers 12 --url https://preview.example.com --json
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
`--workers` is bounded to 1-12 concurrent sandboxes. Use `--dry-run` to inspect the remote commands and upload plans without spawning sandboxes.
|
|
45
|
+
|
|
25
46
|
### Common Flags
|
|
26
47
|
|
|
27
48
|
- `--json --output results.json` — write structured results to a file for downstream tooling.
|
package/dist/cli/index.js
CHANGED
|
@@ -2120,6 +2120,11 @@ function cleanupValue(value) {
|
|
|
2120
2120
|
return value;
|
|
2121
2121
|
return;
|
|
2122
2122
|
}
|
|
2123
|
+
function syncStrategyValue(value) {
|
|
2124
|
+
if (value === "archive" || value === "rsync")
|
|
2125
|
+
return value;
|
|
2126
|
+
return;
|
|
2127
|
+
}
|
|
2123
2128
|
function workflowExecutionFromValue(value) {
|
|
2124
2129
|
const input = isRecord(value) ? value : {};
|
|
2125
2130
|
const rawTarget = stringValue(input["target"]) ?? "local";
|
|
@@ -2134,6 +2139,7 @@ function workflowExecutionFromValue(value) {
|
|
|
2134
2139
|
const sandboxImage = stringValue(input["sandboxImage"]) ?? stringValue(input["sandboxTemplate"]);
|
|
2135
2140
|
const sandboxRemoteDir = stringValue(input["sandboxRemoteDir"]);
|
|
2136
2141
|
const sandboxCleanup = cleanupValue(input["sandboxCleanup"]);
|
|
2142
|
+
const sandboxSyncStrategy = syncStrategyValue(input["sandboxSyncStrategy"]);
|
|
2137
2143
|
const setupCommand = stringValue(input["setupCommand"]);
|
|
2138
2144
|
const packageSpec = stringValue(input["packageSpec"]);
|
|
2139
2145
|
const timeoutMs = numberValue(input["timeoutMs"]);
|
|
@@ -2144,6 +2150,7 @@ function workflowExecutionFromValue(value) {
|
|
|
2144
2150
|
...sandboxImage ? { sandboxImage } : {},
|
|
2145
2151
|
...sandboxRemoteDir ? { sandboxRemoteDir } : {},
|
|
2146
2152
|
...sandboxCleanup ? { sandboxCleanup } : {},
|
|
2153
|
+
...sandboxSyncStrategy ? { sandboxSyncStrategy } : {},
|
|
2147
2154
|
...setupCommand ? { setupCommand } : {},
|
|
2148
2155
|
...packageSpec ? { packageSpec } : {},
|
|
2149
2156
|
...timeoutMs !== undefined ? { timeoutMs } : {},
|
|
@@ -13934,6 +13941,7 @@ import { readFileSync as readFileSync2, existsSync as existsSync7 } from "fs";
|
|
|
13934
13941
|
function getDefaultConfig() {
|
|
13935
13942
|
return {
|
|
13936
13943
|
defaultModel: "claude-haiku-4-5-20251001",
|
|
13944
|
+
defaultImageModel: DEFAULT_IMAGE_MODEL,
|
|
13937
13945
|
models: { ...MODEL_MAP },
|
|
13938
13946
|
browser: {
|
|
13939
13947
|
headless: true,
|
|
@@ -13960,6 +13968,7 @@ function loadConfig() {
|
|
|
13960
13968
|
}
|
|
13961
13969
|
const config = {
|
|
13962
13970
|
defaultModel: fileConfig.defaultModel ?? defaults2.defaultModel,
|
|
13971
|
+
defaultImageModel: fileConfig.defaultImageModel ?? defaults2.defaultImageModel,
|
|
13963
13972
|
models: fileConfig.models ? { ...defaults2.models, ...fileConfig.models } : { ...defaults2.models },
|
|
13964
13973
|
browser: fileConfig.browser ? { ...defaults2.browser, ...fileConfig.browser } : { ...defaults2.browser },
|
|
13965
13974
|
screenshots: fileConfig.screenshots ? { ...defaults2.screenshots, ...fileConfig.screenshots } : { ...defaults2.screenshots },
|
|
@@ -13975,6 +13984,10 @@ function loadConfig() {
|
|
|
13975
13984
|
if (envModel) {
|
|
13976
13985
|
config.defaultModel = envModel;
|
|
13977
13986
|
}
|
|
13987
|
+
const envImageModel = process.env["TESTERS_IMAGE_MODEL"];
|
|
13988
|
+
if (envImageModel) {
|
|
13989
|
+
config.defaultImageModel = envImageModel;
|
|
13990
|
+
}
|
|
13978
13991
|
const envScreenshotsDir = process.env["TESTERS_SCREENSHOTS_DIR"];
|
|
13979
13992
|
if (envScreenshotsDir) {
|
|
13980
13993
|
config.screenshots.dir = envScreenshotsDir;
|
|
@@ -13989,7 +14002,7 @@ function loadConfig() {
|
|
|
13989
14002
|
}
|
|
13990
14003
|
return config;
|
|
13991
14004
|
}
|
|
13992
|
-
var CONFIG_DIR3, CONFIG_PATH2;
|
|
14005
|
+
var CONFIG_DIR3, CONFIG_PATH2, DEFAULT_IMAGE_MODEL = "gpt-image-2";
|
|
13993
14006
|
var init_config2 = __esm(() => {
|
|
13994
14007
|
init_types();
|
|
13995
14008
|
init_paths();
|
|
@@ -27001,6 +27014,178 @@ var init_workflows = __esm(() => {
|
|
|
27001
27014
|
DEFAULT_EXECUTION = { target: "local" };
|
|
27002
27015
|
});
|
|
27003
27016
|
|
|
27017
|
+
// src/lib/workflow-runner.ts
|
|
27018
|
+
import { mkdtempSync, rmSync, writeFileSync as writeFileSync4 } from "fs";
|
|
27019
|
+
import { tmpdir } from "os";
|
|
27020
|
+
import { join as join16 } from "path";
|
|
27021
|
+
function buildWorkflowRunPlan(workflow, options) {
|
|
27022
|
+
const runOptions = {
|
|
27023
|
+
url: options.url,
|
|
27024
|
+
model: options.model,
|
|
27025
|
+
headed: options.headed,
|
|
27026
|
+
parallel: options.parallel,
|
|
27027
|
+
timeout: options.timeout ?? workflow.execution.timeoutMs,
|
|
27028
|
+
projectId: workflow.projectId ?? undefined,
|
|
27029
|
+
scenarioIds: workflow.scenarioFilter.scenarioIds,
|
|
27030
|
+
tags: workflow.scenarioFilter.tags,
|
|
27031
|
+
priority: workflow.scenarioFilter.priority,
|
|
27032
|
+
personaIds: workflow.personaIds.length > 0 ? workflow.personaIds : undefined
|
|
27033
|
+
};
|
|
27034
|
+
return {
|
|
27035
|
+
workflow,
|
|
27036
|
+
runOptions,
|
|
27037
|
+
sandbox: workflow.execution.target === "sandbox" ? buildSandboxPlan(workflow, workflow.execution, runOptions) : null
|
|
27038
|
+
};
|
|
27039
|
+
}
|
|
27040
|
+
async function runTestingWorkflow(workflowId, options, dependencies = {}) {
|
|
27041
|
+
const workflow = getTestingWorkflow(workflowId);
|
|
27042
|
+
if (!workflow)
|
|
27043
|
+
throw new Error(`Testing workflow not found: ${workflowId}`);
|
|
27044
|
+
if (!workflow.enabled)
|
|
27045
|
+
throw new Error(`Testing workflow is disabled: ${workflow.name}`);
|
|
27046
|
+
validatePersonaIds(workflow);
|
|
27047
|
+
const plan = buildWorkflowRunPlan(workflow, options);
|
|
27048
|
+
if (options.dryRun)
|
|
27049
|
+
return { run: null, results: [], plan };
|
|
27050
|
+
if (workflow.execution.target === "sandbox") {
|
|
27051
|
+
const sandboxResult = await runViaSandbox(plan, dependencies);
|
|
27052
|
+
return { run: null, results: [], plan, sandboxResult };
|
|
27053
|
+
}
|
|
27054
|
+
const runLocal = dependencies.runByFilter ?? runByFilter;
|
|
27055
|
+
const { run, results } = await runLocal(plan.runOptions);
|
|
27056
|
+
return { run, results, plan };
|
|
27057
|
+
}
|
|
27058
|
+
function createWorkflowDatabaseBundle(workflow, plan) {
|
|
27059
|
+
if (!plan.sandbox)
|
|
27060
|
+
throw new Error(`Workflow is not configured for sandbox execution: ${workflow.name}`);
|
|
27061
|
+
const localDir = mkdtempSync(join16(tmpdir(), `testers-workflow-${workflow.id.slice(0, 8)}-`));
|
|
27062
|
+
writeFileSync4(join16(localDir, "testers.db"), getDatabase().serialize());
|
|
27063
|
+
return {
|
|
27064
|
+
localDir,
|
|
27065
|
+
remoteDir: plan.sandbox.stateRemoteDir,
|
|
27066
|
+
cleanup: () => rmSync(localDir, { recursive: true, force: true })
|
|
27067
|
+
};
|
|
27068
|
+
}
|
|
27069
|
+
function validatePersonaIds(workflow) {
|
|
27070
|
+
for (const personaId of workflow.personaIds) {
|
|
27071
|
+
if (!getPersona(personaId)) {
|
|
27072
|
+
throw new Error(`Persona not found for workflow ${workflow.name}: ${personaId}`);
|
|
27073
|
+
}
|
|
27074
|
+
}
|
|
27075
|
+
}
|
|
27076
|
+
function buildSandboxPlan(workflow, execution, runOptions) {
|
|
27077
|
+
const remoteDir = execution.sandboxRemoteDir ?? `/tmp/testers-workflow-${workflow.id.slice(0, 8)}`;
|
|
27078
|
+
const stateRemoteDir = `${remoteDir.replace(/\/+$/, "")}/.testers-state`;
|
|
27079
|
+
return {
|
|
27080
|
+
provider: execution.provider,
|
|
27081
|
+
image: execution.sandboxImage,
|
|
27082
|
+
name: `testers-${workflow.id.slice(0, 8)}`,
|
|
27083
|
+
remoteDir,
|
|
27084
|
+
stateRemoteDir,
|
|
27085
|
+
cleanup: execution.sandboxCleanup ?? "delete",
|
|
27086
|
+
syncStrategy: execution.sandboxSyncStrategy ?? "rsync",
|
|
27087
|
+
timeoutMs: execution.timeoutMs,
|
|
27088
|
+
env: execution.env,
|
|
27089
|
+
command: buildSandboxCommand({
|
|
27090
|
+
runOptions,
|
|
27091
|
+
remoteDir,
|
|
27092
|
+
dbPath: `${stateRemoteDir}/testers.db`,
|
|
27093
|
+
setupCommand: execution.setupCommand,
|
|
27094
|
+
packageSpec: execution.packageSpec ?? "@hasna/testers"
|
|
27095
|
+
})
|
|
27096
|
+
};
|
|
27097
|
+
}
|
|
27098
|
+
function buildSandboxCommand(input) {
|
|
27099
|
+
const args = [
|
|
27100
|
+
"bunx",
|
|
27101
|
+
input.packageSpec,
|
|
27102
|
+
"run",
|
|
27103
|
+
input.runOptions.url,
|
|
27104
|
+
...input.runOptions.scenarioIds?.length ? ["--scenario", input.runOptions.scenarioIds.join(",")] : [],
|
|
27105
|
+
...input.runOptions.tags?.length ? input.runOptions.tags.flatMap((tag) => ["--tag", tag]) : [],
|
|
27106
|
+
...input.runOptions.priority ? ["--priority", input.runOptions.priority] : [],
|
|
27107
|
+
...input.runOptions.projectId ? ["--project", input.runOptions.projectId] : [],
|
|
27108
|
+
...input.runOptions.model ? ["--model", input.runOptions.model] : [],
|
|
27109
|
+
...input.runOptions.headed ? ["--headed"] : [],
|
|
27110
|
+
...input.runOptions.parallel ? ["--parallel", String(input.runOptions.parallel)] : [],
|
|
27111
|
+
...input.runOptions.timeout ? ["--timeout", String(input.runOptions.timeout)] : [],
|
|
27112
|
+
...input.runOptions.personaIds?.length ? ["--persona", input.runOptions.personaIds.join(",")] : [],
|
|
27113
|
+
"--no-auto-generate",
|
|
27114
|
+
"--json"
|
|
27115
|
+
];
|
|
27116
|
+
return [
|
|
27117
|
+
"set -euo pipefail",
|
|
27118
|
+
`mkdir -p ${shellQuote(input.remoteDir)}`,
|
|
27119
|
+
`cd ${shellQuote(input.remoteDir)}`,
|
|
27120
|
+
input.setupCommand,
|
|
27121
|
+
`HASNA_TESTERS_DB_PATH=${shellQuote(input.dbPath)} ${args.map(shellQuote).join(" ")}`
|
|
27122
|
+
].filter(Boolean).join(`
|
|
27123
|
+
`);
|
|
27124
|
+
}
|
|
27125
|
+
async function runViaSandbox(plan, dependencies) {
|
|
27126
|
+
if (!plan.sandbox)
|
|
27127
|
+
throw new Error("Workflow does not have a sandbox plan");
|
|
27128
|
+
const sandboxes = await resolveSandboxesRuntime(dependencies);
|
|
27129
|
+
const createBundle = dependencies.createDatabaseBundle ?? createWorkflowDatabaseBundle;
|
|
27130
|
+
const bundle = createBundle(plan.workflow, plan);
|
|
27131
|
+
try {
|
|
27132
|
+
const raw = await sandboxes.runCommandInSandbox({
|
|
27133
|
+
command: plan.sandbox.command,
|
|
27134
|
+
provider: plan.sandbox.provider,
|
|
27135
|
+
name: plan.sandbox.name,
|
|
27136
|
+
image: plan.sandbox.image,
|
|
27137
|
+
sandboxTimeout: plan.sandbox.timeoutMs,
|
|
27138
|
+
commandTimeoutMs: plan.sandbox.timeoutMs,
|
|
27139
|
+
projectId: plan.workflow.projectId ?? undefined,
|
|
27140
|
+
config: {
|
|
27141
|
+
source: "testers",
|
|
27142
|
+
workflowId: plan.workflow.id,
|
|
27143
|
+
workflowName: plan.workflow.name
|
|
27144
|
+
},
|
|
27145
|
+
sandboxEnvVars: plan.sandbox.env,
|
|
27146
|
+
cleanup: plan.sandbox.cleanup,
|
|
27147
|
+
upload: {
|
|
27148
|
+
localDir: bundle.localDir,
|
|
27149
|
+
remoteDir: bundle.remoteDir,
|
|
27150
|
+
syncStrategy: plan.sandbox.syncStrategy
|
|
27151
|
+
}
|
|
27152
|
+
});
|
|
27153
|
+
const exitCode = raw.result.exit_code ?? raw.result.exitCode ?? 0;
|
|
27154
|
+
const stdout = raw.result.stdout ?? "";
|
|
27155
|
+
const stderr = raw.result.stderr ?? "";
|
|
27156
|
+
if (exitCode !== 0) {
|
|
27157
|
+
throw new Error(`Sandbox workflow execution failed (${exitCode}): ${stderr || stdout}`);
|
|
27158
|
+
}
|
|
27159
|
+
return {
|
|
27160
|
+
sandboxId: raw.sandbox.id,
|
|
27161
|
+
sessionId: raw.session.id,
|
|
27162
|
+
exitCode,
|
|
27163
|
+
stdout,
|
|
27164
|
+
stderr,
|
|
27165
|
+
cleanup: raw.cleanup
|
|
27166
|
+
};
|
|
27167
|
+
} finally {
|
|
27168
|
+
bundle.cleanup?.();
|
|
27169
|
+
}
|
|
27170
|
+
}
|
|
27171
|
+
async function resolveSandboxesRuntime(dependencies) {
|
|
27172
|
+
if (dependencies.sandboxes)
|
|
27173
|
+
return dependencies.sandboxes;
|
|
27174
|
+
if (dependencies.createSandboxesSDK)
|
|
27175
|
+
return dependencies.createSandboxesSDK();
|
|
27176
|
+
const mod = await import("@hasna/sandboxes");
|
|
27177
|
+
return mod.createSandboxesSDK();
|
|
27178
|
+
}
|
|
27179
|
+
function shellQuote(value) {
|
|
27180
|
+
return `'${value.replaceAll("'", `'"'"'`)}'`;
|
|
27181
|
+
}
|
|
27182
|
+
var init_workflow_runner = __esm(() => {
|
|
27183
|
+
init_database();
|
|
27184
|
+
init_workflows();
|
|
27185
|
+
init_personas();
|
|
27186
|
+
init_runner();
|
|
27187
|
+
});
|
|
27188
|
+
|
|
27004
27189
|
// src/lib/ci.ts
|
|
27005
27190
|
var exports_ci = {};
|
|
27006
27191
|
__export(exports_ci, {
|
|
@@ -59383,6 +59568,115 @@ var init_agents = __esm(() => {
|
|
|
59383
59568
|
init_database();
|
|
59384
59569
|
});
|
|
59385
59570
|
|
|
59571
|
+
// src/lib/workflow-fanout.ts
|
|
59572
|
+
var exports_workflow_fanout = {};
|
|
59573
|
+
__export(exports_workflow_fanout, {
|
|
59574
|
+
runWorkflowFanout: () => runWorkflowFanout,
|
|
59575
|
+
resolveWorkflowFanoutSelection: () => resolveWorkflowFanoutSelection,
|
|
59576
|
+
normalizeFanoutWorkerCount: () => normalizeFanoutWorkerCount
|
|
59577
|
+
});
|
|
59578
|
+
function splitWorkflowIds(ids) {
|
|
59579
|
+
return (ids ?? []).flatMap((item) => item.split(",")).map((item) => item.trim()).filter(Boolean);
|
|
59580
|
+
}
|
|
59581
|
+
function normalizeFanoutWorkerCount(value) {
|
|
59582
|
+
const workers = Math.floor(value ?? 6);
|
|
59583
|
+
if (!Number.isFinite(workers) || workers < 1 || workers > 12) {
|
|
59584
|
+
throw new Error("workflow fanout workers must be between 1 and 12");
|
|
59585
|
+
}
|
|
59586
|
+
return workers;
|
|
59587
|
+
}
|
|
59588
|
+
function resolveWorkflowFanoutSelection(options) {
|
|
59589
|
+
const ids = splitWorkflowIds(options.workflowIds);
|
|
59590
|
+
const workflows = ids.length > 0 ? ids.map((id) => {
|
|
59591
|
+
const workflow = getTestingWorkflow(id);
|
|
59592
|
+
if (!workflow)
|
|
59593
|
+
throw new Error(`Testing workflow not found: ${id}`);
|
|
59594
|
+
return workflow;
|
|
59595
|
+
}) : listTestingWorkflows({
|
|
59596
|
+
projectId: options.projectId,
|
|
59597
|
+
enabled: options.includeDisabled ? undefined : true
|
|
59598
|
+
});
|
|
59599
|
+
const tagSet = new Set(options.tags ?? []);
|
|
59600
|
+
const filtered = tagSet.size === 0 ? workflows : workflows.filter((workflow) => workflow.scenarioFilter.tags?.some((tag) => tagSet.has(tag)));
|
|
59601
|
+
if (filtered.length === 0) {
|
|
59602
|
+
throw new Error("No testing workflows matched the fanout selection");
|
|
59603
|
+
}
|
|
59604
|
+
const nonSandbox = filtered.filter((workflow) => workflow.execution.target !== "sandbox");
|
|
59605
|
+
if (nonSandbox.length > 0) {
|
|
59606
|
+
throw new Error(`workflow fanout requires sandbox workflows. Recreate or update these with --target sandbox: ${nonSandbox.map((workflow) => workflow.name).join(", ")}`);
|
|
59607
|
+
}
|
|
59608
|
+
return filtered;
|
|
59609
|
+
}
|
|
59610
|
+
async function mapWithConcurrency(items, limit, worker) {
|
|
59611
|
+
const output = new Array(items.length);
|
|
59612
|
+
let next = 0;
|
|
59613
|
+
async function runWorker() {
|
|
59614
|
+
while (next < items.length) {
|
|
59615
|
+
const index = next++;
|
|
59616
|
+
output[index] = await worker(items[index], index);
|
|
59617
|
+
}
|
|
59618
|
+
}
|
|
59619
|
+
await Promise.all(Array.from({ length: Math.min(limit, items.length) }, () => runWorker()));
|
|
59620
|
+
return output;
|
|
59621
|
+
}
|
|
59622
|
+
async function runWorkflowFanout(options, dependencies = {}) {
|
|
59623
|
+
const workers = normalizeFanoutWorkerCount(options.workers);
|
|
59624
|
+
const workflows = resolveWorkflowFanoutSelection(options);
|
|
59625
|
+
const { runTestingWorkflow: runOne = runTestingWorkflow, ...workflowDependencies } = dependencies;
|
|
59626
|
+
const items = await mapWithConcurrency(workflows, workers, async (workflow) => {
|
|
59627
|
+
try {
|
|
59628
|
+
const output = await runOne(workflow.id, {
|
|
59629
|
+
url: options.url,
|
|
59630
|
+
model: options.model,
|
|
59631
|
+
headed: options.headed,
|
|
59632
|
+
parallel: options.parallel,
|
|
59633
|
+
timeout: options.timeout,
|
|
59634
|
+
dryRun: options.dryRun
|
|
59635
|
+
}, workflowDependencies);
|
|
59636
|
+
if (options.dryRun) {
|
|
59637
|
+
return {
|
|
59638
|
+
workflowId: workflow.id,
|
|
59639
|
+
workflowName: workflow.name,
|
|
59640
|
+
status: "dry-run",
|
|
59641
|
+
plan: output.plan
|
|
59642
|
+
};
|
|
59643
|
+
}
|
|
59644
|
+
return {
|
|
59645
|
+
workflowId: workflow.id,
|
|
59646
|
+
workflowName: workflow.name,
|
|
59647
|
+
status: "passed",
|
|
59648
|
+
sandboxId: output.sandboxResult?.sandboxId,
|
|
59649
|
+
sessionId: output.sandboxResult?.sessionId,
|
|
59650
|
+
exitCode: output.sandboxResult?.exitCode,
|
|
59651
|
+
stdout: output.sandboxResult?.stdout,
|
|
59652
|
+
stderr: output.sandboxResult?.stderr
|
|
59653
|
+
};
|
|
59654
|
+
} catch (error) {
|
|
59655
|
+
return {
|
|
59656
|
+
workflowId: workflow.id,
|
|
59657
|
+
workflowName: workflow.name,
|
|
59658
|
+
status: "failed",
|
|
59659
|
+
error: error instanceof Error ? error.message : String(error)
|
|
59660
|
+
};
|
|
59661
|
+
}
|
|
59662
|
+
});
|
|
59663
|
+
const failed = items.filter((item) => item.status === "failed").length;
|
|
59664
|
+
const passed = items.filter((item) => item.status === "passed").length;
|
|
59665
|
+
const dryRun = options.dryRun === true;
|
|
59666
|
+
return {
|
|
59667
|
+
status: dryRun ? "dry-run" : failed > 0 ? "failed" : "passed",
|
|
59668
|
+
workers,
|
|
59669
|
+
total: items.length,
|
|
59670
|
+
passed,
|
|
59671
|
+
failed,
|
|
59672
|
+
items
|
|
59673
|
+
};
|
|
59674
|
+
}
|
|
59675
|
+
var init_workflow_fanout = __esm(() => {
|
|
59676
|
+
init_workflows();
|
|
59677
|
+
init_workflow_runner();
|
|
59678
|
+
});
|
|
59679
|
+
|
|
59386
59680
|
// node_modules/@ai-sdk/provider/dist/index.mjs
|
|
59387
59681
|
function getErrorMessage(error) {
|
|
59388
59682
|
if (error == null) {
|
|
@@ -94040,7 +94334,7 @@ import chalk6 from "chalk";
|
|
|
94040
94334
|
// package.json
|
|
94041
94335
|
var package_default = {
|
|
94042
94336
|
name: "@hasna/testers",
|
|
94043
|
-
version: "0.0.
|
|
94337
|
+
version: "0.0.43",
|
|
94044
94338
|
description: "AI-powered QA testing CLI \u2014 spawns cheap AI agents to test web apps with headless browsers",
|
|
94045
94339
|
type: "module",
|
|
94046
94340
|
main: "dist/index.js",
|
|
@@ -94086,7 +94380,7 @@ var package_default = {
|
|
|
94086
94380
|
"@hasna/cloud": "^0.1.24",
|
|
94087
94381
|
"@hasna/contacts": "^0.6.8",
|
|
94088
94382
|
"@hasna/projects": "^0.1.42",
|
|
94089
|
-
"@hasna/sandboxes": "^0.1.
|
|
94383
|
+
"@hasna/sandboxes": "^0.1.28",
|
|
94090
94384
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
94091
94385
|
ai: "^6.0.175",
|
|
94092
94386
|
chalk: "^5.4.1",
|
|
@@ -96152,174 +96446,7 @@ function deleteAuthPreset(name) {
|
|
|
96152
96446
|
// src/cli/index.tsx
|
|
96153
96447
|
init_flows();
|
|
96154
96448
|
init_workflows();
|
|
96155
|
-
|
|
96156
|
-
// src/lib/workflow-runner.ts
|
|
96157
|
-
init_database();
|
|
96158
|
-
init_workflows();
|
|
96159
|
-
init_personas();
|
|
96160
|
-
init_runner();
|
|
96161
|
-
import { mkdtempSync, rmSync, writeFileSync as writeFileSync4 } from "fs";
|
|
96162
|
-
import { tmpdir } from "os";
|
|
96163
|
-
import { join as join16 } from "path";
|
|
96164
|
-
function buildWorkflowRunPlan(workflow, options) {
|
|
96165
|
-
const runOptions = {
|
|
96166
|
-
url: options.url,
|
|
96167
|
-
model: options.model,
|
|
96168
|
-
headed: options.headed,
|
|
96169
|
-
parallel: options.parallel,
|
|
96170
|
-
timeout: options.timeout ?? workflow.execution.timeoutMs,
|
|
96171
|
-
projectId: workflow.projectId ?? undefined,
|
|
96172
|
-
scenarioIds: workflow.scenarioFilter.scenarioIds,
|
|
96173
|
-
tags: workflow.scenarioFilter.tags,
|
|
96174
|
-
priority: workflow.scenarioFilter.priority,
|
|
96175
|
-
personaIds: workflow.personaIds.length > 0 ? workflow.personaIds : undefined
|
|
96176
|
-
};
|
|
96177
|
-
return {
|
|
96178
|
-
workflow,
|
|
96179
|
-
runOptions,
|
|
96180
|
-
sandbox: workflow.execution.target === "sandbox" ? buildSandboxPlan(workflow, workflow.execution, runOptions) : null
|
|
96181
|
-
};
|
|
96182
|
-
}
|
|
96183
|
-
async function runTestingWorkflow(workflowId, options, dependencies = {}) {
|
|
96184
|
-
const workflow = getTestingWorkflow(workflowId);
|
|
96185
|
-
if (!workflow)
|
|
96186
|
-
throw new Error(`Testing workflow not found: ${workflowId}`);
|
|
96187
|
-
if (!workflow.enabled)
|
|
96188
|
-
throw new Error(`Testing workflow is disabled: ${workflow.name}`);
|
|
96189
|
-
validatePersonaIds(workflow);
|
|
96190
|
-
const plan = buildWorkflowRunPlan(workflow, options);
|
|
96191
|
-
if (options.dryRun)
|
|
96192
|
-
return { run: null, results: [], plan };
|
|
96193
|
-
if (workflow.execution.target === "sandbox") {
|
|
96194
|
-
const sandboxResult = await runViaSandbox(plan, dependencies);
|
|
96195
|
-
return { run: null, results: [], plan, sandboxResult };
|
|
96196
|
-
}
|
|
96197
|
-
const runLocal = dependencies.runByFilter ?? runByFilter;
|
|
96198
|
-
const { run, results } = await runLocal(plan.runOptions);
|
|
96199
|
-
return { run, results, plan };
|
|
96200
|
-
}
|
|
96201
|
-
function createWorkflowDatabaseBundle(workflow, plan) {
|
|
96202
|
-
if (!plan.sandbox)
|
|
96203
|
-
throw new Error(`Workflow is not configured for sandbox execution: ${workflow.name}`);
|
|
96204
|
-
const localDir = mkdtempSync(join16(tmpdir(), `testers-workflow-${workflow.id.slice(0, 8)}-`));
|
|
96205
|
-
writeFileSync4(join16(localDir, "testers.db"), getDatabase().serialize());
|
|
96206
|
-
return {
|
|
96207
|
-
localDir,
|
|
96208
|
-
remoteDir: plan.sandbox.stateRemoteDir,
|
|
96209
|
-
cleanup: () => rmSync(localDir, { recursive: true, force: true })
|
|
96210
|
-
};
|
|
96211
|
-
}
|
|
96212
|
-
function validatePersonaIds(workflow) {
|
|
96213
|
-
for (const personaId of workflow.personaIds) {
|
|
96214
|
-
if (!getPersona(personaId)) {
|
|
96215
|
-
throw new Error(`Persona not found for workflow ${workflow.name}: ${personaId}`);
|
|
96216
|
-
}
|
|
96217
|
-
}
|
|
96218
|
-
}
|
|
96219
|
-
function buildSandboxPlan(workflow, execution, runOptions) {
|
|
96220
|
-
const remoteDir = execution.sandboxRemoteDir ?? `/tmp/testers-workflow-${workflow.id.slice(0, 8)}`;
|
|
96221
|
-
const stateRemoteDir = `${remoteDir.replace(/\/+$/, "")}/.testers-state`;
|
|
96222
|
-
return {
|
|
96223
|
-
provider: execution.provider,
|
|
96224
|
-
image: execution.sandboxImage,
|
|
96225
|
-
name: `testers-${workflow.id.slice(0, 8)}`,
|
|
96226
|
-
remoteDir,
|
|
96227
|
-
stateRemoteDir,
|
|
96228
|
-
cleanup: execution.sandboxCleanup ?? "delete",
|
|
96229
|
-
timeoutMs: execution.timeoutMs,
|
|
96230
|
-
env: execution.env,
|
|
96231
|
-
command: buildSandboxCommand({
|
|
96232
|
-
runOptions,
|
|
96233
|
-
remoteDir,
|
|
96234
|
-
dbPath: `${stateRemoteDir}/testers.db`,
|
|
96235
|
-
setupCommand: execution.setupCommand,
|
|
96236
|
-
packageSpec: execution.packageSpec ?? "@hasna/testers"
|
|
96237
|
-
})
|
|
96238
|
-
};
|
|
96239
|
-
}
|
|
96240
|
-
function buildSandboxCommand(input) {
|
|
96241
|
-
const args = [
|
|
96242
|
-
"bunx",
|
|
96243
|
-
input.packageSpec,
|
|
96244
|
-
"run",
|
|
96245
|
-
input.runOptions.url,
|
|
96246
|
-
...input.runOptions.scenarioIds?.length ? ["--scenario", input.runOptions.scenarioIds.join(",")] : [],
|
|
96247
|
-
...input.runOptions.tags?.length ? input.runOptions.tags.flatMap((tag) => ["--tag", tag]) : [],
|
|
96248
|
-
...input.runOptions.priority ? ["--priority", input.runOptions.priority] : [],
|
|
96249
|
-
...input.runOptions.projectId ? ["--project", input.runOptions.projectId] : [],
|
|
96250
|
-
...input.runOptions.model ? ["--model", input.runOptions.model] : [],
|
|
96251
|
-
...input.runOptions.headed ? ["--headed"] : [],
|
|
96252
|
-
...input.runOptions.parallel ? ["--parallel", String(input.runOptions.parallel)] : [],
|
|
96253
|
-
...input.runOptions.timeout ? ["--timeout", String(input.runOptions.timeout)] : [],
|
|
96254
|
-
...input.runOptions.personaIds?.length ? ["--persona", input.runOptions.personaIds.join(",")] : [],
|
|
96255
|
-
"--no-auto-generate",
|
|
96256
|
-
"--json"
|
|
96257
|
-
];
|
|
96258
|
-
return [
|
|
96259
|
-
"set -euo pipefail",
|
|
96260
|
-
`mkdir -p ${shellQuote(input.remoteDir)}`,
|
|
96261
|
-
`cd ${shellQuote(input.remoteDir)}`,
|
|
96262
|
-
input.setupCommand,
|
|
96263
|
-
`HASNA_TESTERS_DB_PATH=${shellQuote(input.dbPath)} ${args.map(shellQuote).join(" ")}`
|
|
96264
|
-
].filter(Boolean).join(`
|
|
96265
|
-
`);
|
|
96266
|
-
}
|
|
96267
|
-
async function runViaSandbox(plan, dependencies) {
|
|
96268
|
-
if (!plan.sandbox)
|
|
96269
|
-
throw new Error("Workflow does not have a sandbox plan");
|
|
96270
|
-
const sandboxes = await resolveSandboxesRuntime(dependencies);
|
|
96271
|
-
const createBundle = dependencies.createDatabaseBundle ?? createWorkflowDatabaseBundle;
|
|
96272
|
-
const bundle = createBundle(plan.workflow, plan);
|
|
96273
|
-
try {
|
|
96274
|
-
const raw = await sandboxes.runCommandInSandbox({
|
|
96275
|
-
command: plan.sandbox.command,
|
|
96276
|
-
provider: plan.sandbox.provider,
|
|
96277
|
-
name: plan.sandbox.name,
|
|
96278
|
-
image: plan.sandbox.image,
|
|
96279
|
-
sandboxTimeout: plan.sandbox.timeoutMs,
|
|
96280
|
-
commandTimeoutMs: plan.sandbox.timeoutMs,
|
|
96281
|
-
projectId: plan.workflow.projectId ?? undefined,
|
|
96282
|
-
config: {
|
|
96283
|
-
source: "testers",
|
|
96284
|
-
workflowId: plan.workflow.id,
|
|
96285
|
-
workflowName: plan.workflow.name
|
|
96286
|
-
},
|
|
96287
|
-
sandboxEnvVars: plan.sandbox.env,
|
|
96288
|
-
cleanup: plan.sandbox.cleanup,
|
|
96289
|
-
upload: {
|
|
96290
|
-
localDir: bundle.localDir,
|
|
96291
|
-
remoteDir: bundle.remoteDir
|
|
96292
|
-
}
|
|
96293
|
-
});
|
|
96294
|
-
const exitCode = raw.result.exit_code ?? raw.result.exitCode ?? 0;
|
|
96295
|
-
const stdout = raw.result.stdout ?? "";
|
|
96296
|
-
const stderr = raw.result.stderr ?? "";
|
|
96297
|
-
if (exitCode !== 0) {
|
|
96298
|
-
throw new Error(`Sandbox workflow execution failed (${exitCode}): ${stderr || stdout}`);
|
|
96299
|
-
}
|
|
96300
|
-
return {
|
|
96301
|
-
sandboxId: raw.sandbox.id,
|
|
96302
|
-
sessionId: raw.session.id,
|
|
96303
|
-
exitCode,
|
|
96304
|
-
stdout,
|
|
96305
|
-
stderr,
|
|
96306
|
-
cleanup: raw.cleanup
|
|
96307
|
-
};
|
|
96308
|
-
} finally {
|
|
96309
|
-
bundle.cleanup?.();
|
|
96310
|
-
}
|
|
96311
|
-
}
|
|
96312
|
-
async function resolveSandboxesRuntime(dependencies) {
|
|
96313
|
-
if (dependencies.sandboxes)
|
|
96314
|
-
return dependencies.sandboxes;
|
|
96315
|
-
if (dependencies.createSandboxesSDK)
|
|
96316
|
-
return dependencies.createSandboxesSDK();
|
|
96317
|
-
const mod = await import("@hasna/sandboxes");
|
|
96318
|
-
return mod.createSandboxesSDK();
|
|
96319
|
-
}
|
|
96320
|
-
function shellQuote(value) {
|
|
96321
|
-
return `'${value.replaceAll("'", `'"'"'`)}'`;
|
|
96322
|
-
}
|
|
96449
|
+
init_workflow_runner();
|
|
96323
96450
|
|
|
96324
96451
|
// src/db/environments.ts
|
|
96325
96452
|
init_database();
|
|
@@ -98350,6 +98477,7 @@ program2.command("status").description("Show database and auth status").action((
|
|
|
98350
98477
|
log(` ANTHROPIC_API_KEY: ${hasApiKey ? chalk6.green("set") : chalk6.red("not set")}`);
|
|
98351
98478
|
log(` Database: ${dbPath}`);
|
|
98352
98479
|
log(` Default model: ${config2.defaultModel}`);
|
|
98480
|
+
log(` Image model: ${config2.defaultImageModel}`);
|
|
98353
98481
|
log(` Screenshots dir: ${config2.screenshots.dir}`);
|
|
98354
98482
|
log("");
|
|
98355
98483
|
} catch (error40) {
|
|
@@ -100687,7 +100815,7 @@ workflowCmd.command("create <name>").description("Save a reusable testing workfl
|
|
|
100687
100815
|
}, []).option("--priority <level>", "Scenario priority").option("--persona <ids>", "Comma-separated persona IDs").option("--goal <prompt>", "Goal prompt for the agentic testing loop").option("--success <criteria>", "Success criteria (repeatable)", (val, acc) => {
|
|
100688
100816
|
acc.push(val);
|
|
100689
100817
|
return acc;
|
|
100690
|
-
}, []).option("--max-iterations <n>", "Goal-loop iteration cap", "10").option("--target <target>", "Execution target: local or sandbox", "local").option("--sandbox-provider <provider>", "Sandbox provider: e2b, daytona, or modal").option("--sandbox-image <image>", "Sandbox image/template").option("--sandbox-remote-dir <path>", "Remote working directory for sandbox runs").option("--sandbox-cleanup <mode>", "Sandbox cleanup mode: delete, stop, or keep", "delete").option("--sandbox-setup-command <command>", "Shell command to run before testers in the sandbox").option("--sandbox-package <spec>", "Package spec to execute in the sandbox", "@hasna/testers").option("--e2b-template <name>", "Legacy alias for --sandbox-image").option("--timeout <ms>", "Workflow timeout").option("--json", "Output as JSON", false).action((name21, opts) => {
|
|
100818
|
+
}, []).option("--max-iterations <n>", "Goal-loop iteration cap", "10").option("--target <target>", "Execution target: local or sandbox", "local").option("--sandbox-provider <provider>", "Sandbox provider: e2b, daytona, or modal").option("--sandbox-image <image>", "Sandbox image/template").option("--sandbox-remote-dir <path>", "Remote working directory for sandbox runs").option("--sandbox-cleanup <mode>", "Sandbox cleanup mode: delete, stop, or keep", "delete").option("--sandbox-sync <strategy>", "Sandbox upload sync strategy: rsync or archive", "rsync").option("--sandbox-setup-command <command>", "Shell command to run before testers in the sandbox").option("--sandbox-package <spec>", "Package spec to execute in the sandbox", "@hasna/testers").option("--e2b-template <name>", "Legacy alias for --sandbox-image").option("--timeout <ms>", "Workflow timeout").option("--json", "Output as JSON", false).action((name21, opts) => {
|
|
100691
100819
|
try {
|
|
100692
100820
|
const workflow = createTestingWorkflow({
|
|
100693
100821
|
name: name21,
|
|
@@ -100710,6 +100838,7 @@ workflowCmd.command("create <name>").description("Save a reusable testing workfl
|
|
|
100710
100838
|
sandboxImage: opts.sandboxImage ?? opts.e2bTemplate,
|
|
100711
100839
|
sandboxRemoteDir: opts.sandboxRemoteDir,
|
|
100712
100840
|
sandboxCleanup: opts.sandboxCleanup,
|
|
100841
|
+
sandboxSyncStrategy: opts.sandboxSync,
|
|
100713
100842
|
setupCommand: opts.sandboxSetupCommand,
|
|
100714
100843
|
packageSpec: opts.sandboxPackage,
|
|
100715
100844
|
timeoutMs: opts.timeout ? parseInt(opts.timeout, 10) : undefined
|
|
@@ -100778,7 +100907,7 @@ workflowCmd.command("run <id>").description("Run a saved testing workflow").requ
|
|
|
100778
100907
|
timeout: opts.timeout ? parseInt(opts.timeout, 10) : undefined,
|
|
100779
100908
|
dryRun: opts.dryRun
|
|
100780
100909
|
});
|
|
100781
|
-
if (opts.json || opts.dryRun || output.
|
|
100910
|
+
if (opts.json || opts.dryRun || output.sandboxResult) {
|
|
100782
100911
|
log(JSON.stringify(output, null, 2));
|
|
100783
100912
|
return;
|
|
100784
100913
|
}
|
|
@@ -100789,6 +100918,44 @@ workflowCmd.command("run <id>").description("Run a saved testing workflow").requ
|
|
|
100789
100918
|
process.exit(1);
|
|
100790
100919
|
}
|
|
100791
100920
|
});
|
|
100921
|
+
workflowCmd.command("fanout [ids...]").description("Run multiple saved sandbox workflows concurrently").requiredOption("-u, --url <url>", "Target URL").option("--project <id>", "Project ID").option("--tag <tag>", "Workflow scenario tag filter (repeatable)", (val, acc) => {
|
|
100922
|
+
acc.push(val);
|
|
100923
|
+
return acc;
|
|
100924
|
+
}, []).option("--all", "Include disabled workflows when selecting by project/tag", false).option("--workers <n>", "Concurrent sandboxes, 1-12 (default: 6)", "6").option("-m, --model <model>", "AI model").option("--headed", "Run headed", false).option("--parallel <n>", "Parallel browser workers inside each sandbox").option("--timeout <ms>", "Override workflow timeout").option("--dry-run", "Print resolved sandbox plans without spawning sandboxes", false).option("--json", "Output as JSON", false).action(async (ids, opts) => {
|
|
100925
|
+
try {
|
|
100926
|
+
const { runWorkflowFanout: runWorkflowFanout2 } = await Promise.resolve().then(() => (init_workflow_fanout(), exports_workflow_fanout));
|
|
100927
|
+
const result = await runWorkflowFanout2({
|
|
100928
|
+
workflowIds: ids,
|
|
100929
|
+
projectId: opts.project ? resolveProject2(opts.project) : undefined,
|
|
100930
|
+
tags: opts.tag,
|
|
100931
|
+
includeDisabled: opts.all,
|
|
100932
|
+
workers: opts.workers ? parseInt(opts.workers, 10) : undefined,
|
|
100933
|
+
url: opts.url,
|
|
100934
|
+
model: opts.model,
|
|
100935
|
+
headed: opts.headed,
|
|
100936
|
+
parallel: opts.parallel ? parseInt(opts.parallel, 10) : undefined,
|
|
100937
|
+
timeout: opts.timeout ? parseInt(opts.timeout, 10) : undefined,
|
|
100938
|
+
dryRun: opts.dryRun
|
|
100939
|
+
});
|
|
100940
|
+
if (opts.json || opts.dryRun) {
|
|
100941
|
+
log(JSON.stringify(result, null, 2));
|
|
100942
|
+
} else {
|
|
100943
|
+
const status = result.status === "passed" ? chalk6.green("passed") : chalk6.red("failed");
|
|
100944
|
+
log(chalk6.bold(`Sandbox workflow fanout ${status}: ${result.passed}/${result.total} passed with ${result.workers} worker(s)`));
|
|
100945
|
+
for (const item of result.items) {
|
|
100946
|
+
const itemStatus = item.status === "passed" ? chalk6.green(item.status) : chalk6.red(item.status);
|
|
100947
|
+
const sandbox = item.sandboxId ? chalk6.dim(` sandbox=${item.sandboxId.slice(0, 8)}`) : "";
|
|
100948
|
+
const error40 = item.error ? chalk6.dim(` ${item.error}`) : "";
|
|
100949
|
+
log(` ${itemStatus} ${item.workflowName}${sandbox}${error40}`);
|
|
100950
|
+
}
|
|
100951
|
+
}
|
|
100952
|
+
if (result.status === "failed")
|
|
100953
|
+
process.exit(1);
|
|
100954
|
+
} catch (error40) {
|
|
100955
|
+
logError(chalk6.red(`Error: ${error40 instanceof Error ? error40.message : String(error40)}`));
|
|
100956
|
+
process.exit(1);
|
|
100957
|
+
}
|
|
100958
|
+
});
|
|
100792
100959
|
workflowCmd.command("agent <id>").description("Run a saved workflow as a goal loop and ask the app AI to create open-todos next actions").requiredOption("-u, --url <url>", "Target URL").option("-m, --model <model>", "AI SDK model ID for planning").option("--headed", "Run headed", false).option("--parallel <n>", "Parallel workers").option("--dry-run", "Resolve the loop without launching browsers", false).option("--json", "Output as JSON", false).action(async (id, opts) => {
|
|
100793
100960
|
try {
|
|
100794
100961
|
const { runWorkflowGoalLoop: runWorkflowGoalLoop2 } = await Promise.resolve().then(() => (init_workflow_agent(), exports_workflow_agent));
|
package/dist/index.js
CHANGED
|
@@ -37,6 +37,11 @@ function cleanupValue(value) {
|
|
|
37
37
|
return value;
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
40
|
+
function syncStrategyValue(value) {
|
|
41
|
+
if (value === "archive" || value === "rsync")
|
|
42
|
+
return value;
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
40
45
|
function workflowExecutionFromValue(value) {
|
|
41
46
|
const input = isRecord(value) ? value : {};
|
|
42
47
|
const rawTarget = stringValue(input["target"]) ?? "local";
|
|
@@ -51,6 +56,7 @@ function workflowExecutionFromValue(value) {
|
|
|
51
56
|
const sandboxImage = stringValue(input["sandboxImage"]) ?? stringValue(input["sandboxTemplate"]);
|
|
52
57
|
const sandboxRemoteDir = stringValue(input["sandboxRemoteDir"]);
|
|
53
58
|
const sandboxCleanup = cleanupValue(input["sandboxCleanup"]);
|
|
59
|
+
const sandboxSyncStrategy = syncStrategyValue(input["sandboxSyncStrategy"]);
|
|
54
60
|
const setupCommand = stringValue(input["setupCommand"]);
|
|
55
61
|
const packageSpec = stringValue(input["packageSpec"]);
|
|
56
62
|
const timeoutMs = numberValue(input["timeoutMs"]);
|
|
@@ -61,6 +67,7 @@ function workflowExecutionFromValue(value) {
|
|
|
61
67
|
...sandboxImage ? { sandboxImage } : {},
|
|
62
68
|
...sandboxRemoteDir ? { sandboxRemoteDir } : {},
|
|
63
69
|
...sandboxCleanup ? { sandboxCleanup } : {},
|
|
70
|
+
...sandboxSyncStrategy ? { sandboxSyncStrategy } : {},
|
|
64
71
|
...setupCommand ? { setupCommand } : {},
|
|
65
72
|
...packageSpec ? { packageSpec } : {},
|
|
66
73
|
...timeoutMs !== undefined ? { timeoutMs } : {},
|
|
@@ -10704,6 +10711,7 @@ import { readFileSync as readFileSync2, existsSync as existsSync7 } from "fs";
|
|
|
10704
10711
|
function getDefaultConfig() {
|
|
10705
10712
|
return {
|
|
10706
10713
|
defaultModel: "claude-haiku-4-5-20251001",
|
|
10714
|
+
defaultImageModel: DEFAULT_IMAGE_MODEL,
|
|
10707
10715
|
models: { ...MODEL_MAP },
|
|
10708
10716
|
browser: {
|
|
10709
10717
|
headless: true,
|
|
@@ -10730,6 +10738,7 @@ function loadConfig() {
|
|
|
10730
10738
|
}
|
|
10731
10739
|
const config = {
|
|
10732
10740
|
defaultModel: fileConfig.defaultModel ?? defaults2.defaultModel,
|
|
10741
|
+
defaultImageModel: fileConfig.defaultImageModel ?? defaults2.defaultImageModel,
|
|
10733
10742
|
models: fileConfig.models ? { ...defaults2.models, ...fileConfig.models } : { ...defaults2.models },
|
|
10734
10743
|
browser: fileConfig.browser ? { ...defaults2.browser, ...fileConfig.browser } : { ...defaults2.browser },
|
|
10735
10744
|
screenshots: fileConfig.screenshots ? { ...defaults2.screenshots, ...fileConfig.screenshots } : { ...defaults2.screenshots },
|
|
@@ -10745,6 +10754,10 @@ function loadConfig() {
|
|
|
10745
10754
|
if (envModel) {
|
|
10746
10755
|
config.defaultModel = envModel;
|
|
10747
10756
|
}
|
|
10757
|
+
const envImageModel = process.env["TESTERS_IMAGE_MODEL"];
|
|
10758
|
+
if (envImageModel) {
|
|
10759
|
+
config.defaultImageModel = envImageModel;
|
|
10760
|
+
}
|
|
10748
10761
|
const envScreenshotsDir = process.env["TESTERS_SCREENSHOTS_DIR"];
|
|
10749
10762
|
if (envScreenshotsDir) {
|
|
10750
10763
|
config.screenshots.dir = envScreenshotsDir;
|
|
@@ -10765,7 +10778,7 @@ function resolveModel(nameOrId) {
|
|
|
10765
10778
|
}
|
|
10766
10779
|
return nameOrId;
|
|
10767
10780
|
}
|
|
10768
|
-
var CONFIG_DIR3, CONFIG_PATH2;
|
|
10781
|
+
var CONFIG_DIR3, CONFIG_PATH2, DEFAULT_IMAGE_MODEL = "gpt-image-2";
|
|
10769
10782
|
var init_config2 = __esm(() => {
|
|
10770
10783
|
init_types();
|
|
10771
10784
|
init_paths();
|
|
@@ -17243,6 +17256,7 @@ function buildSandboxPlan(workflow, execution, runOptions) {
|
|
|
17243
17256
|
remoteDir,
|
|
17244
17257
|
stateRemoteDir,
|
|
17245
17258
|
cleanup: execution.sandboxCleanup ?? "delete",
|
|
17259
|
+
syncStrategy: execution.sandboxSyncStrategy ?? "rsync",
|
|
17246
17260
|
timeoutMs: execution.timeoutMs,
|
|
17247
17261
|
env: execution.env,
|
|
17248
17262
|
command: buildSandboxCommand({
|
|
@@ -17305,7 +17319,8 @@ async function runViaSandbox(plan, dependencies) {
|
|
|
17305
17319
|
cleanup: plan.sandbox.cleanup,
|
|
17306
17320
|
upload: {
|
|
17307
17321
|
localDir: bundle.localDir,
|
|
17308
|
-
remoteDir: bundle.remoteDir
|
|
17322
|
+
remoteDir: bundle.remoteDir,
|
|
17323
|
+
syncStrategy: plan.sandbox.syncStrategy
|
|
17309
17324
|
}
|
|
17310
17325
|
});
|
|
17311
17326
|
const exitCode = raw.result.exit_code ?? raw.result.exitCode ?? 0;
|
package/dist/lib/config.d.ts
CHANGED
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,mBAAmB,CAAC;AAMpE,eAAO,MAAM,mBAAmB,gBAAgB,CAAC;AAEjD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAkBhD;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,aAAa,CA6D1C;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKrD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { runTestingWorkflow, type WorkflowRunOptions, type WorkflowRunnerDependencies } from "./workflow-runner.js";
|
|
2
|
+
import type { TestingWorkflow } from "../types/index.js";
|
|
3
|
+
export interface WorkflowFanoutOptions extends WorkflowRunOptions {
|
|
4
|
+
workflowIds?: string[];
|
|
5
|
+
projectId?: string;
|
|
6
|
+
tags?: string[];
|
|
7
|
+
includeDisabled?: boolean;
|
|
8
|
+
workers?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface WorkflowFanoutItem {
|
|
11
|
+
workflowId: string;
|
|
12
|
+
workflowName: string;
|
|
13
|
+
status: "dry-run" | "passed" | "failed";
|
|
14
|
+
sandboxId?: string;
|
|
15
|
+
sessionId?: string;
|
|
16
|
+
exitCode?: number;
|
|
17
|
+
stdout?: string;
|
|
18
|
+
stderr?: string;
|
|
19
|
+
error?: string;
|
|
20
|
+
plan?: Awaited<ReturnType<typeof runTestingWorkflow>>["plan"];
|
|
21
|
+
}
|
|
22
|
+
export interface WorkflowFanoutResult {
|
|
23
|
+
status: "passed" | "failed" | "dry-run";
|
|
24
|
+
workers: number;
|
|
25
|
+
total: number;
|
|
26
|
+
passed: number;
|
|
27
|
+
failed: number;
|
|
28
|
+
items: WorkflowFanoutItem[];
|
|
29
|
+
}
|
|
30
|
+
export interface WorkflowFanoutDependencies extends WorkflowRunnerDependencies {
|
|
31
|
+
runTestingWorkflow?: typeof runTestingWorkflow;
|
|
32
|
+
}
|
|
33
|
+
export declare function normalizeFanoutWorkerCount(value: number | undefined): number;
|
|
34
|
+
export declare function resolveWorkflowFanoutSelection(options: Pick<WorkflowFanoutOptions, "workflowIds" | "projectId" | "tags" | "includeDisabled">): TestingWorkflow[];
|
|
35
|
+
export declare function runWorkflowFanout(options: WorkflowFanoutOptions, dependencies?: WorkflowFanoutDependencies): Promise<WorkflowFanoutResult>;
|
|
36
|
+
//# sourceMappingURL=workflow-fanout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-fanout.d.ts","sourceRoot":"","sources":["../../src/lib/workflow-fanout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,KAAK,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AACpH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,WAAW,qBAAsB,SAAQ,kBAAkB;IAC/D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,kBAAkB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,0BAA2B,SAAQ,0BAA0B;IAC5E,kBAAkB,CAAC,EAAE,OAAO,kBAAkB,CAAC;CAChD;AASD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAM5E;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,aAAa,GAAG,WAAW,GAAG,MAAM,GAAG,iBAAiB,CAAC,GAAG,eAAe,EAAE,CA8BhK;AAuBD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,qBAAqB,EAC9B,YAAY,GAAE,0BAA+B,GAC5C,OAAO,CAAC,oBAAoB,CAAC,CAyD/B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { runByFilter, type RunOptions } from "./runner.js";
|
|
2
|
-
import type { Result, Run, TestingWorkflow, WorkflowSandboxCleanup } from "../types/index.js";
|
|
2
|
+
import type { Result, Run, TestingWorkflow, WorkflowSandboxCleanup, WorkflowSandboxSyncStrategy } from "../types/index.js";
|
|
3
3
|
export interface WorkflowRunOptions {
|
|
4
4
|
url: string;
|
|
5
5
|
model?: string;
|
|
@@ -16,6 +16,7 @@ export interface WorkflowSandboxPlan {
|
|
|
16
16
|
stateRemoteDir: string;
|
|
17
17
|
command: string;
|
|
18
18
|
cleanup: WorkflowSandboxCleanup;
|
|
19
|
+
syncStrategy: WorkflowSandboxSyncStrategy;
|
|
19
20
|
timeoutMs?: number;
|
|
20
21
|
env?: Record<string, string>;
|
|
21
22
|
}
|
|
@@ -71,6 +72,7 @@ export interface WorkflowSandboxesRuntime {
|
|
|
71
72
|
upload: {
|
|
72
73
|
localDir: string;
|
|
73
74
|
remoteDir: string;
|
|
75
|
+
syncStrategy?: WorkflowSandboxSyncStrategy;
|
|
74
76
|
};
|
|
75
77
|
cleanup?: WorkflowSandboxCleanup;
|
|
76
78
|
onStdout?: (data: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-runner.d.ts","sourceRoot":"","sources":["../../src/lib/workflow-runner.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EACV,MAAM,EACN,GAAG,EACH,eAAe,EAEf,sBAAsB,
|
|
1
|
+
{"version":3,"file":"workflow-runner.d.ts","sourceRoot":"","sources":["../../src/lib/workflow-runner.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/index.js
CHANGED
|
@@ -52,7 +52,7 @@ var package_default;
|
|
|
52
52
|
var init_package = __esm(() => {
|
|
53
53
|
package_default = {
|
|
54
54
|
name: "@hasna/testers",
|
|
55
|
-
version: "0.0.
|
|
55
|
+
version: "0.0.43",
|
|
56
56
|
description: "AI-powered QA testing CLI \u2014 spawns cheap AI agents to test web apps with headless browsers",
|
|
57
57
|
type: "module",
|
|
58
58
|
main: "dist/index.js",
|
|
@@ -98,7 +98,7 @@ var init_package = __esm(() => {
|
|
|
98
98
|
"@hasna/cloud": "^0.1.24",
|
|
99
99
|
"@hasna/contacts": "^0.6.8",
|
|
100
100
|
"@hasna/projects": "^0.1.42",
|
|
101
|
-
"@hasna/sandboxes": "^0.1.
|
|
101
|
+
"@hasna/sandboxes": "^0.1.28",
|
|
102
102
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
103
103
|
ai: "^6.0.175",
|
|
104
104
|
chalk: "^5.4.1",
|
|
@@ -14156,6 +14156,11 @@ function cleanupValue(value) {
|
|
|
14156
14156
|
return value;
|
|
14157
14157
|
return;
|
|
14158
14158
|
}
|
|
14159
|
+
function syncStrategyValue(value) {
|
|
14160
|
+
if (value === "archive" || value === "rsync")
|
|
14161
|
+
return value;
|
|
14162
|
+
return;
|
|
14163
|
+
}
|
|
14159
14164
|
function workflowExecutionFromValue(value) {
|
|
14160
14165
|
const input = isRecord(value) ? value : {};
|
|
14161
14166
|
const rawTarget = stringValue(input["target"]) ?? "local";
|
|
@@ -14170,6 +14175,7 @@ function workflowExecutionFromValue(value) {
|
|
|
14170
14175
|
const sandboxImage = stringValue(input["sandboxImage"]) ?? stringValue(input["sandboxTemplate"]);
|
|
14171
14176
|
const sandboxRemoteDir = stringValue(input["sandboxRemoteDir"]);
|
|
14172
14177
|
const sandboxCleanup = cleanupValue(input["sandboxCleanup"]);
|
|
14178
|
+
const sandboxSyncStrategy = syncStrategyValue(input["sandboxSyncStrategy"]);
|
|
14173
14179
|
const setupCommand = stringValue(input["setupCommand"]);
|
|
14174
14180
|
const packageSpec = stringValue(input["packageSpec"]);
|
|
14175
14181
|
const timeoutMs = numberValue(input["timeoutMs"]);
|
|
@@ -14180,6 +14186,7 @@ function workflowExecutionFromValue(value) {
|
|
|
14180
14186
|
...sandboxImage ? { sandboxImage } : {},
|
|
14181
14187
|
...sandboxRemoteDir ? { sandboxRemoteDir } : {},
|
|
14182
14188
|
...sandboxCleanup ? { sandboxCleanup } : {},
|
|
14189
|
+
...sandboxSyncStrategy ? { sandboxSyncStrategy } : {},
|
|
14183
14190
|
...setupCommand ? { setupCommand } : {},
|
|
14184
14191
|
...packageSpec ? { packageSpec } : {},
|
|
14185
14192
|
...timeoutMs !== undefined ? { timeoutMs } : {},
|
|
@@ -16545,13 +16552,15 @@ var exports_config2 = {};
|
|
|
16545
16552
|
__export(exports_config2, {
|
|
16546
16553
|
resolveModel: () => resolveModel,
|
|
16547
16554
|
loadConfig: () => loadConfig,
|
|
16548
|
-
getDefaultConfig: () => getDefaultConfig
|
|
16555
|
+
getDefaultConfig: () => getDefaultConfig,
|
|
16556
|
+
DEFAULT_IMAGE_MODEL: () => DEFAULT_IMAGE_MODEL
|
|
16549
16557
|
});
|
|
16550
16558
|
import { join as join9 } from "path";
|
|
16551
16559
|
import { readFileSync as readFileSync2, existsSync as existsSync7 } from "fs";
|
|
16552
16560
|
function getDefaultConfig() {
|
|
16553
16561
|
return {
|
|
16554
16562
|
defaultModel: "claude-haiku-4-5-20251001",
|
|
16563
|
+
defaultImageModel: DEFAULT_IMAGE_MODEL,
|
|
16555
16564
|
models: { ...MODEL_MAP },
|
|
16556
16565
|
browser: {
|
|
16557
16566
|
headless: true,
|
|
@@ -16578,6 +16587,7 @@ function loadConfig() {
|
|
|
16578
16587
|
}
|
|
16579
16588
|
const config = {
|
|
16580
16589
|
defaultModel: fileConfig.defaultModel ?? defaults2.defaultModel,
|
|
16590
|
+
defaultImageModel: fileConfig.defaultImageModel ?? defaults2.defaultImageModel,
|
|
16581
16591
|
models: fileConfig.models ? { ...defaults2.models, ...fileConfig.models } : { ...defaults2.models },
|
|
16582
16592
|
browser: fileConfig.browser ? { ...defaults2.browser, ...fileConfig.browser } : { ...defaults2.browser },
|
|
16583
16593
|
screenshots: fileConfig.screenshots ? { ...defaults2.screenshots, ...fileConfig.screenshots } : { ...defaults2.screenshots },
|
|
@@ -16593,6 +16603,10 @@ function loadConfig() {
|
|
|
16593
16603
|
if (envModel) {
|
|
16594
16604
|
config.defaultModel = envModel;
|
|
16595
16605
|
}
|
|
16606
|
+
const envImageModel = process.env["TESTERS_IMAGE_MODEL"];
|
|
16607
|
+
if (envImageModel) {
|
|
16608
|
+
config.defaultImageModel = envImageModel;
|
|
16609
|
+
}
|
|
16596
16610
|
const envScreenshotsDir = process.env["TESTERS_SCREENSHOTS_DIR"];
|
|
16597
16611
|
if (envScreenshotsDir) {
|
|
16598
16612
|
config.screenshots.dir = envScreenshotsDir;
|
|
@@ -16613,7 +16627,7 @@ function resolveModel(nameOrId) {
|
|
|
16613
16627
|
}
|
|
16614
16628
|
return nameOrId;
|
|
16615
16629
|
}
|
|
16616
|
-
var CONFIG_DIR3, CONFIG_PATH2;
|
|
16630
|
+
var CONFIG_DIR3, CONFIG_PATH2, DEFAULT_IMAGE_MODEL = "gpt-image-2";
|
|
16617
16631
|
var init_config2 = __esm(() => {
|
|
16618
16632
|
init_types3();
|
|
16619
16633
|
init_paths();
|
|
@@ -23530,6 +23544,7 @@ function buildSandboxPlan(workflow, execution, runOptions) {
|
|
|
23530
23544
|
remoteDir,
|
|
23531
23545
|
stateRemoteDir,
|
|
23532
23546
|
cleanup: execution.sandboxCleanup ?? "delete",
|
|
23547
|
+
syncStrategy: execution.sandboxSyncStrategy ?? "rsync",
|
|
23533
23548
|
timeoutMs: execution.timeoutMs,
|
|
23534
23549
|
env: execution.env,
|
|
23535
23550
|
command: buildSandboxCommand({
|
|
@@ -23592,7 +23607,8 @@ async function runViaSandbox(plan, dependencies) {
|
|
|
23592
23607
|
cleanup: plan.sandbox.cleanup,
|
|
23593
23608
|
upload: {
|
|
23594
23609
|
localDir: bundle.localDir,
|
|
23595
|
-
remoteDir: bundle.remoteDir
|
|
23610
|
+
remoteDir: bundle.remoteDir,
|
|
23611
|
+
syncStrategy: plan.sandbox.syncStrategy
|
|
23596
23612
|
}
|
|
23597
23613
|
});
|
|
23598
23614
|
const exitCode = raw.result.exit_code ?? raw.result.exitCode ?? 0;
|
package/dist/server/index.js
CHANGED
|
@@ -4056,6 +4056,11 @@ function cleanupValue(value) {
|
|
|
4056
4056
|
return value;
|
|
4057
4057
|
return;
|
|
4058
4058
|
}
|
|
4059
|
+
function syncStrategyValue(value) {
|
|
4060
|
+
if (value === "archive" || value === "rsync")
|
|
4061
|
+
return value;
|
|
4062
|
+
return;
|
|
4063
|
+
}
|
|
4059
4064
|
function workflowExecutionFromValue(value) {
|
|
4060
4065
|
const input = isRecord(value) ? value : {};
|
|
4061
4066
|
const rawTarget = stringValue(input["target"]) ?? "local";
|
|
@@ -4070,6 +4075,7 @@ function workflowExecutionFromValue(value) {
|
|
|
4070
4075
|
const sandboxImage = stringValue(input["sandboxImage"]) ?? stringValue(input["sandboxTemplate"]);
|
|
4071
4076
|
const sandboxRemoteDir = stringValue(input["sandboxRemoteDir"]);
|
|
4072
4077
|
const sandboxCleanup = cleanupValue(input["sandboxCleanup"]);
|
|
4078
|
+
const sandboxSyncStrategy = syncStrategyValue(input["sandboxSyncStrategy"]);
|
|
4073
4079
|
const setupCommand = stringValue(input["setupCommand"]);
|
|
4074
4080
|
const packageSpec = stringValue(input["packageSpec"]);
|
|
4075
4081
|
const timeoutMs = numberValue(input["timeoutMs"]);
|
|
@@ -4080,6 +4086,7 @@ function workflowExecutionFromValue(value) {
|
|
|
4080
4086
|
...sandboxImage ? { sandboxImage } : {},
|
|
4081
4087
|
...sandboxRemoteDir ? { sandboxRemoteDir } : {},
|
|
4082
4088
|
...sandboxCleanup ? { sandboxCleanup } : {},
|
|
4089
|
+
...sandboxSyncStrategy ? { sandboxSyncStrategy } : {},
|
|
4083
4090
|
...setupCommand ? { setupCommand } : {},
|
|
4084
4091
|
...packageSpec ? { packageSpec } : {},
|
|
4085
4092
|
...timeoutMs !== undefined ? { timeoutMs } : {},
|
|
@@ -15270,6 +15277,7 @@ import { readFileSync as readFileSync2, existsSync as existsSync6 } from "fs";
|
|
|
15270
15277
|
function getDefaultConfig() {
|
|
15271
15278
|
return {
|
|
15272
15279
|
defaultModel: "claude-haiku-4-5-20251001",
|
|
15280
|
+
defaultImageModel: DEFAULT_IMAGE_MODEL,
|
|
15273
15281
|
models: { ...MODEL_MAP },
|
|
15274
15282
|
browser: {
|
|
15275
15283
|
headless: true,
|
|
@@ -15296,6 +15304,7 @@ function loadConfig() {
|
|
|
15296
15304
|
}
|
|
15297
15305
|
const config = {
|
|
15298
15306
|
defaultModel: fileConfig.defaultModel ?? defaults2.defaultModel,
|
|
15307
|
+
defaultImageModel: fileConfig.defaultImageModel ?? defaults2.defaultImageModel,
|
|
15299
15308
|
models: fileConfig.models ? { ...defaults2.models, ...fileConfig.models } : { ...defaults2.models },
|
|
15300
15309
|
browser: fileConfig.browser ? { ...defaults2.browser, ...fileConfig.browser } : { ...defaults2.browser },
|
|
15301
15310
|
screenshots: fileConfig.screenshots ? { ...defaults2.screenshots, ...fileConfig.screenshots } : { ...defaults2.screenshots },
|
|
@@ -15311,6 +15320,10 @@ function loadConfig() {
|
|
|
15311
15320
|
if (envModel) {
|
|
15312
15321
|
config.defaultModel = envModel;
|
|
15313
15322
|
}
|
|
15323
|
+
const envImageModel = process.env["TESTERS_IMAGE_MODEL"];
|
|
15324
|
+
if (envImageModel) {
|
|
15325
|
+
config.defaultImageModel = envImageModel;
|
|
15326
|
+
}
|
|
15314
15327
|
const envScreenshotsDir = process.env["TESTERS_SCREENSHOTS_DIR"];
|
|
15315
15328
|
if (envScreenshotsDir) {
|
|
15316
15329
|
config.screenshots.dir = envScreenshotsDir;
|
|
@@ -15325,7 +15338,7 @@ function loadConfig() {
|
|
|
15325
15338
|
}
|
|
15326
15339
|
return config;
|
|
15327
15340
|
}
|
|
15328
|
-
var CONFIG_DIR3, CONFIG_PATH2;
|
|
15341
|
+
var CONFIG_DIR3, CONFIG_PATH2, DEFAULT_IMAGE_MODEL = "gpt-image-2";
|
|
15329
15342
|
var init_config2 = __esm(() => {
|
|
15330
15343
|
init_types2();
|
|
15331
15344
|
init_paths();
|
|
@@ -46910,7 +46923,7 @@ import { join as join14 } from "path";
|
|
|
46910
46923
|
// package.json
|
|
46911
46924
|
var package_default = {
|
|
46912
46925
|
name: "@hasna/testers",
|
|
46913
|
-
version: "0.0.
|
|
46926
|
+
version: "0.0.43",
|
|
46914
46927
|
description: "AI-powered QA testing CLI \u2014 spawns cheap AI agents to test web apps with headless browsers",
|
|
46915
46928
|
type: "module",
|
|
46916
46929
|
main: "dist/index.js",
|
|
@@ -46956,7 +46969,7 @@ var package_default = {
|
|
|
46956
46969
|
"@hasna/cloud": "^0.1.24",
|
|
46957
46970
|
"@hasna/contacts": "^0.6.8",
|
|
46958
46971
|
"@hasna/projects": "^0.1.42",
|
|
46959
|
-
"@hasna/sandboxes": "^0.1.
|
|
46972
|
+
"@hasna/sandboxes": "^0.1.28",
|
|
46960
46973
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
46961
46974
|
ai: "^6.0.175",
|
|
46962
46975
|
chalk: "^5.4.1",
|
|
@@ -51359,6 +51372,7 @@ function buildSandboxPlan(workflow, execution, runOptions) {
|
|
|
51359
51372
|
remoteDir,
|
|
51360
51373
|
stateRemoteDir,
|
|
51361
51374
|
cleanup: execution.sandboxCleanup ?? "delete",
|
|
51375
|
+
syncStrategy: execution.sandboxSyncStrategy ?? "rsync",
|
|
51362
51376
|
timeoutMs: execution.timeoutMs,
|
|
51363
51377
|
env: execution.env,
|
|
51364
51378
|
command: buildSandboxCommand({
|
|
@@ -51421,7 +51435,8 @@ async function runViaSandbox(plan, dependencies) {
|
|
|
51421
51435
|
cleanup: plan.sandbox.cleanup,
|
|
51422
51436
|
upload: {
|
|
51423
51437
|
localDir: bundle.localDir,
|
|
51424
|
-
remoteDir: bundle.remoteDir
|
|
51438
|
+
remoteDir: bundle.remoteDir,
|
|
51439
|
+
syncStrategy: plan.sandbox.syncStrategy
|
|
51425
51440
|
}
|
|
51426
51441
|
});
|
|
51427
51442
|
const exitCode = raw.result.exit_code ?? raw.result.exitCode ?? 0;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export type AuthStrategy = "form-login" | "bearer" | "cookie" | "oauth" | "custo
|
|
|
8
8
|
export type WorkflowExecutionTarget = "local" | "sandbox";
|
|
9
9
|
export type LegacyWorkflowExecutionTarget = WorkflowExecutionTarget | "connector:e2b";
|
|
10
10
|
export type WorkflowSandboxCleanup = "delete" | "stop" | "keep";
|
|
11
|
+
export type WorkflowSandboxSyncStrategy = "archive" | "rsync";
|
|
11
12
|
export type AssertionType = "visible" | "not_visible" | "text_contains" | "text_equals" | "element_count" | "no_console_errors" | "url_contains" | "title_contains" | "no_a11y_violations" | "cookie_exists" | "cookie_value" | "cookie_not_exists" | "local_storage_exists" | "local_storage_value" | "local_storage_not_exists" | "session_storage_value" | "session_storage_not_exists";
|
|
12
13
|
export interface Assertion {
|
|
13
14
|
type: AssertionType;
|
|
@@ -388,6 +389,7 @@ export interface WorkflowExecutionConfig {
|
|
|
388
389
|
sandboxImage?: string;
|
|
389
390
|
sandboxRemoteDir?: string;
|
|
390
391
|
sandboxCleanup?: WorkflowSandboxCleanup;
|
|
392
|
+
sandboxSyncStrategy?: WorkflowSandboxSyncStrategy;
|
|
391
393
|
setupCommand?: string;
|
|
392
394
|
packageSpec?: string;
|
|
393
395
|
timeoutMs?: number;
|
|
@@ -402,6 +404,7 @@ export interface WorkflowExecutionInput {
|
|
|
402
404
|
sandboxTemplate?: string;
|
|
403
405
|
sandboxRemoteDir?: string;
|
|
404
406
|
sandboxCleanup?: WorkflowSandboxCleanup;
|
|
407
|
+
sandboxSyncStrategy?: WorkflowSandboxSyncStrategy;
|
|
405
408
|
setupCommand?: string;
|
|
406
409
|
packageSpec?: string;
|
|
407
410
|
timeoutMs?: number;
|
|
@@ -509,6 +512,7 @@ export interface ScreenshotConfig {
|
|
|
509
512
|
}
|
|
510
513
|
export interface TestersConfig {
|
|
511
514
|
defaultModel: string;
|
|
515
|
+
defaultImageModel: string;
|
|
512
516
|
models: Record<ModelPreset, string>;
|
|
513
517
|
browser: BrowserConfig;
|
|
514
518
|
screenshots: ScreenshotConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hasna/testers",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.43",
|
|
4
4
|
"description": "AI-powered QA testing CLI — spawns cheap AI agents to test web apps with headless browsers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"@hasna/cloud": "^0.1.24",
|
|
47
47
|
"@hasna/contacts": "^0.6.8",
|
|
48
48
|
"@hasna/projects": "^0.1.42",
|
|
49
|
-
"@hasna/sandboxes": "^0.1.
|
|
49
|
+
"@hasna/sandboxes": "^0.1.28",
|
|
50
50
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
51
51
|
"ai": "^6.0.175",
|
|
52
52
|
"chalk": "^5.4.1",
|