browser-debugger-cli 0.6.11 → 0.7.1

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 (134) hide show
  1. package/README.md +2 -0
  2. package/dist/commands/cdp.d.ts.map +1 -1
  3. package/dist/commands/cdp.js +90 -15
  4. package/dist/commands/cdp.js.map +1 -1
  5. package/dist/commands/dom/DomElementResolver.d.ts.map +1 -1
  6. package/dist/commands/dom/DomElementResolver.js +28 -7
  7. package/dist/commands/dom/DomElementResolver.js.map +1 -1
  8. package/dist/commands/dom/a11y.d.ts.map +1 -1
  9. package/dist/commands/dom/a11y.js +5 -1
  10. package/dist/commands/dom/a11y.js.map +1 -1
  11. package/dist/commands/dom/evalHelpers.js +1 -1
  12. package/dist/commands/dom/evalHelpers.js.map +1 -1
  13. package/dist/commands/dom/form.d.ts +14 -0
  14. package/dist/commands/dom/form.d.ts.map +1 -0
  15. package/dist/commands/dom/form.js +441 -0
  16. package/dist/commands/dom/form.js.map +1 -0
  17. package/dist/commands/dom/formDiscovery.d.ts +26 -0
  18. package/dist/commands/dom/formDiscovery.d.ts.map +1 -0
  19. package/dist/commands/dom/formDiscovery.js +476 -0
  20. package/dist/commands/dom/formDiscovery.js.map +1 -0
  21. package/dist/commands/dom/formFillHelpers.d.ts +72 -0
  22. package/dist/commands/dom/formFillHelpers.d.ts.map +1 -1
  23. package/dist/commands/dom/formFillHelpers.js +241 -5
  24. package/dist/commands/dom/formFillHelpers.js.map +1 -1
  25. package/dist/commands/dom/formInteraction.d.ts.map +1 -1
  26. package/dist/commands/dom/formInteraction.js +119 -3
  27. package/dist/commands/dom/formInteraction.js.map +1 -1
  28. package/dist/commands/dom/formTypes.d.ts +75 -0
  29. package/dist/commands/dom/formTypes.d.ts.map +1 -0
  30. package/dist/commands/dom/formTypes.js +7 -0
  31. package/dist/commands/dom/formTypes.js.map +1 -0
  32. package/dist/commands/dom/helpers.d.ts +1 -1
  33. package/dist/commands/dom/helpers.js +1 -1
  34. package/dist/commands/dom/index.d.ts.map +1 -1
  35. package/dist/commands/dom/index.js +7 -2
  36. package/dist/commands/dom/index.js.map +1 -1
  37. package/dist/commands/dom/screenshotResize.d.ts +1 -1
  38. package/dist/commands/dom/screenshotResize.js +1 -1
  39. package/dist/commands/optionBehaviors.d.ts.map +1 -1
  40. package/dist/commands/optionBehaviors.js +37 -0
  41. package/dist/commands/optionBehaviors.js.map +1 -1
  42. package/dist/commands/shared/optionTypes.d.ts +22 -0
  43. package/dist/commands/shared/optionTypes.d.ts.map +1 -1
  44. package/dist/commands/shared/startHelpers.d.ts.map +1 -1
  45. package/dist/commands/shared/startHelpers.js +1 -0
  46. package/dist/commands/shared/startHelpers.js.map +1 -1
  47. package/dist/commands/start.d.ts.map +1 -1
  48. package/dist/commands/start.js +25 -6
  49. package/dist/commands/start.js.map +1 -1
  50. package/dist/connection/__tests__/flagsBuilder.unit.test.d.ts +9 -0
  51. package/dist/connection/__tests__/flagsBuilder.unit.test.d.ts.map +1 -0
  52. package/dist/connection/__tests__/flagsBuilder.unit.test.js +94 -0
  53. package/dist/connection/__tests__/flagsBuilder.unit.test.js.map +1 -0
  54. package/dist/connection/cdp.js.map +1 -1
  55. package/dist/connection/launcher/flagsBuilder.d.ts +26 -0
  56. package/dist/connection/launcher/flagsBuilder.d.ts.map +1 -1
  57. package/dist/connection/launcher/flagsBuilder.js +36 -8
  58. package/dist/connection/launcher/flagsBuilder.js.map +1 -1
  59. package/dist/connection/launcher.d.ts.map +1 -1
  60. package/dist/connection/launcher.js +20 -9
  61. package/dist/connection/launcher.js.map +1 -1
  62. package/dist/constants.d.ts.map +1 -1
  63. package/dist/constants.js +1 -0
  64. package/dist/constants.js.map +1 -1
  65. package/dist/daemon/handlers/SessionHandlers.d.ts.map +1 -1
  66. package/dist/daemon/handlers/SessionHandlers.js +1 -0
  67. package/dist/daemon/handlers/SessionHandlers.js.map +1 -1
  68. package/dist/daemon/launcher.d.ts.map +1 -1
  69. package/dist/daemon/launcher.js +8 -2
  70. package/dist/daemon/launcher.js.map +1 -1
  71. package/dist/daemon/lifecycle/chromeConnection.js +1 -1
  72. package/dist/daemon/lifecycle/chromeConnection.js.map +1 -1
  73. package/dist/daemon/lifecycle/workerCleanup.d.ts.map +1 -1
  74. package/dist/daemon/lifecycle/workerCleanup.js +3 -1
  75. package/dist/daemon/lifecycle/workerCleanup.js.map +1 -1
  76. package/dist/daemon/lifecycle/workerConfig.d.ts.map +1 -1
  77. package/dist/daemon/lifecycle/workerConfig.js +3 -0
  78. package/dist/daemon/lifecycle/workerConfig.js.map +1 -1
  79. package/dist/daemon/startSession.d.ts +2 -0
  80. package/dist/daemon/startSession.d.ts.map +1 -1
  81. package/dist/daemon/startSession.js +7 -1
  82. package/dist/daemon/startSession.js.map +1 -1
  83. package/dist/daemon/worker/types.d.ts +2 -0
  84. package/dist/daemon/worker/types.d.ts.map +1 -1
  85. package/dist/ipc/client.d.ts.map +1 -1
  86. package/dist/ipc/client.js +1 -0
  87. package/dist/ipc/client.js.map +1 -1
  88. package/dist/ipc/protocol/messages.d.ts +2 -2
  89. package/dist/ipc/protocol/messages.d.ts.map +1 -1
  90. package/dist/ipc/session/lifecycle.d.ts +4 -0
  91. package/dist/ipc/session/lifecycle.d.ts.map +1 -1
  92. package/dist/session/cleanup.d.ts.map +1 -1
  93. package/dist/session/cleanup.js +50 -4
  94. package/dist/session/cleanup.js.map +1 -1
  95. package/dist/session/paths.d.ts +1 -0
  96. package/dist/session/paths.d.ts.map +1 -1
  97. package/dist/session/paths.js +1 -0
  98. package/dist/session/paths.js.map +1 -1
  99. package/dist/session/port.d.ts +41 -0
  100. package/dist/session/port.d.ts.map +1 -0
  101. package/dist/session/port.js +134 -0
  102. package/dist/session/port.js.map +1 -0
  103. package/dist/types.d.ts +120 -1
  104. package/dist/types.d.ts.map +1 -1
  105. package/dist/ui/formatters/form.d.ts +15 -0
  106. package/dist/ui/formatters/form.d.ts.map +1 -0
  107. package/dist/ui/formatters/form.js +314 -0
  108. package/dist/ui/formatters/form.js.map +1 -0
  109. package/dist/ui/messages/errors.d.ts +41 -12
  110. package/dist/ui/messages/errors.d.ts.map +1 -1
  111. package/dist/ui/messages/errors.js +113 -15
  112. package/dist/ui/messages/errors.js.map +1 -1
  113. package/dist/utils/__tests__/shellDetection.unit.test.d.ts +12 -0
  114. package/dist/utils/__tests__/shellDetection.unit.test.d.ts.map +1 -0
  115. package/dist/utils/__tests__/shellDetection.unit.test.js +220 -0
  116. package/dist/utils/__tests__/shellDetection.unit.test.js.map +1 -0
  117. package/dist/utils/decisionTrees.d.ts.map +1 -1
  118. package/dist/utils/decisionTrees.js +5 -0
  119. package/dist/utils/decisionTrees.js.map +1 -1
  120. package/dist/utils/exitCodes.d.ts +2 -0
  121. package/dist/utils/exitCodes.d.ts.map +1 -1
  122. package/dist/utils/exitCodes.js +12 -0
  123. package/dist/utils/exitCodes.js.map +1 -1
  124. package/dist/utils/shellDetection.d.ts +34 -0
  125. package/dist/utils/shellDetection.d.ts.map +1 -0
  126. package/dist/utils/shellDetection.js +94 -0
  127. package/dist/utils/shellDetection.js.map +1 -0
  128. package/dist/utils/taskMappings.d.ts.map +1 -1
  129. package/dist/utils/taskMappings.js +5 -0
  130. package/dist/utils/taskMappings.js.map +1 -1
  131. package/dist/utils/url.d.ts.map +1 -1
  132. package/dist/utils/url.js +14 -0
  133. package/dist/utils/url.js.map +1 -1
  134. package/package.json +5 -5
