browser-debugger-cli 0.6.11 → 0.7.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 (76) hide show
  1. package/dist/commands/cdp.d.ts.map +1 -1
  2. package/dist/commands/cdp.js +71 -15
  3. package/dist/commands/cdp.js.map +1 -1
  4. package/dist/commands/dom/DomElementResolver.d.ts.map +1 -1
  5. package/dist/commands/dom/DomElementResolver.js +28 -7
  6. package/dist/commands/dom/DomElementResolver.js.map +1 -1
  7. package/dist/commands/dom/a11y.d.ts.map +1 -1
  8. package/dist/commands/dom/a11y.js +5 -1
  9. package/dist/commands/dom/a11y.js.map +1 -1
  10. package/dist/commands/dom/evalHelpers.js +1 -1
  11. package/dist/commands/dom/evalHelpers.js.map +1 -1
  12. package/dist/commands/dom/form.d.ts +14 -0
  13. package/dist/commands/dom/form.d.ts.map +1 -0
  14. package/dist/commands/dom/form.js +439 -0
  15. package/dist/commands/dom/form.js.map +1 -0
  16. package/dist/commands/dom/formDiscovery.d.ts +26 -0
  17. package/dist/commands/dom/formDiscovery.d.ts.map +1 -0
  18. package/dist/commands/dom/formDiscovery.js +476 -0
  19. package/dist/commands/dom/formDiscovery.js.map +1 -0
  20. package/dist/commands/dom/formFillHelpers.d.ts.map +1 -1
  21. package/dist/commands/dom/formFillHelpers.js +32 -4
  22. package/dist/commands/dom/formFillHelpers.js.map +1 -1
  23. package/dist/commands/dom/formInteraction.d.ts.map +1 -1
  24. package/dist/commands/dom/formInteraction.js.map +1 -1
  25. package/dist/commands/dom/formTypes.d.ts +75 -0
  26. package/dist/commands/dom/formTypes.d.ts.map +1 -0
  27. package/dist/commands/dom/formTypes.js +7 -0
  28. package/dist/commands/dom/formTypes.js.map +1 -0
  29. package/dist/commands/dom/helpers.d.ts +1 -1
  30. package/dist/commands/dom/helpers.js +1 -1
  31. package/dist/commands/dom/index.d.ts.map +1 -1
  32. package/dist/commands/dom/index.js +2 -0
  33. package/dist/commands/dom/index.js.map +1 -1
  34. package/dist/commands/dom/screenshotResize.d.ts +1 -1
  35. package/dist/commands/dom/screenshotResize.js +1 -1
  36. package/dist/commands/optionBehaviors.d.ts.map +1 -1
  37. package/dist/commands/optionBehaviors.js +11 -0
  38. package/dist/commands/optionBehaviors.js.map +1 -1
  39. package/dist/commands/shared/optionTypes.d.ts.map +1 -1
  40. package/dist/connection/cdp.js.map +1 -1
  41. package/dist/connection/launcher.d.ts.map +1 -1
  42. package/dist/connection/launcher.js.map +1 -1
  43. package/dist/ipc/protocol/messages.d.ts +2 -2
  44. package/dist/ipc/protocol/messages.d.ts.map +1 -1
  45. package/dist/types.d.ts +120 -1
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/ui/formatters/form.d.ts +15 -0
  48. package/dist/ui/formatters/form.d.ts.map +1 -0
  49. package/dist/ui/formatters/form.js +314 -0
  50. package/dist/ui/formatters/form.js.map +1 -0
  51. package/dist/ui/messages/errors.d.ts +41 -12
  52. package/dist/ui/messages/errors.d.ts.map +1 -1
  53. package/dist/ui/messages/errors.js +113 -15
  54. package/dist/ui/messages/errors.js.map +1 -1
  55. package/dist/utils/__tests__/shellDetection.unit.test.d.ts +12 -0
  56. package/dist/utils/__tests__/shellDetection.unit.test.d.ts.map +1 -0
  57. package/dist/utils/__tests__/shellDetection.unit.test.js +220 -0
  58. package/dist/utils/__tests__/shellDetection.unit.test.js.map +1 -0
  59. package/dist/utils/decisionTrees.d.ts.map +1 -1
  60. package/dist/utils/decisionTrees.js +5 -0
  61. package/dist/utils/decisionTrees.js.map +1 -1
  62. package/dist/utils/exitCodes.d.ts +2 -0
  63. package/dist/utils/exitCodes.d.ts.map +1 -1
  64. package/dist/utils/exitCodes.js +12 -0
  65. package/dist/utils/exitCodes.js.map +1 -1
  66. package/dist/utils/shellDetection.d.ts +34 -0
  67. package/dist/utils/shellDetection.d.ts.map +1 -0
  68. package/dist/utils/shellDetection.js +94 -0
  69. package/dist/utils/shellDetection.js.map +1 -0
  70. package/dist/utils/taskMappings.d.ts.map +1 -1
  71. package/dist/utils/taskMappings.js +5 -0
  72. package/dist/utils/taskMappings.js.map +1 -1
  73. package/dist/utils/url.d.ts.map +1 -1
  74. package/dist/utils/url.js +14 -0
  75. package/dist/utils/url.js.map +1 -1
  76. package/package.json +5 -5
