@hasna/testers 0.0.41 → 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 +344 -174
- package/dist/index.js +21 -3
- package/dist/lib/config.d.ts +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/persona-auth.d.ts +1 -0
- package/dist/lib/persona-auth.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 +25 -6
- package/dist/server/index.js +23 -5
- 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();
|
|
@@ -16940,6 +16953,9 @@ var init_secrets_resolver = () => {};
|
|
|
16940
16953
|
function isSessionCookie(cookieName) {
|
|
16941
16954
|
return !/(?:csrf|xsrf)/i.test(cookieName);
|
|
16942
16955
|
}
|
|
16956
|
+
function isPrimarySessionCookie(cookieName) {
|
|
16957
|
+
return isSessionCookie(cookieName) && !/refresh/i.test(cookieName);
|
|
16958
|
+
}
|
|
16943
16959
|
function getCookieExpires(cookie) {
|
|
16944
16960
|
if (typeof cookie.expires === "number" && Number.isFinite(cookie.expires)) {
|
|
16945
16961
|
return cookie.expires;
|
|
@@ -16954,7 +16970,7 @@ function hasFreshAuthCookies(persona) {
|
|
|
16954
16970
|
if (!persona.auth?.cookies?.length)
|
|
16955
16971
|
return false;
|
|
16956
16972
|
const cookies = persona.auth.cookies;
|
|
16957
|
-
const sessionCookies = cookies.filter((cookie) => ("name" in cookie) &&
|
|
16973
|
+
const sessionCookies = cookies.filter((cookie) => ("name" in cookie) && isPrimarySessionCookie(String(cookie.name)));
|
|
16958
16974
|
if (sessionCookies.length === 0) {
|
|
16959
16975
|
return false;
|
|
16960
16976
|
}
|
|
@@ -26998,6 +27014,178 @@ var init_workflows = __esm(() => {
|
|
|
26998
27014
|
DEFAULT_EXECUTION = { target: "local" };
|
|
26999
27015
|
});
|
|
27000
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
|
+
|
|
27001
27189
|
// src/lib/ci.ts
|
|
27002
27190
|
var exports_ci = {};
|
|
27003
27191
|
__export(exports_ci, {
|
|
@@ -59380,6 +59568,115 @@ var init_agents = __esm(() => {
|
|
|
59380
59568
|
init_database();
|
|
59381
59569
|
});
|
|
59382
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
|
+
|
|
59383
59680
|
// node_modules/@ai-sdk/provider/dist/index.mjs
|
|
59384
59681
|
function getErrorMessage(error) {
|
|
59385
59682
|
if (error == null) {
|
|
@@ -94037,7 +94334,7 @@ import chalk6 from "chalk";
|
|
|
94037
94334
|
// package.json
|
|
94038
94335
|
var package_default = {
|
|
94039
94336
|
name: "@hasna/testers",
|
|
94040
|
-
version: "0.0.
|
|
94337
|
+
version: "0.0.43",
|
|
94041
94338
|
description: "AI-powered QA testing CLI \u2014 spawns cheap AI agents to test web apps with headless browsers",
|
|
94042
94339
|
type: "module",
|
|
94043
94340
|
main: "dist/index.js",
|
|
@@ -94083,7 +94380,7 @@ var package_default = {
|
|
|
94083
94380
|
"@hasna/cloud": "^0.1.24",
|
|
94084
94381
|
"@hasna/contacts": "^0.6.8",
|
|
94085
94382
|
"@hasna/projects": "^0.1.42",
|
|
94086
|
-
"@hasna/sandboxes": "^0.1.
|
|
94383
|
+
"@hasna/sandboxes": "^0.1.28",
|
|
94087
94384
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
94088
94385
|
ai: "^6.0.175",
|
|
94089
94386
|
chalk: "^5.4.1",
|
|
@@ -96149,174 +96446,7 @@ function deleteAuthPreset(name) {
|
|
|
96149
96446
|
// src/cli/index.tsx
|
|
96150
96447
|
init_flows();
|
|
96151
96448
|
init_workflows();
|
|
96152
|
-
|
|
96153
|
-
// src/lib/workflow-runner.ts
|
|
96154
|
-
init_database();
|
|
96155
|
-
init_workflows();
|
|
96156
|
-
init_personas();
|
|
96157
|
-
init_runner();
|
|
96158
|
-
import { mkdtempSync, rmSync, writeFileSync as writeFileSync4 } from "fs";
|
|
96159
|
-
import { tmpdir } from "os";
|
|
96160
|
-
import { join as join16 } from "path";
|
|
96161
|
-
function buildWorkflowRunPlan(workflow, options) {
|
|
96162
|
-
const runOptions = {
|
|
96163
|
-
url: options.url,
|
|
96164
|
-
model: options.model,
|
|
96165
|
-
headed: options.headed,
|
|
96166
|
-
parallel: options.parallel,
|
|
96167
|
-
timeout: options.timeout ?? workflow.execution.timeoutMs,
|
|
96168
|
-
projectId: workflow.projectId ?? undefined,
|
|
96169
|
-
scenarioIds: workflow.scenarioFilter.scenarioIds,
|
|
96170
|
-
tags: workflow.scenarioFilter.tags,
|
|
96171
|
-
priority: workflow.scenarioFilter.priority,
|
|
96172
|
-
personaIds: workflow.personaIds.length > 0 ? workflow.personaIds : undefined
|
|
96173
|
-
};
|
|
96174
|
-
return {
|
|
96175
|
-
workflow,
|
|
96176
|
-
runOptions,
|
|
96177
|
-
sandbox: workflow.execution.target === "sandbox" ? buildSandboxPlan(workflow, workflow.execution, runOptions) : null
|
|
96178
|
-
};
|
|
96179
|
-
}
|
|
96180
|
-
async function runTestingWorkflow(workflowId, options, dependencies = {}) {
|
|
96181
|
-
const workflow = getTestingWorkflow(workflowId);
|
|
96182
|
-
if (!workflow)
|
|
96183
|
-
throw new Error(`Testing workflow not found: ${workflowId}`);
|
|
96184
|
-
if (!workflow.enabled)
|
|
96185
|
-
throw new Error(`Testing workflow is disabled: ${workflow.name}`);
|
|
96186
|
-
validatePersonaIds(workflow);
|
|
96187
|
-
const plan = buildWorkflowRunPlan(workflow, options);
|
|
96188
|
-
if (options.dryRun)
|
|
96189
|
-
return { run: null, results: [], plan };
|
|
96190
|
-
if (workflow.execution.target === "sandbox") {
|
|
96191
|
-
const sandboxResult = await runViaSandbox(plan, dependencies);
|
|
96192
|
-
return { run: null, results: [], plan, sandboxResult };
|
|
96193
|
-
}
|
|
96194
|
-
const runLocal = dependencies.runByFilter ?? runByFilter;
|
|
96195
|
-
const { run, results } = await runLocal(plan.runOptions);
|
|
96196
|
-
return { run, results, plan };
|
|
96197
|
-
}
|
|
96198
|
-
function createWorkflowDatabaseBundle(workflow, plan) {
|
|
96199
|
-
if (!plan.sandbox)
|
|
96200
|
-
throw new Error(`Workflow is not configured for sandbox execution: ${workflow.name}`);
|
|
96201
|
-
const localDir = mkdtempSync(join16(tmpdir(), `testers-workflow-${workflow.id.slice(0, 8)}-`));
|
|
96202
|
-
writeFileSync4(join16(localDir, "testers.db"), getDatabase().serialize());
|
|
96203
|
-
return {
|
|
96204
|
-
localDir,
|
|
96205
|
-
remoteDir: plan.sandbox.stateRemoteDir,
|
|
96206
|
-
cleanup: () => rmSync(localDir, { recursive: true, force: true })
|
|
96207
|
-
};
|
|
96208
|
-
}
|
|
96209
|
-
function validatePersonaIds(workflow) {
|
|
96210
|
-
for (const personaId of workflow.personaIds) {
|
|
96211
|
-
if (!getPersona(personaId)) {
|
|
96212
|
-
throw new Error(`Persona not found for workflow ${workflow.name}: ${personaId}`);
|
|
96213
|
-
}
|
|
96214
|
-
}
|
|
96215
|
-
}
|
|
96216
|
-
function buildSandboxPlan(workflow, execution, runOptions) {
|
|
96217
|
-
const remoteDir = execution.sandboxRemoteDir ?? `/tmp/testers-workflow-${workflow.id.slice(0, 8)}`;
|
|
96218
|
-
const stateRemoteDir = `${remoteDir.replace(/\/+$/, "")}/.testers-state`;
|
|
96219
|
-
return {
|
|
96220
|
-
provider: execution.provider,
|
|
96221
|
-
image: execution.sandboxImage,
|
|
96222
|
-
name: `testers-${workflow.id.slice(0, 8)}`,
|
|
96223
|
-
remoteDir,
|
|
96224
|
-
stateRemoteDir,
|
|
96225
|
-
cleanup: execution.sandboxCleanup ?? "delete",
|
|
96226
|
-
timeoutMs: execution.timeoutMs,
|
|
96227
|
-
env: execution.env,
|
|
96228
|
-
command: buildSandboxCommand({
|
|
96229
|
-
runOptions,
|
|
96230
|
-
remoteDir,
|
|
96231
|
-
dbPath: `${stateRemoteDir}/testers.db`,
|
|
96232
|
-
setupCommand: execution.setupCommand,
|
|
96233
|
-
packageSpec: execution.packageSpec ?? "@hasna/testers"
|
|
96234
|
-
})
|
|
96235
|
-
};
|
|
96236
|
-
}
|
|
96237
|
-
function buildSandboxCommand(input) {
|
|
96238
|
-
const args = [
|
|
96239
|
-
"bunx",
|
|
96240
|
-
input.packageSpec,
|
|
96241
|
-
"run",
|
|
96242
|
-
input.runOptions.url,
|
|
96243
|
-
...input.runOptions.scenarioIds?.length ? ["--scenario", input.runOptions.scenarioIds.join(",")] : [],
|
|
96244
|
-
...input.runOptions.tags?.length ? input.runOptions.tags.flatMap((tag) => ["--tag", tag]) : [],
|
|
96245
|
-
...input.runOptions.priority ? ["--priority", input.runOptions.priority] : [],
|
|
96246
|
-
...input.runOptions.projectId ? ["--project", input.runOptions.projectId] : [],
|
|
96247
|
-
...input.runOptions.model ? ["--model", input.runOptions.model] : [],
|
|
96248
|
-
...input.runOptions.headed ? ["--headed"] : [],
|
|
96249
|
-
...input.runOptions.parallel ? ["--parallel", String(input.runOptions.parallel)] : [],
|
|
96250
|
-
...input.runOptions.timeout ? ["--timeout", String(input.runOptions.timeout)] : [],
|
|
96251
|
-
...input.runOptions.personaIds?.length ? ["--persona", input.runOptions.personaIds.join(",")] : [],
|
|
96252
|
-
"--no-auto-generate",
|
|
96253
|
-
"--json"
|
|
96254
|
-
];
|
|
96255
|
-
return [
|
|
96256
|
-
"set -euo pipefail",
|
|
96257
|
-
`mkdir -p ${shellQuote(input.remoteDir)}`,
|
|
96258
|
-
`cd ${shellQuote(input.remoteDir)}`,
|
|
96259
|
-
input.setupCommand,
|
|
96260
|
-
`HASNA_TESTERS_DB_PATH=${shellQuote(input.dbPath)} ${args.map(shellQuote).join(" ")}`
|
|
96261
|
-
].filter(Boolean).join(`
|
|
96262
|
-
`);
|
|
96263
|
-
}
|
|
96264
|
-
async function runViaSandbox(plan, dependencies) {
|
|
96265
|
-
if (!plan.sandbox)
|
|
96266
|
-
throw new Error("Workflow does not have a sandbox plan");
|
|
96267
|
-
const sandboxes = await resolveSandboxesRuntime(dependencies);
|
|
96268
|
-
const createBundle = dependencies.createDatabaseBundle ?? createWorkflowDatabaseBundle;
|
|
96269
|
-
const bundle = createBundle(plan.workflow, plan);
|
|
96270
|
-
try {
|
|
96271
|
-
const raw = await sandboxes.runCommandInSandbox({
|
|
96272
|
-
command: plan.sandbox.command,
|
|
96273
|
-
provider: plan.sandbox.provider,
|
|
96274
|
-
name: plan.sandbox.name,
|
|
96275
|
-
image: plan.sandbox.image,
|
|
96276
|
-
sandboxTimeout: plan.sandbox.timeoutMs,
|
|
96277
|
-
commandTimeoutMs: plan.sandbox.timeoutMs,
|
|
96278
|
-
projectId: plan.workflow.projectId ?? undefined,
|
|
96279
|
-
config: {
|
|
96280
|
-
source: "testers",
|
|
96281
|
-
workflowId: plan.workflow.id,
|
|
96282
|
-
workflowName: plan.workflow.name
|
|
96283
|
-
},
|
|
96284
|
-
sandboxEnvVars: plan.sandbox.env,
|
|
96285
|
-
cleanup: plan.sandbox.cleanup,
|
|
96286
|
-
upload: {
|
|
96287
|
-
localDir: bundle.localDir,
|
|
96288
|
-
remoteDir: bundle.remoteDir
|
|
96289
|
-
}
|
|
96290
|
-
});
|
|
96291
|
-
const exitCode = raw.result.exit_code ?? raw.result.exitCode ?? 0;
|
|
96292
|
-
const stdout = raw.result.stdout ?? "";
|
|
96293
|
-
const stderr = raw.result.stderr ?? "";
|
|
96294
|
-
if (exitCode !== 0) {
|
|
96295
|
-
throw new Error(`Sandbox workflow execution failed (${exitCode}): ${stderr || stdout}`);
|
|
96296
|
-
}
|
|
96297
|
-
return {
|
|
96298
|
-
sandboxId: raw.sandbox.id,
|
|
96299
|
-
sessionId: raw.session.id,
|
|
96300
|
-
exitCode,
|
|
96301
|
-
stdout,
|
|
96302
|
-
stderr,
|
|
96303
|
-
cleanup: raw.cleanup
|
|
96304
|
-
};
|
|
96305
|
-
} finally {
|
|
96306
|
-
bundle.cleanup?.();
|
|
96307
|
-
}
|
|
96308
|
-
}
|
|
96309
|
-
async function resolveSandboxesRuntime(dependencies) {
|
|
96310
|
-
if (dependencies.sandboxes)
|
|
96311
|
-
return dependencies.sandboxes;
|
|
96312
|
-
if (dependencies.createSandboxesSDK)
|
|
96313
|
-
return dependencies.createSandboxesSDK();
|
|
96314
|
-
const mod = await import("@hasna/sandboxes");
|
|
96315
|
-
return mod.createSandboxesSDK();
|
|
96316
|
-
}
|
|
96317
|
-
function shellQuote(value) {
|
|
96318
|
-
return `'${value.replaceAll("'", `'"'"'`)}'`;
|
|
96319
|
-
}
|
|
96449
|
+
init_workflow_runner();
|
|
96320
96450
|
|
|
96321
96451
|
// src/db/environments.ts
|
|
96322
96452
|
init_database();
|
|
@@ -98347,6 +98477,7 @@ program2.command("status").description("Show database and auth status").action((
|
|
|
98347
98477
|
log(` ANTHROPIC_API_KEY: ${hasApiKey ? chalk6.green("set") : chalk6.red("not set")}`);
|
|
98348
98478
|
log(` Database: ${dbPath}`);
|
|
98349
98479
|
log(` Default model: ${config2.defaultModel}`);
|
|
98480
|
+
log(` Image model: ${config2.defaultImageModel}`);
|
|
98350
98481
|
log(` Screenshots dir: ${config2.screenshots.dir}`);
|
|
98351
98482
|
log("");
|
|
98352
98483
|
} catch (error40) {
|
|
@@ -100684,7 +100815,7 @@ workflowCmd.command("create <name>").description("Save a reusable testing workfl
|
|
|
100684
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) => {
|
|
100685
100816
|
acc.push(val);
|
|
100686
100817
|
return acc;
|
|
100687
|
-
}, []).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) => {
|
|
100688
100819
|
try {
|
|
100689
100820
|
const workflow = createTestingWorkflow({
|
|
100690
100821
|
name: name21,
|
|
@@ -100707,6 +100838,7 @@ workflowCmd.command("create <name>").description("Save a reusable testing workfl
|
|
|
100707
100838
|
sandboxImage: opts.sandboxImage ?? opts.e2bTemplate,
|
|
100708
100839
|
sandboxRemoteDir: opts.sandboxRemoteDir,
|
|
100709
100840
|
sandboxCleanup: opts.sandboxCleanup,
|
|
100841
|
+
sandboxSyncStrategy: opts.sandboxSync,
|
|
100710
100842
|
setupCommand: opts.sandboxSetupCommand,
|
|
100711
100843
|
packageSpec: opts.sandboxPackage,
|
|
100712
100844
|
timeoutMs: opts.timeout ? parseInt(opts.timeout, 10) : undefined
|
|
@@ -100775,7 +100907,7 @@ workflowCmd.command("run <id>").description("Run a saved testing workflow").requ
|
|
|
100775
100907
|
timeout: opts.timeout ? parseInt(opts.timeout, 10) : undefined,
|
|
100776
100908
|
dryRun: opts.dryRun
|
|
100777
100909
|
});
|
|
100778
|
-
if (opts.json || opts.dryRun || output.
|
|
100910
|
+
if (opts.json || opts.dryRun || output.sandboxResult) {
|
|
100779
100911
|
log(JSON.stringify(output, null, 2));
|
|
100780
100912
|
return;
|
|
100781
100913
|
}
|
|
@@ -100786,6 +100918,44 @@ workflowCmd.command("run <id>").description("Run a saved testing workflow").requ
|
|
|
100786
100918
|
process.exit(1);
|
|
100787
100919
|
}
|
|
100788
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
|
+
});
|
|
100789
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) => {
|
|
100790
100960
|
try {
|
|
100791
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();
|
|
@@ -15499,6 +15512,9 @@ var COOKIE_MAX_AGE_MS = 60 * 60 * 1000;
|
|
|
15499
15512
|
function isSessionCookie(cookieName) {
|
|
15500
15513
|
return !/(?:csrf|xsrf)/i.test(cookieName);
|
|
15501
15514
|
}
|
|
15515
|
+
function isPrimarySessionCookie(cookieName) {
|
|
15516
|
+
return isSessionCookie(cookieName) && !/refresh/i.test(cookieName);
|
|
15517
|
+
}
|
|
15502
15518
|
function getCookieExpires(cookie) {
|
|
15503
15519
|
if (typeof cookie.expires === "number" && Number.isFinite(cookie.expires)) {
|
|
15504
15520
|
return cookie.expires;
|
|
@@ -15513,7 +15529,7 @@ function hasFreshAuthCookies(persona) {
|
|
|
15513
15529
|
if (!persona.auth?.cookies?.length)
|
|
15514
15530
|
return false;
|
|
15515
15531
|
const cookies = persona.auth.cookies;
|
|
15516
|
-
const sessionCookies = cookies.filter((cookie) => ("name" in cookie) &&
|
|
15532
|
+
const sessionCookies = cookies.filter((cookie) => ("name" in cookie) && isPrimarySessionCookie(String(cookie.name)));
|
|
15517
15533
|
if (sessionCookies.length === 0) {
|
|
15518
15534
|
return false;
|
|
15519
15535
|
}
|
|
@@ -17240,6 +17256,7 @@ function buildSandboxPlan(workflow, execution, runOptions) {
|
|
|
17240
17256
|
remoteDir,
|
|
17241
17257
|
stateRemoteDir,
|
|
17242
17258
|
cleanup: execution.sandboxCleanup ?? "delete",
|
|
17259
|
+
syncStrategy: execution.sandboxSyncStrategy ?? "rsync",
|
|
17243
17260
|
timeoutMs: execution.timeoutMs,
|
|
17244
17261
|
env: execution.env,
|
|
17245
17262
|
command: buildSandboxCommand({
|
|
@@ -17302,7 +17319,8 @@ async function runViaSandbox(plan, dependencies) {
|
|
|
17302
17319
|
cleanup: plan.sandbox.cleanup,
|
|
17303
17320
|
upload: {
|
|
17304
17321
|
localDir: bundle.localDir,
|
|
17305
|
-
remoteDir: bundle.remoteDir
|
|
17322
|
+
remoteDir: bundle.remoteDir,
|
|
17323
|
+
syncStrategy: plan.sandbox.syncStrategy
|
|
17306
17324
|
}
|
|
17307
17325
|
});
|
|
17308
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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Page } from "playwright";
|
|
2
2
|
import type { Persona } from "../types/index.js";
|
|
3
3
|
export declare function isSessionCookie(cookieName: string): boolean;
|
|
4
|
+
export declare function isPrimarySessionCookie(cookieName: string): boolean;
|
|
4
5
|
export interface LoginResult {
|
|
5
6
|
success: boolean;
|
|
6
7
|
method: "cookies" | "login" | "none";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persona-auth.d.ts","sourceRoot":"","sources":["../../src/lib/persona-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAMjD,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAkBD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAsB7D;AA2ND;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACvG,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,CAAC,CAgCtB;AAED;;;;;;;;;GASG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,CAAC,CAsBtB"}
|
|
1
|
+
{"version":3,"file":"persona-auth.d.ts","sourceRoot":"","sources":["../../src/lib/persona-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAMjD,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAElE;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAkBD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAsB7D;AA2ND;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACvG,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,CAAC,CAgCtB;AAED;;;;;;;;;GASG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,CAAC,CAsBtB"}
|
|
@@ -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();
|
|
@@ -20048,6 +20062,9 @@ var init_secrets_resolver = () => {};
|
|
|
20048
20062
|
function isSessionCookie(cookieName) {
|
|
20049
20063
|
return !/(?:csrf|xsrf)/i.test(cookieName);
|
|
20050
20064
|
}
|
|
20065
|
+
function isPrimarySessionCookie(cookieName) {
|
|
20066
|
+
return isSessionCookie(cookieName) && !/refresh/i.test(cookieName);
|
|
20067
|
+
}
|
|
20051
20068
|
function getCookieExpires(cookie) {
|
|
20052
20069
|
if (typeof cookie.expires === "number" && Number.isFinite(cookie.expires)) {
|
|
20053
20070
|
return cookie.expires;
|
|
@@ -20062,7 +20079,7 @@ function hasFreshAuthCookies(persona) {
|
|
|
20062
20079
|
if (!persona.auth?.cookies?.length)
|
|
20063
20080
|
return false;
|
|
20064
20081
|
const cookies = persona.auth.cookies;
|
|
20065
|
-
const sessionCookies = cookies.filter((cookie) => ("name" in cookie) &&
|
|
20082
|
+
const sessionCookies = cookies.filter((cookie) => ("name" in cookie) && isPrimarySessionCookie(String(cookie.name)));
|
|
20066
20083
|
if (sessionCookies.length === 0) {
|
|
20067
20084
|
return false;
|
|
20068
20085
|
}
|
|
@@ -23527,6 +23544,7 @@ function buildSandboxPlan(workflow, execution, runOptions) {
|
|
|
23527
23544
|
remoteDir,
|
|
23528
23545
|
stateRemoteDir,
|
|
23529
23546
|
cleanup: execution.sandboxCleanup ?? "delete",
|
|
23547
|
+
syncStrategy: execution.sandboxSyncStrategy ?? "rsync",
|
|
23530
23548
|
timeoutMs: execution.timeoutMs,
|
|
23531
23549
|
env: execution.env,
|
|
23532
23550
|
command: buildSandboxCommand({
|
|
@@ -23589,7 +23607,8 @@ async function runViaSandbox(plan, dependencies) {
|
|
|
23589
23607
|
cleanup: plan.sandbox.cleanup,
|
|
23590
23608
|
upload: {
|
|
23591
23609
|
localDir: bundle.localDir,
|
|
23592
|
-
remoteDir: bundle.remoteDir
|
|
23610
|
+
remoteDir: bundle.remoteDir,
|
|
23611
|
+
syncStrategy: plan.sandbox.syncStrategy
|
|
23593
23612
|
}
|
|
23594
23613
|
});
|
|
23595
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",
|
|
@@ -48543,6 +48556,9 @@ var COOKIE_MAX_AGE_MS = 60 * 60 * 1000;
|
|
|
48543
48556
|
function isSessionCookie(cookieName) {
|
|
48544
48557
|
return !/(?:csrf|xsrf)/i.test(cookieName);
|
|
48545
48558
|
}
|
|
48559
|
+
function isPrimarySessionCookie(cookieName) {
|
|
48560
|
+
return isSessionCookie(cookieName) && !/refresh/i.test(cookieName);
|
|
48561
|
+
}
|
|
48546
48562
|
function getCookieExpires(cookie) {
|
|
48547
48563
|
if (typeof cookie.expires === "number" && Number.isFinite(cookie.expires)) {
|
|
48548
48564
|
return cookie.expires;
|
|
@@ -48557,7 +48573,7 @@ function hasFreshAuthCookies(persona) {
|
|
|
48557
48573
|
if (!persona.auth?.cookies?.length)
|
|
48558
48574
|
return false;
|
|
48559
48575
|
const cookies = persona.auth.cookies;
|
|
48560
|
-
const sessionCookies = cookies.filter((cookie) => ("name" in cookie) &&
|
|
48576
|
+
const sessionCookies = cookies.filter((cookie) => ("name" in cookie) && isPrimarySessionCookie(String(cookie.name)));
|
|
48561
48577
|
if (sessionCookies.length === 0) {
|
|
48562
48578
|
return false;
|
|
48563
48579
|
}
|
|
@@ -51356,6 +51372,7 @@ function buildSandboxPlan(workflow, execution, runOptions) {
|
|
|
51356
51372
|
remoteDir,
|
|
51357
51373
|
stateRemoteDir,
|
|
51358
51374
|
cleanup: execution.sandboxCleanup ?? "delete",
|
|
51375
|
+
syncStrategy: execution.sandboxSyncStrategy ?? "rsync",
|
|
51359
51376
|
timeoutMs: execution.timeoutMs,
|
|
51360
51377
|
env: execution.env,
|
|
51361
51378
|
command: buildSandboxCommand({
|
|
@@ -51418,7 +51435,8 @@ async function runViaSandbox(plan, dependencies) {
|
|
|
51418
51435
|
cleanup: plan.sandbox.cleanup,
|
|
51419
51436
|
upload: {
|
|
51420
51437
|
localDir: bundle.localDir,
|
|
51421
|
-
remoteDir: bundle.remoteDir
|
|
51438
|
+
remoteDir: bundle.remoteDir,
|
|
51439
|
+
syncStrategy: plan.sandbox.syncStrategy
|
|
51422
51440
|
}
|
|
51423
51441
|
});
|
|
51424
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",
|