@@ -0,0 +1,314 @@
1
+ /**
2
+ * Human-readable formatter for form discovery output.
3
+ *
4
+ * Formats discovered forms with semantic tables showing fields,
5
+ * values, validation state, and suggested commands.
6
+ */
7
+ import { OutputFormatter } from '../../ui/formatting.js';
8
+ const COLUMN_WIDTHS = {
9
+ index: 4,
10
+ type: 12,
11
+ label: 24,
12
+ value: 20,
13
+ status: 10,
14
+ };
15
+ /**
16
+ * Format field type for display.
17
+ *
18
+ * @param field - Form field
19
+ * @returns Formatted type string
20
+ */
21
+ function formatFieldType(field) {
22
+ const type = field.inputType ?? field.type;
23
+ return type.slice(0, COLUMN_WIDTHS.type - 1);
24
+ }
25
+ /**
26
+ * Format field value for display.
27
+ *
28
+ * @param field - Form field
29
+ * @returns Formatted value string
30
+ */
31
+ function formatFieldValue(field) {
32
+ if (field.state === 'checked') {
33
+ return 'checked';
34
+ }
35
+ if (field.state === 'unchecked') {
36
+ return 'unchecked';
37
+ }
38
+ if (field.maskedValue) {
39
+ return `"${field.maskedValue}"`;
40
+ }
41
+ if (typeof field.value === 'string' && field.value.length > 0) {
42
+ const truncated = field.value.slice(0, COLUMN_WIDTHS.value - 3);
43
+ return `"${truncated}${field.value.length > COLUMN_WIDTHS.value - 3 ? '...' : ''}"`;
44
+ }
45
+ if (Array.isArray(field.value) && field.value.length > 0) {
46
+ return `[${field.value.length} selected]`;
47
+ }
48
+ return 'empty';
49
+ }
50
+ /**
51
+ * Format field status with icon.
52
+ *
53
+ * @param field - Form field
54
+ * @returns Status string with icon
55
+ */
56
+ function formatFieldStatus(field) {
57
+ if (field.disabled) {
58
+ return 'disabled';
59
+ }
60
+ if (!field.validation.valid) {
61
+ return 'invalid';
62
+ }
63
+ if (field.required && (field.state === 'empty' || field.state === 'unchecked')) {
64
+ return 'required';
65
+ }
66
+ return 'ok';
67
+ }
68
+ /**
69
+ * Format required marker.
70
+ *
71
+ * @param field - Form field
72
+ * @returns Asterisk if required, empty string otherwise
73
+ */
74
+ function formatRequiredMarker(field) {
75
+ return field.required ? '*' : '';
76
+ }
77
+ /**
78
+ * Format field row for table.
79
+ *
80
+ * @param field - Form field
81
+ * @returns Formatted row string
82
+ */
83
+ function formatFieldRow(field) {
84
+ const idx = String(field.index).padStart(COLUMN_WIDTHS.index);
85
+ const type = formatFieldType(field).padEnd(COLUMN_WIDTHS.type);
86
+ const label = (field.label + formatRequiredMarker(field))
87
+ .slice(0, COLUMN_WIDTHS.label)
88
+ .padEnd(COLUMN_WIDTHS.label);
89
+ const value = formatFieldValue(field).padEnd(COLUMN_WIDTHS.value);
90
+ const status = formatFieldStatus(field);
91
+ let warning = '';
92
+ if (field.interactionWarning) {
93
+ warning = ` [custom]`;
94
+ }
95
+ return `${idx} ${type} ${label} ${value} ${status}${warning}`;
96
+ }
97
+ /**
98
+ * Format button row for table.
99
+ *
100
+ * @param button - Form button
101
+ * @returns Formatted row string
102
+ */
103
+ function formatButtonRow(button) {
104
+ const idx = String(button.index).padStart(COLUMN_WIDTHS.index);
105
+ const type = 'button'.padEnd(COLUMN_WIDTHS.type);
106
+ const label = button.label.slice(0, COLUMN_WIDTHS.label).padEnd(COLUMN_WIDTHS.label);
107
+ const primary = button.primary ? '(primary)' : '(secondary)';
108
+ const enabled = button.enabled ? 'enabled' : 'disabled';
109
+ return `${idx} ${type} ${label} ${primary.padEnd(COLUMN_WIDTHS.value)} ${enabled}`;
110
+ }
111
+ /**
112
+ * Format form header with name and step indicator.
113
+ *
114
+ * @param form - Discovered form
115
+ * @returns Header string
116
+ */
117
+ function formatFormHeader(form) {
118
+ let header = `Form: "${form.name ?? 'Unnamed'}"`;
119
+ if (form.step) {
120
+ header += ` (step ${form.step.current} of ${form.step.total})`;
121
+ }
122
+ return header;
123
+ }
124
+ /**
125
+ * Format table header row.
126
+ *
127
+ * @returns Header row string
128
+ */
129
+ function formatTableHeader() {
130
+ const idx = '#'.padStart(COLUMN_WIDTHS.index);
131
+ const type = 'Type'.padEnd(COLUMN_WIDTHS.type);
132
+ const label = 'Label'.padEnd(COLUMN_WIDTHS.label);
133
+ const value = 'Value'.padEnd(COLUMN_WIDTHS.value);
134
+ const status = 'Status';
135
+ return `${idx} ${type} ${label} ${value} ${status}`;
136
+ }
137
+ /**
138
+ * Format summary line.
139
+ *
140
+ * @param summary - Form summary
141
+ * @returns Summary string
142
+ */
143
+ function formatSummaryLine(summary) {
144
+ const parts = [];
145
+ parts.push(`${summary.filledFields}/${summary.totalFields} fields filled`);
146
+ if (summary.invalidFields > 0) {
147
+ parts.push(`${summary.invalidFields} invalid`);
148
+ }
149
+ if (summary.requiredRemaining > 0) {
150
+ parts.push(`${summary.requiredRemaining} required remaining`);
151
+ }
152
+ if (summary.readyToSubmit) {
153
+ parts.push('READY to submit');
154
+ }
155
+ else {
156
+ parts.push('NOT ready');
157
+ }
158
+ return `Summary: ${parts.join(' | ')}`;
159
+ }
160
+ /**
161
+ * Format remaining actions section.
162
+ *
163
+ * @param summary - Form summary
164
+ * @returns Array of command strings
165
+ */
166
+ function formatRemainingActions(summary) {
167
+ if (summary.blockers.length === 0) {
168
+ return [];
169
+ }
170
+ return summary.blockers.slice(0, 5).map((b) => ` ${b.command.padEnd(35)} # ${b.label}`);
171
+ }
172
+ /**
173
+ * Format single form for display.
174
+ *
175
+ * @param form - Discovered form
176
+ * @param fmt - Output formatter
177
+ */
178
+ function formatSingleForm(form, fmt, brief = false) {
179
+ fmt.text(formatFormHeader(form));
180
+ fmt.text('─'.repeat(70));
181
+ if (brief) {
182
+ formatBriefFields(form, fmt);
183
+ return;
184
+ }
185
+ fmt.text(formatTableHeader());
186
+ fmt.text('─'.repeat(70));
187
+ for (const field of form.fields) {
188
+ if (!field.hidden) {
189
+ fmt.text(formatFieldRow(field));
190
+ }
191
+ }
192
+ if (form.buttons.length > 0) {
193
+ fmt.text('─'.repeat(70));
194
+ for (const button of form.buttons) {
195
+ fmt.text(formatButtonRow(button));
196
+ }
197
+ }
198
+ fmt.text('═'.repeat(70));
199
+ fmt.text(formatSummaryLine(form.summary));
200
+ const remaining = formatRemainingActions(form.summary);
201
+ if (remaining.length > 0) {
202
+ fmt.blank();
203
+ fmt.text('Remaining:');
204
+ for (const action of remaining) {
205
+ fmt.text(action);
206
+ }
207
+ }
208
+ }
209
+ /**
210
+ * Format brief field listing.
211
+ *
212
+ * @param form - Discovered form
213
+ * @param fmt - Output formatter
214
+ */
215
+ function formatBriefFields(form, fmt) {
216
+ fmt.text('IDX TYPE LABEL REQ');
217
+ fmt.text('─'.repeat(50));
218
+ for (const field of form.fields) {
219
+ if (field.hidden)
220
+ continue;
221
+ const idx = `[${field.index}]`.padEnd(4);
222
+ const type = (field.inputType ?? field.type).slice(0, 11).padEnd(12);
223
+ const label = (field.label ?? field.name ?? '(no label)').slice(0, 23).padEnd(24);
224
+ const req = field.required ? '*' : '';
225
+ fmt.text(`${idx} ${type} ${label} ${req}`);
226
+ }
227
+ if (form.buttons.length > 0) {
228
+ fmt.text('─'.repeat(50));
229
+ for (const button of form.buttons) {
230
+ const idx = `[${button.index}]`.padEnd(4);
231
+ const type = 'button'.padEnd(12);
232
+ const label = (button.label || button.type).slice(0, 23).padEnd(24);
233
+ fmt.text(`${idx} ${type} ${label}`);
234
+ }
235
+ }
236
+ }
237
+ /**
238
+ * Format other forms summary.
239
+ *
240
+ * @param forms - All forms
241
+ * @param selectedIndex - Index of selected form
242
+ * @param fmt - Output formatter
243
+ */
244
+ function formatOtherForms(forms, selectedIndex, fmt) {
245
+ const others = forms.filter((_, i) => i !== selectedIndex);
246
+ if (others.length === 0) {
247
+ return;
248
+ }
249
+ fmt.blank();
250
+ fmt.text('Other forms on page:');
251
+ for (const form of others) {
252
+ const fieldCount = form.fields.filter((f) => !f.hidden).length;
253
+ fmt.text(` Form ${form.index}: "${form.name ?? 'Unnamed'}" - ${fieldCount} field(s)`);
254
+ }
255
+ fmt.blank();
256
+ fmt.text('Use --all to see all forms');
257
+ }
258
+ /**
259
+ * Format form discovery result for human-readable display.
260
+ *
261
+ * @param result - Form discovery result
262
+ * @returns Formatted output string
263
+ */
264
+ export function formatFormDiscovery(result) {
265
+ const fmt = new OutputFormatter();
266
+ fmt.text(`FORMS DISCOVERED: ${result.formCount}`);
267
+ fmt.text('═'.repeat(70));
268
+ fmt.blank();
269
+ for (const form of result.forms) {
270
+ formatSingleForm(form, fmt, result.brief);
271
+ fmt.blank();
272
+ }
273
+ if (result.forms.length === 1 && result.formCount > 1) {
274
+ const allForms = [];
275
+ for (let i = 0; i < result.formCount; i++) {
276
+ if (i === result.selectedForm) {
277
+ allForms.push(result.forms[0]);
278
+ }
279
+ else {
280
+ allForms.push({
281
+ index: i,
282
+ name: `Form ${i}`,
283
+ action: null,
284
+ method: 'GET',
285
+ relevanceScore: 0,
286
+ fields: [],
287
+ buttons: [],
288
+ summary: {
289
+ totalFields: 0,
290
+ filledFields: 0,
291
+ emptyFields: 0,
292
+ validFields: 0,
293
+ invalidFields: 0,
294
+ requiredTotal: 0,
295
+ requiredFilled: 0,
296
+ requiredRemaining: 0,
297
+ readyToSubmit: true,
298
+ blockers: [],
299
+ },
300
+ });
301
+ }
302
+ }
303
+ formatOtherForms(allForms, result.selectedForm, fmt);
304
+ }
305
+ fmt.blank();
306
+ fmt.text('Suggested commands:');
307
+ fmt.text(' bdg dom fill <index> "<value>" Fill a field');
308
+ fmt.text(' bdg dom click <index> Click/check a field or button');
309
+ fmt.text(' bdg dom form Refresh to see current state');
310
+ fmt.blank();
311
+ fmt.text('Tip: Re-run "bdg dom form" after clicks that may reveal hidden fields');
312
+ return fmt.build();
313
+ }
314
+ //# sourceMappingURL=form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form.js","sourceRoot":"","sources":["../../../src/ui/formatters/form.ts"],"names":[],"mappings":"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"}
@@ -100,21 +100,23 @@ export declare function invalidResponseError(reason: string): string;
100
100
  */