@@ -4,6 +4,7 @@
4
4
  * Centralized location for reusable error messages with consistent formatting.
5
5
  */
6
6
  import { formatDuration, joinLines } from '../../ui/formatting.js';
7
+ import { detectSelectorQuoteDamage, detectScriptQuoteDamage, hasAttributeSelector, } from '../../utils/shellDetection.js';
7
8
  /**
8
9
  * Generate "session already running" error message.
9
10
  *
@@ -103,25 +104,34 @@ export function sessionNotActiveError(operation) {
103
104
  return joinLines(`Error: Cannot ${operation} - no active session`, '', 'Start a session first:', ' bdg <url>', '', 'Example:', ' bdg https://example.com', ` bdg ${operation}`);
104
105
  }
105
106
  /**
106
- * Generate element not found error with CDP fallback.
107
+ * Generate element not found error with shell quote detection and CDP fallback.
107
108
  *
108
- * Provides guidance for when high-level DOM commands fail to find elements,
109
- * including CDP alternatives for complex queries.
109
+ * Provides guidance for when high-level DOM commands fail to find elements.
110
+ * Detects shell quote damage for attribute selectors and provides specific
111
+ * recovery suggestions including the two-step query-then-inspect pattern.
110
112
  *
111
- * @param selector - CSS selector that failed
112
- * @returns Formatted error message with fallback suggestions
113
+ * @param selector - CSS selector that failed (as received by the command)
114
+ * @returns Formatted error message with context-aware suggestions
113
115
  *
114
116
  * @example
115
117
  * ```typescript
116
- * throw new CommandError(
117
- * elementNotFoundError('#missing-element'),
118
- * { cdpAlternative: 'Use Runtime.evaluate for complex queries' },
119
- * EXIT_CODES.RESOURCE_NOT_FOUND
120
- * );
118
+ * // Simple selector - standard suggestions
119
+ * elementNotFoundError('#missing-element')
120
+ *
121
+ * // Attribute selector with shell damage detected
122
+ * elementNotFoundError('[data-test-id=value]')
123
+ * // Shows: "Shell quote handling detected. Selector received without quotes."
121
124
  * ```
122
125
  */
