@nuanu-ai/agentbrowse 0.2.27 → 0.2.28
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/commands/act.d.ts.map +1 -1
- package/dist/commands/act.js +2 -1
- package/dist/commands/extract-scope-resolution.d.ts.map +1 -1
- package/dist/commands/extract-scope-resolution.js +10 -1
- package/dist/commands/extract.d.ts.map +1 -1
- package/dist/commands/extract.js +55 -1
- package/dist/commands/observe-persistence.d.ts.map +1 -1
- package/dist/commands/observe-persistence.js +9 -2
- package/dist/commands/observe-projection.d.ts +5 -3
- package/dist/commands/observe-projection.d.ts.map +1 -1
- package/dist/commands/observe-projection.js +3 -0
- package/dist/commands/observe-surfaces.d.ts.map +1 -1
- package/dist/commands/observe-surfaces.js +24 -0
- package/dist/commands/observe.d.ts.map +1 -1
- package/dist/commands/observe.js +4 -1
- package/dist/runtime-state.d.ts +6 -0
- package/dist/runtime-state.d.ts.map +1 -1
- package/dist/runtime-state.js +24 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -171,6 +171,11 @@ Human-readable progress is written to `stderr`. Command results are written to
|
|
|
171
171
|
- `resolvedBy` shows the concrete path within that source
|
|
172
172
|
- `degraded: true` + `degradationReason` means a bounded degraded path was used
|
|
173
173
|
- each returned target includes `source`, for example `dom` or `stagehand`
|
|
174
|
+
- each returned scope may include `extractScopeLifetime`:
|
|
175
|
+
- `snapshot` = usable only for the current observed page state
|
|
176
|
+
- `durable` = intended to survive later rebinding
|
|
177
|
+
- reusing an old snapshot scope after a later step can fail with
|
|
178
|
+
`expired_extract_scope`; the correct recovery is a fresh `observe`
|
|
174
179
|
|
|
175
180
|
Default verification for this package is no longer unit-only:
|
|
176
181
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"act.d.ts","sourceRoot":"","sources":["../../src/commands/act.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"act.d.ts","sourceRoot":"","sources":["../../src/commands/act.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAuCnD,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA2HxF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,CAAC;AA4V7B,wBAAsB,GAAG,CACvB,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,YAAY,EACpB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAktBf"}
|
package/dist/commands/act.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* browse act <targetRef> <action> [value] — Perform a deterministic action on a stored target.
|
|
3
3
|
*/
|
|
4
4
|
import { saveSession } from '../session.js';
|
|
5
|
-
import { clearProtectedExposure, getProtectedExposure, getSurface, getTarget, incrementMetric, locatorCandidateKey, markTargetLifecycle, recordActionResult, registerPage, setTargetAvailability, setCurrentPage, updateTarget, } from '../runtime-state.js';
|
|
5
|
+
import { bumpPageScopeEpoch, clearProtectedExposure, getProtectedExposure, getSurface, getTarget, incrementMetric, locatorCandidateKey, markTargetLifecycle, recordActionResult, registerPage, setTargetAvailability, setCurrentPage, updateTarget, } from '../runtime-state.js';
|
|
6
6
|
import { outputContractFailure, outputFailure, outputJSON } from '../output.js';
|
|
7
7
|
import { capturePageObservation, captureLocatorContextHash, captureLocatorState, createAcceptanceProbe, diagnoseNoObservableProgress, genericClickObservationChanged, locatorStateChanged, pageObservationChanged, rankLocatorCandidates, shouldVerifyObservableProgress, waitForAcceptanceProbe, } from './action-acceptance.js';
|
|
8
8
|
import { captureActionFailureArtifacts, startActionTrace } from './action-artifacts.js';
|
|
@@ -830,6 +830,7 @@ export async function act(session, targetRef, action, value) {
|
|
|
830
830
|
if (resolvedBy === 'playwright-locator') {
|
|
831
831
|
incrementMetric(session, 'deterministicActions');
|
|
832
832
|
}
|
|
833
|
+
bumpPageScopeEpoch(session, target.pageRef);
|
|
833
834
|
recordActionResult(session, true, Date.now() - startedAt);
|
|
834
835
|
saveSession(session);
|
|
835
836
|
await trace.finishSuccess();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract-scope-resolution.d.ts","sourceRoot":"","sources":["../../src/commands/extract-scope-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAM5D,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,CAAC,EAAE,qBAAqB,CAAC;CAC3C,CAAC;
|
|
1
|
+
{"version":3,"file":"extract-scope-resolution.d.ts","sourceRoot":"","sources":["../../src/commands/extract-scope-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAM5D,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,CAAC,EAAE,qBAAqB,CAAC;CAC3C,CAAC;AAiIF,wBAAsB,2BAA2B,CAAC,IAAI,EAAE;IACtD,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,mBAAmB,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAmBnC"}
|
|
@@ -2,7 +2,16 @@ import { buildLocator, resolveLocatorRoot } from './action-fallbacks.js';
|
|
|
2
2
|
import { readLocatorDomSignature, readLocatorOuterHtml } from './descriptor-validation.js';
|
|
3
3
|
const LIVE_SCOPE_ATTRIBUTE = 'data-agentbrowse-scope';
|
|
4
4
|
async function materializeScopedExtractPage(page, scopedLocator) {
|
|
5
|
-
|
|
5
|
+
let scopedHtml = await readLocatorOuterHtml(scopedLocator);
|
|
6
|
+
if (!scopedHtml) {
|
|
7
|
+
// Some iframe-backed payment forms are live and visible but fail the richer
|
|
8
|
+
// serializer path. Fall back to the native element.outerHTML snapshot
|
|
9
|
+
// instead of reporting the scope as unresolvable.
|
|
10
|
+
scopedHtml = await scopedLocator
|
|
11
|
+
.first()
|
|
12
|
+
.evaluate((element) => (element instanceof Element ? element.outerHTML : null))
|
|
13
|
+
.catch(() => null);
|
|
14
|
+
}
|
|
6
15
|
if (!scopedHtml) {
|
|
7
16
|
throw new Error('scope_target_unresolvable');
|
|
8
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/commands/extract.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/commands/extract.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAmOnD,wBAAsB,OAAO,CAC3B,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CA6Of"}
|
package/dist/commands/extract.js
CHANGED
|
@@ -4,13 +4,34 @@
|
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { AgentpayStructuredOutputTruncatedError } from '../agentpay-stagehand-llm.js';
|
|
6
6
|
import { saveSession } from '../session.js';
|
|
7
|
-
import { getSurface, getTarget, markSurfaceLifecycle, markTargetLifecycle, setCurrentPage, } from '../runtime-state.js';
|
|
7
|
+
import { getPageScopeEpoch, getSurface, getTarget, markSurfaceLifecycle, markTargetLifecycle, setCurrentPage, } from '../runtime-state.js';
|
|
8
8
|
import { outputContractFailure, outputJSON } from '../output.js';
|
|
9
9
|
import { connectPlaywright, disconnectPlaywright, resolveCurrentPageContext, resolvePageByRef as resolvePlaywrightPageByRef, syncSessionPage, } from '../playwright-runtime.js';
|
|
10
10
|
import { normalizePageSignature } from './descriptor-validation.js';
|
|
11
11
|
import { readScopedDialogText } from './extract-scoped-dialog-text.js';
|
|
12
12
|
import { resolveScopedExtractContext } from './extract-scope-resolution.js';
|
|
13
13
|
import { executeStagehandExtract } from './extract-stagehand-executor.js';
|
|
14
|
+
function surfaceExtractScopeLifetime(surface) {
|
|
15
|
+
if (surface.extractScopeLifetime === 'durable' || surface.extractScopeLifetime === 'snapshot') {
|
|
16
|
+
return surface.extractScopeLifetime;
|
|
17
|
+
}
|
|
18
|
+
return (surface.kind ?? '').toLowerCase() === 'form' && surface.locatorCandidates.length > 0
|
|
19
|
+
? 'durable'
|
|
20
|
+
: 'snapshot';
|
|
21
|
+
}
|
|
22
|
+
function snapshotScopeUnavailableReason(session, surface) {
|
|
23
|
+
if (surfaceExtractScopeLifetime(surface) !== 'snapshot') {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
if (surface.availability.state !== 'available') {
|
|
27
|
+
return `Snapshot scope ${surface.ref} is no longer visible or current (availability=${surface.availability.state}${surface.availability.reason ? `:${surface.availability.reason}` : ''}).`;
|
|
28
|
+
}
|
|
29
|
+
const currentEpoch = getPageScopeEpoch(session, surface.pageRef);
|
|
30
|
+
if ((surface.scopeEpoch ?? currentEpoch) !== currentEpoch) {
|
|
31
|
+
return `Snapshot scope ${surface.ref} belongs to page scope epoch ${surface.scopeEpoch ?? 0}, but the current epoch is ${currentEpoch}.`;
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
14
35
|
function buildSchemaValue(descriptor) {
|
|
15
36
|
if (descriptor === 'string')
|
|
16
37
|
return z.string();
|
|
@@ -193,6 +214,21 @@ export async function extract(session, schemaJson, scopeRef) {
|
|
|
193
214
|
scopeRef,
|
|
194
215
|
});
|
|
195
216
|
}
|
|
217
|
+
if (surfaceScope) {
|
|
218
|
+
const snapshotScopeReason = snapshotScopeUnavailableReason(session, surfaceScope);
|
|
219
|
+
if (snapshotScopeReason) {
|
|
220
|
+
return outputContractFailure({
|
|
221
|
+
error: 'expired_extract_scope',
|
|
222
|
+
outcomeType: 'binding_stale',
|
|
223
|
+
message: 'Extraction could not start because the requested snapshot scope is no longer current.',
|
|
224
|
+
reason: snapshotScopeReason,
|
|
225
|
+
scopeRef,
|
|
226
|
+
pageRef,
|
|
227
|
+
staleScope: true,
|
|
228
|
+
staleReason: 'snapshot-scope-expired',
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
}
|
|
196
232
|
if (targetScope && !canUseTargetAsExtractScope(targetScope)) {
|
|
197
233
|
return outputContractFailure({
|
|
198
234
|
error: 'invalid_extract_scope',
|
|
@@ -256,6 +292,21 @@ export async function extract(session, schemaJson, scopeRef) {
|
|
|
256
292
|
staleScope = true;
|
|
257
293
|
staleReason = 'dom-signature-mismatch';
|
|
258
294
|
}
|
|
295
|
+
else if (surfaceScope &&
|
|
296
|
+
surfaceExtractScopeLifetime(surfaceScope) === 'snapshot' &&
|
|
297
|
+
error instanceof Error &&
|
|
298
|
+
error.message === 'scope_target_unresolvable') {
|
|
299
|
+
outputContractFailure({
|
|
300
|
+
error: 'expired_extract_scope',
|
|
301
|
+
outcomeType: 'binding_stale',
|
|
302
|
+
message: 'Extraction failed because the requested snapshot scope expired before it could be rebound.',
|
|
303
|
+
reason: `Snapshot scope ${scopeRef} is no longer present in the current visible page state.`,
|
|
304
|
+
scopeRef,
|
|
305
|
+
pageRef,
|
|
306
|
+
staleScope: true,
|
|
307
|
+
staleReason: 'snapshot-scope-expired',
|
|
308
|
+
});
|
|
309
|
+
}
|
|
259
310
|
throw error;
|
|
260
311
|
}
|
|
261
312
|
}
|
|
@@ -307,6 +358,9 @@ export async function extract(session, schemaJson, scopeRef) {
|
|
|
307
358
|
}
|
|
308
359
|
saveSession(session);
|
|
309
360
|
}
|
|
361
|
+
if (err instanceof Error && err.message.startsWith('outputContractFailure:')) {
|
|
362
|
+
throw err;
|
|
363
|
+
}
|
|
310
364
|
if (!staleScope && err instanceof AgentpayStructuredOutputTruncatedError) {
|
|
311
365
|
outputContractFailure({
|
|
312
366
|
error: 'extract_output_truncated',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe-persistence.d.ts","sourceRoot":"","sources":["../../src/commands/observe-persistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AASnD,OAAO,KAAK,EAAoB,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAQhE,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,iBAAiB,EACzB,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAuF/B;AAED,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,aAAa,CAAC,iBAAiB,CAAC,EAC5C,OAAO,EAAE,gBAAgB,EAAE,GAC1B,IAAI,CAYN;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,CAAC,iBAAiB,CAAC,EACzC,OAAO,CAAC,EAAE;IACR,gBAAgB,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC;IACjE,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC1C,GACA;IACD,cAAc,EAAE,iBAAiB,EAAE,CAAC;IACpC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,
|
|
1
|
+
{"version":3,"file":"observe-persistence.d.ts","sourceRoot":"","sources":["../../src/commands/observe-persistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AASnD,OAAO,KAAK,EAAoB,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAQhE,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,iBAAiB,EACzB,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAuF/B;AAED,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,aAAa,CAAC,iBAAiB,CAAC,EAC5C,OAAO,EAAE,gBAAgB,EAAE,GAC1B,IAAI,CAYN;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,CAAC,iBAAiB,CAAC,EACzC,OAAO,CAAC,EAAE;IACR,gBAAgB,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC;IACjE,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC1C,GACA;IACD,cAAc,EAAE,iBAAiB,EAAE,CAAC;IACpC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAkEA;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,GAC5D,IAAI,CAsBN;AAUD,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,aAAa,CAAC,iBAAiB,CAAC,EAC5C,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,CAAC,EACjD,cAAc,EAAE,aAAa,CAAC,iBAAiB,CAAC,EAChD,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,iBAAiB,EAAE,CAyDrB"}
|
|
@@ -97,17 +97,24 @@ export function attachObservedTargetOwners(domTargets, targets) {
|
|
|
97
97
|
}
|
|
98
98
|
export function persistObservedSurfacesForPage(session, pageRef, targets, options) {
|
|
99
99
|
const runtime = ensureRuntimeState(session);
|
|
100
|
+
const pageScopeEpoch = runtime.pages[pageRef]?.scopeEpoch ?? 0;
|
|
100
101
|
const derivedSurfaces = collectSurfaceDescriptors(pageRef, targets);
|
|
101
102
|
const descriptors = new Map();
|
|
102
103
|
for (const surface of derivedSurfaces) {
|
|
103
|
-
descriptors.set(surface.surfaceId,
|
|
104
|
+
descriptors.set(surface.surfaceId, {
|
|
105
|
+
...surface,
|
|
106
|
+
scopeEpoch: pageScopeEpoch,
|
|
107
|
+
});
|
|
104
108
|
}
|
|
105
109
|
for (const surface of options?.allSurfaceInputs ?? []) {
|
|
106
110
|
if (!options?.explicitSurfaceIds?.has(surface.surfaceId)) {
|
|
107
111
|
continue;
|
|
108
112
|
}
|
|
109
113
|
if (!descriptors.has(surface.surfaceId)) {
|
|
110
|
-
descriptors.set(surface.surfaceId,
|
|
114
|
+
descriptors.set(surface.surfaceId, {
|
|
115
|
+
...surface,
|
|
116
|
+
scopeEpoch: pageScopeEpoch,
|
|
117
|
+
});
|
|
111
118
|
}
|
|
112
119
|
}
|
|
113
120
|
const observedScopes = replaceSurfacesForPage(session, pageRef, [...descriptors.values()], {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SurfaceDescriptor, TargetDescriptor, TargetValidationEvidence } from '../runtime-state.js';
|
|
1
|
+
import type { ExtractScopeLifetime, SurfaceDescriptor, TargetDescriptor, TargetValidationEvidence } from '../runtime-state.js';
|
|
2
2
|
import type { PersistedFillableForm, ProtectedBindingValueHint } from '../secrets/types.js';
|
|
3
3
|
import type { DomObservedTarget } from './observe-inventory.js';
|
|
4
4
|
import type { ObservedPageSignal } from './observe-signals.js';
|
|
@@ -41,7 +41,7 @@ export declare function compactTargets(targets: ReadonlyArray<Pick<TargetDescrip
|
|
|
41
41
|
source?: 'dom' | 'stagehand' | 'aria-snapshot' | 'cdp-ax';
|
|
42
42
|
}>;
|
|
43
43
|
export type CompactObservedTarget = ReturnType<typeof compactTargets>[number];
|
|
44
|
-
export declare function compactScopes(scopes: ReadonlyArray<Pick<SurfaceDescriptor, 'ref' | 'kind' | 'label' | 'availability' | 'parentSurfaceRef' | 'childSurfaceRefs' | 'targetRefs'>>): Array<{
|
|
44
|
+
export declare function compactScopes(scopes: ReadonlyArray<Pick<SurfaceDescriptor, 'ref' | 'kind' | 'label' | 'availability' | 'parentSurfaceRef' | 'childSurfaceRefs' | 'targetRefs' | 'extractScopeLifetime'>>): Array<{
|
|
45
45
|
ref: string;
|
|
46
46
|
kind?: string;
|
|
47
47
|
label?: string;
|
|
@@ -51,6 +51,7 @@ export declare function compactScopes(scopes: ReadonlyArray<Pick<SurfaceDescript
|
|
|
51
51
|
parentSurfaceRef?: string;
|
|
52
52
|
childSurfaceRefs?: string[];
|
|
53
53
|
targetRefs?: string[];
|
|
54
|
+
extractScopeLifetime?: ExtractScopeLifetime;
|
|
54
55
|
source: 'dom';
|
|
55
56
|
}>;
|
|
56
57
|
export type CompactObservedScope = {
|
|
@@ -62,13 +63,14 @@ export type CompactObservedScope = {
|
|
|
62
63
|
availabilityReason?: string;
|
|
63
64
|
parentSurfaceRef?: string;
|
|
64
65
|
childSurfaceRefs?: string[];
|
|
66
|
+
extractScopeLifetime?: ExtractScopeLifetime;
|
|
65
67
|
targets: CompactObservedTarget[];
|
|
66
68
|
source: 'dom' | 'stagehand' | 'aria-snapshot' | 'cdp-ax';
|
|
67
69
|
};
|
|
68
70
|
type BuildGroupedObserveScopesOptions = {
|
|
69
71
|
pageRef: string;
|
|
70
72
|
title?: string;
|
|
71
|
-
scopes: ReadonlyArray<Pick<SurfaceDescriptor, 'ref' | 'kind' | 'label' | 'availability' | 'parentSurfaceRef' | 'childSurfaceRefs'>>;
|
|
73
|
+
scopes: ReadonlyArray<Pick<SurfaceDescriptor, 'ref' | 'kind' | 'label' | 'availability' | 'parentSurfaceRef' | 'childSurfaceRefs' | 'extractScopeLifetime'>>;
|
|
72
74
|
targets: ReadonlyArray<Pick<TargetDescriptor, 'ref' | 'kind' | 'label' | 'displayLabel' | 'placeholder' | 'inputName' | 'inputType' | 'autocomplete' | 'validation' | 'context' | 'semantics' | 'structure' | 'capability' | 'availability' | 'surfaceRef'>>;
|
|
73
75
|
};
|
|
74
76
|
export declare function buildGroupedObserveScopes(options: BuildGroupedObserveScopesOptions): CompactObservedScope[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe-projection.d.ts","sourceRoot":"","sources":["../../src/commands/observe-projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI/D,MAAM,MAAM,yBAAyB,GAAG;IACtC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,iBAAiB,GAAG;IAC3D,iBAAiB,EAAE,QAAQ,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,0BAA0B,GAAG,yBAAyB,CAAC;AA+HnG,wBAAgB,cAAc,CAC5B,OAAO,EAAE,aAAa,CACpB,IAAI,CACF,gBAAgB,EACd,KAAK,GACL,MAAM,GACN,OAAO,GACP,cAAc,GACd,aAAa,GACb,WAAW,GACX,WAAW,GACX,cAAc,GACd,YAAY,GACZ,SAAS,GACT,WAAW,GACX,WAAW,GACX,YAAY,GACZ,cAAc,GACd,YAAY,CACf,CACF,GACA,KAAK,CAAC;IACP,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,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,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;IAClD,SAAS,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG,eAAe,GAAG,QAAQ,CAAC;CAC3D,CAAC,CAoBD;AAED,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9E,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,CACnB,IAAI,CACF,iBAAiB,EACf,KAAK,GACL,MAAM,GACN,OAAO,GACP,cAAc,GACd,kBAAkB,GAClB,kBAAkB,GAClB,YAAY,
|
|
1
|
+
{"version":3,"file":"observe-projection.d.ts","sourceRoot":"","sources":["../../src/commands/observe-projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -128,6 +128,7 @@ export function compactScopes(scopes) {
|
|
|
128
128
|
parentSurfaceRef: scope.parentSurfaceRef,
|
|
129
129
|
childSurfaceRefs: scope.childSurfaceRefs ? [...scope.childSurfaceRefs] : [],
|
|
130
130
|
targetRefs: scope.targetRefs ? [...scope.targetRefs] : [],
|
|
131
|
+
extractScopeLifetime: scope.extractScopeLifetime,
|
|
131
132
|
source: 'dom',
|
|
132
133
|
}));
|
|
133
134
|
}
|
|
@@ -162,6 +163,7 @@ export function buildGroupedObserveScopes(options) {
|
|
|
162
163
|
? scope.parentSurfaceRef
|
|
163
164
|
: undefined,
|
|
164
165
|
childSurfaceRefs: visibleChildSurfaceRefs,
|
|
166
|
+
extractScopeLifetime: scope.extractScopeLifetime,
|
|
165
167
|
targets: scopeTargets,
|
|
166
168
|
source: compactScopeSource(scopeTargets),
|
|
167
169
|
};
|
|
@@ -178,6 +180,7 @@ export function buildGroupedObserveScopes(options) {
|
|
|
178
180
|
capability: 'scope',
|
|
179
181
|
availability: 'available',
|
|
180
182
|
childSurfaceRefs: [],
|
|
183
|
+
extractScopeLifetime: 'snapshot',
|
|
181
184
|
targets: unscopedTargets,
|
|
182
185
|
source: compactScopeSource(unscopedTargets),
|
|
183
186
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe-surfaces.d.ts","sourceRoot":"","sources":["../../src/commands/observe-surfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
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,CA4CvF;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"}
|
|
@@ -12,6 +12,28 @@ const HIGH_SIGNAL_SCOPE_KINDS = new Set([
|
|
|
12
12
|
'floating-panel',
|
|
13
13
|
'sticky-panel',
|
|
14
14
|
]);
|
|
15
|
+
const SNAPSHOT_SCOPE_KINDS = new Set([
|
|
16
|
+
'dialog',
|
|
17
|
+
'listbox',
|
|
18
|
+
'menu',
|
|
19
|
+
'grid',
|
|
20
|
+
'tabpanel',
|
|
21
|
+
'popover',
|
|
22
|
+
'dropdown',
|
|
23
|
+
'datepicker',
|
|
24
|
+
'floating-panel',
|
|
25
|
+
'sticky-panel',
|
|
26
|
+
]);
|
|
27
|
+
function inferExtractScopeLifetime(kind, locatorCandidates) {
|
|
28
|
+
const normalizedKind = (kind ?? '').trim().toLowerCase();
|
|
29
|
+
if (SNAPSHOT_SCOPE_KINDS.has(normalizedKind)) {
|
|
30
|
+
return 'snapshot';
|
|
31
|
+
}
|
|
32
|
+
if (normalizedKind === 'form') {
|
|
33
|
+
return locatorCandidates.length > 0 ? 'durable' : 'snapshot';
|
|
34
|
+
}
|
|
35
|
+
return 'snapshot';
|
|
36
|
+
}
|
|
15
37
|
export function selectScopesForOutput(scopes, targets, preferredScopeRefs) {
|
|
16
38
|
if (scopes.length === 0) {
|
|
17
39
|
return [];
|
|
@@ -226,6 +248,7 @@ export function collectSurfaceDescriptors(pageRef, targets) {
|
|
|
226
248
|
locatorCandidates,
|
|
227
249
|
createdAt: existing?.createdAt ?? Date.now(),
|
|
228
250
|
pageSignature: existing?.pageSignature ?? target.pageSignature,
|
|
251
|
+
extractScopeLifetime: inferExtractScopeLifetime(existing?.kind ?? target.surfaceKind ?? 'surface', locatorCandidates),
|
|
229
252
|
});
|
|
230
253
|
}
|
|
231
254
|
for (const target of targets) {
|
|
@@ -255,6 +278,7 @@ export function collectSurfaceDescriptors(pageRef, targets) {
|
|
|
255
278
|
locatorCandidates,
|
|
256
279
|
createdAt: existing?.createdAt ?? Date.now(),
|
|
257
280
|
pageSignature: existing?.pageSignature ?? target.pageSignature,
|
|
281
|
+
extractScopeLifetime: inferExtractScopeLifetime('form', locatorCandidates),
|
|
258
282
|
});
|
|
259
283
|
}
|
|
260
284
|
return [...descriptors.values()];
|
|
@@ -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;
|
|
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;;;;iBA2TlC,CAAA;gBACE,CAAL;;;;CA5ToE,CAAC;AACtE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGrC,CAAC;AAEF,wBAAsB,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiUzF"}
|
package/dist/commands/observe.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* browse observe ["<instruction>"] — Discover available actions on the page.
|
|
3
3
|
*/
|
|
4
4
|
import { saveSession } from '../session.js';
|
|
5
|
-
import { ensureRuntimeState, incrementMetric, replaceTargetsForPage, setCurrentPage, } from '../runtime-state.js';
|
|
5
|
+
import { bumpPageScopeEpoch, ensureRuntimeState, incrementMetric, replaceTargetsForPage, setCurrentPage, } from '../runtime-state.js';
|
|
6
6
|
import { connectPlaywright, disconnectPlaywright, resolveCurrentPageContext, syncSessionPage, } from '../playwright-runtime.js';
|
|
7
7
|
import { outputContractFailure, outputJSON } from '../output.js';
|
|
8
8
|
import { domRuntimeResolution, stagehandRuntimeResolution } from '../runtime-resolution.js';
|
|
@@ -38,6 +38,7 @@ export async function observe(session, instruction) {
|
|
|
38
38
|
pageRef = resolvedPage.pageRef;
|
|
39
39
|
const page = resolvedPage.page;
|
|
40
40
|
const { url, title } = await syncSessionPage(session, pageRef, page);
|
|
41
|
+
bumpPageScopeEpoch(session, pageRef);
|
|
41
42
|
setCurrentPage(session, pageRef);
|
|
42
43
|
const collectedTargets = await collectDomTargets(page);
|
|
43
44
|
let observeAccessibilityStats;
|
|
@@ -103,6 +104,7 @@ export async function observe(session, instruction) {
|
|
|
103
104
|
pageRef = resolvedPage.pageRef;
|
|
104
105
|
const page = resolvedPage.page;
|
|
105
106
|
const { url, title } = await syncSessionPage(session, pageRef, page);
|
|
107
|
+
bumpPageScopeEpoch(session, pageRef);
|
|
106
108
|
setCurrentPage(session, pageRef);
|
|
107
109
|
const collectedTargets = await collectDomTargets(page, {
|
|
108
110
|
includeActivationAffordances: true,
|
|
@@ -208,6 +210,7 @@ export async function observe(session, instruction) {
|
|
|
208
210
|
pageRef = resolvedPage.pageRef;
|
|
209
211
|
const page = resolvedPage.page;
|
|
210
212
|
const { url, title } = await syncSessionPage(session, pageRef, page);
|
|
213
|
+
bumpPageScopeEpoch(session, pageRef);
|
|
211
214
|
setCurrentPage(session, pageRef);
|
|
212
215
|
const signals = compactSignals(await collectPageSignals(page).catch(() => []));
|
|
213
216
|
const actions = await withStagehand(session, async (stagehand) => {
|
package/dist/runtime-state.d.ts
CHANGED
|
@@ -107,7 +107,9 @@ export interface BrowsePageState {
|
|
|
107
107
|
title?: string;
|
|
108
108
|
targetId?: string;
|
|
109
109
|
openerPageRef?: string;
|
|
110
|
+
scopeEpoch: number;
|
|
110
111
|
}
|
|
112
|
+
export type ExtractScopeLifetime = 'durable' | 'snapshot';
|
|
111
113
|
export interface SurfaceDescriptor {
|
|
112
114
|
ref: string;
|
|
113
115
|
surfaceId: string;
|
|
@@ -125,6 +127,8 @@ export interface SurfaceDescriptor {
|
|
|
125
127
|
createdAt: number;
|
|
126
128
|
pageSignature?: string;
|
|
127
129
|
lifecycleReason?: string;
|
|
130
|
+
extractScopeLifetime?: ExtractScopeLifetime;
|
|
131
|
+
scopeEpoch?: number;
|
|
128
132
|
}
|
|
129
133
|
type SurfaceDescriptorInput = Omit<SurfaceDescriptor, 'ref' | 'lifecycle' | 'availability'> & {
|
|
130
134
|
ref?: string;
|
|
@@ -179,6 +183,8 @@ export declare function registerPage(session: BrowseSession, page?: Partial<Omit
|
|
|
179
183
|
makeCurrent?: boolean;
|
|
180
184
|
}): BrowsePageState;
|
|
181
185
|
export declare function updatePage(session: BrowseSession, pageRef: string, patch: Partial<Omit<BrowsePageState, 'pageRef' | 'createdAt' | 'updatedAt'>>): BrowsePageState;
|
|
186
|
+
export declare function getPageScopeEpoch(session: BrowseSession, pageRef: string): number;
|
|
187
|
+
export declare function bumpPageScopeEpoch(session: BrowseSession, pageRef: string): number;
|
|
182
188
|
export declare function setCurrentPage(session: BrowseSession, pageRef: string): void;
|
|
183
189
|
export declare function createTargetRef(session: BrowseSession): string;
|
|
184
190
|
export declare function createFillRef(session: BrowseSession): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-state.d.ts","sourceRoot":"","sources":["../src/runtime-state.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runtime-state.d.ts","sourceRoot":"","sources":["../src/runtime-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAU5B,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,OAAO,GACP,aAAa,GACb,MAAM,GACN,OAAO,GACP,QAAQ,GACR,KAAK,GACL,OAAO,CAAC;AAEZ,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC,GACvF,MAAM,CAQR;AAED,MAAM,WAAW,eAAe;IAC9B,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;IACnD,MAAM,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG,eAAe,GAAG,QAAQ,CAAC;CAC3D;AAED,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,OAAO,GAAG,eAAe,CAAC;AACxE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,GAAG,aAAa,CAAC;AAC/D,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,OAAO,GAAG,kBAAkB,GAAG,QAAQ,CAAC;AACvF,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AACjF,MAAM,MAAM,mBAAmB,GAC3B,YAAY,GACZ,QAAQ,GACR,YAAY,GACZ,iBAAiB,GACjB,SAAS,CAAC;AACd,MAAM,MAAM,sBAAsB,GAC9B,cAAc,GACd,WAAW,GACX,QAAQ,GACR,YAAY,GACZ,gBAAgB,GAChB,QAAQ,GACR,YAAY,GACZ,eAAe,CAAC;AAEpB,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;QACnC,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;KACpC,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,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,UAAU,EAAE,gBAAgB,CAAC;IAC7B,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,uBAAuB,CAAC;IACtC,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACtC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,KAAK,qBAAqB,GAAG,IAAI,CAC/B,gBAAgB,EAChB,KAAK,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,gBAAgB,CACvE,GAAG;IACF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,YAAY,CAAC,EAAE,uBAAuB,CAAC;IACvC,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACxC,CAAC;AA0KF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,UAAU,CAAC;AAE1D,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,uBAAuB,CAAC;IACtC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,KAAK,sBAAsB,GAAG,IAAI,CAAC,iBAAiB,EAAE,KAAK,GAAG,WAAW,GAAG,cAAc,CAAC,GAAG;IAC5F,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,YAAY,CAAC,EAAE,uBAAuB,CAAC;CACxC,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EACF,wBAAwB,GACxB,8BAA8B,GAC9B,kCAAkC,GAClC,iCAAiC,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,CAAC,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC3D,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACrD,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC5D,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACjE,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AAgFD,wBAAgB,kBAAkB,CAChC,WAAW,GAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,GAAG;IACnF,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,GACL,kBAAkB,CA4CpB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,kBAAkB,CAoC7E;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,aAAa,EACtB,IAAI,GAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,GAAG;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CAClB,GACL,eAAe,CAsBjB;AAED,wBAAgB,UAAU,CACxB,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,GAC3E,eAAe,CAejB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGjF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAclF;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAM5E;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAG9D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAG5D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAG/D;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,aAAa,CAAC,sBAAsB,CAAC,GACjD,iBAAiB,EAAE,CAUrB;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,aAAa,CAAC,sBAAsB,CAAC,EAClD,OAAO,GAAE;IACP,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACvB,GACL,iBAAiB,EAAE,CAkDrB;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,aAAa,CAAC,qBAAqB,CAAC,GAChD,gBAAgB,EAAE,CAUpB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,aAAa,CAAC,qBAAqB,CAAC,EACjD,OAAO,GAAE;IACP,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACvB,GACL,gBAAgB,EAAE,CAoEpB;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAG5F;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAG/F;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,qBAAqB,GAC9B,qBAAqB,CAIvB;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,MAAM,GACX,qBAAqB,GAAG,IAAI,CAG9B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,aAAa,CAAC,qBAAqB,CAAC,GAC1C,qBAAqB,EAAE,CAOzB;AAYD,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,EAC5D,OAAO,GAAE;IACP,uBAAuB,CAAC,EAAE,OAAO,CAAC;CAC9B,GACL,qBAAqB,EAAE,CA0CzB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,GACd,qBAAqB,GAAG,IAAI,CAG9B;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,oBAAoB,GAC7B,oBAAoB,CAItB;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,MAAM,GACf,oBAAoB,GAAG,IAAI,CAG7B;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,sBAAsB,GAC/B,sBAAsB,CAKxB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,GACd,sBAAsB,GAAG,IAAI,CAG/B;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CASrF;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,GAAG,WAAW,CAAC,CAAC,GAC3D,iBAAiB,GAAG,IAAI,CAiB1B;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,eAAe,EAC1B,MAAM,CAAC,EAAE,MAAM,GACd,iBAAiB,GAAG,IAAI,CAK1B;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,kBAAkB,EACzB,MAAM,CAAC,EAAE,MAAM,GACd,iBAAiB,GAAG,IAAI,CAO1B;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAG5E;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,GAAG,WAAW,CAAC,CAAC,GAC1D,gBAAgB,GAAG,IAAI,CAkBzB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,eAAe,EAC1B,MAAM,CAAC,EAAE,MAAM,GACd,gBAAgB,GAAG,IAAI,CAKzB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,kBAAkB,EACzB,MAAM,CAAC,EAAE,MAAM,GACd,gBAAgB,GAAG,IAAI,CAOzB;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,gBAAgB,EAAE,CAEtE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,iBAAiB,EAAE,CAExE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAwB3E;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,oBAAoB,EAClC,EAAE,SAAI,GACL,MAAM,CAIR;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,GACjB,oBAAoB,CActB"}
|
package/dist/runtime-state.js
CHANGED
|
@@ -201,6 +201,7 @@ export function createRuntimeState(initialPage = {}) {
|
|
|
201
201
|
url: initialPage.url,
|
|
202
202
|
title: initialPage.title,
|
|
203
203
|
openerPageRef: initialPage.openerPageRef,
|
|
204
|
+
scopeEpoch: 0,
|
|
204
205
|
},
|
|
205
206
|
},
|
|
206
207
|
surfaces: {},
|
|
@@ -253,6 +254,9 @@ export function ensureRuntimeState(session) {
|
|
|
253
254
|
session.runtime.counters.nextPage = Math.max(session.runtime.counters.nextPage, nextPage);
|
|
254
255
|
}
|
|
255
256
|
}
|
|
257
|
+
for (const page of Object.values(session.runtime.pages ?? {})) {
|
|
258
|
+
page.scopeEpoch ??= 0;
|
|
259
|
+
}
|
|
256
260
|
for (const surfaceRef of Object.keys(session.runtime.surfaces ?? {})) {
|
|
257
261
|
syncSurfaceCounter(session.runtime, surfaceRef);
|
|
258
262
|
}
|
|
@@ -277,6 +281,7 @@ export function registerPage(session, page = {}) {
|
|
|
277
281
|
title: page.title ?? existing?.title,
|
|
278
282
|
targetId: page.targetId ?? existing?.targetId,
|
|
279
283
|
openerPageRef: page.openerPageRef ?? existing?.openerPageRef,
|
|
284
|
+
scopeEpoch: existing?.scopeEpoch ?? 0,
|
|
280
285
|
};
|
|
281
286
|
runtime.pages[pageRef] = nextPage;
|
|
282
287
|
if (page.makeCurrent !== false) {
|
|
@@ -293,11 +298,30 @@ export function updatePage(session, pageRef, patch) {
|
|
|
293
298
|
const nextPage = {
|
|
294
299
|
...current,
|
|
295
300
|
...patch,
|
|
301
|
+
scopeEpoch: patch.scopeEpoch ?? current.scopeEpoch ?? 0,
|
|
296
302
|
updatedAt: new Date().toISOString(),
|
|
297
303
|
};
|
|
298
304
|
runtime.pages[pageRef] = nextPage;
|
|
299
305
|
return nextPage;
|
|
300
306
|
}
|
|
307
|
+
export function getPageScopeEpoch(session, pageRef) {
|
|
308
|
+
const runtime = ensureRuntimeState(session);
|
|
309
|
+
return runtime.pages[pageRef]?.scopeEpoch ?? 0;
|
|
310
|
+
}
|
|
311
|
+
export function bumpPageScopeEpoch(session, pageRef) {
|
|
312
|
+
const runtime = ensureRuntimeState(session);
|
|
313
|
+
const current = runtime.pages[pageRef];
|
|
314
|
+
if (!current) {
|
|
315
|
+
throw new Error(`unknown_page_ref: ${pageRef}`);
|
|
316
|
+
}
|
|
317
|
+
const nextEpoch = (current.scopeEpoch ?? 0) + 1;
|
|
318
|
+
runtime.pages[pageRef] = {
|
|
319
|
+
...current,
|
|
320
|
+
scopeEpoch: nextEpoch,
|
|
321
|
+
updatedAt: new Date().toISOString(),
|
|
322
|
+
};
|
|
323
|
+
return nextEpoch;
|
|
324
|
+
}
|
|
301
325
|
export function setCurrentPage(session, pageRef) {
|
|
302
326
|
const runtime = ensureRuntimeState(session);
|
|
303
327
|
if (!runtime.pages[pageRef]) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nuanu-ai/agentbrowse",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.28",
|
|
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": [
|