browser-debug-mcp-bridge 1.11.0 → 1.12.0

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 (26) hide show
  1. package/README.md +3 -1
  2. package/apps/mcp-server/dist/db/automation-repository.js +9 -4
  3. package/apps/mcp-server/dist/db/automation-repository.js.map +1 -1
  4. package/apps/mcp-server/dist/db/migrations.js +79 -0
  5. package/apps/mcp-server/dist/db/migrations.js.map +1 -1
  6. package/apps/mcp-server/dist/db/schema.js +60 -1
  7. package/apps/mcp-server/dist/db/schema.js.map +1 -1
  8. package/apps/mcp-server/dist/mcp/server.js +3455 -357
  9. package/apps/mcp-server/dist/mcp/server.js.map +1 -1
  10. package/apps/mcp-server/dist/mcp/target-resolution.js +390 -0
  11. package/apps/mcp-server/dist/mcp/target-resolution.js.map +1 -0
  12. package/apps/mcp-server/dist/mcp/tool-loop-guard.js +655 -0
  13. package/apps/mcp-server/dist/mcp/tool-loop-guard.js.map +1 -0
  14. package/apps/mcp-server/dist/override-audit.js +3 -3
  15. package/apps/mcp-server/dist/override-audit.js.map +1 -1
  16. package/apps/mcp-server/dist/override-capabilities.js +22 -1
  17. package/apps/mcp-server/dist/override-capabilities.js.map +1 -1
  18. package/apps/mcp-server/dist/override-poc.js +4 -4
  19. package/apps/mcp-server/dist/override-poc.js.map +1 -1
  20. package/apps/mcp-server/dist/override-profile-generator.js +3 -9
  21. package/apps/mcp-server/dist/override-profile-generator.js.map +1 -1
  22. package/apps/mcp-server/dist/override-response-planner.js +6 -4
  23. package/apps/mcp-server/dist/override-response-planner.js.map +1 -1
  24. package/apps/mcp-server/dist/websocket/messages.js +5 -0
  25. package/apps/mcp-server/dist/websocket/messages.js.map +1 -1
  26. package/package.json +8 -3