123
126
  export function elementNotFoundError(selector) {
124
- return joinLines(`Error: Element not found: ${selector}`, '', 'Suggestions:', ' - Check the selector syntax', ' - Wait for the element to load (page might still be loading)', ' - Use bdg peek to see if page loaded correctly', '', 'Advanced: Use CDP for complex queries:', ` bdg cdp Runtime.evaluate --params '{"expression":"document.querySelector('${selector}')"}'`);
127
+ const quoteCheck = detectSelectorQuoteDamage(selector);
128
+ if (quoteCheck.damaged) {
129
+ return joinLines(`Error: Element not found: ${selector}`, '', 'Shell quote handling detected. Selector received without quotes.', quoteCheck.details && ` ${quoteCheck.details}`, '', 'Discovery path (recommended):', ` 1. Query first: bdg dom query '${selector}'`, ' 2. Then inspect: bdg dom a11y describe 0', '', 'Or escape quotes for direct use:', ` bdg cdp Runtime.evaluate --params '{"expression":"document.querySelector(\\"${selector.replace(/=/g, '=\\\\\\"')}\\\\\\"\\")"}'`);
130
+ }
131
+ if (hasAttributeSelector(selector)) {
132
+ return joinLines(`Error: Element not found: ${selector}`, '', 'Attribute selector detected. If quotes were stripped by shell:', '', 'Discovery path (recommended):', ` 1. Query first: bdg dom query '${selector}'`, ' 2. Then inspect: bdg dom a11y describe 0', '', 'Or verify element exists:', ' - Use bdg peek --dom to see page structure', ' - Check if element loads asynchronously');
133
+ }
134
+ return joinLines(`Error: Element not found: ${selector}`, '', 'Suggestions:', ' - Check the selector syntax', ' - Wait for the element to load (page might still be loading)', ' - Use bdg peek to see if page loaded correctly', '', 'Advanced: Use CDP for complex queries:', ` bdg cdp Runtime.evaluate --params '{"expression":"document.querySelector(\\"${selector}\\")"}'`);
125
135
  }
126
136
  /**
127
137
  * Index out of range error.
@@ -259,12 +269,47 @@ export function sessionMetadataMissingError(field) {
259
269
  };
260
270
  }
261
271
  /**
262
- * Script execution error.
272
+ * Script execution error with shell quote detection.
273
+ *
274
+ * Shows the script as received to help diagnose shell quote stripping issues.
275
+ * Detects common patterns like `querySelector(input)` that indicate shell damage.
276
+ *
277
+ * @param errorMessage - The JavaScript error message
278
+ * @param receivedScript - The script as received by the command (optional for backwards compat)
279
+ * @returns Error with context-aware suggestions
263
280
  */