101
101
  export declare function sessionNotActiveError(operation: string): string;
102
102
  /**
103
- * Generate element not found error with CDP fallback.
103
+ * Generate element not found error with shell quote detection and CDP fallback.
104
104
  *
105
- * Provides guidance for when high-level DOM commands fail to find elements,
106
- * including CDP alternatives for complex queries.
105
+ * Provides guidance for when high-level DOM commands fail to find elements.
106
+ * Detects shell quote damage for attribute selectors and provides specific
107
+ * recovery suggestions including the two-step query-then-inspect pattern.
107
108
  *
108
- * @param selector - CSS selector that failed
109
- * @returns Formatted error message with fallback suggestions
109
+ * @param selector - CSS selector that failed (as received by the command)
110
+ * @returns Formatted error message with context-aware suggestions
110
111
  *
111
112
  * @example
112
113
  * ```typescript
113
- * throw new CommandError(
114
- * elementNotFoundError('#missing-element'),
115
- * { cdpAlternative: 'Use Runtime.evaluate for complex queries' },
116
- * EXIT_CODES.RESOURCE_NOT_FOUND
117
- * );
114
+ * // Simple selector - standard suggestions
115
+ * elementNotFoundError('#missing-element')
116
+ *
117
+ * // Attribute selector with shell damage detected
118
+ * elementNotFoundError('[data-test-id=value]')
119
+ * // Shows: "Shell quote handling detected. Selector received without quotes."
118
120
  * ```
119
121
  */
