@validate.qa/runner 1.0.59 → 1.0.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +109 -3
- package/dist/cli.mjs +109 -3
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -73342,6 +73342,58 @@ var require_verification_inbox = __commonJS({
|
|
|
73342
73342
|
}
|
|
73343
73343
|
});
|
|
73344
73344
|
|
|
73345
|
+
// ../runner-core/dist/services/brokered-inbox-reader.js
|
|
73346
|
+
var require_brokered_inbox_reader = __commonJS({
|
|
73347
|
+
"../runner-core/dist/services/brokered-inbox-reader.js"(exports2) {
|
|
73348
|
+
"use strict";
|
|
73349
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
73350
|
+
exports2.BrokeredInboxReader = void 0;
|
|
73351
|
+
var BROKERED_WAIT_CHUNK_MS = 55e3;
|
|
73352
|
+
var BrokeredInboxReader = class {
|
|
73353
|
+
transport;
|
|
73354
|
+
constructor(transport) {
|
|
73355
|
+
this.transport = transport;
|
|
73356
|
+
}
|
|
73357
|
+
async getUidWatermark() {
|
|
73358
|
+
const value = await this.transport("getUidWatermark", {});
|
|
73359
|
+
const record = value ?? {};
|
|
73360
|
+
return {
|
|
73361
|
+
uid: typeof record.uid === "number" ? record.uid : 0,
|
|
73362
|
+
uidValidity: typeof record.uidValidity === "number" ? record.uidValidity : 0
|
|
73363
|
+
};
|
|
73364
|
+
}
|
|
73365
|
+
async search(opts) {
|
|
73366
|
+
const value = await this.transport("search", { opts });
|
|
73367
|
+
return Array.isArray(value) ? value : [];
|
|
73368
|
+
}
|
|
73369
|
+
async getLatest(opts) {
|
|
73370
|
+
const value = await this.transport("getLatest", { opts });
|
|
73371
|
+
return value ?? null;
|
|
73372
|
+
}
|
|
73373
|
+
async getById(uid, address, altAddress, freshness) {
|
|
73374
|
+
const value = await this.transport("getById", { uid, address, altAddress, freshness });
|
|
73375
|
+
return value ?? null;
|
|
73376
|
+
}
|
|
73377
|
+
async waitForMessage(opts) {
|
|
73378
|
+
const totalBudgetMs = Math.max(opts.maxWaitMs ?? 9e4, 1e3);
|
|
73379
|
+
const deadline = Date.now() + totalBudgetMs;
|
|
73380
|
+
for (; ; ) {
|
|
73381
|
+
const remaining = deadline - Date.now();
|
|
73382
|
+
if (remaining <= 0)
|
|
73383
|
+
return null;
|
|
73384
|
+
const chunkMs = Math.min(remaining, BROKERED_WAIT_CHUNK_MS);
|
|
73385
|
+
const value = await this.transport("waitForMessage", {
|
|
73386
|
+
opts: { ...opts, maxWaitMs: chunkMs }
|
|
73387
|
+
});
|
|
73388
|
+
if (value)
|
|
73389
|
+
return value;
|
|
73390
|
+
}
|
|
73391
|
+
}
|
|
73392
|
+
};
|
|
73393
|
+
exports2.BrokeredInboxReader = BrokeredInboxReader;
|
|
73394
|
+
}
|
|
73395
|
+
});
|
|
73396
|
+
|
|
73345
73397
|
// ../runner-core/dist/services/inbox-tools.js
|
|
73346
73398
|
var require_inbox_tools = __commonJS({
|
|
73347
73399
|
"../runner-core/dist/services/inbox-tools.js"(exports2) {
|
|
@@ -74051,6 +74103,7 @@ var require_mobile_explorer = __commonJS({
|
|
|
74051
74103
|
var mobile_auth_coverage_js_1 = require_mobile_auth_coverage();
|
|
74052
74104
|
var mobile_driver_errors_js_1 = require_mobile_driver_errors();
|
|
74053
74105
|
var verification_inbox_js_1 = require_verification_inbox();
|
|
74106
|
+
var brokered_inbox_reader_js_1 = require_brokered_inbox_reader();
|
|
74054
74107
|
var inbox_tools_js_1 = require_inbox_tools();
|
|
74055
74108
|
var mobile_discovery_auth_js_1 = require_mobile_discovery_auth();
|
|
74056
74109
|
var MAX_MOBILE_ITERATIONS_SURVEY = 40;
|
|
@@ -75372,6 +75425,23 @@ ${existingScreens.slice(0, 100).map((s) => `- ${s.screenId}${s.name ? ` "${s.nam
|
|
|
75372
75425
|
log: (line) => log2(line)
|
|
75373
75426
|
});
|
|
75374
75427
|
log2("Verification inbox ENABLED for registration \u2014 monitored identity provisioned.");
|
|
75428
|
+
} else if (registerRequested && ctx.inboxBroker?.address && ctx.inboxBrokerRead) {
|
|
75429
|
+
inboxState = (0, inbox_tools_js_1.createInboxRunState)({ address: ctx.inboxBroker.address }, {
|
|
75430
|
+
tagSeed: targetAppId ?? ctx.projectId,
|
|
75431
|
+
projectScope: ctx.projectId
|
|
75432
|
+
});
|
|
75433
|
+
inboxReader = new brokered_inbox_reader_js_1.BrokeredInboxReader(ctx.inboxBrokerRead);
|
|
75434
|
+
await (0, inbox_tools_js_1.applyAndPersistInboxIdentity)({
|
|
75435
|
+
variableContext: ctx.variableContext,
|
|
75436
|
+
registration: {
|
|
75437
|
+
email: inboxState.email,
|
|
75438
|
+
legacyEmail: inboxState.legacyEmail,
|
|
75439
|
+
passwordKey: inboxState.passwordKey ?? "TEST_USER_PASSWORD"
|
|
75440
|
+
},
|
|
75441
|
+
persist: ctx.onCredentialUpdate,
|
|
75442
|
+
log: (line) => log2(line)
|
|
75443
|
+
});
|
|
75444
|
+
log2("Verification inbox ENABLED via server broker \u2014 monitored identity provisioned (IMAP credentials stay server-side).");
|
|
75375
75445
|
} else if (registerRequested) {
|
|
75376
75446
|
log2("Registration requested without a verification inbox \u2014 preserving the seeded credential identity and reporting any verification wall as unauthenticated.");
|
|
75377
75447
|
}
|
|
@@ -84286,12 +84356,14 @@ ${args.directive}`);
|
|
|
84286
84356
|
{ role: "user", content: userContent }
|
|
84287
84357
|
];
|
|
84288
84358
|
let content;
|
|
84359
|
+
let finishReason;
|
|
84289
84360
|
try {
|
|
84290
84361
|
const response = await (0, ai_retry_js_1.resilientAICall)((signal, arm) => (0, ai_queue_js_1.queuedAICall)(() => {
|
|
84291
84362
|
arm();
|
|
84292
84363
|
return aiClient.chat.completions.create({ model, messages, max_tokens: 8e3, temperature: 0.1 }, { signal });
|
|
84293
84364
|
}), { label: `mobile-heal-attempt-${attempt}`, deferTimeoutUntilArmed: true });
|
|
84294
84365
|
content = response?.choices?.[0]?.message?.content ?? "";
|
|
84366
|
+
finishReason = response?.choices?.[0]?.finish_reason ?? void 0;
|
|
84295
84367
|
} catch {
|
|
84296
84368
|
options.onProgress?.(`Phase 1 attempt ${attempt}: model call failed in transport \u2014 granting a recovery turn`);
|
|
84297
84369
|
markRecoverableTurn();
|
|
@@ -84301,7 +84373,7 @@ ${args.directive}`);
|
|
|
84301
84373
|
aiResponseCount += 1;
|
|
84302
84374
|
const parsed = parseHealVerdict(content);
|
|
84303
84375
|
if (!parsed) {
|
|
84304
|
-
options.onProgress?.(`Phase 1 attempt ${attempt}: response was not a valid verdict \u2014 granting a recovery turn`);
|
|
84376
|
+
options.onProgress?.(`Phase 1 attempt ${attempt}: response was not a valid verdict (${content.length} chars, finish=${finishReason ?? "unknown"}) \u2014 granting a recovery turn`);
|
|
84305
84377
|
markRecoverableTurn();
|
|
84306
84378
|
pendingDirective = "Your last response was not valid JSON matching the verdict schema. Return exactly one JSON verdict object.";
|
|
84307
84379
|
continue;
|
|
@@ -349952,7 +350024,7 @@ var require_dist2 = __commonJS({
|
|
|
349952
350024
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
349953
350025
|
exports2.resolveRefFromSnapshot = exports2.replayAuthRecipeIntoBrowser = exports2.runRegisterCaptureRun = exports2.runLoginCaptureRun = exports2.filterLoginCaptureCredentials = exports2.buildLoginCaptureCredentials = exports2.isReservedRunnerEnvVar = exports2.RESERVED_RUNNER_ENV_VARS = exports2.AUTH_MARKER_VERSION = exports2.buildHealAuthStamp = exports2.extractAuthRegion = exports2.upsertAuthBlock = exports2.buildAuthRecipe = exports2.commandToReplayStep = exports2.buildReplayPlan = exports2.absoluteRoute = exports2.renderReplaySettleArrow = exports2.renderReplayClickArrow = exports2.renderAuthFn = exports2.filterFeatureGroupsToPathScope = exports2.isAuthFlowRoute = exports2.deriveSurveyPathScope = exports2.canonicalizeRoute = exports2.codeUsesInboxHelper = exports2.codeUsesTestInboxIdentity = exports2.codeSelfProvisionsRegistration = exports2.executeGrokPerBatchHeal = exports2.executeGrokPerTestHeal = exports2.headerVal = exports2.classifyAuthType = exports2.isTextExcerptable = exports2.isStaticAssetByExt = exports2.isApiCall = exports2.buildApiCallSummary = exports2.computeMobileHealOutcome = exports2.detectMobileStepSecretLeak = exports2.redactMobileSecretsFromText = exports2.MOBILE_LIVE_HEAL_SYSTEM_PROMPT = exports2.MOBILE_SCRIPT_HEAL_SYSTEM_PROMPT = exports2.executeMobileLiveHeal = exports2.executeMobileTestWithHealing = exports2.executeMobileScriptDrivenHeal = exports2.prepareMobileScenarioAppState = exports2.runMobileGeneratePhase = exports2.runMobileAIPlanner = exports2.buildMobileSiteMap = exports2.formatMobileEvidenceForPlanner = exports2.MOBILE_SCENARIO_SYSTEM_PROMPT = exports2.MOBILE_SURVEY_SYSTEM_PROMPT = exports2.runMobileExplorePhase = void 0;
|
|
349954
350026
|
exports2.MAX_MANIFEST_FILES = exports2.toDiffSummary = exports2.isLikelyTestFile = exports2.sanitizeRepoRelPath = exports2.sha256Hex = exports2.hashFiles = exports2.enumerateTestFiles = exports2.buildNextManifest = exports2.detectRepoSwitch = exports2.classifyImportDiff = exports2.parseImportManifest = exports2.validateAuthoredMobileTest = exports2.buildMobileRepoAuthorSystemRules = exports2.buildMobileRepoAuthorKickoff = exports2.buildMobileRepoAuthorContractMd = exports2.REPO_ANALYSIS_SCHEMA_VERSION = exports2.validateSourceEndpoints = exports2.validateAuthoredTest = exports2.validateRepoMapFile = exports2.validateRepoMemoryFile = exports2.buildTestingStandardsSection = exports2.buildRepoAuthorSystemRules = exports2.buildRepoAuthorKickoff = exports2.buildRepoAuthorContractMd = exports2.buildRepoMapSystemRules = exports2.buildRepoMapKickoff = exports2.buildRepoMapContractMd = exports2.buildRepoMemorySystemRules = exports2.buildRepoMemoryKickoff = exports2.buildRepoMemoryContractMd = exports2.runRepoAnalysisOnRunner = exports2.MOBILE_IMPORT_SCHEMA_VERSION = exports2.validateImportedMobileTest = exports2.buildMobileImportSystemRules = exports2.buildMobileImportKickoff = exports2.buildMobileImportContractMd = exports2.IMPORT_SCHEMA_VERSION = exports2.validateImportResultFile = exports2.validateImportedTest = exports2.buildImportSystemRules = exports2.buildImportKickoff = exports2.buildImportContractMd = exports2.MAX_ARCHIVE_BYTES = exports2.isUnsafeEntryName = exports2.extractZipSafely = exports2.downloadArchiveCapped = exports2.detectArchiveKind = exports2.acquireRepoForImport = exports2.runFrameworkImportOnRunner = exports2.getAgenticEngine = void 0;
|
|
349955
|
-
exports2.UNSUPPORTED_RENDERER_PREFIX = exports2.UnsupportedRendererError = exports2.buildCanvasModeAuthoringAddendum = exports2.buildUnsupportedRendererMessage = exports2.modelSupportsVision = exports2.decideCanvasStrategy = exports2.decideAppRenderType = exports2.detectCanvasApp = exports2.detectRateLimitBlock = exports2.isSafeCanonicalRedirect = exports2.resolveBaseUrlPreflight = exports2.checkBaseUrlRedirect = exports2.stripJsonFences = exports2.scrubCredentials = exports2.withAIRetry = exports2.snapshotMatchingChildren = exports2.findNewChromiumChildPid = exports2.killProcessTree = exports2.gracefulCloseWithTreeKill = exports2.liveBrowserRegistry = exports2.REPO_SWITCH_REMOVED_FRACTION = void 0;
|
|
350027
|
+
exports2.BrokeredInboxReader = exports2.applyPlusTag = exports2.deriveProjectInboxTag = exports2.deriveInboxTag = exports2.loadVerificationInboxConfig = exports2.VerificationInboxReader = exports2.UNSUPPORTED_RENDERER_PREFIX = exports2.UnsupportedRendererError = exports2.buildCanvasModeAuthoringAddendum = exports2.buildUnsupportedRendererMessage = exports2.modelSupportsVision = exports2.decideCanvasStrategy = exports2.decideAppRenderType = exports2.detectCanvasApp = exports2.detectRateLimitBlock = exports2.isSafeCanonicalRedirect = exports2.resolveBaseUrlPreflight = exports2.checkBaseUrlRedirect = exports2.stripJsonFences = exports2.scrubCredentials = exports2.withAIRetry = exports2.snapshotMatchingChildren = exports2.findNewChromiumChildPid = exports2.killProcessTree = exports2.gracefulCloseWithTreeKill = exports2.liveBrowserRegistry = exports2.REPO_SWITCH_REMOVED_FRACTION = void 0;
|
|
349956
350028
|
__exportStar(require_ai_provider(), exports2);
|
|
349957
350029
|
__exportStar(require_mobile_types(), exports2);
|
|
349958
350030
|
__exportStar(require_mobile_source_parser(), exports2);
|
|
@@ -350374,6 +350446,26 @@ var require_dist2 = __commonJS({
|
|
|
350374
350446
|
Object.defineProperty(exports2, "UNSUPPORTED_RENDERER_PREFIX", { enumerable: true, get: function() {
|
|
350375
350447
|
return canvas_detector_js_1.UNSUPPORTED_RENDERER_PREFIX;
|
|
350376
350448
|
} });
|
|
350449
|
+
var verification_inbox_js_1 = require_verification_inbox();
|
|
350450
|
+
Object.defineProperty(exports2, "VerificationInboxReader", { enumerable: true, get: function() {
|
|
350451
|
+
return verification_inbox_js_1.VerificationInboxReader;
|
|
350452
|
+
} });
|
|
350453
|
+
Object.defineProperty(exports2, "loadVerificationInboxConfig", { enumerable: true, get: function() {
|
|
350454
|
+
return verification_inbox_js_1.loadVerificationInboxConfig;
|
|
350455
|
+
} });
|
|
350456
|
+
Object.defineProperty(exports2, "deriveInboxTag", { enumerable: true, get: function() {
|
|
350457
|
+
return verification_inbox_js_1.deriveInboxTag;
|
|
350458
|
+
} });
|
|
350459
|
+
Object.defineProperty(exports2, "deriveProjectInboxTag", { enumerable: true, get: function() {
|
|
350460
|
+
return verification_inbox_js_1.deriveProjectInboxTag;
|
|
350461
|
+
} });
|
|
350462
|
+
Object.defineProperty(exports2, "applyPlusTag", { enumerable: true, get: function() {
|
|
350463
|
+
return verification_inbox_js_1.applyPlusTag;
|
|
350464
|
+
} });
|
|
350465
|
+
var brokered_inbox_reader_js_1 = require_brokered_inbox_reader();
|
|
350466
|
+
Object.defineProperty(exports2, "BrokeredInboxReader", { enumerable: true, get: function() {
|
|
350467
|
+
return brokered_inbox_reader_js_1.BrokeredInboxReader;
|
|
350468
|
+
} });
|
|
350377
350469
|
}
|
|
350378
350470
|
});
|
|
350379
350471
|
|
|
@@ -350382,7 +350474,7 @@ var require_package4 = __commonJS({
|
|
|
350382
350474
|
"package.json"(exports2, module2) {
|
|
350383
350475
|
module2.exports = {
|
|
350384
350476
|
name: "@validate.qa/runner",
|
|
350385
|
-
version: "1.0.
|
|
350477
|
+
version: "1.0.60",
|
|
350386
350478
|
description: "validate local test runner - execute Playwright tests on your machine, connected to validate.qa cloud.",
|
|
350387
350479
|
bin: {
|
|
350388
350480
|
"validate-runner": "dist/cli.js"
|
|
@@ -358915,6 +359007,20 @@ ${finalVerifyResult.logs ?? ""}`;
|
|
|
358915
359007
|
{ ...input, actor: "ai-explorer" },
|
|
358916
359008
|
run2.claimEpoch
|
|
358917
359009
|
);
|
|
359010
|
+
if (ctx.inboxBroker?.address) {
|
|
359011
|
+
ctx.inboxBrokerRead = async (op, payload) => {
|
|
359012
|
+
const res = await fetch(`${opts.serverUrl}/api/runner/inbox/read`, {
|
|
359013
|
+
method: "POST",
|
|
359014
|
+
headers: { ...headers, "Content-Type": "application/json" },
|
|
359015
|
+
body: JSON.stringify({ runId: run2.runId, op, payload })
|
|
359016
|
+
});
|
|
359017
|
+
if (!res.ok) {
|
|
359018
|
+
const detail = await res.text().catch(() => "");
|
|
359019
|
+
throw new Error(`inbox broker ${op} failed: HTTP ${res.status}${detail ? ` \u2014 ${detail.slice(0, 200)}` : ""}`);
|
|
359020
|
+
}
|
|
359021
|
+
return (await res.json()).value ?? null;
|
|
359022
|
+
};
|
|
359023
|
+
}
|
|
358918
359024
|
log.info(`Discovery (${ctx.mode}) on ${ctx.baseUrl}`);
|
|
358919
359025
|
const { push: pushAudit, drain: drainAudit } = createAuditFlusher(
|
|
358920
359026
|
`${opts.serverUrl}/api/runner/runs/${run2.runId}/ai-audit-batch`,
|
package/dist/cli.mjs
CHANGED
|
@@ -73347,6 +73347,58 @@ var require_verification_inbox = __commonJS({
|
|
|
73347
73347
|
}
|
|
73348
73348
|
});
|
|
73349
73349
|
|
|
73350
|
+
// ../runner-core/dist/services/brokered-inbox-reader.js
|
|
73351
|
+
var require_brokered_inbox_reader = __commonJS({
|
|
73352
|
+
"../runner-core/dist/services/brokered-inbox-reader.js"(exports) {
|
|
73353
|
+
"use strict";
|
|
73354
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
73355
|
+
exports.BrokeredInboxReader = void 0;
|
|
73356
|
+
var BROKERED_WAIT_CHUNK_MS = 55e3;
|
|
73357
|
+
var BrokeredInboxReader = class {
|
|
73358
|
+
transport;
|
|
73359
|
+
constructor(transport) {
|
|
73360
|
+
this.transport = transport;
|
|
73361
|
+
}
|
|
73362
|
+
async getUidWatermark() {
|
|
73363
|
+
const value = await this.transport("getUidWatermark", {});
|
|
73364
|
+
const record = value ?? {};
|
|
73365
|
+
return {
|
|
73366
|
+
uid: typeof record.uid === "number" ? record.uid : 0,
|
|
73367
|
+
uidValidity: typeof record.uidValidity === "number" ? record.uidValidity : 0
|
|
73368
|
+
};
|
|
73369
|
+
}
|
|
73370
|
+
async search(opts) {
|
|
73371
|
+
const value = await this.transport("search", { opts });
|
|
73372
|
+
return Array.isArray(value) ? value : [];
|
|
73373
|
+
}
|
|
73374
|
+
async getLatest(opts) {
|
|
73375
|
+
const value = await this.transport("getLatest", { opts });
|
|
73376
|
+
return value ?? null;
|
|
73377
|
+
}
|
|
73378
|
+
async getById(uid, address, altAddress, freshness) {
|
|
73379
|
+
const value = await this.transport("getById", { uid, address, altAddress, freshness });
|
|
73380
|
+
return value ?? null;
|
|
73381
|
+
}
|
|
73382
|
+
async waitForMessage(opts) {
|
|
73383
|
+
const totalBudgetMs = Math.max(opts.maxWaitMs ?? 9e4, 1e3);
|
|
73384
|
+
const deadline = Date.now() + totalBudgetMs;
|
|
73385
|
+
for (; ; ) {
|
|
73386
|
+
const remaining = deadline - Date.now();
|
|
73387
|
+
if (remaining <= 0)
|
|
73388
|
+
return null;
|
|
73389
|
+
const chunkMs = Math.min(remaining, BROKERED_WAIT_CHUNK_MS);
|
|
73390
|
+
const value = await this.transport("waitForMessage", {
|
|
73391
|
+
opts: { ...opts, maxWaitMs: chunkMs }
|
|
73392
|
+
});
|
|
73393
|
+
if (value)
|
|
73394
|
+
return value;
|
|
73395
|
+
}
|
|
73396
|
+
}
|
|
73397
|
+
};
|
|
73398
|
+
exports.BrokeredInboxReader = BrokeredInboxReader;
|
|
73399
|
+
}
|
|
73400
|
+
});
|
|
73401
|
+
|
|
73350
73402
|
// ../runner-core/dist/services/inbox-tools.js
|
|
73351
73403
|
var require_inbox_tools = __commonJS({
|
|
73352
73404
|
"../runner-core/dist/services/inbox-tools.js"(exports) {
|
|
@@ -74056,6 +74108,7 @@ var require_mobile_explorer = __commonJS({
|
|
|
74056
74108
|
var mobile_auth_coverage_js_1 = require_mobile_auth_coverage();
|
|
74057
74109
|
var mobile_driver_errors_js_1 = require_mobile_driver_errors();
|
|
74058
74110
|
var verification_inbox_js_1 = require_verification_inbox();
|
|
74111
|
+
var brokered_inbox_reader_js_1 = require_brokered_inbox_reader();
|
|
74059
74112
|
var inbox_tools_js_1 = require_inbox_tools();
|
|
74060
74113
|
var mobile_discovery_auth_js_1 = require_mobile_discovery_auth();
|
|
74061
74114
|
var MAX_MOBILE_ITERATIONS_SURVEY = 40;
|
|
@@ -75377,6 +75430,23 @@ ${existingScreens.slice(0, 100).map((s) => `- ${s.screenId}${s.name ? ` "${s.nam
|
|
|
75377
75430
|
log: (line) => log2(line)
|
|
75378
75431
|
});
|
|
75379
75432
|
log2("Verification inbox ENABLED for registration \u2014 monitored identity provisioned.");
|
|
75433
|
+
} else if (registerRequested && ctx.inboxBroker?.address && ctx.inboxBrokerRead) {
|
|
75434
|
+
inboxState = (0, inbox_tools_js_1.createInboxRunState)({ address: ctx.inboxBroker.address }, {
|
|
75435
|
+
tagSeed: targetAppId ?? ctx.projectId,
|
|
75436
|
+
projectScope: ctx.projectId
|
|
75437
|
+
});
|
|
75438
|
+
inboxReader = new brokered_inbox_reader_js_1.BrokeredInboxReader(ctx.inboxBrokerRead);
|
|
75439
|
+
await (0, inbox_tools_js_1.applyAndPersistInboxIdentity)({
|
|
75440
|
+
variableContext: ctx.variableContext,
|
|
75441
|
+
registration: {
|
|
75442
|
+
email: inboxState.email,
|
|
75443
|
+
legacyEmail: inboxState.legacyEmail,
|
|
75444
|
+
passwordKey: inboxState.passwordKey ?? "TEST_USER_PASSWORD"
|
|
75445
|
+
},
|
|
75446
|
+
persist: ctx.onCredentialUpdate,
|
|
75447
|
+
log: (line) => log2(line)
|
|
75448
|
+
});
|
|
75449
|
+
log2("Verification inbox ENABLED via server broker \u2014 monitored identity provisioned (IMAP credentials stay server-side).");
|
|
75380
75450
|
} else if (registerRequested) {
|
|
75381
75451
|
log2("Registration requested without a verification inbox \u2014 preserving the seeded credential identity and reporting any verification wall as unauthenticated.");
|
|
75382
75452
|
}
|
|
@@ -84291,12 +84361,14 @@ ${args.directive}`);
|
|
|
84291
84361
|
{ role: "user", content: userContent }
|
|
84292
84362
|
];
|
|
84293
84363
|
let content;
|
|
84364
|
+
let finishReason;
|
|
84294
84365
|
try {
|
|
84295
84366
|
const response = await (0, ai_retry_js_1.resilientAICall)((signal, arm) => (0, ai_queue_js_1.queuedAICall)(() => {
|
|
84296
84367
|
arm();
|
|
84297
84368
|
return aiClient.chat.completions.create({ model, messages, max_tokens: 8e3, temperature: 0.1 }, { signal });
|
|
84298
84369
|
}), { label: `mobile-heal-attempt-${attempt}`, deferTimeoutUntilArmed: true });
|
|
84299
84370
|
content = response?.choices?.[0]?.message?.content ?? "";
|
|
84371
|
+
finishReason = response?.choices?.[0]?.finish_reason ?? void 0;
|
|
84300
84372
|
} catch {
|
|
84301
84373
|
options.onProgress?.(`Phase 1 attempt ${attempt}: model call failed in transport \u2014 granting a recovery turn`);
|
|
84302
84374
|
markRecoverableTurn();
|
|
@@ -84306,7 +84378,7 @@ ${args.directive}`);
|
|
|
84306
84378
|
aiResponseCount += 1;
|
|
84307
84379
|
const parsed = parseHealVerdict(content);
|
|
84308
84380
|
if (!parsed) {
|
|
84309
|
-
options.onProgress?.(`Phase 1 attempt ${attempt}: response was not a valid verdict \u2014 granting a recovery turn`);
|
|
84381
|
+
options.onProgress?.(`Phase 1 attempt ${attempt}: response was not a valid verdict (${content.length} chars, finish=${finishReason ?? "unknown"}) \u2014 granting a recovery turn`);
|
|
84310
84382
|
markRecoverableTurn();
|
|
84311
84383
|
pendingDirective = "Your last response was not valid JSON matching the verdict schema. Return exactly one JSON verdict object.";
|
|
84312
84384
|
continue;
|
|
@@ -349957,7 +350029,7 @@ var require_dist2 = __commonJS({
|
|
|
349957
350029
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
349958
350030
|
exports.resolveRefFromSnapshot = exports.replayAuthRecipeIntoBrowser = exports.runRegisterCaptureRun = exports.runLoginCaptureRun = exports.filterLoginCaptureCredentials = exports.buildLoginCaptureCredentials = exports.isReservedRunnerEnvVar = exports.RESERVED_RUNNER_ENV_VARS = exports.AUTH_MARKER_VERSION = exports.buildHealAuthStamp = exports.extractAuthRegion = exports.upsertAuthBlock = exports.buildAuthRecipe = exports.commandToReplayStep = exports.buildReplayPlan = exports.absoluteRoute = exports.renderReplaySettleArrow = exports.renderReplayClickArrow = exports.renderAuthFn = exports.filterFeatureGroupsToPathScope = exports.isAuthFlowRoute = exports.deriveSurveyPathScope = exports.canonicalizeRoute = exports.codeUsesInboxHelper = exports.codeUsesTestInboxIdentity = exports.codeSelfProvisionsRegistration = exports.executeGrokPerBatchHeal = exports.executeGrokPerTestHeal = exports.headerVal = exports.classifyAuthType = exports.isTextExcerptable = exports.isStaticAssetByExt = exports.isApiCall = exports.buildApiCallSummary = exports.computeMobileHealOutcome = exports.detectMobileStepSecretLeak = exports.redactMobileSecretsFromText = exports.MOBILE_LIVE_HEAL_SYSTEM_PROMPT = exports.MOBILE_SCRIPT_HEAL_SYSTEM_PROMPT = exports.executeMobileLiveHeal = exports.executeMobileTestWithHealing = exports.executeMobileScriptDrivenHeal = exports.prepareMobileScenarioAppState = exports.runMobileGeneratePhase = exports.runMobileAIPlanner = exports.buildMobileSiteMap = exports.formatMobileEvidenceForPlanner = exports.MOBILE_SCENARIO_SYSTEM_PROMPT = exports.MOBILE_SURVEY_SYSTEM_PROMPT = exports.runMobileExplorePhase = void 0;
|
|
349959
350031
|
exports.MAX_MANIFEST_FILES = exports.toDiffSummary = exports.isLikelyTestFile = exports.sanitizeRepoRelPath = exports.sha256Hex = exports.hashFiles = exports.enumerateTestFiles = exports.buildNextManifest = exports.detectRepoSwitch = exports.classifyImportDiff = exports.parseImportManifest = exports.validateAuthoredMobileTest = exports.buildMobileRepoAuthorSystemRules = exports.buildMobileRepoAuthorKickoff = exports.buildMobileRepoAuthorContractMd = exports.REPO_ANALYSIS_SCHEMA_VERSION = exports.validateSourceEndpoints = exports.validateAuthoredTest = exports.validateRepoMapFile = exports.validateRepoMemoryFile = exports.buildTestingStandardsSection = exports.buildRepoAuthorSystemRules = exports.buildRepoAuthorKickoff = exports.buildRepoAuthorContractMd = exports.buildRepoMapSystemRules = exports.buildRepoMapKickoff = exports.buildRepoMapContractMd = exports.buildRepoMemorySystemRules = exports.buildRepoMemoryKickoff = exports.buildRepoMemoryContractMd = exports.runRepoAnalysisOnRunner = exports.MOBILE_IMPORT_SCHEMA_VERSION = exports.validateImportedMobileTest = exports.buildMobileImportSystemRules = exports.buildMobileImportKickoff = exports.buildMobileImportContractMd = exports.IMPORT_SCHEMA_VERSION = exports.validateImportResultFile = exports.validateImportedTest = exports.buildImportSystemRules = exports.buildImportKickoff = exports.buildImportContractMd = exports.MAX_ARCHIVE_BYTES = exports.isUnsafeEntryName = exports.extractZipSafely = exports.downloadArchiveCapped = exports.detectArchiveKind = exports.acquireRepoForImport = exports.runFrameworkImportOnRunner = exports.getAgenticEngine = void 0;
|
|
349960
|
-
exports.UNSUPPORTED_RENDERER_PREFIX = exports.UnsupportedRendererError = exports.buildCanvasModeAuthoringAddendum = exports.buildUnsupportedRendererMessage = exports.modelSupportsVision = exports.decideCanvasStrategy = exports.decideAppRenderType = exports.detectCanvasApp = exports.detectRateLimitBlock = exports.isSafeCanonicalRedirect = exports.resolveBaseUrlPreflight = exports.checkBaseUrlRedirect = exports.stripJsonFences = exports.scrubCredentials = exports.withAIRetry = exports.snapshotMatchingChildren = exports.findNewChromiumChildPid = exports.killProcessTree = exports.gracefulCloseWithTreeKill = exports.liveBrowserRegistry = exports.REPO_SWITCH_REMOVED_FRACTION = void 0;
|
|
350032
|
+
exports.BrokeredInboxReader = exports.applyPlusTag = exports.deriveProjectInboxTag = exports.deriveInboxTag = exports.loadVerificationInboxConfig = exports.VerificationInboxReader = exports.UNSUPPORTED_RENDERER_PREFIX = exports.UnsupportedRendererError = exports.buildCanvasModeAuthoringAddendum = exports.buildUnsupportedRendererMessage = exports.modelSupportsVision = exports.decideCanvasStrategy = exports.decideAppRenderType = exports.detectCanvasApp = exports.detectRateLimitBlock = exports.isSafeCanonicalRedirect = exports.resolveBaseUrlPreflight = exports.checkBaseUrlRedirect = exports.stripJsonFences = exports.scrubCredentials = exports.withAIRetry = exports.snapshotMatchingChildren = exports.findNewChromiumChildPid = exports.killProcessTree = exports.gracefulCloseWithTreeKill = exports.liveBrowserRegistry = exports.REPO_SWITCH_REMOVED_FRACTION = void 0;
|
|
349961
350033
|
__exportStar(require_ai_provider(), exports);
|
|
349962
350034
|
__exportStar(require_mobile_types(), exports);
|
|
349963
350035
|
__exportStar(require_mobile_source_parser(), exports);
|
|
@@ -350379,6 +350451,26 @@ var require_dist2 = __commonJS({
|
|
|
350379
350451
|
Object.defineProperty(exports, "UNSUPPORTED_RENDERER_PREFIX", { enumerable: true, get: function() {
|
|
350380
350452
|
return canvas_detector_js_1.UNSUPPORTED_RENDERER_PREFIX;
|
|
350381
350453
|
} });
|
|
350454
|
+
var verification_inbox_js_1 = require_verification_inbox();
|
|
350455
|
+
Object.defineProperty(exports, "VerificationInboxReader", { enumerable: true, get: function() {
|
|
350456
|
+
return verification_inbox_js_1.VerificationInboxReader;
|
|
350457
|
+
} });
|
|
350458
|
+
Object.defineProperty(exports, "loadVerificationInboxConfig", { enumerable: true, get: function() {
|
|
350459
|
+
return verification_inbox_js_1.loadVerificationInboxConfig;
|
|
350460
|
+
} });
|
|
350461
|
+
Object.defineProperty(exports, "deriveInboxTag", { enumerable: true, get: function() {
|
|
350462
|
+
return verification_inbox_js_1.deriveInboxTag;
|
|
350463
|
+
} });
|
|
350464
|
+
Object.defineProperty(exports, "deriveProjectInboxTag", { enumerable: true, get: function() {
|
|
350465
|
+
return verification_inbox_js_1.deriveProjectInboxTag;
|
|
350466
|
+
} });
|
|
350467
|
+
Object.defineProperty(exports, "applyPlusTag", { enumerable: true, get: function() {
|
|
350468
|
+
return verification_inbox_js_1.applyPlusTag;
|
|
350469
|
+
} });
|
|
350470
|
+
var brokered_inbox_reader_js_1 = require_brokered_inbox_reader();
|
|
350471
|
+
Object.defineProperty(exports, "BrokeredInboxReader", { enumerable: true, get: function() {
|
|
350472
|
+
return brokered_inbox_reader_js_1.BrokeredInboxReader;
|
|
350473
|
+
} });
|
|
350382
350474
|
}
|
|
350383
350475
|
});
|
|
350384
350476
|
|
|
@@ -350387,7 +350479,7 @@ var require_package4 = __commonJS({
|
|
|
350387
350479
|
"package.json"(exports, module) {
|
|
350388
350480
|
module.exports = {
|
|
350389
350481
|
name: "@validate.qa/runner",
|
|
350390
|
-
version: "1.0.
|
|
350482
|
+
version: "1.0.60",
|
|
350391
350483
|
description: "validate local test runner - execute Playwright tests on your machine, connected to validate.qa cloud.",
|
|
350392
350484
|
bin: {
|
|
350393
350485
|
"validate-runner": "dist/cli.js"
|
|
@@ -358923,6 +359015,20 @@ ${finalVerifyResult.logs ?? ""}`;
|
|
|
358923
359015
|
{ ...input, actor: "ai-explorer" },
|
|
358924
359016
|
run2.claimEpoch
|
|
358925
359017
|
);
|
|
359018
|
+
if (ctx.inboxBroker?.address) {
|
|
359019
|
+
ctx.inboxBrokerRead = async (op, payload) => {
|
|
359020
|
+
const res = await fetch(`${opts.serverUrl}/api/runner/inbox/read`, {
|
|
359021
|
+
method: "POST",
|
|
359022
|
+
headers: { ...headers, "Content-Type": "application/json" },
|
|
359023
|
+
body: JSON.stringify({ runId: run2.runId, op, payload })
|
|
359024
|
+
});
|
|
359025
|
+
if (!res.ok) {
|
|
359026
|
+
const detail = await res.text().catch(() => "");
|
|
359027
|
+
throw new Error(`inbox broker ${op} failed: HTTP ${res.status}${detail ? ` \u2014 ${detail.slice(0, 200)}` : ""}`);
|
|
359028
|
+
}
|
|
359029
|
+
return (await res.json()).value ?? null;
|
|
359030
|
+
};
|
|
359031
|
+
}
|
|
358926
359032
|
log.info(`Discovery (${ctx.mode}) on ${ctx.baseUrl}`);
|
|
358927
359033
|
const { push: pushAudit, drain: drainAudit } = createAuditFlusher(
|
|
358928
359034
|
`${opts.serverUrl}/api/runner/runs/${run2.runId}/ai-audit-batch`,
|
package/package.json
CHANGED