264
- export function scriptExecutionError(details) {
281
+ export function scriptExecutionError(errorMessage, receivedScript) {
282
+ if (!receivedScript) {
283
+ return {
284
+ message: errorMessage,
285
+ suggestion: 'Check JavaScript syntax and ensure the expression is valid',
286
+ };
287
+ }
288
+ const quoteCheck = detectScriptQuoteDamage(receivedScript);
289
+ const truncatedScript = receivedScript.length > 100 ? receivedScript.slice(0, 100) + '...' : receivedScript;
290
+ const lines = [];
291
+ lines.push(`Script received: ${truncatedScript}`);
292
+ if (quoteCheck.damaged) {
293
+ lines.push('');
294
+ lines.push('Shell quote damage detected:');
295
+ if (quoteCheck.details) {
296
+ lines.push(` ${quoteCheck.details}`);
297
+ }
298
+ if (quoteCheck.suggestion) {
299
+ lines.push('');
300
+ lines.push(quoteCheck.suggestion);
301
+ }
302
+ }
303
+ else {
304
+ lines.push('');
305
+ lines.push('Tips:');
306
+ lines.push(" - Use single quotes around script: bdg dom eval '...'");
307
+ lines.push(' - For complex scripts, use heredoc or --file option');
308
+ lines.push(' - Escape inner quotes: \\" or use opposite quote style');
309
+ }
265
310
  return {
266
- message: details,
267
- suggestion: 'Check JavaScript syntax and ensure the expression is valid',
311
+ message: errorMessage,
312
+ suggestion: lines.join('\n'),
268
313
  };
269
314
  }
270
315
  /**
@@ -294,4 +339,57 @@ export function internalError(context) {
294
339
  suggestion: 'This is an internal error - please report this issue',
295
340
  };
296
341
  }
342
+ /**
343
+ * No forms found on page.
344
+ */
345
+ export function noFormsFoundError() {
346
+ return {
347
+ message: 'No forms discovered on the page',
348
+ suggestion: 'Check if forms exist with: bdg dom query "form, input, [role=textbox]" or inspect the page manually',
349
+ };
350
+ }
351
+ /**
352
+ * Form selection out of range.
353
+ */
354
+ export function formSelectionOutOfRangeError(index, count) {
355
+ return {
356
+ message: `Form index ${index} out of range (found ${count} form${count === 1 ? '' : 's'})`,
357
+ suggestion: count > 0 ? `Use an index between 0 and ${count - 1}` : 'No forms found on page',
358
+ };
359
+ }
360
+ /**
361
+ * Form selection by name not found.
362
+ */
363
+ export function formSelectionByNameNotFoundError(name, availableNames) {
364
+ const nameList = availableNames.length > 0
365
+ ? `Available forms: ${availableNames.join(', ')}`
366
+ : 'No named forms found';
367
+ return {
368
+ message: `No form found matching "${name}"`,
369
+ suggestion: `${nameList}. Use --all to see all forms.`,
370
+ };
371
+ }
372
+ /**
373
+ * Form in iframe (cross-origin or same-origin).
374
+ */
375
+ export function formInIframeError(iframeUrl, crossOrigin) {
376
+ const originNote = crossOrigin
377
+ ? 'Cross-origin iframe - cannot inspect directly'
378
+ : 'Same-origin iframe - use frame commands to access';
379
+ return {
380
+ message: `Form is inside an iframe: ${iframeUrl}`,
381
+ suggestion: crossOrigin
382
+ ? `${originNote}. Manual interaction required for cross-origin frames.`
383
+ : `${originNote}. Try: bdg dom frame list, then bdg dom frame attach <id>`,
384
+ };
385
+ }
386
+ /**
387
+ * Custom component interaction warning.
388
+ */
389
+ export function customComponentWarning(elementType, suggestedAction) {
390
+ return {
391
+ message: `Custom component detected: ${elementType}`,
392
+ suggestion: `Standard fill may not work. Try: ${suggestedAction}`,
393
+ };
394
+ }
297
395
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/ui/messages/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/ui/messages/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Shell Detection Unit Tests
3
+ *
4
+ * Tests shell quote damage detection for selectors and scripts.
5
+ *
6
+ * Following testing philosophy:
7
+ * - Test the BEHAVIOR: "Detects damaged input, provides actionable suggestions"
8
+ * - Test the PROPERTY: "Never throws, always returns valid result"
9
+ * - No mocking needed - pure utility functions
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=shellDetection.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shellDetection.unit.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/shellDetection.unit.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,220 @@
1
+ /**
2
+ * Shell Detection Unit Tests
3
+ *
4
+ * Tests shell quote damage detection for selectors and scripts.
5
+ *
6
+ * Following testing philosophy:
7
+ * - Test the BEHAVIOR: "Detects damaged input, provides actionable suggestions"
8
+ * - Test the PROPERTY: "Never throws, always returns valid result"
9
+ * - No mocking needed - pure utility functions
10
+ */
11
+ import assert from 'node:assert/strict';
12
+ import { describe, it } from 'node:test';
13
+ import { detectSelectorQuoteDamage, detectScriptQuoteDamage, hasAttributeSelector, } from '../../utils/shellDetection.js';
14
+ void describe('Shell Detection Utilities', () => {
15
+ void describe('hasAttributeSelector()', () => {
16
+ void it('returns true for attribute selectors', () => {
17
+ assert.equal(hasAttributeSelector('[data-test=value]'), true);
18
+ assert.equal(hasAttributeSelector('[type=submit]'), true);
19
+ assert.equal(hasAttributeSelector('input[name=email]'), true);
20
+ });
21
+ void it('returns false for simple selectors', () => {
22
+ assert.equal(hasAttributeSelector('#id'), false);
23
+ assert.equal(hasAttributeSelector('.class'), false);
24
+ assert.equal(hasAttributeSelector('button'), false);
25
+ assert.equal(hasAttributeSelector('div.class#id'), false);
26
+ });
27
+ void it('returns true for quoted attribute selectors', () => {
28
+ assert.equal(hasAttributeSelector('[data-test="value"]'), true);
29
+ assert.equal(hasAttributeSelector("[type='submit']"), true);
30
+ });
31
+ });
32
+ void describe('detectSelectorQuoteDamage()', () => {
33
+ void describe('detects damaged selectors', () => {
34
+ void it('detects unquoted attribute value', () => {
35
+ const result = detectSelectorQuoteDamage('[data-test=value]');
36
+ assert.equal(result.damaged, true);
37
+ assert.equal(result.type, 'attribute-selector');
38
+ assert.ok(result.details?.includes('data-test'));
39
+ assert.ok(result.details?.includes('value'));
40
+ assert.ok(result.suggestion?.includes('bdg dom query'));
41
+ });
42
+ void it('detects unquoted type attribute', () => {
43
+ const result = detectSelectorQuoteDamage('[type=submit]');
44
+ assert.equal(result.damaged, true);
45
+ assert.ok(result.details?.includes('type'));
46
+ assert.ok(result.details?.includes('submit'));
47
+ });
48
+ void it('detects nested selector with unquoted attribute', () => {
49
+ const result = detectSelectorQuoteDamage('form [name=email]');
50
+ assert.equal(result.damaged, true);
51
+ assert.ok(result.details?.includes('name'));
52
+ });
53
+ });
54
+ void describe('accepts valid selectors', () => {
55
+ void it('accepts properly quoted double quotes', () => {
56
+ const result = detectSelectorQuoteDamage('[data-test="value"]');
57
+ assert.equal(result.damaged, false);
58
+ });
59
+ void it('accepts properly quoted single quotes', () => {
60
+ const result = detectSelectorQuoteDamage("[data-test='value']");
61
+ assert.equal(result.damaged, false);
62
+ });
63
+ void it('accepts simple selectors without attributes', () => {
64
+ assert.equal(detectSelectorQuoteDamage('#id').damaged, false);
65
+ assert.equal(detectSelectorQuoteDamage('.class').damaged, false);
66
+ assert.equal(detectSelectorQuoteDamage('button').damaged, false);
67
+ assert.equal(detectSelectorQuoteDamage('div > p').damaged, false);
68
+ });
69
+ void it('accepts empty selector', () => {
70
+ const result = detectSelectorQuoteDamage('');
71
+ assert.equal(result.damaged, false);
72
+ });
73
+ });
74
+ void describe('suggestion quality', () => {
75
+ void it('provides two-step discovery path', () => {
76
+ const result = detectSelectorQuoteDamage('[data-test=value]');
77
+ assert.ok(result.suggestion?.includes('bdg dom query'));
78
+ assert.ok(result.suggestion?.includes('bdg dom a11y describe 0'));
79
+ });
80
+ void it('includes original selector in suggestion', () => {
81
+ const selector = '[custom-attr=myvalue]';
82
+ const result = detectSelectorQuoteDamage(selector);
83
+ assert.ok(result.suggestion?.includes(selector));
84
+ });
85
+ });
86
+ });
87
+ void describe('detectScriptQuoteDamage()', () => {
88
+ void describe('detects bare function arguments', () => {
89
+ void it('detects querySelector with bare argument', () => {
90
+ const result = detectScriptQuoteDamage('document.querySelector(input)');
91
+ assert.equal(result.damaged, true);
92
+ assert.equal(result.type, 'unquoted-argument');
93
+ assert.ok(result.details?.includes('querySelector'));
94
+ assert.ok(result.details?.includes('input'));
95
+ });
96
+ void it('detects getElementById with bare argument', () => {
97
+ const result = detectScriptQuoteDamage('document.getElementById(myId)');
98
+ assert.equal(result.damaged, true);
99
+ assert.ok(result.details?.includes('getElementById'));
100
+ assert.ok(result.details?.includes('myId'));
101
+ });
102
+ void it('detects closest with bare argument', () => {
103
+ const result = detectScriptQuoteDamage('element.closest(div)');
104
+ assert.equal(result.damaged, true);
105
+ assert.ok(result.details?.includes('closest'));
106
+ assert.ok(result.details?.includes('div'));
107
+ });
108
+ void it('detects getAttribute with bare argument', () => {
109
+ const result = detectScriptQuoteDamage('el.getAttribute(href)');
110
+ assert.equal(result.damaged, true);
111
+ assert.ok(result.details?.includes('getAttribute'));
112
+ assert.ok(result.details?.includes('href'));
113
+ });
114
+ void it('detects classList.add with bare argument', () => {
115
+ const result = detectScriptQuoteDamage('el.classList.add(active)');
116
+ assert.equal(result.damaged, true);
117
+ assert.ok(result.details?.includes('add'));
118
+ assert.ok(result.details?.includes('active'));
119
+ });
120
+ void it('detects matches with bare argument', () => {
121
+ const result = detectScriptQuoteDamage('element.matches(button)');
122
+ assert.equal(result.damaged, true);
123
+ assert.ok(result.details?.includes('matches'));
124
+ });
125
+ });
126
+ void describe('accepts valid scripts', () => {
127
+ void it('accepts properly quoted strings', () => {
128
+ assert.equal(detectScriptQuoteDamage('document.querySelector("input")').damaged, false);
129
+ assert.equal(detectScriptQuoteDamage("document.querySelector('input')").damaged, false);
130
+ assert.equal(detectScriptQuoteDamage('el.getAttribute("href")').damaged, false);
131
+ });
132
+ void it('accepts scripts without function calls', () => {
133
+ assert.equal(detectScriptQuoteDamage('document.title').damaged, false);
134
+ assert.equal(detectScriptQuoteDamage('window.location.href').damaged, false);
135
+ assert.equal(detectScriptQuoteDamage('1 + 2').damaged, false);
136
+ });
137
+ void it('accepts numeric arguments', () => {
138
+ assert.equal(detectScriptQuoteDamage('array.slice(0, 5)').damaged, false);
139
+ assert.equal(detectScriptQuoteDamage('Math.max(1, 2, 3)').damaged, false);
140
+ });
141
+ void it('accepts empty script', () => {
142
+ const result = detectScriptQuoteDamage('');
143
+ assert.equal(result.damaged, false);
144
+ });
145
+ });
146
+ void describe('suggestion quality', () => {
147
+ void it('provides corrected full expression', () => {
148
+ const result = detectScriptQuoteDamage('document.querySelector(input).value');
149
+ assert.ok(result.suggestion?.includes('document.querySelector("input").value'));
150
+ });
151
+ void it('preserves context around damaged part', () => {
152
+ const result = detectScriptQuoteDamage('element.closest(div).textContent');
153
+ assert.ok(result.suggestion?.includes('element.closest("div").textContent'));
154
+ });
155
+ void it('includes bdg dom eval command', () => {
156
+ const result = detectScriptQuoteDamage('func(arg)');
157
+ assert.ok(result.suggestion?.includes('bdg dom eval'));
158
+ });
159
+ });
160
+ void describe('unexpected identifier fallback', () => {
161
+ void it('detects unexpected identifier error pattern', () => {
162
+ const result = detectScriptQuoteDamage("Unexpected identifier 'foo'");
163
+ assert.equal(result.damaged, true);
164
+ assert.ok(result.suggestion?.includes('single quotes'));
165
+ });
166
+ });
167
+ });
168
+ void describe('Type safety and edge cases', () => {
169
+ void it('never throws for any string input', () => {
170
+ const edgeCases = [
171
+ '',
172
+ ' ',
173
+ '[]',
174
+ '()',
175
+ '[=]',
176
+ 'func()',
177
+ '[[nested]]',
178
+ 'a'.repeat(1000),
179
+ '🚀',
180
+ '\n\t',
181
+ 'null',
182
+ 'undefined',
183
+ ];
184
+ for (const input of edgeCases) {
185
+ assert.doesNotThrow(() => {
186
+ detectSelectorQuoteDamage(input);
187
+ detectScriptQuoteDamage(input);
188
+ hasAttributeSelector(input);
189
+ }, `Should not throw for input: ${JSON.stringify(input)}`);
190
+ }
191
+ });
192
+ void it('always returns valid ShellDamageResult structure', () => {
193
+ const inputs = ['[test=value]', '#simple', 'func(arg)', 'valid()'];
194
+ for (const input of inputs) {
195
+ const selectorResult = detectSelectorQuoteDamage(input);
196
+ const scriptResult = detectScriptQuoteDamage(input);
197
+ assert.equal(typeof selectorResult.damaged, 'boolean');
198
+ assert.equal(typeof scriptResult.damaged, 'boolean');
199
+ if (selectorResult.damaged) {
200
+ assert.equal(typeof selectorResult.details, 'string');
201
+ assert.equal(typeof selectorResult.suggestion, 'string');
202
+ }
203
+ if (scriptResult.damaged) {
204
+ assert.equal(typeof scriptResult.details, 'string');
205
+ assert.equal(typeof scriptResult.suggestion, 'string');
206
+ }
207
+ }
208
+ });
209
+ void it('handles special regex characters safely', () => {
210
+ const specialChars = ['[test.value]', '[test*=value]', '[test^=value]', 'func(a|b)'];
211
+ for (const input of specialChars) {
212
+ assert.doesNotThrow(() => {
213
+ detectSelectorQuoteDamage(input);
214
+ detectScriptQuoteDamage(input);
215
+ });
216
+ }
217
+ });
218
+ });
219
+ });
220
+ //# sourceMappingURL=shellDetection.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shellDetection.unit.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/shellDetection.unit.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"decisionTrees.d.ts","sourceRoot":"","sources":["../../src/utils/decisionTrees.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CA2JvD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAElE"}
1
+ {"version":3,"file":"decisionTrees.d.ts","sourceRoot":"","sources":["../../src/utils/decisionTrees.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAgKvD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAElE"}
@@ -11,6 +11,11 @@ export const DECISION_TREES = {
11
11
  dom_interaction: {
12
12
  intent: 'Interact with page elements and DOM',
13
13
  steps: [
14
+ {
15
+ question: 'Need to discover forms with semantic labels?',
16
+ yesCommand: 'dom form',
17
+ noAction: 'next',
18
+ },
14
19
  {
15
20
  question: 'Need to capture a screenshot?',
16
21
  yesCommand: 'dom screenshot',
@@ -1 +1 @@
1
- {"version":3,"file":"decisionTrees.js","sourceRoot":"","sources":["../../src/utils/decisionTrees.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decisionTrees.js","sourceRoot":"","sources":["../../src/utils/decisionTrees.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,8 @@ export declare const EXIT_CODES: {
42
42
  readonly RESOURCE_BUSY: 85;
43
43
  readonly DAEMON_ALREADY_RUNNING: 86;
44
44
  readonly STALE_CACHE: 87;
45
+ readonly NO_FORMS_FOUND: 88;
46
+ readonly FORM_IN_IFRAME: 89;
45
47
  readonly CHROME_LAUNCH_FAILURE: 100;
46
48
  readonly CDP_CONNECTION_FAILURE: 101;
47
49
  readonly CDP_TIMEOUT: 102;
@@ -1 +1 @@
1
- {"version":3,"file":"exitCodes.d.ts","sourceRoot":"","sources":["../../src/utils/exitCodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH;;;;GAIG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;CAkBb,CAAC;AAEX;;GAEG;AACH,UAAU,aAAa;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,aAAa,EA8EtD,CAAC"}
1
+ {"version":3,"file":"exitCodes.d.ts","sourceRoot":"","sources":["../../src/utils/exitCodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH;;;;GAIG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;CAoBb,CAAC;AAEX;;GAEG;AACH,UAAU,aAAa;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,aAAa,EAwFtD,CAAC"}
@@ -42,6 +42,8 @@ export const EXIT_CODES = {
42
42
  RESOURCE_BUSY: 85,
43
43
  DAEMON_ALREADY_RUNNING: 86,
44
44
  STALE_CACHE: 87,
45
+ NO_FORMS_FOUND: 88,
46
+ FORM_IN_IFRAME: 89,
45
47
  CHROME_LAUNCH_FAILURE: 100,
46
48
  CDP_CONNECTION_FAILURE: 101,
47
49
  CDP_TIMEOUT: 102,
@@ -103,6 +105,16 @@ export const EXIT_CODE_REGISTRY = [
103
105
  name: 'STALE_CACHE',
104
106
  description: 'Cache invalidated by navigation or DOM changes',
105
107
  },
108
+ {
109
+ code: EXIT_CODES.NO_FORMS_FOUND,
110
+ name: 'NO_FORMS_FOUND',
111
+ description: 'No forms discovered on the page',
112
+ },
113
+ {
114
+ code: EXIT_CODES.FORM_IN_IFRAME,
115
+ name: 'FORM_IN_IFRAME',
116
+ description: 'Form is inside an iframe (cross-origin or same-origin)',
117
+ },
106
118
  {
107
119
  code: EXIT_CODES.CHROME_LAUNCH_FAILURE,
108
120
  name: 'CHROME_LAUNCH_FAILURE',
@@ -1 +1 @@
1
- {"version":3,"file":"exitCodes.js","sourceRoot":"","sources":["../../src/utils/exitCodes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exitCodes.js","sourceRoot":"","sources":["../../src/utils/exitCodes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Shell quote damage detection utilities.
3
+ *
4
+ * Detects when shell quote handling has corrupted selectors or scripts,
5
+ * providing actionable suggestions for recovery.
6
+ */
7
+ export interface ShellDamageResult {
8
+ damaged: boolean;
9
+ type?: 'attribute-selector' | 'unquoted-argument';
10
+ details?: string;
11
+ suggestion?: string;
12
+ }
13
+ /**
14
+ * Checks if a selector contains attribute syntax.
15
+ *
16
+ * @param selector - CSS selector to check
17
+ * @returns True if selector contains attribute syntax
18
+ */
19
+ export declare function hasAttributeSelector(selector: string): boolean;
20
+ /**
21
+ * Detects shell quote damage in CSS selectors.
22
+ *
23
+ * @param selector - The selector as received by the command
24
+ * @returns Detection result with details and suggestions
25
+ */
26
+ export declare function detectSelectorQuoteDamage(selector: string): ShellDamageResult;
27
+ /**
28
+ * Detects shell quote damage in JavaScript expressions.
29
+ *
30
+ * @param script - The script as received by the command
31
+ * @returns Detection result with details and suggestions
32
+ */
33
+ export declare function detectScriptQuoteDamage(script: string): ShellDamageResult;
34
+ //# sourceMappingURL=shellDetection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shellDetection.d.ts","sourceRoot":"","sources":["../../src/utils/shellDetection.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,oBAAoB,GAAG,mBAAmB,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAkED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAM7E;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAOzE"}