120
122
  export declare function elementNotFoundError(selector: string): string;
@@ -186,9 +188,16 @@ export declare function sessionTargetNotFoundError(): ErrorWithSuggestion;
186
188
  */
187
189
  export declare function sessionMetadataMissingError(field: string): ErrorWithSuggestion;
188
190
  /**
189
- * Script execution error.
191
+ * Script execution error with shell quote detection.
192
+ *
193
+ * Shows the script as received to help diagnose shell quote stripping issues.
194
+ * Detects common patterns like `querySelector(input)` that indicate shell damage.
195
+ *
196
+ * @param errorMessage - The JavaScript error message
197
+ * @param receivedScript - The script as received by the command (optional for backwards compat)
198
+ * @returns Error with context-aware suggestions
190
199
  */
191
- export declare function scriptExecutionError(details: string): ErrorWithSuggestion;
200
+ export declare function scriptExecutionError(errorMessage: string, receivedScript?: string): ErrorWithSuggestion;
192
201
  /**
193
202
  * Unexpected CDP response format.
194
203
  */
@@ -201,4 +210,24 @@ export declare function operationFailedError(operation: string, errorMessage: st
201
210
  * Internal error (should not happen in normal usage).
202
211
  */
203
212
  export declare function internalError(context: string): ErrorWithSuggestion;
213
+ /**
214
+ * No forms found on page.
215
+ */
216
+ export declare function noFormsFoundError(): ErrorWithSuggestion;
217
+ /**
218
+ * Form selection out of range.
219
+ */
220
+ export declare function formSelectionOutOfRangeError(index: number, count: number): ErrorWithSuggestion;
221
+ /**
222
+ * Form selection by name not found.
223
+ */
224
+ export declare function formSelectionByNameNotFoundError(name: string, availableNames: string[]): ErrorWithSuggestion;
225
+ /**
226
+ * Form in iframe (cross-origin or same-origin).
227
+ */
228
+ export declare function formInIframeError(iframeUrl: string, crossOrigin: boolean): ErrorWithSuggestion;
229
+ /**
230
+ * Custom component interaction warning.
231
+ */
232
+ export declare function customComponentWarning(elementType: string, suggestedAction: string): ErrorWithSuggestion;
204
233
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/ui/messages/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/ui/messages/errors.ts"],"names":[],"mappings":"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"}
@@ -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":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAEnC;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,0BAA0B,CACxC,GAAW,EACX,QAAgB,EAChB,SAAkB;IAElB,OAAO,SAAS,CACd,EAAE,EACF,gCAAgC,EAChC,EAAE,EACF,eAAe,GAAG,EAAE,EACpB,SAAS,IAAI,eAAe,SAAS,EAAE,EACvC,eAAe,cAAc,CAAC,QAAQ,CAAC,EAAE,EACzC,EAAE,EACF,cAAc,EACd,gCAAgC,EAChC,2CAA2C,EAC3C,EAAE,CACH,CAAC;AACJ,CAAC;AAgBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAA4B;IAChE,OAAO,SAAS,CACd,2BAA2B,EAC3B,OAAO,EAAE,cAAc,IAAI,iCAAiC,EAC5D,OAAO,EAAE,SAAS,IAAI,eAAe,OAAO,CAAC,SAAS,EAAE,EACxD,EAAE,EACF,sBAAsB,EACtB,aAAa,EACb,OAAO,EAAE,aAAa,IAAI,EAAE,EAC5B,OAAO,EAAE,aAAa,IAAI,yBAAyB,EACnD,OAAO,EAAE,aAAa,IAAI,cAAc,EACxC,OAAO,EAAE,YAAY,IAAI,EAAE,EAC3B,OAAO,EAAE,YAAY,IAAI,gDAAgD,CAC1E,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,OAAgB;IAC5D,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,UAAU,OAAO,KAAK,OAAO,EAAE,CAAC;IACzC,CAAC;IACD,OAAO,UAAU,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,OAAO,uCAAuC,MAAM,EAAE,CAAC;AACzD,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,qBAAqB,CAAC,SAAiB;IACrD,OAAO,SAAS,CACd,iBAAiB,SAAS,sBAAsB,EAChD,EAAE,EACF,wBAAwB,EACxB,aAAa,EACb,EAAE,EACF,UAAU,EACV,2BAA2B,EAC3B,SAAS,SAAS,EAAE,CACrB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,MAAM,UAAU,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IAEvD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,SAAS,CACd,6BAA6B,QAAQ,EAAE,EACvC,EAAE,EACF,kEAAkE,EAClE,UAAU,CAAC,OAAO,IAAI,KAAK,UAAU,CAAC,OAAO,EAAE,EAC/C,EAAE,EACF,+BAA+B,EAC/B,qCAAqC,QAAQ,GAAG,EAChD,4CAA4C,EAC5C,EAAE,EACF,kCAAkC,EAClC,iFAAiF,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,gBAAgB,CACpI,CAAC;IACJ,CAAC;IAED,IAAI,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,OAAO,SAAS,CACd,6BAA6B,QAAQ,EAAE,EACvC,EAAE,EACF,gEAAgE,EAChE,EAAE,EACF,+BAA+B,EAC/B,qCAAqC,QAAQ,GAAG,EAChD,4CAA4C,EAC5C,EAAE,EACF,2BAA2B,EAC3B,8CAA8C,EAC9C,2CAA2C,CAC5C,CAAC;IACJ,CAAC;IAED,OAAO,SAAS,CACd,6BAA6B,QAAQ,EAAE,EACvC,EAAE,EACF,cAAc,EACd,+BAA+B,EAC/B,gEAAgE,EAChE,kDAAkD,EAClD,EAAE,EACF,wCAAwC,EACxC,iFAAiF,QAAQ,SAAS,CACnG,CAAC;AACJ,CAAC;AAUD;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa,EAAE,GAAW;IAC7D,OAAO;QACL,OAAO,EAAE,SAAS,KAAK,wBAAwB,GAAG,GAAG,CAAC,SAAS;QAC/D,UAAU,EAAE,8BAA8B,GAAG,EAAE;KAChD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAa,EAAE,QAAgB;IACzE,OAAO;QACL,OAAO,EAAE,oBAAoB,KAAK,YAAY;QAC9C,UAAU,EAAE,yBAAyB,QAAQ,wBAAwB;KACtE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,OAAO;QACL,OAAO,EAAE,4BAA4B,QAAQ,GAAG;QAChD,UAAU,EAAE,oCAAoC;KACjD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,OAAO,EAAE,8BAA8B;QACvC,UAAU,EAAE,wCAAwC;KACrD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B;IACxC,OAAO;QACL,OAAO,EAAE,2CAA2C;QACpD,UAAU,EAAE,oCAAoC;KACjD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO;QACL,OAAO,EAAE,mCAAmC;QAC5C,UAAU,EAAE,KAAK;KAClB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CACzC,IAAY,EACZ,IAAY,EACZ,OAAe;IAEf,OAAO;QACL,OAAO,EAAE,UAAU,IAAI,OAAO,IAAI,mBAAmB;QACrD,UAAU,EAAE,OAAO;KACpB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,OAAO;QACL,OAAO,EAAE,+CAA+C;QACxD,UAAU,EAAE,cAAc,OAAO,2DAA2D;KAC7F,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,OAAO;QACL,OAAO,EAAE,iCAAiC;QAC1C,UAAU,EAAE,YAAY,OAAO,sEAAsE;KACtG,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAa;IACrD,OAAO;QACL,OAAO,EAAE,oBAAoB,KAAK,iBAAiB;QACnD,UAAU,EAAE,+BAA+B;KAC5C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,QAAgB;IAC3D,OAAO;QACL,OAAO,EAAE,sBAAsB,QAAQ,EAAE;QACzC,UAAU,EAAE,0EAA0E;KACvF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAAC,QAAgB;IAC5D,OAAO;QACL,OAAO,EAAE,sBAAsB,QAAQ,EAAE;QACzC,UAAU,EAAE,iDAAiD;KAC9D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO;QACL,OAAO,EAAE,qBAAqB;QAC9B,UAAU,EAAE,OAAO;KACpB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B;IACxC,OAAO;QACL,OAAO,EAAE,qDAAqD;QAC9D,UAAU,EAAE,qCAAqC;KAClD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAa;IACvD,OAAO;QACL,OAAO,EAAE,4BAA4B,KAAK,EAAE;QAC5C,UAAU,EAAE,qCAAqC;KAClD,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAClC,YAAoB,EACpB,cAAuB;IAEvB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE,YAAY;YACrB,UAAU,EAAE,4DAA4D;SACzE,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,uBAAuB,CAAC,cAAc,CAAC,CAAC;IAC3D,MAAM,eAAe,GACnB,cAAc,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC;IAEtF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,oBAAoB,eAAe,EAAE,CAAC,CAAC;IAElD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QACtE,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IACzE,CAAC;IAED,OAAO;QACL,OAAO,EAAE,YAAY;QACrB,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;KAC7B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAAC,OAAe;IAC3D,OAAO;QACL,OAAO,EAAE,4BAA4B;QACrC,UAAU,EAAE,gDAAgD,OAAO,YAAY;KAChF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,YAAoB;IAC1E,OAAO;QACL,OAAO,EAAE,aAAa,SAAS,EAAE;QACjC,UAAU,EAAE,YAAY;KACzB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,sDAAsD;KACnE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,OAAO,EAAE,iCAAiC;QAC1C,UAAU,EACR,qGAAqG;KACxG,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAa,EAAE,KAAa;IACvE,OAAO;QACL,OAAO,EAAE,cAAc,KAAK,wBAAwB,KAAK,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;QAC1F,UAAU,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,8BAA8B,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,wBAAwB;KAC7F,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAC9C,IAAY,EACZ,cAAwB;IAExB,MAAM,QAAQ,GACZ,cAAc,CAAC,MAAM,GAAG,CAAC;QACvB,CAAC,CAAC,oBAAoB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACjD,CAAC,CAAC,sBAAsB,CAAC;IAC7B,OAAO;QACL,OAAO,EAAE,2BAA2B,IAAI,GAAG;QAC3C,UAAU,EAAE,GAAG,QAAQ,+BAA+B;KACvD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB,EAAE,WAAoB;IACvE,MAAM,UAAU,GAAG,WAAW;QAC5B,CAAC,CAAC,+CAA+C;QACjD,CAAC,CAAC,mDAAmD,CAAC;IACxD,OAAO;QACL,OAAO,EAAE,6BAA6B,SAAS,EAAE;QACjD,UAAU,EAAE,WAAW;YACrB,CAAC,CAAC,GAAG,UAAU,wDAAwD;YACvE,CAAC,CAAC,GAAG,UAAU,2DAA2D;KAC7E,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,WAAmB,EACnB,eAAuB;IAEvB,OAAO;QACL,OAAO,EAAE,8BAA8B,WAAW,EAAE;QACpD,UAAU,EAAE,oCAAoC,eAAe,EAAE;KAClE,CAAC;AACJ,CAAC"}
@@ -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"}