@nuanu-ai/agentbrowse 0.2.11 → 0.2.13
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 +5 -0
- package/dist/agentpay-stagehand-llm.d.ts +16 -0
- package/dist/agentpay-stagehand-llm.d.ts.map +1 -1
- package/dist/agentpay-stagehand-llm.js +35 -10
- package/dist/commands/act.d.ts.map +1 -1
- package/dist/commands/act.js +16 -15
- package/dist/commands/action-acceptance.d.ts +1 -0
- package/dist/commands/action-acceptance.d.ts.map +1 -1
- package/dist/commands/action-acceptance.js +77 -1
- package/dist/commands/extract-snapshot-sanitizer.d.ts +2 -0
- package/dist/commands/extract-snapshot-sanitizer.d.ts.map +1 -0
- package/dist/commands/extract-snapshot-sanitizer.js +65 -0
- package/dist/commands/extract-stagehand-executor.d.ts.map +1 -1
- package/dist/commands/extract-stagehand-executor.js +33 -3
- package/dist/commands/extract.d.ts.map +1 -1
- package/dist/commands/extract.js +29 -0
- package/dist/commands/launch.js +0 -7
- package/dist/commands/observe-projection.d.ts +1 -3
- package/dist/commands/observe-projection.d.ts.map +1 -1
- package/dist/commands/observe-projection.js +110 -3
- package/dist/commands/observe.d.ts.map +1 -1
- package/dist/commands/observe.js +28 -11
- package/dist/playwright-runtime.d.ts +3 -1
- package/dist/playwright-runtime.d.ts.map +1 -1
- package/dist/playwright-runtime.js +42 -2
- package/dist/secrets/fill-ordering.d.ts +1 -2
- package/dist/secrets/fill-ordering.d.ts.map +1 -1
- package/dist/secrets/fill-ordering.js +0 -3
- package/dist/secrets/form-matcher.d.ts.map +1 -1
- package/dist/secrets/form-matcher.js +0 -9
- package/dist/secrets/types.d.ts +0 -9
- package/dist/secrets/types.d.ts.map +1 -1
- package/dist/solver/browser-launcher.d.ts.map +1 -1
- package/dist/solver/browser-launcher.js +492 -55
- package/dist/solver/captcha-detector.d.ts.map +1 -1
- package/dist/solver/captcha-detector.js +187 -12
- package/dist/solver/captcha-runtime.d.ts.map +1 -1
- package/dist/solver/captcha-runtime.js +8 -0
- package/dist/solver/captcha-solver.d.ts +11 -1
- package/dist/solver/captcha-solver.d.ts.map +1 -1
- package/dist/solver/captcha-solver.js +11 -4
- package/dist/solver/turnstile-challenge.d.ts +3 -0
- package/dist/solver/turnstile-challenge.d.ts.map +1 -0
- package/dist/solver/turnstile-challenge.js +173 -0
- package/dist/solver/types.d.ts +10 -8
- package/dist/solver/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/secrets/request-guidance.d.ts +0 -24
- package/dist/secrets/request-guidance.d.ts.map +0 -1
- package/dist/secrets/request-guidance.js +0 -142
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
const PAYMENT_CARD_CORE_KEYS = new Set([
|
|
2
|
-
'pan',
|
|
3
|
-
'exp_month',
|
|
4
|
-
'exp_year',
|
|
5
|
-
'cvv',
|
|
6
|
-
]);
|
|
7
|
-
const HIGH_SIGNAL_IDENTITY_KEYS = new Set([
|
|
8
|
-
'document_number',
|
|
9
|
-
'date_of_birth',
|
|
10
|
-
'issue_date',
|
|
11
|
-
'expiry_date',
|
|
12
|
-
'issuing_country',
|
|
13
|
-
]);
|
|
14
|
-
const IMMEDIATE_HINT = 'This secret is likely needed now.';
|
|
15
|
-
const DEFER_HINT = 'Hold off on requesting this secret for now.';
|
|
16
|
-
const DEFER_RECHECK = 'Re-check only if submit or validation explicitly points back to this form.';
|
|
17
|
-
function humanizeFieldKey(fieldKey) {
|
|
18
|
-
return fieldKey.replace(/_/g, ' ');
|
|
19
|
-
}
|
|
20
|
-
function labelForField(field, target) {
|
|
21
|
-
return target?.displayLabel ?? target?.label ?? field.label ?? humanizeFieldKey(field.fieldKey);
|
|
22
|
-
}
|
|
23
|
-
function unique(values) {
|
|
24
|
-
return [...new Set(values)];
|
|
25
|
-
}
|
|
26
|
-
function collectVisibleFieldEvidence(fields, targetByRef) {
|
|
27
|
-
const labels = unique(fields
|
|
28
|
-
.map((field) => labelForField(field, targetByRef.get(field.targetRef)))
|
|
29
|
-
.filter((value) => value.length > 0));
|
|
30
|
-
if (labels.length === 0) {
|
|
31
|
-
return 'Matched fields are visible on the page.';
|
|
32
|
-
}
|
|
33
|
-
return `Visible matched fields: ${labels.join(', ')}.`;
|
|
34
|
-
}
|
|
35
|
-
function collectBlockingValidationEvidence(fields, targetByRef) {
|
|
36
|
-
const evidence = [];
|
|
37
|
-
const seenTargets = new Set();
|
|
38
|
-
for (const field of fields) {
|
|
39
|
-
if (seenTargets.has(field.targetRef)) {
|
|
40
|
-
continue;
|
|
41
|
-
}
|
|
42
|
-
seenTargets.add(field.targetRef);
|
|
43
|
-
const target = targetByRef.get(field.targetRef);
|
|
44
|
-
const validation = target?.validation;
|
|
45
|
-
if (!validation) {
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
const label = labelForField(field, target);
|
|
49
|
-
if (validation.message) {
|
|
50
|
-
evidence.push(`"${label}" already shows validation: ${validation.message}`);
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
|
-
if (validation.invalid) {
|
|
54
|
-
evidence.push(`"${label}" is currently marked invalid.`);
|
|
55
|
-
continue;
|
|
56
|
-
}
|
|
57
|
-
if (validation.errorStyling) {
|
|
58
|
-
evidence.push(`"${label}" is already styled like an error.`);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return evidence;
|
|
62
|
-
}
|
|
63
|
-
function collectPassiveRequiredEvidence(fields, targetByRef) {
|
|
64
|
-
const evidence = [];
|
|
65
|
-
const seenTargets = new Set();
|
|
66
|
-
for (const field of fields) {
|
|
67
|
-
if (seenTargets.has(field.targetRef)) {
|
|
68
|
-
continue;
|
|
69
|
-
}
|
|
70
|
-
seenTargets.add(field.targetRef);
|
|
71
|
-
const target = targetByRef.get(field.targetRef);
|
|
72
|
-
if (!target?.validation?.required) {
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
if (target.validation.invalid || target.validation.message || target.validation.errorStyling) {
|
|
76
|
-
continue;
|
|
77
|
-
}
|
|
78
|
-
evidence.push(`"${labelForField(field, target)}" is marked required.`);
|
|
79
|
-
}
|
|
80
|
-
return evidence;
|
|
81
|
-
}
|
|
82
|
-
function hasCorePaymentCardFields(fieldKeys) {
|
|
83
|
-
return [...PAYMENT_CARD_CORE_KEYS].every((fieldKey) => fieldKeys.has(fieldKey));
|
|
84
|
-
}
|
|
85
|
-
function looksLikePrimaryLoginForm(fieldKeys) {
|
|
86
|
-
return fieldKeys.has('password');
|
|
87
|
-
}
|
|
88
|
-
function looksLikeStrongIdentityForm(fieldKeys) {
|
|
89
|
-
const strongFieldCount = [...HIGH_SIGNAL_IDENTITY_KEYS].filter((fieldKey) => fieldKeys.has(fieldKey)).length;
|
|
90
|
-
return strongFieldCount > 0 || fieldKeys.size >= 3;
|
|
91
|
-
}
|
|
92
|
-
function immediateGuidance(why, evidence) {
|
|
93
|
-
return {
|
|
94
|
-
hint: IMMEDIATE_HINT,
|
|
95
|
-
why,
|
|
96
|
-
evidence: evidence.filter((value) => value.length > 0),
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
function deferGuidance(why, evidence) {
|
|
100
|
-
return {
|
|
101
|
-
hint: DEFER_HINT,
|
|
102
|
-
why,
|
|
103
|
-
recheckWhen: DEFER_RECHECK,
|
|
104
|
-
evidence: evidence.filter((value) => value.length > 0),
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
export function buildFillableFormGuidance(params) {
|
|
108
|
-
const { purpose, recommendedTiming, fields, targetByRef } = params;
|
|
109
|
-
const visibleFieldEvidence = collectVisibleFieldEvidence(fields, targetByRef);
|
|
110
|
-
const blockingValidationEvidence = collectBlockingValidationEvidence(fields, targetByRef);
|
|
111
|
-
const passiveRequiredEvidence = collectPassiveRequiredEvidence(fields, targetByRef);
|
|
112
|
-
const fieldKeys = new Set(fields.map((field) => field.fieldKey));
|
|
113
|
-
if (blockingValidationEvidence.length > 0) {
|
|
114
|
-
return immediateGuidance('The page is already pointing at this form through active validation signals.', [visibleFieldEvidence, ...blockingValidationEvidence]);
|
|
115
|
-
}
|
|
116
|
-
if (purpose === 'payment_card' && hasCorePaymentCardFields(fieldKeys)) {
|
|
117
|
-
return immediateGuidance('This is the visible card form for the active checkout.', [
|
|
118
|
-
visibleFieldEvidence,
|
|
119
|
-
...passiveRequiredEvidence,
|
|
120
|
-
]);
|
|
121
|
-
}
|
|
122
|
-
if (purpose === 'login' && looksLikePrimaryLoginForm(fieldKeys)) {
|
|
123
|
-
return immediateGuidance('This looks like the main login form needed to continue.', [
|
|
124
|
-
visibleFieldEvidence,
|
|
125
|
-
...passiveRequiredEvidence,
|
|
126
|
-
]);
|
|
127
|
-
}
|
|
128
|
-
if (purpose === 'identity' && looksLikeStrongIdentityForm(fieldKeys)) {
|
|
129
|
-
return immediateGuidance('This looks like a full identity form rather than a one-off contact field.', [visibleFieldEvidence, ...passiveRequiredEvidence]);
|
|
130
|
-
}
|
|
131
|
-
const lateTimingEvidence = recommendedTiming === 'late' ? 'Matcher marked this form for late timing.' : '';
|
|
132
|
-
const noActiveBlockerEvidence = 'No matched field currently shows active validation that blocks progress.';
|
|
133
|
-
return deferGuidance('This form is visible, but there is not enough evidence yet that it is the blocker right now.', [visibleFieldEvidence, ...passiveRequiredEvidence, noActiveBlockerEvidence, lateTimingEvidence]);
|
|
134
|
-
}
|
|
135
|
-
export const __testRequestGuidance = {
|
|
136
|
-
collectVisibleFieldEvidence,
|
|
137
|
-
collectBlockingValidationEvidence,
|
|
138
|
-
collectPassiveRequiredEvidence,
|
|
139
|
-
hasCorePaymentCardFields,
|
|
140
|
-
looksLikePrimaryLoginForm,
|
|
141
|
-
looksLikeStrongIdentityForm,
|
|
142
|
-
};
|