@nuanu-ai/agentbrowse 0.2.26 → 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/close.js +6 -6
- 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/launch.d.ts.map +1 -1
- package/dist/commands/launch.js +6 -25
- 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/owned-browser.d.ts +10 -0
- package/dist/owned-browser.d.ts.map +1 -0
- package/dist/owned-browser.js +58 -0
- package/dist/owned-process.d.ts.map +1 -1
- package/dist/owned-process.js +13 -2
- 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/dist/solver/browser-launcher.d.ts +1 -0
- package/dist/solver/browser-launcher.d.ts.map +1 -1
- package/dist/solver/browser-launcher.js +1 -0
- package/dist/stagehand.d.ts +0 -2
- package/dist/stagehand.d.ts.map +1 -1
- package/dist/stagehand.js +0 -13
- 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();
|
package/dist/commands/close.js
CHANGED
|
@@ -3,25 +3,25 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { loadSession, deleteSession } from '../session.js';
|
|
5
5
|
import { info } from '../output.js';
|
|
6
|
-
import {
|
|
6
|
+
import { closeOwnedBrowser } from '../owned-browser.js';
|
|
7
7
|
function isOwnedSessionRecord(session) {
|
|
8
8
|
return session?.identity?.ownership === 'agentbrowse';
|
|
9
9
|
}
|
|
10
10
|
export async function close() {
|
|
11
11
|
const session = loadSession();
|
|
12
12
|
if (isOwnedSessionRecord(session)) {
|
|
13
|
-
const
|
|
14
|
-
if (
|
|
15
|
-
info(`Owned browser
|
|
13
|
+
const closeResult = await closeOwnedBrowser(session);
|
|
14
|
+
if (!closeResult.success) {
|
|
15
|
+
info(`Owned browser close failed; keeping session record: ${closeResult.reason}`);
|
|
16
16
|
return {
|
|
17
17
|
success: false,
|
|
18
18
|
error: 'browser_close_failed',
|
|
19
19
|
outcomeType: 'blocked',
|
|
20
20
|
message: 'Browser close failed.',
|
|
21
|
-
reason:
|
|
21
|
+
reason: closeResult.reason,
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
|
-
info(`
|
|
24
|
+
info(`Closed owned browser via ${closeResult.method}`);
|
|
25
25
|
}
|
|
26
26
|
if (session) {
|
|
27
27
|
deleteSession();
|
|
@@ -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":"launch.d.ts","sourceRoot":"","sources":["../../src/commands/launch.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../src/commands/launch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAYvE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,SAAS,CAAC;IACnB,mBAAmB,EAAE,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,uBAAuB,CAAC;IAC/B,WAAW,EAAE,SAAS,CAAC;IACvB,OAAO,EAAE,wBAAwB,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;AAErE,wBAAsB,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAazF"}
|
package/dist/commands/launch.js
CHANGED
|
@@ -5,11 +5,11 @@ import { readConfig } from '../solver/config.js';
|
|
|
5
5
|
import { ensureProfile } from '../solver/profile-manager.js';
|
|
6
6
|
import { launchSolver } from '../solver/browser-launcher.js';
|
|
7
7
|
import { buildOwnedSession, isOwnedSession, loadSession, saveSession } from '../session.js';
|
|
8
|
-
import { findChromePid } from '../stagehand.js';
|
|
9
8
|
import { applyAgentpayGatewayEnv, tryResolveAgentpayGatewayConfig } from '../agentpay-gateway.js';
|
|
10
9
|
import { connectPlaywright, disconnectPlaywright, syncLaunchPage } from '../playwright-runtime.js';
|
|
11
10
|
import { summarizeSecretCatalog, syncSecretCatalogForUrl } from '../secrets/catalog-sync.js';
|
|
12
|
-
import {
|
|
11
|
+
import { closeOwnedBrowser } from '../owned-browser.js';
|
|
12
|
+
import { cleanupManagedBrowserPids } from '../owned-process.js';
|
|
13
13
|
import { info } from '../output.js';
|
|
14
14
|
const DEFAULT_PROFILE = 'default';
|
|
15
15
|
const COMPACT_WINDOW = {
|
|
@@ -33,9 +33,9 @@ async function cleanupOwnedSession() {
|
|
|
33
33
|
const excludePids = new Set();
|
|
34
34
|
if (isOwnedSession(existingSession)) {
|
|
35
35
|
excludePids.add(existingSession.pid);
|
|
36
|
-
const
|
|
37
|
-
if (
|
|
38
|
-
return buildLaunchFailure(new Error(
|
|
36
|
+
const closeResult = await closeOwnedBrowser(existingSession);
|
|
37
|
+
if (!closeResult.success) {
|
|
38
|
+
return buildLaunchFailure(new Error(closeResult.reason));
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
// Phase-1 ownership removed port-global prekill, so launch needs a second guardrail
|
|
@@ -58,19 +58,6 @@ function buildLaunchFailure(err) {
|
|
|
58
58
|
reason: formatUnknownError(err),
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
|
-
function getPortFromCdpUrl(cdpUrl) {
|
|
62
|
-
try {
|
|
63
|
-
const url = new URL(cdpUrl);
|
|
64
|
-
if (!url.port) {
|
|
65
|
-
return undefined;
|
|
66
|
-
}
|
|
67
|
-
const port = Number(url.port);
|
|
68
|
-
return Number.isFinite(port) && port > 0 ? port : undefined;
|
|
69
|
-
}
|
|
70
|
-
catch {
|
|
71
|
-
return undefined;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
61
|
async function launchManaged(url, profileName, headless, compact, proxyOverride, noProxy = false) {
|
|
75
62
|
let session;
|
|
76
63
|
let browser = null;
|
|
@@ -102,15 +89,9 @@ async function launchManaged(url, profileName, headless, compact, proxyOverride,
|
|
|
102
89
|
catch (err) {
|
|
103
90
|
return buildLaunchFailure(err);
|
|
104
91
|
}
|
|
105
|
-
const cdpPort = getPortFromCdpUrl(session.cdpUrl);
|
|
106
|
-
const chromePid = findChromePid(cdpPort);
|
|
107
|
-
if (!chromePid) {
|
|
108
|
-
await session.close().catch(() => undefined);
|
|
109
|
-
return buildLaunchFailure(new Error('Launched browser PID could not be resolved.'));
|
|
110
|
-
}
|
|
111
92
|
const persistedSession = buildOwnedSession({
|
|
112
93
|
cdpUrl: session.cdpUrl,
|
|
113
|
-
pid:
|
|
94
|
+
pid: session.pid,
|
|
114
95
|
profile: profileName,
|
|
115
96
|
launchedAt: new Date().toISOString(),
|
|
116
97
|
capabilities: {
|
|
@@ -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) => {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type BrowseSession } from './session.js';
|
|
2
|
+
export type CloseOwnedBrowserResult = {
|
|
3
|
+
success: true;
|
|
4
|
+
method: 'already_closed' | 'cdp' | 'signal';
|
|
5
|
+
} | {
|
|
6
|
+
success: false;
|
|
7
|
+
reason: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function closeOwnedBrowser(session: BrowseSession): Promise<CloseOwnedBrowserResult>;
|
|
10
|
+
//# sourceMappingURL=owned-browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owned-browser.d.ts","sourceRoot":"","sources":["../src/owned-browser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAKlE,MAAM,MAAM,uBAAuB,GAC/B;IACE,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,gBAAgB,GAAG,KAAK,GAAG,QAAQ,CAAC;CAC7C,GACD;IACE,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEN,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,uBAAuB,CAAC,CA2BlC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { connectPlaywright } from './playwright-runtime.js';
|
|
2
|
+
import { terminateOwnedPid } from './owned-process.js';
|
|
3
|
+
import { getSessionPort } from './session.js';
|
|
4
|
+
const ENDPOINT_WAIT_ATTEMPTS = 10;
|
|
5
|
+
const ENDPOINT_WAIT_MS = 100;
|
|
6
|
+
export async function closeOwnedBrowser(session) {
|
|
7
|
+
const port = getSessionPort(session);
|
|
8
|
+
const endpointAliveBeforeClose = await isBrowserEndpointAlive(port);
|
|
9
|
+
if (endpointAliveBeforeClose) {
|
|
10
|
+
await tryCloseBrowserViaCdp(session.cdpUrl);
|
|
11
|
+
if (await waitForBrowserEndpointToClose(port)) {
|
|
12
|
+
return { success: true, method: 'cdp' };
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
const termination = await terminateOwnedPid(session.pid);
|
|
16
|
+
if (await waitForBrowserEndpointToClose(port)) {
|
|
17
|
+
return {
|
|
18
|
+
success: true,
|
|
19
|
+
method: endpointAliveBeforeClose ? 'signal' : 'already_closed',
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
if (!endpointAliveBeforeClose && termination === 'not_found') {
|
|
23
|
+
return { success: true, method: 'already_closed' };
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
success: false,
|
|
27
|
+
reason: `Owned browser endpoint on port ${port} remained reachable after close attempts (termination=${termination}).`,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
async function tryCloseBrowserViaCdp(cdpUrl) {
|
|
31
|
+
try {
|
|
32
|
+
const browser = await connectPlaywright(cdpUrl);
|
|
33
|
+
await browser.close();
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async function isBrowserEndpointAlive(port) {
|
|
39
|
+
try {
|
|
40
|
+
const response = await fetch(`http://127.0.0.1:${port}/json/version`);
|
|
41
|
+
return response.ok;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async function waitForBrowserEndpointToClose(port) {
|
|
48
|
+
for (let attempt = 0; attempt < ENDPOINT_WAIT_ATTEMPTS; attempt++) {
|
|
49
|
+
if (!(await isBrowserEndpointAlive(port))) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
await sleep(ENDPOINT_WAIT_MS);
|
|
53
|
+
}
|
|
54
|
+
return !(await isBrowserEndpointAlive(port));
|
|
55
|
+
}
|
|
56
|
+
function sleep(ms) {
|
|
57
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
58
|
+
}
|
|
@@ -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,
|
|
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"}
|
package/dist/owned-process.js
CHANGED
|
@@ -23,17 +23,28 @@ export function isPidAlive(pid) {
|
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
export async function terminateOwnedPid(pid) {
|
|
26
|
+
const processGroupTermination = await terminateSignalTarget(-pid, pid);
|
|
27
|
+
if (processGroupTermination !== 'not_found') {
|
|
28
|
+
return processGroupTermination;
|
|
29
|
+
}
|
|
30
|
+
return terminateSignalTarget(pid, pid);
|
|
31
|
+
}
|
|
32
|
+
async function terminateSignalTarget(target, pid) {
|
|
26
33
|
try {
|
|
27
|
-
process.kill(
|
|
34
|
+
process.kill(target, 'SIGTERM');
|
|
28
35
|
}
|
|
29
36
|
catch (error) {
|
|
37
|
+
const code = getErrorCode(error);
|
|
38
|
+
if (target < 0 && code === 'ESRCH' && isPidAlive(pid)) {
|
|
39
|
+
return 'not_found';
|
|
40
|
+
}
|
|
30
41
|
return isPidAlive(pid) ? 'still_alive' : 'not_found';
|
|
31
42
|
}
|
|
32
43
|
if (await waitForPidExit(pid, TERM_WAIT_ATTEMPTS, TERM_WAIT_MS)) {
|
|
33
44
|
return 'terminated';
|
|
34
45
|
}
|
|
35
46
|
try {
|
|
36
|
-
process.kill(
|
|
47
|
+
process.kill(target, 'SIGKILL');
|
|
37
48
|
}
|
|
38
49
|
catch {
|
|
39
50
|
return isPidAlive(pid) ? 'still_alive' : 'sigkilled';
|
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":"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"}
|
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]) {
|
|
@@ -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;AAajF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC,CAAC;AAiBF,wBAAsB,YAAY,CAChC,OAAO,EAAE,WAAW,EACpB,IAAI,CAAC,EAAE,aAAa,GACnB,OAAO,CAAC,aAAa,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;AAajF,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;AAiBF,wBAAsB,YAAY,CAChC,OAAO,EAAE,WAAW,EACpB,IAAI,CAAC,EAAE,aAAa,GACnB,OAAO,CAAC,aAAa,CAAC,CAkExB"}
|
package/dist/stagehand.d.ts
CHANGED
|
@@ -10,6 +10,4 @@ export interface StagehandSession {
|
|
|
10
10
|
}
|
|
11
11
|
/** Connect to an existing browser via CDP URL. */
|
|
12
12
|
export declare function connectStagehand(cdpUrl: string): Promise<Stagehand>;
|
|
13
|
-
/** Find the PID of the Chrome process listening on CDP_PORT. */
|
|
14
|
-
export declare function findChromePid(port?: number): number | null;
|
|
15
13
|
//# sourceMappingURL=stagehand.d.ts.map
|
package/dist/stagehand.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stagehand.d.ts","sourceRoot":"","sources":["../src/stagehand.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"stagehand.d.ts","sourceRoot":"","sources":["../src/stagehand.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAIrD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,kDAAkD;AAClD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAezE"}
|
package/dist/stagehand.js
CHANGED
|
@@ -4,11 +4,9 @@
|
|
|
4
4
|
* For `launch`: Stagehand launches Chrome itself (port 9222).
|
|
5
5
|
* For all other commands: Stagehand connects to existing Chrome via cdpUrl.
|
|
6
6
|
*/
|
|
7
|
-
import { execSync } from 'node:child_process';
|
|
8
7
|
import { Stagehand } from '@browserbasehq/stagehand';
|
|
9
8
|
import { createAgentpayStagehandLlmClient } from './agentpay-stagehand-llm.js';
|
|
10
9
|
import { resolveAgentpayGatewayConfig } from './agentpay-gateway.js';
|
|
11
|
-
const DEFAULT_CDP_PORT = 9222;
|
|
12
10
|
/** Connect to an existing browser via CDP URL. */
|
|
13
11
|
export async function connectStagehand(cdpUrl) {
|
|
14
12
|
const gateway = resolveAgentpayGatewayConfig();
|
|
@@ -25,14 +23,3 @@ export async function connectStagehand(cdpUrl) {
|
|
|
25
23
|
await stagehand.init();
|
|
26
24
|
return stagehand;
|
|
27
25
|
}
|
|
28
|
-
/** Find the PID of the Chrome process listening on CDP_PORT. */
|
|
29
|
-
export function findChromePid(port = DEFAULT_CDP_PORT) {
|
|
30
|
-
try {
|
|
31
|
-
const out = execSync(`lsof -ti :${port}`, { encoding: 'utf-8' }).trim();
|
|
32
|
-
const first = out.split('\n')[0];
|
|
33
|
-
return first ? Number(first) : null;
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
}
|
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": [
|