@nuanu-ai/agentbrowse 0.2.7 → 0.2.8

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.
Files changed (191) hide show
  1. package/README.md +36 -8
  2. package/dist/agentpay-stagehand-llm.d.ts.map +1 -1
  3. package/dist/agentpay-stagehand-llm.js +5 -1
  4. package/dist/commands/act.d.ts +6 -2
  5. package/dist/commands/act.d.ts.map +1 -1
  6. package/dist/commands/act.js +840 -55
  7. package/dist/commands/act.test-harness.d.ts +19 -0
  8. package/dist/commands/act.test-harness.d.ts.map +1 -0
  9. package/dist/commands/act.test-harness.js +245 -0
  10. package/dist/commands/action-acceptance.d.ts +90 -0
  11. package/dist/commands/action-acceptance.d.ts.map +1 -0
  12. package/dist/commands/action-acceptance.js +1411 -0
  13. package/dist/commands/action-artifacts.d.ts +33 -0
  14. package/dist/commands/action-artifacts.d.ts.map +1 -0
  15. package/dist/commands/action-artifacts.js +104 -0
  16. package/dist/commands/action-execution-guards.d.ts +5 -0
  17. package/dist/commands/action-execution-guards.d.ts.map +1 -0
  18. package/dist/commands/action-execution-guards.js +3 -0
  19. package/dist/commands/action-executor-helpers.d.ts +21 -0
  20. package/dist/commands/action-executor-helpers.d.ts.map +1 -0
  21. package/dist/commands/action-executor-helpers.js +242 -0
  22. package/dist/commands/action-executor.d.ts +12 -0
  23. package/dist/commands/action-executor.d.ts.map +1 -0
  24. package/dist/commands/action-executor.js +45 -0
  25. package/dist/commands/action-fallbacks.d.ts +6 -0
  26. package/dist/commands/action-fallbacks.d.ts.map +1 -0
  27. package/dist/commands/action-fallbacks.js +43 -0
  28. package/dist/commands/action-value-projection.d.ts +32 -0
  29. package/dist/commands/action-value-projection.d.ts.map +1 -0
  30. package/dist/commands/action-value-projection.js +151 -0
  31. package/dist/commands/browse-actions.d.ts +4 -0
  32. package/dist/commands/browse-actions.d.ts.map +1 -0
  33. package/dist/commands/browse-actions.js +4 -0
  34. package/dist/commands/captcha-solve.d.ts.map +1 -1
  35. package/dist/commands/captcha-solve.js +13 -3
  36. package/dist/commands/click-action-executor.d.ts +10 -0
  37. package/dist/commands/click-action-executor.d.ts.map +1 -0
  38. package/dist/commands/click-action-executor.js +68 -0
  39. package/dist/commands/create-intent.d.ts +6 -0
  40. package/dist/commands/create-intent.d.ts.map +1 -0
  41. package/dist/commands/create-intent.js +75 -0
  42. package/dist/commands/datepicker-action-executor.d.ts +12 -0
  43. package/dist/commands/datepicker-action-executor.d.ts.map +1 -0
  44. package/dist/commands/datepicker-action-executor.js +218 -0
  45. package/dist/commands/descriptor-validation.d.ts +27 -0
  46. package/dist/commands/descriptor-validation.d.ts.map +1 -0
  47. package/dist/commands/descriptor-validation.js +333 -0
  48. package/dist/commands/extract-scope-resolution.d.ts +20 -0
  49. package/dist/commands/extract-scope-resolution.d.ts.map +1 -0
  50. package/dist/commands/extract-scope-resolution.js +100 -0
  51. package/dist/commands/extract-stagehand-executor.d.ts +17 -0
  52. package/dist/commands/extract-stagehand-executor.d.ts.map +1 -0
  53. package/dist/commands/extract-stagehand-executor.js +18 -0
  54. package/dist/commands/extract.d.ts +3 -2
  55. package/dist/commands/extract.d.ts.map +1 -1
  56. package/dist/commands/extract.js +256 -39
  57. package/dist/commands/fill-secret.d.ts +7 -0
  58. package/dist/commands/fill-secret.d.ts.map +1 -0
  59. package/dist/commands/fill-secret.js +371 -0
  60. package/dist/commands/get-secrets-catalog.d.ts +6 -0
  61. package/dist/commands/get-secrets-catalog.d.ts.map +1 -0
  62. package/dist/commands/get-secrets-catalog.js +23 -0
  63. package/dist/commands/launch.d.ts.map +1 -1
  64. package/dist/commands/launch.js +41 -7
  65. package/dist/commands/navigate.d.ts +2 -1
  66. package/dist/commands/navigate.d.ts.map +1 -1
  67. package/dist/commands/navigate.js +49 -12
  68. package/dist/commands/observe-inventory.d.ts +109 -0
  69. package/dist/commands/observe-inventory.d.ts.map +1 -0
  70. package/dist/commands/observe-inventory.js +2837 -0
  71. package/dist/commands/observe-persistence.d.ts +14 -0
  72. package/dist/commands/observe-persistence.d.ts.map +1 -0
  73. package/dist/commands/observe-persistence.js +170 -0
  74. package/dist/commands/observe-projection.d.ts +84 -0
  75. package/dist/commands/observe-projection.d.ts.map +1 -0
  76. package/dist/commands/observe-projection.js +140 -0
  77. package/dist/commands/observe-protected.d.ts +5 -0
  78. package/dist/commands/observe-protected.d.ts.map +1 -0
  79. package/dist/commands/observe-protected.js +18 -0
  80. package/dist/commands/observe-semantics.d.ts +10 -0
  81. package/dist/commands/observe-semantics.d.ts.map +1 -0
  82. package/dist/commands/observe-semantics.js +338 -0
  83. package/dist/commands/observe-stagehand.d.ts +48 -0
  84. package/dist/commands/observe-stagehand.d.ts.map +1 -0
  85. package/dist/commands/observe-stagehand.js +105 -0
  86. package/dist/commands/observe-surfaces.d.ts +9 -0
  87. package/dist/commands/observe-surfaces.d.ts.map +1 -0
  88. package/dist/commands/observe-surfaces.js +195 -0
  89. package/dist/commands/observe.d.ts +47 -1
  90. package/dist/commands/observe.d.ts.map +1 -1
  91. package/dist/commands/observe.js +173 -20
  92. package/dist/commands/observe.test-harness.d.ts +67 -0
  93. package/dist/commands/observe.test-harness.d.ts.map +1 -0
  94. package/dist/commands/observe.test-harness.js +107 -0
  95. package/dist/commands/poll-intent.d.ts +6 -0
  96. package/dist/commands/poll-intent.d.ts.map +1 -0
  97. package/dist/commands/poll-intent.js +57 -0
  98. package/dist/commands/screenshot.d.ts +2 -1
  99. package/dist/commands/screenshot.d.ts.map +1 -1
  100. package/dist/commands/screenshot.js +44 -12
  101. package/dist/commands/select-action-executor.d.ts +10 -0
  102. package/dist/commands/select-action-executor.d.ts.map +1 -0
  103. package/dist/commands/select-action-executor.js +91 -0
  104. package/dist/commands/semantic-observe.d.ts +24 -0
  105. package/dist/commands/semantic-observe.d.ts.map +1 -0
  106. package/dist/commands/semantic-observe.js +344 -0
  107. package/dist/commands/status.d.ts.map +1 -1
  108. package/dist/commands/status.js +75 -2
  109. package/dist/commands/structured-grid-action-executor.d.ts +3 -0
  110. package/dist/commands/structured-grid-action-executor.d.ts.map +1 -0
  111. package/dist/commands/structured-grid-action-executor.js +4 -0
  112. package/dist/commands/target-resolution.d.ts +4 -0
  113. package/dist/commands/target-resolution.d.ts.map +1 -0
  114. package/dist/commands/target-resolution.js +33 -0
  115. package/dist/commands/text-input-action-executor.d.ts +5 -0
  116. package/dist/commands/text-input-action-executor.d.ts.map +1 -0
  117. package/dist/commands/text-input-action-executor.js +116 -0
  118. package/dist/commands/user-actionable.d.ts +4 -0
  119. package/dist/commands/user-actionable.d.ts.map +1 -0
  120. package/dist/commands/user-actionable.js +95 -0
  121. package/dist/control-semantics.d.ts +29 -0
  122. package/dist/control-semantics.d.ts.map +1 -0
  123. package/dist/control-semantics.js +299 -0
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js +95 -32
  126. package/dist/output.d.ts +14 -2
  127. package/dist/output.d.ts.map +1 -1
  128. package/dist/output.js +17 -29
  129. package/dist/playwright-runtime.d.ts +35 -0
  130. package/dist/playwright-runtime.d.ts.map +1 -0
  131. package/dist/playwright-runtime.js +224 -0
  132. package/dist/runtime-resolution.d.ts +9 -0
  133. package/dist/runtime-resolution.d.ts.map +1 -0
  134. package/dist/runtime-resolution.js +19 -0
  135. package/dist/runtime-state.d.ts +217 -0
  136. package/dist/runtime-state.d.ts.map +1 -0
  137. package/dist/runtime-state.js +629 -0
  138. package/dist/secrets/backend.d.ts +32 -0
  139. package/dist/secrets/backend.d.ts.map +1 -0
  140. package/dist/secrets/backend.js +169 -0
  141. package/dist/secrets/catalog-applicability.d.ts +5 -0
  142. package/dist/secrets/catalog-applicability.d.ts.map +1 -0
  143. package/dist/secrets/catalog-applicability.js +59 -0
  144. package/dist/secrets/catalog-sync.d.ts +14 -0
  145. package/dist/secrets/catalog-sync.d.ts.map +1 -0
  146. package/dist/secrets/catalog-sync.js +35 -0
  147. package/dist/secrets/field-policy.d.ts +3 -0
  148. package/dist/secrets/field-policy.d.ts.map +1 -0
  149. package/dist/secrets/field-policy.js +3 -0
  150. package/dist/secrets/fill-ordering.d.ts +11 -0
  151. package/dist/secrets/fill-ordering.d.ts.map +1 -0
  152. package/dist/secrets/fill-ordering.js +44 -0
  153. package/dist/secrets/form-matcher.d.ts +60 -0
  154. package/dist/secrets/form-matcher.d.ts.map +1 -0
  155. package/dist/secrets/form-matcher.js +596 -0
  156. package/dist/secrets/intent-output.d.ts +11 -0
  157. package/dist/secrets/intent-output.d.ts.map +1 -0
  158. package/dist/secrets/intent-output.js +64 -0
  159. package/dist/secrets/mock-agentpay-backend.d.ts +13 -0
  160. package/dist/secrets/mock-agentpay-backend.d.ts.map +1 -0
  161. package/dist/secrets/mock-agentpay-backend.js +87 -0
  162. package/dist/secrets/mock-agentpay-cabinet.d.ts +43 -0
  163. package/dist/secrets/mock-agentpay-cabinet.d.ts.map +1 -0
  164. package/dist/secrets/mock-agentpay-cabinet.js +195 -0
  165. package/dist/secrets/protected-artifact-guard.d.ts +25 -0
  166. package/dist/secrets/protected-artifact-guard.d.ts.map +1 -0
  167. package/dist/secrets/protected-artifact-guard.js +26 -0
  168. package/dist/secrets/protected-bindings.d.ts +10 -0
  169. package/dist/secrets/protected-bindings.d.ts.map +1 -0
  170. package/dist/secrets/protected-bindings.js +17 -0
  171. package/dist/secrets/protected-field-values.d.ts +13 -0
  172. package/dist/secrets/protected-field-values.d.ts.map +1 -0
  173. package/dist/secrets/protected-field-values.js +100 -0
  174. package/dist/secrets/protected-fill.d.ts +47 -0
  175. package/dist/secrets/protected-fill.d.ts.map +1 -0
  176. package/dist/secrets/protected-fill.js +512 -0
  177. package/dist/secrets/types.d.ts +84 -0
  178. package/dist/secrets/types.d.ts.map +1 -0
  179. package/dist/secrets/types.js +27 -0
  180. package/dist/session.d.ts +22 -0
  181. package/dist/session.d.ts.map +1 -1
  182. package/dist/session.js +74 -2
  183. package/dist/solver/browser-launcher.d.ts.map +1 -1
  184. package/dist/solver/browser-launcher.js +6 -3
  185. package/dist/stagehand-runtime.d.ts +4 -0
  186. package/dist/stagehand-runtime.d.ts.map +1 -0
  187. package/dist/stagehand-runtime.js +10 -0
  188. package/dist/stagehand.d.ts +0 -5
  189. package/dist/stagehand.d.ts.map +1 -1
  190. package/dist/stagehand.js +0 -6
  191. package/package.json +5 -2
