@nuanu-ai/agentbrowse 0.2.13 → 0.2.14

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.
@@ -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":"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"}
@@ -1640,8 +1640,49 @@ async function collectDomTargetsFromDocument(context, options) {
1640
1640
  };
1641
1641
  };
1642
1642
 
1643
+ const surfacePositionTraitsOf = (surface) => {
1644
+ if (!isHTMLElementNode(surface) || !isVisible(surface)) return undefined;
1645
+
1646
+ const style = window.getComputedStyle(surface);
1647
+ const position = (style.position || '').toLowerCase();
1648
+ const rect = surface.getBoundingClientRect();
1649
+ const interactiveCount = visibleInteractiveDescendantCountOf(surface);
1650
+ const viewportArea = Math.max(window.innerWidth * window.innerHeight, 1);
1651
+ const coverage = (rect.width * rect.height) / viewportArea;
1652
+ const zIndexValue = Number(style.zIndex || '0');
1653
+ const hasCardChrome =
1654
+ style.boxShadow !== 'none' ||
1655
+ parseFloat(style.borderTopWidth || '0') > 0 ||
1656
+ parseFloat(style.borderRightWidth || '0') > 0 ||
1657
+ parseFloat(style.borderBottomWidth || '0') > 0 ||
1658
+ parseFloat(style.borderLeftWidth || '0') > 0 ||
1659
+ (style.backgroundColor &&
1660
+ style.backgroundColor !== 'transparent' &&
1661
+ style.backgroundColor !== 'rgba(0, 0, 0, 0)');
1662
+
1663
+ if (rect.width < 180 || rect.height < 72 || interactiveCount < 1 || coverage > 0.45) {
1664
+ return undefined;
1665
+ }
1666
+
1667
+ if (position === 'fixed') {
1668
+ return { kind: 'floating-panel', priority: 92 };
1669
+ }
1670
+
1671
+ if (position === 'sticky') {
1672
+ return { kind: 'sticky-panel', priority: 88 };
1673
+ }
1674
+
1675
+ if (position === 'absolute' && hasCardChrome && zIndexValue > 0) {
1676
+ return { kind: 'floating-panel', priority: 82 };
1677
+ }
1678
+
1679
+ return undefined;
1680
+ };
1681
+
1643
1682
  const inferSurfaceKind = (surface) => {
1644
1683
  if (!isHTMLElementNode(surface)) return undefined;
1684
+ const positionedSurface = surfacePositionTraitsOf(surface);
1685
+ if (positionedSurface?.kind) return positionedSurface.kind;
1645
1686
  const role = surface.getAttribute('role')?.trim();
1646
1687
  if (role === 'dialog') return 'dialog';
1647
1688
  if (role === 'listbox') return 'listbox';
@@ -1692,6 +1733,8 @@ async function collectDomTargetsFromDocument(context, options) {
1692
1733
 
1693
1734
  const surfacePriorityOf = (surface) => {
1694
1735
  if (!isHTMLElementNode(surface)) return 0;
1736
+ const positionedSurface = surfacePositionTraitsOf(surface);
1737
+ if (positionedSurface?.priority) return positionedSurface.priority;
1695
1738
  const role = surface.getAttribute('role')?.trim() || '';
1696
1739
  const className = (surface.getAttribute('class') || '').toLowerCase();
1697
1740
  if (role === 'dialog' || surface.getAttribute('aria-modal') === 'true') return 100;
@@ -11,4 +11,5 @@ export declare function persistObservedSurfacesForPage(session: BrowseSession, p
11
11
  surfaceRefMap: Map<string, string>;
12
12
  };
13
13
  export declare function reconcileObservedTargetsForPage(session: BrowseSession, pageRef: string, observedTargets: ReadonlyArray<Pick<TargetDescriptor, 'ref'>>): void;
14
+ export declare function linkObservedSurfaceGraph(session: BrowseSession, pageRef: string, domTargets: ReadonlyArray<DomObservedTarget>, persistedTargets: ReadonlyArray<TargetDescriptor>, observedScopes: ReadonlyArray<SurfaceDescriptor>, surfaceRefMap: ReadonlyMap<string, string>): SurfaceDescriptor[];
14
15
  //# sourceMappingURL=observe-persistence.d.ts.map
@@ -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;AAGhE,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,CAmF/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,CAgEA;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"}
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,CAmF/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,CAgEA;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,CAmDrB"}
@@ -1,5 +1,5 @@
1
1
  import { ensureRuntimeState, markSurfaceLifecycle, markTargetLifecycle, replaceSurfacesForPage, setSurfaceAvailability, setTargetAvailability, } from '../runtime-state.js';
2
- import { collectSurfaceDescriptors, pushUniqueLocatorCandidate, surfaceReplacementKey } from './observe-surfaces.js';
2
+ import { buildSyntheticFormSurfaceId, collectSurfaceDescriptors, pushUniqueLocatorCandidate, surfaceReplacementKey, } from './observe-surfaces.js';
3
3
  export function toDomDescriptor(pageRef, target, surfaceRefMap) {
4
4
  const locatorCandidates = [];
5
5
  if (target.role && target.label) {
@@ -168,3 +168,54 @@ export function reconcileObservedTargetsForPage(session, pageRef, observedTarget
168
168
  setTargetAvailability(session, target.ref, 'hidden', 'target-not-observed');
169
169
  }
170
170
  }
171
+ function pushUniqueRef(map, key, ref) {
172
+ const refs = map.get(key) ?? [];
173
+ if (!refs.includes(ref)) {
174
+ refs.push(ref);
175
+ map.set(key, refs);
176
+ }
177
+ }
178
+ export function linkObservedSurfaceGraph(session, pageRef, domTargets, persistedTargets, observedScopes, surfaceRefMap) {
179
+ const runtime = ensureRuntimeState(session);
180
+ const activeSurfaceRefs = new Set(observedScopes.map((scope) => scope.ref));
181
+ const targetRefsBySurface = new Map();
182
+ const parentBySurface = new Map();
183
+ const childRefsByParent = new Map();
184
+ for (const [index, persistedTarget] of persistedTargets.entries()) {
185
+ if (persistedTarget.pageRef !== pageRef) {
186
+ continue;
187
+ }
188
+ if (persistedTarget.surfaceRef) {
189
+ pushUniqueRef(targetRefsBySurface, persistedTarget.surfaceRef, persistedTarget.ref);
190
+ }
191
+ const domTarget = domTargets[index];
192
+ if (!domTarget) {
193
+ continue;
194
+ }
195
+ const syntheticFormSurfaceId = buildSyntheticFormSurfaceId(domTarget);
196
+ const formSurfaceRef = syntheticFormSurfaceId
197
+ ? surfaceRefMap.get(syntheticFormSurfaceId)
198
+ : undefined;
199
+ if (!formSurfaceRef || !persistedTarget.surfaceRef || persistedTarget.surfaceRef === formSurfaceRef) {
200
+ continue;
201
+ }
202
+ parentBySurface.set(persistedTarget.surfaceRef, formSurfaceRef);
203
+ pushUniqueRef(childRefsByParent, formSurfaceRef, persistedTarget.surfaceRef);
204
+ }
205
+ for (const surface of Object.values(runtime.surfaces)) {
206
+ if (surface.pageRef !== pageRef) {
207
+ continue;
208
+ }
209
+ runtime.surfaces[surface.ref] = {
210
+ ...surface,
211
+ parentSurfaceRef: activeSurfaceRefs.has(surface.ref)
212
+ ? parentBySurface.get(surface.ref)
213
+ : undefined,
214
+ childSurfaceRefs: activeSurfaceRefs.has(surface.ref)
215
+ ? [...(childRefsByParent.get(surface.ref) ?? [])]
216
+ : [],
217
+ targetRefs: activeSurfaceRefs.has(surface.ref) ? [...(targetRefsBySurface.get(surface.ref) ?? [])] : [],
218
+ };
219
+ }
220
+ return observedScopes.map((scope) => runtime.surfaces[scope.ref] ?? scope);
221
+ }
@@ -20,7 +20,7 @@ export type GoalObserveTargetCandidate = DomObservedTarget & {
20
20
  goalTargetKey: string;
21
21
  };
22
22
  export type GoalObserveInventoryCandidate = GoalObserveTargetCandidate | GoalObserveScopeCandidate;
23
- export declare function compactTargets(targets: ReadonlyArray<Pick<TargetDescriptor, 'ref' | 'kind' | 'label' | 'displayLabel' | 'placeholder' | 'inputName' | 'inputType' | 'autocomplete' | 'validation' | 'context' | 'semantics' | 'structure' | 'capability' | 'availability'>>): Array<{
23
+ export declare function compactTargets(targets: ReadonlyArray<Pick<TargetDescriptor, 'ref' | 'kind' | 'label' | 'displayLabel' | 'placeholder' | 'inputName' | 'inputType' | 'autocomplete' | 'validation' | 'context' | 'semantics' | 'structure' | 'capability' | 'availability' | 'surfaceRef'>>): Array<{
24
24
  ref: string;
25
25
  kind?: string;
26
26
  label?: string;
@@ -36,17 +36,41 @@ export declare function compactTargets(targets: ReadonlyArray<Pick<TargetDescrip
36
36
  capability?: TargetDescriptor['capability'];
37
37
  availability?: string;
38
38
  availabilityReason?: string;
39
+ surfaceRef?: string;
39
40
  source?: 'dom' | 'stagehand' | 'aria-snapshot' | 'cdp-ax';
40
41
  }>;
41
- export declare function compactScopes(scopes: ReadonlyArray<Pick<SurfaceDescriptor, 'ref' | 'kind' | 'label' | 'availability'>>): Array<{
42
+ export type CompactObservedTarget = ReturnType<typeof compactTargets>[number];
43
+ export declare function compactScopes(scopes: ReadonlyArray<Pick<SurfaceDescriptor, 'ref' | 'kind' | 'label' | 'availability' | 'parentSurfaceRef' | 'childSurfaceRefs' | 'targetRefs'>>): Array<{
42
44
  ref: string;
43
45
  kind?: string;
44
46
  label?: string;
45
47
  capability: 'scope';
46
48
  availability?: string;
47
49
  availabilityReason?: string;
50
+ parentSurfaceRef?: string;
51
+ childSurfaceRefs?: string[];
52
+ targetRefs?: string[];
48
53
  source: 'dom';
49
54
  }>;
55
+ export type CompactObservedScope = {
56
+ ref: string;
57
+ kind?: string;
58
+ label?: string;
59
+ capability: 'scope';
60
+ availability?: string;
61
+ availabilityReason?: string;
62
+ parentSurfaceRef?: string;
63
+ childSurfaceRefs?: string[];
64
+ targets: CompactObservedTarget[];
65
+ source: 'dom' | 'stagehand' | 'aria-snapshot' | 'cdp-ax';
66
+ };
67
+ type BuildGroupedObserveScopesOptions = {
68
+ pageRef: string;
69
+ title?: string;
70
+ scopes: ReadonlyArray<Pick<SurfaceDescriptor, 'ref' | 'kind' | 'label' | 'availability' | 'parentSurfaceRef' | 'childSurfaceRefs'>>;
71
+ targets: ReadonlyArray<Pick<TargetDescriptor, 'ref' | 'kind' | 'label' | 'displayLabel' | 'placeholder' | 'inputName' | 'inputType' | 'autocomplete' | 'validation' | 'context' | 'semantics' | 'structure' | 'capability' | 'availability' | 'surfaceRef'>>;
72
+ };
73
+ export declare function buildGroupedObserveScopes(options: BuildGroupedObserveScopesOptions): CompactObservedScope[];
50
74
  export declare function compactFillableForms(forms: ReadonlyArray<PersistedFillableForm>): Array<{
51
75
  fillRef: string;
52
76
  scopeRef?: string;
@@ -80,4 +104,5 @@ export declare function selectTargetsForGoalMatches(allTargets: ReadonlyArray<Do
80
104
  };
81
105
  export declare function buildExplicitScopeRefs(selectedSurfaceIds: ReadonlySet<string>, surfaceRefMap: ReadonlyMap<string, string>): Set<string>;
82
106
  export declare function projectPersistedTargetsForGoal(domTargets: ReadonlyArray<DomObservedTarget>, persistedTargets: ReadonlyArray<TargetDescriptor>, selectedTargets: ReadonlyArray<DomObservedTarget>): TargetDescriptor[];
107
+ export {};
83
108
  //# sourceMappingURL=observe-projection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"observe-projection.d.ts","sourceRoot":"","sources":["../../src/commands/observe-projection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"observe-projection.d.ts","sourceRoot":"","sources":["../../src/commands/observe-projection.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { observedTargetKey } from './observe-semantics.js';
2
- import { summarizeContext } from './observe-surfaces.js';
2
+ import { buildSyntheticFormSurfaceId, summarizeContext } from './observe-surfaces.js';
3
3
  function normalizeClusterText(value) {
4
4
  const normalized = value?.replace(/\s+/g, ' ').trim().toLowerCase();
5
5
  return normalized ? normalized : undefined;
@@ -110,6 +110,7 @@ export function compactTargets(targets) {
110
110
  capability: target.capability,
111
111
  availability: target.availability?.state,
112
112
  availabilityReason: target.availability?.reason,
113
+ surfaceRef: target.surfaceRef,
113
114
  source: target.semantics?.source,
114
115
  }));
115
116
  }
@@ -121,9 +122,64 @@ export function compactScopes(scopes) {
121
122
  capability: 'scope',
122
123
  availability: scope.availability?.state,
123
124
  availabilityReason: scope.availability?.reason,
125
+ parentSurfaceRef: scope.parentSurfaceRef,
126
+ childSurfaceRefs: scope.childSurfaceRefs ? [...scope.childSurfaceRefs] : [],
127
+ targetRefs: scope.targetRefs ? [...scope.targetRefs] : [],
124
128
  source: 'dom',
125
129
  }));
126
130
  }
131
+ function compactScopeSource(targets) {
132
+ return targets.find((target) => typeof target.source === 'string')?.source ?? 'dom';
133
+ }
134
+ export function buildGroupedObserveScopes(options) {
135
+ const compactedTargets = compactTargets(options.targets);
136
+ const scopeRefs = new Set(options.scopes.map((scope) => scope.ref));
137
+ const compactedTargetsByScope = new Map();
138
+ const unscopedTargets = [];
139
+ for (const target of compactedTargets) {
140
+ if (target.surfaceRef && scopeRefs.has(target.surfaceRef)) {
141
+ const grouped = compactedTargetsByScope.get(target.surfaceRef) ?? [];
142
+ grouped.push(target);
143
+ compactedTargetsByScope.set(target.surfaceRef, grouped);
144
+ continue;
145
+ }
146
+ unscopedTargets.push(target);
147
+ }
148
+ const groupedScopes = options.scopes.map((scope) => {
149
+ const scopeTargets = compactedTargetsByScope.get(scope.ref) ?? [];
150
+ const visibleChildSurfaceRefs = (scope.childSurfaceRefs ?? []).filter((ref) => scopeRefs.has(ref));
151
+ return {
152
+ ref: scope.ref,
153
+ kind: scope.kind,
154
+ label: scope.label,
155
+ capability: 'scope',
156
+ availability: scope.availability?.state,
157
+ availabilityReason: scope.availability?.reason,
158
+ parentSurfaceRef: scope.parentSurfaceRef && scopeRefs.has(scope.parentSurfaceRef)
159
+ ? scope.parentSurfaceRef
160
+ : undefined,
161
+ childSurfaceRefs: visibleChildSurfaceRefs,
162
+ targets: scopeTargets,
163
+ source: compactScopeSource(scopeTargets),
164
+ };
165
+ });
166
+ if (unscopedTargets.length === 0) {
167
+ return groupedScopes;
168
+ }
169
+ return [
170
+ ...groupedScopes,
171
+ {
172
+ ref: `page:${options.pageRef}`,
173
+ kind: 'page',
174
+ label: options.title ?? 'Page',
175
+ capability: 'scope',
176
+ availability: 'available',
177
+ childSurfaceRefs: [],
178
+ targets: unscopedTargets,
179
+ source: compactScopeSource(unscopedTargets),
180
+ },
181
+ ];
182
+ }
127
183
  export function compactFillableForms(forms) {
128
184
  return forms.map((form) => ({
129
185
  fillRef: form.fillRef,
@@ -171,11 +227,26 @@ export function buildGoalObserveInventoryCandidates(targets, surfaces) {
171
227
  siblingLabelsByCluster.set(clusterKey, labels);
172
228
  }
173
229
  }
174
- const targetCandidates = targets.map((target) => ({
175
- ...sanitizeGoalTargetContext(target, siblingLabelsByCluster),
176
- goalInventoryType: 'target',
177
- goalTargetKey: observedTargetKey(target),
178
- }));
230
+ const targetCandidates = targets.map((target) => {
231
+ const sanitized = sanitizeGoalTargetContext(target, siblingLabelsByCluster);
232
+ const syntheticFormSurfaceId = buildSyntheticFormSurfaceId(sanitized);
233
+ const surfaceRef = sanitized.surfaceRef ?? syntheticFormSurfaceId;
234
+ const surfaceKind = sanitized.surfaceKind ?? (syntheticFormSurfaceId ? 'form' : undefined);
235
+ const surfaceLabel = sanitized.surfaceLabel ??
236
+ (syntheticFormSurfaceId
237
+ ? sanitized.context?.landmark?.label ?? sanitized.context?.group?.label ?? 'Form'
238
+ : undefined);
239
+ const surfacePriority = sanitized.surfacePriority ?? (surfaceKind === 'form' ? 70 : undefined);
240
+ return {
241
+ ...sanitized,
242
+ surfaceRef,
243
+ surfaceKind,
244
+ surfaceLabel,
245
+ surfacePriority,
246
+ goalInventoryType: 'target',
247
+ goalTargetKey: observedTargetKey(target),
248
+ };
249
+ });
179
250
  const scopeCandidates = surfaces.map((surface) => {
180
251
  const linkedTargets = targets.filter((target) => target.surfaceRef === surface.surfaceId);
181
252
  const primaryLinkedTarget = linkedTargets[0];
@@ -241,7 +312,9 @@ export function selectTargetsForGoalMatches(allTargets, rerankedCandidates) {
241
312
  const scopeTargets = allTargets.filter((target) => {
242
313
  const directMatch = typeof target.ordinal === 'number' && directTargetOrdinals.has(target.ordinal);
243
314
  const directKeyMatch = directTargetKeys.has(observedTargetKey(target));
244
- const scopeMatch = target.surfaceRef ? selectedSurfaceIds.has(target.surfaceRef) : false;
315
+ const syntheticFormSurfaceId = buildSyntheticFormSurfaceId(target);
316
+ const scopeMatch = (target.surfaceRef ? selectedSurfaceIds.has(target.surfaceRef) : false) ||
317
+ (syntheticFormSurfaceId ? selectedSurfaceIds.has(syntheticFormSurfaceId) : false);
245
318
  if (directMatch || directKeyMatch) {
246
319
  return false;
247
320
  }
@@ -1 +1 @@
1
- {"version":3,"file":"observe-semantics.d.ts","sourceRoot":"","sources":["../../src/commands/observe-semantics.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAGhE,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAYjF;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CA6B7E;AAgBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAQ/E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAMnE;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,aAAa,CAAC,iBAAiB,CAAC,EACzC,eAAe,EAAE,aAAa,CAAC,iBAAiB,CAAC,GAChD,iBAAiB,EAAE,CAyCrB;AAkFD,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,aAAa,CAAC,iBAAiB,CAAC,GAChD,iBAAiB,EAAE,CA6BrB;AAqBD,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,aAAa,CAAC,iBAAiB,CAAC,GACxC,iBAAiB,EAAE,CAuBrB;AAkGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,EAAE,CAmDjG;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,aAAa,CAAC,iBAAiB,CAAC,GACxC,iBAAiB,EAAE,CAsFrB"}
1
+ {"version":3,"file":"observe-semantics.d.ts","sourceRoot":"","sources":["../../src/commands/observe-semantics.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAGhE,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAYjF;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CA6B7E;AAgBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAQ/E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAMnE;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,aAAa,CAAC,iBAAiB,CAAC,EACzC,eAAe,EAAE,aAAa,CAAC,iBAAiB,CAAC,GAChD,iBAAiB,EAAE,CAyCrB;AAkFD,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,aAAa,CAAC,iBAAiB,CAAC,GAChD,iBAAiB,EAAE,CA6BrB;AAqBD,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,aAAa,CAAC,iBAAiB,CAAC,GACxC,iBAAiB,EAAE,CAuBrB;AAkGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,EAAE,CAiEjG;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,aAAa,CAAC,iBAAiB,CAAC,GACxC,iBAAiB,EAAE,CAsFrB"}
@@ -1,5 +1,5 @@
1
1
  import { inferAcceptancePolicyFromFacts, inferAllowedActionsFromFacts, inferAvailabilityFromFacts, inferControlFamilyFromFacts, } from '../control-semantics.js';
2
- import { buildSurfaceRef } from './observe-surfaces.js';
2
+ import { buildSurfaceRef, buildSyntheticFormSurfaceId } from './observe-surfaces.js';
3
3
  export function normalizeSemanticDuplicateLabel(target) {
4
4
  return (target.displayLabel ??
5
5
  target.label ??
@@ -299,9 +299,20 @@ export function annotateDomTargets(targets) {
299
299
  const availability = inferAvailability(target);
300
300
  const capability = inferCapability(target, allowedActions);
301
301
  const acceptancePolicy = inferAcceptancePolicy(target, allowedActions);
302
- const surfaceRef = buildSurfaceRef(target);
302
+ const explicitSurfaceRef = buildSurfaceRef(target);
303
+ const syntheticFormSurfaceRef = explicitSurfaceRef === undefined ? buildSyntheticFormSurfaceId(target) : undefined;
304
+ const surfaceRef = explicitSurfaceRef ?? syntheticFormSurfaceRef;
305
+ const surfaceKind = target.surfaceKind ?? (syntheticFormSurfaceRef ? 'form' : undefined);
306
+ const surfaceLabel = target.surfaceLabel ??
307
+ (syntheticFormSurfaceRef
308
+ ? target.context?.landmark?.label ?? target.context?.group?.label ?? 'Form'
309
+ : undefined);
310
+ const surfacePriority = target.surfacePriority ?? (surfaceKind === 'form' ? 70 : undefined);
303
311
  return {
304
312
  ...target,
313
+ surfaceKind,
314
+ surfaceLabel,
315
+ surfacePriority,
305
316
  capability,
306
317
  availability,
307
318
  allowedActions,
@@ -2,6 +2,7 @@ import type { LocatorCandidate, SurfaceDescriptor, TargetContext, TargetDescript
2
2
  import type { DomObservedTarget } from './observe-inventory.js';
3
3
  export declare function selectScopesForOutput(scopes: ReadonlyArray<SurfaceDescriptor>, targets: ReadonlyArray<Pick<TargetDescriptor, 'surfaceRef' | 'allowedActions' | 'acceptancePolicy'>>, preferredScopeRefs?: ReadonlySet<string>): SurfaceDescriptor[];
4
4
  export declare function buildSurfaceRef(target: DomObservedTarget): string | undefined;
5
+ export declare function buildSyntheticFormSurfaceId(target: Pick<DomObservedTarget, 'pageSignature' | 'framePath' | 'frameUrl' | 'formSelector' | 'context'>): string | undefined;
5
6
  export declare function surfaceReplacementKey(surface: Pick<SurfaceDescriptor, 'pageRef' | 'pageSignature' | 'framePath' | 'kind' | 'label'>): string;
6
7
  export declare function summarizeContext(context: TargetContext | undefined): string | undefined;
7
8
  export declare function pushUniqueLocatorCandidate(acc: LocatorCandidate[], candidate: LocatorCandidate | undefined): void;
@@ -1 +1 @@
1
- {"version":3,"file":"observe-surfaces.d.ts","sourceRoot":"","sources":["../../src/commands/observe-surfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAahE,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,CA+CrB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAa7E;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,oCAoC1C"}
1
+ {"version":3,"file":"observe-surfaces.d.ts","sourceRoot":"","sources":["../../src/commands/observe-surfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAgBhE,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,CA+CrB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAa7E;AAyBD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,GAAG,WAAW,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC,GACvG,MAAM,GAAG,SAAS,CAiBpB;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,oCAoE1C"}
@@ -1,5 +1,6 @@
1
1
  import { locatorCandidateKey } from '../runtime-state.js';
2
2
  const HIGH_SIGNAL_SCOPE_KINDS = new Set([
3
+ 'form',
3
4
  'dialog',
4
5
  'listbox',
5
6
  'menu',
@@ -8,6 +9,8 @@ const HIGH_SIGNAL_SCOPE_KINDS = new Set([
8
9
  'popover',
9
10
  'dropdown',
10
11
  'datepicker',
12
+ 'floating-panel',
13
+ 'sticky-panel',
11
14
  ]);
12
15
  export function selectScopesForOutput(scopes, targets, preferredScopeRefs) {
13
16
  if (scopes.length === 0) {
@@ -63,6 +66,39 @@ export function buildSurfaceRef(target) {
63
66
  target.surfaceLabel ?? '',
64
67
  ].join('|');
65
68
  }
69
+ function normalizeSurfaceText(value) {
70
+ const normalized = value?.replace(/\s+/g, ' ').trim();
71
+ return normalized ? normalized : undefined;
72
+ }
73
+ function semanticFormContextLabel(target) {
74
+ for (const node of [
75
+ target.context?.landmark,
76
+ target.context?.container,
77
+ target.context?.group,
78
+ target.context?.item,
79
+ ]) {
80
+ const kind = (node?.kind ?? '').trim().toLowerCase();
81
+ if (kind !== 'form') {
82
+ continue;
83
+ }
84
+ return normalizeSurfaceText(node?.label ?? node?.text);
85
+ }
86
+ return undefined;
87
+ }
88
+ export function buildSyntheticFormSurfaceId(target) {
89
+ const pageKey = normalizeSurfaceText(target.pageSignature);
90
+ if (!pageKey) {
91
+ return undefined;
92
+ }
93
+ const formKey = normalizeSurfaceText(target.formSelector) ??
94
+ semanticFormContextLabel(target)?.toLowerCase();
95
+ if (!formKey) {
96
+ return undefined;
97
+ }
98
+ const frameKey = target.framePath?.join('>') ??
99
+ (normalizeSurfaceText(target.frameUrl) ? `url:${normalizeSurfaceText(target.frameUrl)}` : 'top');
100
+ return `${pageKey}|${frameKey}|form|${formKey}`;
101
+ }
66
102
  export function surfaceReplacementKey(surface) {
67
103
  const pageKey = surface.pageSignature ?? surface.pageRef;
68
104
  const frameKey = surface.framePath?.join('>') ?? 'top';
@@ -191,5 +227,34 @@ export function collectSurfaceDescriptors(pageRef, targets) {
191
227
  pageSignature: existing?.pageSignature ?? target.pageSignature,
192
228
  });
193
229
  }
230
+ for (const target of targets) {
231
+ const surfaceId = buildSyntheticFormSurfaceId(target);
232
+ if (!surfaceId) {
233
+ continue;
234
+ }
235
+ const existing = descriptors.get(surfaceId);
236
+ const locatorCandidates = existing ? [...existing.locatorCandidates] : [];
237
+ const formSelector = target.formSelector?.trim();
238
+ if (formSelector) {
239
+ pushUniqueLocatorCandidate(locatorCandidates, {
240
+ strategy: formSelector.startsWith('xpath=') ? 'xpath' : 'css',
241
+ value: formSelector,
242
+ scope: 'root',
243
+ });
244
+ }
245
+ descriptors.set(surfaceId, {
246
+ surfaceId,
247
+ pageRef,
248
+ framePath: existing?.framePath ?? target.framePath,
249
+ frameUrl: existing?.frameUrl ?? target.frameUrl,
250
+ kind: 'form',
251
+ label: existing?.label ?? semanticFormContextLabel(target) ?? 'Form',
252
+ lifecycle: 'live',
253
+ availability: { state: 'available' },
254
+ locatorCandidates,
255
+ createdAt: existing?.createdAt ?? Date.now(),
256
+ pageSignature: existing?.pageSignature ?? target.pageSignature,
257
+ });
258
+ }
194
259
  return [...descriptors.values()];
195
260
  }
@@ -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;AAgDnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAU/D,eAAO,MAAM,yBAAyB;;;;iBAgQizE,CAAC;gBAAwB,CAAC;;;;;iBAAq7vE,CAAC;gBAAwB,CAAC;;;CAhQ3v0E,CAAC;AACtE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGrC,CAAC;AAEF,wBAAsB,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyPzF"}
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;AAgDnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAU/D,eAAO,MAAM,yBAAyB;;;;iBAyR+wD,CAAC;gBAAwB,CAAC;;;;;iBAAirzE,CAAC;gBAAwB,CAAC;;;CAzRr92E,CAAC;AACtE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGrC,CAAC;AAEF,wBAAsB,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkRzF"}
@@ -9,10 +9,10 @@ import { domRuntimeResolution, stagehandRuntimeResolution } from '../runtime-res
9
9
  import { withStagehand } from '../stagehand-runtime.js';
10
10
  import { normalizePageSignature } from './descriptor-validation.js';
11
11
  import { collectDomTargets, collectPageSignals, __testDomTargetCollection as inventoryDomTargetCollection, __testStagehandDescriptor as inventoryStagehandDescriptor, } from './observe-inventory.js';
12
- import { attachObservedTargetOwners, reconcileObservedTargetsForPage, persistObservedSurfacesForPage, toDomDescriptor, } from './observe-persistence.js';
12
+ import { attachObservedTargetOwners, linkObservedSurfaceGraph, reconcileObservedTargetsForPage, persistObservedSurfacesForPage, toDomDescriptor, } from './observe-persistence.js';
13
13
  import { clearProtectedFillableFormsForPage, persistProtectedFillableFormsForPage, } from './observe-protected.js';
14
14
  import { annotateDomTargets, compressSemanticallyDuplicateTargets, expandRerankedFormTargets, orderBySurfaceCompetition, prioritizeGoalActionTargets, } from './observe-semantics.js';
15
- import { buildExplicitScopeRefs, buildGoalObserveInventoryCandidates, compactFillableForms, compactScopes, compactSignals, compactTargets, projectPersistedTargetsForGoal, selectTargetsForGoalMatches, } from './observe-projection.js';
15
+ import { buildGroupedObserveScopes, buildExplicitScopeRefs, buildGoalObserveInventoryCandidates, compactFillableForms, compactSignals, projectPersistedTargetsForGoal, selectTargetsForGoalMatches, } from './observe-projection.js';
16
16
  import { collectSurfaceDescriptors, selectScopesForOutput } from './observe-surfaces.js';
17
17
  import { toStagehandDescriptor } from './observe-stagehand.js';
18
18
  import { rerankDomTargetsForGoal } from './semantic-observe.js';
@@ -42,6 +42,7 @@ export async function observe(session, instruction) {
42
42
  const targets = replaceTargetsForPage(session, pageRef, domTargets.map((target) => toDomDescriptor(pageRef, target, surfaceRefMap)));
43
43
  reconcileObservedTargetsForPage(session, pageRef, targets);
44
44
  attachObservedTargetOwners(domTargets, targets);
45
+ observedScopes = linkObservedSurfaceGraph(session, pageRef, domTargets, targets, observedScopes, surfaceRefMap);
45
46
  const fillableForms = await persistProtectedFillableFormsForPage(session, pageRef, url, targets, new Date().toISOString());
46
47
  saveSession(session);
47
48
  disconnectPlaywright(browser);
@@ -51,8 +52,12 @@ export async function observe(session, instruction) {
51
52
  pageRef,
52
53
  resolvedBy: 'dom',
53
54
  ...domRuntimeResolution(),
54
- scopes: compactScopes(selectScopesForOutput(observedScopes, targets)),
55
- targets: compactTargets(targets),
55
+ scopes: buildGroupedObserveScopes({
56
+ pageRef,
57
+ title,
58
+ scopes: selectScopesForOutput(observedScopes, targets),
59
+ targets,
60
+ }),
56
61
  signals,
57
62
  fillableForms: compactFillableForms(fillableForms),
58
63
  metrics: session.runtime?.metrics,
@@ -92,6 +97,7 @@ export async function observe(session, instruction) {
92
97
  const targets = replaceTargetsForPage(session, pageRef, domTargets.map((target) => toDomDescriptor(pageRef, target, surfaceRefMap)));
93
98
  reconcileObservedTargetsForPage(session, pageRef, targets);
94
99
  attachObservedTargetOwners(domTargets, targets);
100
+ observedScopes = linkObservedSurfaceGraph(session, pageRef, domTargets, targets, observedScopes, surfaceRefMap);
95
101
  const fillableForms = await persistProtectedFillableFormsForPage(session, pageRef, url, targets, new Date().toISOString());
96
102
  if (selectedTargets.length > 0 || selectedSurfaceIds.size > 0) {
97
103
  const explicitScopeRefs = buildExplicitScopeRefs(selectedSurfaceIds, surfaceRefMap);
@@ -104,8 +110,12 @@ export async function observe(session, instruction) {
104
110
  pageRef,
105
111
  resolvedBy: 'dom-rerank',
106
112
  ...domRuntimeResolution(),
107
- scopes: compactScopes(selectScopesForOutput(observedScopes, projectedTargets, explicitScopeRefs)),
108
- targets: compactTargets(projectedTargets),
113
+ scopes: buildGroupedObserveScopes({
114
+ pageRef,
115
+ title,
116
+ scopes: selectScopesForOutput(observedScopes, projectedTargets, explicitScopeRefs),
117
+ targets: projectedTargets,
118
+ }),
109
119
  signals,
110
120
  fillableForms: compactFillableForms(fillableForms),
111
121
  metrics: session.runtime?.metrics,
@@ -123,7 +133,6 @@ export async function observe(session, instruction) {
123
133
  resolvedBy: 'dom-rerank',
124
134
  ...domRuntimeResolution(),
125
135
  scopes: [],
126
- targets: [],
127
136
  signals,
128
137
  fillableForms: compactFillableForms(fillableForms),
129
138
  metrics: session.runtime?.metrics,
@@ -176,8 +185,12 @@ export async function observe(session, instruction) {
176
185
  resolvedBy: 'stagehand-observe',
177
186
  ...stagehandRuntimeResolution(stagehandFallbackReason ?? 'deterministic-observe-failed'),
178
187
  deterministicObserveError: domPassError ?? undefined,
179
- scopes: compactScopes(selectScopesForOutput(observedScopes, targets)),
180
- targets: compactTargets(targets),
188
+ scopes: buildGroupedObserveScopes({
189
+ pageRef,
190
+ title,
191
+ scopes: selectScopesForOutput(observedScopes, targets),
192
+ targets,
193
+ }),
181
194
  signals,
182
195
  fillableForms: compactFillableForms(fillableForms),
183
196
  metrics: session.runtime?.metrics,
@@ -9,6 +9,7 @@ export declare const outputFailureMock: ViMock;
9
9
  export declare const outputJSONMock: ViMock;
10
10
  export declare const rerankDomTargetsForGoalMock: ViMock;
11
11
  export declare const saveSessionMock: ViMock;
12
+ export declare const outputJSONRawPayloads: unknown[];
12
13
  export declare const observe: typeof import("./observe.js").observe, __testDomTargetCollection: {
13
14
  collectDomTargetsFromDocument: (context: {
14
15
  evaluate<T>(pageFunction: string): Promise<T>;
@@ -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;AAmBvC,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;AA+B7D,eAAO,MAAQ,OAAO,yCAAE,yBAAyB;;;;iBAoEo/R,CAAC;gBAAwB,CAAC;;;;;iBAAq7vE,CAAC;gBAAwB,CAAC;;;GApE39hF,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,CAwB9C"}
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;;;;iBAqEs+O,CAAC;gBAAwB,CAAC;;;;;iBAAirzE,CAAC;gBAAwB,CAAC;;;GArEzsiF,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,21 +1,56 @@
1
1
  import { afterEach, beforeEach, vi } from 'vitest';
2
2
  import { registerPage } from '../runtime-state.js';
3
- const mocks = vi.hoisted(() => ({
4
- connectOverCDPMock: vi.fn(),
5
- connectStagehandMock: vi.fn(),
6
- outputContractFailureMock: vi.fn((payload) => {
7
- throw new Error(`outputContractFailure:${JSON.stringify(payload)}`);
8
- }),
9
- outputErrorMock: vi.fn((message) => {
10
- throw new Error(message);
11
- }),
12
- outputFailureMock: vi.fn((payload) => {
13
- throw new Error(`outputFailure:${JSON.stringify(payload)}`);
14
- }),
15
- outputJSONMock: vi.fn(),
16
- rerankDomTargetsForGoalMock: vi.fn(async (..._args) => []),
17
- saveSessionMock: vi.fn(),
18
- }));
3
+ function flattenObservedTargetsForTests(payload) {
4
+ return payload.scopes?.flatMap((scope) => scope.targets ?? []) ?? [];
5
+ }
6
+ function normalizeObservedOutputForTests(payload) {
7
+ if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {
8
+ return payload;
9
+ }
10
+ const typedPayload = payload;
11
+ if (Array.isArray(typedPayload.targets)) {
12
+ return payload;
13
+ }
14
+ if (!Array.isArray(typedPayload.scopes)) {
15
+ return payload;
16
+ }
17
+ return {
18
+ ...typedPayload,
19
+ targets: flattenObservedTargetsForTests(typedPayload),
20
+ };
21
+ }
22
+ const mocks = vi.hoisted(() => {
23
+ const outputJSONRawPayloads = [];
24
+ return {
25
+ connectOverCDPMock: vi.fn(),
26
+ connectStagehandMock: vi.fn(),
27
+ outputContractFailureMock: vi.fn((payload) => {
28
+ throw new Error(`outputContractFailure:${JSON.stringify(payload)}`);
29
+ }),
30
+ outputErrorMock: vi.fn((message) => {
31
+ throw new Error(message);
32
+ }),
33
+ outputFailureMock: vi.fn((payload) => {
34
+ throw new Error(`outputFailure:${JSON.stringify(payload)}`);
35
+ }),
36
+ outputJSONRawPayloads,
37
+ outputJSONMock: vi.fn((payload) => {
38
+ outputJSONRawPayloads.push(payload && typeof payload === 'object' ? JSON.parse(JSON.stringify(payload)) : payload);
39
+ const normalized = normalizeObservedOutputForTests(payload);
40
+ if (normalized &&
41
+ payload &&
42
+ typeof normalized === 'object' &&
43
+ typeof payload === 'object' &&
44
+ !Array.isArray(normalized) &&
45
+ !Array.isArray(payload)) {
46
+ Object.assign(payload, normalized);
47
+ }
48
+ return normalized;
49
+ }),
50
+ rerankDomTargetsForGoalMock: vi.fn(async (..._args) => []),
51
+ saveSessionMock: vi.fn(),
52
+ };
53
+ });
19
54
  export const connectOverCDPMock = mocks.connectOverCDPMock;
20
55
  export const connectStagehandMock = mocks.connectStagehandMock;
21
56
  export const outputContractFailureMock = mocks.outputContractFailureMock;
@@ -24,6 +59,7 @@ export const outputFailureMock = mocks.outputFailureMock;
24
59
  export const outputJSONMock = mocks.outputJSONMock;
25
60
  export const rerankDomTargetsForGoalMock = mocks.rerankDomTargetsForGoalMock;
26
61
  export const saveSessionMock = mocks.saveSessionMock;
62
+ export const outputJSONRawPayloads = mocks.outputJSONRawPayloads;
27
63
  vi.mock('playwright-core', () => ({
28
64
  chromium: {
29
65
  connectOverCDP: connectOverCDPMock,
@@ -95,6 +131,7 @@ export function installObserveTestHooks() {
95
131
  throw new Error(`outputFailure:${JSON.stringify(payload)}`);
96
132
  });
97
133
  outputJSONMock.mockClear();
134
+ outputJSONRawPayloads.length = 0;
98
135
  rerankDomTargetsForGoalMock.mockReset();
99
136
  rerankDomTargetsForGoalMock.mockResolvedValue([]);
100
137
  saveSessionMock.mockReset();
@@ -13,6 +13,8 @@ type ObserveInventoryTarget = {
13
13
  acceptancePolicy?: TargetAcceptancePolicy;
14
14
  controlFamily?: TargetControlFamily;
15
15
  surfaceRef?: string;
16
+ surfaceKind?: string;
17
+ surfaceLabel?: string;
16
18
  surfacePriority?: number;
17
19
  structure?: TargetStructure;
18
20
  framePath?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"semantic-observe.d.ts","sourceRoot":"","sources":["../../src/commands/semantic-observe.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAE7B,KAAK,sBAAsB,GAAG;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACvC,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AA0UF,wBAAsB,uBAAuB,CAAC,CAAC,SAAS,sBAAsB,EAC5E,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,EAAE,CAAC,CAkDd"}
1
+ {"version":3,"file":"semantic-observe.d.ts","sourceRoot":"","sources":["../../src/commands/semantic-observe.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAE7B,KAAK,sBAAsB,GAAG;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACvC,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AA4UF,wBAAsB,uBAAuB,CAAC,CAAC,SAAS,sBAAsB,EAC5E,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,EAAE,CAAC,CAkDd"}
@@ -244,6 +244,10 @@ function buildCandidateSummary(target, index) {
244
244
  }
245
245
  if (target.surfaceRef)
246
246
  parts.push(`surfaceRef=${JSON.stringify(target.surfaceRef)}`);
247
+ if (target.surfaceKind)
248
+ parts.push(`surfaceKind=${JSON.stringify(target.surfaceKind)}`);
249
+ if (target.surfaceLabel)
250
+ parts.push(`surfaceLabel=${JSON.stringify(target.surfaceLabel)}`);
247
251
  if (typeof target.surfacePriority === 'number') {
248
252
  parts.push(`surfacePriority=${JSON.stringify(target.surfacePriority)}`);
249
253
  }
@@ -116,6 +116,9 @@ export interface SurfaceDescriptor {
116
116
  frameUrl?: string;
117
117
  kind?: string;
118
118
  label?: string;
119
+ parentSurfaceRef?: string;
120
+ childSurfaceRefs?: string[];
121
+ targetRefs?: string[];
119
122
  lifecycle: TargetLifecycle;
120
123
  availability: TargetAvailabilityState;
121
124
  locatorCandidates: LocatorCandidate[];
@@ -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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"}
@@ -135,6 +135,8 @@ function normalizeSurfaceDescriptor(descriptor, ref) {
135
135
  return {
136
136
  ...descriptor,
137
137
  ref,
138
+ childSurfaceRefs: descriptor.childSurfaceRefs ? [...descriptor.childSurfaceRefs] : [],
139
+ targetRefs: descriptor.targetRefs ? [...descriptor.targetRefs] : [],
138
140
  lifecycle: descriptor.lifecycle ?? 'live',
139
141
  availability: inferSurfaceAvailability(descriptor),
140
142
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuanu-ai/agentbrowse",
3
- "version": "0.2.13",
3
+ "version": "0.2.14",
4
4
  "type": "module",
5
5
  "description": "Standalone browser automation CLI for AI agents: launch, observe, act, extract, and solve captcha",
6
6
  "keywords": [