@@ -0,0 +1,390 @@
1
+ export class WorkflowTargetResolutionError extends Error {
2
+ code;
3
+ details;
4
+ constructor(code, message, details) {
5
+ super(message);
6
+ this.name = 'WorkflowTargetResolutionError';
7
+ this.code = code;
8
+ this.details = details;
9
+ }
10
+ }
11
+ function asRecordArray(value) {
12
+ if (!Array.isArray(value)) {
13
+ return [];
14
+ }
15
+ return value.filter((entry) => typeof entry === 'object' && entry !== null);
16
+ }
17
+ function includesNormalized(value, needle) {
18
+ if (!needle) {
19
+ return true;
20
+ }
21
+ return typeof value === 'string' && value.toLowerCase().includes(needle.toLowerCase());
22
+ }
23
+ function matchesTextValue(value, expected, exact) {
24
+ if (!expected) {
25
+ return true;
26
+ }
27
+ if (typeof value !== 'string') {
28
+ return false;
29
+ }
30
+ const normalizedValue = value.trim().toLowerCase();
31
+ const normalizedExpected = expected.trim().toLowerCase();
32
+ return exact === true
33
+ ? normalizedValue === normalizedExpected
34
+ : normalizedValue.includes(normalizedExpected);
35
+ }
36
+ function equalsNormalized(value, expected) {
37
+ if (!expected) {
38
+ return true;
39
+ }
40
+ return typeof value === 'string' && value.toLowerCase() === expected.toLowerCase();
41
+ }
42
+ function equalsOptionalBoolean(value, expected) {
43
+ if (expected === undefined) {
44
+ return true;
45
+ }
46
+ return value === expected;
47
+ }
48
+ function pickPageStateScopeItems(payload, scope) {
49
+ if (scope === 'buttons' || scope === 'links' || scope === 'inputs' || scope === 'modals') {
50
+ return asRecordArray(payload[scope]);
51
+ }
52
+ if (scope === 'focused') {
53
+ const focused = payload.focused;
54
+ return typeof focused === 'object' && focused !== null ? [focused] : [];
55
+ }
56
+ return [payload];
57
+ }
58
+ function candidateTextForWorkflowTarget(item) {
59
+ const parts = new Set([item.text, item.label, item.title, item.name, item.placeholder, item.altText]
60
+ .filter((value) => typeof value === 'string' && value.trim().length > 0)
61
+ .map((value) => value.trim()));
62
+ return Array.from(parts)
63
+ .join(' ')
64
+ .trim();
65
+ }
66
+ function locatorMatcherToDebugValue(matcher) {
67
+ return matcher;
68
+ }
69
+ function matchesLocatorMatcher(value, matcher, exact) {
70
+ if (matcher === undefined) {
71
+ return true;
72
+ }
73
+ if (typeof value !== 'string') {
74
+ return false;
75
+ }
76
+ if (typeof matcher === 'string') {
77
+ return matchesTextValue(value, matcher, exact);
78
+ }
79
+ try {
80
+ return new RegExp(matcher.pattern, matcher.flags).test(value);
81
+ }
82
+ catch {
83
+ return false;
84
+ }
85
+ }
86
+ function locatorStepRoleValue(step) {
87
+ if (typeof step.role === 'string') {
88
+ return step.role;
89
+ }
90
+ return typeof step.value === 'string' ? step.value : undefined;
91
+ }
92
+ function matchesWorkflowLocatorStep(item, step) {
93
+ if (step.kind === 'css') {
94
+ return matchesLocatorMatcher(item.selector, step.value, step.exact ?? true);
95
+ }
96
+ if (step.kind === 'role') {
97
+ const role = locatorStepRoleValue(step);
98
+ return equalsNormalized(item.role, role?.toLowerCase())
99
+ && matchesLocatorMatcher(item.name, step.name, step.exact);
100
+ }
101
+ if (step.kind === 'text') {
102
+ return matchesLocatorMatcher(typeof item.text === 'string' && item.text.trim().length > 0 ? item.text : candidateTextForWorkflowTarget(item), step.value, step.exact);
103
+ }
104
+ if (step.kind === 'label') {
105
+ return matchesLocatorMatcher(item.label, step.value, step.exact);
106
+ }
107
+ if (step.kind === 'testId') {
108
+ return matchesLocatorMatcher(item.testId, step.value, step.exact ?? true);
109
+ }
110
+ if (step.kind === 'placeholder') {
111
+ return matchesLocatorMatcher(item.placeholder, step.value, step.exact);
112
+ }
113
+ return matchesLocatorMatcher(item.altText, step.value, step.exact);
114
+ }
115
+ function matchesWorkflowLocator(item, target) {
116
+ const locator = target.locator;
117
+ if (!locator) {
118
+ return true;
119
+ }
120
+ return includesNormalized(item.frameUrl, locator.frame?.urlContains)
121
+ && includesNormalized(item.frameTitle, locator.frame?.titleContains)
122
+ && locator.steps.every((step) => matchesWorkflowLocatorStep(item, step));
123
+ }
124
+ function summarizeWorkflowLocator(target) {
125
+ if (!target.locator) {
126
+ return undefined;
127
+ }
128
+ return {
129
+ scope: target.locator.scope,
130
+ frame: target.locator.frame,
131
+ steps: target.locator.steps.map((step) => ({
132
+ kind: step.kind,
133
+ value: locatorMatcherToDebugValue(step.value),
134
+ role: step.role,
135
+ name: locatorMatcherToDebugValue(step.name),
136
+ exact: step.exact,
137
+ relation: step.relation,
138
+ })),
139
+ };
140
+ }
141
+ function resolveWorkflowTargetScope(target) {
142
+ return target.locator?.scope ?? target.scope;
143
+ }
144
+ function describeWorkflowTargetCandidate(item) {
145
+ return {
146
+ text: candidateTextForWorkflowTarget(item) || undefined,
147
+ testId: typeof item.testId === 'string' ? item.testId : undefined,
148
+ selector: typeof item.selector === 'string' ? item.selector : undefined,
149
+ frameId: typeof item.frameId === 'number' ? item.frameId : undefined,
150
+ frameUrl: typeof item.frameUrl === 'string' ? item.frameUrl : undefined,
151
+ frameTitle: typeof item.frameTitle === 'string' ? item.frameTitle : undefined,
152
+ frameSameOriginWithTop: typeof item.frameSameOriginWithTop === 'boolean' ? item.frameSameOriginWithTop : undefined,
153
+ role: typeof item.role === 'string' ? item.role : undefined,
154
+ name: typeof item.name === 'string' ? item.name : undefined,
155
+ tagName: typeof item.tagName === 'string' ? item.tagName : undefined,
156
+ type: typeof item.type === 'string' ? item.type : undefined,
157
+ placeholder: typeof item.placeholder === 'string' ? item.placeholder : undefined,
158
+ altText: typeof item.altText === 'string' ? item.altText : undefined,
159
+ disabled: typeof item.disabled === 'boolean' ? item.disabled : undefined,
160
+ selected: typeof item.selected === 'boolean' ? item.selected : undefined,
161
+ };
162
+ }
163
+ function pickWorkflowTargetItems(payload, scope) {
164
+ if (scope) {
165
+ return pickPageStateScopeItems(payload, scope);
166
+ }
167
+ return [
168
+ ...pickPageStateScopeItems(payload, 'buttons'),
169
+ ...pickPageStateScopeItems(payload, 'links'),
170
+ ...pickPageStateScopeItems(payload, 'inputs'),
171
+ ...pickPageStateScopeItems(payload, 'modals'),
172
+ ...pickPageStateScopeItems(payload, 'focused'),
173
+ ];
174
+ }
175
+ function matchesWorkflowActionTarget(item, target) {
176
+ return (matchesWorkflowLocator(item, target)
177
+ && equalsNormalized(item.testId, target.testId)
178
+ && matchesTextValue(item.text, target.textContains, target.exact)
179
+ && matchesTextValue(item.label, target.labelContains, target.exact)
180
+ && matchesTextValue(item.title, target.titleContains, target.exact)
181
+ && equalsNormalized(item.role, target.role?.toLowerCase())
182
+ && matchesTextValue(item.name, target.name, target.exact)
183
+ && matchesTextValue(item.placeholder, target.placeholder, target.exact)
184
+ && matchesTextValue(item.altText, target.altText, target.exact)
185
+ && includesNormalized(item.frameUrl, target.frameUrlContains)
186
+ && includesNormalized(item.frameTitle, target.frameTitleContains)
187
+ && equalsNormalized(item.tagName, target.tagName)
188
+ && equalsNormalized(item.type, target.type)
189
+ && equalsOptionalBoolean(item.visible, target.visible)
190
+ && equalsOptionalBoolean(item.disabled, target.disabled)
191
+ && equalsOptionalBoolean(item.selected, target.selected)
192
+ && equalsOptionalBoolean(item.pressed, target.pressed)
193
+ && equalsOptionalBoolean(item.expanded, target.expanded)
194
+ && equalsOptionalBoolean(item.readOnly, target.readOnly)
195
+ && equalsOptionalBoolean(item.required, target.requiredField)
196
+ && (typeof item.elementRef === 'string' || typeof item.selector === 'string'));
197
+ }
198
+ export function summarizeWorkflowTargetMatcher(target) {
199
+ return {
200
+ scope: target.scope,
201
+ locator: summarizeWorkflowLocator(target),
202
+ selector: target.selector,
203
+ elementRef: target.elementRef,
204
+ coordinates: target.coordinates,
205
+ testId: target.testId,
206
+ frameId: target.frameId,
207
+ frameUrlContains: target.frameUrlContains,
208
+ frameTitleContains: target.frameTitleContains,
209
+ textContains: target.textContains,
210
+ labelContains: target.labelContains,
211
+ titleContains: target.titleContains,
212
+ role: target.role,
213
+ name: target.name,
214
+ placeholder: target.placeholder,
215
+ altText: target.altText,
216
+ tagName: target.tagName,
217
+ type: target.type,
218
+ exact: target.exact,
219
+ nth: target.nth,
220
+ first: target.first,
221
+ last: target.last,
222
+ strict: target.strict,
223
+ visible: target.visible,
224
+ disabled: target.disabled,
225
+ selected: target.selected,
226
+ pressed: target.pressed,
227
+ expanded: target.expanded,
228
+ readOnly: target.readOnly,
229
+ requiredField: target.requiredField,
230
+ };
231
+ }
232
+ export function hasSemanticActionTargetMatcher(target) {
233
+ return Boolean(target
234
+ && !target.selector
235
+ && !target.elementRef
236
+ && !target.coordinates
237
+ && (target.locator
238
+ || target.scope
239
+ || target.frameUrlContains
240
+ || target.frameTitleContains
241
+ || target.testId
242
+ || target.textContains
243
+ || target.labelContains
244
+ || target.titleContains
245
+ || target.role
246
+ || target.name
247
+ || target.placeholder
248
+ || target.altText
249
+ || target.tagName
250
+ || target.type
251
+ || target.first === true
252
+ || target.last === true
253
+ || target.nth !== undefined
254
+ || target.strict === false
255
+ || target.visible !== undefined
256
+ || target.disabled !== undefined
257
+ || target.selected !== undefined
258
+ || target.pressed !== undefined
259
+ || target.expanded !== undefined
260
+ || target.readOnly !== undefined
261
+ || target.requiredField !== undefined));
262
+ }
263
+ function selectWorkflowTargetCandidate(candidates, target) {
264
+ if (typeof target.nth === 'number') {
265
+ return {
266
+ candidate: candidates[target.nth],
267
+ selectedCandidates: candidates[target.nth] ? [candidates[target.nth]] : [],
268
+ selectedIndex: target.nth,
269
+ selectionStrategy: 'nth',
270
+ outOfRange: candidates[target.nth] === undefined,
271
+ };
272
+ }
273
+ if (target.last === true) {
274
+ const selectedIndex = candidates.length - 1;
275
+ return {
276
+ candidate: selectedIndex >= 0 ? candidates[selectedIndex] : undefined,
277
+ selectedCandidates: selectedIndex >= 0 ? [candidates[selectedIndex]] : [],
278
+ selectedIndex,
279
+ selectionStrategy: 'last',
280
+ outOfRange: selectedIndex < 0,
281
+ };
282
+ }
283
+ if (target.first === true || target.strict === false) {
284
+ return {
285
+ candidate: candidates[0],
286
+ selectedCandidates: candidates[0] ? [candidates[0]] : [],
287
+ selectedIndex: 0,
288
+ selectionStrategy: target.strict === false && target.first !== true ? 'first-non-strict' : 'first',
289
+ outOfRange: candidates[0] === undefined,
290
+ };
291
+ }
292
+ return {
293
+ candidate: candidates.length === 1 ? candidates[0] : undefined,
294
+ selectedCandidates: candidates,
295
+ selectedIndex: candidates.length === 1 ? 0 : undefined,
296
+ selectionStrategy: 'strict-single',
297
+ outOfRange: false,
298
+ };
299
+ }
300
+ export async function resolveWorkflowActionTarget(sessionId, target, capturePageState, existingCapture) {
301
+ if (!target) {
302
+ return {
303
+ resolution: {
304
+ strategy: 'none',
305
+ },
306
+ };
307
+ }
308
+ if (target.elementRef || target.selector) {
309
+ return {
310
+ target: {
311
+ elementRef: target.elementRef,
312
+ selector: target.selector,
313
+ tabId: target.tabId,
314
+ frameId: target.frameId,
315
+ url: target.url,
316
+ },
317
+ resolution: {
318
+ strategy: target.elementRef ? 'elementRef' : 'selector',
319
+ matcher: summarizeWorkflowTargetMatcher(target),
320
+ },
321
+ };
322
+ }
323
+ if (target.coordinates) {
324
+ return {
325
+ target: {
326
+ tabId: target.tabId,
327
+ frameId: target.frameId ?? target.coordinates.frameId,
328
+ url: target.url,
329
+ coordinates: target.coordinates,
330
+ },
331
+ resolution: {
332
+ strategy: 'coordinates',
333
+ matcher: summarizeWorkflowTargetMatcher(target),
334
+ },
335
+ };
336
+ }
337
+ const searchedScope = resolveWorkflowTargetScope(target);
338
+ const capture = existingCapture ?? await capturePageState(sessionId, {
339
+ includeButtons: searchedScope ? searchedScope === 'buttons' : true,
340
+ includeLinks: searchedScope ? searchedScope === 'links' : true,
341
+ includeInputs: searchedScope ? searchedScope === 'inputs' : true,
342
+ includeModals: searchedScope ? searchedScope === 'modals' : true,
343
+ maxItems: 100,
344
+ maxTextLength: 120,
345
+ });
346
+ const candidates = pickWorkflowTargetItems(capture.payload, searchedScope)
347
+ .filter((item) => matchesWorkflowActionTarget(item, target));
348
+ const selection = selectWorkflowTargetCandidate(candidates, target);
349
+ if (candidates.length === 0 || selection.outOfRange) {
350
+ throw new WorkflowTargetResolutionError('workflow_target_not_found', 'No interactive element matched the workflow target.', {
351
+ matcher: summarizeWorkflowTargetMatcher(target),
352
+ searchedScope: searchedScope ?? 'all-interactive',
353
+ matchedCandidateCount: candidates.length,
354
+ selectionStrategy: selection.selectionStrategy,
355
+ selectedIndex: selection.selectedIndex,
356
+ sampledCandidates: pickWorkflowTargetItems(capture.payload, searchedScope)
357
+ .slice(0, 5)
358
+ .map((item) => describeWorkflowTargetCandidate(item)),
359
+ });
360
+ }
361
+ if (!selection.candidate || selection.selectedCandidates.length > 1) {
362
+ throw new WorkflowTargetResolutionError('workflow_target_ambiguous', `Workflow target matched ${selection.selectedCandidates.length} elements; refine the matcher or provide nth, first, last, or strict:false.`, {
363
+ matcher: summarizeWorkflowTargetMatcher(target),
364
+ matchedCandidateCount: selection.selectedCandidates.length,
365
+ totalMatchedCandidateCount: candidates.length,
366
+ selectionStrategy: selection.selectionStrategy,
367
+ sampledCandidates: selection.selectedCandidates.slice(0, 5).map((item) => describeWorkflowTargetCandidate(item)),
368
+ });
369
+ }
370
+ const candidate = selection.candidate;
371
+ return {
372
+ target: {
373
+ elementRef: typeof candidate.elementRef === 'string' ? candidate.elementRef : undefined,
374
+ selector: typeof candidate.selector === 'string' ? candidate.selector : undefined,
375
+ tabId: target.tabId,
376
+ frameId: target.frameId ?? (typeof candidate.frameId === 'number' ? candidate.frameId : undefined),
377
+ url: target.url,
378
+ },
379
+ resolution: {
380
+ strategy: typeof candidate.elementRef === 'string' ? 'semantic_elementRef' : 'semantic_selector',
381
+ matcher: summarizeWorkflowTargetMatcher(target),
382
+ matchedCandidateCount: candidates.length,
383
+ selectedIndex: selection.selectedIndex ?? 0,
384
+ selectionStrategy: selection.selectionStrategy,
385
+ matched: describeWorkflowTargetCandidate(candidate),
386
+ },
387
+ pageCapture: capture,
388
+ };
389
+ }
390
+ //# sourceMappingURL=target-resolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-resolution.js","sourceRoot":"","sources":["../../src/mcp/target-resolution.ts"],"names":[],"mappings":"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"}