@@ -0,0 +1,14 @@
1
+ import type { BrowseSession } from '../session.js';
2
+ import type { SurfaceDescriptor, TargetDescriptor } from '../runtime-state.js';
3
+ import type { DomObservedTarget } from './observe-inventory.js';
4
+ export declare function toDomDescriptor(pageRef: string, target: DomObservedTarget, surfaceRefMap: ReadonlyMap<string, string>): Omit<TargetDescriptor, 'ref'>;
5
+ export declare function attachObservedTargetOwners(domTargets: ReadonlyArray<DomObservedTarget>, targets: TargetDescriptor[]): void;
6
+ export declare function persistObservedSurfacesForPage(session: BrowseSession, pageRef: string, targets: ReadonlyArray<DomObservedTarget>, options?: {
7
+ allSurfaceInputs?: ReadonlyArray<Omit<SurfaceDescriptor, 'ref'>>;
8
+ explicitSurfaceIds?: ReadonlySet<string>;
9
+ }): {
10
+ observedScopes: SurfaceDescriptor[];
11
+ surfaceRefMap: Map<string, string>;
12
+ };
13
+ export declare function reconcileObservedTargetsForPage(session: BrowseSession, pageRef: string, observedTargets: ReadonlyArray<Pick<TargetDescriptor, 'ref'>>): void;
14
+ //# sourceMappingURL=observe-persistence.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,170 @@
1
+ import { ensureRuntimeState, markSurfaceLifecycle, markTargetLifecycle, replaceSurfacesForPage, setSurfaceAvailability, setTargetAvailability, } from '../runtime-state.js';
2
+ import { collectSurfaceDescriptors, pushUniqueLocatorCandidate, surfaceReplacementKey } from './observe-surfaces.js';
3
+ export function toDomDescriptor(pageRef, target, surfaceRefMap) {
4
+ const locatorCandidates = [];
5
+ if (target.role && target.label) {
6
+ pushUniqueLocatorCandidate(locatorCandidates, {
7
+ strategy: 'role',
8
+ value: target.role,
9
+ name: target.label,
10
+ });
11
+ }
12
+ if (target.label) {
13
+ pushUniqueLocatorCandidate(locatorCandidates, {
14
+ strategy: 'label',
15
+ value: target.label,
16
+ });
17
+ }
18
+ if (target.placeholder) {
19
+ pushUniqueLocatorCandidate(locatorCandidates, {
20
+ strategy: 'placeholder',
21
+ value: target.placeholder,
22
+ });
23
+ }
24
+ if (target.text) {
25
+ pushUniqueLocatorCandidate(locatorCandidates, {
26
+ strategy: 'text',
27
+ value: target.text,
28
+ });
29
+ }
30
+ if (target.title) {
31
+ pushUniqueLocatorCandidate(locatorCandidates, {
32
+ strategy: 'title',
33
+ value: target.title,
34
+ });
35
+ }
36
+ if (target.testId) {
37
+ pushUniqueLocatorCandidate(locatorCandidates, {
38
+ strategy: 'testId',
39
+ value: target.testId,
40
+ attribute: target.testIdAttribute,
41
+ });
42
+ }
43
+ if (target.selector) {
44
+ pushUniqueLocatorCandidate(locatorCandidates, {
45
+ strategy: target.selector.startsWith('xpath=') ? 'xpath' : 'css',
46
+ value: target.selector,
47
+ scope: 'root',
48
+ });
49
+ }
50
+ return {
51
+ pageRef,
52
+ framePath: target.framePath,
53
+ frameUrl: target.frameUrl,
54
+ kind: target.kind,
55
+ label: target.label ?? target.text ?? target.placeholder ?? target.title,
56
+ displayLabel: target.displayLabel,
57
+ placeholder: target.placeholder,
58
+ inputName: target.inputName,
59
+ inputType: target.inputType,
60
+ autocomplete: target.autocomplete,
61
+ validation: target.validation,
62
+ locatorCandidates,
63
+ semantics: target.role || target.label || target.states
64
+ ? {
65
+ role: target.role,
66
+ name: target.label,
67
+ states: target.states,
68
+ source: 'dom',
69
+ }
70
+ : undefined,
71
+ structure: target.structure,
72
+ context: target.context,
73
+ capability: target.capability ?? 'actionable',
74
+ lifecycle: 'live',
75
+ availability: target.availability ?? { state: 'available' },
76
+ allowedActions: target.allowedActions ?? [],
77
+ acceptancePolicy: target.acceptancePolicy,
78
+ surfaceRef: target.surfaceRef ? surfaceRefMap.get(target.surfaceRef) : undefined,
79
+ createdAt: Date.now(),
80
+ pageSignature: target.pageSignature,
81
+ domSignature: target.domSignature,
82
+ };
83
+ }
84
+ export function attachObservedTargetOwners(domTargets, targets) {
85
+ for (const [index, observedTarget] of domTargets.entries()) {
86
+ if (typeof observedTarget.ownerIndex !== 'number') {
87
+ continue;
88
+ }
89
+ const ownerSlot = domTargets.findIndex((candidate) => candidate.ordinal === observedTarget.ownerIndex);
90
+ if (ownerSlot >= 0 && targets[ownerSlot]) {
91
+ targets[index].ownerRef = targets[ownerSlot].ref;
92
+ }
93
+ }
94
+ }
95
+ export function persistObservedSurfacesForPage(session, pageRef, targets, options) {
96
+ const runtime = ensureRuntimeState(session);
97
+ const derivedSurfaces = collectSurfaceDescriptors(pageRef, targets);
98
+ const descriptors = new Map();
99
+ for (const surface of derivedSurfaces) {
100
+ descriptors.set(surface.surfaceId, surface);
101
+ }
102
+ for (const surface of options?.allSurfaceInputs ?? []) {
103
+ if (!options?.explicitSurfaceIds?.has(surface.surfaceId)) {
104
+ continue;
105
+ }
106
+ if (!descriptors.has(surface.surfaceId)) {
107
+ descriptors.set(surface.surfaceId, surface);
108
+ }
109
+ }
110
+ const observedScopes = replaceSurfacesForPage(session, pageRef, [...descriptors.values()], {
111
+ preserveExistingOnEmpty: false,
112
+ preserveExisting: true,
113
+ });
114
+ const activeSurfaceRefs = new Set(observedScopes.map((scope) => scope.ref));
115
+ const activeSurfaceSlots = new Set(observedScopes.map((scope) => surfaceReplacementKey(scope)));
116
+ for (const surface of Object.values(runtime.surfaces)) {
117
+ if (surface.pageRef !== pageRef)
118
+ continue;
119
+ if (activeSurfaceRefs.has(surface.ref)) {
120
+ markSurfaceLifecycle(session, surface.ref, 'live');
121
+ setSurfaceAvailability(session, surface.ref, 'available');
122
+ }
123
+ else if (activeSurfaceSlots.has(surfaceReplacementKey(surface))) {
124
+ markSurfaceLifecycle(session, surface.ref, 'invalidated', 'surface-replaced');
125
+ setSurfaceAvailability(session, surface.ref, 'hidden', 'surface-replaced');
126
+ }
127
+ else {
128
+ setSurfaceAvailability(session, surface.ref, 'hidden', 'surface-not-observed');
129
+ }
130
+ }
131
+ for (const target of Object.values(runtime.targets)) {
132
+ if (target.pageRef !== pageRef || !target.surfaceRef)
133
+ continue;
134
+ if (activeSurfaceRefs.has(target.surfaceRef)) {
135
+ continue;
136
+ }
137
+ const linkedSurface = runtime.surfaces[target.surfaceRef];
138
+ if (linkedSurface?.lifecycle === 'invalidated') {
139
+ markTargetLifecycle(session, target.ref, 'invalidated', linkedSurface.lifecycleReason);
140
+ setTargetAvailability(session, target.ref, 'hidden', linkedSurface.lifecycleReason ?? 'surface-replaced');
141
+ }
142
+ else {
143
+ setTargetAvailability(session, target.ref, 'surface-inactive', 'surface-not-observed');
144
+ }
145
+ }
146
+ return {
147
+ observedScopes,
148
+ surfaceRefMap: new Map(observedScopes.map((scope) => [scope.surfaceId, scope.ref])),
149
+ };
150
+ }
151
+ export function reconcileObservedTargetsForPage(session, pageRef, observedTargets) {
152
+ const runtime = ensureRuntimeState(session);
153
+ const activeTargetRefs = new Set(observedTargets.map((target) => target.ref));
154
+ for (const target of Object.values(runtime.targets)) {
155
+ if (target.pageRef !== pageRef || activeTargetRefs.has(target.ref)) {
156
+ continue;
157
+ }
158
+ const linkedSurface = target.surfaceRef ? runtime.surfaces[target.surfaceRef] : null;
159
+ if (linkedSurface) {
160
+ if (linkedSurface.lifecycle === 'invalidated') {
161
+ continue;
162
+ }
163
+ if (linkedSurface.availability.state !== 'available') {
164
+ continue;
165
+ }
166
+ }
167
+ markTargetLifecycle(session, target.ref, 'stale', 'target-not-observed');
168
+ setTargetAvailability(session, target.ref, 'hidden', 'target-not-observed');
169
+ }
170
+ }
@@ -0,0 +1,84 @@
1
+ import type { SurfaceDescriptor, TargetDescriptor, TargetValidationEvidence } from '../runtime-state.js';
2
+ import type { PersistedFillableForm, ProtectedBindingValueHint } from '../secrets/types.js';
3
+ import type { DomObservedTarget, ObservedPageSignal } from './observe-inventory.js';
4
+ export type GoalObserveScopeCandidate = {
5
+ goalInventoryType: 'scope';
6
+ goalSurfaceId: string;
7
+ kind?: string;
8
+ label?: string;
9
+ capability: 'scope';
10
+ surfaceRef?: string;
11
+ surfacePriority?: number;
12
+ framePath?: string[];
13
+ frameUrl?: string;
14
+ pageSignature?: string;
15
+ context?: TargetDescriptor['context'];
16
+ structure?: TargetDescriptor['structure'];
17
+ };
18
+ export type GoalObserveTargetCandidate = DomObservedTarget & {
19
+ goalInventoryType: 'target';
20
+ goalTargetKey: string;
21
+ };
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<{
24
+ ref: string;
25
+ kind?: string;
26
+ label?: string;
27
+ displayLabel?: string;
28
+ placeholder?: string;
29
+ inputName?: string;
30
+ inputType?: string;
31
+ autocomplete?: string;
32
+ validation?: TargetValidationEvidence;
33
+ context?: string;
34
+ state?: Record<string, string | boolean | number>;
35
+ structure?: TargetDescriptor['structure'];
36
+ capability?: TargetDescriptor['capability'];
37
+ availability?: string;
38
+ availabilityReason?: string;
39
+ source?: 'dom' | 'stagehand' | 'aria-snapshot' | 'cdp-ax';
40
+ }>;
41
+ export declare function compactScopes(scopes: ReadonlyArray<Pick<SurfaceDescriptor, 'ref' | 'kind' | 'label' | 'availability'>>): Array<{
42
+ ref: string;
43
+ kind?: string;
44
+ label?: string;
45
+ capability: 'scope';
46
+ availability?: string;
47
+ availabilityReason?: string;
48
+ source: 'dom';
49
+ }>;
50
+ export declare function compactFillableForms(forms: ReadonlyArray<PersistedFillableForm>): Array<{
51
+ fillRef: string;
52
+ scopeRef?: string;
53
+ purpose: string;
54
+ recommendedTiming?: 'late';
55
+ fields: Array<{
56
+ fieldKey: string;
57
+ targetRef: string;
58
+ label?: string;
59
+ required?: boolean;
60
+ valueHint?: ProtectedBindingValueHint;
61
+ }>;
62
+ storedSecretCandidates: Array<{
63
+ storedSecretRef: string;
64
+ kind: string;
65
+ scope: string;
66
+ displayName: string;
67
+ matchConfidence: 'high' | 'medium' | 'low';
68
+ intentRequired: boolean;
69
+ }>;
70
+ }>;
71
+ export declare function compactSignals(signals: ReadonlyArray<ObservedPageSignal>): Array<{
72
+ kind: ObservedPageSignal['kind'];
73
+ text: string;
74
+ framePath?: string[];
75
+ source: 'dom';
76
+ }>;
77
+ export declare function buildGoalObserveInventoryCandidates(targets: ReadonlyArray<DomObservedTarget>, surfaces: ReadonlyArray<Omit<SurfaceDescriptor, 'ref'>>): GoalObserveInventoryCandidate[];
78
+ export declare function selectTargetsForGoalMatches(allTargets: ReadonlyArray<DomObservedTarget>, rerankedCandidates: ReadonlyArray<GoalObserveInventoryCandidate>): {
79
+ targets: DomObservedTarget[];
80
+ selectedSurfaceIds: Set<string>;
81
+ };
82
+ export declare function buildExplicitScopeRefs(selectedSurfaceIds: ReadonlySet<string>, surfaceRefMap: ReadonlyMap<string, string>): Set<string>;
83
+ export declare function projectPersistedTargetsForGoal(domTargets: ReadonlyArray<DomObservedTarget>, persistedTargets: ReadonlyArray<TargetDescriptor>, selectedTargets: ReadonlyArray<DomObservedTarget>): TargetDescriptor[];
84
+ //# sourceMappingURL=observe-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observe-projection.d.ts","sourceRoot":"","sources":["../../src/commands/observe-projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ import { observedTargetKey } from './observe-semantics.js';
2
+ import { summarizeContext } from './observe-surfaces.js';
3
+ export function compactTargets(targets) {
4
+ return targets.map((target) => ({
5
+ ref: target.ref,
6
+ kind: target.kind,
7
+ label: target.label,
8
+ displayLabel: target.displayLabel,
9
+ placeholder: target.placeholder,
10
+ inputName: target.inputName,
11
+ inputType: target.inputType,
12
+ autocomplete: target.autocomplete,
13
+ validation: target.validation,
14
+ context: summarizeContext(target.context),
15
+ state: target.semantics?.states,
16
+ structure: target.structure,
17
+ capability: target.capability,
18
+ availability: target.availability?.state,
19
+ availabilityReason: target.availability?.reason,
20
+ source: target.semantics?.source,
21
+ }));
22
+ }
23
+ export function compactScopes(scopes) {
24
+ return scopes.map((scope) => ({
25
+ ref: scope.ref,
26
+ kind: scope.kind,
27
+ label: scope.label,
28
+ capability: 'scope',
29
+ availability: scope.availability?.state,
30
+ availabilityReason: scope.availability?.reason,
31
+ source: 'dom',
32
+ }));
33
+ }
34
+ export function compactFillableForms(forms) {
35
+ return forms.map((form) => ({
36
+ fillRef: form.fillRef,
37
+ scopeRef: form.scopeRef,
38
+ purpose: form.purpose,
39
+ recommendedTiming: form.recommendedTiming,
40
+ fields: form.fields.map((field) => ({
41
+ fieldKey: field.fieldKey,
42
+ targetRef: field.targetRef,
43
+ label: field.label,
44
+ required: field.required,
45
+ valueHint: field.valueHint,
46
+ })),
47
+ storedSecretCandidates: form.storedSecretCandidates.map((candidate) => ({
48
+ storedSecretRef: candidate.storedSecretRef,
49
+ kind: candidate.kind,
50
+ scope: candidate.scope,
51
+ displayName: candidate.displayName,
52
+ matchConfidence: candidate.matchConfidence,
53
+ intentRequired: candidate.intentRequired,
54
+ })),
55
+ }));
56
+ }
57
+ export function compactSignals(signals) {
58
+ return signals.map((signal) => ({
59
+ kind: signal.kind,
60
+ text: signal.text,
61
+ framePath: signal.framePath,
62
+ source: signal.source,
63
+ }));
64
+ }
65
+ export function buildGoalObserveInventoryCandidates(targets, surfaces) {
66
+ const targetCandidates = targets.map((target) => ({
67
+ ...target,
68
+ goalInventoryType: 'target',
69
+ goalTargetKey: observedTargetKey(target),
70
+ }));
71
+ const scopeCandidates = surfaces.map((surface) => {
72
+ const linkedTargets = targets.filter((target) => target.surfaceRef === surface.surfaceId);
73
+ const primaryLinkedTarget = linkedTargets[0];
74
+ return {
75
+ goalInventoryType: 'scope',
76
+ goalSurfaceId: surface.surfaceId,
77
+ kind: surface.kind,
78
+ label: surface.label,
79
+ capability: 'scope',
80
+ surfaceRef: `scope:${surface.surfaceId}`,
81
+ surfacePriority: linkedTargets.reduce((best, target) => Math.max(best, target.surfacePriority ?? 0), 0) ||
82
+ undefined,
83
+ framePath: surface.framePath,
84
+ frameUrl: surface.frameUrl,
85
+ pageSignature: surface.pageSignature,
86
+ context: primaryLinkedTarget?.context,
87
+ structure: primaryLinkedTarget?.structure,
88
+ };
89
+ });
90
+ return [...targetCandidates, ...scopeCandidates];
91
+ }
92
+ function isGoalObserveTargetCandidate(candidate) {
93
+ return candidate.goalInventoryType === 'target';
94
+ }
95
+ function isGoalObserveScopeCandidate(candidate) {
96
+ return candidate.goalInventoryType === 'scope';
97
+ }
98
+ export function selectTargetsForGoalMatches(allTargets, rerankedCandidates) {
99
+ const directTargetOrdinals = new Set(rerankedCandidates
100
+ .filter(isGoalObserveTargetCandidate)
101
+ .map((candidate) => candidate.ordinal)
102
+ .filter((value) => typeof value === 'number'));
103
+ const directTargetKeys = new Set(rerankedCandidates
104
+ .filter(isGoalObserveTargetCandidate)
105
+ .map((candidate) => candidate.goalTargetKey)
106
+ .filter((value) => typeof value === 'string' && value.length > 0));
107
+ const selectedSurfaceIds = new Set(rerankedCandidates
108
+ .filter(isGoalObserveScopeCandidate)
109
+ .map((candidate) => candidate.goalSurfaceId));
110
+ const mergedTargets = allTargets.filter((target) => {
111
+ const directMatch = typeof target.ordinal === 'number' && directTargetOrdinals.has(target.ordinal);
112
+ const directKeyMatch = directTargetKeys.has(observedTargetKey(target));
113
+ const scopeMatch = target.surfaceRef ? selectedSurfaceIds.has(target.surfaceRef) : false;
114
+ return directMatch || directKeyMatch || scopeMatch;
115
+ });
116
+ return {
117
+ targets: mergedTargets,
118
+ selectedSurfaceIds,
119
+ };
120
+ }
121
+ export function buildExplicitScopeRefs(selectedSurfaceIds, surfaceRefMap) {
122
+ return new Set([...selectedSurfaceIds]
123
+ .map((surfaceId) => surfaceRefMap.get(surfaceId))
124
+ .filter((value) => typeof value === 'string' && value.length > 0));
125
+ }
126
+ export function projectPersistedTargetsForGoal(domTargets, persistedTargets, selectedTargets) {
127
+ const selectedOrdinals = new Set(selectedTargets
128
+ .map((target) => target.ordinal)
129
+ .filter((value) => typeof value === 'number'));
130
+ const selectedKeys = new Set(selectedTargets.map((target) => observedTargetKey(target)));
131
+ return persistedTargets.filter((target, index) => {
132
+ const domTarget = domTargets[index];
133
+ if (!domTarget) {
134
+ return false;
135
+ }
136
+ const ordinalMatch = typeof domTarget.ordinal === 'number' && selectedOrdinals.has(domTarget.ordinal);
137
+ const keyMatch = selectedKeys.has(observedTargetKey(domTarget));
138
+ return ordinalMatch || keyMatch;
139
+ });
140
+ }
@@ -0,0 +1,5 @@
1
+ import type { BrowseSession } from '../session.js';
2
+ import type { TargetDescriptor } from '../runtime-state.js';
3
+ export declare function persistProtectedFillableFormsForPage(session: BrowseSession, pageRef: string, pageUrl: string, targets: ReadonlyArray<TargetDescriptor>, observedAt: string): Promise<import("../secrets/types.js").PersistedFillableForm[]>;
4
+ export declare function clearProtectedFillableFormsForPage(session: BrowseSession, pageRef: string): import("../secrets/types.js").PersistedFillableForm[];
5
+ //# sourceMappingURL=observe-protected.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observe-protected.d.ts","sourceRoot":"","sources":["../../src/commands/observe-protected.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAK5D,wBAAsB,oCAAoC,CACxD,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,EACxC,UAAU,EAAE,MAAM,kEAWnB;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,yDAIzF"}
@@ -0,0 +1,18 @@
1
+ import { getSecretCatalog, replaceFillableFormsForPage } from '../runtime-state.js';
2
+ import { tryResolveCatalogHost } from '../secrets/catalog-sync.js';
3
+ import { matchStoredSecretsToObservedTargets } from '../secrets/form-matcher.js';
4
+ export async function persistProtectedFillableFormsForPage(session, pageRef, pageUrl, targets, observedAt) {
5
+ const host = tryResolveCatalogHost(pageUrl);
6
+ const catalog = host ? getSecretCatalog(session, host) : null;
7
+ const matchedForms = await matchStoredSecretsToObservedTargets(pageRef, targets, catalog, {
8
+ observedAt,
9
+ });
10
+ return replaceFillableFormsForPage(session, pageRef, matchedForms, {
11
+ preserveExistingOnEmpty: false,
12
+ });
13
+ }
14
+ export function clearProtectedFillableFormsForPage(session, pageRef) {
15
+ return replaceFillableFormsForPage(session, pageRef, [], {
16
+ preserveExistingOnEmpty: false,
17
+ });
18
+ }
@@ -0,0 +1,10 @@
1
+ import type { DomObservedTarget } from './observe-inventory.js';
2
+ export declare function normalizeSemanticDuplicateLabel(target: DomObservedTarget): string;
3
+ export declare function isPrimaryFormControlTarget(target: DomObservedTarget): boolean;
4
+ export declare function formGroupingKeyOf(target: DomObservedTarget): string | undefined;
5
+ export declare function observedTargetKey(target: DomObservedTarget): string;
6
+ export declare function expandRerankedFormTargets(targets: ReadonlyArray<DomObservedTarget>, selectedTargets: ReadonlyArray<DomObservedTarget>): DomObservedTarget[];
7
+ export declare function compressSemanticallyDuplicateTargets(targets: ReadonlyArray<DomObservedTarget>): DomObservedTarget[];
8
+ export declare function annotateDomTargets(targets: ReadonlyArray<DomObservedTarget>): DomObservedTarget[];
9
+ export declare function orderBySurfaceCompetition(targets: ReadonlyArray<DomObservedTarget>): DomObservedTarget[];
10
+ //# sourceMappingURL=observe-semantics.d.ts.map
@@ -0,0 +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;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"}