@nuanu-ai/agentbrowse 0.2.37 → 0.2.39
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/commands/close.d.ts.map +1 -1
- package/dist/commands/close.js +11 -4
- package/dist/commands/observe-accessibility.d.ts.map +1 -1
- package/dist/commands/observe-accessibility.js +29 -1
- package/dist/commands/observe-inventory.d.ts.map +1 -1
- package/dist/commands/observe-inventory.js +80 -15
- package/dist/commands/observe-surfaces.d.ts.map +1 -1
- package/dist/commands/observe-surfaces.js +14 -28
- package/dist/commands/observe.d.ts.map +1 -1
- package/dist/commands/observe.test-harness.d.ts.map +1 -1
- package/dist/control-semantics.d.ts.map +1 -1
- package/dist/control-semantics.js +1 -11
- package/dist/owned-process.d.ts +3 -0
- package/dist/owned-process.d.ts.map +1 -1
- package/dist/owned-process.js +3 -0
- package/dist/solver/browser-launcher.d.ts +1 -0
- package/dist/solver/browser-launcher.d.ts.map +1 -1
- package/dist/solver/browser-launcher.js +34 -2
- package/dist/solver/captcha-runtime.d.ts.map +1 -1
- package/dist/solver/captcha-runtime.js +4 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"close.d.ts","sourceRoot":"","sources":["../../src/commands/close.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"close.d.ts","sourceRoot":"","sources":["../../src/commands/close.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,IAAI,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,sBAAsB,CAAC;IAC9B,WAAW,EAAE,SAAS,CAAC;IACvB,OAAO,EAAE,uBAAuB,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;AAclE,wBAAsB,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC,CAwBlD"}
|
package/dist/commands/close.js
CHANGED
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* browse close — Close the browser and clean up session.
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { deleteSession, isOwnedSession, loadSession } from '../session.js';
|
|
5
5
|
import { info } from '../output.js';
|
|
6
6
|
import { closeOwnedBrowser } from '../owned-browser.js';
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
import { isManagedBrowserPid } from '../owned-process.js';
|
|
8
|
+
function isCloseableManagedSession(session) {
|
|
9
|
+
if (!session) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
if (isOwnedSession(session)) {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
return !session.identity && isManagedBrowserPid(session.pid);
|
|
9
16
|
}
|
|
10
17
|
export async function close() {
|
|
11
18
|
const session = loadSession();
|
|
12
|
-
if (
|
|
19
|
+
if (isCloseableManagedSession(session)) {
|
|
13
20
|
const closeResult = await closeOwnedBrowser(session);
|
|
14
21
|
if (!closeResult.success) {
|
|
15
22
|
info(`Owned browser close failed; keeping session record: ${closeResult.reason}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe-accessibility.d.ts","sourceRoot":"","sources":["../../src/commands/observe-accessibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAa5C,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,wBAAwB,CAAC;AAEhC,KAAK,6BAA6B,GAAG;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;CACpD,CAAC;AAOF,MAAM,MAAM,yBAAyB,GAAG;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,2BAA2B,GAAG;IACjC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;CACtD,CAAC;
|
|
1
|
+
{"version":3,"file":"observe-accessibility.d.ts","sourceRoot":"","sources":["../../src/commands/observe-accessibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAa5C,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,wBAAwB,CAAC;AAEhC,KAAK,6BAA6B,GAAG;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;CACpD,CAAC;AAOF,MAAM,MAAM,yBAAyB,GAAG;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,2BAA2B,GAAG;IACjC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;CACtD,CAAC;AAoEF,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAClC,6BAA6B,GAAG,IAAI,CAoDtC;AAkrBD,wBAAsB,iCAAiC,CACrD,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,aAAa,CAAC,iBAAiB,CAAC,EACzC,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAY9B;AAED,eAAO,MAAM,0BAA0B;;CAEtC,CAAC"}
|
|
@@ -19,6 +19,17 @@ const GENERIC_FALLBACK_LABELS = new Set([
|
|
|
19
19
|
'menu item',
|
|
20
20
|
'grid cell',
|
|
21
21
|
]);
|
|
22
|
+
const GENERIC_CONTAINER_AX_NAMES = new Set([
|
|
23
|
+
'alertdialog',
|
|
24
|
+
'article',
|
|
25
|
+
'complementary',
|
|
26
|
+
'dialog',
|
|
27
|
+
'form',
|
|
28
|
+
'group',
|
|
29
|
+
'main',
|
|
30
|
+
'region',
|
|
31
|
+
'search',
|
|
32
|
+
]);
|
|
22
33
|
const NON_CONTAINER_AX_ROLES = new Set([
|
|
23
34
|
'button',
|
|
24
35
|
'checkbox',
|
|
@@ -350,6 +361,16 @@ function shouldUseContainerAccessibilityName(expectedKind, semantics) {
|
|
|
350
361
|
return false;
|
|
351
362
|
}
|
|
352
363
|
function chooseContainerSemanticName(fallbackValue, expectedKind, semantics, stats) {
|
|
364
|
+
const normalizedFallback = normalizeText(fallbackValue);
|
|
365
|
+
const normalizedSemanticName = normalizeLabelKey(semantics?.name);
|
|
366
|
+
const normalizedSemanticRole = normalizedContainerKind(semantics?.role);
|
|
367
|
+
if (isMeaningfulName(normalizedFallback) &&
|
|
368
|
+
(!isMeaningfulName(normalizedSemanticName) ||
|
|
369
|
+
GENERIC_CONTAINER_AX_NAMES.has(normalizedSemanticName) ||
|
|
370
|
+
normalizedSemanticName === normalizedSemanticRole)) {
|
|
371
|
+
stats.fallbackUses += 1;
|
|
372
|
+
return fallbackValue;
|
|
373
|
+
}
|
|
353
374
|
if (shouldUseContainerAccessibilityName(expectedKind, semantics)) {
|
|
354
375
|
return semantics?.name;
|
|
355
376
|
}
|
|
@@ -362,10 +383,17 @@ function enrichContextNode(node, semantics, domFallback, stats) {
|
|
|
362
383
|
if (!node) {
|
|
363
384
|
return undefined;
|
|
364
385
|
}
|
|
386
|
+
const fallbackLabel = [
|
|
387
|
+
fallbackContextNodeLabelOf(node),
|
|
388
|
+
node.text,
|
|
389
|
+
domFallback?.label,
|
|
390
|
+
]
|
|
391
|
+
.map((value) => normalizeText(value))
|
|
392
|
+
.find(isMeaningfulName);
|
|
365
393
|
return {
|
|
366
394
|
...node,
|
|
367
395
|
kind: node.kind ?? semantics?.role,
|
|
368
|
-
label: chooseContainerSemanticName(
|
|
396
|
+
label: chooseContainerSemanticName(fallbackLabel, node.kind, semantics, stats),
|
|
369
397
|
};
|
|
370
398
|
}
|
|
371
399
|
function chooseHintText(context, nextContext, domFallbackHint, stats) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe-inventory.d.ts","sourceRoot":"","sources":["../../src/commands/observe-inventory.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"observe-inventory.d.ts","sourceRoot":"","sources":["../../src/commands/observe-inventory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACzB,MAAM,qBAAqB,CAAC;AAe7B,MAAM,MAAM,sBAAsB,GAAG,iBAAiB,GAAG;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,aAAa,EACb,MAAM,GAAG,OAAO,GAAG,WAAW,GAAG,UAAU,CAC5C,GAAG;IACF,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,SAAS,CAAC,EAAE,sBAAsB,CAAC;IACnC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,KAAK,GAAG,eAAe,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,YAAY,CAAC,EAAE,uBAAuB,CAAC;IACvC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACvC,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;CACpD,CAAC;AAEF,KAAK,wBAAwB,GAAG;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,QAAQ,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,KAAK,6BAA6B,GAAG;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5F,MAAM,MAAM,kCAAkC,GAAG;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,kCAAkC,CAAC;CAC/C,CAAC;AAIF,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,6BAA6B,GACtC,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAyCrD;AAED,wBAAgB,2CAA2C,CACzD,QAAQ,EAAE,kCAAkC,GAC3C,MAAM,GAAG,SAAS,CAuCpB;AA2KD,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,wBAAwB,CAAC,CAuBnC;AAiED,iBAAS,8BAA8B,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAElF;AAED,iBAAe,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAOxF;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAyBA;AAED,iBAAe,6BAA6B,CAC1C,OAAO,EAAE,0BAA0B,EACnC,OAAO,CAAC,EAAE,0BAA0B,GAAG;IACrC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAkgF9B;AA6MD,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CA0B/F;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE;IACJ,QAAQ,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,KAAK,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,EACD,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAqD9B;AAED,eAAO,MAAM,yBAAyB;;;;;CAKrC,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;;;CAKrC,CAAC"}
|
|
@@ -16,6 +16,7 @@ export function inferStructuredCellVariantFromEvidence(evidence) {
|
|
|
16
16
|
const seatClassLike = /seat|cabin|fare|row/.test(className);
|
|
17
17
|
const compactDateCellLabel = /^(?:\d{1,2}|january|february|march|april|may|june|july|august|september|october|november|december|январ|феврал|март|апрел|ма[йя]|июн|июл|август|сентябр|октябр|ноябр|декабр)$/i.test(normalizedLabel) || /^(?:\d{1,2}[./-]\d{1,2}(?:[./-]\d{2,4})?)$/.test(normalizedLabel);
|
|
18
18
|
const dateLike = surfaceKind === 'datepicker' ||
|
|
19
|
+
(hasDateMetadata && role === 'gridcell') ||
|
|
19
20
|
((role === 'gridcell' || structuredSurface || hasDateMetadata) && compactDateCellLabel);
|
|
20
21
|
if (dateLike) {
|
|
21
22
|
return 'date-cell';
|
|
@@ -1756,17 +1757,23 @@ async function collectDomTargetsFromDocument(context, options) {
|
|
|
1756
1757
|
const role = inferRole(element) || '';
|
|
1757
1758
|
const className = (element.getAttribute('class') || '').toLowerCase();
|
|
1758
1759
|
const surfaceKind = inferSurfaceKind(surface);
|
|
1759
|
-
const
|
|
1760
|
+
const seatValueLabel =
|
|
1761
|
+
element.getAttribute('data-seat-value')?.trim() ||
|
|
1762
|
+
element.getAttribute('data-seat')?.trim() ||
|
|
1763
|
+
undefined;
|
|
1764
|
+
const label =
|
|
1765
|
+
explicitLabelOf(element) || textOf(element) || seatValueLabel || syntheticLabelOf(element) || '';
|
|
1760
1766
|
const normalizedLabel = label.replace(/\s+/g, ' ').trim();
|
|
1761
1767
|
const explicitDateCellMetadata =
|
|
1762
1768
|
element.hasAttribute('data-day') ||
|
|
1763
1769
|
element.hasAttribute('data-date') ||
|
|
1770
|
+
element.hasAttribute('data-iso') ||
|
|
1764
1771
|
element.hasAttribute('aria-rowindex') ||
|
|
1765
1772
|
element.hasAttribute('aria-colindex') ||
|
|
1766
1773
|
Boolean(
|
|
1767
1774
|
composedClosest(
|
|
1768
1775
|
element,
|
|
1769
|
-
'[data-day], [data-date], [aria-rowindex], [aria-colindex]'
|
|
1776
|
+
'[data-day], [data-date], [data-iso], [aria-rowindex], [aria-colindex]'
|
|
1770
1777
|
)
|
|
1771
1778
|
);
|
|
1772
1779
|
const structuredCellVariant = inferStructuredCellVariantFromEvidence({
|
|
@@ -2050,7 +2057,7 @@ async function collectDomTargetsFromDocument(context, options) {
|
|
|
2050
2057
|
if (!kind && !fallbackLabel && !text && !selector) return undefined;
|
|
2051
2058
|
return {
|
|
2052
2059
|
kind: kind || undefined,
|
|
2053
|
-
label:
|
|
2060
|
+
label: fallbackLabel,
|
|
2054
2061
|
text:
|
|
2055
2062
|
text && (!fallbackLabel || text.toLowerCase() !== fallbackLabel.toLowerCase())
|
|
2056
2063
|
? text
|
|
@@ -2114,7 +2121,7 @@ async function collectDomTargetsFromDocument(context, options) {
|
|
|
2114
2121
|
}
|
|
2115
2122
|
|
|
2116
2123
|
const rect = element.getBoundingClientRect();
|
|
2117
|
-
if (rect.width < 220 || rect.height <
|
|
2124
|
+
if (rect.width < 220 || rect.height < 160) {
|
|
2118
2125
|
return false;
|
|
2119
2126
|
}
|
|
2120
2127
|
|
|
@@ -2193,6 +2200,56 @@ async function collectDomTargetsFromDocument(context, options) {
|
|
|
2193
2200
|
return states;
|
|
2194
2201
|
};
|
|
2195
2202
|
|
|
2203
|
+
const visualSeatIdentityOf = (element) => {
|
|
2204
|
+
const explicitRow = element.getAttribute('data-row')?.trim();
|
|
2205
|
+
const explicitColumn = element.getAttribute('data-column')?.trim().toUpperCase();
|
|
2206
|
+
if (explicitRow && explicitColumn) {
|
|
2207
|
+
return {
|
|
2208
|
+
row: explicitRow,
|
|
2209
|
+
column: explicitColumn,
|
|
2210
|
+
label: explicitRow + explicitColumn,
|
|
2211
|
+
};
|
|
2212
|
+
}
|
|
2213
|
+
|
|
2214
|
+
const candidates = [
|
|
2215
|
+
element.getAttribute('data-seat-value'),
|
|
2216
|
+
element.getAttribute('data-seat'),
|
|
2217
|
+
element.getAttribute('aria-label'),
|
|
2218
|
+
element.getAttribute('title'),
|
|
2219
|
+
];
|
|
2220
|
+
|
|
2221
|
+
for (const candidate of candidates) {
|
|
2222
|
+
const normalized = compactText(candidate);
|
|
2223
|
+
if (!normalized) {
|
|
2224
|
+
continue;
|
|
2225
|
+
}
|
|
2226
|
+
|
|
2227
|
+
const rowColumnMatch = normalized.match(/(?:^|\b)(\d{1,3})\s*([a-z])(?:\b|$)/i);
|
|
2228
|
+
if (rowColumnMatch) {
|
|
2229
|
+
const row = rowColumnMatch[1];
|
|
2230
|
+
const column = rowColumnMatch[2].toUpperCase();
|
|
2231
|
+
return {
|
|
2232
|
+
row,
|
|
2233
|
+
column,
|
|
2234
|
+
label: row + column,
|
|
2235
|
+
};
|
|
2236
|
+
}
|
|
2237
|
+
|
|
2238
|
+
const columnRowMatch = normalized.match(/(?:^|\b)([a-z])\s*(\d{1,3})(?:\b|$)/i);
|
|
2239
|
+
if (columnRowMatch) {
|
|
2240
|
+
const row = columnRowMatch[2];
|
|
2241
|
+
const column = columnRowMatch[1].toUpperCase();
|
|
2242
|
+
return {
|
|
2243
|
+
row,
|
|
2244
|
+
column,
|
|
2245
|
+
label: row + column,
|
|
2246
|
+
};
|
|
2247
|
+
}
|
|
2248
|
+
}
|
|
2249
|
+
|
|
2250
|
+
return undefined;
|
|
2251
|
+
};
|
|
2252
|
+
|
|
2196
2253
|
const isVisualSeatCellElement = (element) => {
|
|
2197
2254
|
if (!isVisualGridSquareElement(element)) {
|
|
2198
2255
|
return false;
|
|
@@ -2357,6 +2414,7 @@ async function collectDomTargetsFromDocument(context, options) {
|
|
|
2357
2414
|
const descriptors = [];
|
|
2358
2415
|
|
|
2359
2416
|
for (const seatCell of seatCells) {
|
|
2417
|
+
const explicitSeatIdentity = visualSeatIdentityOf(seatCell.element);
|
|
2360
2418
|
const rowHeaderCandidates = rowHeaders.filter((header) => {
|
|
2361
2419
|
const headerCenterY = header.rect.top + header.rect.height / 2;
|
|
2362
2420
|
const seatCenterY = seatCell.rect.top + seatCell.rect.height / 2;
|
|
@@ -2371,19 +2429,26 @@ async function collectDomTargetsFromDocument(context, options) {
|
|
|
2371
2429
|
seatCell.rect,
|
|
2372
2430
|
'row'
|
|
2373
2431
|
) || undefined;
|
|
2374
|
-
const
|
|
2375
|
-
|
|
2376
|
-
seatCell.rect,
|
|
2377
|
-
'column'
|
|
2432
|
+
const columnHeaderCandidates = topColumnHeaders.filter(
|
|
2433
|
+
(header) => header.rect.bottom <= seatCell.rect.top + 12
|
|
2378
2434
|
);
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2435
|
+
const columnHeader =
|
|
2436
|
+
explicitSeatIdentity?.column ||
|
|
2437
|
+
!topColumnHeaders.length
|
|
2438
|
+
? undefined
|
|
2439
|
+
: chooseNearestHeader(
|
|
2440
|
+
columnHeaderCandidates.length > 0 ? columnHeaderCandidates : topColumnHeaders,
|
|
2441
|
+
seatCell.rect,
|
|
2442
|
+
'column'
|
|
2443
|
+
);
|
|
2444
|
+
|
|
2445
|
+
const row = explicitSeatIdentity?.row || rowHeader?.text;
|
|
2446
|
+
const column = explicitSeatIdentity?.column || columnHeader?.text;
|
|
2382
2447
|
if (!row || !column) {
|
|
2383
2448
|
continue;
|
|
2384
2449
|
}
|
|
2385
2450
|
|
|
2386
|
-
const label = row + column;
|
|
2451
|
+
const label = explicitSeatIdentity?.label || row + column;
|
|
2387
2452
|
const states = visualSeatCellStateOf(seatCell.element);
|
|
2388
2453
|
descriptors.push({
|
|
2389
2454
|
element: seatCell.element,
|
|
@@ -2606,7 +2671,7 @@ async function collectDomTargetsFromDocument(context, options) {
|
|
|
2606
2671
|
: undefined;
|
|
2607
2672
|
return {
|
|
2608
2673
|
kind: inferredKind,
|
|
2609
|
-
label:
|
|
2674
|
+
label: visualSeatGrid?.label || fallbackLabel,
|
|
2610
2675
|
fallbackLabel: visualSeatGrid?.label || fallbackLabel,
|
|
2611
2676
|
interactionHint: visualSeatGrid?.interactionHint || (genericClickable ? 'click' : undefined),
|
|
2612
2677
|
role,
|
|
@@ -2633,7 +2698,7 @@ async function collectDomTargetsFromDocument(context, options) {
|
|
|
2633
2698
|
? { ...(stateOf(element) || {}), ...(visualSeatGrid?.states || {}) }
|
|
2634
2699
|
: undefined,
|
|
2635
2700
|
surfaceKind,
|
|
2636
|
-
surfaceLabel:
|
|
2701
|
+
surfaceLabel: fallbackSurfaceLabel,
|
|
2637
2702
|
fallbackSurfaceLabel,
|
|
2638
2703
|
surfaceSelector: surface ? buildSelector(surface) : undefined,
|
|
2639
2704
|
surfaceSelectors,
|
|
@@ -2656,7 +2721,7 @@ async function collectDomTargetsFromDocument(context, options) {
|
|
|
2656
2721
|
lane: laneOf(rect),
|
|
2657
2722
|
band: bandOf(rect),
|
|
2658
2723
|
},
|
|
2659
|
-
hintText:
|
|
2724
|
+
hintText: describedByTextOf(element),
|
|
2660
2725
|
fallbackHintText: visualSeatGrid?.hintText,
|
|
2661
2726
|
visual: visualOf(element),
|
|
2662
2727
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe-surfaces.d.ts","sourceRoot":"","sources":["../../src/commands/observe-surfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AA6ChE,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,CAAC,iBAAiB,CAAC,EACxC,OAAO,EAAE,aAAa,CACpB,IAAI,CAAC,gBAAgB,EAAE,YAAY,GAAG,gBAAgB,GAAG,kBAAkB,CAAC,CAC7E,EACD,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GACvC,iBAAiB,EAAE,CAiDrB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAa7E;AAyBD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,IAAI,CACV,iBAAiB,EACjB,eAAe,GAAG,WAAW,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,CACxE,GACA,MAAM,GAAG,SAAS,CAkBpB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,eAAe,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC,GAC7F,MAAM,CAMR;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"observe-surfaces.d.ts","sourceRoot":"","sources":["../../src/commands/observe-surfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AA6ChE,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,CAAC,iBAAiB,CAAC,EACxC,OAAO,EAAE,aAAa,CACpB,IAAI,CAAC,gBAAgB,EAAE,YAAY,GAAG,gBAAgB,GAAG,kBAAkB,CAAC,CAC7E,EACD,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GACvC,iBAAiB,EAAE,CAiDrB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAa7E;AAyBD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,IAAI,CACV,iBAAiB,EACjB,eAAe,GAAG,WAAW,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,CACxE,GACA,MAAM,GAAG,SAAS,CAkBpB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,eAAe,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC,GAC7F,MAAM,CAMR;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CA8BvF;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,gBAAgB,EAAE,EACvB,SAAS,EAAE,gBAAgB,GAAG,SAAS,GACtC,IAAI,CAON;AAwDD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,CAAC,iBAAiB,CAAC,oCAyE1C"}
|
|
@@ -133,37 +133,23 @@ export function summarizeContext(context) {
|
|
|
133
133
|
if (!context)
|
|
134
134
|
return undefined;
|
|
135
135
|
const parts = [];
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
}
|
|
148
|
-
if (parts.length === 0 && context.container?.label) {
|
|
149
|
-
parts.push(context.container.label);
|
|
150
|
-
}
|
|
151
|
-
else if (parts.length === 0 && context.container?.kind) {
|
|
152
|
-
parts.push(context.container.kind);
|
|
153
|
-
}
|
|
154
|
-
if (context.landmark?.label &&
|
|
155
|
-
context.landmark.label !== context.container?.label &&
|
|
156
|
-
context.landmark.label !== context.group?.label) {
|
|
157
|
-
parts.push(context.landmark.label);
|
|
136
|
+
const pushIfDistinct = (value) => {
|
|
137
|
+
const normalized = normalizeSurfaceText(value);
|
|
138
|
+
if (!normalized || parts.includes(normalized)) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
parts.push(normalized);
|
|
142
|
+
};
|
|
143
|
+
pushIfDistinct(context.item?.label ?? context.item?.text ?? context.item?.kind);
|
|
144
|
+
pushIfDistinct(context.group?.label ?? context.group?.text ?? context.group?.kind);
|
|
145
|
+
if (parts.length === 0) {
|
|
146
|
+
pushIfDistinct(context.container?.label ?? context.container?.text ?? context.container?.kind);
|
|
158
147
|
}
|
|
159
|
-
|
|
160
|
-
context.landmark.
|
|
161
|
-
context.landmark.kind !== context.group?.kind &&
|
|
162
|
-
!context.landmark?.label) {
|
|
163
|
-
parts.push(context.landmark.kind);
|
|
148
|
+
if (parts.length === 0 || context.landmark?.label || context.landmark?.text) {
|
|
149
|
+
pushIfDistinct(context.landmark?.label ?? context.landmark?.text ?? context.landmark?.kind);
|
|
164
150
|
}
|
|
165
151
|
if (parts.length === 0 && context.hintText) {
|
|
166
|
-
|
|
152
|
+
pushIfDistinct(context.hintText);
|
|
167
153
|
}
|
|
168
154
|
if (parts.length === 0)
|
|
169
155
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../../src/commands/observe.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AA2DnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAU/D,eAAO,MAAM,yBAAyB;;;;
|
|
1
|
+
{"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../../src/commands/observe.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AA2DnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAU/D,eAAO,MAAM,yBAAyB;;;;iBAyUghH,CAAC;gBAAwB,CAAC;;;;;CAzU3gH,CAAC;AACtE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGrC,CAAC;AAEF,wBAAsB,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkUzF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe.test-harness.d.ts","sourceRoot":"","sources":["../../src/commands/observe.test-harness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,EAAE,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AA0EvC,eAAO,MAAM,kBAAkB,EAAE,MAAiC,CAAC;AACnE,eAAO,MAAM,oBAAoB,EAAE,MAAmC,CAAC;AACvE,eAAO,MAAM,yBAAyB,EAAE,MAAwC,CAAC;AACjF,eAAO,MAAM,eAAe,EAAE,MAA8B,CAAC;AAC7D,eAAO,MAAM,iBAAiB,EAAE,MAAgC,CAAC;AACjE,eAAO,MAAM,cAAc,EAAE,MAA6B,CAAC;AAC3D,eAAO,MAAM,2BAA2B,EAAE,MAA0C,CAAC;AACrF,eAAO,MAAM,eAAe,EAAE,MAA8B,CAAC;AAC7D,eAAO,MAAM,qBAAqB,EAAE,OAAO,EAAgC,CAAC;AA+B5E,eAAO,MAAQ,OAAO,yCAAE,yBAAyB;;;;
|
|
1
|
+
{"version":3,"file":"observe.test-harness.d.ts","sourceRoot":"","sources":["../../src/commands/observe.test-harness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,EAAE,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AA0EvC,eAAO,MAAM,kBAAkB,EAAE,MAAiC,CAAC;AACnE,eAAO,MAAM,oBAAoB,EAAE,MAAmC,CAAC;AACvE,eAAO,MAAM,yBAAyB,EAAE,MAAwC,CAAC;AACjF,eAAO,MAAM,eAAe,EAAE,MAA8B,CAAC;AAC7D,eAAO,MAAM,iBAAiB,EAAE,MAAgC,CAAC;AACjE,eAAO,MAAM,cAAc,EAAE,MAA6B,CAAC;AAC3D,eAAO,MAAM,2BAA2B,EAAE,MAA0C,CAAC;AACrF,eAAO,MAAM,eAAe,EAAE,MAA8B,CAAC;AAC7D,eAAO,MAAM,qBAAqB,EAAE,OAAO,EAAgC,CAAC;AA+B5E,eAAO,MAAQ,OAAO,yCAAE,yBAAyB;;;;iBAqE6vX,CAAC;gBAAwB,CAAC;;;;;GArErxX,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAE3E,CAAC;AACF,eAAO,MAAQ,0BAA0B;;;;;CAA+C,CAAC;AAMzF,wBAAgB,WAAW,IAAI,aAAa,CAW3C;AAYD,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpE,IAAI,EAAE,CAAC,EACP,YAAY,SAAkC,GAC7C,CAAC,GAAG;IAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;CAAE,CAM3C;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAyB9C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-semantics.d.ts","sourceRoot":"","sources":["../src/control-semantics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;AAEzE,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,aAAa,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"control-semantics.d.ts","sourceRoot":"","sources":["../src/control-semantics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;AAEzE,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,aAAa,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAwCtF,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,oBAAoB,GAC1B,mBAAmB,GAAG,SAAS,CAuCjC;AAyID,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAYxE;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,oBAAoB,GAAG,mBAAmB,EAAE,CAoG/F;AAED,wBAAgB,0BAA0B,CACxC,MAAM,CAAC,EAAE,gBAAgB,EACzB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE;IACP,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC1B,GACL,uBAAuB,CAyBzB;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,oBAAoB,EAC3B,cAAc,EAAE,aAAa,CAAC,mBAAmB,CAAC,GACjD,mBAAmB,GAAG,SAAS,CA0EjC;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,oBAAoB,EAC3B,cAAc,EAAE,aAAa,CAAC,mBAAmB,CAAC,GACjD,sBAAsB,GAAG,SAAS,CA6CpC"}
|
|
@@ -7,14 +7,6 @@ const CARD_EXPIRY_FIELD_RE = /\b(exp(?:iry|iration)(?: date)?|cc-exp|valid\s+thr
|
|
|
7
7
|
const CARD_CVC_FIELD_RE = /\b(cvc|cvv|cc-csc|security code|card cvc)\b/i;
|
|
8
8
|
const DATE_VALUE_MASK_RE = /(?:^|\b)(?:dd|d|дд|д)\s*[./-]\s*(?:mm|m|мм|м)\s*[./-]\s*(?:yyyy|yyy|yy|y|гггг|гг|г)(?:\b|$)/i;
|
|
9
9
|
const NON_CARD_DATE_FIELD_RE = /\b(?:birth|dob|date|issued|expires|expiry|expiration|expir)\b|(?:дата|рожд|срок)/i;
|
|
10
|
-
const POPUP_DISCLOSURE_SURFACE_KINDS = new Set([
|
|
11
|
-
'dialog',
|
|
12
|
-
'dropdown',
|
|
13
|
-
'listbox',
|
|
14
|
-
'menu',
|
|
15
|
-
'popover',
|
|
16
|
-
'datepicker',
|
|
17
|
-
]);
|
|
18
10
|
function normalizeText(value) {
|
|
19
11
|
return (value ?? '').trim().toLowerCase();
|
|
20
12
|
}
|
|
@@ -116,11 +108,9 @@ function isBinaryToggleControlFacts(facts) {
|
|
|
116
108
|
function isDisclosureLikeTriggerFacts(facts, controlFamily) {
|
|
117
109
|
const kind = normalizeText(facts.kind);
|
|
118
110
|
const role = normalizeText(facts.role);
|
|
119
|
-
const surfaceKind = normalizeText(facts.surfaceKind);
|
|
120
111
|
const inputType = normalizeText(facts.inputType);
|
|
121
112
|
const popupBacked = Boolean(facts.controlsSurfaceSelector) ||
|
|
122
|
-
facts.states?.expanded !== undefined
|
|
123
|
-
POPUP_DISCLOSURE_SURFACE_KINDS.has(surfaceKind);
|
|
113
|
+
facts.states?.expanded !== undefined;
|
|
124
114
|
if (!popupBacked) {
|
|
125
115
|
return false;
|
|
126
116
|
}
|
package/dist/owned-process.d.ts
CHANGED
|
@@ -11,4 +11,7 @@ export declare function cleanupManagedBrowserPids(options?: {
|
|
|
11
11
|
export declare function listManagedBrowserPids(options?: {
|
|
12
12
|
processTable?: string;
|
|
13
13
|
}): number[];
|
|
14
|
+
export declare function isManagedBrowserPid(pid: number, options?: {
|
|
15
|
+
processTable?: string;
|
|
16
|
+
}): boolean;
|
|
14
17
|
//# sourceMappingURL=owned-process.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"owned-process.d.ts","sourceRoot":"","sources":["../src/owned-process.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,yBAAyB,GAAG,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,aAAa,CAAC;AACjG,MAAM,MAAM,2BAA2B,GAAG;IACxC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAW/C;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAOvF;AAiCD,wBAAsB,yBAAyB,CAC7C,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;CAAO,GAC/C,OAAO,CAAC,2BAA2B,CAAC,CAqBtC;AAED,wBAAgB,sBAAsB,CACpC,OAAO,GAAE;IACP,YAAY,CAAC,EAAE,MAAM,CAAC;CAClB,GACL,MAAM,EAAE,CAuBV"}
|
|
1
|
+
{"version":3,"file":"owned-process.d.ts","sourceRoot":"","sources":["../src/owned-process.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,yBAAyB,GAAG,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,aAAa,CAAC;AACjG,MAAM,MAAM,2BAA2B,GAAG;IACxC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAW/C;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAOvF;AAiCD,wBAAsB,yBAAyB,CAC7C,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;CAAO,GAC/C,OAAO,CAAC,2BAA2B,CAAC,CAqBtC;AAED,wBAAgB,sBAAsB,CACpC,OAAO,GAAE;IACP,YAAY,CAAC,EAAE,MAAM,CAAC;CAClB,GACL,MAAM,EAAE,CAuBV;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IACP,YAAY,CAAC,EAAE,MAAM,CAAC;CAClB,GACL,OAAO,CAET"}
|
package/dist/owned-process.js
CHANGED
|
@@ -93,6 +93,9 @@ export function listManagedBrowserPids(options = {}) {
|
|
|
93
93
|
}
|
|
94
94
|
return Array.from(pids);
|
|
95
95
|
}
|
|
96
|
+
export function isManagedBrowserPid(pid, options = {}) {
|
|
97
|
+
return listManagedBrowserPids(options).includes(pid);
|
|
98
|
+
}
|
|
96
99
|
async function waitForPidExit(pid, attempts, intervalMs) {
|
|
97
100
|
for (let attempt = 0; attempt < attempts; attempt++) {
|
|
98
101
|
if (!isPidAlive(pid)) {
|
|
@@ -10,4 +10,5 @@ export type SolverSession = {
|
|
|
10
10
|
disconnect: () => Promise<void>;
|
|
11
11
|
};
|
|
12
12
|
export declare function launchSolver(profile: ProfileInfo, opts?: LaunchOptions): Promise<SolverSession>;
|
|
13
|
+
export declare function chromeArgsForEnvironment(platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv): string[];
|
|
13
14
|
//# sourceMappingURL=browser-launcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-launcher.d.ts","sourceRoot":"","sources":["../../src/solver/browser-launcher.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAsB,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-launcher.d.ts","sourceRoot":"","sources":["../../src/solver/browser-launcher.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAsB,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAgBjF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC,CAAC;AAuBF,wBAAsB,YAAY,CAChC,OAAO,EAAE,WAAW,EACpB,IAAI,CAAC,EAAE,aAAa,GACnB,OAAO,CAAC,aAAa,CAAC,CAmExB;AAgUD,wBAAgB,wBAAwB,CACtC,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,EAAE,CAGV"}
|
|
@@ -6,11 +6,20 @@ import puppeteerExtra from 'puppeteer-extra';
|
|
|
6
6
|
import StealthPlugin from 'puppeteer-extra-plugin-stealth';
|
|
7
7
|
import { buildTurnstileApiShimSource, isTurnstileApiRequest } from './turnstile-challenge.js';
|
|
8
8
|
const enhancedPuppeteer = puppeteerExtra;
|
|
9
|
-
|
|
9
|
+
const solverStealthPlugin = StealthPlugin();
|
|
10
|
+
// Some iframe-backed checkout flows break when this evasion runs on a connected real Chrome.
|
|
11
|
+
solverStealthPlugin.enabledEvasions.delete('iframe.contentWindow');
|
|
12
|
+
enhancedPuppeteer.use(solverStealthPlugin);
|
|
10
13
|
const AUTO_CDP_PORT = 0;
|
|
11
14
|
const CDP_DISCOVERY_TIMEOUT_MS = 30_000;
|
|
12
15
|
const CDP_DISCOVERY_INTERVAL_MS = 500;
|
|
16
|
+
const BROWSER_CLOSE_TIMEOUT_MS = 1_000;
|
|
13
17
|
const INTERCEPTED_PAGES = new WeakSet();
|
|
18
|
+
const LINUX_CI_CHROME_ARGS = [
|
|
19
|
+
'--no-sandbox',
|
|
20
|
+
'--disable-setuid-sandbox',
|
|
21
|
+
'--disable-dev-shm-usage',
|
|
22
|
+
];
|
|
14
23
|
const CHROME_PATHS = [
|
|
15
24
|
'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
|
|
16
25
|
'/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary',
|
|
@@ -30,6 +39,7 @@ export async function launchSolver(profile, opts) {
|
|
|
30
39
|
const cdpUrl = await discoverCdpUrl({
|
|
31
40
|
requestedPort: opts?.cdpPort,
|
|
32
41
|
userDataDir: profile.userDataDir,
|
|
42
|
+
chromeProcess,
|
|
33
43
|
});
|
|
34
44
|
if (!cdpUrl) {
|
|
35
45
|
throw buildCdpDiscoveryError(chromeProcess, opts?.cdpPort, profile.userDataDir);
|
|
@@ -63,7 +73,7 @@ export async function launchSolver(profile, opts) {
|
|
|
63
73
|
profile,
|
|
64
74
|
close: async () => {
|
|
65
75
|
try {
|
|
66
|
-
await browser
|
|
76
|
+
await closeBrowserWithinTimeout(browser, BROWSER_CLOSE_TIMEOUT_MS);
|
|
67
77
|
}
|
|
68
78
|
finally {
|
|
69
79
|
terminateProcessGroup(chromeProcess.pid);
|
|
@@ -96,10 +106,27 @@ async function discoverCdpUrl(options) {
|
|
|
96
106
|
return discoveredViaActivePort;
|
|
97
107
|
}
|
|
98
108
|
}
|
|
109
|
+
if (typeof options.chromeProcess?.exitCode === 'number' || options.chromeProcess?.signalCode) {
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
99
112
|
await sleep(CDP_DISCOVERY_INTERVAL_MS);
|
|
100
113
|
}
|
|
101
114
|
return null;
|
|
102
115
|
}
|
|
116
|
+
async function closeBrowserWithinTimeout(browser, timeoutMs) {
|
|
117
|
+
let timeoutId;
|
|
118
|
+
await Promise.race([
|
|
119
|
+
// Prefer Browser.close so puppeteer-extra can finish target shutdown hooks
|
|
120
|
+
// before we force-kill the owned Chrome process on slow CI runners.
|
|
121
|
+
browser.close().catch(() => { }),
|
|
122
|
+
new Promise((resolve) => {
|
|
123
|
+
timeoutId = setTimeout(resolve, timeoutMs);
|
|
124
|
+
}),
|
|
125
|
+
]);
|
|
126
|
+
if (timeoutId) {
|
|
127
|
+
clearTimeout(timeoutId);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
103
130
|
async function discoverCdpUrlOnPort(port) {
|
|
104
131
|
try {
|
|
105
132
|
const res = await fetch(`http://127.0.0.1:${port}/json/version`);
|
|
@@ -290,6 +317,7 @@ function spawnChromeProcess(executablePath, profile, fp, cdpPort, windowSize, he
|
|
|
290
317
|
'--no-first-run',
|
|
291
318
|
'--no-default-browser-check',
|
|
292
319
|
];
|
|
320
|
+
args.push(...chromeArgsForEnvironment());
|
|
293
321
|
if (headless) {
|
|
294
322
|
args.push('--headless=new');
|
|
295
323
|
}
|
|
@@ -311,6 +339,10 @@ function spawnChromeProcess(executablePath, profile, fp, cdpPort, windowSize, he
|
|
|
311
339
|
}
|
|
312
340
|
return proc;
|
|
313
341
|
}
|
|
342
|
+
export function chromeArgsForEnvironment(platform = process.platform, env = process.env) {
|
|
343
|
+
const isLinuxCi = platform === 'linux' && (env.CI === 'true' || env.GITHUB_ACTIONS === 'true');
|
|
344
|
+
return isLinuxCi ? [...LINUX_CI_CHROME_ARGS] : [];
|
|
345
|
+
}
|
|
314
346
|
function terminateProcessGroup(pid) {
|
|
315
347
|
try {
|
|
316
348
|
process.kill(-pid, 'SIGTERM');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"captcha-runtime.d.ts","sourceRoot":"","sources":["../../src/solver/captcha-runtime.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAMF,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,yBAAyB,GAC/B,OAAO,CAAC,wBAAwB,CAAC,
|
|
1
|
+
{"version":3,"file":"captcha-runtime.d.ts","sourceRoot":"","sources":["../../src/solver/captcha-runtime.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAMF,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,yBAAyB,GAC/B,OAAO,CAAC,wBAAwB,CAAC,CAgInC"}
|
|
@@ -12,7 +12,10 @@ export async function solveCaptchasByCdp(cdpUrl, apiKey, opts) {
|
|
|
12
12
|
const onProgress = opts?.onProgress;
|
|
13
13
|
const sharedTransport = opts?.sharedTransport ?? Boolean(opts?.proxy);
|
|
14
14
|
onProgress?.('[captcha] connecting to browser...');
|
|
15
|
-
const browser = await withTimeout(puppeteer.connect(
|
|
15
|
+
const browser = await withTimeout(puppeteer.connect({
|
|
16
|
+
...buildConnectOptions(cdpUrl),
|
|
17
|
+
defaultViewport: null,
|
|
18
|
+
}), connectTimeoutMs, `Failed to connect to browser within ${Math.ceil(connectTimeoutMs / 1000)}s`);
|
|
16
19
|
try {
|
|
17
20
|
const solver = new CaptchaSolver({
|
|
18
21
|
apiKey,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nuanu-ai/agentbrowse",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.39",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Browser automation CLI for AI agents: control a CDP browser, observe UI surfaces, act on refs, extract data, capture screenshots, complete protected fills, and solve captchas",
|
|
6
6
|
"keywords": [
|